You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by ov...@apache.org on 2019/05/30 08:40:09 UTC

[incubator-echarts-website] branch asf-site updated: add resource back to old path for temp fix

This is an automated email from the ASF dual-hosted git repository.

ovilia pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 85d43ba  add resource back to old path for temp fix
85d43ba is described below

commit 85d43ba37f72a7f14367b2d8af65227b32a4d179
Author: Ovilia <zw...@gmail.com>
AuthorDate: Thu May 30 16:39:38 2019 +0800

    add resource back to old path for temp fix
---
 asset/map/js/china-contour.js                      |    27 +
 asset/map/js/china.js                              |    27 +
 asset/map/js/province/anhui.js                     |    27 +
 asset/map/js/province/aomen.js                     |    27 +
 asset/map/js/province/beijing.js                   |    27 +
 asset/map/js/province/chongqing.js                 |    27 +
 asset/map/js/province/fujian.js                    |    27 +
 asset/map/js/province/gansu.js                     |    27 +
 asset/map/js/province/guangdong.js                 |    27 +
 asset/map/js/province/guangxi.js                   |    27 +
 asset/map/js/province/guizhou.js                   |    27 +
 asset/map/js/province/hainan.js                    |    27 +
 asset/map/js/province/hebei.js                     |    27 +
 asset/map/js/province/heilongjiang.js              |    27 +
 asset/map/js/province/henan.js                     |    27 +
 asset/map/js/province/hubei.js                     |    27 +
 asset/map/js/province/hunan.js                     |    27 +
 asset/map/js/province/jiangsu.js                   |    27 +
 asset/map/js/province/jiangxi.js                   |    27 +
 asset/map/js/province/jilin.js                     |    27 +
 asset/map/js/province/liaoning.js                  |    27 +
 asset/map/js/province/neimenggu.js                 |    27 +
 asset/map/js/province/ningxia.js                   |    27 +
 asset/map/js/province/qinghai.js                   |    27 +
 asset/map/js/province/shandong.js                  |    27 +
 asset/map/js/province/shanghai.js                  |    27 +
 asset/map/js/province/shanxi.js                    |    27 +
 asset/map/js/province/shanxi1.js                   |    27 +
 asset/map/js/province/sichuan.js                   |    27 +
 asset/map/js/province/taiwan.js                    |     1 +
 asset/map/js/province/tianjin.js                   |    27 +
 asset/map/js/province/xianggang.js                 |    27 +
 asset/map/js/province/xinjiang.js                  |    27 +
 asset/map/js/province/xizang.js                    |    27 +
 asset/map/js/province/yunnan.js                    |    27 +
 asset/map/js/province/zhejiang.js                  |    27 +
 asset/map/js/world.js                              |    27 +
 asset/map/json/china-cities.json                   |     1 +
 asset/map/json/china-contour.json                  |     1 +
 asset/map/json/china.json                          |     1 +
 asset/map/json/province/anhui.json                 |     1 +
 asset/map/json/province/aomen.json                 |     1 +
 asset/map/json/province/beijing.json               |     1 +
 asset/map/json/province/chongqing.json             |     1 +
 asset/map/json/province/fujian.json                |     1 +
 asset/map/json/province/gansu.json                 |     1 +
 asset/map/json/province/guangdong.json             |     1 +
 asset/map/json/province/guangxi.json               |     1 +
 asset/map/json/province/guizhou.json               |     1 +
 asset/map/json/province/hainan.json                |     1 +
 asset/map/json/province/hebei.json                 |     1 +
 asset/map/json/province/heilongjiang.json          |     1 +
 asset/map/json/province/henan.json                 |     1 +
 asset/map/json/province/hubei.json                 |     1 +
 asset/map/json/province/hunan.json                 |     1 +
 asset/map/json/province/jiangsu.json               |     1 +
 asset/map/json/province/jiangxi.json               |     1 +
 asset/map/json/province/jilin.json                 |     1 +
 asset/map/json/province/liaoning.json              |     1 +
 asset/map/json/province/neimenggu.json             |     1 +
 asset/map/json/province/ningxia.json               |     1 +
 asset/map/json/province/qinghai.json               |     1 +
 asset/map/json/province/shandong.json              |     1 +
 asset/map/json/province/shanghai.json              |     1 +
 asset/map/json/province/shanxi.json                |     1 +
 asset/map/json/province/shanxi1.json               |     1 +
 asset/map/json/province/sichuan.json               |     1 +
 asset/map/json/province/taiwan.json                |     1 +
 asset/map/json/province/tianjin.json               |     1 +
 asset/map/json/province/xianggang.json             |     1 +
 asset/map/json/province/xinjiang.json              |     1 +
 asset/map/json/province/xizang.json                |     1 +
 asset/map/json/province/yunnan.json                |     1 +
 asset/map/json/province/zhejiang.json              |     1 +
 asset/map/json/world.json                          |     1 +
 asset/map/thumb/anhui.png                          |   Bin 0 -> 41363 bytes
 asset/map/thumb/aomen.png                          |   Bin 0 -> 18219 bytes
 asset/map/thumb/beijing.png                        |   Bin 0 -> 44218 bytes
 asset/map/thumb/china.png                          |   Bin 0 -> 53766 bytes
 asset/map/thumb/chongqing.png                      |   Bin 0 -> 54705 bytes
 asset/map/thumb/fujian.png                         |   Bin 0 -> 38715 bytes
 asset/map/thumb/gansu.png                          |   Bin 0 -> 32987 bytes
 asset/map/thumb/guangdong.png                      |   Bin 0 -> 48558 bytes
 asset/map/thumb/guangxi.png                        |   Bin 0 -> 46502 bytes
 asset/map/thumb/guizhou.png                        |   Bin 0 -> 49483 bytes
 asset/map/thumb/hainan.png                         |   Bin 0 -> 9359 bytes
 asset/map/thumb/hebei.png                          |   Bin 0 -> 37176 bytes
 asset/map/thumb/heilongjiang.png                   |   Bin 0 -> 40500 bytes
 asset/map/thumb/henan.png                          |   Bin 0 -> 47189 bytes
 asset/map/thumb/hubei.png                          |   Bin 0 -> 41702 bytes
 asset/map/thumb/hunan.png                          |   Bin 0 -> 48773 bytes
 asset/map/thumb/jiangsu.png                        |   Bin 0 -> 41471 bytes
 asset/map/thumb/jiangxi.png                        |   Bin 0 -> 36217 bytes
 asset/map/thumb/jilin.png                          |   Bin 0 -> 31550 bytes
 asset/map/thumb/liaoning.png                       |   Bin 0 -> 45448 bytes
 asset/map/thumb/neimenggu.png                      |   Bin 0 -> 28346 bytes
 asset/map/thumb/ningxia.png                        |   Bin 0 -> 25452 bytes
 asset/map/thumb/qinghai.png                        |   Bin 0 -> 34517 bytes
 asset/map/thumb/shandong.png                       |   Bin 0 -> 41134 bytes
 asset/map/thumb/shanghai.png                       |   Bin 0 -> 39755 bytes
 asset/map/thumb/shanxi.png                         |   Bin 0 -> 31311 bytes
 asset/map/thumb/shanxi1.png                        |   Bin 0 -> 29921 bytes
 asset/map/thumb/sichuan.png                        |   Bin 0 -> 51965 bytes
 asset/map/thumb/taiwan.png                         |   Bin 0 -> 12746 bytes
 asset/map/thumb/tianjin.png                        |   Bin 0 -> 34406 bytes
 asset/map/thumb/world.png                          |   Bin 0 -> 58720 bytes
 asset/map/thumb/xianggang.png                      |   Bin 0 -> 59257 bytes
 asset/map/thumb/xinjiang.png                       |   Bin 0 -> 38837 bytes
 asset/map/thumb/xizang.png                         |   Bin 0 -> 30270 bytes
 asset/map/thumb/yunnan.png                         |   Bin 0 -> 47525 bytes
 asset/map/thumb/zhejiang.png                       |   Bin 0 -> 45268 bytes
 asset/theme/dark.js                                |   147 +
 asset/theme/infographic.js                         |   204 +
 asset/theme/macarons.js                            |   198 +
 asset/theme/roma.js                                |    67 +
 asset/theme/shine.js                               |   157 +
 asset/theme/thumb/dark.png                         |   Bin 0 -> 298476 bytes
 asset/theme/thumb/infographic.png                  |   Bin 0 -> 322926 bytes
 asset/theme/thumb/macarons.png                     |   Bin 0 -> 300799 bytes
 asset/theme/thumb/roma.png                         |   Bin 0 -> 324468 bytes
 asset/theme/thumb/shine.png                        |   Bin 0 -> 319542 bytes
 asset/theme/thumb/vintage.png                      |   Bin 0 -> 299493 bytes
 asset/theme/tool/option/area.js                    |    71 +
 asset/theme/tool/option/bar.js                     |    98 +
 asset/theme/tool/option/graph.js                   |  2963 +
 asset/theme/tool/option/map.js                     |   122 +
 asset/theme/tool/option/pie.js                     |    72 +
 asset/theme/tool/option/scatter.js                 |   182 +
 asset/theme/tool/thumb.js                          |    63 +
 asset/theme/vintage.js                             |    30 +
 builder/build.js                                   |   272 +
 builder/chunk/amd.js                               |   127 +
 builder/chunk/end-3.js                             |    19 +
 builder/chunk/end.js                               |    35 +
 builder/chunk/start-3.js                           |    14 +
 builder/chunk/start.js                             |     1 +
 builder/echarts.html                               |    70 +
 builder/lib/FileSaver.js                           |   248 +
 builder/lib/escodegen.js                           |  2965 +
 builder/lib/esl.js                                 |  1643 +
 builder/lib/esprima.js                             |  5739 ++
 builder/lib/estraverse.js                          |   853 +
 builder/lib/etpl.js                                |  1658 +
 builder/lib/rollup.browser.js                      | 10626 +++
 builder/lib/uglify.js                              |     5 +
 builder/mangleString.js                            |   166 +
 builder/pre/removeDEV.js                           |    32 +
 builder/replaceDefine.js                           |    50 +
 builder/src/echarts/CoordinateSystem.js            |    54 +
 builder/src/echarts/ExtensionAPI.js                |    28 +
 .../src/echarts/action/createDataSelectAction.js   |    54 +
 builder/src/echarts/action/geoRoam.js              |    60 +
 builder/src/echarts/action/roamHelper.js           |    64 +
 builder/src/echarts/chart/bar.js                   |    36 +
 builder/src/echarts/chart/bar/BarSeries.js         |    47 +
 builder/src/echarts/chart/bar/BarView.js           |   326 +
 builder/src/echarts/chart/bar/BaseBarSeries.js     |    75 +
 .../src/echarts/chart/bar/PictorialBarSeries.js    |    61 +
 builder/src/echarts/chart/bar/PictorialBarView.js  |   643 +
 builder/src/echarts/chart/bar/barItemStyle.js      |    33 +
 builder/src/echarts/chart/bar/helper.js            |    39 +
 builder/src/echarts/chart/boxplot.js               |    25 +
 builder/src/echarts/chart/boxplot/BoxplotSeries.js |    92 +
 builder/src/echarts/chart/boxplot/BoxplotView.js   |   143 +
 builder/src/echarts/chart/boxplot/boxplotLayout.js |   176 +
 builder/src/echarts/chart/boxplot/boxplotVisual.js |    41 +
 builder/src/echarts/chart/candlestick.js           |    27 +
 .../echarts/chart/candlestick/CandlestickSeries.js |   104 +
 .../echarts/chart/candlestick/CandlestickView.js   |   251 +
 .../echarts/chart/candlestick/candlestickLayout.js |   181 +
 .../echarts/chart/candlestick/candlestickVisual.js |    69 +
 .../src/echarts/chart/candlestick/preprocessor.js  |    31 +
 builder/src/echarts/chart/chord.js                 |    27 +
 builder/src/echarts/chart/chord/ChordSeries.js     |    69 +
 builder/src/echarts/chart/chord/ChordView.js       |    82 +
 builder/src/echarts/chart/chord/Ribbon.js          |    64 +
 .../src/echarts/chart/chord/chordCircularLayout.js |   133 +
 builder/src/echarts/chart/custom.js                |   617 +
 builder/src/echarts/chart/effectScatter.js         |    25 +
 .../chart/effectScatter/EffectScatterSeries.js     |    63 +
 .../chart/effectScatter/EffectScatterView.js       |    61 +
 builder/src/echarts/chart/funnel.js                |    27 +
 builder/src/echarts/chart/funnel/FunnelSeries.js   |   105 +
 builder/src/echarts/chart/funnel/FunnelView.js     |   180 +
 builder/src/echarts/chart/funnel/funnelLayout.js   |   192 +
 builder/src/echarts/chart/gauge.js                 |    20 +
 builder/src/echarts/chart/gauge/GaugeSeries.js     |   128 +
 builder/src/echarts/chart/gauge/GaugeView.js       |   348 +
 builder/src/echarts/chart/gauge/PointerPath.js     |    45 +
 builder/src/echarts/chart/graph.js                 |    41 +
 builder/src/echarts/chart/graph/GraphSeries.js     |   239 +
 builder/src/echarts/chart/graph/GraphView.js       |   368 +
 builder/src/echarts/chart/graph/adjustEdge.js      |   175 +
 builder/src/echarts/chart/graph/backwardCompat.js  |    18 +
 builder/src/echarts/chart/graph/categoryFilter.js  |    53 +
 builder/src/echarts/chart/graph/categoryVisual.js  |    51 +
 builder/src/echarts/chart/graph/circularLayout.js  |    26 +
 .../echarts/chart/graph/circularLayoutHelper.js    |    61 +
 builder/src/echarts/chart/graph/createView.js      |    82 +
 builder/src/echarts/chart/graph/edgeVisual.js      |    68 +
 builder/src/echarts/chart/graph/forceHelper.js     |   155 +
 builder/src/echarts/chart/graph/forceLayout.js     |   156 +
 builder/src/echarts/chart/graph/graphAction.js     |    47 +
 builder/src/echarts/chart/graph/simpleLayout.js    |    60 +
 .../src/echarts/chart/graph/simpleLayoutHelper.js  |    47 +
 builder/src/echarts/chart/heatmap.js               |    20 +
 builder/src/echarts/chart/heatmap/HeatmapLayer.js  |   167 +
 builder/src/echarts/chart/heatmap/HeatmapSeries.js |    51 +
 builder/src/echarts/chart/heatmap/HeatmapView.js   |   253 +
 builder/src/echarts/chart/helper/EffectLine.js     |   185 +
 builder/src/echarts/chart/helper/EffectPolyline.js |   124 +
 builder/src/echarts/chart/helper/EffectSymbol.js   |   231 +
 builder/src/echarts/chart/helper/LargeLineDraw.js  |   248 +
 .../src/echarts/chart/helper/LargeSymbolDraw.js    |   263 +
 builder/src/echarts/chart/helper/Line.js           |   366 +
 builder/src/echarts/chart/helper/LineDraw.js       |   167 +
 builder/src/echarts/chart/helper/LinePath.js       |    58 +
 builder/src/echarts/chart/helper/Polyline.js       |    92 +
 builder/src/echarts/chart/helper/Symbol.js         |   365 +
 builder/src/echarts/chart/helper/SymbolDraw.js     |   198 +
 .../chart/helper/createGraphFromNodeEdge.js        |    93 +
 .../chart/helper/createGraphFromNodeMatrix.js      |   114 +
 .../echarts/chart/helper/createListFromArray.js    |   125 +
 .../src/echarts/chart/helper/createListSimply.js   |    48 +
 .../echarts/chart/helper/createRenderPlanner.js    |    35 +
 .../chart/helper/focusNodeAdjacencyAction.js       |    44 +
 builder/src/echarts/chart/helper/labelHelper.js    |    42 +
 builder/src/echarts/chart/helper/treeHelper.js     |    75 +
 .../src/echarts/chart/helper/whiskerBoxCommon.js   |   114 +
 builder/src/echarts/chart/line.js                  |    30 +
 builder/src/echarts/chart/line/LineSeries.js       |    80 +
 builder/src/echarts/chart/line/LineView.js         |   722 +
 builder/src/echarts/chart/line/helper.js           |   108 +
 .../src/echarts/chart/line/lineAnimationDiff.js    |   165 +
 builder/src/echarts/chart/line/poly.js             |   356 +
 builder/src/echarts/chart/lines.js                 |    25 +
 builder/src/echarts/chart/lines/LinesSeries.js     |   296 +
 builder/src/echarts/chart/lines/LinesView.js       |   153 +
 builder/src/echarts/chart/lines/linesLayout.js     |    96 +
 builder/src/echarts/chart/lines/linesVisual.js     |    56 +
 builder/src/echarts/chart/map.js                   |    45 +
 builder/src/echarts/chart/map/MapSeries.js         |   224 +
 builder/src/echarts/chart/map/MapView.js           |   200 +
 builder/src/echarts/chart/map/backwardCompat.js    |    31 +
 builder/src/echarts/chart/map/mapDataStatistic.js  |    93 +
 builder/src/echarts/chart/map/mapSymbolLayout.js   |    65 +
 builder/src/echarts/chart/map/mapVisual.js         |    30 +
 builder/src/echarts/chart/parallel.js              |    24 +
 .../src/echarts/chart/parallel/ParallelSeries.js   |   105 +
 builder/src/echarts/chart/parallel/ParallelView.js |   248 +
 .../src/echarts/chart/parallel/parallelVisual.js   |    56 +
 builder/src/echarts/chart/pictorialBar.js          |    29 +
 builder/src/echarts/chart/pie.js                   |    42 +
 builder/src/echarts/chart/pie/PieSeries.js         |   146 +
 builder/src/echarts/chart/pie/PieView.js           |   331 +
 builder/src/echarts/chart/pie/labelLayout.js       |   234 +
 builder/src/echarts/chart/pie/pieLayout.js         |   142 +
 builder/src/echarts/chart/radar.js                 |    33 +
 builder/src/echarts/chart/radar/RadarSeries.js     |    72 +
 builder/src/echarts/chart/radar/RadarView.js       |   196 +
 builder/src/echarts/chart/radar/backwardCompat.js  |    55 +
 builder/src/echarts/chart/radar/radarLayout.js     |    46 +
 builder/src/echarts/chart/sankey.js                |    26 +
 builder/src/echarts/chart/sankey/SankeySeries.js   |   145 +
 builder/src/echarts/chart/sankey/SankeyView.js     |   396 +
 builder/src/echarts/chart/sankey/sankeyAction.js   |    39 +
 builder/src/echarts/chart/sankey/sankeyLayout.js   |   569 +
 builder/src/echarts/chart/sankey/sankeyVisual.js   |    64 +
 builder/src/echarts/chart/scatter.js               |    45 +
 builder/src/echarts/chart/scatter/ScatterSeries.js |    83 +
 builder/src/echarts/chart/scatter/ScatterView.js   |    89 +
 builder/src/echarts/chart/sunburst.js              |    29 +
 .../src/echarts/chart/sunburst/SunburstPiece.js    |   367 +
 .../src/echarts/chart/sunburst/SunburstSeries.js   |   178 +
 builder/src/echarts/chart/sunburst/SunburstView.js |   218 +
 .../src/echarts/chart/sunburst/sunburstAction.js   |    83 +
 .../src/echarts/chart/sunburst/sunburstLayout.js   |   188 +
 builder/src/echarts/chart/themeRiver.js            |    28 +
 .../echarts/chart/themeRiver/ThemeRiverSeries.js   |   293 +
 .../src/echarts/chart/themeRiver/ThemeRiverView.js |   159 +
 .../echarts/chart/themeRiver/themeRiverLayout.js   |   154 +
 .../echarts/chart/themeRiver/themeRiverVisual.js   |    45 +
 builder/src/echarts/chart/tree.js                  |    26 +
 builder/src/echarts/chart/tree/TreeSeries.js       |   153 +
 builder/src/echarts/chart/tree/TreeView.js         |   472 +
 builder/src/echarts/chart/tree/layoutHelper.js     |   333 +
 builder/src/echarts/chart/tree/traversalHelper.js  |    77 +
 builder/src/echarts/chart/tree/treeAction.js       |    61 +
 builder/src/echarts/chart/tree/treeLayout.js       |   123 +
 builder/src/echarts/chart/treemap.js               |    26 +
 builder/src/echarts/chart/treemap/Breadcrumb.js    |   168 +
 builder/src/echarts/chart/treemap/TreemapSeries.js |   370 +
 builder/src/echarts/chart/treemap/TreemapView.js   |   865 +
 builder/src/echarts/chart/treemap/helper.js        |    71 +
 builder/src/echarts/chart/treemap/treemapAction.js |    61 +
 builder/src/echarts/chart/treemap/treemapLayout.js |   540 +
 builder/src/echarts/chart/treemap/treemapVisual.js |   193 +
 builder/src/echarts/component/angleAxis.js         |    20 +
 builder/src/echarts/component/axis.js              |    20 +
 .../src/echarts/component/axis/AngleAxisView.js    |   236 +
 builder/src/echarts/component/axis/AxisBuilder.js  |   599 +
 builder/src/echarts/component/axis/AxisView.js     |   111 +
 .../echarts/component/axis/CartesianAxisView.js    |   227 +
 .../src/echarts/component/axis/ParallelAxisView.js |   168 +
 .../src/echarts/component/axis/RadiusAxisView.js   |   149 +
 .../src/echarts/component/axis/SingleAxisView.js   |   108 +
 .../echarts/component/axis/parallelAxisAction.js   |    50 +
 builder/src/echarts/component/axisPointer.js       |    54 +
 .../component/axisPointer/AxisPointerModel.js      |   107 +
 .../component/axisPointer/AxisPointerView.js       |    57 +
 .../component/axisPointer/BaseAxisPointer.js       |   497 +
 .../component/axisPointer/CartesianAxisPointer.js  |   125 +
 .../src/echarts/component/axisPointer/IAxisPointer |    41 +
 .../component/axisPointer/PolarAxisPointer.js      |   123 +
 .../component/axisPointer/SingleAxisPointer.js     |   121 +
 .../echarts/component/axisPointer/axisTrigger.js   |   403 +
 .../component/axisPointer/findPointFromSeries.js   |    67 +
 .../component/axisPointer/globalListener.js        |   134 +
 .../echarts/component/axisPointer/modelHelper.js   |   299 +
 .../echarts/component/axisPointer/viewHelper.js    |   217 +
 builder/src/echarts/component/brush.js             |    30 +
 builder/src/echarts/component/brush/BrushModel.js  |   152 +
 builder/src/echarts/component/brush/BrushView.js   |   105 +
 builder/src/echarts/component/brush/brushAction.js |    68 +
 .../src/echarts/component/brush/preprocessor.js    |    73 +
 builder/src/echarts/component/brush/selector.js    |   136 +
 .../src/echarts/component/brush/visualEncoding.js  |   290 +
 builder/src/echarts/component/calendar.js          |    26 +
 .../src/echarts/component/calendar/CalendarView.js |   423 +
 builder/src/echarts/component/dataZoom.js          |    31 +
 .../src/echarts/component/dataZoom/AxisProxy.js    |   473 +
 .../echarts/component/dataZoom/DataZoomModel.js    |   537 +
 .../src/echarts/component/dataZoom/DataZoomView.js |    82 +
 .../echarts/component/dataZoom/InsideZoomModel.js  |    39 +
 .../echarts/component/dataZoom/InsideZoomView.js   |   222 +
 .../echarts/component/dataZoom/SelectZoomModel.js  |    22 +
 .../echarts/component/dataZoom/SelectZoomView.js   |    22 +
 .../echarts/component/dataZoom/SliderZoomModel.js  |    90 +
 .../echarts/component/dataZoom/SliderZoomView.js   |   726 +
 .../echarts/component/dataZoom/dataZoomAction.js   |    41 +
 .../component/dataZoom/dataZoomProcessor.js        |    81 +
 builder/src/echarts/component/dataZoom/helper.js   |   144 +
 builder/src/echarts/component/dataZoom/history.js  |   115 +
 builder/src/echarts/component/dataZoom/roams.js    |   204 +
 .../echarts/component/dataZoom/typeDefaulter.js    |    23 +
 builder/src/echarts/component/dataZoomInside.js    |    29 +
 builder/src/echarts/component/dataZoomSelect.js    |    29 +
 builder/src/echarts/component/dataset.js           |    52 +
 builder/src/echarts/component/geo.js               |    58 +
 builder/src/echarts/component/geo/GeoView.js       |    47 +
 builder/src/echarts/component/graphic.js           |   476 +
 builder/src/echarts/component/grid.js              |    21 +
 builder/src/echarts/component/gridSimple.js        |    47 +
 .../echarts/component/helper/BrushController.js    |   876 +
 .../echarts/component/helper/BrushTargetManager.js |   390 +
 builder/src/echarts/component/helper/MapDraw.js    |   395 +
 .../src/echarts/component/helper/RoamController.js |   260 +
 .../src/echarts/component/helper/brushHelper.js    |    46 +
 .../src/echarts/component/helper/cursorHelper.js   |    34 +
 .../echarts/component/helper/interactionMutex.js   |    53 +
 .../src/echarts/component/helper/listComponent.js  |    62 +
 builder/src/echarts/component/helper/roamHelper.js |    64 +
 .../echarts/component/helper/selectableMixin.js    |   102 +
 builder/src/echarts/component/helper/sliderMove.js |    98 +
 builder/src/echarts/component/legend.js            |    31 +
 .../src/echarts/component/legend/LegendModel.js    |   228 +
 builder/src/echarts/component/legend/LegendView.js |   323 +
 .../component/legend/ScrollableLegendModel.js      |    89 +
 .../component/legend/ScrollableLegendView.js       |   383 +
 .../src/echarts/component/legend/legendAction.js   |    88 +
 .../src/echarts/component/legend/legendFilter.js   |    37 +
 .../component/legend/scrollableLegendAction.js     |    36 +
 builder/src/echarts/component/legendScroll.js      |    26 +
 builder/src/echarts/component/markArea.js          |    25 +
 builder/src/echarts/component/markLine.js          |    25 +
 builder/src/echarts/component/markPoint.js         |    26 +
 .../src/echarts/component/marker/MarkAreaModel.js  |    48 +
 .../src/echarts/component/marker/MarkAreaView.js   |   293 +
 .../src/echarts/component/marker/MarkLineModel.js  |    49 +
 .../src/echarts/component/marker/MarkLineView.js   |   336 +
 .../src/echarts/component/marker/MarkPointModel.js |    45 +
 .../src/echarts/component/marker/MarkPointView.js  |   155 +
 .../src/echarts/component/marker/MarkerModel.js    |   135 +
 builder/src/echarts/component/marker/MarkerView.js |    46 +
 .../src/echarts/component/marker/markerHelper.js   |   217 +
 builder/src/echarts/component/parallel.js          |   114 +
 builder/src/echarts/component/parallelAxis.js      |    21 +
 builder/src/echarts/component/polar.js             |    32 +
 builder/src/echarts/component/radar.js             |    21 +
 builder/src/echarts/component/radar/RadarView.js   |   178 +
 builder/src/echarts/component/radiusAxis.js        |    20 +
 builder/src/echarts/component/singleAxis.js        |    27 +
 builder/src/echarts/component/timeline.js          |    29 +
 .../component/timeline/SliderTimelineModel.js      |   118 +
 .../component/timeline/SliderTimelineView.js       |   615 +
 .../src/echarts/component/timeline/TimelineAxis.js |    70 +
 .../echarts/component/timeline/TimelineModel.js    |   196 +
 .../src/echarts/component/timeline/TimelineView.js |    22 +
 .../src/echarts/component/timeline/preprocessor.js |   101 +
 .../echarts/component/timeline/timelineAction.js   |    52 +
 .../echarts/component/timeline/typeDefaulter.js    |    23 +
 builder/src/echarts/component/title.js             |   210 +
 builder/src/echarts/component/toolbox.js           |    25 +
 .../src/echarts/component/toolbox/ToolboxModel.js  |    65 +
 .../src/echarts/component/toolbox/ToolboxView.js   |   232 +
 .../src/echarts/component/toolbox/feature/Brush.js |   130 +
 .../echarts/component/toolbox/feature/DataView.js  |   485 +
 .../echarts/component/toolbox/feature/DataZoom.js  |   296 +
 .../echarts/component/toolbox/feature/MagicType.js |   186 +
 .../echarts/component/toolbox/feature/Restore.js   |    56 +
 .../component/toolbox/feature/SaveAsImage.js       |    90 +
 .../echarts/component/toolbox/featureManager.js    |    25 +
 builder/src/echarts/component/tooltip.js           |    44 +
 .../echarts/component/tooltip/TooltipContent.js    |   269 +
 .../src/echarts/component/tooltip/TooltipModel.js  |    98 +
 .../component/tooltip/TooltipRichContent.js        |   174 +
 .../src/echarts/component/tooltip/TooltipView.js   |   741 +
 builder/src/echarts/component/visualMap.js         |    24 +
 .../echarts/component/visualMap/ContinuousModel.js |   250 +
 .../echarts/component/visualMap/ContinuousView.js  |   766 +
 .../echarts/component/visualMap/PiecewiseModel.js  |   512 +
 .../echarts/component/visualMap/PiecewiseView.js   |   210 +
 .../echarts/component/visualMap/VisualMapModel.js  |   514 +
 .../echarts/component/visualMap/VisualMapView.js   |   163 +
 builder/src/echarts/component/visualMap/helper.js  |    69 +
 .../echarts/component/visualMap/preprocessor.js    |    59 +
 .../echarts/component/visualMap/typeDefaulter.js   |    23 +
 .../echarts/component/visualMap/visualEncoding.js  |    92 +
 .../echarts/component/visualMap/visualMapAction.js |    33 +
 .../src/echarts/component/visualMapContinuous.js   |    30 +
 .../src/echarts/component/visualMapPiecewise.js    |    30 +
 builder/src/echarts/config.js                      |    37 +
 builder/src/echarts/coord/Axis.js                  |   329 +
 builder/src/echarts/coord/ICoordinateSystem        |    85 +
 builder/src/echarts/coord/View.js                  |   288 +
 builder/src/echarts/coord/axisDefault.js           |   169 +
 builder/src/echarts/coord/axisHelper.js            |   377 +
 builder/src/echarts/coord/axisModelCommonMixin.js  |    82 +
 builder/src/echarts/coord/axisModelCreator.js      |    88 +
 builder/src/echarts/coord/axisTickLabelBuilder.js  |   329 +
 builder/src/echarts/coord/calendar/Calendar.js     |   403 +
 .../src/echarts/coord/calendar/CalendarModel.js    |   135 +
 .../src/echarts/coord/calendar/prepareCustom.js    |    44 +
 builder/src/echarts/coord/cartesian/Axis2D.js      |   124 +
 builder/src/echarts/coord/cartesian/AxisModel.js   |    82 +
 builder/src/echarts/coord/cartesian/Cartesian.js   |   118 +
 builder/src/echarts/coord/cartesian/Cartesian2D.js |   120 +
 builder/src/echarts/coord/cartesian/Grid.js        |   571 +
 builder/src/echarts/coord/cartesian/GridModel.js   |    48 +
 .../echarts/coord/cartesian/cartesianAxisHelper.js |    85 +
 .../src/echarts/coord/cartesian/prepareCustom.js   |    51 +
 builder/src/echarts/coord/geo/Geo.js               |   193 +
 builder/src/echarts/coord/geo/GeoModel.js          |   141 +
 builder/src/echarts/coord/geo/Region.js            |   185 +
 builder/src/echarts/coord/geo/fix/diaoyuIsland.js  |    31 +
 builder/src/echarts/coord/geo/fix/geoCoord.js      |    34 +
 builder/src/echarts/coord/geo/fix/nanhai.js        |    43 +
 builder/src/echarts/coord/geo/fix/textCoord.js     |    38 +
 builder/src/echarts/coord/geo/geoCreator.js        |   202 +
 builder/src/echarts/coord/geo/geoJSONLoader.js     |    82 +
 builder/src/echarts/coord/geo/geoSVGLoader.js      |   132 +
 builder/src/echarts/coord/geo/geoSourceManager.js  |   100 +
 builder/src/echarts/coord/geo/mapDataStorage.js    |    79 +
 builder/src/echarts/coord/geo/parseGeoJson.js      |   131 +
 builder/src/echarts/coord/geo/prepareCustom.js     |    56 +
 builder/src/echarts/coord/parallel/AxisModel.js    |   130 +
 builder/src/echarts/coord/parallel/Parallel.js     |   486 +
 builder/src/echarts/coord/parallel/ParallelAxis.js |    67 +
 .../src/echarts/coord/parallel/ParallelModel.js    |   124 +
 .../src/echarts/coord/parallel/parallelCreator.js  |    52 +
 .../echarts/coord/parallel/parallelPreprocessor.js |    66 +
 builder/src/echarts/coord/polar/AngleAxis.js       |   105 +
 builder/src/echarts/coord/polar/AxisModel.js       |    67 +
 builder/src/echarts/coord/polar/Polar.js           |   236 +
 builder/src/echarts/coord/polar/PolarModel.js      |    50 +
 builder/src/echarts/coord/polar/RadiusAxis.js      |    49 +
 builder/src/echarts/coord/polar/polarCreator.js    |   136 +
 builder/src/echarts/coord/polar/prepareCustom.js   |    62 +
 builder/src/echarts/coord/radar/IndicatorAxis.js   |    49 +
 builder/src/echarts/coord/radar/Radar.js           |   255 +
 builder/src/echarts/coord/radar/RadarModel.js      |   131 +
 builder/src/echarts/coord/single/AxisModel.js      |    91 +
 builder/src/echarts/coord/single/Single.js         |   259 +
 builder/src/echarts/coord/single/SingleAxis.js     |   104 +
 builder/src/echarts/coord/single/prepareCustom.js  |    47 +
 .../src/echarts/coord/single/singleAxisHelper.js   |    74 +
 builder/src/echarts/coord/single/singleCreator.js  |    58 +
 builder/src/echarts/data/DataDiffer.js             |   142 +
 builder/src/echarts/data/Graph.js                  |   550 +
 builder/src/echarts/data/List.js                   |  2015 +
 builder/src/echarts/data/OrdinalMeta.js            |   141 +
 builder/src/echarts/data/Source.js                 |   137 +
 builder/src/echarts/data/Tree.js                   |   543 +
 .../src/echarts/data/helper/completeDimensions.js  |   273 +
 .../src/echarts/data/helper/createDimensions.js    |    46 +
 builder/src/echarts/data/helper/dataProvider.js    |   327 +
 builder/src/echarts/data/helper/dataStackHelper.js |   152 +
 builder/src/echarts/data/helper/dimensionHelper.js |   123 +
 builder/src/echarts/data/helper/linkList.js        |   145 +
 builder/src/echarts/data/helper/sourceHelper.js    |   527 +
 builder/src/echarts/data/helper/sourceType.js      |    28 +
 builder/src/echarts/echarts.js                     |  2120 +
 builder/src/echarts/export.js                      |    57 +
 builder/src/echarts/helper.js                      |    99 +
 builder/src/echarts/lang.js                        |   115 +
 builder/src/echarts/langEN.js                      |    57 +
 builder/src/echarts/langFI.js                      |    57 +
 builder/src/echarts/langTH.js                      |    57 +
 builder/src/echarts/layout/barGrid.js              |   417 +
 builder/src/echarts/layout/barPolar.js             |   264 +
 builder/src/echarts/layout/points.js               |    89 +
 builder/src/echarts/loading/default.js             |   107 +
 builder/src/echarts/model/Component.js             |   211 +
 builder/src/echarts/model/Global.js                |   678 +
 builder/src/echarts/model/Model.js                 |   204 +
 builder/src/echarts/model/OptionManager.js         |   429 +
 builder/src/echarts/model/Series.js                |   560 +
 builder/src/echarts/model/globalDefault.js         |    68 +
 builder/src/echarts/model/mixin/areaStyle.js       |    25 +
 builder/src/echarts/model/mixin/boxLayout.js       |    30 +
 builder/src/echarts/model/mixin/colorPalette.js    |    76 +
 builder/src/echarts/model/mixin/dataFormat.js      |   125 +
 builder/src/echarts/model/mixin/itemStyle.js       |    32 +
 builder/src/echarts/model/mixin/lineStyle.js       |    38 +
 builder/src/echarts/model/mixin/makeStyleMapper.js |    49 +
 builder/src/echarts/model/mixin/textStyle.js       |    48 +
 builder/src/echarts/model/referHelper.js           |   131 +
 builder/src/echarts/preprocessor/backwardCompat.js |   111 +
 .../src/echarts/preprocessor/helper/compatStyle.js |   295 +
 builder/src/echarts/processor/dataFilter.js        |    45 +
 builder/src/echarts/processor/dataSample.js        |   109 +
 builder/src/echarts/processor/dataStack.js         |   112 +
 builder/src/echarts/scale/Interval.js              |   198 +
 builder/src/echarts/scale/Log.js                   |   180 +
 builder/src/echarts/scale/Ordinal.js               |   125 +
 builder/src/echarts/scale/Scale.js                 |   173 +
 builder/src/echarts/scale/Time.js                  |   217 +
 builder/src/echarts/scale/helper.js                |   118 +
 builder/src/echarts/stream/Scheduler.js            |   529 +
 builder/src/echarts/stream/task.js                 |   314 +
 builder/src/echarts/theme/dark.js                  |   148 +
 builder/src/echarts/theme/light.js                 |    23 +
 builder/src/echarts/util/KDTree.js                 |   268 +
 builder/src/echarts/util/animation.js              |   115 +
 builder/src/echarts/util/clazz.js                  |   247 +
 builder/src/echarts/util/component.js              |   189 +
 builder/src/echarts/util/format.js                 |   231 +
 builder/src/echarts/util/graphic.js                |  1168 +
 builder/src/echarts/util/layout.js                 |   478 +
 builder/src/echarts/util/model.js                  |   493 +
 builder/src/echarts/util/number.js                 |   501 +
 builder/src/echarts/util/quickSelect.js            |   102 +
 builder/src/echarts/util/symbol.js                 |   314 +
 builder/src/echarts/util/throttle.js               |   167 +
 builder/src/echarts/view/Chart.js                  |   249 +
 builder/src/echarts/view/Component.js              |    63 +
 builder/src/echarts/visual/VisualMapping.js        |   586 +
 builder/src/echarts/visual/aria.js                 |   146 +
 builder/src/echarts/visual/dataColor.js            |    65 +
 builder/src/echarts/visual/seriesColor.js          |    55 +
 builder/src/echarts/visual/symbol.js               |    77 +
 builder/src/echarts/visual/visualDefault.js        |    67 +
 builder/src/echarts/visual/visualSolution.js       |   207 +
 builder/src/echarts3/CoordinateSystem.js           |    37 +
 builder/src/echarts3/ExtensionAPI.js               |    10 +
 .../src/echarts3/action/createDataSelectAction.js  |    36 +
 builder/src/echarts3/action/geoRoam.js             |    42 +
 builder/src/echarts3/action/roamHelper.js          |    45 +
 builder/src/echarts3/chart/bar.js                  |    16 +
 builder/src/echarts3/chart/bar/BarSeries.js        |     6 +
 builder/src/echarts3/chart/bar/BarView.js          |   222 +
 builder/src/echarts3/chart/bar/BaseBarSeries.js    |    58 +
 .../src/echarts3/chart/bar/PictorialBarSeries.js   |    43 +
 builder/src/echarts3/chart/bar/PictorialBarView.js |   625 +
 builder/src/echarts3/chart/bar/barItemStyle.js     |    15 +
 builder/src/echarts3/chart/bar/helper.js           |    20 +
 builder/src/echarts3/chart/boxplot.js              |     7 +
 .../src/echarts3/chart/boxplot/BoxplotSeries.js    |    59 +
 builder/src/echarts3/chart/boxplot/BoxplotView.js  |    35 +
 .../src/echarts3/chart/boxplot/boxplotLayout.js    |   170 +
 .../src/echarts3/chart/boxplot/boxplotVisual.js    |    23 +
 builder/src/echarts3/chart/candlestick.js          |     9 +
 .../chart/candlestick/CandlestickSeries.js         |    71 +
 .../echarts3/chart/candlestick/CandlestickView.js  |    36 +
 .../chart/candlestick/candlestickLayout.js         |   122 +
 .../chart/candlestick/candlestickVisual.js         |    23 +
 .../src/echarts3/chart/candlestick/preprocessor.js |    13 +
 builder/src/echarts3/chart/chord.js                |    10 +
 builder/src/echarts3/chart/chord/ChordSeries.js    |    53 +
 builder/src/echarts3/chart/chord/ChordView.js      |    64 +
 builder/src/echarts3/chart/chord/Ribbon.js         |    46 +
 .../echarts3/chart/chord/chordCircularLayout.js    |   114 +
 builder/src/echarts3/chart/custom.js               |   463 +
 builder/src/echarts3/chart/effectScatter.js        |     8 +
 .../chart/effectScatter/EffectScatterSeries.js     |    48 +
 .../chart/effectScatter/EffectScatterView.js       |    22 +
 builder/src/echarts3/chart/funnel.js               |    10 +
 builder/src/echarts3/chart/funnel/FunnelSeries.js  |    97 +
 builder/src/echarts3/chart/funnel/FunnelView.js    |   162 +
 builder/src/echarts3/chart/funnel/funnelLayout.js  |   159 +
 builder/src/echarts3/chart/gauge.js                |     2 +
 builder/src/echarts3/chart/gauge/GaugeSeries.js    |   114 +
 builder/src/echarts3/chart/gauge/GaugeView.js      |   326 +
 builder/src/echarts3/chart/gauge/PointerPath.js    |    27 +
 builder/src/echarts3/chart/graph.js                |    24 +
 builder/src/echarts3/chart/graph/GraphSeries.js    |   224 +
 builder/src/echarts3/chart/graph/GraphView.js      |   342 +
 builder/src/echarts3/chart/graph/adjustEdge.js     |   157 +
 builder/src/echarts3/chart/graph/backwardCompat.js |     0
 builder/src/echarts3/chart/graph/categoryFilter.js |    35 +
 builder/src/echarts3/chart/graph/categoryVisual.js |    33 +
 builder/src/echarts3/chart/graph/circularLayout.js |     8 +
 .../echarts3/chart/graph/circularLayoutHelper.js   |    43 +
 builder/src/echarts3/chart/graph/createView.js     |    64 +
 builder/src/echarts3/chart/graph/edgeVisual.js     |    50 +
 builder/src/echarts3/chart/graph/forceHelper.js    |   135 +
 builder/src/echarts3/chart/graph/forceLayout.js    |   138 +
 builder/src/echarts3/chart/graph/graphAction.js    |    53 +
 builder/src/echarts3/chart/graph/simpleLayout.js   |    37 +
 .../src/echarts3/chart/graph/simpleLayoutHelper.js |    29 +
 builder/src/echarts3/chart/heatmap.js              |     2 +
 builder/src/echarts3/chart/heatmap/HeatmapLayer.js |   146 +
 .../src/echarts3/chart/heatmap/HeatmapSeries.js    |    23 +
 builder/src/echarts3/chart/heatmap/HeatmapView.js  |   211 +
 builder/src/echarts3/chart/helper/EffectLine.js    |   166 +
 .../src/echarts3/chart/helper/EffectPolyline.js    |   105 +
 builder/src/echarts3/chart/helper/EffectSymbol.js  |   212 +
 builder/src/echarts3/chart/helper/LargeLineDraw.js |   121 +
 .../src/echarts3/chart/helper/LargeSymbolDraw.js   |   128 +
 builder/src/echarts3/chart/helper/Line.js          |   341 +
 builder/src/echarts3/chart/helper/LineDraw.js      |    82 +
 builder/src/echarts3/chart/helper/LinePath.js      |    39 +
 builder/src/echarts3/chart/helper/Polyline.js      |    73 +
 builder/src/echarts3/chart/helper/Symbol.js        |   303 +
 builder/src/echarts3/chart/helper/SymbolDraw.js    |   118 +
 .../src/echarts3/chart/helper/WhiskerBoxDraw.js    |   197 +
 .../chart/helper/createGraphFromNodeEdge.js        |    65 +
 .../chart/helper/createGraphFromNodeMatrix.js      |    92 +
 .../echarts3/chart/helper/createListFromArray.js   |   255 +
 builder/src/echarts3/chart/helper/labelHelper.js   |    21 +
 .../src/echarts3/chart/helper/whiskerBoxCommon.js  |    98 +
 builder/src/echarts3/chart/line.js                 |    13 +
 builder/src/echarts3/chart/line/LineSeries.js      |    65 +
 builder/src/echarts3/chart/line/LineView.js        |   653 +
 .../src/echarts3/chart/line/lineAnimationDiff.js   |   170 +
 builder/src/echarts3/chart/line/poly.js            |   220 +
 builder/src/echarts3/chart/lines.js                |     7 +
 builder/src/echarts3/chart/lines/LinesSeries.js    |   129 +
 builder/src/echarts3/chart/lines/LinesView.js      |    84 +
 builder/src/echarts3/chart/lines/linesLayout.js    |    29 +
 builder/src/echarts3/chart/lines/linesVisual.js    |    32 +
 builder/src/echarts3/chart/map.js                  |    27 +
 builder/src/echarts3/chart/map/MapSeries.js        |   191 +
 builder/src/echarts3/chart/map/MapView.js          |   130 +
 builder/src/echarts3/chart/map/backwardCompat.js   |    13 +
 builder/src/echarts3/chart/map/mapDataStatistic.js |    76 +
 builder/src/echarts3/chart/map/mapSymbolLayout.js  |    47 +
 builder/src/echarts3/chart/map/mapVisual.js        |    12 +
 builder/src/echarts3/chart/parallel.js             |     6 +
 .../src/echarts3/chart/parallel/ParallelSeries.js  |   140 +
 .../src/echarts3/chart/parallel/ParallelView.js    |   218 +
 .../src/echarts3/chart/parallel/parallelVisual.js  |    31 +
 builder/src/echarts3/chart/pictorialBar.js         |    11 +
 builder/src/echarts3/chart/pie.js                  |    24 +
 builder/src/echarts3/chart/pie/PieSeries.js        |   125 +
 builder/src/echarts3/chart/pie/PieView.js          |   311 +
 builder/src/echarts3/chart/pie/labelLayout.js      |   209 +
 builder/src/echarts3/chart/pie/pieLayout.js        |   123 +
 builder/src/echarts3/chart/radar.js                |    16 +
 builder/src/echarts3/chart/radar/RadarSeries.js    |    62 +
 builder/src/echarts3/chart/radar/RadarView.js      |   178 +
 builder/src/echarts3/chart/radar/backwardCompat.js |    37 +
 builder/src/echarts3/chart/radar/radarLayout.js    |    27 +
 builder/src/echarts3/chart/sankey.js               |     7 +
 builder/src/echarts3/chart/sankey/SankeySeries.js  |   112 +
 builder/src/echarts3/chart/sankey/SankeyView.js    |   147 +
 builder/src/echarts3/chart/sankey/sankeyLayout.js  |   394 +
 builder/src/echarts3/chart/sankey/sankeyVisual.js  |    34 +
 builder/src/echarts3/chart/scatter.js              |    10 +
 .../src/echarts3/chart/scatter/ScatterSeries.js    |    48 +
 builder/src/echarts3/chart/scatter/ScatterView.js  |    28 +
 builder/src/echarts3/chart/themeRiver.js           |    11 +
 .../echarts3/chart/themeRiver/ThemeRiverSeries.js  |   281 +
 .../echarts3/chart/themeRiver/ThemeRiverView.js    |   140 +
 .../echarts3/chart/themeRiver/themeRiverLayout.js  |   133 +
 .../echarts3/chart/themeRiver/themeRiverVisual.js  |    26 +
 builder/src/echarts3/chart/tree.js                 |    11 +
 builder/src/echarts3/chart/tree/TreeSeries.js      |   109 +
 builder/src/echarts3/chart/tree/TreeView.js        |   322 +
 builder/src/echarts3/chart/tree/commonLayout.js    |    94 +
 builder/src/echarts3/chart/tree/layoutHelper.js    |   260 +
 .../src/echarts3/chart/tree/orthogonalLayout.js    |     6 +
 builder/src/echarts3/chart/tree/radialLayout.js    |     6 +
 builder/src/echarts3/chart/tree/traversalHelper.js |    58 +
 builder/src/echarts3/chart/tree/treeAction.js      |    17 +
 builder/src/echarts3/chart/treemap.js              |     8 +
 builder/src/echarts3/chart/treemap/Breadcrumb.js   |   149 +
 .../src/echarts3/chart/treemap/TreemapSeries.js    |   359 +
 builder/src/echarts3/chart/treemap/TreemapView.js  |   843 +
 builder/src/echarts3/chart/treemap/helper.js       |    53 +
 .../src/echarts3/chart/treemap/treemapAction.js    |    41 +
 .../src/echarts3/chart/treemap/treemapLayout.js    |   510 +
 .../src/echarts3/chart/treemap/treemapVisual.js    |   179 +
 builder/src/echarts3/component/angleAxis.js        |     2 +
 builder/src/echarts3/component/axis.js             |     2 +
 .../src/echarts3/component/axis/AngleAxisView.js   |   204 +
 builder/src/echarts3/component/axis/AxisBuilder.js |   607 +
 builder/src/echarts3/component/axis/AxisView.js    |    93 +
 .../echarts3/component/axis/CartesianAxisView.js   |   195 +
 .../echarts3/component/axis/ParallelAxisView.js    |   150 +
 .../src/echarts3/component/axis/RadiusAxisView.js  |   127 +
 .../src/echarts3/component/axis/SingleAxisView.js  |    97 +
 .../echarts3/component/axis/cartesianAxisHelper.js |    66 +
 .../echarts3/component/axis/parallelAxisAction.js  |    32 +
 .../echarts3/component/axis/singleAxisHelper.js    |    57 +
 builder/src/echarts3/component/axisPointer.js      |    36 +
 .../component/axisPointer/AxisPointerModel.js      |    84 +
 .../component/axisPointer/AxisPointerView.js       |    39 +
 .../component/axisPointer/BaseAxisPointer.js       |   479 +
 .../component/axisPointer/CartesianAxisPointer.js  |   107 +
 .../echarts3/component/axisPointer/IAxisPointer    |    21 +
 .../component/axisPointer/PolarAxisPointer.js      |   105 +
 .../component/axisPointer/SingleAxisPointer.js     |   103 +
 .../echarts3/component/axisPointer/axisTrigger.js  |   384 +
 .../component/axisPointer/findPointFromSeries.js   |    49 +
 .../component/axisPointer/globalListener.js        |   116 +
 .../echarts3/component/axisPointer/modelHelper.js  |   280 +
 .../echarts3/component/axisPointer/viewHelper.js   |   198 +
 builder/src/echarts3/component/brush.js            |    11 +
 builder/src/echarts3/component/brush/BrushModel.js |   128 +
 builder/src/echarts3/component/brush/BrushView.js  |    84 +
 .../src/echarts3/component/brush/brushAction.js    |    49 +
 .../src/echarts3/component/brush/preprocessor.js   |    55 +
 builder/src/echarts3/component/brush/selector.js   |   118 +
 .../src/echarts3/component/brush/visualEncoding.js |   272 +
 builder/src/echarts3/component/calendar.js         |     7 +
 .../echarts3/component/calendar/CalendarView.js    |   405 +
 builder/src/echarts3/component/dataZoom.js         |    12 +
 .../src/echarts3/component/dataZoom/AxisProxy.js   |   426 +
 .../echarts3/component/dataZoom/DataZoomModel.js   |   519 +
 .../echarts3/component/dataZoom/DataZoomView.js    |    64 +
 .../echarts3/component/dataZoom/InsideZoomModel.js |    19 +
 .../echarts3/component/dataZoom/InsideZoomView.js  |   188 +
 .../echarts3/component/dataZoom/SelectZoomModel.js |     4 +
 .../echarts3/component/dataZoom/SelectZoomView.js  |     4 +
 .../echarts3/component/dataZoom/SliderZoomModel.js |    68 +
 .../echarts3/component/dataZoom/SliderZoomView.js  |   701 +
 .../echarts3/component/dataZoom/dataZoomAction.js  |    23 +
 .../component/dataZoom/dataZoomProcessor.js        |    45 +
 builder/src/echarts3/component/dataZoom/helper.js  |   126 +
 builder/src/echarts3/component/dataZoom/history.js |    97 +
 builder/src/echarts3/component/dataZoom/roams.js   |   191 +
 .../echarts3/component/dataZoom/typeDefaulter.js   |     5 +
 builder/src/echarts3/component/dataZoomInside.js   |    10 +
 builder/src/echarts3/component/dataZoomSelect.js   |    10 +
 builder/src/echarts3/component/geo.js              |    40 +
 builder/src/echarts3/component/geo/GeoView.js      |    29 +
 builder/src/echarts3/component/graphic.js          |   438 +
 builder/src/echarts3/component/grid.js             |     3 +
 builder/src/echarts3/component/gridSimple.js       |    29 +
 .../echarts3/component/helper/BrushController.js   |   859 +
 .../component/helper/BrushTargetManager.js         |   372 +
 builder/src/echarts3/component/helper/MapDraw.js   |   325 +
 .../echarts3/component/helper/RoamController.js    |   182 +
 .../src/echarts3/component/helper/brushHelper.js   |    28 +
 .../src/echarts3/component/helper/cursorHelper.js  |    16 +
 .../echarts3/component/helper/interactionMutex.js  |    35 +
 .../src/echarts3/component/helper/listComponent.js |    44 +
 .../src/echarts3/component/helper/roamHelper.js    |    45 +
 .../echarts3/component/helper/selectableMixin.js   |    78 +
 .../src/echarts3/component/helper/sliderMove.js    |    79 +
 builder/src/echarts3/component/legend.js           |    13 +
 .../src/echarts3/component/legend/LegendModel.js   |   182 +
 .../src/echarts3/component/legend/LegendView.js    |   275 +
 .../component/legend/ScrollableLegendModel.js      |    71 +
 .../component/legend/ScrollableLegendView.js       |   329 +
 .../src/echarts3/component/legend/legendAction.js  |    70 +
 .../src/echarts3/component/legend/legendFilter.js  |    19 +
 .../component/legend/scrollableLegendAction.js     |    18 +
 builder/src/echarts3/component/legendScroll.js     |     7 +
 builder/src/echarts3/component/markArea.js         |     7 +
 builder/src/echarts3/component/markLine.js         |     7 +
 builder/src/echarts3/component/markPoint.js        |     8 +
 .../src/echarts3/component/marker/MarkAreaModel.js |    32 +
 .../src/echarts3/component/marker/MarkAreaView.js  |   254 +
 .../src/echarts3/component/marker/MarkLineModel.js |    33 +
 .../src/echarts3/component/marker/MarkLineView.js  |   294 +
 .../echarts3/component/marker/MarkPointModel.js    |    29 +
 .../src/echarts3/component/marker/MarkPointView.js |   127 +
 .../src/echarts3/component/marker/MarkerModel.js   |   116 +
 .../src/echarts3/component/marker/MarkerView.js    |    28 +
 .../src/echarts3/component/marker/markerHelper.js  |   165 +
 builder/src/echarts3/component/parallel.js         |    96 +
 builder/src/echarts3/component/parallelAxis.js     |     3 +
 builder/src/echarts3/component/polar.js            |    14 +
 builder/src/echarts3/component/radar.js            |     3 +
 builder/src/echarts3/component/radar/RadarView.js  |   160 +
 builder/src/echarts3/component/radiusAxis.js       |     2 +
 builder/src/echarts3/component/singleAxis.js       |     9 +
 builder/src/echarts3/component/timeline.js         |    10 +
 .../component/timeline/SliderTimelineModel.js      |   104 +
 .../component/timeline/SliderTimelineView.js       |   607 +
 .../echarts3/component/timeline/TimelineAxis.js    |    81 +
 .../echarts3/component/timeline/TimelineModel.js   |   184 +
 .../echarts3/component/timeline/TimelineView.js    |     4 +
 .../echarts3/component/timeline/preprocessor.js    |    83 +
 .../echarts3/component/timeline/timelineAction.js  |    34 +
 .../echarts3/component/timeline/typeDefaulter.js   |     5 +
 builder/src/echarts3/component/title.js            |   187 +
 builder/src/echarts3/component/toolbox.js          |     7 +
 .../src/echarts3/component/toolbox/ToolboxModel.js |    47 +
 .../src/echarts3/component/toolbox/ToolboxView.js  |   213 +
 .../echarts3/component/toolbox/feature/Brush.js    |   105 +
 .../echarts3/component/toolbox/feature/DataView.js |   467 +
 .../echarts3/component/toolbox/feature/DataZoom.js |   275 +
 .../component/toolbox/feature/MagicType.js         |   165 +
 .../echarts3/component/toolbox/feature/Restore.js  |    34 +
 .../component/toolbox/feature/SaveAsImage.js       |    70 +
 .../echarts3/component/toolbox/featureManager.js   |     7 +
 builder/src/echarts3/component/tooltip.js          |    26 +
 .../echarts3/component/tooltip/TooltipContent.js   |   222 +
 .../component/tooltip/TooltipContentManager.js     |    85 +
 .../src/echarts3/component/tooltip/TooltipModel.js |    75 +
 .../src/echarts3/component/tooltip/TooltipView.js  |   699 +
 builder/src/echarts3/component/visualMap.js        |     5 +
 .../component/visualMap/ContinuousModel.js         |   232 +
 .../echarts3/component/visualMap/ContinuousView.js |   749 +
 .../echarts3/component/visualMap/PiecewiseModel.js |   494 +
 .../echarts3/component/visualMap/PiecewiseView.js  |   192 +
 .../echarts3/component/visualMap/VisualMapModel.js |   477 +
 .../echarts3/component/visualMap/VisualMapView.js  |   145 +
 builder/src/echarts3/component/visualMap/helper.js |    51 +
 .../echarts3/component/visualMap/preprocessor.js   |    41 +
 .../echarts3/component/visualMap/typeDefaulter.js  |     5 +
 .../echarts3/component/visualMap/visualEncoding.js |    65 +
 .../component/visualMap/visualMapAction.js         |    15 +
 .../src/echarts3/component/visualMapContinuous.js  |    11 +
 .../src/echarts3/component/visualMapPiecewise.js   |    11 +
 builder/src/echarts3/config.js                     |    19 +
 builder/src/echarts3/coord/Axis.js                 |   260 +
 builder/src/echarts3/coord/ICoordinateSystem       |    64 +
 builder/src/echarts3/coord/View.js                 |   267 +
 builder/src/echarts3/coord/axisDefault.js          |   149 +
 builder/src/echarts3/coord/axisHelper.js           |   249 +
 builder/src/echarts3/coord/axisModelCommonMixin.js |    88 +
 builder/src/echarts3/coord/axisModelCreator.js     |    35 +
 builder/src/echarts3/coord/calendar/Calendar.js    |   385 +
 .../src/echarts3/coord/calendar/CalendarModel.js   |   119 +
 .../src/echarts3/coord/calendar/prepareCustom.js   |    25 +
 builder/src/echarts3/coord/cartesian/Axis2D.js     |   117 +
 builder/src/echarts3/coord/cartesian/AxisModel.js  |    64 +
 builder/src/echarts3/coord/cartesian/Cartesian.js  |    99 +
 .../src/echarts3/coord/cartesian/Cartesian2D.js    |    78 +
 builder/src/echarts3/coord/cartesian/Grid.js       |   582 +
 builder/src/echarts3/coord/cartesian/GridModel.js  |    30 +
 .../src/echarts3/coord/cartesian/prepareCustom.js  |    30 +
 builder/src/echarts3/coord/geo/Geo.js              |   208 +
 builder/src/echarts3/coord/geo/GeoModel.js         |   124 +
 builder/src/echarts3/coord/geo/Region.js           |   158 +
 builder/src/echarts3/coord/geo/fix/diaoyuIsland.js |    17 +
 builder/src/echarts3/coord/geo/fix/geoCoord.js     |    17 +
 builder/src/echarts3/coord/geo/fix/nanhai.js       |    25 +
 builder/src/echarts3/coord/geo/fix/textCoord.js    |    21 +
 builder/src/echarts3/coord/geo/geoCreator.js       |   188 +
 builder/src/echarts3/coord/geo/parseGeoJson.js     |   112 +
 builder/src/echarts3/coord/geo/prepareCustom.js    |    32 +
 builder/src/echarts3/coord/parallel/AxisModel.js   |   103 +
 builder/src/echarts3/coord/parallel/Parallel.js    |   460 +
 .../src/echarts3/coord/parallel/ParallelAxis.js    |    49 +
 .../src/echarts3/coord/parallel/ParallelModel.js   |   106 +
 .../src/echarts3/coord/parallel/parallelCreator.js |    33 +
 .../coord/parallel/parallelPreprocessor.js         |    48 +
 builder/src/echarts3/coord/polar/AngleAxis.js      |    32 +
 builder/src/echarts3/coord/polar/AxisModel.js      |    49 +
 builder/src/echarts3/coord/polar/Polar.js          |   217 +
 builder/src/echarts3/coord/polar/PolarModel.js     |    32 +
 builder/src/echarts3/coord/polar/RadiusAxis.js     |    31 +
 builder/src/echarts3/coord/polar/polarCreator.js   |   114 +
 builder/src/echarts3/coord/polar/prepareCustom.js  |    44 +
 builder/src/echarts3/coord/radar/IndicatorAxis.js  |    31 +
 builder/src/echarts3/coord/radar/Radar.js          |   223 +
 builder/src/echarts3/coord/radar/RadarModel.js     |   113 +
 builder/src/echarts3/coord/single/AxisModel.js     |    73 +
 builder/src/echarts3/coord/single/Single.js        |   240 +
 builder/src/echarts3/coord/single/SingleAxis.js    |    91 +
 builder/src/echarts3/coord/single/prepareCustom.js |    26 +
 builder/src/echarts3/coord/single/singleCreator.js |    39 +
 builder/src/echarts3/data/DataDiffer.js            |   124 +
 builder/src/echarts3/data/Graph.js                 |   528 +
 builder/src/echarts3/data/List.js                  |  1208 +
 builder/src/echarts3/data/Tree.js                  |   493 +
 .../src/echarts3/data/helper/completeDimensions.js |   215 +
 builder/src/echarts3/data/helper/linkList.js       |   126 +
 builder/src/echarts3/echarts.js                    |  1869 +
 builder/src/echarts3/export.js                     |    32 +
 builder/src/echarts3/helper.js                     |    67 +
 builder/src/echarts3/lang.js                       |    39 +
 builder/src/echarts3/langEN.js                     |    39 +
 builder/src/echarts3/langFI.js                     |    39 +
 builder/src/echarts3/layout/barGrid.js             |   289 +
 builder/src/echarts3/layout/barPolar.js            |   248 +
 builder/src/echarts3/layout/points.js              |    29 +
 builder/src/echarts3/loading/default.js            |    89 +
 builder/src/echarts3/model/Component.js            |   177 +
 builder/src/echarts3/model/Global.js               |   633 +
 builder/src/echarts3/model/Model.js                |   183 +
 builder/src/echarts3/model/OptionManager.js        |   400 +
 builder/src/echarts3/model/Series.js               |   305 +
 builder/src/echarts3/model/globalDefault.js        |    51 +
 builder/src/echarts3/model/mixin/areaStyle.js      |     7 +
 builder/src/echarts3/model/mixin/boxLayout.js      |    12 +
 builder/src/echarts3/model/mixin/colorPalette.js   |    31 +
 builder/src/echarts3/model/mixin/itemStyle.js      |    14 +
 builder/src/echarts3/model/mixin/lineStyle.js      |    20 +
 .../src/echarts3/model/mixin/makeStyleMapper.js    |    31 +
 builder/src/echarts3/model/mixin/textStyle.js      |    30 +
 .../src/echarts3/preprocessor/backwardCompat.js    |    99 +
 .../echarts3/preprocessor/helper/compatStyle.js    |   178 +
 builder/src/echarts3/processor/dataFilter.js       |    24 +
 builder/src/echarts3/processor/dataSample.js       |    85 +
 builder/src/echarts3/scale/Interval.js             |   193 +
 builder/src/echarts3/scale/Log.js                  |   161 +
 builder/src/echarts3/scale/Ordinal.js              |    87 +
 builder/src/echarts3/scale/Scale.js                |   162 +
 builder/src/echarts3/scale/Time.js                 |   183 +
 builder/src/echarts3/scale/helper.js               |    99 +
 builder/src/echarts3/util/KDTree.js                |   249 +
 builder/src/echarts3/util/animation.js             |    97 +
 builder/src/echarts3/util/array/nest.js            |   101 +
 builder/src/echarts3/util/clazz.js                 |   242 +
 builder/src/echarts3/util/component.js             |   172 +
 builder/src/echarts3/util/format.js                |   151 +
 builder/src/echarts3/util/graphic.js               |   981 +
 builder/src/echarts3/util/layout.js                |   460 +
 builder/src/echarts3/util/model.js                 |   610 +
 builder/src/echarts3/util/number.js                |   456 +
 builder/src/echarts3/util/quickSelect.js           |    83 +
 builder/src/echarts3/util/symbol.js                |   296 +
 builder/src/echarts3/util/throttle.js              |   142 +
 builder/src/echarts3/view/Chart.js                 |   137 +
 builder/src/echarts3/view/Component.js             |    36 +
 builder/src/echarts3/visual/VisualMapping.js       |   559 +
 builder/src/echarts3/visual/dataColor.js           |    39 +
 builder/src/echarts3/visual/seriesColor.js         |    32 +
 builder/src/echarts3/visual/symbol.js              |    39 +
 builder/src/echarts3/visual/visualDefault.js       |    48 +
 builder/src/echarts3/visual/visualSolution.js      |   134 +
 builder/src/zrender/Element.js                     |   264 +
 builder/src/zrender/Handler.js                     |   351 +
 builder/src/zrender/Layer.js                       |   227 +
 builder/src/zrender/Painter.js                     |   997 +
 builder/src/zrender/Storage.js                     |   228 +
 builder/src/zrender/animation/Animation.js         |   240 +
 builder/src/zrender/animation/Animator.js          |   638 +
 builder/src/zrender/animation/Clip.js              |   100 +
 builder/src/zrender/animation/easing.js            |   377 +
 .../src/zrender/animation/requestAnimationFrame.js |     4 +
 builder/src/zrender/config.js                      |    22 +
 builder/src/zrender/contain/arc.js                 |    56 +
 builder/src/zrender/contain/cubic.js               |    31 +
 builder/src/zrender/contain/line.js                |    37 +
 builder/src/zrender/contain/path.js                |   382 +
 builder/src/zrender/contain/polygon.js             |    30 +
 builder/src/zrender/contain/quadratic.js           |    29 +
 builder/src/zrender/contain/text.js                |   659 +
 builder/src/zrender/contain/util.js                |    10 +
 builder/src/zrender/contain/windingLine.js         |    21 +
 builder/src/zrender/container/Group.js             |   308 +
 builder/src/zrender/core/BoundingRect.js           |   180 +
 builder/src/zrender/core/GestureMgr.js             |    98 +
 builder/src/zrender/core/LRU.js                    |   201 +
 builder/src/zrender/core/PathProxy.js              |   755 +
 builder/src/zrender/core/arrayDiff.js              |   207 +
 builder/src/zrender/core/arrayDiff2.js             |   195 +
 builder/src/zrender/core/bbox.js                   |   209 +
 builder/src/zrender/core/curve.js                  |   504 +
 builder/src/zrender/core/env.js                    |   161 +
 builder/src/zrender/core/event.js                  |   181 +
 builder/src/zrender/core/guid.js                   |     9 +
 builder/src/zrender/core/log.js                    |    19 +
 builder/src/zrender/core/matrix.js                 |   165 +
 builder/src/zrender/core/timsort.js                |   662 +
 builder/src/zrender/core/util.js                   |   655 +
 builder/src/zrender/core/vector.js                 |   267 +
 builder/src/zrender/dom/HandlerProxy.js            |   301 +
 builder/src/zrender/export.js                      |    41 +
 builder/src/zrender/graphic/CompoundPath.js        |    53 +
 builder/src/zrender/graphic/Displayable.js         |   255 +
 builder/src/zrender/graphic/Gradient.js            |    17 +
 builder/src/zrender/graphic/Image.js               |    88 +
 .../src/zrender/graphic/IncrementalDisplayable.js  |   141 +
 builder/src/zrender/graphic/LinearGradient.js      |    32 +
 builder/src/zrender/graphic/Path.js                |   368 +
 builder/src/zrender/graphic/Pattern.js             |    14 +
 builder/src/zrender/graphic/RadialGradient.js      |    30 +
 builder/src/zrender/graphic/States.js              |   391 +
 builder/src/zrender/graphic/Style.js               |   460 +
 builder/src/zrender/graphic/Text.js                |    72 +
 builder/src/zrender/graphic/constant.js            |     7 +
 .../zrender/graphic/helper/fixClipWithShadow.js    |    52 +
 builder/src/zrender/graphic/helper/fixShadow.js    |    18 +
 builder/src/zrender/graphic/helper/image.js        |    82 +
 builder/src/zrender/graphic/helper/poly.js         |    33 +
 builder/src/zrender/graphic/helper/roundRect.js    |    88 +
 builder/src/zrender/graphic/helper/smoothBezier.js |    94 +
 builder/src/zrender/graphic/helper/smoothSpline.js |    63 +
 .../src/zrender/graphic/helper/subPixelOptimize.js |    94 +
 builder/src/zrender/graphic/helper/text.js         |   520 +
 builder/src/zrender/graphic/mixin/RectText.js      |    56 +
 builder/src/zrender/graphic/mixin/Stateful.js      |    29 +
 builder/src/zrender/graphic/shape/Arc.js           |    32 +
 builder/src/zrender/graphic/shape/BezierCurve.js   |   101 +
 builder/src/zrender/graphic/shape/Circle.js        |    29 +
 builder/src/zrender/graphic/shape/Droplet.js       |    24 +
 builder/src/zrender/graphic/shape/Ellipse.js       |    32 +
 builder/src/zrender/graphic/shape/Heart.js         |    23 +
 builder/src/zrender/graphic/shape/Isogon.js        |    39 +
 builder/src/zrender/graphic/shape/Line.js          |    68 +
 builder/src/zrender/graphic/shape/Polygon.js       |    17 +
 builder/src/zrender/graphic/shape/Polyline.js      |    20 +
 builder/src/zrender/graphic/shape/Rect.js          |    54 +
 builder/src/zrender/graphic/shape/Ring.js          |    23 +
 builder/src/zrender/graphic/shape/Rose.js          |    43 +
 builder/src/zrender/graphic/shape/Sector.js        |    40 +
 builder/src/zrender/graphic/shape/Star.js          |    53 +
 builder/src/zrender/graphic/shape/Trochoid.js      |    57 +
 builder/src/zrender/mixin/Animatable.js            |   266 +
 builder/src/zrender/mixin/Draggable.js             |    78 +
 builder/src/zrender/mixin/Eventful.js              |   368 +
 builder/src/zrender/mixin/Transformable.js         |   321 +
 builder/src/zrender/svg/Painter.js                 |   342 +
 builder/src/zrender/svg/core.js                    |     4 +
 builder/src/zrender/svg/graphic.js                 |   511 +
 builder/src/zrender/svg/helper/ClippathManager.js  |   152 +
 builder/src/zrender/svg/helper/Definable.js        |   253 +
 builder/src/zrender/svg/helper/GradientManager.js  |   203 +
 builder/src/zrender/svg/helper/ShadowManager.js    |   185 +
 builder/src/zrender/svg/svg.js                     |     4 +
 builder/src/zrender/tool/color.js                  |   608 +
 builder/src/zrender/tool/parseSVG.js               |   665 +
 builder/src/zrender/tool/path.js                   |   431 +
 builder/src/zrender/tool/transformPath.js          |    94 +
 builder/src/zrender/vml/Painter.js                 |   170 +
 builder/src/zrender/vml/core.js                    |    41 +
 builder/src/zrender/vml/graphic.js                 |   998 +
 builder/src/zrender/vml/vml.js                     |     4 +
 builder/src/zrender/zrender.js                     |   439 +
 builder/src/zrender3/Element.js                    |   258 +
 builder/src/zrender3/Handler.js                    |   316 +
 builder/src/zrender3/Layer.js                      |   214 +
 builder/src/zrender3/Painter.js                    |  1048 +
 builder/src/zrender3/Storage.js                    |   236 +
 builder/src/zrender3/animation/Animation.js        |   231 +
 builder/src/zrender3/animation/Animator.js         |   638 +
 builder/src/zrender3/animation/Clip.js             |   100 +
 builder/src/zrender3/animation/easing.js           |   377 +
 .../zrender3/animation/requestAnimationFrame.js    |     4 +
 builder/src/zrender3/config.js                     |    22 +
 builder/src/zrender3/contain/arc.js                |    56 +
 builder/src/zrender3/contain/cubic.js              |    31 +
 builder/src/zrender3/contain/line.js               |    37 +
 builder/src/zrender3/contain/path.js               |   381 +
 builder/src/zrender3/contain/polygon.js            |    30 +
 builder/src/zrender3/contain/quadratic.js          |    29 +
 builder/src/zrender3/contain/text.js               |   657 +
 builder/src/zrender3/contain/util.js               |    10 +
 builder/src/zrender3/contain/windingLine.js        |    20 +
 builder/src/zrender3/container/Group.js            |   308 +
 builder/src/zrender3/core/BoundingRect.js          |   180 +
 builder/src/zrender3/core/GestureMgr.js            |    98 +
 builder/src/zrender3/core/LRU.js                   |   201 +
 builder/src/zrender3/core/PathProxy.js             |   755 +
 builder/src/zrender3/core/arrayDiff.js             |   207 +
 builder/src/zrender3/core/arrayDiff2.js            |   195 +
 builder/src/zrender3/core/bbox.js                  |   209 +
 builder/src/zrender3/core/curve.js                 |   504 +
 builder/src/zrender3/core/env.js                   |   121 +
 builder/src/zrender3/core/event.js                 |   135 +
 builder/src/zrender3/core/guid.js                  |     9 +
 builder/src/zrender3/core/log.js                   |    19 +
 builder/src/zrender3/core/matrix.js                |   155 +
 builder/src/zrender3/core/timsort.js               |   662 +
 builder/src/zrender3/core/util.js                  |   604 +
 builder/src/zrender3/core/vector.js                |   267 +
 builder/src/zrender3/dom/HandlerProxy.js           |   323 +
 builder/src/zrender3/export.js                     |    38 +
 builder/src/zrender3/graphic/CompoundPath.js       |    53 +
 builder/src/zrender3/graphic/Displayable.js        |   244 +
 builder/src/zrender3/graphic/Gradient.js           |    17 +
 builder/src/zrender3/graphic/Image.js              |    87 +
 builder/src/zrender3/graphic/LinearGradient.js     |    32 +
 builder/src/zrender3/graphic/Path.js               |   343 +
 builder/src/zrender3/graphic/Pattern.js            |    14 +
 builder/src/zrender3/graphic/RadialGradient.js     |    30 +
 builder/src/zrender3/graphic/States.js             |   391 +
 builder/src/zrender3/graphic/Style.js              |   446 +
 builder/src/zrender3/graphic/Text.js               |    67 +
 .../zrender3/graphic/helper/fixClipWithShadow.js   |    52 +
 builder/src/zrender3/graphic/helper/image.js       |    82 +
 builder/src/zrender3/graphic/helper/poly.js        |    33 +
 builder/src/zrender3/graphic/helper/roundRect.js   |    79 +
 .../src/zrender3/graphic/helper/smoothBezier.js    |    93 +
 .../src/zrender3/graphic/helper/smoothSpline.js    |    63 +
 builder/src/zrender3/graphic/helper/text.js        |   417 +
 builder/src/zrender3/graphic/mixin/RectText.js     |    52 +
 builder/src/zrender3/graphic/mixin/Stateful.js     |    29 +
 builder/src/zrender3/graphic/shape/Arc.js          |    32 +
 builder/src/zrender3/graphic/shape/BezierCurve.js  |   101 +
 builder/src/zrender3/graphic/shape/Circle.js       |    29 +
 builder/src/zrender3/graphic/shape/Droplet.js      |    24 +
 builder/src/zrender3/graphic/shape/Ellipse.js      |    32 +
 builder/src/zrender3/graphic/shape/Heart.js        |    23 +
 builder/src/zrender3/graphic/shape/Isogon.js       |    39 +
 builder/src/zrender3/graphic/shape/Line.js         |    51 +
 builder/src/zrender3/graphic/shape/Polygon.js      |    17 +
 builder/src/zrender3/graphic/shape/Polyline.js     |    20 +
 builder/src/zrender3/graphic/shape/Rect.js         |    36 +
 builder/src/zrender3/graphic/shape/Ring.js         |    23 +
 builder/src/zrender3/graphic/shape/Rose.js         |    43 +
 builder/src/zrender3/graphic/shape/Sector.js       |    40 +
 builder/src/zrender3/graphic/shape/Star.js         |    53 +
 builder/src/zrender3/graphic/shape/Trochoid.js     |    57 +
 builder/src/zrender3/mixin/Animatable.js           |   245 +
 builder/src/zrender3/mixin/Draggable.js            |    78 +
 builder/src/zrender3/mixin/Eventful.js             |   327 +
 builder/src/zrender3/mixin/Transformable.js        |   280 +
 builder/src/zrender3/svg/Painter.js                |   303 +
 builder/src/zrender3/svg/core.js                   |     4 +
 builder/src/zrender3/svg/graphic.js                |   488 +
 builder/src/zrender3/svg/helper/ClippathManager.js |   150 +
 builder/src/zrender3/svg/helper/Definable.js       |   246 +
 builder/src/zrender3/svg/helper/GradientManager.js |   185 +
 builder/src/zrender3/svg/svg.js                    |     4 +
 builder/src/zrender3/tool/color.js                 |   602 +
 builder/src/zrender3/tool/path.js                  |   400 +
 builder/src/zrender3/tool/transformPath.js         |    94 +
 builder/src/zrender3/vml/Painter.js                |   170 +
 builder/src/zrender3/vml/core.js                   |    41 +
 builder/src/zrender3/vml/graphic.js                |   997 +
 builder/src/zrender3/vml/vml.js                    |     4 +
 builder/src/zrender3/zrender.js                    |   417 +
 builder/text.js                                    |    46 +
 css/ecOption.css                                   |   736 +
 css/font/iconfont.eot                              |   Bin 0 -> 6268 bytes
 css/font/iconfont.svg                              |    54 +
 css/font/iconfont.ttf                              |   Bin 0 -> 5984 bytes
 css/font/iconfont.woff                             |   Bin 0 -> 3880 bytes
 css/main.css                                       |     1 +
 css/spreadsheet.css                                |   576 +
 dist/echarts-en.common.js                          | 61045 ++++++++++++
 dist/echarts-en.common.min.js                      |    22 +
 dist/echarts-en.js                                 | 93919 ++++++++++++++++++
 dist/echarts-en.js.map                             |     1 +
 dist/echarts-en.min.js                             |    22 +
 dist/echarts-en.simple.js                          | 41749 ++++++++
 dist/echarts-en.simple.min.js                      |    22 +
 dist/echarts-gl.js                                 | 56990 +++++++++++
 dist/echarts-gl.min.js                             |     1 +
 dist/echarts.common.js                             | 61103 ++++++++++++
 dist/echarts.common.min.js                         |    22 +
 dist/echarts.js                                    | 93977 +++++++++++++++++++
 dist/echarts.js.map                                |     1 +
 dist/echarts.min.js                                |    22 +
 dist/echarts.simple.js                             | 41807 +++++++++
 dist/echarts.simple.min.js                         |    22 +
 dist/echarts3/echarts-en.common.js                 | 48810 ++++++++++
 dist/echarts3/echarts-en.common.min.js             |     1 +
 dist/echarts3/echarts-en.js                        | 74771 +++++++++++++++
 dist/echarts3/echarts-en.js.map                    |     1 +
 dist/echarts3/echarts-en.min.js                    |     1 +
 dist/echarts3/echarts-en.simple.js                 | 32286 +++++++
 dist/echarts3/echarts-en.simple.min.js             |     1 +
 dist/echarts3/echarts.common.js                    | 48810 ++++++++++
 dist/echarts3/echarts.common.min.js                |     1 +
 dist/echarts3/echarts.js                           | 74771 +++++++++++++++
 dist/echarts3/echarts.js.map                       |     1 +
 dist/echarts3/echarts.min.js                       |     1 +
 dist/echarts3/echarts.simple.js                    | 32286 +++++++
 dist/echarts3/echarts.simple.min.js                |     1 +
 dist/echarts3/extension/bmap.js                    |   342 +
 dist/echarts3/extension/bmap.js.map                |     1 +
 dist/echarts3/extension/bmap.min.js                |     1 +
 dist/echarts3/extension/dataTool.js                |   758 +
 dist/echarts3/extension/dataTool.js.map            |     1 +
 dist/echarts3/extension/dataTool.min.js            |     1 +
 dist/extension/bmap.js                             |   418 +
 dist/extension/bmap.js.map                         |     1 +
 dist/extension/bmap.min.js                         |    22 +
 dist/extension/dataTool.js                         |   852 +
 dist/extension/dataTool.js.map                     |     1 +
 dist/extension/dataTool.min.js                     |    22 +
 documents/asset/gl/img/alpha-beta.sketch           |   Bin 0 -> 65536 bytes
 documents/asset/gl/img/bar3D-bevel.png             |   Bin 0 -> 936101 bytes
 documents/asset/gl/img/bar3D-no-bevel.png          |   Bin 0 -> 653448 bytes
 documents/asset/gl/img/buildings-cold.jpg          |   Bin 0 -> 244509 bytes
 documents/asset/gl/img/buildings-warm.jpg          |   Bin 0 -> 271468 bytes
 documents/asset/gl/img/city-region-height.jpg      |   Bin 0 -> 115703 bytes
 documents/asset/gl/img/crispwinter.png             |   Bin 0 -> 134164 bytes
 documents/asset/gl/img/displacement-disable.png    |   Bin 0 -> 444676 bytes
 documents/asset/gl/img/displacement-enable.png     |   Bin 0 -> 469684 bytes
 documents/asset/gl/img/displacement-low.png        |   Bin 0 -> 393852 bytes
 documents/asset/gl/img/displacement-ultra.png      |   Bin 0 -> 752937 bytes
 documents/asset/gl/img/flowGL-line.jpg             |   Bin 0 -> 477721 bytes
 documents/asset/gl/img/flowGL-noss.jpg             |   Bin 0 -> 468782 bytes
 documents/asset/gl/img/flowGL-point.jpg            |   Bin 0 -> 481332 bytes
 documents/asset/gl/img/flowGL-ss.jpg               |   Bin 0 -> 491893 bytes
 documents/asset/gl/img/flowGL-wind.jpg             |   Bin 0 -> 309476 bytes
 documents/asset/gl/img/geo-bar3D.jpg               |   Bin 0 -> 144774 bytes
 documents/asset/gl/img/geo-border.png              |   Bin 0 -> 120977 bytes
 documents/asset/gl/img/geo-dof-large.png           |   Bin 0 -> 251435 bytes
 documents/asset/gl/img/geo-dof-small.png           |   Bin 0 -> 242725 bytes
 documents/asset/gl/img/geo-dof.png                 |   Bin 0 -> 280814 bytes
 documents/asset/gl/img/geo-no-dof.png              |   Bin 0 -> 313830 bytes
 documents/asset/gl/img/geo-no-shadow.png           |   Bin 0 -> 348841 bytes
 documents/asset/gl/img/geo-no-ssao.png             |   Bin 0 -> 795777 bytes
 documents/asset/gl/img/geo-shadow-high.png         |   Bin 0 -> 456090 bytes
 documents/asset/gl/img/geo-shadow-low.png          |   Bin 0 -> 462952 bytes
 documents/asset/gl/img/geo-shadow.png              |   Bin 0 -> 417158 bytes
 documents/asset/gl/img/geo-size.png                |   Bin 0 -> 609536 bytes
 documents/asset/gl/img/geo-size.sketch             |   Bin 0 -> 1452208 bytes
 documents/asset/gl/img/geo-ssao-large-radius.png   |   Bin 0 -> 777267 bytes
 documents/asset/gl/img/geo-ssao-small-radius.png   |   Bin 0 -> 784519 bytes
 documents/asset/gl/img/geo-ssao.png                |   Bin 0 -> 798212 bytes
 documents/asset/gl/img/globe-airline.png           |   Bin 0 -> 705346 bytes
 documents/asset/gl/img/globe-gloss.png             |   Bin 0 -> 658718 bytes
 documents/asset/gl/img/globe-metal.png             |   Bin 0 -> 435143 bytes
 documents/asset/gl/img/globe-non-metal.png         |   Bin 0 -> 444160 bytes
 documents/asset/gl/img/globe-posteffect-bloom.png  |   Bin 0 -> 124521 bytes
 .../asset/gl/img/globe-posteffect-disable.png      |   Bin 0 -> 614586 bytes
 documents/asset/gl/img/globe-posteffect-enable.png |   Bin 0 -> 569860 bytes
 documents/asset/gl/img/globe-rough.png             |   Bin 0 -> 611425 bytes
 documents/asset/gl/img/globe-shading-color.png     |   Bin 0 -> 214590 bytes
 documents/asset/gl/img/globe-shading-lambert.png   |   Bin 0 -> 372631 bytes
 documents/asset/gl/img/globe-shading-realistic.png |   Bin 0 -> 513755 bytes
 documents/asset/gl/img/gpu-layout-perf.png         |   Bin 0 -> 19249 bytes
 documents/asset/gl/img/grid3D.png                  |   Bin 0 -> 83657 bytes
 documents/asset/gl/img/grid3D.sketch               |   Bin 0 -> 122880 bytes
 documents/asset/gl/img/heightmap-disable.png       |   Bin 0 -> 42600 bytes
 documents/asset/gl/img/heightmap-enable.png        |   Bin 0 -> 97918 bytes
 documents/asset/gl/img/light-alpha-beta.png        |   Bin 0 -> 10156 bytes
 documents/asset/gl/img/line3D.png                  |   Bin 0 -> 403986 bytes
 documents/asset/gl/img/lookup.png                  |   Bin 0 -> 2095 bytes
 documents/asset/gl/img/parametric-surface.png      |   Bin 0 -> 619802 bytes
 documents/asset/gl/img/polygons3D-ny.jpg           |   Bin 0 -> 541314 bytes
 documents/asset/gl/img/roughness.png               |   Bin 0 -> 204762 bytes
 documents/asset/gl/img/scatter3D.png               |   Bin 0 -> 771845 bytes
 documents/asset/gl/img/surface-index.png           |   Bin 0 -> 121825 bytes
 documents/asset/gl/img/surface-index.sketch        |   Bin 0 -> 240059 bytes
 documents/asset/gl/img/surface-no-taa.png          |   Bin 0 -> 190861 bytes
 documents/asset/gl/img/surface-taa.png             |   Bin 0 -> 227139 bytes
 documents/asset/gl/img/view-alpha-beta.png         |   Bin 0 -> 9788 bytes
 documents/asset/img/aria-example.png               |   Bin 0 -> 290782 bytes
 documents/asset/img/axis-align-with-label.png      |   Bin 0 -> 7514 bytes
 documents/asset/img/custom-build-line.png          |   Bin 0 -> 72720 bytes
 documents/asset/img/custom-build-pie.png           |   Bin 0 -> 41231 bytes
 documents/asset/img/echarts-aria.jpg               |   Bin 0 -> 143809 bytes
 documents/asset/img/gl/bar3D-2d-data.png           |   Bin 0 -> 58130 bytes
 documents/asset/img/gl/bar3D.png                   |   Bin 0 -> 142020 bytes
 documents/asset/img/gl/grid3D-basic.png            |   Bin 0 -> 30307 bytes
 documents/asset/img/gl/scatter3D-color.png         |   Bin 0 -> 145129 bytes
 documents/asset/img/gl/scatter3D-gaussian.png      |   Bin 0 -> 114828 bytes
 documents/asset/img/gl/scatter3D-life.png          |   Bin 0 -> 90059 bytes
 documents/asset/img/gl/scatter3D-life2.png         |   Bin 0 -> 167782 bytes
 documents/asset/img/gl/surface.png                 |   Bin 0 -> 189074 bytes
 documents/asset/img/smooth-algorithm.png           |   Bin 0 -> 244496 bytes
 documents/asset/img/smooth-monotone-none.png       |   Bin 0 -> 43625 bytes
 documents/asset/img/smooth-monotone-x.png          |   Bin 0 -> 47594 bytes
 documents/asset/img/smooth-non-monotone-x.png      |   Bin 0 -> 161468 bytes
 documents/asset/img/smooth-old-problem.png         |   Bin 0 -> 145198 bytes
 documents/asset/img/smooth-old-vs-new.png          |   Bin 0 -> 121268 bytes
 documents/asset/img/treemap-border-gap.png         |   Bin 0 -> 92466 bytes
 documents/en/api.json                              |     1 +
 documents/en/changelog.html                        |   930 +
 documents/en/coding-standard.html                  |   567 +
 documents/en/option-gl.json                        |     1 +
 documents/en/option-gl_description.json            |     1 +
 documents/en/option-gl_outline.json                |     1 +
 documents/en/option-gl_part_globe.json             |    50 +
 documents/en/option.json                           |     1 +
 documents/en/option_description.json               |     1 +
 documents/en/option_outline.json                   |     1 +
 documents/en/tutorial.json                         |     1 +
 documents/zh/api.json                              |     1 +
 documents/zh/changelog.html                        |  1364 +
 documents/zh/coding-standard.html                  |   708 +
 documents/zh/option-gl.json                        |     1 +
 documents/zh/option-gl_description.json            |     1 +
 documents/zh/option-gl_outline.json                |     1 +
 documents/zh/option.json                           |     1 +
 documents/zh/option_description.json               |     1 +
 documents/zh/option_outline.json                   |     1 +
 documents/zh/tutorial.json                         |     1 +
 images/404.png                                     |   Bin 0 -> 72998 bytes
 images/about/1.png                                 |   Bin 0 -> 36618 bytes
 images/about/2.png                                 |   Bin 0 -> 77291 bytes
 images/about/3.png                                 |   Bin 0 -> 114969 bytes
 images/about/4.png                                 |   Bin 0 -> 67588 bytes
 images/about/5.png                                 |   Bin 0 -> 140731 bytes
 images/about/6.png                                 |   Bin 0 -> 56879 bytes
 images/about/7.png                                 |   Bin 0 -> 102847 bytes
 images/about/8.png                                 |   Bin 0 -> 17302 bytes
 images/about/chenwei.jpg                           |   Bin 0 -> 16526 bytes
 images/about/xiaomi.png                            |   Bin 0 -> 12462 bytes
 images/asf_logo.svg                                |   210 +
 images/banners/2017-03-23-ife.png                  |   Bin 0 -> 30268 bytes
 images/banners/2017-06-20-datav.jpg                |   Bin 0 -> 67564 bytes
 images/banners/2017-09-12-zhibo.png                |   Bin 0 -> 93489 bytes
 images/bg.png                                      |   Bin 0 -> 55761 bytes
 images/bg2.png                                     |   Bin 0 -> 17932 bytes
 images/btn-arrow.png                               |   Bin 0 -> 448 bytes
 images/btn-download.png                            |   Bin 0 -> 775 bytes
 images/btn-email.png                               |   Bin 0 -> 1226 bytes
 images/btn-github.png                              |   Bin 0 -> 1178 bytes
 images/btn-weibo.png                               |   Bin 0 -> 1661 bytes
 images/btn-weixin.png                              |   Bin 0 -> 1383 bytes
 images/builder/chart/bar.svg                       |    10 +
 images/builder/chart/boxplot.svg                   |    12 +
 images/builder/chart/candlestick.svg               |    19 +
 images/builder/chart/chord.svg                     |    23 +
 images/builder/chart/component.svg                 |    23 +
 images/builder/chart/custom.svg                    |    18 +
 images/builder/chart/effectScatter.svg             |    47 +
 images/builder/chart/eventRiver.svg                |    26 +
 images/builder/chart/funnel.svg                    |     9 +
 images/builder/chart/gauge.svg                     |    14 +
 images/builder/chart/graph.svg                     |    25 +
 images/builder/chart/heatmap.svg                   |    15 +
 images/builder/chart/line.svg                      |    11 +
 images/builder/chart/lines.svg                     |   648 +
 images/builder/chart/map.svg                       |    23 +
 images/builder/chart/mix.svg                       |    23 +
 images/builder/chart/other.svg                     |    22 +
 images/builder/chart/parallel.svg                  |    16 +
 images/builder/chart/pictorialBar.svg              |    55 +
 images/builder/chart/pie.svg                       |    11 +
 images/builder/chart/radar.svg                     |    17 +
 images/builder/chart/sankey.svg                    |    20 +
 images/builder/chart/scatter.svg                   |    18 +
 images/builder/chart/sunburst.svg                  |    93 +
 images/builder/chart/theme.svg                     |    14 +
 images/builder/chart/themeRiver.svg                |    17 +
 images/builder/chart/topic.svg                     |    22 +
 images/builder/chart/tree.svg                      |    14 +
 images/builder/chart/treemap.svg                   |    12 +
 images/builder/chart/venn.svg                      |    12 +
 images/builder/chart/wordCloud.svg                 |    22 +
 images/builder/checked.png                         |   Bin 0 -> 1069 bytes
 images/builder/component/brush.svg                 |    27 +
 images/builder/component/calendar.svg              |    26 +
 images/builder/component/dataZoom.svg              |    16 +
 images/builder/component/geo.svg                   |   612 +
 images/builder/component/graphic.svg               |    19 +
 images/builder/component/grid.svg                  |    20 +
 images/builder/component/gridSimple.svg            |    20 +
 images/builder/component/legend.svg                |    55 +
 images/builder/component/markArea.svg              |    20 +
 images/builder/component/markLine.svg              |    65 +
 images/builder/component/markPoint.svg             |   120 +
 images/builder/component/polar.svg                 |    95 +
 images/builder/component/singleAxis.svg            |    52 +
 images/builder/component/timeline.svg              |    26 +
 images/builder/component/title.svg                 |    30 +
 images/builder/component/toolbox.svg               |    69 +
 images/builder/component/tooltip.svg               |    19 +
 images/builder/component/visualMap.svg             |    25 +
 images/chart-icon.png                              |   Bin 0 -> 13805 bytes
 images/company/company1.png                        |   Bin 0 -> 40660 bytes
 images/company/company10.png                       |   Bin 0 -> 21174 bytes
 images/company/company11.png                       |   Bin 0 -> 41458 bytes
 images/company/company12.png                       |   Bin 0 -> 29268 bytes
 images/company/company13.png                       |   Bin 0 -> 24944 bytes
 images/company/company14.png                       |   Bin 0 -> 24571 bytes
 images/company/company15.png                       |   Bin 0 -> 42695 bytes
 images/company/company16.png                       |   Bin 0 -> 9453 bytes
 images/company/company17.png                       |   Bin 0 -> 51321 bytes
 images/company/company18.png                       |   Bin 0 -> 52342 bytes
 images/company/company19.png                       |   Bin 0 -> 17617 bytes
 images/company/company2.png                        |   Bin 0 -> 59543 bytes
 images/company/company20.png                       |   Bin 0 -> 30413 bytes
 images/company/company21.png                       |   Bin 0 -> 37470 bytes
 images/company/company22.png                       |   Bin 0 -> 31626 bytes
 images/company/company23.png                       |   Bin 0 -> 13831 bytes
 images/company/company24.png                       |   Bin 0 -> 24348 bytes
 images/company/company3.png                        |   Bin 0 -> 43341 bytes
 images/company/company4.png                        |   Bin 0 -> 28632 bytes
 images/company/company5.png                        |   Bin 0 -> 9430 bytes
 images/company/company6.png                        |   Bin 0 -> 21655 bytes
 images/company/company7.png                        |   Bin 0 -> 33797 bytes
 images/company/company8.png                        |   Bin 0 -> 9260 bytes
 images/company/company9.png                        |   Bin 0 -> 49281 bytes
 images/echarts-footer-logo.png                     |   Bin 0 -> 7564 bytes
 images/echarts-footer-text.png                     |   Bin 0 -> 1272 bytes
 images/extensions/arcgis.jpg                       |   Bin 0 -> 119407 bytes
 images/extensions/bmap.jpg                         |   Bin 0 -> 149204 bytes
 images/extensions/default-extension.png            |   Bin 0 -> 2028 bytes
 images/extensions/leaflet-2.jpg                    |   Bin 0 -> 49536 bytes
 images/extensions/leaflet.jpg                      |   Bin 0 -> 89859 bytes
 images/extensions/liquidfill.jpg                   |   Bin 0 -> 146915 bytes
 images/extensions/mapbox.jpg                       |   Bin 0 -> 120251 bytes
 images/extensions/modularity.jpg                   |   Bin 0 -> 62574 bytes
 images/extensions/stat.jpg                         |   Bin 0 -> 39655 bytes
 images/extensions/word-cloud.jpg                   |   Bin 0 -> 159964 bytes
 images/favicon.png                                 |   Bin 0 -> 1592 bytes
 images/feature-1.png                               |   Bin 0 -> 116562 bytes
 images/features/buildings-ny.jpg                   |   Bin 0 -> 258779 bytes
 images/features/capetown-taxi.png                  |   Bin 0 -> 1501879 bytes
 images/features/flowGL-line.jpg                    |   Bin 0 -> 634192 bytes
 images/features/population.png                     |   Bin 0 -> 580827 bytes
 images/features/scatterGL.png                      |   Bin 0 -> 643166 bytes
 images/features/scatterGL2.png                     |   Bin 0 -> 2009491 bytes
 images/features/scatterGL3.png                     |   Bin 0 -> 1272747 bytes
 images/features/scatterGL4.png                     |   Bin 0 -> 953836 bytes
 images/forie.png                                   |   Bin 0 -> 171716 bytes
 images/github.png                                  |   Bin 0 -> 2330 bytes
 images/gongzhonghao.png                            |   Bin 0 -> 36677 bytes
 images/icon-email.png                              |   Bin 0 -> 807 bytes
 images/icon-github.png                             |   Bin 0 -> 936 bytes
 images/icon-twitter.png                            |   Bin 0 -> 667 bytes
 images/icon-weibo.png                              |   Bin 0 -> 1334 bytes
 images/index-bg.png                                |   Bin 0 -> 353465 bytes
 images/index-chart/handle.png                      |   Bin 0 -> 1252 bytes
 images/index-chart/handle2.png                     |   Bin 0 -> 567 bytes
 images/index-chart/iphone.png                      |   Bin 0 -> 98448 bytes
 images/index-feature.png                           |   Bin 0 -> 64514 bytes
 images/index/1.png                                 |   Bin 0 -> 38600 bytes
 images/index/2.png                                 |   Bin 0 -> 80174 bytes
 images/index/3.png                                 |   Bin 0 -> 114969 bytes
 images/index/4.png                                 |   Bin 0 -> 67588 bytes
 images/index/5.png                                 |   Bin 0 -> 140731 bytes
 images/index/6.png                                 |   Bin 0 -> 56760 bytes
 images/index/7.png                                 |   Bin 0 -> 104606 bytes
 images/index/device.png                            |   Bin 0 -> 85318 bytes
 images/index/device1.png                           |   Bin 0 -> 87517 bytes
 images/index/earth.png                             |   Bin 0 -> 79622 bytes
 images/index/echarts.png                           |   Bin 0 -> 33008 bytes
 images/index/file.png                              |   Bin 0 -> 5035 bytes
 images/index/footer.png                            |   Bin 0 -> 4333 bytes
 images/index/header.png                            |   Bin 0 -> 6172 bytes
 images/index/line.png                              |   Bin 0 -> 32795 bytes
 images/index/shadow.png                            |   Bin 0 -> 5919 bytes
 images/liquid-fill.png                             |   Bin 0 -> 31358 bytes
 images/logo.png                                    |   Bin 0 -> 3765 bytes
 images/map.png                                     |   Bin 0 -> 283943 bytes
 images/no-map.png                                  |   Bin 0 -> 8135 bytes
 images/note.svg                                    |    15 +
 images/people/JB.png                               |   Bin 0 -> 87295 bytes
 images/people/clement.jpeg                         |   Bin 0 -> 44940 bytes
 images/people/erik.png                             |   Bin 0 -> 70060 bytes
 images/people/weizhi.png                           |   Bin 0 -> 1284 bytes
 "images/people/\345\221\250\346\211\254.png"       |   Bin 0 -> 92607 bytes
 "images/people/\345\221\250\347\216\211.png"       |   Bin 0 -> 97601 bytes
 "images/people/\345\244\247\344\275\233.png"       |   Bin 0 -> 111561 bytes
 .../\345\250\204\345\220\214\345\205\265.png"      |   Bin 0 -> 20118 bytes
 "images/people/\345\256\277\347\210\275.png"       |   Bin 0 -> 76678 bytes
 "images/people/\345\260\217\347\272\242.png"       |   Bin 0 -> 97862 bytes
 "images/people/\345\264\224\345\201\245.jpg"       |   Bin 0 -> 59107 bytes
 "images/people/\345\276\267\346\270\205.png"       |   Bin 0 -> 70273 bytes
 "images/people/\346\235\216\346\271\233.png"       |   Bin 0 -> 67163 bytes
 "images/people/\346\235\250\351\252\245.png"       |   Bin 0 -> 80366 bytes
 "images/people/\346\236\227\345\263\260.png"       |   Bin 0 -> 62803 bytes
 .../\346\241\221\346\226\207\351\224\213.png"      |   Bin 0 -> 77118 bytes
 "images/people/\346\262\210\346\257\205.png"       |   Bin 0 -> 66512 bytes
 "images/people/\346\262\210\346\265\251.png"       |   Bin 0 -> 65255 bytes
 .../\347\216\213\344\277\212\345\251\267.png"      |   Bin 0 -> 106485 bytes
 "images/people/\347\216\213\347\220\274.png"       |   Bin 0 -> 68308 bytes
 "images/people/\347\224\260\345\275\247.png"       |   Bin 0 -> 46656 bytes
 "images/people/\347\245\226\346\230\216.png"       |   Bin 0 -> 70285 bytes
 "images/people/\347\272\242\350\226\257.png"       |   Bin 0 -> 63205 bytes
 "images/people/\347\276\241\350\276\231.png"       |   Bin 0 -> 71775 bytes
 .../\350\213\217\346\200\235\346\226\207.png"      |   Bin 0 -> 97740 bytes
 .../\350\242\201\346\231\223\345\246\202.png"      |   Bin 0 -> 81879 bytes
 .../\350\260\242\347\233\212\350\276\211.png"      |   Bin 0 -> 84370 bytes
 "images/people/\350\265\265\351\233\267.png"       |   Bin 0 -> 68260 bytes
 "images/people/\351\230\277\346\226\207.png"       |   Bin 0 -> 80273 bytes
 "images/people/\351\231\210\344\270\272.png"       |   Bin 0 -> 52648 bytes
 .../\351\241\276\350\275\266\347\201\265.png"      |   Bin 0 -> 139414 bytes
 .../\351\255\217\345\244\252\344\272\221.png"      |   Bin 0 -> 48970 bytes
 .../\351\273\204\345\277\227\346\225\217.png"      |   Bin 0 -> 90020 bytes
 "images/people/\351\273\204\346\202\246.png"       |   Bin 0 -> 81118 bytes
 images/pipeline.png                                |   Bin 0 -> 220187 bytes
 images/yinhao.png                                  |   Bin 0 -> 2898 bytes
 js/chart-list.js                                   |     1 +
 js/common-nav.js                                   |     0
 js/common.js                                       |     1 +
 js/config.js                                       |     1 +
 js/docTool/main.js                                 |    29 +
 js/docTool/main.tpl.html                           |   102 +
 js/download.js                                     |     1 +
 js/examples-nav.js                                 |     1 +
 js/index.js                                        |     1 +
 js/log.js                                          |     1 +
 js/spreadsheet/spreadsheet.js                      |   114 +
 js/spreadsheet/spreadsheet.tpl.html                |   299 +
 vendors/ace/src/ace.js                             | 18514 ++++
 vendors/ace/src/ext-beautify.js                    |   334 +
 vendors/ace/src/ext-chromevox.js                   |   540 +
 vendors/ace/src/ext-elastic_tabstops_lite.js       |   274 +
 vendors/ace/src/ext-emmet.js                       |  1190 +
 vendors/ace/src/ext-error_marker.js                |     6 +
 vendors/ace/src/ext-keybinding_menu.js             |   170 +
 vendors/ace/src/ext-language_tools.js              |  1934 +
 vendors/ace/src/ext-linking.js                     |    52 +
 vendors/ace/src/ext-modelist.js                    |   192 +
 vendors/ace/src/ext-old_ie.js                      |   494 +
 vendors/ace/src/ext-searchbox.js                   |   409 +
 vendors/ace/src/ext-settings_menu.js               |   644 +
 vendors/ace/src/ext-spellcheck.js                  |    71 +
 vendors/ace/src/ext-split.js                       |   246 +
 vendors/ace/src/ext-static_highlight.js            |   161 +
 vendors/ace/src/ext-statusbar.js                   |    51 +
 vendors/ace/src/ext-textarea.js                    |   631 +
 vendors/ace/src/ext-themelist.js                   |    60 +
 vendors/ace/src/ext-whitespace.js                  |   185 +
 vendors/ace/src/keybinding-emacs.js                |  1163 +
 vendors/ace/src/keybinding-vim.js                  |  5564 ++
 vendors/ace/src/mode-abap.js                       |   230 +
 vendors/ace/src/mode-abc.js                        |   260 +
 vendors/ace/src/mode-actionscript.js               |   266 +
 vendors/ace/src/mode-ada.js                        |    87 +
 vendors/ace/src/mode-apache_conf.js                |   355 +
 vendors/ace/src/mode-applescript.js                |   271 +
 vendors/ace/src/mode-asciidoc.js                   |   342 +
 vendors/ace/src/mode-assembly_x86.js               |   185 +
 vendors/ace/src/mode-autohotkey.js                 |   234 +
 vendors/ace/src/mode-batchfile.js                  |   222 +
 vendors/ace/src/mode-c9search.js                   |   275 +
 vendors/ace/src/mode-c_cpp.js                      |   853 +
 vendors/ace/src/mode-cirru.js                      |   202 +
 vendors/ace/src/mode-clojure.js                    |   306 +
 vendors/ace/src/mode-cobol.js                      |    94 +
 vendors/ace/src/mode-coffee.js                     |   412 +
 vendors/ace/src/mode-coldfusion.js                 |  2485 +
 vendors/ace/src/mode-csharp.js                     |   847 +
 vendors/ace/src/mode-css.js                        |   828 +
 vendors/ace/src/mode-curly.js                      |  2491 +
 vendors/ace/src/mode-d.js                          |   512 +
 vendors/ace/src/mode-dart.js                       |  1057 +
 vendors/ace/src/mode-diff.js                       |   139 +
 vendors/ace/src/mode-django.js                     |  2525 +
 vendors/ace/src/mode-dockerfile.js                 |   803 +
 vendors/ace/src/mode-dot.js                        |   412 +
 vendors/ace/src/mode-eiffel.js                     |   128 +
 vendors/ace/src/mode-ejs.js                        |  2961 +
 vendors/ace/src/mode-elixir.js                     |   493 +
 vendors/ace/src/mode-elm.js                        |   293 +
 vendors/ace/src/mode-erlang.js                     |  1001 +
 vendors/ace/src/mode-forth.js                      |   289 +
 vendors/ace/src/mode-ftl.js                        |  1022 +
 vendors/ace/src/mode-gcode.js                      |    85 +
 vendors/ace/src/mode-gherkin.js                    |   147 +
 vendors/ace/src/mode-gitignore.js                  |    51 +
 vendors/ace/src/mode-glsl.js                       |   930 +
 vendors/ace/src/mode-golang.js                     |   751 +
 vendors/ace/src/mode-groovy.js                     |  1217 +
 vendors/ace/src/mode-haml.js                       |   528 +
 vendors/ace/src/mode-handlebars.js                 |  2550 +
 vendors/ace/src/mode-haskell.js                    |   371 +
 vendors/ace/src/mode-haxe.js                       |   737 +
 vendors/ace/src/mode-html.js                       |  2435 +
 vendors/ace/src/mode-html_ruby.js                  |  2966 +
 vendors/ace/src/mode-ini.js                        |   154 +
 vendors/ace/src/mode-io.js                         |   246 +
 vendors/ace/src/mode-jack.js                       |   696 +
 vendors/ace/src/mode-jade.js                       |  2041 +
 vendors/ace/src/mode-java.js                       |  1172 +
 vendors/ace/src/mode-javascript.js                 |  1025 +
 vendors/ace/src/mode-json.js                       |   668 +
 vendors/ace/src/mode-jsoniq.js                     |  2956 +
 vendors/ace/src/mode-jsp.js                        |  1586 +
 vendors/ace/src/mode-jsx.js                        |   762 +
 vendors/ace/src/mode-julia.js                      |   295 +
 vendors/ace/src/mode-latex.js                      |   223 +
 vendors/ace/src/mode-lean.js                       |   281 +
 vendors/ace/src/mode-less.js                       |   897 +
 vendors/ace/src/mode-liquid.js                     |  1024 +
 vendors/ace/src/mode-lisp.js                       |   104 +
 vendors/ace/src/mode-live_script.js                |   481 +
 vendors/ace/src/mode-livescript.js                 |   286 +
 vendors/ace/src/mode-logiql.js                     |   667 +
 vendors/ace/src/mode-lsl.js                        |   693 +
 vendors/ace/src/mode-lua.js                        |   426 +
 vendors/ace/src/mode-luapage.js                    |  2935 +
 vendors/ace/src/mode-lucene.js                     |    69 +
 vendors/ace/src/mode-makefile.js                   |   357 +
 vendors/ace/src/mode-markdown.js                   |  2819 +
 vendors/ace/src/mode-mask.js                       |  1983 +
 vendors/ace/src/mode-matlab.js                     |   256 +
 vendors/ace/src/mode-maze.js                       |   283 +
 vendors/ace/src/mode-mel.js                        |   613 +
 vendors/ace/src/mode-mips_assembler.js             |   235 +
 vendors/ace/src/mode-mipsassembler.js              |   196 +
 vendors/ace/src/mode-mushcode.js                   |   674 +
 vendors/ace/src/mode-mysql.js                      |   160 +
 vendors/ace/src/mode-nix.js                        |   997 +
 vendors/ace/src/mode-objectivec.js                 |   734 +
 vendors/ace/src/mode-ocaml.js                      |   414 +
 vendors/ace/src/mode-pascal.js                     |   197 +
 vendors/ace/src/mode-perl.js                       |   373 +
 vendors/ace/src/mode-pgsql.js                      |  1374 +
 vendors/ace/src/mode-php.js                        |  3612 +
 vendors/ace/src/mode-plain_text.js                 |    25 +
 vendors/ace/src/mode-powershell.js                 |   739 +
 vendors/ace/src/mode-praat.js                      |   468 +
 vendors/ace/src/mode-prolog.js                     |   363 +
 vendors/ace/src/mode-properties.js                 |    72 +
 vendors/ace/src/mode-protobuf.js                   |   944 +
 vendors/ace/src/mode-python.js                     |   264 +
 vendors/ace/src/mode-r.js                          |   302 +
 vendors/ace/src/mode-rdoc.js                       |   205 +
 vendors/ace/src/mode-rhtml.js                      |  2734 +
 vendors/ace/src/mode-ruby.js                       |   843 +
 vendors/ace/src/mode-rust.js                       |   282 +
 vendors/ace/src/mode-sass.js                       |   412 +
 vendors/ace/src/mode-scad.js                       |   766 +
 vendors/ace/src/mode-scala.js                      |  1205 +
 vendors/ace/src/mode-scheme.js                     |   224 +
 vendors/ace/src/mode-scss.js                       |   922 +
 vendors/ace/src/mode-sh.js                         |   752 +
 vendors/ace/src/mode-sjs.js                        |  1242 +
 vendors/ace/src/mode-smarty.js                     |  2561 +
 vendors/ace/src/mode-snippets.js                   |   198 +
 vendors/ace/src/mode-soy_template.js               |  2775 +
 vendors/ace/src/mode-space.js                      |   159 +
 vendors/ace/src/mode-sql.js                        |   100 +
 vendors/ace/src/mode-sqlserver.js                  |   437 +
 vendors/ace/src/mode-stylus.js                     |   414 +
 vendors/ace/src/mode-svg.js                        |  1801 +
 vendors/ace/src/mode-tcl.js                        |   375 +
 vendors/ace/src/mode-tex.js                        |   150 +
 vendors/ace/src/mode-text.js                       |     1 +
 vendors/ace/src/mode-textile.js                    |   141 +
 vendors/ace/src/mode-toml.js                       |   145 +
 vendors/ace/src/mode-twig.js                       |  2619 +
 vendors/ace/src/mode-typescript.js                 |  1108 +
 vendors/ace/src/mode-vala.js                       |  1026 +
 vendors/ace/src/mode-vbscript.js                   |   226 +
 vendors/ace/src/mode-velocity.js                   |  2717 +
 vendors/ace/src/mode-verilog.js                    |    95 +
 vendors/ace/src/mode-vhdl.js                       |   110 +
 vendors/ace/src/mode-xml.js                        |   661 +
 vendors/ace/src/mode-xquery.js                     |  2968 +
 vendors/ace/src/mode-yaml.js                       |   256 +
 vendors/ace/src/snippets/abap.js                   |     7 +
 vendors/ace/src/snippets/abc.js                    |    38 +
 vendors/ace/src/snippets/actionscript.js           |   159 +
 vendors/ace/src/snippets/ada.js                    |     7 +
 vendors/ace/src/snippets/apache_conf.js            |     7 +
 vendors/ace/src/snippets/applescript.js            |     7 +
 vendors/ace/src/snippets/asciidoc.js               |     7 +
 vendors/ace/src/snippets/assembly_x86.js           |     7 +
 vendors/ace/src/snippets/autohotkey.js             |     7 +
 vendors/ace/src/snippets/batchfile.js              |     7 +
 vendors/ace/src/snippets/c9search.js               |     7 +
 vendors/ace/src/snippets/c_cpp.js                  |   138 +
 vendors/ace/src/snippets/cirru.js                  |     7 +
 vendors/ace/src/snippets/clojure.js                |    97 +
 vendors/ace/src/snippets/cobol.js                  |     7 +
 vendors/ace/src/snippets/coffee.js                 |   102 +
 vendors/ace/src/snippets/coldfusion.js             |     7 +
 vendors/ace/src/snippets/csharp.js                 |     7 +
 vendors/ace/src/snippets/css.js                    |   974 +
 vendors/ace/src/snippets/curly.js                  |     7 +
 vendors/ace/src/snippets/d.js                      |     7 +
 vendors/ace/src/snippets/dart.js                   |    90 +
 vendors/ace/src/snippets/diff.js                   |    18 +
 vendors/ace/src/snippets/django.js                 |   115 +
 vendors/ace/src/snippets/dockerfile.js             |     7 +
 vendors/ace/src/snippets/dot.js                    |     7 +
 vendors/ace/src/snippets/eiffel.js                 |     7 +
 vendors/ace/src/snippets/ejs.js                    |     7 +
 vendors/ace/src/snippets/elixir.js                 |     7 +
 vendors/ace/src/snippets/elm.js                    |     7 +
 vendors/ace/src/snippets/erlang.js                 |   167 +
 vendors/ace/src/snippets/forth.js                  |     7 +
 vendors/ace/src/snippets/ftl.js                    |     7 +
 vendors/ace/src/snippets/gcode.js                  |     7 +
 vendors/ace/src/snippets/gherkin.js                |     7 +
 vendors/ace/src/snippets/gitignore.js              |     7 +
 vendors/ace/src/snippets/glsl.js                   |     7 +
 vendors/ace/src/snippets/golang.js                 |     7 +
 vendors/ace/src/snippets/groovy.js                 |     7 +
 vendors/ace/src/snippets/haml.js                   |    27 +
 vendors/ace/src/snippets/handlebars.js             |     7 +
 vendors/ace/src/snippets/haskell.js                |    89 +
 vendors/ace/src/snippets/haxe.js                   |     7 +
 vendors/ace/src/snippets/html.js                   |   835 +
 vendors/ace/src/snippets/html_ruby.js              |     7 +
 vendors/ace/src/snippets/ini.js                    |     7 +
 vendors/ace/src/snippets/io.js                     |    69 +
 vendors/ace/src/snippets/jack.js                   |     7 +
 vendors/ace/src/snippets/jade.js                   |     7 +
 vendors/ace/src/snippets/java.js                   |   241 +
 vendors/ace/src/snippets/javascript.js             |   189 +
 vendors/ace/src/snippets/json.js                   |     7 +
 vendors/ace/src/snippets/jsoniq.js                 |    68 +
 vendors/ace/src/snippets/jsp.js                    |   106 +
 vendors/ace/src/snippets/jsx.js                    |     7 +
 vendors/ace/src/snippets/julia.js                  |     7 +
 vendors/ace/src/snippets/latex.js                  |     7 +
 vendors/ace/src/snippets/lean.js                   |     7 +
 vendors/ace/src/snippets/less.js                   |     7 +
 vendors/ace/src/snippets/liquid.js                 |     7 +
 vendors/ace/src/snippets/lisp.js                   |     7 +
 vendors/ace/src/snippets/live_script.js            |     7 +
 vendors/ace/src/snippets/livescript.js             |     7 +
 vendors/ace/src/snippets/logiql.js                 |     7 +
 vendors/ace/src/snippets/lsl.js                    |  1073 +
 vendors/ace/src/snippets/lua.js                    |    28 +
 vendors/ace/src/snippets/luapage.js                |     7 +
 vendors/ace/src/snippets/lucene.js                 |     7 +
 vendors/ace/src/snippets/makefile.js               |    11 +
 vendors/ace/src/snippets/markdown.js               |    95 +
 vendors/ace/src/snippets/mask.js                   |     7 +
 vendors/ace/src/snippets/matlab.js                 |     7 +
 vendors/ace/src/snippets/maze.js                   |    16 +
 vendors/ace/src/snippets/mel.js                    |     7 +
 vendors/ace/src/snippets/mips_assembler.js         |     7 +
 vendors/ace/src/snippets/mipsassembler.js          |     7 +
 vendors/ace/src/snippets/mushcode.js               |     7 +
 vendors/ace/src/snippets/mysql.js                  |     7 +
 vendors/ace/src/snippets/nix.js                    |     7 +
 vendors/ace/src/snippets/objectivec.js             |     7 +
 vendors/ace/src/snippets/ocaml.js                  |     7 +
 vendors/ace/src/snippets/pascal.js                 |     7 +
 vendors/ace/src/snippets/perl.js                   |   354 +
 vendors/ace/src/snippets/pgsql.js                  |     7 +
 vendors/ace/src/snippets/php.js                    |   283 +
 vendors/ace/src/snippets/plain_text.js             |     7 +
 vendors/ace/src/snippets/powershell.js             |     7 +
 vendors/ace/src/snippets/praat.js                  |     7 +
 vendors/ace/src/snippets/prolog.js                 |     7 +
 vendors/ace/src/snippets/properties.js             |     7 +
 vendors/ace/src/snippets/protobuf.js               |     7 +
 vendors/ace/src/snippets/python.js                 |   165 +
 vendors/ace/src/snippets/r.js                      |   128 +
 vendors/ace/src/snippets/rdoc.js                   |     7 +
 vendors/ace/src/snippets/rhtml.js                  |     7 +
 vendors/ace/src/snippets/ruby.js                   |   935 +
 vendors/ace/src/snippets/rust.js                   |     7 +
 vendors/ace/src/snippets/sass.js                   |     7 +
 vendors/ace/src/snippets/scad.js                   |     7 +
 vendors/ace/src/snippets/scala.js                  |     7 +
 vendors/ace/src/snippets/scheme.js                 |     7 +
 vendors/ace/src/snippets/scss.js                   |     7 +
 vendors/ace/src/snippets/sh.js                     |    90 +
 vendors/ace/src/snippets/sjs.js                    |     7 +
 vendors/ace/src/snippets/smarty.js                 |     7 +
 vendors/ace/src/snippets/snippets.js               |    16 +
 vendors/ace/src/snippets/soy_template.js           |     7 +
 vendors/ace/src/snippets/space.js                  |     7 +
 vendors/ace/src/snippets/sql.js                    |    33 +
 vendors/ace/src/snippets/sqlserver.js              |    76 +
 vendors/ace/src/snippets/stylus.js                 |     7 +
 vendors/ace/src/snippets/svg.js                    |     7 +
 vendors/ace/src/snippets/tcl.js                    |    99 +
 vendors/ace/src/snippets/tex.js                    |   197 +
 vendors/ace/src/snippets/text.js                   |     7 +
 vendors/ace/src/snippets/textile.js                |    37 +
 vendors/ace/src/snippets/toml.js                   |     7 +
 vendors/ace/src/snippets/twig.js                   |     7 +
 vendors/ace/src/snippets/typescript.js             |     7 +
 vendors/ace/src/snippets/vala.js                   |   193 +
 vendors/ace/src/snippets/vbscript.js               |     7 +
 vendors/ace/src/snippets/velocity.js               |    36 +
 vendors/ace/src/snippets/verilog.js                |     7 +
 vendors/ace/src/snippets/vhdl.js                   |     7 +
 vendors/ace/src/snippets/xml.js                    |     7 +
 vendors/ace/src/snippets/xquery.js                 |    68 +
 vendors/ace/src/snippets/yaml.js                   |     7 +
 vendors/ace/src/theme-ambiance.js                  |   182 +
 vendors/ace/src/theme-chaos.js                     |   156 +
 vendors/ace/src/theme-chrome.js                    |   128 +
 vendors/ace/src/theme-clouds.js                    |    95 +
 vendors/ace/src/theme-clouds_midnight.js           |    96 +
 vendors/ace/src/theme-cobalt.js                    |   113 +
 vendors/ace/src/theme-crimson_editor.js            |   118 +
 vendors/ace/src/theme-dawn.js                      |   108 +
 vendors/ace/src/theme-dreamweaver.js               |   141 +
 vendors/ace/src/theme-eclipse.js                   |    98 +
 vendors/ace/src/theme-github.js                    |   104 +
 vendors/ace/src/theme-idle_fingers.js              |    96 +
 vendors/ace/src/theme-iplastic.js                  |   121 +
 vendors/ace/src/theme-katzenmilch.js               |   121 +
 vendors/ace/src/theme-kr_theme.js                  |   104 +
 vendors/ace/src/theme-kuroir.js                    |    62 +
 vendors/ace/src/theme-merbivore.js                 |    95 +
 vendors/ace/src/theme-merbivore_soft.js            |    96 +
 vendors/ace/src/theme-mono_industrial.js           |   107 +
 vendors/ace/src/theme-monokai.js                   |   105 +
 vendors/ace/src/theme-pastel_on_dark.js            |   108 +
 vendors/ace/src/theme-solarized_dark.js            |    88 +
 vendors/ace/src/theme-solarized_light.js           |    91 +
 vendors/ace/src/theme-sqlserver.js                 |   138 +
 vendors/ace/src/theme-terminal.js                  |   114 +
 vendors/ace/src/theme-textmate.js                  |   129 +
 vendors/ace/src/theme-tomorrow.js                  |   108 +
 vendors/ace/src/theme-tomorrow_night.js            |   108 +
 vendors/ace/src/theme-tomorrow_night_blue.js       |   106 +
 vendors/ace/src/theme-tomorrow_night_bright.js     |   121 +
 vendors/ace/src/theme-tomorrow_night_eighties.js   |   108 +
 vendors/ace/src/theme-twilight.js                  |   109 +
 vendors/ace/src/theme-vibrant_ink.js               |    94 +
 vendors/ace/src/theme-xcode.js                     |    88 +
 vendors/ace/src/worker-coffee.js                   |  2158 +
 vendors/ace/src/worker-css.js                      |  8761 ++
 vendors/ace/src/worker-html.js                     | 11606 +++
 vendors/ace/src/worker-javascript.js               | 11614 +++
 vendors/ace/src/worker-json.js                     |  2397 +
 vendors/ace/src/worker-lua.js                      |  3633 +
 vendors/ace/src/worker-php.js                      |  7022 ++
 vendors/ace/src/worker-xml.js                      |  3888 +
 vendors/ace/src/worker-xquery.js                   | 49611 ++++++++++
 vendors/bootstrap/css/bootstrap-theme.css          |   587 +
 vendors/bootstrap/css/bootstrap-theme.css.map      |     1 +
 vendors/bootstrap/css/bootstrap-theme.min.css      |     5 +
 vendors/bootstrap/css/bootstrap.css                |  6800 ++
 vendors/bootstrap/css/bootstrap.css.map            |     1 +
 vendors/bootstrap/css/bootstrap.min.css            |     5 +
 .../fonts/glyphicons-halflings-regular.eot         |   Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg         |   288 +
 .../fonts/glyphicons-halflings-regular.ttf         |   Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff        |   Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2       |   Bin 0 -> 18028 bytes
 vendors/bootstrap/js/bootstrap.js                  |  2363 +
 vendors/bootstrap/js/bootstrap.min.js              |     7 +
 vendors/bootstrap/js/npm.js                        |    13 +
 vendors/bootstrap/js/validator.js                  |   305 +
 vendors/dt/0.0.1/componentConfig.js                |    23 +
 vendors/dt/0.0.1/config.js                         |    72 +
 vendors/dt/0.0.1/lib.js                            |    54 +
 vendors/dt/0.0.1/lib/Set.js                        |   306 +
 vendors/dt/0.0.1/lib/base.js                       |   757 +
 vendors/dt/0.0.1/lib/codeStringify.js              |   322 +
 vendors/dt/0.0.1/lib/dataDriven.js                 |   887 +
 vendors/dt/0.0.1/lib/disable.js                    |    84 +
 vendors/dt/0.0.1/lib/enumeration.js                |   198 +
 vendors/dt/0.0.1/lib/event.js                      |   127 +
 vendors/dt/0.0.1/lib/htmlCleaner.js                |   175 +
 vendors/dt/0.0.1/lib/json.js                       |    23 +
 vendors/dt/0.0.1/lib/liteHashMap.js                |    64 +
 vendors/dt/0.0.1/lib/model.js                      |   209 +
 vendors/dt/0.0.1/lib/number.js                     |   296 +
 vendors/dt/0.0.1/lib/objectAccess.js               |   350 +
 vendors/dt/0.0.1/lib/objectOriented.js             |   184 +
 vendors/dt/0.0.1/lib/others.js                     |   399 +
 vendors/dt/0.0.1/lib/throttle.js                   |   124 +
 vendors/dt/0.0.1/lib/tooltip.js                    |   347 +
 .../dt/0.0.1/obDecorator/floatInputDecorator.js    |    57 +
 vendors/dt/0.0.1/obDecorator/htmlInputDecorator.js |    43 +
 .../dt/0.0.1/obDecorator/integerInputDecorator.js  |    65 +
 .../dt/0.0.1/obDecorator/rangeValueDecorator.js    |   195 +
 vendors/dt/0.0.1/tpl.js                            |    90 +
 vendors/dt/0.0.1/tplLoader.js                      |    46 +
 vendors/dt/0.0.1/ui/BasePanel.js                   |   233 +
 vendors/dt/0.0.1/ui/Button.js                      |   216 +
 vendors/dt/0.0.1/ui/Button.less                    |    30 +
 vendors/dt/0.0.1/ui/CheckButton.js                 |   223 +
 vendors/dt/0.0.1/ui/CheckButton.less               |    63 +
 vendors/dt/0.0.1/ui/Component.js                   |  1209 +
 vendors/dt/0.0.1/ui/Foreach.js                     |   541 +
 vendors/dt/0.0.1/ui/ScrollPanel.js                 |   380 +
 vendors/dt/0.0.1/ui/Tab.js                         |   429 +
 vendors/dt/0.0.1/ui/Text.js                        |    79 +
 vendors/dt/0.0.1/ui/Text.less                      |     6 +
 vendors/dt/0.0.1/ui/TextInput.js                   |   254 +
 vendors/dt/0.0.1/ui/TextInput.less                 |    83 +
 vendors/dt/0.0.1/ui/TreeList.js                    |  1036 +
 vendors/dt/0.0.1/ui/TreeList.less                  |    59 +
 vendors/dt/0.0.1/ui/WinPanel.js                    |   249 +
 vendors/dt/0.0.1/ui/WinPanel.less                  |    15 +
 vendors/dt/0.0.1/ui/all.less                       |     8 +
 vendors/dt/0.0.1/ui/common.less                    |   216 +
 vendors/dt/0.0.1/ui/dialog.js                      |   371 +
 vendors/dt/0.0.1/ui/scrollPanel.less               |    32 +
 vendors/dt/0.0.1/ui/theme/dark.less                |    44 +
 vendors/dt/0.0.1/ui/theme/ec.less                  |    44 +
 vendors/dt/0.0.1/ui/tooltip.js                     |   348 +
 vendors/dt/0.0.1/ui/tooltip.less                   |    16 +
 vendors/dt/0.0.1/ui/ui.tpl.html                    |    19 +
 vendors/echarts/echarts-all-2.2.7.js               |    35 +
 vendors/echarts/echarts-all-3.0.0.js               | 50286 ++++++++++
 vendors/echarts/echarts.simple.min.js              |     7 +
 vendors/echarts/map/js/china.js                    |    27 +
 vendors/echarts/map/js/province/anhui.js           |    27 +
 vendors/echarts/map/js/province/fujian.js          |    27 +
 vendors/echarts/map/js/province/gansu.js           |    27 +
 vendors/echarts/map/js/province/guangdong.js       |    27 +
 vendors/echarts/map/js/province/guangxi.js         |    27 +
 vendors/echarts/map/js/province/guizhou.js         |    27 +
 vendors/echarts/map/js/province/hainan.js          |    27 +
 vendors/echarts/map/js/province/hebei.js           |    27 +
 vendors/echarts/map/js/province/heilongjiang.js    |    27 +
 vendors/echarts/map/js/province/henan.js           |    27 +
 vendors/echarts/map/js/province/hubei.js           |    27 +
 vendors/echarts/map/js/province/hunan.js           |    27 +
 vendors/echarts/map/js/province/jiangsu.js         |    27 +
 vendors/echarts/map/js/province/jiangxi.js         |    27 +
 vendors/echarts/map/js/province/jilin.js           |    27 +
 vendors/echarts/map/js/province/liaoning.js        |    27 +
 vendors/echarts/map/js/province/neimenggu.js       |    27 +
 vendors/echarts/map/js/province/ningxia.js         |    27 +
 vendors/echarts/map/js/province/qinghai.js         |    27 +
 vendors/echarts/map/js/province/shandong.js        |    27 +
 vendors/echarts/map/js/province/shanxi.js          |    27 +
 vendors/echarts/map/js/province/sichuan.js         |    27 +
 vendors/echarts/map/js/province/xicang.js          |    27 +
 vendors/echarts/map/js/province/xinjiang.js        |    27 +
 vendors/echarts/map/js/province/yunnan.js          |    27 +
 vendors/echarts/map/js/province/zhejiang.js        |    27 +
 vendors/echarts/map/js/world.js                    |    27 +
 vendors/echarts/map/json/china.json                |     1 +
 vendors/echarts/map/json/province/anhui.json       |     1 +
 vendors/echarts/map/json/province/fujian.json      |     1 +
 vendors/echarts/map/json/province/gansu.json       |     1 +
 vendors/echarts/map/json/province/guangdong.json   |     1 +
 vendors/echarts/map/json/province/guangxi.json     |     1 +
 vendors/echarts/map/json/province/guizhou.json     |     1 +
 vendors/echarts/map/json/province/hainan.json      |     1 +
 vendors/echarts/map/json/province/hebei.json       |     1 +
 .../echarts/map/json/province/heilongjiang.json    |     1 +
 vendors/echarts/map/json/province/henan.json       |     1 +
 vendors/echarts/map/json/province/hubei.json       |     1 +
 vendors/echarts/map/json/province/hunan.json       |     1 +
 vendors/echarts/map/json/province/jiangsu.json     |     1 +
 vendors/echarts/map/json/province/jiangxi.json     |     1 +
 vendors/echarts/map/json/province/jilin.json       |     1 +
 vendors/echarts/map/json/province/liaoning.json    |     1 +
 vendors/echarts/map/json/province/neimenggu.json   |     1 +
 vendors/echarts/map/json/province/ningxia.json     |     1 +
 vendors/echarts/map/json/province/qinghai.json     |     1 +
 vendors/echarts/map/json/province/shandong.json    |     1 +
 vendors/echarts/map/json/province/shanxi.json      |     1 +
 vendors/echarts/map/json/province/sichuan.json     |     1 +
 vendors/echarts/map/json/province/xicang.json      |     1 +
 vendors/echarts/map/json/province/xinjiang.json    |     1 +
 vendors/echarts/map/json/province/yunnan.json      |     1 +
 vendors/echarts/map/json/province/zhejiang.json    |     1 +
 vendors/echarts/map/json/world.json                |     1 +
 vendors/esl.js                                     |     1 +
 vendors/etpl/3.0.0/LICENSE                         |    28 +
 vendors/etpl/3.0.0/README.md                       |   117 +
 vendors/etpl/3.0.0/etpl.min.js                     |     1 +
 vendors/etpl/3.0.0/main.js                         |     9 +
 vendors/etpl/3.0.0/package.json                    |    19 +
 vendors/etpl/3.0.0/src/main.js                     |  1645 +
 vendors/etpl/3.0.0/src/tpl.js                      |    46 +
 vendors/fullpage/jquery.fullpage.min.css           |     8 +
 vendors/fullpage/jquery.fullpage.min.js            |     9 +
 vendors/handsontable/0.26.1/CHANGELOG.md           |     1 +
 vendors/handsontable/0.26.1/CNAME                  |     1 +
 vendors/handsontable/0.26.1/CONTRIBUTING.md        |    17 +
 vendors/handsontable/0.26.1/LICENSE                |    23 +
 vendors/handsontable/0.26.1/README.md              |   131 +
 vendors/handsontable/0.26.1/dist/handsontable.css  |  1170 +
 .../handsontable/0.26.1/dist/handsontable.full.css |  1391 +
 .../handsontable/0.26.1/dist/handsontable.full.js  | 32130 +++++++
 .../0.26.1/dist/handsontable.full.min.css          |    31 +
 .../0.26.1/dist/handsontable.full.min.js           |    88 +
 vendors/handsontable/0.26.1/dist/handsontable.js   | 22976 +++++
 .../handsontable/0.26.1/dist/handsontable.min.css  |    28 +
 .../handsontable/0.26.1/dist/handsontable.min.js   |    67 +
 vendors/handsontable/0.26.1/package.json           |   105 +
 vendors/hasher/1.2.0/hasher.js                     |   441 +
 vendors/hasher/1.2.0/hasher.min.js                 |     7 +
 vendors/immutable/3.7.4/CONTRIBUTING.md            |    61 +
 vendors/immutable/3.7.4/Gruntfile.js               |   216 +
 vendors/immutable/3.7.4/LICENSE                    |    30 +
 vendors/immutable/3.7.4/PATENTS                    |    11 +
 vendors/immutable/3.7.4/README.md                  |   444 +
 vendors/immutable/3.7.4/bower.json                 |    39 +
 vendors/immutable/3.7.4/dist/immutable.d.ts        |  2476 +
 vendors/immutable/3.7.4/dist/immutable.js          |  4927 +
 vendors/immutable/3.7.4/dist/immutable.min.js      |    52 +
 vendors/immutable/3.7.4/package.json               |    77 +
 .../jquery-autocomplete/auto-complete.jquery.json  |    29 +
 vendors/jquery-autocomplete/bower.json             |    35 +
 .../jquery-autocomplete/jquery.auto-complete.css   |     9 +
 .../jquery-autocomplete/jquery.auto-complete.js    |   171 +
 .../jquery.auto-complete.min.js                    |     3 +
 vendors/jquery-autocomplete/readme.md              |    59 +
 vendors/jquery-handsontable/0.10.5.1/README.md     |    12 +
 .../0.10.5.1/jquery.handsontable.dt.css            |   495 +
 .../0.10.5.1/jquery.handsontable.dt.js             | 13969 +++
 .../0.10.5.1/jquery.handsontable.dt.min.js         |     7 +
 vendors/jquery-mousewheel/3.1.11/ChangeLog.md      |   137 +
 vendors/jquery-mousewheel/3.1.11/Gruntfile.js      |    47 +
 vendors/jquery-mousewheel/3.1.11/LICENSE.txt       |    20 +
 vendors/jquery-mousewheel/3.1.11/README.md         |    85 +
 vendors/jquery-mousewheel/3.1.11/bower.json        |    16 +
 .../jquery-mousewheel/3.1.11/jquery.mousewheel.js  |   220 +
 .../3.1.11/jquery.mousewheel.min.js                |     8 +
 .../3.1.11/mousewheel.jquery.json                  |    27 +
 vendors/jquery-mousewheel/3.1.11/package.json      |    44 +
 vendors/jquery-ui/1.11.4/jquery-ui.css             |    91 +
 vendors/jquery-ui/1.11.4/jquery-ui.js              |  2163 +
 vendors/jquery-ui/1.11.4/jquery-ui.min.css         |     6 +
 vendors/jquery-ui/1.11.4/jquery-ui.min.js          |     6 +
 vendors/jquery-ui/1.11.4/jquery-ui.structure.css   |    97 +
 .../jquery-ui/1.11.4/jquery-ui.structure.min.css   |     5 +
 vendors/jquery.lazyload.min.js                     |     2 +
 vendors/jquery/jquery.js                           | 10351 ++
 vendors/jquery/jquery.min.js                       |     6 +
 vendors/jquery/jquery.min.map                      |     1 +
 vendors/latinize/README.md                         |    56 +
 vendors/latinize/latinize.js                       |   848 +
 vendors/latinize/package.json                      |    17 +
 vendors/lodash.js                                  |   102 +
 vendors/numeral/1.4.7/numeral.js                   |   518 +
 vendors/numeral/1.4.7/numeral.min.js               |     1 +
 vendors/pace/pace.min.js                           |     2 +
 .../0.6.8/css/perfect-scrollbar.css                |   106 +
 .../0.6.8/css/perfect-scrollbar.min.css            |     2 +
 .../0.6.8/js/perfect-scrollbar.js                  |  1588 +
 .../0.6.8/js/perfect-scrollbar.min.js              |     2 +
 vendors/prettify/lang-css.js                       |    18 +
 vendors/prettify/prettify.css                      |     1 +
 vendors/prettify/prettify.js                       |    46 +
 vendors/signals/1.0.0/signals.js                   |   445 +
 vendors/signals/1.0.0/signals.min.js               |    14 +
 vendors/sweetalert.js                              |     1 +
 vendors/twentytwenty/jquery.event.move.js          |   581 +
 vendors/twentytwenty/jquery.twentytwenty.js        |   119 +
 vendors/twentytwenty/twentytwenty.css              |   191 +
 video/feature-1.jpg                                |   Bin 0 -> 167910 bytes
 video/feature-1.mp4                                |   Bin 0 -> 2017250 bytes
 video/feature-2.jpg                                |   Bin 0 -> 165749 bytes
 video/feature-2.mp4                                |   Bin 0 -> 413722 bytes
 video/feature-4.mp4                                |   Bin 0 -> 1723447 bytes
 video/index-4.jpg                                  |   Bin 0 -> 463029 bytes
 video/index-4.mp4                                  |   Bin 0 -> 10105082 bytes
 video/index.jpg                                    |   Bin 0 -> 97216 bytes
 video/index.mp4                                    |   Bin 0 -> 4959068 bytes
 2032 files changed, 1388999 insertions(+)

diff --git a/asset/map/js/china-contour.js b/asset/map/js/china-contour.js
new file mode 100644
index 0000000..adda0e2
--- /dev/null
+++ b/asset/map/js/china-contour.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('china-contour', {"type":"FeatureCollection","features":[{"id":"100000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@š¦ŜiÀºƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅ó­@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ AɞÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĒĞȠzÐŘΰH¨ȔBĠ "],["@@ƛĴÕƊÉɼģºðʀI̠ÔĚäœθؾNJŨxĚĮǂƺòƌ‚ĪŐĮXŦţƸZûЋƕƑ’ʳÛDžƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@Óɖ± dƊ½ǒÂň×äı–§ĤƩ™¶hlçxĬŸĄŞkâ’ÌwøàIJaĞ‚fƠ¥Ž„Ŕdž˜®UɎÖ¢aƆúŪtŠųƠjd•ƺŠƺÅìnŽŢ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼìĴPðŀbþ¹ļD¢¹œ\\ĜÑ̔ùўÊ‰ȮŒǪűŽÀ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/china.js b/asset/map/js/china.js
new file mode 100644
index 0000000..917887e
--- /dev/null
+++ b/asset/map/js/china.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('china', {"type":"FeatureCollection","features":[{"id":"710000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]]]},"prope [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/anhui.js b/asset/map/js/province/anhui.js
new file mode 100644
index 0000000..46d1b89
--- /dev/null
+++ b/asset/map/js/province/anhui.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('安徽', {"type":"FeatureCollection","features":[{"id":"340100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FJVR@HARFFHDXDDDHLBHAjBHFTPV@HOVAHBNFNPTTjPXP\\RZ\\\\TXNVNHVHdDd@RCd@Z@JBJJFFCHOHABELANDLMDGFGP@HGBQCMBWN›I_PQQ[GwPWJGBEAUQ_KSFWHQHIEQXIBKAKKBKDG@GMEGHG@MCOKKJUACDMEG@KAUGICG@eH[CIAG@WCKEOGEACDE@IPE@AHE@CBCAA@ABBFEFIBEDGBENILOHGNKJ@FEL@HFLAR@TBJCLGHAJGHCJATDRZb@FAHGNAJBbAHQZAF@FBFHNDN@XAHKFcAGBBJFJ@FCFGDMGC@CDADEBBBAB@F@DB@@BA@AFABABC@BDC@AD [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/aomen.js b/asset/map/js/province/aomen.js
new file mode 100644
index 0000000..2720927
--- /dev/null
+++ b/asset/map/js/province/aomen.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('澳门', {"type":"FeatureCollection","features":[{"id":"820001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],"encodeOffsets":[[[116285,22746]],[[116303,22746]]]},"properties":{"cp":[113.552965,22.207882],"name":"花地玛堂区","childNum":2}},{"id":"820002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MK@CA@AAGDEB@NVFJG"],"encodeOffsets":[[116281,22734]]},"properties": [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/beijing.js b/asset/map/js/province/beijing.js
new file mode 100644
index 0000000..46e6a66
--- /dev/null
+++ b/asset/map/js/province/beijing.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('北京', {"type":"FeatureCollection","features":[{"id":"110101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DB@DP@NCHB@XD@AED@BKB@@CD@@AV@@EJ@@EAB@KB@AA@AP@CDJ@@CD@@EACB@FBD@BAACCCAG@QI@CB@A@@@BE@B_BWLBN@@CE@@AB@@KH@@AD@@AC@@CIB@AC@DWCKi@MAE@@CD@@@@EB@@AA@@CC@BGC@@AG@CBM@@AI@@HC@@BC@@DE@@DKCIBFB@HfBAvCB@PG@BHA@@BB@ATJ@@BF@AJC@AXCB@bMA@H"],"encodeOffsets":[[119181,40920]]},"properties":{"cp":[116.418757,39.917544],"name":"东城区","childNum":1}},{"id": [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/chongqing.js b/asset/map/js/province/chongqing.js
new file mode 100644
index 0000000..e4bde79
--- /dev/null
+++ b/asset/map/js/province/chongqing.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('重庆', {"type":"FeatureCollection","features":[{"id":"500101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@NFPGFIJEHIHMJGBKLQD@D@BB@LFBHADHDDD@RJLBDJDAJEDGD@NHB@DGACBAFAHAHC@CEGO@AAHSBM@IBCJCFEDGAM@CDAJ@VHBHAFDBDABGHIHBHAZ@LFDGH@DCBAN@HEJALJRJFLJFLJLJHBN@DBBDGHADHVDH@DEDDDJHTJ@ACKDENKHEH@FHLJJBhVHFHJVL`LTLRDJLTFBCD@@FEHGDMFM`ERNAJCJ@FFLDPJXRJNNLHF\\FBBX@NBJFD@JGLBFCDE@ECEAGDGBWBAHAFHDBN@XFFDHEJANDDD@FEJ@DDFFFJ@LC\\JJBFABA@CKEAC@CBG@ACEOC@EHIBGNKD [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/fujian.js b/asset/map/js/province/fujian.js
new file mode 100644
index 0000000..b6c895b
--- /dev/null
+++ b/asset/map/js/province/fujian.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('福建', {"type":"FeatureCollection","features":[{"id":"350100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@K@KLDBLBBIHCAA"],["@@CBABCD@FJFCFBDHFFBB@FM@CCEBCCEMC"],["@@ACCBBDDA"],["@@@CC@@DD@"],["@@B@A@"],["@@MCKEO@ICCCAEAKBKAAIAC@AVFPCRBBFBNHNBVXJ@DADCHAB@@GBCL@B@BCCIEEBC@CHCACG@ABKPA@CC"],["@@@A@B"],["@@A@CDC@WH@FLXCB@DFDATBFH@HELA@CCACI@AFAD@BA@AH@DED@FDBHHHJDT@JC@AEOECGKC@EDOQIACBG@CC@CKC"],["@@B@BCE@BD"],["@@J@BA@AAAI@ABBD"],["@@B@@ACAB [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/gansu.js b/asset/map/js/province/gansu.js
new file mode 100644
index 0000000..6395041
--- /dev/null
+++ b/asset/map/js/province/gansu.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('甘肃', {"type":"FeatureCollection","features":[{"id":"620100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@GG@IEEEKE@IMFQRGFEBEFA@CFCBDFEDABKDEAGH@HKBGAEACDGLMBGLIBAFAJGD@JCVAEGECCGC@AAEA@CEEC@ACAEFGD@BID@DCJOPGBCTCBCDCDBBBB@PABGBAJBFDD@B@HCDCL[BMEEL@FFD@TELINBJAP\\HFFFD@DDHEF@FEN@RCRBREBBDCB@@FFEBBJCRABAH@@FEJAJIJIAADGDCHE@GD@HABE@EHGDAHFB@BAB@DGD@FADLJDFHBD@@CFAFBDGAA@AHOLGBGJBPIJBBEJADB@EHMBCGMBERGB@BFFDDLAFNFHCFGD@DGL@HAB@HDDADBJAPFFEL@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/guangdong.js b/asset/map/js/province/guangdong.js
new file mode 100644
index 0000000..c0045bb
--- /dev/null
+++ b/asset/map/js/province/guangdong.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('广东', {"type":"FeatureCollection","features":[{"id":"440100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EHGTANB@DAHBPHFEDDNFRPBFKFEHSLKAGDUCAA@CGA@AEAAHQCGHEDWFGDCDAHAbI@ABADCDAFGA@DB@AFJFEPFB@Dg\\EBCHBJBBNB@DAF@H@F@LCPHFDCDFJBFDIRMPSHGFEACCA@BHABEFMFKJCF@JDJ@J@DNJCFIBABAFBNHHABALREDHABEAABGbDJBFMEqC]DCBKLOLUHIFCJAFDHCD@BL@VL`@BDA@@BHFABBD@FFB@FADECGBCPADEXB@L@BDDdADg@EDCF@TFHPPTHDHAL@HBJIRQPINM@MLBNCPFDF^E\\EPEFQDADAJABQBEH@HBFABGHIBMHKNGQS@C [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/guangxi.js b/asset/map/js/province/guangxi.js
new file mode 100644
index 0000000..2f6ef61
--- /dev/null
+++ b/asset/map/js/province/guangxi.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('广西', {"type":"FeatureCollection","features":[{"id":"450100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@IFCAQNEAGEBAMGMUEBIKBC@EFGHBAEBIGI@EKGEGAKKA@EDIP@XFBCVIKK@KE@CEj@VGEIGBE@GCCABEFECK@AKAACFI@CIEBGAAG@EENOF@@GKIMB@CKEOAWOEMPEFKOQDEJ@LBABBH@DFFH@FCFGIKEM@CDCD@LDLABCGIJ@FB@LFBLEFCAE@CFBDBDGGAAMJ@@C@CLCFEHDBSCC@CDC@CCEOBGAAGBCFE@OD@FBJICCDGDAJBJAAIDEHA@MCIGC@ICCBOL@DECQACNABDFHDAHEB@DDAFJHH@@H@HDDLBHFB@BDGHBDD@BDAHFBJNJGH@JDHDELFL@HBDJBADTLA [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/guizhou.js b/asset/map/js/province/guizhou.js
new file mode 100644
index 0000000..f567569
--- /dev/null
+++ b/asset/map/js/province/guizhou.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('贵州', {"type":"FeatureCollection","features":[{"id":"520100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DDAD@PL@JFDNBDB@FABB@DCDBBBADD@EBABNFBD@BB@ABFFBJNBBCHBDCD@BJBDANGFBJF@FHAPRBNJFBDCJDDKBJNEDAF@DFDFBDJBHABGHIFG@ABWEEBCAG@EFGCSHQEK@CBCHEFQF@BDFK@EBALBB@HE@AHEDBHABC@CBGJAFIDBGM@BDC@AFD@AFGLBHAFJFENGHGDI@SMIGUMWCO@[HS@OFEDY@IBSBCL@BBBDDDAJDH@FD@PP@BBBDGRADGFG@I@DDABEACACBMAELJ\\BN@JKXGJMDQDIDUTIFE@cI_KUKKA[BMBIFMJCFODAB@BHREHGD@DBDDBJBEJBRAB [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/hainan.js b/asset/map/js/province/hainan.js
new file mode 100644
index 0000000..ce0d9d2
--- /dev/null
+++ b/asset/map/js/province/hainan.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('海南', {"type":"FeatureCollection","features":[{"id":"460100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@Œ¢NDxBrCpI^OTGjGfBBBFFB\\PlRRPJhJ\\DˆC|K|Q¤kfGL@PD’ŸFAHGFMFENEJGNODK@OCE@AFAHEXGJEL@BEFAD@BC@MFGD@DAL_CKAEN@D@BBNKF@BEFEDGFCFICMAEJGDUBGAEKIAEHQJAXFN@DCBEJIJCBGACWMCG@CFGDYFKCEMEGEE@SAKFELBFEDEIEBIAKOGCEGAAACECCBCABIB@FDB@ACXA@CCAKAACBGAAEAEEAIEICOCCCAGEGSBEHKBIDA^IDE@ICEGBOCKBIGE@CAGBGGACJCJ@HDDABMGGFU@MAEFGPMFBHCHBTADCBCDAVBD@@AEEGAGEKABGC [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/hebei.js b/asset/map/js/province/hebei.js
new file mode 100644
index 0000000..b0f8de3
--- /dev/null
+++ b/asset/map/js/province/hebei.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('河北', {"type":"FeatureCollection","features":[{"id":"130100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DLBNFfAPRjpllzR\\ptJNFLDJOf@LDL\\bH\\FNDPG^ONOHWDiJGJIFWJKB]COQQSBED@RBRDLHJ`T\\HXPFLDJAJCLMJWNKJBLAJGLQFaCMBKHEJELALBˆCTM^E\\EJILMHODORMhENOTENOTMHGBEDWCEBEHOLBBTBDBDLEH@HJT@LCFGFBJCHHHBHEFWJGBEH@DDBCLCF{xCBK@EDEFLZJNDRAJBJDALEF@@FCFGF@DHFFHADCDKBWEOGS@oNaDS@IAEDCAKEGDKFABPHDB@HNFDD@DMHGAMCKFADBFDNCJGFUKKAOCOBKDIFW^MJMDKBU@wKU@KDMHIJI^QNYX [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/heilongjiang.js b/asset/map/js/province/heilongjiang.js
new file mode 100644
index 0000000..237a9a3
--- /dev/null
+++ b/asset/map/js/province/heilongjiang.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('黑龙江', {"type":"FeatureCollection","features":[{"id":"230100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@LKT]LEL@HB|VX@TOJELBHHBJJNnVJJFHDJJXDFJJTNVDJHBD@BEJAHDNFF@HQPAFAJFNPD^B^EJGPALBPHJHDH@HIJOJGLBLHHGD@DBDFBLADB`TJL@DCXFHTHhBXAJCHCJILUHAbGPC^QJElFJDFFBFAH@LDJFDPDH@FCJIJODCHANBZJ`ZFBFCPAzBVEPIF@LBLHLBFD@N@FGP@NGEACEAI@CB@BDFHDJBDDADKHABBFF@fJH@DADSFIBEDAJ@FBHND@LCRMF@@@BFGFAD@LHHEBELDJ@HDNBTCLGJCPGBBDBBVFFHBHCJDJGHUHMHAJBFFDAJNFAPH@DFEDAND@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/henan.js b/asset/map/js/province/henan.js
new file mode 100644
index 0000000..b5906e4
--- /dev/null
+++ b/asset/map/js/province/henan.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('河南', {"type":"FeatureCollection","features":[{"id":"410100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@bEV@JANAZBLA`UJOPGN@‚NPH`DR@ZEHCVST]POLCtE`D|LRHvXPD\\GvATHNJHHDNRVrlFHFFFDJDLATMZO^ALDRAVHVLTDR@PGTMTGZQHAP@^J\\FBCDIJMZM@IAOC[MGUIQCOAAUKGAOB]D_AaEMGAEFIRUxkNMHKAECCMCMGIKIMKGCEFeHIZSDE@GCWFiAEMGECBEHYASHIAEIIAG@EJGGEG@EBANCDO@CCEMAQCU@S_YCEEKKgIwAM@QAESQGCG@IFGJIHYLUNGBW_UMIGBOBARCDCDMAWAAKEICECSAKCM@OFO@KAO@GCCABbCFEBIBAACEEMGCKAE@KDEPC [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/hubei.js b/asset/map/js/province/hubei.js
new file mode 100644
index 0000000..daace13
--- /dev/null
+++ b/asset/map/js/province/hubei.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('湖北', {"type":"FeatureCollection","features":[{"id":"420100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AAADA@@BBBA@CAGFAAAD@B@BCD@FDAHBBJDAFCJDDABBAADGCC@CBEDCAACBA@CAEC"],["@@@CAA@D@BB@"],["@@GBGLM@EAGFIFA@AFM@AHDDADIBIBCAKA@ABCCAADMJSBGFBDABMFUBE@[LEF[NUFQB]FUJE@CEG@KGYDCCIIGGMEUCOKƒMuGIDkL@NDPCRGJSRCJANDX@NCPCNGDmFCDAHC\\EHQFHVATAHCFEFEJADEBW\\Q\\CF@HELSPGBQ@_JaEC@E@GEACEECAKACDCVBDDBJAFHBJGBQJOf[p[XqbOB]@qMc]QY]oi{GS@KFGcMC@CFCBYII@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/hunan.js b/asset/map/js/province/hunan.js
new file mode 100644
index 0000000..1102d82
--- /dev/null
+++ b/asset/map/js/province/hunan.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('湖南', {"type":"FeatureCollection","features":[{"id":"430100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@J^ABICEBCD@DKBADFJTNHJBDCDCJMLGHADGF}ICACGOODMHM@GCAC@CBCD@DFFIFEAA@@CFG@AEGEAMAGGIEMNIHeXSPC@IFGJGPEHKHA@KGFMAMCEIKBALBF@DEBE@CACCAAJA@ACMACCBAFAAEMCCDKBOMC@ELEDI@ECCEE@CDAFRTBF@HG@ECKABDFDADCFKFC@ACEAAADAFADAAGCEEEGAI@CBDRAPGJGTEHKCI@KHAFDRAFABKHGPKP@FFL@DEBECEAEBI@WBIDIBCC@GCI@CFGFGFEH@JCLGROAGGMMAIACB@NEFIAKFG@AA@IPKBCAASIAUCCECDK@ICIGK@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/jiangsu.js b/asset/map/js/province/jiangsu.js
new file mode 100644
index 0000000..5b87345
--- /dev/null
+++ b/asset/map/js/province/jiangsu.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('江苏', {"type":"FeatureCollection","features":[{"id":"320100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@IIOWECG@CBCDBHFJRTLFJ@DABEEC"],["@@ZKKK]SCCAKCCMC]GG@MJWEYAI@_NGBUGIGG@{OOBCEFAEIAQ_@QAYIMMBEIGMYIAIE@IEEBCH@@AB@@BFABAFDBAJBLCJBFEJ@ECB@ACFD@CB@@BBAADF@DGACJ@DCXLN@HADMJOFEJFF@DABECaIWMMBOJO@KFGAMDEDMKMBCP@DFTIBCBWNC@ME@EDC@ACCQEGC@E@EDSNO@OIGFKBWGMAIIMAKIBMPWREL@FHNAJBTEPALIVDJGFKBYFGCIBAJC@KCIMEIM@KCKGEGEgHCBEHYQUCCIU@MOK@I@W@MEABE@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/jiangxi.js b/asset/map/js/province/jiangxi.js
new file mode 100644
index 0000000..b9c7a13
--- /dev/null
+++ b/asset/map/js/province/jiangxi.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('江西', {"type":"FeatureCollection","features":[{"id":"360100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@EHIJ]AGKUJSBGCIBEBICS@W@MEOKE_KOMOUM]CKBIG@ECGGAEEI@CDE@EECAAIDMCGCCEmGeCI@OFUDSEOIEECK@GNMBEBOACKM@GJ_DEDELA`BJCJABCDEHGD@PBLEDEHKRKHKF[AIIQlZ\\HJA@QDCFCDBDDHBDDEJP@FA@MDGHGFKFC\\GN@LEH@NGRMRQBKAIGK@CBABEIOBEBAH@DC@ODGMU@E@GLMLGDELOBMDMRchuPOPI\\[TONSXSFGBEGY@EPYBK@QCKBACABAD@DAB@D@AADEACBAAAGCBCDAAO@AE@AA@ADEECBGCAACHCEEC@GAaU[[QYEMGKEI@I [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/jilin.js b/asset/map/js/province/jilin.js
new file mode 100644
index 0000000..c8a78c8
--- /dev/null
+++ b/asset/map/js/province/jilin.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('吉林', {"type":"FeatureCollection","features":[{"id":"220100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@B@ACAB@AEBBB@@AAABDBFA"],["@@BAIFBBFE"],["@@AA@@BBFACGAB@DGBDBBBBA"],["@@GBEDE@EFCNSJUFKDE@KFADOFE@ABMFMRKHSFMBEBGH]VORIFKDIDAJILIFCFBBHBDHDBF@LD@DDBH@JDNFNH@FGBBF@NCDDDFBCLGFK@KCK@QGEDCDDF@BO@KACBGBECK@GACBILCDKAGHCBHL`P@BGDFFADSDAFDBAFOFIACBBTLN@DG@GJMFEH@HADSDOL@DHDAFBJIN@JKFIJBHLD@DBB@BDJCD@FDBBDCHFH@B@BCB@B@LEFCDDDAD@FCFB^C@BBA@GJ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/liaoning.js b/asset/map/js/province/liaoning.js
new file mode 100644
index 0000000..df19f53
--- /dev/null
+++ b/asset/map/js/province/liaoning.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('辽宁', {"type":"FeatureCollection","features":[{"id":"210100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MDGFSKGAACC@EEIAECG@AACCKDAFEDABC@ADKBEGAAACA@IIEFSACDC@CACGCBAAG@U]E@ABAA@BACC@AACDI@@DCCBDAACBDD@FCB@CADC@CEADCBAFGGKBAECBCDABKA@BBDCFFFGFEAEBBDFDABKAC@@JE@CD@DFBABKDCECAAB@F@@CC@E@@E@EFA@EEA@CDADEDAFADDBADK@BC@AMDG@GGCB@FHDCFE@MECDI@CBCAEBCDC@@CBCGADEE@EBI@AFEBEHEBAFKDOBBDDDABKEQBCAIHHBGPYBCDCCMD@@ABCECABDA@CAGDEAMBBFCDBDEBFFEDB@AAIF@BBBG [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/neimenggu.js b/asset/map/js/province/neimenggu.js
new file mode 100644
index 0000000..d10e3a8
--- /dev/null
+++ b/asset/map/js/province/neimenggu.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('内蒙古', {"type":"FeatureCollection","features":[{"id":"150100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FCBGDEJBH@LBFHJBN@NAHCBCAUF@@FJ@@E\\AAFDFT@LSCEJAvE@AC@@AHBJ@RFNBHAXKLB@B@FN@BEVADB@J`BAORDACHAFI`DIPK@EAABBFHBFA@DPBXBHGCSLO@CfJN@@CNEECDACAFCBAFGJCFC@CHCJITEFAVBBCFBCBNBPCDCLIBCBKCEAMG@MYBIBATHHCJ@JJB@JGHKFGFI@AAKGIAEPU@CEAACDMDEFEDI@CGA@AFSJQAEDAHC`ELENDLE@AOBCA@APABAOCAEHGRKDGLCDGNBNMTAHELEH@FEHC@E@EFCD@HGB@HFDALBFCD@DAHADCBEFAFAFEDE\\G [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/ningxia.js b/asset/map/js/province/ningxia.js
new file mode 100644
index 0000000..abc581e
--- /dev/null
+++ b/asset/map/js/province/ningxia.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('宁夏', {"type":"FeatureCollection","features":[{"id":"640100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@CFGUKGQCMBSH[Š¯JSEGmUQBLYgSeHECWBUJgBGV[DAPHHBrDDAG]DG@[FBCV[VP’GA[GYMYWu{‰sUoOWECCE_FgF‹DMAk¹FÅ`KY}WkMEGCJOTGJSLONW^OJja^[\\EFcTUJaDaZYLS^GJaRg^BLM@CDKAIBSBUH@H@BUJCHGF@DGLBDFB@BIFFFBDI@BFE@@BJTCD@BJBADHBzB\\FD@FCTBBBXVHRID@xIBaBA`EBw@MLADBFJDTV@B]TIP@FABQJUKA@M`GDCD@BH@BDADIB@JEFDD@DQLKFEDKVCPIJMHSFAFCFBD@HHXHHTJFH@LS^CJBHiHABGHSFDPCBK [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/qinghai.js b/asset/map/js/province/qinghai.js
new file mode 100644
index 0000000..4c3baf4
--- /dev/null
+++ b/asset/map/js/province/qinghai.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('青海', {"type":"FeatureCollection","features":[{"id":"630100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PBHANKJMDCTJHBJALC^CF@PDD@FIFCLAJEpMJBHFDD@JBBJDL@DIRIAE@AVE@CCMDEbA`BJ@TSBCBK@A`IFEFERINEJCP@TCJCTMLYLETIPCGMCWA@SHE@KEIOBaDMLY@MOoAQACC@QBAACEEEWK@ADEAGGGOIACGMBOIIIMAGDENGJOJGBG@GMMAA@KIKBKM@GAWMDC@ACEAIECKE@ELU@CGK@WCQ@WIMBK@GFCBE@UAEKKAEKEAEFIJEDE@EESDG@CKGAC@MEI@EBSAEGKKKBIDCLABAACGGHIDMACIIEO@ICEGKDIHGRMB@HHFHDDD@DADG@CECCSDEDANHLBHAP [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/shandong.js b/asset/map/js/province/shandong.js
new file mode 100644
index 0000000..6275a93
--- /dev/null
+++ b/asset/map/js/province/shandong.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('山东', {"type":"FeatureCollection","features":[{"id":"370100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FMV_jEJCLK@MIK[COCKGCO\\ENCHGQGGIHGTCd@`FV@JEXWBICWQ[RSlSVM^_CkCKEM@OF[LWZUD[J@@CF@@CC@AI@GBALCAED@@@AEAAGB@BIBCECADFAFE@BGGACGBCDAFA@CSBCACCGBABC@IG@ABAAEAKCAHMTUFMf_HKFO@SH_J]BEBKFG@EDABGcaGAyEUCOGeWMEM@KBaHECACDCHADCAA@OESGIMIKEIE@ONMJGjMLCPGJIZHGTAXFJJNJNCVOHDPDJ@RADDDBDC\\F@FCHA@BCA@CHBBF@BCJB@ELDLB@DL@@AFANABGBAB@BGHA@CBABD@HLDBB@DBBD [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/shanghai.js b/asset/map/js/province/shanghai.js
new file mode 100644
index 0000000..d2d83a6
--- /dev/null
+++ b/asset/map/js/province/shanghai.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('上海', {"type":"FeatureCollection","features":[{"id":"310101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AHV@BDCPEPLENFHCJHFBNCAGBGXWFIBGCGMUKKCCcGCDGBALCPIAAPGR"],"encodeOffsets":[[124373,31970]]},"properties":{"cp":[121.490317,31.222771],"name":"黄浦区","childNum":1}},{"id":"310104","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CEAMMAA@C@AFA@@BC@ABC@@BD@@BH@@BB@EHDDCBECADGEEAEBFNET]CMRELQjOEGRFBAHDBAHH@@B@BDA`H@F@BC@AB@FD@DD@@@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/shanxi.js b/asset/map/js/province/shanxi.js
new file mode 100644
index 0000000..f38d0de
--- /dev/null
+++ b/asset/map/js/province/shanxi.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('山西', {"type":"FeatureCollection","features":[{"id":"140100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AFWN@BBJADaHWR@DTH\\BDB@NADCDQ@IBCJDJ@FE@WB@DC@O@BLBFPLVT@HAVAFCBOAgGO@Q@SHEHGVEXEFEDQDEBGTKJGBGNGJYLAD@XCP@HFFFPGBABDBBDABOBKFAHGFgHKHELC@KCCB]dA@SEIBGDU@gKKAS@KFOPCHMEgBKC_MO@GFIRENEFG@]GADDPEJMNGL@DEJBJAJKHCD@LDLEFIFMBOEIEGAWD[@WBaCOFCF@JCJEHIHIFGBMFCFCBS@SHABAHBJCBKDKJONALDRCDG@OBMDOAKHMBaIIQGE_BWMI@GHGBC@MGODK@SGaBQEKKG@GHETAL@RADGDQDIF [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/shanxi1.js b/asset/map/js/province/shanxi1.js
new file mode 100644
index 0000000..b0ce4e3
--- /dev/null
+++ b/asset/map/js/province/shanxi1.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('陕西', {"type":"FeatureCollection","features":[{"id":"610100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@D@@CMMAIKGMCCHIHJLABDFJH^C"],["@@DFJFtBFABGDCPBDCH@LBF@LGFAB@FFDLDDFBNIF@H@LHN@DCDKBCF@L@N@LJZBNB^HLFDFBJDDJDFHB^DLDBF@RA`DTARHB@LKFSBGFEJEDCACICEI@MFIBELG@ACCECECBaJgJoAQFIBYXƒBQKBMEOCQUCCaEGDEAGKBIF[BCVAHGBCCCIBG@ECOaAODKHCFATALG@ABORKBEAEEEHEAK@IFEJEXEFIBEASLCTA@CFAGABKFBB@@CAA@CECDAAACABABEECDC@CCCAA@CCAACBAAABEB@@CB@AGAA@ACABAACBA [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/sichuan.js b/asset/map/js/province/sichuan.js
new file mode 100644
index 0000000..1463560
--- /dev/null
+++ b/asset/map/js/province/sichuan.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('四川', {"type":"FeatureCollection","features":[{"id":"510100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@A@B@"],["@@@CGDH@"],["@@HBHBFDFH@FFDPBjT`@DBPLPJN@LATKNEZMNEBAFAJFLNHXDFJBJHNJR`LFHDH@JCTDJATMHAHALBPCJBNDNAHDFDF@LQBAHCLCLBH@JIFIDMPEF@`RRNPAHPHNTXPBLFTJJF`@VD`^D@LANJHBPPDLDLAjDNRV\\Rp\\FLDBRBD@BF@@EFAPDPFHBJ@NETAVEHQHAFJRHLHFFLBHAXHJHHBDEL@JHFDPFBPVFNDPJNFDDDBDAFJNF^HBLHPRBDAdKPHdBZOXIHBZR\\BFING\\@HBJETBPDDDBNA^DJFHLB@HAHGR@LCBBFFF [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/taiwan.js b/asset/map/js/province/taiwan.js
new file mode 100644
index 0000000..95afe19
--- /dev/null
+++ b/asset/map/js/province/taiwan.js
@@ -0,0 +1 @@
+(function (root, factory) {if (typeof define === 'function' && define.amd) {define(['exports', 'echarts'], factory);} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {factory(exports, require('echarts'));} else {factory({}, root.echarts);}}(this, function (exports, echarts) {var log = function (msg) {if (typeof console !== 'undefined') {console && console.error && console.error(msg);}};if (!echarts) {log('ECharts is not Loaded');return;}if (!echarts.register [...]
\ No newline at end of file
diff --git a/asset/map/js/province/tianjin.js b/asset/map/js/province/tianjin.js
new file mode 100644
index 0000000..c29f295
--- /dev/null
+++ b/asset/map/js/province/tianjin.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('天津', {"type":"FeatureCollection","features":[{"id":"120101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BhB`R@DA@CD@DCFCHBLDF@DABKFIJGQG@COEQM@@OASB"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.195907,39.118327],"name":"和平区","childNum":1}},{"id":"120102","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XFFIE@BGGA@KVBN_]CCCLg†MGE@CD@AGB@AEGMEACB@BA@BFWFACKA@DA@@DA@C@CCCDGIAKMBWLGFERWT]bADCNE@DDIDEFBHTHBD@DLMPJj@ARX [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/xianggang.js b/asset/map/js/province/xianggang.js
new file mode 100644
index 0000000..42bb4b5
--- /dev/null
+++ b/asset/map/js/province/xianggang.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('香港', {"type":"FeatureCollection","features":[{"id":"810001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@D@bKBoCWKACBGCI@CJSVGFIBKCM@ABAF@LFHPFJJPFVB"],["@@ABD@@AA@"],["@@AAEAAB@DDBFC"]],"encodeOffsets":[[[116895,22829]],[[116861,22818]],[[116860,22817]]]},"properties":{"cp":[114.154334,22.281931],"name":"中西区","childNum":3}},{"id":"810002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BMHBBGD@BAHBD@HKDEF@FHDEDECCGCIAAQWC [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/xinjiang.js b/asset/map/js/province/xinjiang.js
new file mode 100644
index 0000000..1099027
--- /dev/null
+++ b/asset/map/js/province/xinjiang.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('新疆', {"type":"FeatureCollection","features":[{"id":"650100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@KmGqAMAKH@BKF@ALNA@EF@@AB@DPHBDLABEDABIBD\\DDBNHJVšH@@DP@BDBABAD@@FB@L@DBFAJBBFHB@FA@@DD@EBFDLAAEDA@CFA@B@ZB@@BEBAJDBGFAAML@@@RFVBTFB@BCDG@@JHZHABBDJHN@DBFDD@FDDCJ@JAFDRAPDHTNDFBAHMDCEINA„OACAACY@IRGBEDCJAdZBBhZKRPHCVldHĀ_VOFBž}BCJELCNAPCHAH[FITUP_JQBEHCLJPFPObBHGNBVCD@DCH@HIHKRCF@BDBCLCD@FBBABDBADD@AHB@ABB@DHFDuÔǿ˪֘B_“ƫүQyM_Aƒl“FÁ›ě¨L@ABIFK [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/xizang.js b/asset/map/js/province/xizang.js
new file mode 100644
index 0000000..40b1310
--- /dev/null
+++ b/asset/map/js/province/xizang.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('西藏', {"type":"FeatureCollection","features":[{"id":"540100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EII_OcEEICGACEEcBI`iLGDKDSIW@OFM@CGGOKEMBMHOX_AKCKcMMCUASGGBIPGFC@CGGQGGIGICOQOIAI@A@UGIOB]NIIQ]KEQEqLQ@MDSJ[MKKOCSIIOSKIKCAQDS@ILIFKFIBI@KCICQGQDMLI\\M@UDWCKDMFU\\IFQFKISBWHW@KDSCIMIIQBCPMJiJB]OQFIGCMKWEKQJOBKEWSQEUDcDEKAKAMcEcCGZKHWHSBWaUBMFENGRJTFZBRUDQGQ@QBQMOCO@OLOJQAMGOMQSeUWIYGYAQWSEiKOKaeSGSBOFaTMFYCQFQJUZeJMBÃMKNQIOGMGoQOMMaOO]QSAO [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/yunnan.js b/asset/map/js/province/yunnan.js
new file mode 100644
index 0000000..56966bb
--- /dev/null
+++ b/asset/map/js/province/yunnan.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('云南', {"type":"FeatureCollection","features":[{"id":"530100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FKCQEGAGDIBQBCHIFMBCCEFADG@G@OHQ@EHIAGBO@OBCDCACBEAINc@MHO@OFEHS@GBKAC@EFG@GAAEAAEAUBIDELGFOFCAEFE@CECDEEICOAE@IDGCGJGPEFIRIJ@NHJ@BGCYBIFELATADC@CEC@ALODKFEHANDDFIL@FJNL@JEP@H@PMHKRGJINI@GBCNGDEBCEEGGAIGCG@CC@CRETO@CBQEIAMFKFGLIDGDW@CHBJGJICGBAJ@BGFIRI@CNQ@IIKISOWKc@ICEBIFGBEBAFA\\@BEACMAIEBEHEBGEAE@CAAM@EDGFCXE@@AKCKBCEMDEHI@CGEAGA@FKBCIAA@ [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/province/zhejiang.js b/asset/map/js/province/zhejiang.js
new file mode 100644
index 0000000..c78ab97
--- /dev/null
+++ b/asset/map/js/province/zhejiang.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('浙江', {"type":"FeatureCollection","features":[{"id":"330100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XBFBF@DGFWFK@CDO@MCE@CFKBID@HFLBAKECAKBMFCBOCCBKSMDE@MOKEG@EMGIACACCBCDCNBFI@Q@ALA^IHCBGDBJHDBTBbLjHBE@MIGOAOYDAGULI@CVKPMHANMLR@Jh–HFPHTDŽNÎAÈBRA¨UFAHGFMBk@[BkJWHGPMyqq{u_AEcuWkEYCCKAQGCAIBEH_@IEC@A@CHMHkDICGAUFGDGLGHaHGGGDOAEOBOEACCAAM@CICCAQA@aEIBAFBJDFCDAABBABA@BB@D@A@DA@AE@@ADABD@@BCBACACEA@BG@BaEECACBBNABM@ABBF@DIFEFCNCDEAAAU@OECAEGIHC [...]
+}));
\ No newline at end of file
diff --git a/asset/map/js/world.js b/asset/map/js/world.js
new file mode 100644
index 0000000..db3c519
--- /dev/null
+++ b/asset/map/js/world.js
@@ -0,0 +1,27 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('world', {"type":"FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[{"geometry":{"type":"Polygon","coordinates":[[[47.97822265625001,7.9970703125],[46.97822265625001,7.9970703125],[43.98378906250002,9.008837890624989],[43.482519531250006,9.379492187499991],[43.181640625,9.879980468749991],[42.84160156250002,10.203076171874997],[42.65644531250001,10.6],[42.92275390625002,10.999316406249989],[43.24599609375002 [...]
+}));
\ No newline at end of file
diff --git a/asset/map/json/china-cities.json b/asset/map/json/china-cities.json
new file mode 100644
index 0000000..f03ba7f
--- /dev/null
+++ b/asset/map/json/china-cities.json
@@ -0,0 +1 @@
+{"UTF8Encoding":true,"type":"FeatureCollection","features":[{"id":"340100","geometry":{"type":"Polygon","coordinates":["@@DKJOHGCmDcCC@CHGDEHC`ATCnQ`QP@FBVNDBD@JENKPAJBŠ^ZNNTLHFAHCBCNI@AAC__SeBaAICMEI_QCCACHCNATDZH\\YVG\\CFAH@JCFU@YECWCGCEE[gCICKO[CMR]HALATIBE@G@KBIBCFEJEbGFC\\OJGRMbQJAZJrJFBF@PFl^ZLF@FDFBPARXR@TNAQ\\TPFTATBBUN@T@NCVIJMD@LDDFNHLDN@`M\\CHADCJGTWFCJ@LD^VF@VQ\\IRQDILOHa@OFY@MFMAGYYIICIACBEBCFGAM@EBGPKDEDSFIFEVGSQWOkKIEEEAC@KDMEKQGYQNIXEFKDCBEACDEHEB@BBBCBAAECBACFAFMNA@EHC@A [...]
\ No newline at end of file
diff --git a/asset/map/json/china-contour.json b/asset/map/json/china-contour.json
new file mode 100644
index 0000000..7c6b41d
--- /dev/null
+++ b/asset/map/json/china-contour.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"100000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@š¦ŜiÀºƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅ó­@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ AɞÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĒĞȠzÐŘΰH¨ȔBĠ "],["@@ƛĴÕƊÉɼģºðʀI̠ÔĚäœθؾNJŨxĚĮǂƺòƌ‚ĪŐĮXŦţƸZûЋƕƑ’ʳÛDžƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@Óɖ± dƊ½ǒÂň×äı–§ĤƩ™¶hlçxĬŸĄŞkâ’ÌwøàIJaĞ‚fƠ¥Ž„Ŕdž˜®UɎÖ¢aƆúŪtŠųƠjd•ƺŠƺÅìnŽŢ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼìĴPðŀbþ¹ļD¢¹œ\\ĜÑ̔ùўÊ‰ȮŒǪűŽÀêZǚŐ¤qȂ\\`ºłĤ\\ºs|zºÿŐãѦvĪĺĺ†ĈłÈ͚FÞºĠUƢ¾ª [...]
\ No newline at end of file
diff --git a/asset/map/json/china.json b/asset/map/json/china.json
new file mode 100644
index 0000000..41c16a0
--- /dev/null
+++ b/asset/map/json/china.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"710000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]]]},"properties":{"cp":[121.509062,25.04433 [...]
\ No newline at end of file
diff --git a/asset/map/json/province/anhui.json b/asset/map/json/province/anhui.json
new file mode 100644
index 0000000..b1a2d0a
--- /dev/null
+++ b/asset/map/json/province/anhui.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"340100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FJVR@HARFFHDXDDDHLBHAjBHFTPV@HOVAHBNFNPTTjPXP\\RZ\\\\TXNVNHVHdDd@RCd@Z@JBJJFFCHOHABELANDLMDGFGP@HGBQCMBWN›I_PQQ[GwPWJGBEAUQ_KSFWHQHIEQXIBKAKKBKDG@GMEGHG@MCOKKJUACDMEG@KAUGICG@eH[CIAG@WCKEOGEACDE@IPE@AHE@CBCAA@ABBFEFIBEDGBENILOHGNKJ@FEL@HFLAR@TBJCLGHAJGHCJATDRZb@FAHGNAJBbAHQZAF@FBFHNDN@XAHKFcAGBBJFJ@FCFGDMGC@CDADEBBBAB@F@DB@@BA@AFABABC@BDC@ADEBAFE@@DE@@DEB@DEDCFCD@DBBHAFP [...]
\ No newline at end of file
diff --git a/asset/map/json/province/aomen.json b/asset/map/json/province/aomen.json
new file mode 100644
index 0000000..3d2cf84
--- /dev/null
+++ b/asset/map/json/province/aomen.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"820001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],"encodeOffsets":[[[116285,22746]],[[116303,22746]]]},"properties":{"cp":[113.552965,22.207882],"name":"花地玛堂区","childNum":2}},{"id":"820002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MK@CA@AAGDEB@NVFJG"],"encodeOffsets":[[116281,22734]]},"properties":{"cp":[113.549052,22.199175]," [...]
\ No newline at end of file
diff --git a/asset/map/json/province/beijing.json b/asset/map/json/province/beijing.json
new file mode 100644
index 0000000..8a2b03e
--- /dev/null
+++ b/asset/map/json/province/beijing.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"110101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DB@DP@NCHB@XD@AED@BKB@@CD@@AV@@EJ@@EAB@KB@AA@AP@CDJ@@CD@@EACB@FBD@BAACCCAG@QI@CB@A@@@BE@B_BWLBN@@CE@@AB@@KH@@AD@@AC@@CIB@AC@DWCKi@MAE@@CD@@@@EB@@AA@@CC@BGC@@AG@CBM@@AI@@HC@@BC@@DE@@DKCIBFB@HfBAvCB@PG@BHA@@BB@ATJ@@BF@AJC@AXCB@bMA@H"],"encodeOffsets":[[119181,40920]]},"properties":{"cp":[116.418757,39.917544],"name":"东城区","childNum":1}},{"id":"110102","type":"Feature","geo [...]
\ No newline at end of file
diff --git a/asset/map/json/province/chongqing.json b/asset/map/json/province/chongqing.json
new file mode 100644
index 0000000..ba3467a
--- /dev/null
+++ b/asset/map/json/province/chongqing.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"500101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@NFPGFIJEHIHMJGBKLQD@D@BB@LFBHADHDDD@RJLBDJDAJEDGD@NHB@DGACBAFAHAHC@CEGO@AAHSBM@IBCJCFEDGAM@CDAJ@VHBHAFDBDABGHIHBHAZ@LFDGH@DCBAN@HEJALJRJFLJFLJLJHBN@DBBDGHADHVDH@DEDDDJHTJ@ACKDENKHEH@FHLJJBhVHFHJVL`LTLRDJLTFBCD@@FEHGDMFM`ERNAJCJ@FFLDPJXRJNNLHF\\FBBX@NBJFD@JGLBFCDE@ECEAGDGBWBAHAFHDBN@XFFDHEJANDDD@FEJ@DDFFFJ@LC\\JJBFABA@CKEAC@CBG@ACEOC@EHIBGNKDABIDKDEJG@ECGJSDMDEJAV@XFNDPLZ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/fujian.json b/asset/map/json/province/fujian.json
new file mode 100644
index 0000000..c580f92
--- /dev/null
+++ b/asset/map/json/province/fujian.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"350100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@K@KLDBLBBIHCAA"],["@@CBABCD@FJFCFBDHFFBB@FM@CCEBCCEMC"],["@@ACCBBDDA"],["@@@CC@@DD@"],["@@B@A@"],["@@MCKEO@ICCCAEAKBKAAIAC@AVFPCRBBFBNHNBVXJ@DADCHAB@@GBCL@B@BCCIEEBC@CHCACG@ABKPA@CC"],["@@@A@B"],["@@A@CDC@WH@FLXCB@DFDATBFH@HELA@CCACI@AFAD@BA@AH@DED@FDBHHHJDT@JC@AEOECGKC@EDOQIACBG@CC@CKC"],["@@B@BCE@BD"],["@@J@BA@AAAI@ABBD"],["@@B@@ACABD"],["@@B@@AA@@B"],["@@B@AC@@@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/gansu.json b/asset/map/json/province/gansu.json
new file mode 100644
index 0000000..0226508
--- /dev/null
+++ b/asset/map/json/province/gansu.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"620100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@GG@IEEEKE@IMFQRGFEBEFA@CFCBDFEDABKDEAGH@HKBGAEACDGLMBGLIBAFAJGD@JCVAEGECCGC@AAEA@CEEC@ACAEFGD@BID@DCJOPGBCTCBCDCDBBBB@PABGBAJBFDD@B@HCDCL[BMEEL@FFD@TELINBJAP\\HFFFD@DDHEF@FEN@RCRBREBBDCB@@FFEBBJCRABAH@@FEJAJIJIAADGDCHE@GD@HABE@EHGDAHFB@BAB@DGD@FADLJDFHBD@@CFAFBDGAA@AHOLGBGJBPIJBBEJADB@EHMBCGMBERGB@BFFDDLAFNFHCFGD@DGL@HAB@HDDADBJAPFFEL@BE@@JBDCHHFCDM@IQCKCACAGHG@EBC [...]
\ No newline at end of file
diff --git a/asset/map/json/province/guangdong.json b/asset/map/json/province/guangdong.json
new file mode 100644
index 0000000..b55e8eb
--- /dev/null
+++ b/asset/map/json/province/guangdong.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"440100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EHGTANB@DAHBPHFEDDNFRPBFKFEHSLKAGDUCAA@CGA@AEAAHQCGHEDWFGDCDAHAbI@ABADCDAFGA@DB@AFJFEPFB@Dg\\EBCHBJBBNB@DAF@H@F@LCPHFDCDFJBFDIRMPSHGFEACCA@BHABEFMFKJCF@JDJ@J@DNJCFIBABAFBNHHABALREDHABEAABGbDJBFMEqC]DCBKLOLUHIFCJAFDHCD@BL@VL`@BDA@@BHFABBD@FFB@FADECGBCPADEXB@L@BDDdADg@EDCF@TFHPPTHDHAL@HBJIRQPINM@MLBNCPFDF^E\\EPEFQDADAJABQBEH@HBFABGHIBMHKNGQS@CHMO@AF@BIGKSBKCCCGCUACA@CHKBKJ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/guangxi.json b/asset/map/json/province/guangxi.json
new file mode 100644
index 0000000..3183b41
--- /dev/null
+++ b/asset/map/json/province/guangxi.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"450100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@IFCAQNEAGEBAMGMUEBIKBC@EFGHBAEBIGI@EKGEGAKKA@EDIP@XFBCVIKK@KE@CEj@VGEIGBE@GCCABEFECK@AKAACFI@CIEBGAAG@EENOF@@GKIMB@CKEOAWOEMPEFKOQDEJ@LBABBH@DFFH@FCFGIKEM@CDCD@LDLABCGIJ@FB@LFBLEFCAE@CFBDBDGGAAMJ@@C@CLCFEHDBSCC@CDC@CCEOBGAAGBCFE@OD@FBJICCDGDAJBJAAIDEHA@MCIGC@ICCBOL@DECQACNABDFHDAHEB@DDAFJHH@@H@HDDLBHFB@BDGHBDD@BDAHFBJNJGH@JDHDELFL@HBDJBADTLAFHBBEJ@LD@FEHDDHEH@EDF@DDEB@BF [...]
\ No newline at end of file
diff --git a/asset/map/json/province/guizhou.json b/asset/map/json/province/guizhou.json
new file mode 100644
index 0000000..9b51e7a
--- /dev/null
+++ b/asset/map/json/province/guizhou.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"520100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DDAD@PL@JFDNBDB@FABB@DCDBBBADD@EBABNFBD@BB@ABFFBJNBBCHBDCD@BJBDANGFBJF@FHAPRBNJFBDCJDDKBJNEDAF@DFDFBDJBHABGHIFG@ABWEEBCAG@EFGCSHQEK@CBCHEFQF@BDFK@EBALBB@HE@AHEDBHABC@CBGJAFIDBGM@BDC@AFD@AFGLBHAFJFENGHGDI@SMIGUMWCO@[HS@OFEDY@IBSBCL@BBBDDDAJDH@FD@PP@BBBDGRADGFG@I@DDABEACACBMAELJ\\BN@JKXGJMDQDIDUTIFE@cI_KUKKA[BMBIFMJCFODAB@BHREHGD@DBDDBJBEJBRABC@YREJCLEHYXETILaTAPPP€HPLBNSx [...]
\ No newline at end of file
diff --git a/asset/map/json/province/hainan.json b/asset/map/json/province/hainan.json
new file mode 100644
index 0000000..e3333c9
--- /dev/null
+++ b/asset/map/json/province/hainan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"460100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@Œ¢NDxBrCpI^OTGjGfBBBFFB\\PlRRPJhJ\\DˆC|K|Q¤kfGL@PD’ŸFAHGFMFENEJGNODK@OCE@AFAHEXGJEL@BEFAD@BC@MFGD@DAL_CKAEN@D@BBNKF@BEFEDGFCFICMAEJGDUBGAEKIAEHQJAXFN@DCBEJIJCBGACWMCG@CFGDYFKCEMEGEE@SAKFELBFEDEIEBIAKOGCEGAAACECCBCABIB@FDB@ACXA@CCAKAACBGAAEAEEAIEICOCCCAGEGSBEHKBIDA^IDE@ICEGBOCKBIGE@CAGBGGACJCJ@HDDABMGGFU@MAEFGPMFBHCHBTADCBCDAVBD@@AEEGAGEKABGC@CCDECIDIAEGIEMGECIIGAC@[AKFMD [...]
\ No newline at end of file
diff --git a/asset/map/json/province/hebei.json b/asset/map/json/province/hebei.json
new file mode 100644
index 0000000..baa75f6
--- /dev/null
+++ b/asset/map/json/province/hebei.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"130100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DLBNFfAPRjpllzR\\ptJNFLDJOf@LDL\\bH\\FNDPG^ONOHWDiJGJIFWJKB]COQQSBED@RBRDLHJ`T\\HXPFLDJAJCLMJWNKJBLAJGLQFaCMBKHEJELALBˆCTM^E\\EJILMHODORMhENOTENOTMHGBEDWCEBEHOLBBTBDBDLEH@HJT@LCFGFBJCHHHBHEFWJGBEH@DDBCLCF{xCBK@EDEFLZJNDRAJBJDALEF@@FCFGF@DHFFHADCDKBWEOGS@oNaDS@IAEDCAKEGDKFABPHDB@HNFDD@DMHGAMCKFADBFDNCJGFUKKAOCOBKDIFW^MJMDKBU@wKU@KDMHIJI^QNYX@TDZRtDrIRUNMLMVCPDPHPBLJ\\RTL [...]
\ No newline at end of file
diff --git a/asset/map/json/province/heilongjiang.json b/asset/map/json/province/heilongjiang.json
new file mode 100644
index 0000000..f32c481
--- /dev/null
+++ b/asset/map/json/province/heilongjiang.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"230100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@LKT]LEL@HB|VX@TOJELBHHBJJNnVJJFHDJJXDFJJTNVDJHBD@BEJAHDNFF@HQPAFAJFNPD^B^EJGPALBPHJHDH@HIJOJGLBLHHGD@DBDFBLADB`TJL@DCXFHTHhBXAJCHCJILUHAbGPC^QJElFJDFFBFAH@LDJFDPDH@FCJIJODCHANBZJ`ZFBFCPAzBVEPIF@LBLHLBFD@N@FGP@NGEACEAI@CB@BDFHDJBDDADKHABBFF@fJH@DADSFIBEDAJ@FBHND@LCRMF@@@BFGFAD@LHHEBELDJ@HDNBTCLGJCPGBBDBBVFFHBHCJDJGHUHMHAJBFFDAJNFAPH@DFEDAND@XVCZQ@GD[NSFGHIRATINBFE@FHD@DF@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/henan.json b/asset/map/json/province/henan.json
new file mode 100644
index 0000000..e179789
--- /dev/null
+++ b/asset/map/json/province/henan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"410100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@bEV@JANAZBLA`UJOPGN@‚NPH`DR@ZEHCVST]POLCtE`D|LRHvXPD\\GvATHNJHHDNRVrlFHFFFDJDLATMZO^ALDRAVHVLTDR@PGTMTGZQHAP@^J\\FBCDIJMZM@IAOC[MGUIQCOAAUKGAOB]D_AaEMGAEFIRUxkNMHKAECCMCMGIKIMKGCEFeHIZSDE@GCWFiAEMGECBEHYASHIAEIIAG@EJGGEG@EBANCDO@CCEMAQCU@S_YCEEKKgIwAM@QAESQGCG@IFGJIHYLUNGBW_UMIGBOBARCDCDMAWAAKEICECSAKCM@OFO@KAO@GCCABbCFEBIBAACEEMGCKAE@KDEPCBE@K@COQSCKKOKYDSAIFQBIFG@G@EC [...]
\ No newline at end of file
diff --git a/asset/map/json/province/hubei.json b/asset/map/json/province/hubei.json
new file mode 100644
index 0000000..43c977a
--- /dev/null
+++ b/asset/map/json/province/hubei.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"420100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AAADA@@BBBA@CAGFAAAD@B@BCD@FDAHBBJDAFCJDDABBAADGCC@CBEDCAACBA@CAEC"],["@@@CAA@D@BB@"],["@@GBGLM@EAGFIFA@AFM@AHDDADIBIBCAKA@ABCCAADMJSBGFBDABMFUBE@[LEF[NUFQB]FUJE@CEG@KGYDCCIIGGMEUCOKƒMuGIDkL@NDPCRGJSRCJANDX@NCPCNGDmFCDAHC\\EHQFHVATAHCFEFEJADEBW\\Q\\CF@HELSPGBQ@_JaEC@E@GEACEECAKACDCVBDDBJAFHBJGBQJOf[p[XqbOB]@qMc]QY]oi{GS@KFGcMC@CFCBYII@KEADBPALCFELEBMCG@]N_LGFCJADGF [...]
\ No newline at end of file
diff --git a/asset/map/json/province/hunan.json b/asset/map/json/province/hunan.json
new file mode 100644
index 0000000..e3f738a
--- /dev/null
+++ b/asset/map/json/province/hunan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"430100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@J^ABICEBCD@DKBADFJTNHJBDCDCJMLGHADGF}ICACGOODMHM@GCAC@CBCD@DFFIFEAA@@CFG@AEGEAMAGGIEMNIHeXSPC@IFGJGPEHKHA@KGFMAMCEIKBALBF@DEBE@CACCAAJA@ACMACCBAFAAEMCCDKBOMC@ELEDI@ECCEE@CDAFRTBF@HG@ECKABDFDADCFKFC@ACEAAADAFADAAGCEEEGAI@CBDRAPGJGTEHKCI@KHAFDRAFABKHGPKP@FFL@DEBECEAEBI@WBIDIBCC@GCI@CFGFGFEH@JCLGROAGGMMAIACB@NEFIAKFG@AA@IPKBCAASIAUCCECDK@ICIGK@GCIBCAI]eBOCMACECI@CBAACI@AHE@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/jiangsu.json b/asset/map/json/province/jiangsu.json
new file mode 100644
index 0000000..f8de34d
--- /dev/null
+++ b/asset/map/json/province/jiangsu.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"320100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@IIOWECG@CBCDBHFJRTLFJ@DABEEC"],["@@ZKKK]SCCAKCCMC]GG@MJWEYAI@_NGBUGIGG@{OOBCEFAEIAQ_@QAYIMMBEIGMYIAIE@IEEBCH@@AB@@BFABAFDBAJBLCJBFEJ@ECB@ACFD@CB@@BBAADF@DGACJ@DCXLN@HADMJOFEJFF@DABECaIWMMBOJO@KFGAMDEDMKMBCP@DFTIBCBWNC@ME@EDC@ACCQEGC@E@EDSNO@OIGFKBWGMAIIMAKIBMPWREL@FHNAJBTEPALIVDJGFKBYFGCIBAJC@KCIMEIM@KCKGEGEgHCBEHYQUCCIU@MOK@I@W@MEABE@YCAA@EACM@CCDGDAEGBAPCDCLEFID@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/jiangxi.json b/asset/map/json/province/jiangxi.json
new file mode 100644
index 0000000..78cb585
--- /dev/null
+++ b/asset/map/json/province/jiangxi.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"360100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@EHIJ]AGKUJSBGCIBEBICS@W@MEOKE_KOMOUM]CKBIG@ECGGAEEI@CDE@EECAAIDMCGCCEmGeCI@OFUDSEOIEECK@GNMBEBOACKM@GJ_DEDELA`BJCJABCDEHGD@PBLEDEHKRKHKF[AIIQlZ\\HJA@QDCFCDBDDHBDDEJP@FA@MDGHGFKFC\\GN@LEH@NGRMRQBKAIGK@CBABEIOBEBAH@DC@ODGMU@E@GLMLGDELOBMDMRchuPOPI\\[TONSXSFGBEGY@EPYBK@QCKBACABAD@DAB@D@AADEACBAAAGCBCDAAO@AE@AA@ADEECBGCAACHCEEC@GAaU[[QYEMGKEI@IFa@IEQKSMESMCMIeGYCEGEGC]DyAGA [...]
\ No newline at end of file
diff --git a/asset/map/json/province/jilin.json b/asset/map/json/province/jilin.json
new file mode 100644
index 0000000..8d4d962
--- /dev/null
+++ b/asset/map/json/province/jilin.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"220100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@B@ACAB@AEBBB@@AAABDBFA"],["@@BAIFBBFE"],["@@AA@@BBFACGAB@DGBDBBBBA"],["@@GBEDE@EFCNSJUFKDE@KFADOFE@ABMFMRKHSFMBEBGH]VORIFKDIDAJILIFCFBBHBDHDBF@LD@DDBH@JDNFNH@FGBBF@NCDDDFBCLGFK@KCK@QGEDCDDF@BO@KACBGBECK@GACBILCDKAGHCBHL`P@BGDFFADSDAFDBAFOFIACBBTLN@DG@GJMFEH@HADSDOL@DHDAFBJIN@JKFIJBHLD@DBB@BDJCD@FDBBDCHFH@B@BCB@B@LEFCDDDAD@FCFB^C@BBA@GJCC@A@@BCA@@@GADCCAQIBCMEABGCAB [...]
\ No newline at end of file
diff --git a/asset/map/json/province/liaoning.json b/asset/map/json/province/liaoning.json
new file mode 100644
index 0000000..207aad1
--- /dev/null
+++ b/asset/map/json/province/liaoning.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"210100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MDGFSKGAACC@EEIAECG@AACCKDAFEDABC@ADKBEGAAACA@IIEFSACDC@CACGCBAAG@U]E@ABAA@BACC@AACDI@@DCCBDAACBDD@FCB@CADC@CEADCBAFGGKBAECBCDABKA@BBDCFFFGFEAEBBDFDABKAC@@JE@CD@DFBABKDCECAAB@F@@CC@E@@E@EFA@EEA@CDADEDAFADDBADK@BC@AMDG@GGCB@FHDCFE@MECDI@CBCAEBCDC@@CBCGADEE@EBI@AFEBEHEBAFKDOBBDDDABKEQBCAIHHBGPYBCDCCMD@@ABCECABDA@CAGDEAMBBFCDBDEBFFEDB@AAIF@BBBGAFFQ@@NUAA@C@CC@@@BCBEGC@ACCBC [...]
\ No newline at end of file
diff --git a/asset/map/json/province/neimenggu.json b/asset/map/json/province/neimenggu.json
new file mode 100644
index 0000000..beca7b7
--- /dev/null
+++ b/asset/map/json/province/neimenggu.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"150100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FCBGDEJBH@LBFHJBN@NAHCBCAUF@@FJ@@E\\AAFDFT@LSCEJAvE@AC@@AHBJ@RFNBHAXKLB@B@FN@BEVADB@J`BAORDACHAFI`DIPK@EAABBFHBFA@DPBXBHGCSLO@CfJN@@CNEECDACAFCBAFGJCFC@CHCJITEFAVBBCFBCBNBPCDCLIBCBKCEAMG@MYBIBATHHCJ@JJB@JGHKFGFI@AAKGIAEPU@CEAACDMDEFEDI@CGA@AFSJQAEDAHC`ELENDLE@AOBCA@APABAOCAEHGRKDGLCDGNBNMTAHELEH@FEHC@E@EFCD@HGB@HFDALBFCD@DAHADCBEFAFAFEDE\\GDE@WE@GAGI@IIEEIDEACBCCEDCLELOH [...]
\ No newline at end of file
diff --git a/asset/map/json/province/ningxia.json b/asset/map/json/province/ningxia.json
new file mode 100644
index 0000000..18dcdcc
--- /dev/null
+++ b/asset/map/json/province/ningxia.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"640100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@@CFGUKGQCMBSH[Š¯JSEGmUQBLYgSeHECWBUJgBGV[DAPHHBrDDAG]DG@[FBCV[VP’GA[GYMYWu{‰sUoOWECCE_FgF‹DMAk¹FÅ`KY}WkMEGCJOTGJSLONW^OJja^[\\EFcTUJaDaZYLS^GJaRg^BLM@CDKAIBSBUH@H@BUJCHGF@DGLBDFB@BIFFFBDI@BFE@@BJTCD@BJBADHBzB\\FD@FCTBBBXVHRID@xIBaBA`EBw@MLADBFJDTV@B]TIP@FABQJUKA@M`GDCD@BH@BDADIB@JEFDD@DQLKFEDKVCPIJMHSFAFCFBD@HHXHHTJFH@LS^CJBHiHABGHSFDPCBKCOBIDMJIDOAEAAAMOGIGBArED]JFF@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/qinghai.json b/asset/map/json/province/qinghai.json
new file mode 100644
index 0000000..3c7f6bd
--- /dev/null
+++ b/asset/map/json/province/qinghai.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"630100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@PBHANKJMDCTJHBJALC^CF@PDD@FIFCLAJEpMJBHFDD@JBBJDL@DIRIAE@AVE@CCMDEbA`BJ@TSBCBK@A`IFEFERINEJCP@TCJCTMLYLETIPCGMCWA@SHE@KEIOBaDMLY@MOoAQACC@QBAACEEEWK@ADEAGGGOIACGMBOIIIMAGDENGJOJGBG@GMMAA@KIKBKM@GAWMDC@ACEAIECKE@ELU@CGK@WCQ@WIMBK@GFCBE@UAEKKAEKEAEFIJEDE@EESDG@CKGAC@MEI@EBSAEGKKKBIDCLABAACGGHIDMACIIEO@ICEGKDIHGRMB@HHFHDDD@DADG@CECCSDEDANHLBHAPADCHIDAHAJHFBD@DC@CGU@ABEDCFAT [...]
\ No newline at end of file
diff --git a/asset/map/json/province/shandong.json b/asset/map/json/province/shandong.json
new file mode 100644
index 0000000..d48d79d
--- /dev/null
+++ b/asset/map/json/province/shandong.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"370100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FMV_jEJCLK@MIK[COCKGCO\\ENCHGQGGIHGTCd@`FV@JEXWBICWQ[RSlSVM^_CkCKEM@OF[LWZUD[J@@CF@@CC@AI@GBALCAED@@@AEAAGB@BIBCECADFAFE@BGGACGBCDAFA@CSBCACCGBABC@IG@ABAAEAKCAHMTUFMf_HKFO@SH_J]BEBKFG@EDABGcaGAyEUCOGeWMEM@KBaHECACDCHADCAA@OESGIMIKEIE@ONMJGjMLCPGJIZHGTAXFJJNJNCVOHDPDJ@RADDDBDC\\F@FCHA@BCA@CHBBF@BCJB@ELDLB@DL@@AFANABGBAB@BGHA@CBABD@HLDBB@DBBD@B@BD@FB@@DD@DB@DL@F@BDF@LIBC@ [...]
\ No newline at end of file
diff --git a/asset/map/json/province/shanghai.json b/asset/map/json/province/shanghai.json
new file mode 100644
index 0000000..f2b56e9
--- /dev/null
+++ b/asset/map/json/province/shanghai.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"310101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AHV@BDCPEPLENFHCJHFBNCAGBGXWFIBGCGMUKKCCcGCDGBALCPIAAPGR"],"encodeOffsets":[[124373,31970]]},"properties":{"cp":[121.490317,31.222771],"name":"黄浦区","childNum":1}},{"id":"310104","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@CEAMMAA@C@AFA@@BC@ABC@@BD@@BH@@BB@EHDDCBECADGEEAEBFNET]CMRELQjOEGRFBAHDBAHH@@B@BDA`H@F@BC@AB@FD@DD@@@CH@DDAFDD^LEPF@DFTDPHHQBOJBDOB [...]
\ No newline at end of file
diff --git a/asset/map/json/province/shanxi.json b/asset/map/json/province/shanxi.json
new file mode 100644
index 0000000..b8bfa61
--- /dev/null
+++ b/asset/map/json/province/shanxi.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"140100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@AFWN@BBJADaHWR@DTH\\BDB@NADCDQ@IBCJDJ@FE@WB@DC@O@BLBFPLVT@HAVAFCBOAgGO@Q@SHEHGVEXEFEDQDEBGTKJGBGNGJYLAD@XCP@HFFFPGBABDBBDABOBKFAHGFgHKHELC@KCCB]dA@SEIBGDU@gKKAS@KFOPCHMEgBKC_MO@GFIRENEFG@]GADDPEJMNGL@DEJBJAJKHCD@LDLEFIFMBOEIEGAWD[@WBaCOFCF@JCJEHIHIFGBMFCFCBS@SHABAHBJCBKDKJONALDRCDG@OBMDOAKHMBaIIQGE_BWMI@GHGBC@MGODK@SGaBQEKKG@GHETAL@RADGDQDIFVHRLPDJHBDAFIP@HFLIREBSHEDEHEN [...]
\ No newline at end of file
diff --git a/asset/map/json/province/shanxi1.json b/asset/map/json/province/shanxi1.json
new file mode 100644
index 0000000..7de62e2
--- /dev/null
+++ b/asset/map/json/province/shanxi1.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"610100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@D@@CMMAIKGMCCHIHJLABDFJH^C"],["@@DFJFtBFABGDCPBDCH@LBF@LGFAB@FFDLDDFBNIF@H@LHN@DCDKBCF@L@N@LJZBNB^HLFDFBJDDJDFHB^DLDBF@RA`DTARHB@LKFSBGFEJEDCACICEI@MFIBELG@ACCECECBaJgJoAQFIBYXƒBQKBMEOCQUCCaEGDEAGKBIF[BCVAHGBCCCIBG@ECOaAODKHCFATALG@ABORKBEAEEEHEAK@IFEJEXEFIBEASLCTA@CFAGABKFBB@@CAA@CECDAAACABABEECDC@CCCAA@CCAACBAAABEB@@CB@AGAA@ACABAACBACABACEBAAABAC@BCC@BAAEDCCCBC@A [...]
\ No newline at end of file
diff --git a/asset/map/json/province/sichuan.json b/asset/map/json/province/sichuan.json
new file mode 100644
index 0000000..38f999a
--- /dev/null
+++ b/asset/map/json/province/sichuan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"510100","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@A@B@"],["@@@CGDH@"],["@@HBHBFDFH@FFDPBjT`@DBPLPJN@LATKNEZMNEBAFAJFLNHXDFJBJHNJR`LFHDH@JCTDJATMHAHALBPCJBNDNAHDFDF@LQBAHCLCLBH@JIFIDMPEF@`RRNPAHPHNTXPBLFTJJF`@VD`^D@LANJHBPPDLDLAjDNRV\\Rp\\FLDBRBD@BF@@EFAPDPFHBJ@NETAVEHQHAFJRHLHFFLBHAXHJHHBDEL@JHFDPFBPVFNDPJNFDDDBDAFJNF^HBLHPRBDAdKPHdBZOXIHBZR\\BFING\\@HBJETBPDDDBNA^DJFHLB@HAHGR@LCBBFFFDTFJ@NERFLFHLJJFJTNLLHNHBT@NFP [...]
\ No newline at end of file
diff --git a/asset/map/json/province/taiwan.json b/asset/map/json/province/taiwan.json
new file mode 100644
index 0000000..2e0ead4
--- /dev/null
+++ b/asset/map/json/province/taiwan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"name":"台湾省","cp":[121.509062,25.044332],"childNum":82},"geometry":{"type":"MultiPolygon","coordinates":[["@@@BBB@@B@@@@@@B@@@@B@@A@@@@@@BB@@B@@AB@@@@@BA@@@@@@BA@@@@BA@@@@@A@@B@@@@@@@@A@@@@@@B@@@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@A@@@@@@AA@@@@@@@@@@@@@@@@A@@@@@@@@@@A@@@@@@A@@@@@@@@@A@@A@@@BA@@@AA@@@@A@AB@@A@@@A@@@@B@@A@@BA@@B@@A@@@@@@@@B@@@@@@@@@@@B@@@@@BDB"],["@@@@@@@@@@@A@@@@@@@@@@@@@B"],["@@@@@@@@@@@@B [...]
\ No newline at end of file
diff --git a/asset/map/json/province/tianjin.json b/asset/map/json/province/tianjin.json
new file mode 100644
index 0000000..d16ac01
--- /dev/null
+++ b/asset/map/json/province/tianjin.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"120101","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BhB`R@DA@CD@DCFCHBLDF@DABKFIJGQG@COEQM@@OASB"],"encodeOffsets":[[119992,40041]]},"properties":{"cp":[117.195907,39.118327],"name":"和平区","childNum":1}},{"id":"120102","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XFFIE@BGGA@KVBN_]CCCLg†MGE@CD@AGB@AEGMEACB@BA@BFWFACKA@DA@@DA@C@CCCDGIAKMBWLGFERWT]bADCNE@DDIDEFBHTHBD@DLMPJj@ARX@"],"encodeOffsets":[[120075,4 [...]
\ No newline at end of file
diff --git a/asset/map/json/province/xianggang.json b/asset/map/json/province/xianggang.json
new file mode 100644
index 0000000..7d88cc2
--- /dev/null
+++ b/asset/map/json/province/xianggang.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"810001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@D@bKBoCWKACBGCI@CJSVGFIBKCM@ABAF@LFHPFJJPFVB"],["@@ABD@@AA@"],["@@AAEAAB@DDBFC"]],"encodeOffsets":[[[116895,22829]],[[116861,22818]],[[116860,22817]]]},"properties":{"cp":[114.154334,22.281931],"name":"中西区","childNum":3}},{"id":"810002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@BMHBBGD@BAHBD@HKDEF@FHDEDECCGCIAAQWCUBSBDXApREHD"],"encodeOffsets" [...]
\ No newline at end of file
diff --git a/asset/map/json/province/xinjiang.json b/asset/map/json/province/xinjiang.json
new file mode 100644
index 0000000..b5f36de
--- /dev/null
+++ b/asset/map/json/province/xinjiang.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"650100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@KmGqAMAKH@BKF@ALNA@EF@@AB@DPHBDLABEDABIBD\\DDBNHJVšH@@DP@BDBABAD@@FB@L@DBFAJBBFHB@FA@@DD@EBFDLAAEDA@CFA@B@ZB@@BEBAJDBGFAAML@@@RFVBTFB@BCDG@@JHZHABBDJHN@DBFDD@FDDCJ@JAFDRAPDHTNDFBAHMDCEINA„OACAACY@IRGBEDCJAdZBBhZKRPHCVldHĀ_VOFBž}BCJELCNAPCHAH[FITUP_JQBEHCLJPFPObBHGNBVCD@DCH@HIHKRCF@BDBCLCD@FBBABDBADD@AHB@ABB@DHFDuÔǿ˪֘B_“ƫүQyM_Aƒl“FÁ›ě¨L@ABIFKFGHGF@ZAHEF@FMACBIAMDCBGDAAGDC [...]
\ No newline at end of file
diff --git a/asset/map/json/province/xizang.json b/asset/map/json/province/xizang.json
new file mode 100644
index 0000000..37cef49
--- /dev/null
+++ b/asset/map/json/province/xizang.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"540100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EII_OcEEICGACEEcBI`iLGDKDSIW@OFM@CGGOKEMBMHOX_AKCKcMMCUASGGBIPGFC@CGGQGGIGICOQOIAI@A@UGIOB]NIIQ]KEQEqLQ@MDSJ[MKKOCSIIOSKIKCAQDS@ILIFKFIBI@KCICQGQDMLI\\M@UDWCKDMFU\\IFQFKISBWHW@KDSCIMIIQBCPMJiJB]OQFIGCMKWEKQJOBKEWSQEUDcDEKAKAMcEcCGZKHWHSBWaUBMFENGRJTFZBRUDQGQ@QBQMOCO@OLOJQAMGOMQSeUWIYGYAQWSEiKOKaeSGSBOFaTMFYCQFQJUZeJMBÃMKNQIOGMGoQOMMaOO]QSAOCOBQK]iMGSNQ@EGH[CMSAUCeYOKaSY [...]
\ No newline at end of file
diff --git a/asset/map/json/province/yunnan.json b/asset/map/json/province/yunnan.json
new file mode 100644
index 0000000..de77650
--- /dev/null
+++ b/asset/map/json/province/yunnan.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"530100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@FKCQEGAGDIBQBCHIFMBCCEFADG@G@OHQ@EHIAGBO@OBCDCACBEAINc@MHO@OFEHS@GBKAC@EFG@GAAEAAEAUBIDELGFOFCAEFE@CECDEEICOAE@IDGCGJGPEFIRIJ@NHJ@BGCYBIFELATADC@CEC@ALODKFEHANDDFIL@FJNL@JEP@H@PMHKRGJINI@GBCNGDEBCEEGGAIGCG@CC@CRETO@CBQEIAMFKFGLIDGDW@CHBJGJICGBAJ@BGFIRI@CNQ@IIKISOWKc@ICEBIFGBEBAFA\\@BEACMAIEBEHEBGEAE@CAAM@EDGFCXE@@AKCKBCEMDEHI@CGEAGA@FKBCIAA@ABC@EEEK@KDQDENEBCAAMAAA@ADEGC [...]
\ No newline at end of file
diff --git a/asset/map/json/province/zhejiang.json b/asset/map/json/province/zhejiang.json
new file mode 100644
index 0000000..24030a7
--- /dev/null
+++ b/asset/map/json/province/zhejiang.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"330100","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@XBFBF@DGFWFK@CDO@MCE@CFKBID@HFLBAKECAKBMFCBOCCBKSMDE@MOKEG@EMGIACACCBCDCNBFI@Q@ALA^IHCBGDBJHDBTBbLjHBE@MIGOAOYDAGULI@CVKPMHANMLR@Jh–HFPHTDŽNÎAÈBRA¨UFAHGFMBk@[BkJWHGPMyqq{u_AEcuWkEYCCKAQGCAIBEH_@IEC@A@CHMHkDICGAUFGDGLGHaHGGGDOAEOBOEACCAAM@CICCAQA@aEIBAFBJDFCDAABBABA@BB@D@A@DA@AE@@ADABD@@BCBACACEA@BG@BaEECACBBNABM@ABBF@DIFEFCNCDEAAAU@OECAEGIHC@@GDIAA[@@GIGEIGIKFCCCBCPADEBQ [...]
\ No newline at end of file
diff --git a/asset/map/json/world.json b/asset/map/json/world.json
new file mode 100644
index 0000000..9df0a61
--- /dev/null
+++ b/asset/map/json/world.json
@@ -0,0 +1 @@
+{"type":"FeatureCollection","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[{"geometry":{"type":"Polygon","coordinates":[[[47.97822265625001,7.9970703125],[46.97822265625001,7.9970703125],[43.98378906250002,9.008837890624989],[43.482519531250006,9.379492187499991],[43.181640625,9.879980468749991],[42.84160156250002,10.203076171874997],[42.65644531250001,10.6],[42.92275390625002,10.999316406249989],[43.24599609375002,11.499804687499989],[43.85273437 [...]
\ No newline at end of file
diff --git a/asset/map/thumb/anhui.png b/asset/map/thumb/anhui.png
new file mode 100644
index 0000000..e1e154f
Binary files /dev/null and b/asset/map/thumb/anhui.png differ
diff --git a/asset/map/thumb/aomen.png b/asset/map/thumb/aomen.png
new file mode 100644
index 0000000..cd88497
Binary files /dev/null and b/asset/map/thumb/aomen.png differ
diff --git a/asset/map/thumb/beijing.png b/asset/map/thumb/beijing.png
new file mode 100644
index 0000000..fa96230
Binary files /dev/null and b/asset/map/thumb/beijing.png differ
diff --git a/asset/map/thumb/china.png b/asset/map/thumb/china.png
new file mode 100644
index 0000000..36d7dbb
Binary files /dev/null and b/asset/map/thumb/china.png differ
diff --git a/asset/map/thumb/chongqing.png b/asset/map/thumb/chongqing.png
new file mode 100644
index 0000000..988ba69
Binary files /dev/null and b/asset/map/thumb/chongqing.png differ
diff --git a/asset/map/thumb/fujian.png b/asset/map/thumb/fujian.png
new file mode 100644
index 0000000..c5e8438
Binary files /dev/null and b/asset/map/thumb/fujian.png differ
diff --git a/asset/map/thumb/gansu.png b/asset/map/thumb/gansu.png
new file mode 100644
index 0000000..9d55f18
Binary files /dev/null and b/asset/map/thumb/gansu.png differ
diff --git a/asset/map/thumb/guangdong.png b/asset/map/thumb/guangdong.png
new file mode 100644
index 0000000..92289c5
Binary files /dev/null and b/asset/map/thumb/guangdong.png differ
diff --git a/asset/map/thumb/guangxi.png b/asset/map/thumb/guangxi.png
new file mode 100644
index 0000000..a1cae3b
Binary files /dev/null and b/asset/map/thumb/guangxi.png differ
diff --git a/asset/map/thumb/guizhou.png b/asset/map/thumb/guizhou.png
new file mode 100644
index 0000000..75fa5e9
Binary files /dev/null and b/asset/map/thumb/guizhou.png differ
diff --git a/asset/map/thumb/hainan.png b/asset/map/thumb/hainan.png
new file mode 100644
index 0000000..9e7a6cf
Binary files /dev/null and b/asset/map/thumb/hainan.png differ
diff --git a/asset/map/thumb/hebei.png b/asset/map/thumb/hebei.png
new file mode 100644
index 0000000..0b8336d
Binary files /dev/null and b/asset/map/thumb/hebei.png differ
diff --git a/asset/map/thumb/heilongjiang.png b/asset/map/thumb/heilongjiang.png
new file mode 100644
index 0000000..df9c72d
Binary files /dev/null and b/asset/map/thumb/heilongjiang.png differ
diff --git a/asset/map/thumb/henan.png b/asset/map/thumb/henan.png
new file mode 100644
index 0000000..0796a12
Binary files /dev/null and b/asset/map/thumb/henan.png differ
diff --git a/asset/map/thumb/hubei.png b/asset/map/thumb/hubei.png
new file mode 100644
index 0000000..d71d2fa
Binary files /dev/null and b/asset/map/thumb/hubei.png differ
diff --git a/asset/map/thumb/hunan.png b/asset/map/thumb/hunan.png
new file mode 100644
index 0000000..f922fac
Binary files /dev/null and b/asset/map/thumb/hunan.png differ
diff --git a/asset/map/thumb/jiangsu.png b/asset/map/thumb/jiangsu.png
new file mode 100644
index 0000000..9bf53d1
Binary files /dev/null and b/asset/map/thumb/jiangsu.png differ
diff --git a/asset/map/thumb/jiangxi.png b/asset/map/thumb/jiangxi.png
new file mode 100644
index 0000000..89d369c
Binary files /dev/null and b/asset/map/thumb/jiangxi.png differ
diff --git a/asset/map/thumb/jilin.png b/asset/map/thumb/jilin.png
new file mode 100644
index 0000000..9d31fee
Binary files /dev/null and b/asset/map/thumb/jilin.png differ
diff --git a/asset/map/thumb/liaoning.png b/asset/map/thumb/liaoning.png
new file mode 100644
index 0000000..e8e5272
Binary files /dev/null and b/asset/map/thumb/liaoning.png differ
diff --git a/asset/map/thumb/neimenggu.png b/asset/map/thumb/neimenggu.png
new file mode 100644
index 0000000..527e8a8
Binary files /dev/null and b/asset/map/thumb/neimenggu.png differ
diff --git a/asset/map/thumb/ningxia.png b/asset/map/thumb/ningxia.png
new file mode 100644
index 0000000..69b7505
Binary files /dev/null and b/asset/map/thumb/ningxia.png differ
diff --git a/asset/map/thumb/qinghai.png b/asset/map/thumb/qinghai.png
new file mode 100644
index 0000000..1bca0e0
Binary files /dev/null and b/asset/map/thumb/qinghai.png differ
diff --git a/asset/map/thumb/shandong.png b/asset/map/thumb/shandong.png
new file mode 100644
index 0000000..7205717
Binary files /dev/null and b/asset/map/thumb/shandong.png differ
diff --git a/asset/map/thumb/shanghai.png b/asset/map/thumb/shanghai.png
new file mode 100644
index 0000000..fb2e8b6
Binary files /dev/null and b/asset/map/thumb/shanghai.png differ
diff --git a/asset/map/thumb/shanxi.png b/asset/map/thumb/shanxi.png
new file mode 100644
index 0000000..662b552
Binary files /dev/null and b/asset/map/thumb/shanxi.png differ
diff --git a/asset/map/thumb/shanxi1.png b/asset/map/thumb/shanxi1.png
new file mode 100644
index 0000000..bdfe090
Binary files /dev/null and b/asset/map/thumb/shanxi1.png differ
diff --git a/asset/map/thumb/sichuan.png b/asset/map/thumb/sichuan.png
new file mode 100644
index 0000000..93a5111
Binary files /dev/null and b/asset/map/thumb/sichuan.png differ
diff --git a/asset/map/thumb/taiwan.png b/asset/map/thumb/taiwan.png
new file mode 100644
index 0000000..5914faf
Binary files /dev/null and b/asset/map/thumb/taiwan.png differ
diff --git a/asset/map/thumb/tianjin.png b/asset/map/thumb/tianjin.png
new file mode 100644
index 0000000..f249db1
Binary files /dev/null and b/asset/map/thumb/tianjin.png differ
diff --git a/asset/map/thumb/world.png b/asset/map/thumb/world.png
new file mode 100644
index 0000000..734a78e
Binary files /dev/null and b/asset/map/thumb/world.png differ
diff --git a/asset/map/thumb/xianggang.png b/asset/map/thumb/xianggang.png
new file mode 100644
index 0000000..27dda90
Binary files /dev/null and b/asset/map/thumb/xianggang.png differ
diff --git a/asset/map/thumb/xinjiang.png b/asset/map/thumb/xinjiang.png
new file mode 100644
index 0000000..611ca96
Binary files /dev/null and b/asset/map/thumb/xinjiang.png differ
diff --git a/asset/map/thumb/xizang.png b/asset/map/thumb/xizang.png
new file mode 100644
index 0000000..671fcf2
Binary files /dev/null and b/asset/map/thumb/xizang.png differ
diff --git a/asset/map/thumb/yunnan.png b/asset/map/thumb/yunnan.png
new file mode 100644
index 0000000..f53413d
Binary files /dev/null and b/asset/map/thumb/yunnan.png differ
diff --git a/asset/map/thumb/zhejiang.png b/asset/map/thumb/zhejiang.png
new file mode 100644
index 0000000..562f2c6
Binary files /dev/null and b/asset/map/thumb/zhejiang.png differ
diff --git a/asset/theme/dark.js b/asset/theme/dark.js
new file mode 100644
index 0000000..79ff8c1
--- /dev/null
+++ b/asset/theme/dark.js
@@ -0,0 +1,147 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    var contrastColor = '#eee';
+    var axisCommon = function () {
+        return {
+            axisLine: {
+                lineStyle: {
+                    color: contrastColor
+                }
+            },
+            axisTick: {
+                lineStyle: {
+                    color: contrastColor
+                }
+            },
+            axisLabel: {
+                textStyle: {
+                    color: contrastColor
+                }
+            },
+            splitLine: {
+                lineStyle: {
+                    type: 'dashed',
+                    color: '#aaa'
+                }
+            },
+            splitArea: {
+                areaStyle: {
+                    color: contrastColor
+                }
+            }
+        };
+    };
+
+    var colorPalette = ['#dd6b66','#759aa0','#e69d87','#8dc1a9','#ea7e53','#eedd78','#73a373','#73b9bc','#7289ab', '#91ca8c','#f49f42'];
+    var theme = {
+        color: colorPalette,
+        backgroundColor: '#333',
+        tooltip: {
+            axisPointer: {
+                lineStyle: {
+                    color: contrastColor
+                },
+                crossStyle: {
+                    color: contrastColor
+                }
+            }
+        },
+        legend: {
+            textStyle: {
+                color: contrastColor
+            }
+        },
+        textStyle: {
+            color: contrastColor
+        },
+        title: {
+            textStyle: {
+                color: contrastColor
+            }
+        },
+        toolbox: {
+            iconStyle: {
+                normal: {
+                    borderColor: contrastColor
+                }
+            }
+        },
+        dataZoom: {
+            textStyle: {
+                color: contrastColor
+            }
+        },
+        timeline: {
+            lineStyle: {
+                color: contrastColor
+            },
+            itemStyle: {
+                normal: {
+                    color: colorPalette[1]
+                }
+            },
+            label: {
+                normal: {
+                    textStyle: {
+                        color: contrastColor
+                    }
+                }
+            },
+            controlStyle: {
+                normal: {
+                    color: contrastColor,
+                    borderColor: contrastColor
+                }
+            }
+        },
+        timeAxis: axisCommon(),
+        logAxis: axisCommon(),
+        valueAxis: axisCommon(),
+        categoryAxis: axisCommon(),
+
+        line: {
+            symbol: 'circle'
+        },
+        graph: {
+            color: colorPalette
+        },
+        gauge: {
+            title: {
+                textStyle: {
+                    color: contrastColor
+                }
+            }
+        },
+        candlestick: {
+            itemStyle: {
+                normal: {
+                    color: '#FD1050',
+                    color0: '#0CF49B',
+                    borderColor: '#FD1050',
+                    borderColor0: '#0CF49B'
+                }
+            }
+        }
+    };
+    theme.categoryAxis.splitLine.show = false;
+    echarts.registerTheme('dark', theme);
+}));
\ No newline at end of file
diff --git a/asset/theme/infographic.js b/asset/theme/infographic.js
new file mode 100644
index 0000000..df47b91
--- /dev/null
+++ b/asset/theme/infographic.js
@@ -0,0 +1,204 @@
+(function (root, factory) {if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+
+    var colorPalette = [
+        '#C1232B','#27727B','#FCCE10','#E87C25','#B5C334',
+        '#FE8463','#9BCA63','#FAD860','#F3A43B','#60C0DD',
+        '#D7504B','#C6E579','#F4E001','#F0805A','#26C0C0'
+    ];
+
+    var theme = {
+
+        color: colorPalette,
+
+        title: {
+            textStyle: {
+                fontWeight: 'normal',
+                color: '#27727B'
+            }
+        },
+
+        visualMap: {
+            color:['#C1232B','#FCCE10']
+        },
+
+        toolbox: {
+            iconStyle: {
+                normal: {
+                    borderColor: colorPalette[0]
+                }
+            }
+        },
+
+        tooltip: {
+            backgroundColor: 'rgba(50,50,50,0.5)',
+            axisPointer : {
+                type : 'line',
+                lineStyle : {
+                    color: '#27727B',
+                    type: 'dashed'
+                },
+                crossStyle: {
+                    color: '#27727B'
+                },
+                shadowStyle : {
+                    color: 'rgba(200,200,200,0.3)'
+                }
+            }
+        },
+
+        dataZoom: {
+            dataBackgroundColor: 'rgba(181,195,52,0.3)',
+            fillerColor: 'rgba(181,195,52,0.2)',
+            handleColor: '#27727B'
+        },
+
+        categoryAxis: {
+            axisLine: {
+                lineStyle: {
+                    color: '#27727B'
+                }
+            },
+            splitLine: {
+                show: false
+            }
+        },
+
+        valueAxis: {
+            axisLine: {
+                show: false
+            },
+            splitArea : {
+                show: false
+            },
+            splitLine: {
+                lineStyle: {
+                    color: ['#ccc'],
+                    type: 'dashed'
+                }
+            }
+        },
+
+        timeline: {
+            lineStyle: {
+                color: '#27727B'
+            },
+            controlStyle: {
+                normal: {
+                    color: '#27727B',
+                    borderColor: '#27727B'
+                }
+            },
+            symbol: 'emptyCircle',
+            symbolSize: 3
+        },
+
+        line: {
+            itemStyle: {
+                normal: {
+                    borderWidth:2,
+                    borderColor:'#fff',
+                    lineStyle: {
+                        width: 3
+                    }
+                },
+                emphasis: {
+                    borderWidth:0
+                }
+            },
+            symbol: 'circle',
+            symbolSize: 3.5
+        },
+
+        candlestick: {
+            itemStyle: {
+                normal: {
+                    color: '#C1232B',
+                    color0: '#B5C334',
+                    lineStyle: {
+                        width: 1,
+                        color: '#C1232B',
+                        color0: '#B5C334'
+                    }
+                }
+            }
+        },
+
+        graph: {
+            color: colorPalette
+        },
+
+        map: {
+            label: {
+                normal: {
+                    textStyle: {
+                        color: '#C1232B'
+                    }
+                },
+                emphasis: {
+                    textStyle: {
+                        color: 'rgb(100,0,0)'
+                    }
+                }
+            },
+            itemStyle: {
+                normal: {
+                    areaColor: '#ddd',
+                    borderColor: '#eee'
+                },
+                emphasis: {
+                    areaColor: '#fe994e'
+                }
+            }
+        },
+
+        gauge: {
+            axisLine: {
+                lineStyle: {
+                    color: [[0.2, '#B5C334'],[0.8, '#27727B'],[1, '#C1232B']]
+                }
+            },
+            axisTick: {
+                splitNumber: 2,
+                length: 5,
+                lineStyle: {
+                    color: '#fff'
+                }
+            },
+            axisLabel: {
+                textStyle: {
+                    color: '#fff'
+                }
+            },
+            splitLine: {
+                length: '5%',
+                lineStyle: {
+                    color: '#fff'
+                }
+            },
+            title : {
+                offsetCenter: [0, -20]
+            }
+        }
+    };
+
+    echarts.registerTheme('infographic', theme);
+}));
\ No newline at end of file
diff --git a/asset/theme/macarons.js b/asset/theme/macarons.js
new file mode 100644
index 0000000..398aa3f
--- /dev/null
+++ b/asset/theme/macarons.js
@@ -0,0 +1,198 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+
+    var colorPalette = [
+        '#2ec7c9','#b6a2de','#5ab1ef','#ffb980','#d87a80',
+        '#8d98b3','#e5cf0d','#97b552','#95706d','#dc69aa',
+        '#07a2a4','#9a7fd1','#588dd5','#f5994e','#c05050',
+        '#59678c','#c9ab00','#7eb00a','#6f5553','#c14089'
+    ];
+
+
+    var theme = {
+        color: colorPalette,
+
+        title: {
+            textStyle: {
+                fontWeight: 'normal',
+                color: '#008acd'
+            }
+        },
+
+        visualMap: {
+            itemWidth: 15,
+            color: ['#5ab1ef','#e0ffff']
+        },
+
+        toolbox: {
+            iconStyle: {
+                normal: {
+                    borderColor: colorPalette[0]
+                }
+            }
+        },
+
+        tooltip: {
+            backgroundColor: 'rgba(50,50,50,0.5)',
+            axisPointer : {
+                type : 'line',
+                lineStyle : {
+                    color: '#008acd'
+                },
+                crossStyle: {
+                    color: '#008acd'
+                },
+                shadowStyle : {
+                    color: 'rgba(200,200,200,0.2)'
+                }
+            }
+        },
+
+        dataZoom: {
+            dataBackgroundColor: '#efefff',
+            fillerColor: 'rgba(182,162,222,0.2)',
+            handleColor: '#008acd'
+        },
+
+        grid: {
+            borderColor: '#eee'
+        },
+
+        categoryAxis: {
+            axisLine: {
+                lineStyle: {
+                    color: '#008acd'
+                }
+            },
+            splitLine: {
+                lineStyle: {
+                    color: ['#eee']
+                }
+            }
+        },
+
+        valueAxis: {
+            axisLine: {
+                lineStyle: {
+                    color: '#008acd'
+                }
+            },
+            splitArea : {
+                show : true,
+                areaStyle : {
+                    color: ['rgba(250,250,250,0.1)','rgba(200,200,200,0.1)']
+                }
+            },
+            splitLine: {
+                lineStyle: {
+                    color: ['#eee']
+                }
+            }
+        },
+
+        timeline : {
+            lineStyle : {
+                color : '#008acd'
+            },
+            controlStyle : {
+                normal : { color : '#008acd'},
+                emphasis : { color : '#008acd'}
+            },
+            symbol : 'emptyCircle',
+            symbolSize : 3
+        },
+
+        line: {
+            smooth : true,
+            symbol: 'emptyCircle',
+            symbolSize: 3
+        },
+
+        candlestick: {
+            itemStyle: {
+                normal: {
+                    color: '#d87a80',
+                    color0: '#2ec7c9',
+                    lineStyle: {
+                        color: '#d87a80',
+                        color0: '#2ec7c9'
+                    }
+                }
+            }
+        },
+
+        scatter: {
+            symbol: 'circle',
+            symbolSize: 4
+        },
+
+        map: {
+            label: {
+                normal: {
+                    textStyle: {
+                        color: '#d87a80'
+                    }
+                }
+            },
+            itemStyle: {
+                normal: {
+                    borderColor: '#eee',
+                    areaColor: '#ddd'
+                },
+                emphasis: {
+                    areaColor: '#fe994e'
+                }
+            }
+        },
+
+        graph: {
+            color: colorPalette
+        },
+
+        gauge : {
+            axisLine: {
+                lineStyle: {
+                    color: [[0.2, '#2ec7c9'],[0.8, '#5ab1ef'],[1, '#d87a80']],
+                    width: 10
+                }
+            },
+            axisTick: {
+                splitNumber: 10,
+                length :15,
+                lineStyle: {
+                    color: 'auto'
+                }
+            },
+            splitLine: {
+                length :22,
+                lineStyle: {
+                    color: 'auto'
+                }
+            },
+            pointer : {
+                width : 5
+            }
+        }
+    };
+
+    echarts.registerTheme('macarons', theme);
+}));
\ No newline at end of file
diff --git a/asset/theme/roma.js b/asset/theme/roma.js
new file mode 100644
index 0000000..a88b043
--- /dev/null
+++ b/asset/theme/roma.js
@@ -0,0 +1,67 @@
+(function (root, factory) {if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+
+    var colorPalette = ['#E01F54','#001852','#f5e8c8','#b8d2c7','#c6b38e',
+        '#a4d8c2','#f3d999','#d3758f','#dcc392','#2e4783',
+        '#82b6e9','#ff6347','#a092f1','#0a915d','#eaf889',
+        '#6699FF','#ff6666','#3cb371','#d5b158','#38b6b6'
+    ];
+
+    var theme = {
+        color: colorPalette,
+
+        visualMap: {
+            color:['#e01f54','#e7dbc3'],
+            textStyle: {
+                color: '#333'
+            }
+        },
+
+        candlestick: {
+            itemStyle: {
+                normal: {
+                    color: '#e01f54',
+                    color0: '#001852',
+                    lineStyle: {
+                        width: 1,
+                        color: '#f5e8c8',
+                        color0: '#b8d2c7'
+                    }
+                }
+            }
+        },
+
+        graph: {
+            color: colorPalette
+        },
+
+        gauge : {
+            axisLine: {
+                lineStyle: {
+                    color: [[0.2, '#E01F54'],[0.8, '#b8d2c7'],[1, '#001852']],
+                    width: 8
+                }
+            }
+        }
+    };
+
+    echarts.registerTheme('roma', theme);
+}));
\ No newline at end of file
diff --git a/asset/theme/shine.js b/asset/theme/shine.js
new file mode 100644
index 0000000..42aa723
--- /dev/null
+++ b/asset/theme/shine.js
@@ -0,0 +1,157 @@
+(function (root, factory) {if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+
+    var colorPalette = [
+        '#c12e34','#e6b600','#0098d9','#2b821d',
+        '#005eaa','#339ca8','#cda819','#32a487'
+    ];
+
+    var theme = {
+
+        color: colorPalette,
+
+        title: {
+            textStyle: {
+                fontWeight: 'normal'
+            }
+        },
+
+        visualMap: {
+            color:['#1790cf','#a2d4e6']
+        },
+
+        toolbox: {
+            iconStyle: {
+                normal: {
+                    borderColor: '#06467c'
+                }
+            }
+        },
+
+        tooltip: {
+            backgroundColor: 'rgba(0,0,0,0.6)'
+        },
+
+        dataZoom: {
+            dataBackgroundColor: '#dedede',
+            fillerColor: 'rgba(154,217,247,0.2)',
+            handleColor: '#005eaa'
+        },
+
+        timeline: {
+            lineStyle: {
+                color: '#005eaa'
+            },
+            controlStyle: {
+                normal: {
+                    color: '#005eaa',
+                    borderColor: '#005eaa'
+                }
+            }
+        },
+
+        candlestick: {
+            itemStyle: {
+                normal: {
+                    color: '#c12e34',
+                    color0: '#2b821d',
+                    lineStyle: {
+                        width: 1,
+                        color: '#c12e34',
+                        color0: '#2b821d'
+                    }
+                }
+            }
+        },
+
+        graph: {
+            color: colorPalette
+        },
+
+        map: {
+            label: {
+                normal: {
+                    textStyle: {
+                        color: '#c12e34'
+                    }
+                },
+                emphasis: {
+                    textStyle: {
+                        color: '#c12e34'
+                    }
+                }
+            },
+            itemStyle: {
+                normal: {
+                    borderColor: '#eee',
+                    areaColor: '#ddd'
+                },
+                emphasis: {
+                    areaColor: '#e6b600'
+                }
+            }
+        },
+
+        gauge: {
+            axisLine: {
+                show: true,
+                lineStyle: {
+                    color: [[0.2, '#2b821d'],[0.8, '#005eaa'],[1, '#c12e34']],
+                    width: 5
+                }
+            },
+            axisTick: {
+                splitNumber: 10,
+                length:8,
+                lineStyle: {
+                    color: 'auto'
+                }
+            },
+            axisLabel: {
+                textStyle: {
+                    color: 'auto'
+                }
+            },
+            splitLine: {
+                length: 12,
+                lineStyle: {
+                    color: 'auto'
+                }
+            },
+            pointer: {
+                length: '90%',
+                width: 3,
+                color: 'auto'
+            },
+            title: {
+                textStyle: {
+                    color: '#333'
+                }
+            },
+            detail: {
+                textStyle: {
+                    color: 'auto'
+                }
+            }
+        }
+    };
+    echarts.registerTheme('shine', theme);
+}));
\ No newline at end of file
diff --git a/asset/theme/thumb/dark.png b/asset/theme/thumb/dark.png
new file mode 100644
index 0000000..6790bca
Binary files /dev/null and b/asset/theme/thumb/dark.png differ
diff --git a/asset/theme/thumb/infographic.png b/asset/theme/thumb/infographic.png
new file mode 100644
index 0000000..450b53a
Binary files /dev/null and b/asset/theme/thumb/infographic.png differ
diff --git a/asset/theme/thumb/macarons.png b/asset/theme/thumb/macarons.png
new file mode 100644
index 0000000..2af8002
Binary files /dev/null and b/asset/theme/thumb/macarons.png differ
diff --git a/asset/theme/thumb/roma.png b/asset/theme/thumb/roma.png
new file mode 100644
index 0000000..60df83e
Binary files /dev/null and b/asset/theme/thumb/roma.png differ
diff --git a/asset/theme/thumb/shine.png b/asset/theme/thumb/shine.png
new file mode 100644
index 0000000..b7b6f70
Binary files /dev/null and b/asset/theme/thumb/shine.png differ
diff --git a/asset/theme/thumb/vintage.png b/asset/theme/thumb/vintage.png
new file mode 100644
index 0000000..99ad145
Binary files /dev/null and b/asset/theme/thumb/vintage.png differ
diff --git a/asset/theme/tool/option/area.js b/asset/theme/tool/option/area.js
new file mode 100644
index 0000000..9d6eafc
--- /dev/null
+++ b/asset/theme/tool/option/area.js
@@ -0,0 +1,71 @@
+module.exports = {
+    title: {
+        text: 'Area Chart',
+        left: 'center',
+        top: '3%',
+        textStyle: {
+            fontWeight: 'normal'
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '12%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday','Sunday']
+    },
+    yAxis: {
+        type: 'value',
+        splitNumber: 3
+    },
+    dataZoom: {
+
+    },
+    series: [
+        {
+            name:'Email',
+            type:'line',
+            stack: '总量',
+            areaStyle: {normal: {}},
+            data:[120, 132, 101, 134, 90, 230, 210]
+        },
+        {
+            name:'联盟广告',
+            type:'line',
+            stack: '总量',
+            areaStyle: {normal: {}},
+            data:[220, 182, 191, 234, 290, 330, 310]
+        },
+        {
+            name:'视频广告',
+            type:'line',
+            stack: '总量',
+            areaStyle: {normal: {}},
+            data:[150, 232, 201, 154, 190, 330, 410]
+        },
+        {
+            name:'直接访问',
+            type:'line',
+            stack: '总量',
+            areaStyle: {normal: {}},
+            data:[320, 332, 301, 334, 390, 330, 320]
+        },
+        {
+            name:'搜索引擎',
+            type:'line',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'top'
+                }
+            },
+            areaStyle: {normal: {}},
+            data:[820, 932, 901, 934, 1290, 1330, 1320]
+        }
+    ]
+};
diff --git a/asset/theme/tool/option/bar.js b/asset/theme/tool/option/bar.js
new file mode 100644
index 0000000..94ac06e
--- /dev/null
+++ b/asset/theme/tool/option/bar.js
@@ -0,0 +1,98 @@
+module.exports = {
+    title: {
+        text: 'Bar Chart',
+        left: 'center',
+        top: '3%',
+        textStyle: {
+            fontWeight: 'normal'
+        }
+    },
+    toolbox: {
+        top: '3%',
+        feature: {
+            magicType: {
+                type: ['line', 'bar', 'stack', 'tiled']
+            },
+            restore: {},
+            dataZoom: {},
+            saveAsImage: {}
+        }
+    },
+    grid: {
+        left: '13%',
+        right: '5%',
+        bottom: '5%',
+        textStyle: {
+            fontWeight: 'normal'
+        }
+    },
+    xAxis: {
+        type: 'value'
+    },
+    yAxis: {
+        type: 'category',
+        data: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday','Sunday']
+    },
+    series: [
+        {
+            name:'直接访问',
+            type:'bar',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'insideRight'
+                }
+            },
+            data:[320, 302, 301, 334, 390, 330, 320]
+        },
+        {
+            name:'邮件营销',
+            type:'bar',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'insideRight'
+                }
+            },
+            data:[120, 132, 101, 134, 90, 230, 210]
+        },
+        {
+            name:'联盟广告',
+            type:'bar',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'insideRight'
+                }
+            },
+            data:[220, 182, 191, 234, 290, 330, 310]
+        },
+        {
+            name:'视频广告',
+            type:'bar',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'insideRight'
+                }
+            },
+            data:[150, 212, 201, 154, 190, 330, 410]
+        },
+        {
+            name:'搜索引擎',
+            type:'bar',
+            stack: '总量',
+            label: {
+                normal: {
+                    show: true,
+                    position: 'insideRight'
+                }
+            },
+            data:[820, 832, 901, 934, 1290, 1330, 1320]
+        }
+    ]
+};
\ No newline at end of file
diff --git a/asset/theme/tool/option/graph.js b/asset/theme/tool/option/graph.js
new file mode 100644
index 0000000..2a6c132
--- /dev/null
+++ b/asset/theme/tool/option/graph.js
@@ -0,0 +1,2963 @@
+module.exports = {
+  "series":[
+    {
+      "name":"Les Miserables",
+      "type":"graph",
+      "layout":"none",
+      "data":[
+        {
+          "id":"0",
+          "name":"Myriel",
+          "label":{
+            "normal":{
+              "formatter":"Myriel",
+              "show":false
+            }
+          },
+          "symbolSize":28.685715,
+          "x":-266.82776,
+          "y":299.6904,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":28.685715,
+          "category":0
+        },
+        {
+          "id":"1",
+          "name":"Napoleon",
+          "label":{
+            "normal":{
+              "formatter":"Napoleon",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-418.08344,
+          "y":446.8853,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"2",
+          "name":"MlleBaptistine",
+          "label":{
+            "normal":{
+              "formatter":"MlleBaptistine",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":-212.76357,
+          "y":245.29176,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":9.485714,
+          "category":1
+        },
+        {
+          "id":"3",
+          "name":"MmeMagloire",
+          "label":{
+            "normal":{
+              "formatter":"MmeMagloire",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":-242.82404,
+          "y":235.26283,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":9.485714,
+          "category":1
+        },
+        {
+          "id":"4",
+          "name":"CountessDeLo",
+          "label":{
+            "normal":{
+              "formatter":"CountessDeLo",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-379.30386,
+          "y":429.06424,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"5",
+          "name":"Geborand",
+          "label":{
+            "normal":{
+              "formatter":"Geborand",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-417.26337,
+          "y":406.03506,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"6",
+          "name":"Champtercier",
+          "label":{
+            "normal":{
+              "formatter":"Champtercier",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-332.6012,
+          "y":485.16974,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"7",
+          "name":"Cravatte",
+          "label":{
+            "normal":{
+              "formatter":"Cravatte",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-382.69568,
+          "y":475.09113,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"8",
+          "name":"Count",
+          "label":{
+            "normal":{
+              "formatter":"Count",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-320.384,
+          "y":387.17325,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"9",
+          "name":"OldMan",
+          "label":{
+            "normal":{
+              "formatter":"OldMan",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-344.39832,
+          "y":451.16772,
+          "attributes":{
+            "modularity_class":0
+          },
+          "value":4,
+          "category":0
+        },
+        {
+          "id":"10",
+          "name":"Labarre",
+          "label":{
+            "normal":{
+              "formatter":"Labarre",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-89.34107,
+          "y":234.56128,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":4,
+          "category":1
+        },
+        {
+          "id":"11",
+          "name":"Valjean",
+          "label":{
+            "normal":{
+              "formatter":"Valjean",
+              "show":  false
+            }
+          },
+          "symbolSize":100,
+          "x":-87.93029,
+          "y":-6.8120565,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":100,
+          "category":1
+        },
+        {
+          "id":"12",
+          "name":"Marguerite",
+          "label":{
+            "normal":{
+              "formatter":"Marguerite",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":-339.77908,
+          "y":-184.69139,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":6.742859,
+          "category":1
+        },
+        {
+          "id":"13",
+          "name":"MmeDeR",
+          "label":{
+            "normal":{
+              "formatter":"MmeDeR",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-194.31313,
+          "y":178.55301,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":4,
+          "category":1
+        },
+        {
+          "id":"14",
+          "name":"Isabeau",
+          "label":{
+            "normal":{
+              "formatter":"Isabeau",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-158.05168,
+          "y":201.99768,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":4,
+          "category":1
+        },
+        {
+          "id":"15",
+          "name":"Gervais",
+          "label":{
+            "normal":{
+              "formatter":"Gervais",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-127.701546,
+          "y":242.55057,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":4,
+          "category":1
+        },
+        {
+          "id":"16",
+          "name":"Tholomyes",
+          "label":{
+            "normal":{
+              "formatter":"Tholomyes",
+              "show":false
+            }
+          },
+          "symbolSize":25.942856,
+          "x":-385.2226,
+          "y":-393.5572,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":25.942856,
+          "category":2
+        },
+        {
+          "id":"17",
+          "name":"Listolier",
+          "label":{
+            "normal":{
+              "formatter":"Listolier",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-516.55884,
+          "y":-393.98975,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"18",
+          "name":"Fameuil",
+          "label":{
+            "normal":{
+              "formatter":"Fameuil",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-464.79382,
+          "y":-493.57944,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"19",
+          "name":"Blacheville",
+          "label":{
+            "normal":{
+              "formatter":"Blacheville",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-515.1624,
+          "y":-456.9891,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"20",
+          "name":"Favourite",
+          "label":{
+            "normal":{
+              "formatter":"Favourite",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-408.12122,
+          "y":-464.5048,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"21",
+          "name":"Dahlia",
+          "label":{
+            "normal":{
+              "formatter":"Dahlia",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-456.44113,
+          "y":-425.13303,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"22",
+          "name":"Zephine",
+          "label":{
+            "normal":{
+              "formatter":"Zephine",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":-459.1107,
+          "y":-362.5133,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":20.457146,
+          "category":2
+        },
+        {
+          "id":"23",
+          "name":"Fantine",
+          "label":{
+            "normal":{
+              "formatter":"Fantine",
+              "show":  false
+            }
+          },
+          "symbolSize":42.4,
+          "x":-313.42786,
+          "y":-289.44803,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":42.4,
+          "category":2
+        },
+        {
+          "id":"24",
+          "name":"MmeThenardier",
+          "label":{
+            "normal":{
+              "formatter":"MmeThenardier",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":4.6313396,
+          "y":-273.8517,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":31.428574,
+          "category":7
+        },
+        {
+          "id":"25",
+          "name":"Thenardier",
+          "label":{
+            "normal":{
+              "formatter":"Thenardier",
+              "show":  false
+            }
+          },
+          "symbolSize":45.142853,
+          "x":82.80825,
+          "y":-203.1144,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":45.142853,
+          "category":7
+        },
+        {
+          "id":"26",
+          "name":"Cosette",
+          "label":{
+            "normal":{
+              "formatter":"Cosette",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":78.64646,
+          "y":-31.512747,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":31.428574,
+          "category":6
+        },
+        {
+          "id":"27",
+          "name":"Javert",
+          "label":{
+            "normal":{
+              "formatter":"Javert",
+              "show":  false
+            }
+          },
+          "symbolSize":47.88571,
+          "x":-81.46074,
+          "y":-204.20204,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":47.88571,
+          "category":7
+        },
+        {
+          "id":"28",
+          "name":"Fauchelevent",
+          "label":{
+            "normal":{
+              "formatter":"Fauchelevent",
+              "show":false
+            }
+          },
+          "symbolSize":12.228573,
+          "x":-225.73984,
+          "y":82.41631,
+          "attributes":{
+            "modularity_class":4
+          },
+          "value":12.228573,
+          "category":4
+        },
+        {
+          "id":"29",
+          "name":"Bamatabois",
+          "label":{
+            "normal":{
+              "formatter":"Bamatabois",
+              "show":false
+            }
+          },
+          "symbolSize":23.2,
+          "x":-385.6842,
+          "y":-20.206686,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":23.2,
+          "category":3
+        },
+        {
+          "id":"30",
+          "name":"Perpetue",
+          "label":{
+            "normal":{
+              "formatter":"Perpetue",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":-403.92447,
+          "y":-197.69823,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":6.742859,
+          "category":2
+        },
+        {
+          "id":"31",
+          "name":"Simplice",
+          "label":{
+            "normal":{
+              "formatter":"Simplice",
+              "show":false
+            }
+          },
+          "symbolSize":12.228573,
+          "x":-281.4253,
+          "y":-158.45137,
+          "attributes":{
+            "modularity_class":2
+          },
+          "value":12.228573,
+          "category":2
+        },
+        {
+          "id":"32",
+          "name":"Scaufflaire",
+          "label":{
+            "normal":{
+              "formatter":"Scaufflaire",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-122.41348,
+          "y":210.37503,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":4,
+          "category":1
+        },
+        {
+          "id":"33",
+          "name":"Woman1",
+          "label":{
+            "normal":{
+              "formatter":"Woman1",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":-234.6001,
+          "y":-113.15067,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":6.742859,
+          "category":1
+        },
+        {
+          "id":"34",
+          "name":"Judge",
+          "label":{
+            "normal":{
+              "formatter":"Judge",
+              "show":false
+            }
+          },
+          "symbolSize":17.714287,
+          "x":-387.84915,
+          "y":58.7059,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":17.714287,
+          "category":3
+        },
+        {
+          "id":"35",
+          "name":"Champmathieu",
+          "label":{
+            "normal":{
+              "formatter":"Champmathieu",
+              "show":false
+            }
+          },
+          "symbolSize":17.714287,
+          "x":-338.2307,
+          "y":87.48405,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":17.714287,
+          "category":3
+        },
+        {
+          "id":"36",
+          "name":"Brevet",
+          "label":{
+            "normal":{
+              "formatter":"Brevet",
+              "show":false
+            }
+          },
+          "symbolSize":17.714287,
+          "x":-453.26874,
+          "y":58.94648,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":17.714287,
+          "category":3
+        },
+        {
+          "id":"37",
+          "name":"Chenildieu",
+          "label":{
+            "normal":{
+              "formatter":"Chenildieu",
+              "show":false
+            }
+          },
+          "symbolSize":17.714287,
+          "x":-386.44904,
+          "y":140.05937,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":17.714287,
+          "category":3
+        },
+        {
+          "id":"38",
+          "name":"Cochepaille",
+          "label":{
+            "normal":{
+              "formatter":"Cochepaille",
+              "show":false
+            }
+          },
+          "symbolSize":17.714287,
+          "x":-446.7876,
+          "y":123.38005,
+          "attributes":{
+            "modularity_class":3
+          },
+          "value":17.714287,
+          "category":3
+        },
+        {
+          "id":"39",
+          "name":"Pontmercy",
+          "label":{
+            "normal":{
+              "formatter":"Pontmercy",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":336.49738,
+          "y":-269.55914,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":9.485714,
+          "category":6
+        },
+        {
+          "id":"40",
+          "name":"Boulatruelle",
+          "label":{
+            "normal":{
+              "formatter":"Boulatruelle",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":29.187843,
+          "y":-460.13132,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":4,
+          "category":7
+        },
+        {
+          "id":"41",
+          "name":"Eponine",
+          "label":{
+            "normal":{
+              "formatter":"Eponine",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":238.36697,
+          "y":-210.00926,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":31.428574,
+          "category":7
+        },
+        {
+          "id":"42",
+          "name":"Anzelma",
+          "label":{
+            "normal":{
+              "formatter":"Anzelma",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":189.69513,
+          "y":-346.50662,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":9.485714,
+          "category":7
+        },
+        {
+          "id":"43",
+          "name":"Woman2",
+          "label":{
+            "normal":{
+              "formatter":"Woman2",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":-187.00418,
+          "y":-145.02663,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":9.485714,
+          "category":6
+        },
+        {
+          "id":"44",
+          "name":"MotherInnocent",
+          "label":{
+            "normal":{
+              "formatter":"MotherInnocent",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":-252.99521,
+          "y":129.87549,
+          "attributes":{
+            "modularity_class":4
+          },
+          "value":6.742859,
+          "category":4
+        },
+        {
+          "id":"45",
+          "name":"Gribier",
+          "label":{
+            "normal":{
+              "formatter":"Gribier",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":-296.07935,
+          "y":163.11964,
+          "attributes":{
+            "modularity_class":4
+          },
+          "value":4,
+          "category":4
+        },
+        {
+          "id":"46",
+          "name":"Jondrette",
+          "label":{
+            "normal":{
+              "formatter":"Jondrette",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":550.3201,
+          "y":522.4031,
+          "attributes":{
+            "modularity_class":5
+          },
+          "value":4,
+          "category":5
+        },
+        {
+          "id":"47",
+          "name":"MmeBurgon",
+          "label":{
+            "normal":{
+              "formatter":"MmeBurgon",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":488.13535,
+          "y":356.8573,
+          "attributes":{
+            "modularity_class":5
+          },
+          "value":6.742859,
+          "category":5
+        },
+        {
+          "id":"48",
+          "name":"Gavroche",
+          "label":{
+            "normal":{
+              "formatter":"Gavroche",
+              "show":  false
+            }
+          },
+          "symbolSize":61.600006,
+          "x":387.89572,
+          "y":110.462326,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":61.600006,
+          "category":8
+        },
+        {
+          "id":"49",
+          "name":"Gillenormand",
+          "label":{
+            "normal":{
+              "formatter":"Gillenormand",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":126.4831,
+          "y":68.10622,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":20.457146,
+          "category":6
+        },
+        {
+          "id":"50",
+          "name":"Magnon",
+          "label":{
+            "normal":{
+              "formatter":"Magnon",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":127.07365,
+          "y":-113.05923,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":6.742859,
+          "category":6
+        },
+        {
+          "id":"51",
+          "name":"MlleGillenormand",
+          "label":{
+            "normal":{
+              "formatter":"MlleGillenormand",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":162.63559,
+          "y":117.6565,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":20.457146,
+          "category":6
+        },
+        {
+          "id":"52",
+          "name":"MmePontmercy",
+          "label":{
+            "normal":{
+              "formatter":"MmePontmercy",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":353.66415,
+          "y":-205.89165,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":6.742859,
+          "category":6
+        },
+        {
+          "id":"53",
+          "name":"MlleVaubois",
+          "label":{
+            "normal":{
+              "formatter":"MlleVaubois",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":165.43939,
+          "y":339.7736,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":4,
+          "category":6
+        },
+        {
+          "id":"54",
+          "name":"LtGillenormand",
+          "label":{
+            "normal":{
+              "formatter":"LtGillenormand",
+              "show":false
+            }
+          },
+          "symbolSize":12.228573,
+          "x":137.69348,
+          "y":196.1069,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":12.228573,
+          "category":6
+        },
+        {
+          "id":"55",
+          "name":"Marius",
+          "label":{
+            "normal":{
+              "formatter":"Marius",
+              "show":  false
+            }
+          },
+          "symbolSize":53.37143,
+          "x":206.44687,
+          "y":-13.805411,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":53.37143,
+          "category":6
+        },
+        {
+          "id":"56",
+          "name":"BaronessT",
+          "label":{
+            "normal":{
+              "formatter":"BaronessT",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":194.82993,
+          "y":224.78036,
+          "attributes":{
+            "modularity_class":6
+          },
+          "value":6.742859,
+          "category":6
+        },
+        {
+          "id":"57",
+          "name":"Mabeuf",
+          "label":{
+            "normal":{
+              "formatter":"Mabeuf",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":597.6618,
+          "y":135.18481,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":31.428574,
+          "category":8
+        },
+        {
+          "id":"58",
+          "name":"Enjolras",
+          "label":{
+            "normal":{
+              "formatter":"Enjolras",
+              "show":  false
+            }
+          },
+          "symbolSize":42.4,
+          "x":355.78366,
+          "y":-74.882454,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":42.4,
+          "category":8
+        },
+        {
+          "id":"59",
+          "name":"Combeferre",
+          "label":{
+            "normal":{
+              "formatter":"Combeferre",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":515.2961,
+          "y":-46.167564,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":31.428574,
+          "category":8
+        },
+        {
+          "id":"60",
+          "name":"Prouvaire",
+          "label":{
+            "normal":{
+              "formatter":"Prouvaire",
+              "show":false
+            }
+          },
+          "symbolSize":25.942856,
+          "x":614.29285,
+          "y":-69.3104,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":25.942856,
+          "category":8
+        },
+        {
+          "id":"61",
+          "name":"Feuilly",
+          "label":{
+            "normal":{
+              "formatter":"Feuilly",
+              "show":  false
+            }
+          },
+          "symbolSize":31.428574,
+          "x":550.1917,
+          "y":-128.17537,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":31.428574,
+          "category":8
+        },
+        {
+          "id":"62",
+          "name":"Courfeyrac",
+          "label":{
+            "normal":{
+              "formatter":"Courfeyrac",
+              "show":  false
+            }
+          },
+          "symbolSize":36.91429,
+          "x":436.17184,
+          "y":-12.7286825,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":36.91429,
+          "category":8
+        },
+        {
+          "id":"63",
+          "name":"Bahorel",
+          "label":{
+            "normal":{
+              "formatter":"Bahorel",
+              "show":  false
+            }
+          },
+          "symbolSize":34.17143,
+          "x":602.55225,
+          "y":16.421427,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":34.17143,
+          "category":8
+        },
+        {
+          "id":"64",
+          "name":"Bossuet",
+          "label":{
+            "normal":{
+              "formatter":"Bossuet",
+              "show":  false
+            }
+          },
+          "symbolSize":36.91429,
+          "x":455.81955,
+          "y":-115.45826,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":36.91429,
+          "category":8
+        },
+        {
+          "id":"65",
+          "name":"Joly",
+          "label":{
+            "normal":{
+              "formatter":"Joly",
+              "show":  false
+            }
+          },
+          "symbolSize":34.17143,
+          "x":516.40784,
+          "y":47.242233,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":34.17143,
+          "category":8
+        },
+        {
+          "id":"66",
+          "name":"Grantaire",
+          "label":{
+            "normal":{
+              "formatter":"Grantaire",
+              "show":false
+            }
+          },
+          "symbolSize":28.685715,
+          "x":646.4313,
+          "y":-151.06331,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":28.685715,
+          "category":8
+        },
+        {
+          "id":"67",
+          "name":"MotherPlutarch",
+          "label":{
+            "normal":{
+              "formatter":"MotherPlutarch",
+              "show":false
+            }
+          },
+          "symbolSize":4,
+          "x":668.9568,
+          "y":204.65488,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":4,
+          "category":8
+        },
+        {
+          "id":"68",
+          "name":"Gueulemer",
+          "label":{
+            "normal":{
+              "formatter":"Gueulemer",
+              "show":false
+            }
+          },
+          "symbolSize":28.685715,
+          "x":78.4799,
+          "y":-347.15146,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":28.685715,
+          "category":7
+        },
+        {
+          "id":"69",
+          "name":"Babet",
+          "label":{
+            "normal":{
+              "formatter":"Babet",
+              "show":false
+            }
+          },
+          "symbolSize":28.685715,
+          "x":150.35959,
+          "y":-298.50797,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":28.685715,
+          "category":7
+        },
+        {
+          "id":"70",
+          "name":"Claquesous",
+          "label":{
+            "normal":{
+              "formatter":"Claquesous",
+              "show":false
+            }
+          },
+          "symbolSize":28.685715,
+          "x":137.3717,
+          "y":-410.2809,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":28.685715,
+          "category":7
+        },
+        {
+          "id":"71",
+          "name":"Montparnasse",
+          "label":{
+            "normal":{
+              "formatter":"Montparnasse",
+              "show":false
+            }
+          },
+          "symbolSize":25.942856,
+          "x":234.87747,
+          "y":-400.85983,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":25.942856,
+          "category":7
+        },
+        {
+          "id":"72",
+          "name":"Toussaint",
+          "label":{
+            "normal":{
+              "formatter":"Toussaint",
+              "show":false
+            }
+          },
+          "symbolSize":9.485714,
+          "x":40.942253,
+          "y":113.78272,
+          "attributes":{
+            "modularity_class":1
+          },
+          "value":9.485714,
+          "category":1
+        },
+        {
+          "id":"73",
+          "name":"Child1",
+          "label":{
+            "normal":{
+              "formatter":"Child1",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":437.939,
+          "y":291.58234,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":6.742859,
+          "category":8
+        },
+        {
+          "id":"74",
+          "name":"Child2",
+          "label":{
+            "normal":{
+              "formatter":"Child2",
+              "show":false
+            }
+          },
+          "symbolSize":6.742859,
+          "x":466.04922,
+          "y":283.3606,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":6.742859,
+          "category":8
+        },
+        {
+          "id":"75",
+          "name":"Brujon",
+          "label":{
+            "normal":{
+              "formatter":"Brujon",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":238.79364,
+          "y":-314.06345,
+          "attributes":{
+            "modularity_class":7
+          },
+          "value":20.457146,
+          "category":7
+        },
+        {
+          "id":"76",
+          "name":"MmeHucheloup",
+          "label":{
+            "normal":{
+              "formatter":"MmeHucheloup",
+              "show":false
+            }
+          },
+          "symbolSize":20.457146,
+          "x":712.18353,
+          "y":4.8131495,
+          "attributes":{
+            "modularity_class":8
+          },
+          "value":20.457146,
+          "category":8
+        }
+      ],
+      "links":[
+        {
+          "id":"0",
+          "name":null,
+          "source":"1",
+          "target":"0"
+        },
+        {
+          "id":"1",
+          "name":null,
+          "source":"2",
+          "target":"0"
+        },
+        {
+          "id":"2",
+          "name":null,
+          "source":"3",
+          "target":"0"
+        },
+        {
+          "id":"3",
+          "name":null,
+          "source":"3",
+          "target":"2"
+        },
+        {
+          "id":"4",
+          "name":null,
+          "source":"4",
+          "target":"0"
+        },
+        {
+          "id":"5",
+          "name":null,
+          "source":"5",
+          "target":"0"
+        },
+        {
+          "id":"6",
+          "name":null,
+          "source":"6",
+          "target":"0"
+        },
+        {
+          "id":"7",
+          "name":null,
+          "source":"7",
+          "target":"0"
+        },
+        {
+          "id":"8",
+          "name":null,
+          "source":"8",
+          "target":"0"
+        },
+        {
+          "id":"9",
+          "name":null,
+          "source":"9",
+          "target":"0"
+        },
+        {
+          "id":"13",
+          "name":null,
+          "source":"11",
+          "target":"0"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"11",
+          "target":"2"
+        },
+        {
+          "id":"11",
+          "name":null,
+          "source":"11",
+          "target":"3"
+        },
+        {
+          "id":"10",
+          "name":null,
+          "source":"11",
+          "target":"10"
+        },
+        {
+          "id":"14",
+          "name":null,
+          "source":"12",
+          "target":"11"
+        },
+        {
+          "id":"15",
+          "name":null,
+          "source":"13",
+          "target":"11"
+        },
+        {
+          "id":"16",
+          "name":null,
+          "source":"14",
+          "target":"11"
+        },
+        {
+          "id":"17",
+          "name":null,
+          "source":"15",
+          "target":"11"
+        },
+        {
+          "id":"18",
+          "name":null,
+          "source":"17",
+          "target":"16"
+        },
+        {
+          "id":"19",
+          "name":null,
+          "source":"18",
+          "target":"16"
+        },
+        {
+          "id":"20",
+          "name":null,
+          "source":"18",
+          "target":"17"
+        },
+        {
+          "id":"21",
+          "name":null,
+          "source":"19",
+          "target":"16"
+        },
+        {
+          "id":"22",
+          "name":null,
+          "source":"19",
+          "target":"17"
+        },
+        {
+          "id":"23",
+          "name":null,
+          "source":"19",
+          "target":"18"
+        },
+        {
+          "id":"24",
+          "name":null,
+          "source":"20",
+          "target":"16"
+        },
+        {
+          "id":"25",
+          "name":null,
+          "source":"20",
+          "target":"17"
+        },
+        {
+          "id":"26",
+          "name":null,
+          "source":"20",
+          "target":"18"
+        },
+        {
+          "id":"27",
+          "name":null,
+          "source":"20",
+          "target":"19"
+        },
+        {
+          "id":"28",
+          "name":null,
+          "source":"21",
+          "target":"16"
+        },
+        {
+          "id":"29",
+          "name":null,
+          "source":"21",
+          "target":"17"
+        },
+        {
+          "id":"30",
+          "name":null,
+          "source":"21",
+          "target":"18"
+        },
+        {
+          "id":"31",
+          "name":null,
+          "source":"21",
+          "target":"19"
+        },
+        {
+          "id":"32",
+          "name":null,
+          "source":"21",
+          "target":"20"
+        },
+        {
+          "id":"33",
+          "name":null,
+          "source":"22",
+          "target":"16"
+        },
+        {
+          "id":"34",
+          "name":null,
+          "source":"22",
+          "target":"17"
+        },
+        {
+          "id":"35",
+          "name":null,
+          "source":"22",
+          "target":"18"
+        },
+        {
+          "id":"36",
+          "name":null,
+          "source":"22",
+          "target":"19"
+        },
+        {
+          "id":"37",
+          "name":null,
+          "source":"22",
+          "target":"20"
+        },
+        {
+          "id":"38",
+          "name":null,
+          "source":"22",
+          "target":"21"
+        },
+        {
+          "id":"47",
+          "name":null,
+          "source":"23",
+          "target":"11"
+        },
+        {
+          "id":"46",
+          "name":null,
+          "source":"23",
+          "target":"12"
+        },
+        {
+          "id":"39",
+          "name":null,
+          "source":"23",
+          "target":"16"
+        },
+        {
+          "id":"40",
+          "name":null,
+          "source":"23",
+          "target":"17"
+        },
+        {
+          "id":"41",
+          "name":null,
+          "source":"23",
+          "target":"18"
+        },
+        {
+          "id":"42",
+          "name":null,
+          "source":"23",
+          "target":"19"
+        },
+        {
+          "id":"43",
+          "name":null,
+          "source":"23",
+          "target":"20"
+        },
+        {
+          "id":"44",
+          "name":null,
+          "source":"23",
+          "target":"21"
+        },
+        {
+          "id":"45",
+          "name":null,
+          "source":"23",
+          "target":"22"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"24",
+          "target":"11"
+        },
+        {
+          "id":"48",
+          "name":null,
+          "source":"24",
+          "target":"23"
+        },
+        {
+          "id":"52",
+          "name":null,
+          "source":"25",
+          "target":"11"
+        },
+        {
+          "id":"51",
+          "name":null,
+          "source":"25",
+          "target":"23"
+        },
+        {
+          "id":"50",
+          "name":null,
+          "source":"25",
+          "target":"24"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"26",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"26",
+          "target":"16"
+        },
+        {
+          "id":"53",
+          "name":null,
+          "source":"26",
+          "target":"24"
+        },
+        {
+          "id":"56",
+          "name":null,
+          "source":"26",
+          "target":"25"
+        },
+        {
+          "id":"57",
+          "name":null,
+          "source":"27",
+          "target":"11"
+        },
+        {
+          "id":"58",
+          "name":null,
+          "source":"27",
+          "target":"23"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"27",
+          "target":"24"
+        },
+        {
+          "id":"59",
+          "name":null,
+          "source":"27",
+          "target":"25"
+        },
+        {
+          "id":"61",
+          "name":null,
+          "source":"27",
+          "target":"26"
+        },
+        {
+          "id":"62",
+          "name":null,
+          "source":"28",
+          "target":"11"
+        },
+        {
+          "id":"63",
+          "name":null,
+          "source":"28",
+          "target":"27"
+        },
+        {
+          "id":"66",
+          "name":null,
+          "source":"29",
+          "target":"11"
+        },
+        {
+          "id":"64",
+          "name":null,
+          "source":"29",
+          "target":"23"
+        },
+        {
+          "id":"65",
+          "name":null,
+          "source":"29",
+          "target":"27"
+        },
+        {
+          "id":"67",
+          "name":null,
+          "source":"30",
+          "target":"23"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"31",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"31",
+          "target":"23"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"31",
+          "target":"27"
+        },
+        {
+          "id":"68",
+          "name":null,
+          "source":"31",
+          "target":"30"
+        },
+        {
+          "id":"72",
+          "name":null,
+          "source":"32",
+          "target":"11"
+        },
+        {
+          "id":"73",
+          "name":null,
+          "source":"33",
+          "target":"11"
+        },
+        {
+          "id":"74",
+          "name":null,
+          "source":"33",
+          "target":"27"
+        },
+        {
+          "id":"75",
+          "name":null,
+          "source":"34",
+          "target":"11"
+        },
+        {
+          "id":"76",
+          "name":null,
+          "source":"34",
+          "target":"29"
+        },
+        {
+          "id":"77",
+          "name":null,
+          "source":"35",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"35",
+          "target":"29"
+        },
+        {
+          "id":"78",
+          "name":null,
+          "source":"35",
+          "target":"34"
+        },
+        {
+          "id":"82",
+          "name":null,
+          "source":"36",
+          "target":"11"
+        },
+        {
+          "id":"83",
+          "name":null,
+          "source":"36",
+          "target":"29"
+        },
+        {
+          "id":"80",
+          "name":null,
+          "source":"36",
+          "target":"34"
+        },
+        {
+          "id":"81",
+          "name":null,
+          "source":"36",
+          "target":"35"
+        },
+        {
+          "id":"87",
+          "name":null,
+          "source":"37",
+          "target":"11"
+        },
+        {
+          "id":"88",
+          "name":null,
+          "source":"37",
+          "target":"29"
+        },
+        {
+          "id":"84",
+          "name":null,
+          "source":"37",
+          "target":"34"
+        },
+        {
+          "id":"85",
+          "name":null,
+          "source":"37",
+          "target":"35"
+        },
+        {
+          "id":"86",
+          "name":null,
+          "source":"37",
+          "target":"36"
+        },
+        {
+          "id":"93",
+          "name":null,
+          "source":"38",
+          "target":"11"
+        },
+        {
+          "id":"94",
+          "name":null,
+          "source":"38",
+          "target":"29"
+        },
+        {
+          "id":"89",
+          "name":null,
+          "source":"38",
+          "target":"34"
+        },
+        {
+          "id":"90",
+          "name":null,
+          "source":"38",
+          "target":"35"
+        },
+        {
+          "id":"91",
+          "name":null,
+          "source":"38",
+          "target":"36"
+        },
+        {
+          "id":"92",
+          "name":null,
+          "source":"38",
+          "target":"37"
+        },
+        {
+          "id":"95",
+          "name":null,
+          "source":"39",
+          "target":"25"
+        },
+        {
+          "id":"96",
+          "name":null,
+          "source":"40",
+          "target":"25"
+        },
+        {
+          "id":"97",
+          "name":null,
+          "source":"41",
+          "target":"24"
+        },
+        {
+          "id":"98",
+          "name":null,
+          "source":"41",
+          "target":"25"
+        },
+        {
+          "id":"101",
+          "name":null,
+          "source":"42",
+          "target":"24"
+        },
+        {
+          "id":"100",
+          "name":null,
+          "source":"42",
+          "target":"25"
+        },
+        {
+          "id":"99",
+          "name":null,
+          "source":"42",
+          "target":"41"
+        },
+        {
+          "id":"102",
+          "name":null,
+          "source":"43",
+          "target":"11"
+        },
+        {
+          "id":"103",
+          "name":null,
+          "source":"43",
+          "target":"26"
+        },
+        {
+          "id":"104",
+          "name":null,
+          "source":"43",
+          "target":"27"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"44",
+          "target":"11"
+        },
+        {
+          "id":"105",
+          "name":null,
+          "source":"44",
+          "target":"28"
+        },
+        {
+          "id":"107",
+          "name":null,
+          "source":"45",
+          "target":"28"
+        },
+        {
+          "id":"108",
+          "name":null,
+          "source":"47",
+          "target":"46"
+        },
+        {
+          "id":"112",
+          "name":null,
+          "source":"48",
+          "target":"11"
+        },
+        {
+          "id":"110",
+          "name":null,
+          "source":"48",
+          "target":"25"
+        },
+        {
+          "id":"111",
+          "name":null,
+          "source":"48",
+          "target":"27"
+        },
+        {
+          "id":"109",
+          "name":null,
+          "source":"48",
+          "target":"47"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"49",
+          "target":"11"
+        },
+        {
+          "id":"113",
+          "name":null,
+          "source":"49",
+          "target":"26"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"50",
+          "target":"24"
+        },
+        {
+          "id":"115",
+          "name":null,
+          "source":"50",
+          "target":"49"
+        },
+        {
+          "id":"119",
+          "name":null,
+          "source":"51",
+          "target":"11"
+        },
+        {
+          "id":"118",
+          "name":null,
+          "source":"51",
+          "target":"26"
+        },
+        {
+          "id":"117",
+          "name":null,
+          "source":"51",
+          "target":"49"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"52",
+          "target":"39"
+        },
+        {
+          "id":"120",
+          "name":null,
+          "source":"52",
+          "target":"51"
+        },
+        {
+          "id":"122",
+          "name":null,
+          "source":"53",
+          "target":"51"
+        },
+        {
+          "id":"125",
+          "name":null,
+          "source":"54",
+          "target":"26"
+        },
+        {
+          "id":"124",
+          "name":null,
+          "source":"54",
+          "target":"49"
+        },
+        {
+          "id":"123",
+          "name":null,
+          "source":"54",
+          "target":"51"
+        },
+        {
+          "id":"131",
+          "name":null,
+          "source":"55",
+          "target":"11"
+        },
+        {
+          "id":"132",
+          "name":null,
+          "source":"55",
+          "target":"16"
+        },
+        {
+          "id":"133",
+          "name":null,
+          "source":"55",
+          "target":"25"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"55",
+          "target":"26"
+        },
+        {
+          "id":"128",
+          "name":null,
+          "source":"55",
+          "target":"39"
+        },
+        {
+          "id":"134",
+          "name":null,
+          "source":"55",
+          "target":"41"
+        },
+        {
+          "id":"135",
+          "name":null,
+          "source":"55",
+          "target":"48"
+        },
+        {
+          "id":"127",
+          "name":null,
+          "source":"55",
+          "target":"49"
+        },
+        {
+          "id":"126",
+          "name":null,
+          "source":"55",
+          "target":"51"
+        },
+        {
+          "id":"129",
+          "name":null,
+          "source":"55",
+          "target":"54"
+        },
+        {
+          "id":"136",
+          "name":null,
+          "source":"56",
+          "target":"49"
+        },
+        {
+          "id":"137",
+          "name":null,
+          "source":"56",
+          "target":"55"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"57",
+          "target":"41"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"57",
+          "target":"48"
+        },
+        {
+          "id":"138",
+          "name":null,
+          "source":"57",
+          "target":"55"
+        },
+        {
+          "id":"145",
+          "name":null,
+          "source":"58",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"58",
+          "target":"27"
+        },
+        {
+          "id":"142",
+          "name":null,
+          "source":"58",
+          "target":"48"
+        },
+        {
+          "id":"141",
+          "name":null,
+          "source":"58",
+          "target":"55"
+        },
+        {
+          "id":"144",
+          "name":null,
+          "source":"58",
+          "target":"57"
+        },
+        {
+          "id":"148",
+          "name":null,
+          "source":"59",
+          "target":"48"
+        },
+        {
+          "id":"147",
+          "name":null,
+          "source":"59",
+          "target":"55"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"59",
+          "target":"57"
+        },
+        {
+          "id":"146",
+          "name":null,
+          "source":"59",
+          "target":"58"
+        },
+        {
+          "id":"150",
+          "name":null,
+          "source":"60",
+          "target":"48"
+        },
+        {
+          "id":"151",
+          "name":null,
+          "source":"60",
+          "target":"58"
+        },
+        {
+          "id":"152",
+          "name":null,
+          "source":"60",
+          "target":"59"
+        },
+        {
+          "id":"153",
+          "name":null,
+          "source":"61",
+          "target":"48"
+        },
+        {
+          "id":"158",
+          "name":null,
+          "source":"61",
+          "target":"55"
+        },
+        {
+          "id":"157",
+          "name":null,
+          "source":"61",
+          "target":"57"
+        },
+        {
+          "id":"154",
+          "name":null,
+          "source":"61",
+          "target":"58"
+        },
+        {
+          "id":"156",
+          "name":null,
+          "source":"61",
+          "target":"59"
+        },
+        {
+          "id":"155",
+          "name":null,
+          "source":"61",
+          "target":"60"
+        },
+        {
+          "id":"164",
+          "name":null,
+          "source":"62",
+          "target":"41"
+        },
+        {
+          "id":"162",
+          "name":null,
+          "source":"62",
+          "target":"48"
+        },
+        {
+          "id":"159",
+          "name":null,
+          "source":"62",
+          "target":"55"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"62",
+          "target":"57"
+        },
+        {
+          "id":"160",
+          "name":null,
+          "source":"62",
+          "target":"58"
+        },
+        {
+          "id":"161",
+          "name":null,
+          "source":"62",
+          "target":"59"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"62",
+          "target":"60"
+        },
+        {
+          "id":"165",
+          "name":null,
+          "source":"62",
+          "target":"61"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"63",
+          "target":"48"
+        },
+        {
+          "id":"174",
+          "name":null,
+          "source":"63",
+          "target":"55"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"63",
+          "target":"57"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"63",
+          "target":"58"
+        },
+        {
+          "id":"167",
+          "name":null,
+          "source":"63",
+          "target":"59"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"63",
+          "target":"60"
+        },
+        {
+          "id":"172",
+          "name":null,
+          "source":"63",
+          "target":"61"
+        },
+        {
+          "id":"169",
+          "name":null,
+          "source":"63",
+          "target":"62"
+        },
+        {
+          "id":"184",
+          "name":null,
+          "source":"64",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"64",
+          "target":"48"
+        },
+        {
+          "id":"175",
+          "name":null,
+          "source":"64",
+          "target":"55"
+        },
+        {
+          "id":"183",
+          "name":null,
+          "source":"64",
+          "target":"57"
+        },
+        {
+          "id":"179",
+          "name":null,
+          "source":"64",
+          "target":"58"
+        },
+        {
+          "id":"182",
+          "name":null,
+          "source":"64",
+          "target":"59"
+        },
+        {
+          "id":"181",
+          "name":null,
+          "source":"64",
+          "target":"60"
+        },
+        {
+          "id":"180",
+          "name":null,
+          "source":"64",
+          "target":"61"
+        },
+        {
+          "id":"176",
+          "name":null,
+          "source":"64",
+          "target":"62"
+        },
+        {
+          "id":"178",
+          "name":null,
+          "source":"64",
+          "target":"63"
+        },
+        {
+          "id":"187",
+          "name":null,
+          "source":"65",
+          "target":"48"
+        },
+        {
+          "id":"194",
+          "name":null,
+          "source":"65",
+          "target":"55"
+        },
+        {
+          "id":"193",
+          "name":null,
+          "source":"65",
+          "target":"57"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"65",
+          "target":"58"
+        },
+        {
+          "id":"192",
+          "name":null,
+          "source":"65",
+          "target":"59"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"65",
+          "target":"60"
+        },
+        {
+          "id":"190",
+          "name":null,
+          "source":"65",
+          "target":"61"
+        },
+        {
+          "id":"188",
+          "name":null,
+          "source":"65",
+          "target":"62"
+        },
+        {
+          "id":"185",
+          "name":null,
+          "source":"65",
+          "target":"63"
+        },
+        {
+          "id":"186",
+          "name":null,
+          "source":"65",
+          "target":"64"
+        },
+        {
+          "id":"200",
+          "name":null,
+          "source":"66",
+          "target":"48"
+        },
+        {
+          "id":"196",
+          "name":null,
+          "source":"66",
+          "target":"58"
+        },
+        {
+          "id":"197",
+          "name":null,
+          "source":"66",
+          "target":"59"
+        },
+        {
+          "id":"203",
+          "name":null,
+          "source":"66",
+          "target":"60"
+        },
+        {
+          "id":"202",
+          "name":null,
+          "source":"66",
+          "target":"61"
+        },
+        {
+          "id":"198",
+          "name":null,
+          "source":"66",
+          "target":"62"
+        },
+        {
+          "id":"201",
+          "name":null,
+          "source":"66",
+          "target":"63"
+        },
+        {
+          "id":"195",
+          "name":null,
+          "source":"66",
+          "target":"64"
+        },
+        {
+          "id":"199",
+          "name":null,
+          "source":"66",
+          "target":"65"
+        },
+        {
+          "id":"204",
+          "name":null,
+          "source":"67",
+          "target":"57"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"68",
+          "target":"11"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"68",
+          "target":"24"
+        },
+        {
+          "id":"205",
+          "name":null,
+          "source":"68",
+          "target":"25"
+        },
+        {
+          "id":"208",
+          "name":null,
+          "source":"68",
+          "target":"27"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"68",
+          "target":"41"
+        },
+        {
+          "id":"209",
+          "name":null,
+          "source":"68",
+          "target":"48"
+        },
+        {
+          "id":"213",
+          "name":null,
+          "source":"69",
+          "target":"11"
+        },
+        {
+          "id":"214",
+          "name":null,
+          "source":"69",
+          "target":"24"
+        },
+        {
+          "id":"211",
+          "name":null,
+          "source":"69",
+          "target":"25"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"69",
+          "target":"27"
+        },
+        {
+          "id":"217",
+          "name":null,
+          "source":"69",
+          "target":"41"
+        },
+        {
+          "id":"216",
+          "name":null,
+          "source":"69",
+          "target":"48"
+        },
+        {
+          "id":"212",
+          "name":null,
+          "source":"69",
+          "target":"68"
+        },
+        {
+          "id":"221",
+          "name":null,
+          "source":"70",
+          "target":"11"
+        },
+        {
+          "id":"222",
+          "name":null,
+          "source":"70",
+          "target":"24"
+        },
+        {
+          "id":"218",
+          "name":null,
+          "source":"70",
+          "target":"25"
+        },
+        {
+          "id":"223",
+          "name":null,
+          "source":"70",
+          "target":"27"
+        },
+        {
+          "id":"224",
+          "name":null,
+          "source":"70",
+          "target":"41"
+        },
+        {
+          "id":"225",
+          "name":null,
+          "source":"70",
+          "target":"58"
+        },
+        {
+          "id":"220",
+          "name":null,
+          "source":"70",
+          "target":"68"
+        },
+        {
+          "id":"219",
+          "name":null,
+          "source":"70",
+          "target":"69"
+        },
+        {
+          "id":"230",
+          "name":null,
+          "source":"71",
+          "target":"11"
+        },
+        {
+          "id":"233",
+          "name":null,
+          "source":"71",
+          "target":"25"
+        },
+        {
+          "id":"226",
+          "name":null,
+          "source":"71",
+          "target":"27"
+        },
+        {
+          "id":"232",
+          "name":null,
+          "source":"71",
+          "target":"41"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"71",
+          "target":"48"
+        },
+        {
+          "id":"228",
+          "name":null,
+          "source":"71",
+          "target":"68"
+        },
+        {
+          "id":"227",
+          "name":null,
+          "source":"71",
+          "target":"69"
+        },
+        {
+          "id":"229",
+          "name":null,
+          "source":"71",
+          "target":"70"
+        },
+        {
+          "id":"236",
+          "name":null,
+          "source":"72",
+          "target":"11"
+        },
+        {
+          "id":"234",
+          "name":null,
+          "source":"72",
+          "target":"26"
+        },
+        {
+          "id":"235",
+          "name":null,
+          "source":"72",
+          "target":"27"
+        },
+        {
+          "id":"237",
+          "name":null,
+          "source":"73",
+          "target":"48"
+        },
+        {
+          "id":"238",
+          "name":null,
+          "source":"74",
+          "target":"48"
+        },
+        {
+          "id":"239",
+          "name":null,
+          "source":"74",
+          "target":"73"
+        },
+        {
+          "id":"242",
+          "name":null,
+          "source":"75",
+          "target":"25"
+        },
+        {
+          "id":"244",
+          "name":null,
+          "source":"75",
+          "target":"41"
+        },
+        {
+          "id":null,
+          "name":null,
+          "source":"75",
+          "target":"48"
+        },
+        {
+          "id":"241",
+          "name":null,
+          "source":"75",
+          "target":"68"
+        },
+        {
+          "id":"240",
+          "name":null,
+          "source":"75",
+          "target":"69"
+        },
+        {
+          "id":"245",
+          "name":null,
+          "source":"75",
+          "target":"70"
+        },
+        {
+          "id":"246",
+          "name":null,
+          "source":"75",
+          "target":"71"
+        },
+        {
+          "id":"252",
+          "name":null,
+          "source":"76",
+          "target":"48"
+        },
+        {
+          "id":"253",
+          "name":null,
+          "source":"76",
+          "target":"58"
+        },
+        {
+          "id":"251",
+          "name":null,
+          "source":"76",
+          "target":"62"
+        },
+        {
+          "id":"250",
+          "name":null,
+          "source":"76",
+          "target":"63"
+        },
+        {
+          "id":"247",
+          "name":null,
+          "source":"76",
+          "target":"64"
+        },
+        {
+          "id":"248",
+          "name":null,
+          "source":"76",
+          "target":"65"
+        },
+        {
+          "id":"249",
+          "name":null,
+          "source":"76",
+          "target":"66"
+        }
+      ],
+      "categories":[
+        {
+          "name":"类目0"
+        },
+        {
+          "name":"类目1"
+        },
+        {
+          "name":"类目2"
+        },
+        {
+          "name":"类目3"
+        },
+        {
+          "name":"类目4"
+        },
+        {
+          "name":"类目5"
+        },
+        {
+          "name":"类目6"
+        },
+        {
+          "name":"类目7"
+        },
+        {
+          "name":"类目8"
+        }
+      ],
+      "roam":true,
+      "label":{
+        "normal":{
+          "position":"right"
+        }
+      },
+      "lineStyle":{
+        "normal":{
+          "curveness":0.3
+        }
+      }
+    }
+  ]
+};
\ No newline at end of file
diff --git a/asset/theme/tool/option/map.js b/asset/theme/tool/option/map.js
new file mode 100644
index 0000000..07a29ee
--- /dev/null
+++ b/asset/theme/tool/option/map.js
@@ -0,0 +1,122 @@
+module.exports = {
+    visualMap: {
+        show: true,
+        min: 0,
+        max: 1500,
+        right: 50,
+        top: 'middle',
+        text:['高','低']
+        // orient: 'horizontal'
+    },
+    selectedMode: 'single',
+    series : [
+        {
+            name: 'iphone3',
+            type: 'map',
+            map: 'china',
+            showLegendSymbol: true,
+            label: {
+                normal: {
+                    show: false
+                },
+                emphasis: {
+                    show: false
+                }
+            },
+            data:[
+                {name: '北京',value: 500},
+                {name: '天津',value: 500},
+                {name: '上海',value: 500},
+                {name: '重庆',value: 500},
+                {name: '河北',value: 500},
+                {name: '河南',value: 500},
+                {name: '云南',value: 500},
+                {name: '辽宁',value: 500},
+                {name: '黑龙江',value: 500},
+                {name: '湖南',value: 500},
+                {name: '安徽',value: 500},
+                {name: '山东',value: 500},
+                {name: '新疆',value: 500},
+                {name: '江苏',value: 500},
+                {name: '浙江',value: 500},
+                {name: '江西',value: 500},
+                {name: '湖北',value: 500},
+                {name: '广西',value: 500},
+                {name: '甘肃',value: 500},
+                {name: '山西',value: 500},
+                {name: '内蒙古',value: 500},
+                {name: '陕西',value: 500},
+                {name: '吉林',value: 500},
+                {name: '福建',value: 500},
+                {name: '贵州',value: 500},
+                {name: '广东',value: 500},
+                {name: '青海',value: 500},
+                {name: '西藏',value: 500},
+                {name: '四川',value: 500},
+                {name: '宁夏',value: 500},
+                {name: '海南',value: 500},
+                {name: '台湾',value: 500},
+                {name: '香港',value: 500},
+                {name: '澳门',value: 500}
+            ]
+        },
+        {
+            name: 'iphone4',
+            type: 'map',
+            mapType: 'china',
+            showLegendSymbol: true,
+            label: {
+                normal: {
+                    show: false
+                },
+                emphasis: {
+                    show: false
+                }
+            },
+            data:[
+                {name: '北京',value: 500},
+                {name: '天津',value: 500},
+                {name: '上海',value: 500},
+                {name: '重庆',value: 500},
+                {name: '河北',value: 500},
+                {name: '安徽',value: 500},
+                {name: '新疆',value: 500},
+                {name: '浙江',value: 500},
+                {name: '江西',value: 500},
+                {name: '山西',value: 500},
+                {name: '内蒙古',value: 500},
+                {name: '吉林',value: 500},
+                {name: '福建',value: 500},
+                {name: '广东',value: 500},
+                {name: '西藏',value: 500},
+                {name: '四川',value: 500},
+                {name: '宁夏',value: 500},
+                {name: '香港',value: 500},
+                {name: '澳门',value: 500}
+            ]
+        },
+        {
+            name: 'iphone5',
+            type: 'map',
+            mapType: 'china',
+            showLegendSymbol: true,
+            label: {
+                normal: {
+                    show: false
+                },
+                emphasis: {
+                    show: false
+                }
+            },
+            data:[
+                {name: '北京',value: 500},
+                {name: '天津',value: 500},
+                {name: '上海',value: 500},
+                {name: '广东',value: 500},
+                {name: '台湾',value: 500},
+                {name: '香港',value: 500},
+                {name: '澳门',value: 500}
+            ]
+        }
+    ]
+};
\ No newline at end of file
diff --git a/asset/theme/tool/option/pie.js b/asset/theme/tool/option/pie.js
new file mode 100644
index 0000000..e5ba9bc
--- /dev/null
+++ b/asset/theme/tool/option/pie.js
@@ -0,0 +1,72 @@
+module.exports = {
+    legend: {
+        bottom: '5%',
+        data: ['rose1', 'rose2', 'rose3', 'rose4']
+    },
+    series : [
+        {
+            name:'半径模式',
+            type:'pie',
+            radius : [20, 80],
+            center : ['25%', 110],
+            label: {
+                normal: {
+                    show: false
+                },
+                emphasis: {
+                    show: true
+                }
+            },
+            lableLine: {
+                normal: {
+                    show: false
+                },
+                emphasis: {
+                    show: true
+                }
+            },
+            data:[
+                {value:10, name:'rose1'},
+                {value:5, name:'rose2'},
+                {value:15, name:'rose3'},
+                {value:25, name:'rose4'},
+                {value:20, name:'rose5'},
+                {value:35, name:'rose6'},
+                {value:30, name:'rose7'},
+                {value:40, name:'rose8'}
+            ]
+        },
+        {
+            name:'面积模式',
+            type:'pie',
+            radius : [30, 80],
+            center : ['75%', 110],
+            roseType : 'area',
+            labelLine: {
+                normal: {
+                    length: 5
+                }
+            },
+            data:[
+                {value:10, name:'rose1'},
+                {value:5, name:'rose2'},
+                {value:15, name:'rose3'},
+                {value:25, name:'rose4'},
+                {value:20, name:'rose5'},
+                {value:35, name:'rose6'},
+                {value:30, name:'rose7'},
+                {value:40, name:'rose8'}
+            ]
+        },
+        {
+            name:'仪表盘',
+            type:'gauge',
+            radius : 100,
+            center : ['50%', 280],
+            detail : {formatter:'{value}%'},
+            data:[
+                {value:50, name:'Gauge'}
+            ]
+        }
+    ]
+};
diff --git a/asset/theme/tool/option/scatter.js b/asset/theme/tool/option/scatter.js
new file mode 100644
index 0000000..3255985
--- /dev/null
+++ b/asset/theme/tool/option/scatter.js
@@ -0,0 +1,182 @@
+module.exports = {
+    timeline: {
+        left: '2%',
+        right: '2%',
+        data: [
+            '2002-01-01','2003-01-01','2004-01-01',
+            {
+                value: '2005-01-01',
+                symbol: 'diamond',
+                symbolSize: 16
+            },
+            '2006-01-01', '2007-01-01','2008-01-01','2009-01-01','2010-01-01',
+            {
+                value: '2011-01-01',
+                symbol: 'diamond',
+                symbolSize: 18
+            }
+        ],
+        label: {
+            formatter : function(s) {
+                return (new Date(s)).getFullYear();
+            }
+        }
+    },
+    options: [{
+        grid: {
+            left: '13%',
+            right: '5%',
+            bottom: '20%'
+        },
+        xAxis: {
+            type : 'value',
+            scale:true,
+            axisLabel : {
+                formatter: '{value} cm'
+            }
+        },
+        yAxis: {
+            type : 'value',
+            scale:true,
+            axisLabel : {
+                formatter: '{value} kg'
+            }
+        },
+        series : [
+            {
+                name:'女性',
+                type:'scatter',
+                data: [[161.2, 51.6], [167.5, 59.0], [159.5, 49.2], [157.0, 63.0], [155.8, 53.6],
+                    [170.0, 59.0], [159.1, 47.6], [166.0, 69.8], [176.2, 66.8], [160.2, 75.2],
+                    [172.5, 55.2], [170.9, 54.2], [172.9, 62.5], [153.4, 42.0], [160.0, 50.0],
+                    [147.2, 49.8], [168.2, 49.2], [175.0, 73.2], [157.0, 47.8], [167.6, 68.8],
+                    [159.5, 50.6], [175.0, 82.5], [166.8, 57.2], [176.5, 87.8], [170.2, 72.8],
+                    [174.0, 54.5], [173.0, 59.8], [179.9, 67.3], [170.5, 67.8], [160.0, 47.0],
+                    [154.4, 46.2], [162.0, 55.0], [176.5, 83.0], [160.0, 54.4], [152.0, 45.8],
+                    [162.1, 53.6], [170.0, 73.2], [160.2, 52.1], [161.3, 67.9], [166.4, 56.6],
+                    [168.9, 62.3], [163.8, 58.5], [167.6, 54.5], [160.0, 50.2], [161.3, 60.3],
+                    [167.6, 58.3], [165.1, 56.2], [160.0, 50.2], [170.0, 72.9], [157.5, 59.8],
+                    [167.6, 61.0], [160.7, 69.1], [163.2, 55.9], [152.4, 46.5], [157.5, 54.3],
+                    [168.3, 54.8], [180.3, 60.7], [165.5, 60.0], [165.0, 62.0], [164.5, 60.3],
+                    [156.0, 52.7], [160.0, 74.3], [163.0, 62.0], [165.7, 73.1], [161.0, 80.0],
+                    [162.0, 54.7], [166.0, 53.2], [174.0, 75.7], [172.7, 61.1], [167.6, 55.7],
+                    [151.1, 48.7], [164.5, 52.3], [163.5, 50.0], [152.0, 59.3], [169.0, 62.5],
+                    [164.0, 55.7], [161.2, 54.8], [155.0, 45.9], [170.0, 70.6], [176.2, 67.2],
+                    [170.0, 69.4], [162.5, 58.2], [170.3, 64.8], [164.1, 71.6], [169.5, 52.8],
+                    [163.2, 59.8], [154.5, 49.0], [159.8, 50.0], [173.2, 69.2], [170.0, 55.9],
+                    [161.4, 63.4], [169.0, 58.2], [166.2, 58.6], [159.4, 45.7], [162.5, 52.2],
+                    [159.0, 48.6], [162.8, 57.8], [159.0, 55.6], [179.8, 66.8], [162.9, 59.4],
+                    [161.0, 53.6], [151.1, 73.2], [168.2, 53.4], [168.9, 69.0], [173.2, 58.4],
+                    [171.8, 56.2], [178.0, 70.6], [164.3, 59.8], [163.0, 72.0], [168.5, 65.2],
+                    [166.8, 56.6], [172.7, 105.2], [163.5, 51.8], [169.4, 63.4], [167.8, 59.0],
+                    [159.5, 47.6], [167.6, 63.0], [161.2, 55.2], [160.0, 45.0], [163.2, 54.0],
+                    [162.2, 50.2], [161.3, 60.2], [149.5, 44.8], [157.5, 58.8], [163.2, 56.4],
+                    [172.7, 62.0], [155.0, 49.2], [156.5, 67.2], [164.0, 53.8], [160.9, 54.4],
+                    [162.8, 58.0], [167.0, 59.8], [160.0, 54.8], [160.0, 43.2], [168.9, 60.5],
+                    [158.2, 46.4], [156.0, 64.4], [160.0, 48.8], [167.1, 62.2], [158.0, 55.5],
+                    [167.6, 57.8], [156.0, 54.6], [162.1, 59.2], [173.4, 52.7], [159.8, 53.2],
+                    [170.5, 64.5], [159.2, 51.8], [157.5, 56.0], [161.3, 63.6], [162.6, 63.2],
+                    [160.0, 59.5], [168.9, 56.8], [165.1, 64.1], [162.6, 50.0], [165.1, 72.3],
+                    [166.4, 55.0], [160.0, 55.9], [152.4, 60.4], [170.2, 69.1], [162.6, 84.5],
+                    [170.2, 55.9], [158.8, 55.5], [172.7, 69.5], [167.6, 76.4], [162.6, 61.4],
+                    [167.6, 65.9], [156.2, 58.6], [175.2, 66.8], [172.1, 56.6], [162.6, 58.6],
+                    [160.0, 55.9], [165.1, 59.1], [182.9, 81.8], [166.4, 70.7], [165.1, 56.8],
+                    [177.8, 60.0], [165.1, 58.2], [175.3, 72.7], [154.9, 54.1], [158.8, 49.1],
+                    [172.7, 75.9], [168.9, 55.0], [161.3, 57.3], [167.6, 55.0], [165.1, 65.5],
+                    [175.3, 65.5], [157.5, 48.6], [163.8, 58.6], [167.6, 63.6], [165.1, 55.2],
+                    [165.1, 62.7], [168.9, 56.6], [162.6, 53.9], [164.5, 63.2], [176.5, 73.6],
+                    [168.9, 62.0], [175.3, 63.6], [159.4, 53.2], [160.0, 53.4], [170.2, 55.0],
+                    [162.6, 70.5], [167.6, 54.5], [162.6, 54.5], [160.7, 55.9], [160.0, 59.0],
+                    [157.5, 63.6], [162.6, 54.5], [152.4, 47.3], [170.2, 67.7], [165.1, 80.9],
+                    [172.7, 70.5], [165.1, 60.9], [170.2, 63.6], [170.2, 54.5], [170.2, 59.1],
+                    [161.3, 70.5], [167.6, 52.7], [167.6, 62.7], [165.1, 86.3], [162.6, 66.4],
+                    [152.4, 67.3], [168.9, 63.0], [170.2, 73.6], [175.2, 62.3], [175.2, 57.7],
+                    [160.0, 55.4], [165.1, 104.1], [174.0, 55.5], [170.2, 77.3], [160.0, 80.5],
+                    [167.6, 64.5], [167.6, 72.3], [167.6, 61.4], [154.9, 58.2], [162.6, 81.8],
+                    [175.3, 63.6], [171.4, 53.4], [157.5, 54.5], [165.1, 53.6], [160.0, 60.0],
+                    [174.0, 73.6], [162.6, 61.4], [174.0, 55.5], [162.6, 63.6], [161.3, 60.9],
+                    [156.2, 60.0], [149.9, 46.8], [169.5, 57.3], [160.0, 64.1], [175.3, 63.6],
+                    [169.5, 67.3], [160.0, 75.5], [172.7, 68.2], [162.6, 61.4], [157.5, 76.8],
+                    [176.5, 71.8], [164.4, 55.5], [160.7, 48.6], [174.0, 66.4], [163.8, 67.3]
+                ],
+                markPoint : {
+                    data : [
+                        {type : 'max', name: '最大值'},
+                        {type : 'min', name: '最小值'}
+                    ]
+                },
+                markLine : {
+                    data : [
+                        {type : 'average', name: '平均值'}
+                    ]
+                }
+            },
+            {
+                name:'男性',
+                type:'scatter',
+                data: [[174.0, 65.6], [175.3, 71.8], [193.5, 80.7], [186.5, 72.6], [187.2, 78.8],
+                    [181.5, 74.8], [184.0, 86.4], [184.5, 78.4], [175.0, 62.0], [184.0, 81.6],
+                    [180.0, 76.6], [177.8, 83.6], [192.0, 90.0], [176.0, 74.6], [174.0, 71.0],
+                    [184.0, 79.6], [192.7, 93.8], [171.5, 70.0], [173.0, 72.4], [176.0, 85.9],
+                    [176.0, 78.8], [180.5, 77.8], [172.7, 66.2], [176.0, 86.4], [173.5, 81.8],
+                    [178.0, 89.6], [180.3, 82.8], [180.3, 76.4], [164.5, 63.2], [173.0, 60.9],
+                    [183.5, 74.8], [175.5, 70.0], [188.0, 72.4], [189.2, 84.1], [172.8, 69.1],
+                    [170.0, 59.5], [182.0, 67.2], [170.0, 61.3], [177.8, 68.6], [184.2, 80.1],
+                    [186.7, 87.8], [171.4, 84.7], [172.7, 73.4], [175.3, 72.1], [180.3, 82.6],
+                    [182.9, 88.7], [188.0, 84.1], [177.2, 94.1], [172.1, 74.9], [167.0, 59.1],
+                    [169.5, 75.6], [174.0, 86.2], [172.7, 75.3], [182.2, 87.1], [164.1, 55.2],
+                    [163.0, 57.0], [171.5, 61.4], [184.2, 76.8], [174.0, 86.8], [174.0, 72.2],
+                    [177.0, 71.6], [186.0, 84.8], [167.0, 68.2], [171.8, 66.1], [182.0, 72.0],
+                    [167.0, 64.6], [177.8, 74.8], [164.5, 70.0], [192.0, 101.6], [175.5, 63.2],
+                    [171.2, 79.1], [181.6, 78.9], [167.4, 67.7], [181.1, 66.0], [177.0, 68.2],
+                    [174.5, 63.9], [177.5, 72.0], [170.5, 56.8], [182.4, 74.5], [197.1, 90.9],
+                    [180.1, 93.0], [175.5, 80.9], [180.6, 72.7], [184.4, 68.0], [175.5, 70.9],
+                    [180.6, 72.5], [177.0, 72.5], [177.1, 83.4], [181.6, 75.5], [176.5, 73.0],
+                    [175.0, 70.2], [174.0, 73.4], [165.1, 70.5], [177.0, 68.9], [192.0, 102.3],
+                    [176.5, 68.4], [169.4, 65.9], [182.1, 75.7], [179.8, 84.5], [175.3, 87.7],
+                    [184.9, 86.4], [177.3, 73.2], [167.4, 53.9], [178.1, 72.0], [168.9, 55.5],
+                    [157.2, 58.4], [180.3, 83.2], [170.2, 72.7], [177.8, 64.1], [172.7, 72.3],
+                    [165.1, 65.0], [186.7, 86.4], [165.1, 65.0], [174.0, 88.6], [175.3, 84.1],
+                    [185.4, 66.8], [177.8, 75.5], [180.3, 93.2], [180.3, 82.7], [177.8, 58.0],
+                    [177.8, 79.5], [177.8, 78.6], [177.8, 71.8], [177.8, 116.4], [163.8, 72.2],
+                    [188.0, 83.6], [198.1, 85.5], [175.3, 90.9], [166.4, 85.9], [190.5, 89.1],
+                    [166.4, 75.0], [177.8, 77.7], [179.7, 86.4], [172.7, 90.9], [190.5, 73.6],
+                    [185.4, 76.4], [168.9, 69.1], [167.6, 84.5], [175.3, 64.5], [170.2, 69.1],
+                    [190.5, 108.6], [177.8, 86.4], [190.5, 80.9], [177.8, 87.7], [184.2, 94.5],
+                    [176.5, 80.2], [177.8, 72.0], [180.3, 71.4], [171.4, 72.7], [172.7, 84.1],
+                    [172.7, 76.8], [177.8, 63.6], [177.8, 80.9], [182.9, 80.9], [170.2, 85.5],
+                    [167.6, 68.6], [175.3, 67.7], [165.1, 66.4], [185.4, 102.3], [181.6, 70.5],
+                    [172.7, 95.9], [190.5, 84.1], [179.1, 87.3], [175.3, 71.8], [170.2, 65.9],
+                    [193.0, 95.9], [171.4, 91.4], [177.8, 81.8], [177.8, 96.8], [167.6, 69.1],
+                    [167.6, 82.7], [180.3, 75.5], [182.9, 79.5], [176.5, 73.6], [186.7, 91.8],
+                    [188.0, 84.1], [188.0, 85.9], [177.8, 81.8], [174.0, 82.5], [177.8, 80.5],
+                    [171.4, 70.0], [185.4, 81.8], [185.4, 84.1], [188.0, 90.5], [188.0, 91.4],
+                    [182.9, 89.1], [176.5, 85.0], [175.3, 69.1], [175.3, 73.6], [188.0, 80.5],
+                    [188.0, 82.7], [175.3, 86.4], [170.5, 67.7], [179.1, 92.7], [177.8, 93.6],
+                    [175.3, 70.9], [182.9, 75.0], [170.8, 93.2], [188.0, 93.2], [180.3, 77.7],
+                    [177.8, 61.4], [185.4, 94.1], [168.9, 75.0], [185.4, 83.6], [180.3, 85.5],
+                    [174.0, 73.9], [167.6, 66.8], [182.9, 87.3], [160.0, 72.3], [180.3, 88.6],
+                    [167.6, 75.5], [186.7, 101.4], [175.3, 91.1], [175.3, 67.3], [175.9, 77.7],
+                    [175.3, 81.8], [179.1, 75.5], [181.6, 84.5], [177.8, 76.6], [182.9, 85.0],
+                    [177.8, 102.5], [184.2, 77.3], [179.1, 71.8], [176.5, 87.9], [188.0, 94.3],
+                    [174.0, 70.9], [167.6, 64.5], [170.2, 77.3], [167.6, 72.3], [188.0, 87.3],
+                    [174.0, 80.0], [176.5, 82.3], [180.3, 73.6], [167.6, 74.1], [188.0, 85.9],
+                    [180.3, 73.2], [167.6, 76.3], [183.0, 65.9], [183.0, 90.9], [179.1, 89.1],
+                    [170.2, 62.3], [177.8, 82.7], [179.1, 79.1], [190.5, 98.2], [177.8, 84.1],
+                    [180.3, 83.2], [180.3, 83.2]
+                ],
+                markPoint : {
+                    data : [
+                        {type : 'max', name: '最大值'},
+                        {type : 'min', name: '最小值'}
+                    ]
+                },
+                markLine : {
+                    data : [
+                        {type : 'average', name: '平均值'}
+                    ]
+                }
+            }
+        ]
+    }]
+};
diff --git a/asset/theme/tool/thumb.js b/asset/theme/tool/thumb.js
new file mode 100644
index 0000000..710b580
--- /dev/null
+++ b/asset/theme/tool/thumb.js
@@ -0,0 +1,63 @@
+var glob = require('glob');
+var Canvas = require('canvas');
+var echarts = require('echarts');
+var fs = require('fs');
+var path = require('path');
+
+require('echarts/map/js/china');
+
+var options = {
+    bar: require('./option/bar'),
+    area: require('./option/area'),
+    scatter: require('./option/scatter'),
+    pie: require('./option/pie'),
+    graph: require('./option/graph'),
+    map: require('./option/map')
+};
+var WIDTH = 600;
+var HEIGHT = 400;
+echarts.setCanvasCreator(function () {
+    return createCanvas();
+});
+
+var font = new Canvas.Font('Helvetica', '/System/Library/Fonts/Helvetica.dfont');
+font.addFace('/System/Library/Fonts/Helvetica.dfont', 'bolder');
+
+glob('../*.js', function (err, themePathList) {
+    themePathList.forEach(function (themePath) {
+        var themeName = path.basename(themePath, '.js');
+        var canvasList = [];
+        require(themePath);
+        echarts.util.each(options, function (option) {
+            var canvas = createCanvas();
+            var chart = echarts.init(canvas, themeName);
+            var optionNeedFix = option;
+            if (option.options) {
+                optionNeedFix = option.options[0];
+            }
+            canvasList.push(canvas);
+            optionNeedFix.animation = false;
+            optionNeedFix.textStyle = {
+                fontFamily: 'Helvetica',
+                fontSize: 12
+            };
+            chart.setOption(option);
+            chart.dispose();
+        });
+
+        var columnCount = 2;
+        var outputCanvas = new Canvas(WIDTH * columnCount, HEIGHT * canvasList.length / columnCount);
+        var outputCtx = outputCanvas.getContext('2d');
+        canvasList.forEach(function (canvas, idx) {
+            outputCtx.drawImage(canvas, idx % columnCount * WIDTH, Math.floor(idx / columnCount) * HEIGHT, WIDTH, HEIGHT);
+        });
+
+        fs.writeFileSync('../thumb/' + themeName + '.png', outputCanvas.toBuffer());
+    });
+});
+function createCanvas() {
+    var canvas = new Canvas(WIDTH, HEIGHT);
+    var ctx = canvas.getContext('2d');
+    ctx.addFont(font);
+    return canvas;
+}
\ No newline at end of file
diff --git a/asset/theme/vintage.js b/asset/theme/vintage.js
new file mode 100644
index 0000000..bcea5ad
--- /dev/null
+++ b/asset/theme/vintage.js
@@ -0,0 +1,30 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    };
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    var colorPalette = ['#d87c7c','#919e8b', '#d7ab82',  '#6e7074','#61a0a8','#efa18d', '#787464', '#cc7e63', '#724e58', '#4b565b'];
+    echarts.registerTheme('vintage', {
+        color: colorPalette,
+        backgroundColor: '#fef8ef',
+        graph: {
+            color: colorPalette
+        }
+    });
+}));
\ No newline at end of file
diff --git a/builder/build.js b/builder/build.js
new file mode 100644
index 0000000..f0022fb
--- /dev/null
+++ b/builder/build.js
@@ -0,0 +1,272 @@
+/* global BUILD_CONFIG, UglifyJS, ActiveXObject */
+define(function (require) {
+
+    // var mangleString = require('./mangleString');
+    var saveAs = require('./lib/FileSaver');
+    var rollup = require('rollup');
+
+    var TOP_MODULE_NAME = 'topModuleInRequireES';
+
+    var $log = document.getElementById('log');
+
+    var baseURL = dir(location.pathname);
+    var suffix = BUILD_CONFIG.version === 3 ? '3' : '';
+    var pathsConfig = {
+        'echarts/src': './src/echarts' + suffix,
+        'zrender/src': './src/zrender' + suffix
+    };
+    var urlArgs = '__v__=' + (+new Date());
+
+    var topCode = [
+        'import "echarts/src/config";',
+        'export * from "echarts/src/echarts";'
+    ];
+
+    if (BUILD_CONFIG.api) {
+        topCode.push('export * from "echarts/src/export";');
+    }
+
+    // Including charts
+    (BUILD_CONFIG.charts || '').split(',').forEach(function (chart) {
+        chart && topCode.push('import "echarts/src/chart/' + chart + '";');
+    });
+
+    if (topCode.indexOf('echarts/src/chart/scatter') >= 0) {
+        topCode.push('import "echarts/src/chart/effectScatter"');
+    }
+
+    // Including components
+    (BUILD_CONFIG.components || '').split(',').forEach(function (component) {
+        component && topCode.push('import "echarts/src/component/' + component + '";');
+    });
+
+    if (BUILD_CONFIG.vml) {
+        topCode.push('import "zrender/src/vml/vml";');
+    }
+    if (BUILD_CONFIG.svg) {
+        topCode.push('import "zrender/src/svg/svg";');
+    }
+
+    // Always require log and time axis
+    topCode.push(
+        'import "echarts/src/scale/Time";',
+        'import "echarts/src/scale/Log";'
+    );
+
+    // Loading scripts and build
+    rollup.rollup({
+        input: TOP_MODULE_NAME,
+        legacy: true,
+        plugins: [{
+            resolveId: function (importee, importor) {
+                if (importee === TOP_MODULE_NAME) {
+                    return importee;
+                }
+                // console.log('resolveid', importee, importor);
+                return getAbsolutePath(
+                    importee,
+                    importor !== TOP_MODULE_NAME ? importor : null
+                );
+            },
+            load: function (path) {
+                if (path === TOP_MODULE_NAME) {
+                    return topCode.join('\n');
+                }
+                return ajax(location.origin + path)
+                    .then(function (content) {
+                        builderLog('Loaded module: "' + path + '"');
+                        return content;
+                    });
+            }
+        }]
+    }).then(function (bundle) {
+        return bundle.generate({
+            name: 'echarts',
+            format: 'umd',
+            legacy: true
+        });
+    }).then(function (result) {
+        var code = result.code;
+
+        if (!BUILD_CONFIG.source) {
+            builderLog('<br />Compressing code...');
+            // code = mangleString(code);
+            // Otherwise uglify will throw error.
+            code = code.replace(/\t/g, '    ');
+            code = jsCompress(code);
+        }
+
+        download(code);
+
+        builderLog('<br />Completed');
+
+        document.getElementById('tip').innerHTML = 'OK';
+    });
+
+    function download(code) {
+        try {
+            var blob = new Blob([code], {
+                type: 'text/plain;charset=utf8'
+            });
+
+            // var URL = window.URL || window.webkitURL;
+            // var scriptUrl = URL.createObjectURL(blob);
+
+            // URL.revokeObjectURL(blob);
+
+            // window.open(scriptUrl);
+            // return;
+
+            var fileName = ['echarts'];
+            if (BUILD_CONFIG.amd) {
+                fileName.push('amd');
+            }
+            if (!BUILD_CONFIG.source) {
+                fileName.push('min');
+            }
+            fileName.push('js');
+
+            saveAs(blob, fileName.join('.'));
+        }
+        catch (e) {
+            console.error(e);
+            window.open('data:text/plain;charset=utf-8,' + encodeURIComponent(code));
+        }
+    }
+
+    function builderLog(msg) {
+        $log.innerHTML += msg + '<br />';
+        $log.scrollTop = $log.scrollHeight;
+    }
+
+    function jsCompress(source) {
+        var ast = UglifyJS.parse(source);
+        /* jshint camelcase: false */
+        // compressor needs figure_out_scope too
+        ast.figure_out_scope();
+        ast = ast.transform(UglifyJS.Compressor());
+
+        // need to figure out scope again so mangler works optimally
+        ast.figure_out_scope();
+        ast.compute_char_frequency();
+        ast.mangle_names();
+
+        return ast.print_to_string();
+    }
+
+    // Get absolute path. `basePath` can be omitted if moduleId is absolute.
+    function getAbsolutePath(moduleId, basePath) {
+        moduleId = addExt(moduleId);
+
+        for (var path in pathsConfig) {
+            if (pathsConfig.hasOwnProperty(path)) {
+                if (moduleId.indexOf(path) === 0) {
+                    moduleId = moduleId.replace(path, pathsConfig[path]);
+                    return resolve(baseURL, moduleId);
+                }
+            }
+        }
+
+        if (basePath) {
+            moduleId = resolve(dir(basePath), moduleId);
+        }
+
+        if (moduleId.charAt(0) !== '/') {
+            throw new Error('"' + moduleId + '" can not be found.');
+        }
+
+        return moduleId;
+    }
+
+    function addExt(moduleId) {
+        if (moduleId.split('/').pop().indexOf('.') < 0) {
+            moduleId += '.js';
+        }
+        return moduleId;
+    }
+
+    function ajax(toUrl) {
+        toUrl += '?' + urlArgs;
+
+        return new Promise(function (promiseResolve, promiseReject) {
+            var xhr = window.XMLHttpRequest
+                ? new XMLHttpRequest()
+                : new ActiveXObject('Microsoft.XMLHTTP');
+
+            xhr.open('GET', toUrl, true);
+
+            xhr.onreadystatechange = function () {
+                if (xhr.readyState === 4) {
+                    (xhr.status >= 200 && xhr.status < 300)
+                        ? promiseResolve(xhr.responseText)
+                        : promiseReject({
+                            status: xhr.status,
+                            content: xhr.responseText
+                        });
+                    xhr.onreadystatechange = new Function();
+                    xhr = null;
+                }
+            };
+
+            xhr.send(null);
+        });
+    }
+
+    // Nodejs `path.resolve`.
+    function resolve() {
+        var resolvedPath = '';
+        var resolvedAbsolute;
+
+        for (var i = arguments.length - 1; i >= 0 && !resolvedAbsolute; i--) {
+            var path = arguments[i];
+            if (path) {
+                resolvedPath = path + '/' + resolvedPath;
+                resolvedAbsolute = path[0] === '/';
+            }
+        }
+
+        if (!resolvedAbsolute) {
+            throw new Error('At least one absolute path should be input.');
+        }
+
+        // Normalize the path
+        resolvedPath = normalizePathArray(resolvedPath.split('/'), false).join('/');
+
+        return '/' + resolvedPath;
+    }
+
+    // resolves . and .. elements in a path array with directory names there
+    // must be no slashes or device names (c:\) in the array
+    // (so also no leading and trailing slashes - it does not distinguish
+    // relative and absolute paths)
+    function normalizePathArray(parts, allowAboveRoot) {
+        var res = [];
+        for (var i = 0; i < parts.length; i++) {
+            var p = parts[i];
+
+            // ignore empty parts
+            if (!p || p === '.') {
+                continue;
+            }
+
+            if (p === '..') {
+                if (res.length && res[res.length - 1] !== '..') {
+                    res.pop();
+                } else if (allowAboveRoot) {
+                    res.push('..');
+                }
+            } else {
+                res.push(p);
+            }
+        }
+
+        return res;
+    }
+
+    function dir(path) {
+        if (path) {
+            return path.charAt(path.length - 1) === '/' ? path : resolve(path, '..');
+        }
+    }
+
+});
\ No newline at end of file
diff --git a/builder/chunk/amd.js b/builder/chunk/amd.js
new file mode 100644
index 0000000..807744b
--- /dev/null
+++ b/builder/chunk/amd.js
@@ -0,0 +1,127 @@
+var require, define;
+(function () {
+    var mods = {};
+
+    define = function (id, deps, factory) {
+        mods[id] = {
+            id: id,
+            deps: deps,
+            factory: factory,
+            defined: 0,
+            exports: {},
+            require: createRequire(id)
+        };
+    };
+
+    require = createRequire('');
+
+    function normalize(id, baseId) {
+        if (!baseId) {
+            return id;
+        }
+
+        if (id.indexOf('.') === 0) {
+            var basePath = baseId.split('/');
+            var namePath = id.split('/');
+            var baseLen = basePath.length - 1;
+            var nameLen = namePath.length;
+            var cutBaseTerms = 0;
+            var cutNameTerms = 0;
+
+            pathLoop: for (var i = 0; i < nameLen; i++) {
+                switch (namePath[i]) {
+                    case '..':
+                        if (cutBaseTerms < baseLen) {
+                            cutBaseTerms++;
+                            cutNameTerms++;
+                        }
+                        else {
+                            break pathLoop;
+                        }
+                        break;
+                    case '.':
+                        cutNameTerms++;
+                        break;
+                    default:
+                        break pathLoop;
+                }
+            }
+
+            basePath.length = baseLen - cutBaseTerms;
+            namePath = namePath.slice(cutNameTerms);
+
+            return basePath.concat(namePath).join('/');
+        }
+
+        return id;
+    }
+
+    function createRequire(baseId) {
+        var cacheMods = {};
+
+        function localRequire(id, callback) {
+            if (typeof id === 'string') {
+                var exports = cacheMods[id];
+                if (!exports) {
+                    exports = getModExports(normalize(id, baseId));
+                    cacheMods[id] = exports;
+                }
+
+                return exports;
+            }
+            else if (id instanceof Array) {
+                callback = callback || function () {};
+                callback.apply(this, getModsExports(id, callback, baseId));
+            }
+        };
+
+        return localRequire;
+    }
+
+    function getModsExports(ids, factory, baseId) {
+        var es = [];
+        var mod = mods[baseId];
+
+        for (var i = 0, l = Math.min(ids.length, factory.length); i < l; i++) {
+            var id = normalize(ids[i], baseId);
+            var arg;
+            switch (id) {
+                case 'require':
+                    arg = (mod && mod.require) || require;
+                    break;
+                case 'exports':
+                    arg = mod.exports;
+                    break;
+                case 'module':
+                    arg = mod;
+                    break;
+                default:
+                    arg = getModExports(id);
+            }
+            es.push(arg);
+        }
+
+        return es;
+    }
+
+    function getModExports(id) {
+        var mod = mods[id];
+        if (!mod) {
+            throw new Error('No ' + id);
+        }
+
+        if (!mod.defined) {
+            var factory = mod.factory;
+            var factoryReturn = factory.apply(
+                this,
+                getModsExports(mod.deps || [], factory, id)
+            );
+            if (typeof factoryReturn !== 'undefined') {
+                mod.exports = factoryReturn;
+            }
+            mod.defined = 1;
+        }
+
+        return mod.exports;
+    }
+}());
diff --git a/builder/chunk/end-3.js b/builder/chunk/end-3.js
new file mode 100644
index 0000000..a07bdda
--- /dev/null
+++ b/builder/chunk/end-3.js
@@ -0,0 +1,19 @@
+var echarts = require('echarts');
+
+echarts.graphic = require('echarts/util/graphic');
+echarts.number = require('echarts/util/number');
+echarts.format = require('echarts/util/format');
+
+/** for: ${charts} as ${chart} */
+require('${chart}');
+/** /for */
+/** for: ${components} as ${component} */
+require('${component}');
+/** /for */
+
+/** if: ${vml} */
+require('zrender/vml/vml');
+/** /if */
+
+return echarts;
+}));
\ No newline at end of file
diff --git a/builder/chunk/end.js b/builder/chunk/end.js
new file mode 100644
index 0000000..5e5ef51
--- /dev/null
+++ b/builder/chunk/end.js
@@ -0,0 +1,35 @@
+
+var zrender = require('zrender');
+zrender.tool = {
+    color: require('zrender/tool/color'),
+    math: require('zrender/tool/math'),
+    util: require('zrender/tool/util'),
+    vector: require('zrender/tool/vector'),
+    area: require('zrender/tool/area'),
+    event: require('zrender/tool/event')
+}
+
+zrender.animation = {
+    Animation: require('zrender/animation/Animation'),
+    Cip: require('zrender/animation/Clip'),
+    easing: require('zrender/animation/easing')
+}
+var echarts = require('echarts');
+echarts.config = require('echarts/config');
+
+/** if: ${hasMap} */
+echarts.util = {
+    mapData: {
+        params: require('echarts/util/mapData/params')
+    }
+}
+/** /if */
+/** for: ${charts} as ${chart} */
+require("${chart}");
+/** /for */
+_global['echarts'] = echarts;
+_global['zrender'] = zrender;
+
+return echarts;
+
+})(window);
diff --git a/builder/chunk/start-3.js b/builder/chunk/start-3.js
new file mode 100644
index 0000000..41790ef
--- /dev/null
+++ b/builder/chunk/start-3.js
@@ -0,0 +1,14 @@
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define([], factory);
+    } else if (typeof module === 'object' && module.exports) {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like environments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.echarts = factory();
+    }
+}(this, function () {
\ No newline at end of file
diff --git a/builder/chunk/start.js b/builder/chunk/start.js
new file mode 100644
index 0000000..0a3049b
--- /dev/null
+++ b/builder/chunk/start.js
@@ -0,0 +1 @@
+(function(_global){
diff --git a/builder/echarts.html b/builder/echarts.html
new file mode 100644
index 0000000..7c1851a
--- /dev/null
+++ b/builder/echarts.html
@@ -0,0 +1,70 @@
+<!Doctype html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <script src="lib/esl.js"></script>
+    <script src="lib/uglify.js"></script>
+    <script src="lib/escodegen.js"></script>
+
+    <style type="text/css">
+        body {
+            margin: 0;
+            text-align: center;
+        }
+        #log {
+            height: 500px;
+            overflow-y: scroll;
+
+            width: 600px;
+            text-align: left;
+            margin: 0 auto;
+
+            line-height: 18px;
+        }
+    </style>
+</head>
+<body>
+
+    <h1 id="tip">
+        Building ....
+    </h1>
+    <div id="log"></div>
+
+    <script>
+
+        var search = window.location.search;
+
+        var BUILD_CONFIG = {};
+        if (search) {
+            search = search.slice(search.indexOf('?') + 1);
+            var params = search.split('&');
+            for (var i = 0; i < params.length; i++) {
+                var keyValue = params[i].split('=');
+                var key = decodeURIComponent(keyValue[0]);
+                var value = decodeURIComponent(keyValue[1]);
+                BUILD_CONFIG[key.toLowerCase()] = parseURIValue(value);
+            }
+        }
+
+        BUILD_CONFIG.version = +BUILD_CONFIG.version || 2;
+
+        var postfix = BUILD_CONFIG.dev ? '-dev' : '';
+
+        require.config({
+            paths: {
+                'rollup': 'lib/rollup.browser',
+                'esprima': 'lib/esprima',
+                'estraverse': 'lib/estraverse'
+            },
+            urlArgs: 'v=4.2.1'
+        });
+
+        require(['build']);
+
+        function parseURIValue(value) { // for XSS
+            return value.replace(/[^0-9a-zA-Z-_,]/g, '');
+        }
+
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/builder/lib/FileSaver.js b/builder/lib/FileSaver.js
new file mode 100644
index 0000000..406e6d2
--- /dev/null
+++ b/builder/lib/FileSaver.js
@@ -0,0 +1,248 @@
+/* FileSaver.js
+ * A saveAs() FileSaver implementation.
+ * 2015-03-04
+ *
+ * By Eli Grey, http://eligrey.com
+ * License: X11/MIT
+ *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
+ */
+
+/*global self */
+/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
+
+var saveAs = saveAs
+  // IE 10+ (native saveAs)
+  || (typeof navigator !== "undefined" &&
+      navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))
+  // Everyone else
+  || (function(view) {
+    "use strict";
+    // IE <10 is explicitly unsupported
+    if (typeof navigator !== "undefined" &&
+        /MSIE [1-9]\./.test(navigator.userAgent)) {
+        return;
+    }
+    var
+          doc = view.document
+          // only get URL when necessary in case Blob.js hasn't overridden it yet
+        , get_URL = function() {
+            return view.URL || view.webkitURL || view;
+        }
+        , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
+        , can_use_save_link = "download" in save_link
+        , click = function(node) {
+            var event = doc.createEvent("MouseEvents");
+            event.initMouseEvent(
+                "click", true, false, view, 0, 0, 0, 0, 0
+                , false, false, false, false, 0, null
+            );
+            node.dispatchEvent(event);
+        }
+        , webkit_req_fs = view.webkitRequestFileSystem
+        , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
+        , throw_outside = function(ex) {
+            (view.setImmediate || view.setTimeout)(function() {
+                throw ex;
+            }, 0);
+        }
+        , force_saveable_type = "application/octet-stream"
+        , fs_min_size = 0
+        // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
+        // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
+        // for the reasoning behind the timeout and revocation flow
+        , arbitrary_revoke_timeout = 500 // in ms
+        , revoke = function(file) {
+            var revoker = function() {
+                if (typeof file === "string") { // file is an object URL
+                    get_URL().revokeObjectURL(file);
+                } else { // file is a File
+                    file.remove();
+                }
+            };
+            if (view.chrome) {
+                revoker();
+            } else {
+                setTimeout(revoker, arbitrary_revoke_timeout);
+            }
+        }
+        , dispatch = function(filesaver, event_types, event) {
+            event_types = [].concat(event_types);
+            var i = event_types.length;
+            while (i--) {
+                var listener = filesaver["on" + event_types[i]];
+                if (typeof listener === "function") {
+                    try {
+                        listener.call(filesaver, event || filesaver);
+                    } catch (ex) {
+                        throw_outside(ex);
+                    }
+                }
+            }
+        }
+        , FileSaver = function(blob, name) {
+            // First try a.download, then web filesystem, then object URLs
+            var
+                  filesaver = this
+                , type = blob.type
+                , blob_changed = false
+                , object_url
+                , target_view
+                , dispatch_all = function() {
+                    dispatch(filesaver, "writestart progress write writeend".split(" "));
+                }
+                // on any filesys errors revert to saving with object URLs
+                , fs_error = function() {
+                    // don't create more object URLs than needed
+                    if (blob_changed || !object_url) {
+                        object_url = get_URL().createObjectURL(blob);
+                    }
+                    if (target_view) {
+                        target_view.location.href = object_url;
+                    } else {
+                        var new_tab = view.open(object_url, "_blank");
+                        if (new_tab == undefined && typeof safari !== "undefined") {
+                            //Apple do not allow window.open, see http://bit.ly/1kZffRI
+                            view.location.href = object_url
+                        }
+                    }
+                    filesaver.readyState = filesaver.DONE;
+                    dispatch_all();
+                    revoke(object_url);
+                }
+                , abortable = function(func) {
+                    return function() {
+                        if (filesaver.readyState !== filesaver.DONE) {
+                            return func.apply(this, arguments);
+                        }
+                    };
+                }
+                , create_if_not_found = {create: true, exclusive: false}
+                , slice
+            ;
+            filesaver.readyState = filesaver.INIT;
+            if (!name) {
+                name = "download";
+            }
+            if (can_use_save_link) {
+                object_url = get_URL().createObjectURL(blob);
+                save_link.href = object_url;
+                save_link.download = name;
+                click(save_link);
+                filesaver.readyState = filesaver.DONE;
+                dispatch_all();
+                revoke(object_url);
+                return;
+            }
+            // prepend BOM for UTF-8 XML and text/plain types
+            if (/^\s*(?:text\/(?:plain|xml)|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+                blob = new Blob(["\ufeff", blob], {type: blob.type});
+            }
+            // Object and web filesystem URLs have a problem saving in Google Chrome when
+            // viewed in a tab, so I force save with application/octet-stream
+            // http://code.google.com/p/chromium/issues/detail?id=91158
+            // Update: Google errantly closed 91158, I submitted it again:
+            // https://code.google.com/p/chromium/issues/detail?id=389642
+            if (view.chrome && type && type !== force_saveable_type) {
+                slice = blob.slice || blob.webkitSlice;
+                blob = slice.call(blob, 0, blob.size, force_saveable_type);
+                blob_changed = true;
+            }
+            // Since I can't be sure that the guessed media type will trigger a download
+            // in WebKit, I append .download to the filename.
+            // https://bugs.webkit.org/show_bug.cgi?id=65440
+            if (webkit_req_fs && name !== "download") {
+                name += ".download";
+            }
+            if (type === force_saveable_type || webkit_req_fs) {
+                target_view = view;
+            }
+            if (!req_fs) {
+                fs_error();
+                return;
+            }
+            fs_min_size += blob.size;
+            req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
+                fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
+                    var save = function() {
+                        dir.getFile(name, create_if_not_found, abortable(function(file) {
+                            file.createWriter(abortable(function(writer) {
+                                writer.onwriteend = function(event) {
+                                    target_view.location.href = file.toURL();
+                                    filesaver.readyState = filesaver.DONE;
+                                    dispatch(filesaver, "writeend", event);
+                                    revoke(file);
+                                };
+                                writer.onerror = function() {
+                                    var error = writer.error;
+                                    if (error.code !== error.ABORT_ERR) {
+                                        fs_error();
+                                    }
+                                };
+                                "writestart progress write abort".split(" ").forEach(function(event) {
+                                    writer["on" + event] = filesaver["on" + event];
+                                });
+                                writer.write(blob);
+                                filesaver.abort = function() {
+                                    writer.abort();
+                                    filesaver.readyState = filesaver.DONE;
+                                };
+                                filesaver.readyState = filesaver.WRITING;
+                            }), fs_error);
+                        }), fs_error);
+                    };
+                    dir.getFile(name, {create: false}, abortable(function(file) {
+                        // delete file if it already exists
+                        file.remove();
+                        save();
+                    }), abortable(function(ex) {
+                        if (ex.code === ex.NOT_FOUND_ERR) {
+                            save();
+                        } else {
+                            fs_error();
+                        }
+                    }));
+                }), fs_error);
+            }), fs_error);
+        }
+        , FS_proto = FileSaver.prototype
+        , saveAs = function(blob, name) {
+            return new FileSaver(blob, name);
+        }
+    ;
+    FS_proto.abort = function() {
+        var filesaver = this;
+        filesaver.readyState = filesaver.DONE;
+        dispatch(filesaver, "abort");
+    };
+    FS_proto.readyState = FS_proto.INIT = 0;
+    FS_proto.WRITING = 1;
+    FS_proto.DONE = 2;
+
+    FS_proto.error =
+    FS_proto.onwritestart =
+    FS_proto.onprogress =
+    FS_proto.onwrite =
+    FS_proto.onabort =
+    FS_proto.onerror =
+    FS_proto.onwriteend =
+        null;
+
+    return saveAs;
+}(
+       typeof self !== "undefined" && self
+    || typeof window !== "undefined" && window
+    || this.content
+));
+// `self` is undefined in Firefox for Android content script context
+// while `this` is nsIContentFrameMessageManager
+// with an attribute `content` that corresponds to the window
+
+if (typeof module !== "undefined" && module.exports) {
+  module.exports.saveAs = saveAs;
+} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) {
+  define([], function() {
+    return saveAs;
+  });
+}
\ No newline at end of file
diff --git a/builder/lib/escodegen.js b/builder/lib/escodegen.js
new file mode 100644
index 0000000..f1185ae
--- /dev/null
+++ b/builder/lib/escodegen.js
@@ -0,0 +1,2965 @@
+// Generated by browserify
+(function(){var require = function (file, cwd) {
+    var resolved = require.resolve(file, cwd || '/');
+    var mod = require.modules[resolved];
+    if (!mod) throw new Error(
+        'Failed to resolve module ' + file + ', tried ' + resolved
+    );
+    var cached = require.cache[resolved];
+    var res = cached ? cached.exports : mod();
+    return res;
+};
+
+require.paths = [];
+require.modules = {};
+require.cache = {};
+require.extensions = [".js",".coffee",".json"];
+
+require._core = {
+    'assert': true,
+    'events': true,
+    'fs': true,
+    'path': true,
+    'vm': true
+};
+
+require.resolve = (function () {
+    return function (x, cwd) {
+        if (!cwd) cwd = '/';
+
+        if (require._core[x]) return x;
+        var path = require.modules.path();
+        cwd = path.resolve('/', cwd);
+        var y = cwd || '/';
+
+        if (x.match(/^(?:\.\.?\/|\/)/)) {
+            var m = loadAsFileSync(path.resolve(y, x))
+                || loadAsDirectorySync(path.resolve(y, x));
+            if (m) return m;
+        }
+
+        var n = loadNodeModulesSync(x, y);
+        if (n) return n;
+
+        throw new Error("Cannot find module '" + x + "'");
+
+        function loadAsFileSync (x) {
+            x = path.normalize(x);
+            if (require.modules[x]) {
+                return x;
+            }
+
+            for (var i = 0; i < require.extensions.length; i++) {
+                var ext = require.extensions[i];
+                if (require.modules[x + ext]) return x + ext;
+            }
+        }
+
+        function loadAsDirectorySync (x) {
+            x = x.replace(/\/+$/, '');
+            var pkgfile = path.normalize(x + '/package.json');
+            if (require.modules[pkgfile]) {
+                var pkg = require.modules[pkgfile]();
+                var b = pkg.browserify;
+                if (typeof b === 'object' && b.main) {
+                    var m = loadAsFileSync(path.resolve(x, b.main));
+                    if (m) return m;
+                }
+                else if (typeof b === 'string') {
+                    var m = loadAsFileSync(path.resolve(x, b));
+                    if (m) return m;
+                }
+                else if (pkg.main) {
+                    var m = loadAsFileSync(path.resolve(x, pkg.main));
+                    if (m) return m;
+                }
+            }
+
+            return loadAsFileSync(x + '/index');
+        }
+
+        function loadNodeModulesSync (x, start) {
+            var dirs = nodeModulesPathsSync(start);
+            for (var i = 0; i < dirs.length; i++) {
+                var dir = dirs[i];
+                var m = loadAsFileSync(dir + '/' + x);
+                if (m) return m;
+                var n = loadAsDirectorySync(dir + '/' + x);
+                if (n) return n;
+            }
+
+            var m = loadAsFileSync(x);
+            if (m) return m;
+        }
+
+        function nodeModulesPathsSync (start) {
+            var parts;
+            if (start === '/') parts = [ '' ];
+            else parts = path.normalize(start).split('/');
+
+            var dirs = [];
+            for (var i = parts.length - 1; i >= 0; i--) {
+                if (parts[i] === 'node_modules') continue;
+                var dir = parts.slice(0, i + 1).join('/') + '/node_modules';
+                dirs.push(dir);
+            }
+
+            return dirs;
+        }
+    };
+})();
+
+require.alias = function (from, to) {
+    var path = require.modules.path();
+    var res = null;
+    try {
+        res = require.resolve(from + '/package.json', '/');
+    }
+    catch (err) {
+        res = require.resolve(from, '/');
+    }
+    var basedir = path.dirname(res);
+
+    var keys = (Object.keys || function (obj) {
+        var res = [];
+        for (var key in obj) res.push(key);
+        return res;
+    })(require.modules);
+
+    for (var i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        if (key.slice(0, basedir.length + 1) === basedir + '/') {
+            var f = key.slice(basedir.length);
+            require.modules[to + f] = require.modules[basedir + f];
+        }
+        else if (key === basedir) {
+            require.modules[to] = require.modules[basedir];
+        }
+    }
+};
+
+(function () {
+    var process = {};
+    var global = typeof window !== 'undefined' ? window : {};
+    var definedProcess = false;
+
+    require.define = function (filename, fn) {
+        if (!definedProcess && require.modules.__browserify_process) {
+            process = require.modules.__browserify_process();
+            definedProcess = true;
+        }
+
+        var dirname = require._core[filename]
+            ? ''
+            : require.modules.path().dirname(filename)
+        ;
+
+        var require_ = function (file) {
+            var requiredModule = require(file, dirname);
+            var cached = require.cache[require.resolve(file, dirname)];
+
+            if (cached && cached.parent === null) {
+                cached.parent = module_;
+            }
+
+            return requiredModule;
+        };
+        require_.resolve = function (name) {
+            return require.resolve(name, dirname);
+        };
+        require_.modules = require.modules;
+        require_.define = require.define;
+        require_.cache = require.cache;
+        var module_ = {
+            id : filename,
+            filename: filename,
+            exports : {},
+            loaded : false,
+            parent: null
+        };
+
+        require.modules[filename] = function () {
+            require.cache[filename] = module_;
+            fn.call(
+                module_.exports,
+                require_,
+                module_,
+                module_.exports,
+                dirname,
+                filename,
+                process,
+                global
+            );
+            module_.loaded = true;
+            return module_.exports;
+        };
+    };
+})();
+
+
+require.define("path",function(require,module,exports,__dirname,__filename,process,global){function filter (xs, fn) {
+    var res = [];
+    for (var i = 0; i < xs.length; i++) {
+        if (fn(xs[i], i, xs)) res.push(xs[i]);
+    }
+    return res;
+}
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+  // if the path tries to go above the root, `up` ends up > 0
+  var up = 0;
+  for (var i = parts.length; i >= 0; i--) {
+    var last = parts[i];
+    if (last == '.') {
+      parts.splice(i, 1);
+    } else if (last === '..') {
+      parts.splice(i, 1);
+      up++;
+    } else if (up) {
+      parts.splice(i, 1);
+      up--;
+    }
+  }
+
+  // if the path is allowed to go above the root, restore leading ..s
+  if (allowAboveRoot) {
+    for (; up--; up) {
+      parts.unshift('..');
+    }
+  }
+
+  return parts;
+}
+
+// Regex to split a filename into [*, dir, basename, ext]
+// posix version
+var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
+
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+var resolvedPath = '',
+    resolvedAbsolute = false;
+
+for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
+  var path = (i >= 0)
+      ? arguments[i]
+      : process.cwd();
+
+  // Skip empty and invalid entries
+  if (typeof path !== 'string' || !path) {
+    continue;
+  }
+
+  resolvedPath = path + '/' + resolvedPath;
+  resolvedAbsolute = path.charAt(0) === '/';
+}
+
+// At this point the path should be resolved to a full absolute path, but
+// handle relative paths to be safe (might happen when process.cwd() fails)
+
+// Normalize the path
+resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+    return !!p;
+  }), !resolvedAbsolute).join('/');
+
+  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
+
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+var isAbsolute = path.charAt(0) === '/',
+    trailingSlash = path.slice(-1) === '/';
+
+// Normalize the path
+path = normalizeArray(filter(path.split('/'), function(p) {
+    return !!p;
+  }), !isAbsolute).join('/');
+
+  if (!path && !isAbsolute) {
+    path = '.';
+  }
+  if (path && trailingSlash) {
+    path += '/';
+  }
+
+  return (isAbsolute ? '/' : '') + path;
+};
+
+
+// posix version
+exports.join = function() {
+  var paths = Array.prototype.slice.call(arguments, 0);
+  return exports.normalize(filter(paths, function(p, index) {
+    return p && typeof p === 'string';
+  }).join('/'));
+};
+
+
+exports.dirname = function(path) {
+  var dir = splitPathRe.exec(path)[1] || '';
+  var isWindows = false;
+  if (!dir) {
+    // No dirname
+    return '.';
+  } else if (dir.length === 1 ||
+      (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
+    // It is just a slash or a drive letter with a slash
+    return dir;
+  } else {
+    // It is a full dirname, strip trailing slash
+    return dir.substring(0, dir.length - 1);
+  }
+};
+
+
+exports.basename = function(path, ext) {
+  var f = splitPathRe.exec(path)[2] || '';
+  // TODO: make this comparison case-insensitive on windows?
+  if (ext && f.substr(-1 * ext.length) === ext) {
+    f = f.substr(0, f.length - ext.length);
+  }
+  return f;
+};
+
+
+exports.extname = function(path) {
+  return splitPathRe.exec(path)[3] || '';
+};
+
+exports.relative = function(from, to) {
+  from = exports.resolve(from).substr(1);
+  to = exports.resolve(to).substr(1);
+
+  function trim(arr) {
+    var start = 0;
+    for (; start < arr.length; start++) {
+      if (arr[start] !== '') break;
+    }
+
+    var end = arr.length - 1;
+    for (; end >= 0; end--) {
+      if (arr[end] !== '') break;
+    }
+
+    if (start > end) return [];
+    return arr.slice(start, end - start + 1);
+  }
+
+  var fromParts = trim(from.split('/'));
+  var toParts = trim(to.split('/'));
+
+  var length = Math.min(fromParts.length, toParts.length);
+  var samePartsLength = length;
+  for (var i = 0; i < length; i++) {
+    if (fromParts[i] !== toParts[i]) {
+      samePartsLength = i;
+      break;
+    }
+  }
+
+  var outputParts = [];
+  for (var i = samePartsLength; i < fromParts.length; i++) {
+    outputParts.push('..');
+  }
+
+  outputParts = outputParts.concat(toParts.slice(samePartsLength));
+
+  return outputParts.join('/');
+};
+
+});
+
+require.define("__browserify_process",function(require,module,exports,__dirname,__filename,process,global){var process = module.exports = {};
+
+process.nextTick = (function () {
+    var canSetImmediate = typeof window !== 'undefined'
+        && window.setImmediate;
+    var canPost = typeof window !== 'undefined'
+        && window.postMessage && window.addEventListener
+    ;
+
+    if (canSetImmediate) {
+        return function (f) { return window.setImmediate(f) };
+    }
+
+    if (canPost) {
+        var queue = [];
+        window.addEventListener('message', function (ev) {
+            if (ev.source === window && ev.data === 'browserify-tick') {
+                ev.stopPropagation();
+                if (queue.length > 0) {
+                    var fn = queue.shift();
+                    fn();
+                }
+            }
+        }, true);
+
+        return function nextTick(fn) {
+            queue.push(fn);
+            window.postMessage('browserify-tick', '*');
+        };
+    }
+
+    return function nextTick(fn) {
+        setTimeout(fn, 0);
+    };
+})();
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+
+process.binding = function (name) {
+    if (name === 'evals') return (require)('vm')
+    else throw new Error('No such module. (Possibly not yet loaded)')
+};
+
+(function () {
+    var cwd = '/';
+    var path;
+    process.cwd = function () { return cwd };
+    process.chdir = function (dir) {
+        if (!path) path = require('path');
+        cwd = path.resolve(dir, cwd);
+    };
+})();
+
+});
+
+require.define("/package.json",function(require,module,exports,__dirname,__filename,process,global){module.exports = {"main":"escodegen.js"}
+});
+
+require.define("/escodegen.js",function(require,module,exports,__dirname,__filename,process,global){/*
+  Copyright (C) 2012 Michael Ficarra <es...@michael.ficarra.me>
+  Copyright (C) 2012 Robert Gust-Bardon <do...@robert.gust-bardon.org>
+  Copyright (C) 2012 John Freeman <jf...@gmail.com>
+  Copyright (C) 2011-2012 Ariya Hidayat <ar...@gmail.com>
+  Copyright (C) 2012 Mathias Bynens <ma...@qiwi.be>
+  Copyright (C) 2012 Joost-Wim Boekesteijn <jo...@boekesteijn.nl>
+  Copyright (C) 2012 Kris Kowal <kr...@cixar.com>
+  Copyright (C) 2012 Yusuke Suzuki <ut...@gmail.com>
+  Copyright (C) 2012 Arpad Borsos <ar...@googlemail.com>
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*jslint bitwise:true */
+/*global escodegen:true, exports:true, generateStatement:true, generateExpression:true, generateFunctionBody:true, process:true, require:true, define:true*/
+(function () {
+    'use strict';
+
+    var Syntax,
+        Precedence,
+        BinaryPrecedence,
+        Regex,
+        VisitorKeys,
+        VisitorOption,
+        SourceNode,
+        isArray,
+        base,
+        indent,
+        json,
+        renumber,
+        hexadecimal,
+        quotes,
+        escapeless,
+        newline,
+        space,
+        parentheses,
+        semicolons,
+        safeConcatenation,
+        directive,
+        extra,
+        parse,
+        sourceMap,
+        traverse;
+
+    traverse = require('estraverse').traverse;
+
+    Syntax = {
+        AssignmentExpression: 'AssignmentExpression',
+        ArrayExpression: 'ArrayExpression',
+        ArrayPattern: 'ArrayPattern',
+        BlockStatement: 'BlockStatement',
+        BinaryExpression: 'BinaryExpression',
+        BreakStatement: 'BreakStatement',
+        CallExpression: 'CallExpression',
+        CatchClause: 'CatchClause',
+        ComprehensionBlock: 'ComprehensionBlock',
+        ComprehensionExpression: 'ComprehensionExpression',
+        ConditionalExpression: 'ConditionalExpression',
+        ContinueStatement: 'ContinueStatement',
+        DirectiveStatement: 'DirectiveStatement',
+        DoWhileStatement: 'DoWhileStatement',
+        DebuggerStatement: 'DebuggerStatement',
+        EmptyStatement: 'EmptyStatement',
+        ExpressionStatement: 'ExpressionStatement',
+        ForStatement: 'ForStatement',
+        ForInStatement: 'ForInStatement',
+        FunctionDeclaration: 'FunctionDeclaration',
+        FunctionExpression: 'FunctionExpression',
+        Identifier: 'Identifier',
+        IfStatement: 'IfStatement',
+        Literal: 'Literal',
+        LabeledStatement: 'LabeledStatement',
+        LogicalExpression: 'LogicalExpression',
+        MemberExpression: 'MemberExpression',
+        NewExpression: 'NewExpression',
+        ObjectExpression: 'ObjectExpression',
+        ObjectPattern: 'ObjectPattern',
+        Program: 'Program',
+        Property: 'Property',
+        ReturnStatement: 'ReturnStatement',
+        SequenceExpression: 'SequenceExpression',
+        SwitchStatement: 'SwitchStatement',
+        SwitchCase: 'SwitchCase',
+        ThisExpression: 'ThisExpression',
+        ThrowStatement: 'ThrowStatement',
+        TryStatement: 'TryStatement',
+        UnaryExpression: 'UnaryExpression',
+        UpdateExpression: 'UpdateExpression',
+        VariableDeclaration: 'VariableDeclaration',
+        VariableDeclarator: 'VariableDeclarator',
+        WhileStatement: 'WhileStatement',
+        WithStatement: 'WithStatement',
+        YieldExpression: 'YieldExpression',
+
+    };
+
+    Precedence = {
+        Sequence: 0,
+        Assignment: 1,
+        Conditional: 2,
+        LogicalOR: 3,
+        LogicalAND: 4,
+        BitwiseOR: 5,
+        BitwiseXOR: 6,
+        BitwiseAND: 7,
+        Equality: 8,
+        Relational: 9,
+        BitwiseSHIFT: 10,
+        Additive: 11,
+        Multiplicative: 12,
+        Unary: 13,
+        Postfix: 14,
+        Call: 15,
+        New: 16,
+        Member: 17,
+        Primary: 18
+    };
+
+    BinaryPrecedence = {
+        '||': Precedence.LogicalOR,
+        '&&': Precedence.LogicalAND,
+        '|': Precedence.BitwiseOR,
+        '^': Precedence.BitwiseXOR,
+        '&': Precedence.BitwiseAND,
+        '==': Precedence.Equality,
+        '!=': Precedence.Equality,
+        '===': Precedence.Equality,
+        '!==': Precedence.Equality,
+        'is': Precedence.Equality,
+        'isnt': Precedence.Equality,
+        '<': Precedence.Relational,
+        '>': Precedence.Relational,
+        '<=': Precedence.Relational,
+        '>=': Precedence.Relational,
+        'in': Precedence.Relational,
+        'instanceof': Precedence.Relational,
+        '<<': Precedence.BitwiseSHIFT,
+        '>>': Precedence.BitwiseSHIFT,
+        '>>>': Precedence.BitwiseSHIFT,
+        '+': Precedence.Additive,
+        '-': Precedence.Additive,
+        '*': Precedence.Multiplicative,
+        '%': Precedence.Multiplicative,
+        '/': Precedence.Multiplicative
+    };
+
+    Regex = {
+        NonAsciiIdentifierPart: new RegExp('[\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0-\u05ea\u05f0-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u08 [...]
+    };
+
+    function getDefaultOptions() {
+        // default options
+        return {
+            indent: null,
+            base: null,
+            parse: null,
+            comment: false,
+            format: {
+                indent: {
+                    style: '    ',
+                    base: 0,
+                    adjustMultilineComment: false
+                },
+                json: false,
+                renumber: false,
+                hexadecimal: false,
+                quotes: 'single',
+                escapeless: false,
+                compact: false,
+                parentheses: true,
+                semicolons: true,
+                safeConcatenation: false
+            },
+            moz: {
+                starlessGenerator: false,
+                parenthesizedComprehensionBlock: false
+            },
+            sourceMap: null,
+            sourceMapRoot: null,
+            sourceMapWithCode: false,
+            directive: false,
+            verbatim: null
+        };
+    }
+
+    function stringToArray(str) {
+        var length = str.length,
+            result = [],
+            i;
+        for (i = 0; i < length; i += 1) {
+            result[i] = str.charAt(i);
+        }
+        return result;
+    }
+
+    function stringRepeat(str, num) {
+        var result = '';
+
+        for (num |= 0; num > 0; num >>>= 1, str += str) {
+            if (num & 1) {
+                result += str;
+            }
+        }
+
+        return result;
+    }
+
+    isArray = Array.isArray;
+    if (!isArray) {
+        isArray = function isArray(array) {
+            return Object.prototype.toString.call(array) === '[object Array]';
+        };
+    }
+
+    // Fallback for the non SourceMap environment
+    function SourceNodeMock(line, column, filename, chunk) {
+        var result = [];
+
+        function flatten(input) {
+            var i, iz;
+            if (isArray(input)) {
+                for (i = 0, iz = input.length; i < iz; ++i) {
+                    flatten(input[i]);
+                }
+            } else if (input instanceof SourceNodeMock) {
+                result.push(input);
+            } else if (typeof input === 'string' && input) {
+                result.push(input);
+            }
+        }
+
+        flatten(chunk);
+        this.children = result;
+    }
+
+    SourceNodeMock.prototype.toString = function toString() {
+        var res = '', i, iz, node;
+        for (i = 0, iz = this.children.length; i < iz; ++i) {
+            node = this.children[i];
+            if (node instanceof SourceNodeMock) {
+                res += node.toString();
+            } else {
+                res += node;
+            }
+        }
+        return res;
+    };
+
+    SourceNodeMock.prototype.replaceRight = function replaceRight(pattern, replacement) {
+        var last = this.children[this.children.length - 1];
+        if (last instanceof SourceNodeMock) {
+            last.replaceRight(pattern, replacement);
+        } else if (typeof last === 'string') {
+            this.children[this.children.length - 1] = last.replace(pattern, replacement);
+        } else {
+            this.children.push(''.replace(pattern, replacement));
+        }
+        return this;
+    };
+
+    SourceNodeMock.prototype.join = function join(sep) {
+        var i, iz, result;
+        result = [];
+        iz = this.children.length;
+        if (iz > 0) {
+            for (i = 0, iz -= 1; i < iz; ++i) {
+                result.push(this.children[i], sep);
+            }
+            result.push(this.children[iz]);
+            this.children = result;
+        }
+        return this;
+    };
+
+    function hasLineTerminator(str) {
+        return /[\r\n]/g.test(str);
+    }
+
+    function endsWithLineTerminator(str) {
+        var ch = str.charAt(str.length - 1);
+        return ch === '\r' || ch === '\n';
+    }
+
+    function shallowCopy(obj) {
+        var ret = {}, key;
+        for (key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                ret[key] = obj[key];
+            }
+        }
+        return ret;
+    }
+
+    function deepCopy(obj) {
+        var ret = {}, key, val;
+        for (key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                val = obj[key];
+                if (typeof val === 'object' && val !== null) {
+                    ret[key] = deepCopy(val);
+                } else {
+                    ret[key] = val;
+                }
+            }
+        }
+        return ret;
+    }
+
+    function updateDeeply(target, override) {
+        var key, val;
+
+        function isHashObject(target) {
+            return typeof target === 'object' && target instanceof Object && !(target instanceof RegExp);
+        }
+
+        for (key in override) {
+            if (override.hasOwnProperty(key)) {
+                val = override[key];
+                if (isHashObject(val)) {
+                    if (isHashObject(target[key])) {
+                        updateDeeply(target[key], val);
+                    } else {
+                        target[key] = updateDeeply({}, val);
+                    }
+                } else {
+                    target[key] = val;
+                }
+            }
+        }
+        return target;
+    }
+
+    function generateNumber(value) {
+        var result, point, temp, exponent, pos;
+
+        if (value !== value) {
+            throw new Error('Numeric literal whose value is NaN');
+        }
+        if (value < 0 || (value === 0 && 1 / value < 0)) {
+            throw new Error('Numeric literal whose value is negative');
+        }
+
+        if (value === 1 / 0) {
+            return json ? 'null' : renumber ? '1e400' : '1e+400';
+        }
+
+        result = '' + value;
+        if (!renumber || result.length < 3) {
+            return result;
+        }
+
+        point = result.indexOf('.');
+        if (!json && result.charAt(0) === '0' && point === 1) {
+            point = 0;
+            result = result.slice(1);
+        }
+        temp = result;
+        result = result.replace('e+', 'e');
+        exponent = 0;
+        if ((pos = temp.indexOf('e')) > 0) {
+            exponent = +temp.slice(pos + 1);
+            temp = temp.slice(0, pos);
+        }
+        if (point >= 0) {
+            exponent -= temp.length - point - 1;
+            temp = +(temp.slice(0, point) + temp.slice(point + 1)) + '';
+        }
+        pos = 0;
+        while (temp.charAt(temp.length + pos - 1) === '0') {
+            pos -= 1;
+        }
+        if (pos !== 0) {
+            exponent -= pos;
+            temp = temp.slice(0, pos);
+        }
+        if (exponent !== 0) {
+            temp += 'e' + exponent;
+        }
+        if ((temp.length < result.length ||
+                    (hexadecimal && value > 1e12 && Math.floor(value) === value && (temp = '0x' + value.toString(16)).length < result.length)) &&
+                +temp === value) {
+            result = temp;
+        }
+
+        return result;
+    }
+
+    function escapeAllowedCharacter(ch, next) {
+        var code = ch.charCodeAt(0), hex = code.toString(16), result = '\\';
+
+        switch (ch) {
+        case '\b':
+            result += 'b';
+            break;
+        case '\f':
+            result += 'f';
+            break;
+        case '\t':
+            result += 't';
+            break;
+        default:
+            if (json || code > 0xff) {
+                result += 'u' + '0000'.slice(hex.length) + hex;
+            } else if (ch === '\u0000' && '0123456789'.indexOf(next) < 0) {
+                result += '0';
+            } else if (ch === '\v') {
+                result += 'v';
+            } else {
+                result += 'x' + '00'.slice(hex.length) + hex;
+            }
+            break;
+        }
+
+        return result;
+    }
+
+    function escapeDisallowedCharacter(ch) {
+        var result = '\\';
+        switch (ch) {
+        case '\\':
+            result += '\\';
+            break;
+        case '\n':
+            result += 'n';
+            break;
+        case '\r':
+            result += 'r';
+            break;
+        case '\u2028':
+            result += 'u2028';
+            break;
+        case '\u2029':
+            result += 'u2029';
+            break;
+        default:
+            throw new Error('Incorrectly classified character');
+        }
+
+        return result;
+    }
+
+    function escapeDirective(str) {
+        var i, iz, ch, single, buf, quote;
+
+        buf = str;
+        if (typeof buf[0] === 'undefined') {
+            buf = stringToArray(buf);
+        }
+
+        quote = quotes === 'double' ? '"' : '\'';
+        for (i = 0, iz = buf.length; i < iz; i += 1) {
+            ch = buf[i];
+            if (ch === '\'') {
+                quote = '"';
+                break;
+            } else if (ch === '"') {
+                quote = '\'';
+                break;
+            } else if (ch === '\\') {
+                i += 1;
+            }
+        }
+
+        return quote + str + quote;
+    }
+
+    function escapeString(str) {
+        var result = '', i, len, ch, next, singleQuotes = 0, doubleQuotes = 0, single;
+
+        if (typeof str[0] === 'undefined') {
+            str = stringToArray(str);
+        }
+
+        for (i = 0, len = str.length; i < len; i += 1) {
+            ch = str[i];
+            if (ch === '\'') {
+                singleQuotes += 1;
+            } else if (ch === '"') {
+                doubleQuotes += 1;
+            } else if (ch === '/' && json) {
+                result += '\\';
+            } else if ('\\\n\r\u2028\u2029'.indexOf(ch) >= 0) {
+                result += escapeDisallowedCharacter(ch);
+                continue;
+            } else if ((json && ch < ' ') || !(json || escapeless || (ch >= ' ' && ch <= '~'))) {
+                result += escapeAllowedCharacter(ch, str[i + 1]);
+                continue;
+            }
... 1393931 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org