summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-02-16 22:06:42 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-02-16 22:06:42 (GMT)
commitec3dc06b5fbf7ef37e0836992f6d7a3fd49c5891 (patch)
tree195c66ded290b2ebb4b2398c8967666eb0e7c2aa
parent95d3bd3fc993d7c8c1fe92960c617a3392d87f66 (diff)
parent9e5e97f3b5eaa9cda471be44a5c59b51561393b6 (diff)
downloadQt-ec3dc06b5fbf7ef37e0836992f6d7a3fd49c5891.zip
Qt-ec3dc06b5fbf7ef37e0836992f6d7a3fd49c5891.tar.gz
Qt-ec3dc06b5fbf7ef37e0836992f6d7a3fd49c5891.tar.bz2
Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.6-integration
* '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: (26 commits) QLocalSocket::isValid on Windows must check for broken connection fix pipe handle leak in qlocalsocket_win.cpp GraphicsViewBenchmark: Run app in full screen mode on small desktops. Fix Thai text on Windows 7 Fix License headers. QTextCodec::codecForName. Insert in the cache in all cases. Prevented calling the pixmap filter implementations with null pixmaps. Make it possible to run benchmarks with the "-graphicssystem" switch. Add support for running the GraphicsViewBenchmark application manually. Bump version to 4.6.3. Fixed a GLX warning that occured with some Intel chipsets under X11. Fixed compile for maemo6. Cleanup QEglContext & EGLDisplays Moved 'hasAlpha' property from GL2 engine to GL paint device. Remove useless qDebug in QTextCodec autotest QTextCodec: Symbian has codec for UCS2, only fallback to UTF16 if UCS2 codec cannot be loaded Add caching to QTextCodec::codecForName and QTextCodec::codecForMib Add benchmark for QTextCodec Fix several bugs with GL texture cache Compile fix for OpenGL ES. ...
-rw-r--r--src/corelib/codecs/qtextcodec.cpp52
-rw-r--r--src/corelib/global/qglobal.h4
-rw-r--r--src/gui/effects/qgraphicseffect.cpp14
-rw-r--r--src/gui/egl/qegl.cpp64
-rw-r--r--src/gui/egl/qegl_p.h12
-rw-r--r--src/gui/egl/qegl_qws.cpp6
-rw-r--r--src/gui/egl/qegl_symbian.cpp8
-rw-r--r--src/gui/egl/qegl_wince.cpp13
-rw-r--r--src/gui/egl/qegl_x11.cpp7
-rw-r--r--src/gui/egl/qeglproperties.cpp6
-rw-r--r--src/gui/image/qimagepixmapcleanuphooks.cpp21
-rw-r--r--src/gui/image/qimagepixmapcleanuphooks_p.h3
-rw-r--r--src/gui/image/qpixmap.cpp9
-rw-r--r--src/gui/painting/qcups.cpp4
-rw-r--r--src/gui/painting/qpainter.cpp7
-rw-r--r--src/gui/text/qfontdatabase_win.cpp14
-rw-r--r--src/network/socket/qlocalsocket_p.h6
-rw-r--r--src/network/socket/qlocalsocket_win.cpp22
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp14
-rw-r--r--src/opengl/qgl.cpp44
-rw-r--r--src/opengl/qgl_p.h4
-rw-r--r--src/opengl/qgl_qws.cpp5
-rw-r--r--src/opengl/qgl_wince.cpp5
-rw-r--r--src/opengl/qgl_x11.cpp7
-rw-r--r--src/opengl/qgl_x11egl.cpp13
-rw-r--r--src/opengl/qglframebufferobject.cpp7
-rw-r--r--src/opengl/qglframebufferobject_p.h4
-rw-r--r--src/opengl/qglpaintdevice.cpp5
-rw-r--r--src/opengl/qglpaintdevice_p.h1
-rw-r--r--src/opengl/qglpixelbuffer_egl.cpp9
-rw-r--r--src/opengl/qpixmapdata_gl.cpp5
-rw-r--r--src/opengl/qpixmapdata_gl_p.h1
-rw-r--r--src/opengl/qpixmapdata_x11gl_egl.cpp15
-rw-r--r--src/openvg/qwindowsurface_vgegl.cpp4
-rw-r--r--src/plugins/qpluginbase.pri2
-rw-r--r--src/qbase.pri2
-rw-r--r--src/testlib/qtestcase.cpp8
-rw-r--r--tests/auto/mediaobject/dummy/dummy.pro2
-rw-r--r--tests/auto/qgl/tst_qgl.cpp24
-rw-r--r--tests/auto/qtextcodec/tst_qtextcodec.cpp10
-rw-r--r--tests/auto/selftests/expected_cmptest.txt2
-rw-r--r--tests/auto/selftests/expected_crashes_3.txt2
-rw-r--r--tests/auto/selftests/expected_longstring.txt2
-rw-r--r--tests/auto/selftests/expected_maxwarnings.txt2
-rw-r--r--tests/auto/selftests/expected_skip.txt2
-rw-r--r--tests/auto/uic/baseline/config_fromuic3.ui.h2
-rw-r--r--tests/benchmarks/corelib/codecs/codecs.pro3
-rw-r--r--tests/benchmarks/corelib/codecs/qtextcodec/main.cpp185
-rw-r--r--tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro16
-rw-r--r--tests/benchmarks/corelib/codecs/qtextcodec/utf-8.txt72
-rw-r--r--tests/benchmarks/corelib/corelib.pro3
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.pro71
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.qrc85
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp805
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_001_58x58.pngbin0 -> 6598 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_002_58x58.pngbin0 -> 6687 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_003_58x58.pngbin0 -> 6261 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_004_58x58.pngbin0 -> 6783 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_005_58x58.pngbin0 -> 6317 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_006_58x58.pngbin0 -> 7020 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_007_58x58.pngbin0 -> 3706 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_008_58x58.pngbin0 -> 6749 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_009_58x58.pngbin0 -> 5436 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_010_58x58.pngbin0 -> 1454 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_001_58x58.pngbin0 -> 2983 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_002_58x58.pngbin0 -> 3463 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_003_58x58.pngbin0 -> 763 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_004_58x58.pngbin0 -> 2252 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_005_58x58.pngbin0 -> 2451 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_001_58x58.pngbin0 -> 6330 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_002_58x58.pngbin0 -> 6237 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_003_58x58.pngbin0 -> 6192 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_004_58x58.pngbin0 -> 7489 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_005_58x58.pngbin0 -> 6764 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_006_58x58.pngbin0 -> 6218 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_007_58x58.pngbin0 -> 6122 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_008_58x58.pngbin0 -> 6658 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_009_58x58.pngbin0 -> 8293 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_010_58x58.pngbin0 -> 4783 bytes
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_360x640px.svg14
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_horisontal_640x360px.svg16
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_default_icon_52x52px.svg22
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_divider_360x76px.svg7
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_highlighter_360x76px.svg10
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_idle_33x33px.svg55
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_offline_33x33px.svg55
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_online_33x33px.svg56
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scroll_16x80px.svg39
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scrollbar_7x14px.svg7
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_left_14x24px.svg24
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_middle_14x24px.svg11
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_right_14x24px.svg13
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_356x96px.svg2007
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_horisontal_636x96px.svg4060
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_default_icon_68x68px.svg22
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_idle_38x38px.svg55
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_offline_38x38px.svg55
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_online_38x38px.svg55
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/areacodes.txt62
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesF.txt100
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesM.txt100
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/lastnames.txt150
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_360x640px.svg40
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_horisontal_640x360px.svg39
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_53x53px.svg30
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_highlight_53x53px.svg31
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_divider_360x76px.svg7
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_highlighter_357x80px.svg11
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_idle_27x47.svg63
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_offline_27x47.svg58
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_online_27x47.svg63
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scroll_5x80px.svg12
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scrollbar_5x14px.svg7
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_left_14x24px.svg30
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_middle_10x24px.svg18
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_right_14x24px.svg19
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_356x96px.svg26
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_horisontal_636x96px.svg26
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_default_icon_84x68px.svg32
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_idle_24x24px.svg53
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_offline_24x24px.svg53
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_online_24x24px.svg53
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp401
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h111
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp443
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h118
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp249
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h101
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp117
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h96
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp85
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h72
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp209
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h102
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp196
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h52
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp141
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h72
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp59
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h58
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp169
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h96
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp275
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h85
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.pri19
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp79
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h67
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp98
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h76
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp314
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h109
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp92
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h69
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp211
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h92
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp146
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h82
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp132
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h87
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp344
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h123
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp202
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h84
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp147
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h83
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h97
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp299
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h97
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp305
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h79
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h103
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp59
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h116
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp164
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h80
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp500
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h92
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp240
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h134
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp53
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h64
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp359
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h126
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp304
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h81
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h99
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/functional.pro3
-rw-r--r--tests/benchmarks/gui/graphicsview/graphicsview.pro1
-rw-r--r--tools/assistant/tools/assistant/doc/assistant.qdocconf2
-rw-r--r--tools/qdoc3/test/assistant.qdocconf2
-rw-r--r--tools/qdoc3/test/designer.qdocconf2
-rw-r--r--tools/qdoc3/test/linguist.qdocconf2
-rw-r--r--tools/qdoc3/test/qmake.qdocconf2
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf6
-rw-r--r--tools/qdoc3/test/qt.qdocconf6
195 files changed, 18611 insertions, 210 deletions
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index ff40af5..c0aa342 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -80,6 +80,7 @@
#endif // QT_NO_CODECS
#include "qlocale.h"
#include "qmutex.h"
+#include "qhash.h"
#include <stdlib.h>
#include <ctype.h>
@@ -172,6 +173,7 @@ static QTextCodec *createForMib(int mib)
}
static QList<QTextCodec*> *all = 0;
+static int clearCaches = 0; // flags specifying if caches should be invalided: 0x1 codecForName, 0x2 codecForMib
#ifdef Q_DEBUG_TEXTCODEC
static bool destroying_is_ok = false;
#endif
@@ -935,6 +937,7 @@ QTextCodec::~QTextCodec()
QMutexLocker locker(textCodecsMutex());
#endif
all->removeAll(this);
+ clearCaches = 0x1 | 0x2;
}
}
@@ -961,17 +964,33 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
#endif
setup();
+ static QHash <QByteArray, QTextCodec *> cache;
+ if (clearCaches & 0x1) {
+ cache.clear();
+ clearCaches &= ~0x1;
+ }
+ QTextCodec *codec = cache.value(name);
+ if (codec)
+ return codec;
+
for (int i = 0; i < all->size(); ++i) {
QTextCodec *cursor = all->at(i);
- if (nameMatch(cursor->name(), name))
+ if (nameMatch(cursor->name(), name)) {
+ cache.insert(name, cursor);
return cursor;
+ }
QList<QByteArray> aliases = cursor->aliases();
for (int y = 0; y < aliases.size(); ++y)
- if (nameMatch(aliases.at(y), name))
+ if (nameMatch(aliases.at(y), name)) {
+ cache.insert(name, cursor);
return cursor;
+ }
}
- return createForName(name);
+ codec = createForName(name);
+ if (codec)
+ cache.insert(name, codec);
+ return codec;
}
@@ -986,19 +1005,34 @@ QTextCodec* QTextCodec::codecForMib(int mib)
#endif
setup();
- // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
- // this correctly for compatibility.
- if (mib == 1000)
- mib = 1015;
+ static QHash <int, QTextCodec *> cache;
+ if (clearCaches & 0x2) {
+ cache.clear();
+ clearCaches &= ~0x2;
+ }
+ QTextCodec *codec = cache.value(mib);
+ if (codec)
+ return codec;
QList<QTextCodec*>::ConstIterator i;
for (int i = 0; i < all->size(); ++i) {
QTextCodec *cursor = all->at(i);
- if (cursor->mibEnum() == mib)
+ if (cursor->mibEnum() == mib) {
+ cache.insert(mib, cursor);
return cursor;
+ }
}
- return createForMib(mib);
+ codec = createForMib(mib);
+
+ // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
+ // this correctly for compatibility.
+ if (!codec && mib == 1000)
+ return codecForMib(1015);
+
+ if (codec)
+ cache.insert(mib, codec);
+ return codec;
}
/*!
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index f51849b..9edf929 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -44,11 +44,11 @@
#include <stddef.h>
-#define QT_VERSION_STR "4.6.2"
+#define QT_VERSION_STR "4.6.3"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x040602
+#define QT_VERSION 0x040603
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp
index 10ef5ea..7d1d03d 100644
--- a/src/gui/effects/qgraphicseffect.cpp
+++ b/src/gui/effects/qgraphicseffect.cpp
@@ -699,12 +699,17 @@ void QGraphicsColorizeEffect::draw(QPainter *painter)
if (sourceIsPixmap()) {
// No point in drawing in device coordinates (pixmap will be scaled anyways).
const QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset, NoPad);
- d->filter->draw(painter, offset, pixmap);
+ if (!pixmap.isNull())
+ d->filter->draw(painter, offset, pixmap);
+
return;
}
// Draw pixmap in deviceCoordinates to avoid pixmap scaling.
const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset);
+ if (pixmap.isNull())
+ return;
+
QTransform restoreTransform = painter->worldTransform();
painter->setWorldTransform(QTransform());
d->filter->draw(painter, offset, pixmap);
@@ -858,9 +863,11 @@ void QGraphicsBlurEffect::draw(QPainter *painter)
if (painter->paintEngine()->type() == QPaintEngine::OpenGL2)
mode = NoPad;
- // Draw pixmap in device coordinates to avoid pixmap scaling.
QPoint offset;
QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset, mode);
+ if (pixmap.isNull())
+ return;
+
d->filter->draw(painter, offset, pixmap);
}
@@ -1047,6 +1054,9 @@ void QGraphicsDropShadowEffect::draw(QPainter *painter)
// Draw pixmap in device coordinates to avoid pixmap scaling.
QPoint offset;
const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset, mode);
+ if (pixmap.isNull())
+ return;
+
QTransform restoreTransform = painter->worldTransform();
painter->setWorldTransform(QTransform());
d->filter->draw(painter, offset, pixmap);
diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp
index ae3d6c3..4d447cb 100644
--- a/src/gui/egl/qegl.cpp
+++ b/src/gui/egl/qegl.cpp
@@ -54,9 +54,10 @@ QT_BEGIN_NAMESPACE
static QEglContext * volatile currentGLContext = 0;
static QEglContext * volatile currentVGContext = 0;
+EGLDisplay QEglContext::dpy = EGL_NO_DISPLAY;
+
QEglContext::QEglContext()
: apiType(QEgl::OpenGL)
- , dpy(EGL_NO_DISPLAY)
, ctx(EGL_NO_CONTEXT)
, cfg(0)
, currentSurface(EGL_NO_SURFACE)
@@ -68,7 +69,7 @@ QEglContext::QEglContext()
QEglContext::~QEglContext()
{
- destroy();
+ destroyContext();
if (currentGLContext == this)
currentGLContext = 0;
@@ -86,14 +87,6 @@ bool QEglContext::isCurrent() const
return current;
}
-// Open the EGL display associated with "device".
-bool QEglContext::openDisplay(QPaintDevice *device)
-{
- if (dpy == EGL_NO_DISPLAY)
- dpy = defaultDisplay(device);
- return (dpy != EGL_NO_DISPLAY);
-}
-
// Choose a configuration that matches "properties".
bool QEglContext::chooseConfig
(const QEglProperties& properties, QEgl::PixelFormatMatch match)
@@ -102,7 +95,7 @@ bool QEglContext::chooseConfig
do {
// Get the number of matching configurations for this set of properties.
EGLint matching = 0;
- if (!eglChooseConfig(dpy, props.properties(), 0, 0, &matching) || !matching)
+ if (!eglChooseConfig(display(), props.properties(), 0, 0, &matching) || !matching)
continue;
// If we want the best pixel format, then return the first
@@ -179,7 +172,7 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties
if (shareContext && shareContext->ctx == EGL_NO_CONTEXT)
shareContext = 0;
if (shareContext) {
- ctx = eglCreateContext(dpy, cfg, shareContext->ctx, contextProps.properties());
+ ctx = eglCreateContext(display(), cfg, shareContext->ctx, contextProps.properties());
if (ctx == EGL_NO_CONTEXT) {
qWarning() << "QEglContext::createContext(): Could not share context:" << errorString(eglGetError());
shareContext = 0;
@@ -209,7 +202,7 @@ void QEglContext::destroySurface(EGLSurface surface)
}
// Destroy the context. Note: this does not destroy the surface.
-void QEglContext::destroy()
+void QEglContext::destroyContext()
{
if (ctx != EGL_NO_CONTEXT && ownsContext)
eglDestroyContext(dpy, ctx);
@@ -248,7 +241,7 @@ bool QEglContext::makeCurrent(EGLSurface surface)
eglBindAPI(EGL_OPENVG_API);
#endif
- bool ok = eglMakeCurrent(dpy, surface, surface, ctx);
+ bool ok = eglMakeCurrent(display(), surface, surface, ctx);
if (!ok)
qWarning() << "QEglContext::makeCurrent():" << errorString(eglGetError());
return ok;
@@ -277,7 +270,7 @@ bool QEglContext::doneCurrent()
eglBindAPI(EGL_OPENVG_API);
#endif
- bool ok = eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ bool ok = eglMakeCurrent(display(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (!ok)
qWarning() << "QEglContext::doneCurrent():" << errorString(eglGetError());
return ok;
@@ -299,7 +292,7 @@ bool QEglContext::swapBuffers(EGLSurface surface)
if(ctx == EGL_NO_CONTEXT)
return false;
- bool ok = eglSwapBuffers(dpy, surface);
+ bool ok = eglSwapBuffers(display(), surface);
if (!ok)
qWarning() << "QEglContext::swapBuffers():" << errorString(eglGetError());
return ok;
@@ -338,7 +331,7 @@ void QEglContext::waitClient()
// Query the value of a configuration attribute.
bool QEglContext::configAttrib(int name, EGLint *value) const
{
- return eglGetConfigAttrib(dpy, cfg, name, value);
+ return eglGetConfigAttrib(display(), cfg, name, value);
}
// Retrieve all of the properties on "cfg". If zero, return
@@ -357,27 +350,38 @@ QEglProperties QEglContext::configProperties(EGLConfig cfg) const
return props;
}
-// Initialize and return the default display.
-EGLDisplay QEglContext::defaultDisplay(QPaintDevice *device)
+EGLDisplay QEglContext::display()
{
- static EGLDisplay dpy = EGL_NO_DISPLAY;
- if (dpy == EGL_NO_DISPLAY) {
- dpy = getDisplay(device);
+ static bool openedDisplay = false;
+
+ if (!openedDisplay) {
+ dpy = eglGetDisplay(nativeDisplay());
+ openedDisplay = true;
+ if (dpy == EGL_NO_DISPLAY) {
+ qWarning("QEglContext::display(): Falling back to EGL_DEFAULT_DISPLAY");
+ dpy = eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY));
+ }
if (dpy == EGL_NO_DISPLAY) {
- qWarning() << "QEglContext::defaultDisplay(): Cannot open EGL display";
+ qWarning("QEglContext::display(): Can't even open the default display");
return EGL_NO_DISPLAY;
}
+
if (!eglInitialize(dpy, NULL, NULL)) {
- qWarning() << "QEglContext::defaultDisplay(): Cannot initialize EGL display:" << errorString(eglGetError());
+ qWarning() << "QEglContext::display(): Cannot initialize EGL display:" << errorString(eglGetError());
return EGL_NO_DISPLAY;
}
-#ifdef EGL_OPENGL_ES_API
- eglBindAPI(EGL_OPENGL_ES_API);
-#endif
}
+
return dpy;
}
+#if !defined(Q_WS_X11) && !defined(Q_WS_WINCE) // WinCE & X11 implement this properly
+EGLNativeDisplayType QEglContext::nativeDisplay()
+{
+ return EGL_DEFAULT_DISPLAY;
+}
+#endif
+
// Return the error string associated with a specific code.
QString QEglContext::errorString(EGLint code)
{
@@ -410,7 +414,7 @@ void QEglContext::dumpAllConfigs()
{
QEglProperties props;
EGLint count = 0;
- if (!eglGetConfigs(dpy, 0, 0, &count) || count < 1)
+ if (!eglGetConfigs(display(), 0, 0, &count) || count < 1)
return;
EGLConfig *configs = new EGLConfig [count];
eglGetConfigs(dpy, configs, count, &count);
@@ -423,7 +427,7 @@ void QEglContext::dumpAllConfigs()
QString QEglContext::extensions()
{
- const char* exts = eglQueryString(QEglContext::defaultDisplay(0), EGL_EXTENSIONS);
+ const char* exts = eglQueryString(QEglContext::display(), EGL_EXTENSIONS);
return QString(QLatin1String(exts));
}
@@ -431,7 +435,7 @@ bool QEglContext::hasExtension(const char* extensionName)
{
QList<QByteArray> extensions =
QByteArray(reinterpret_cast<const char *>
- (eglQueryString(QEglContext::defaultDisplay(0), EGL_EXTENSIONS))).split(' ');
+ (eglQueryString(QEglContext::display(), EGL_EXTENSIONS))).split(' ');
return extensions.contains(extensionName);
}
diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index a7de9c8..87ed818 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -86,14 +86,12 @@ public:
QEgl::API api() const { return apiType; }
void setApi(QEgl::API api) { apiType = api; }
- bool openDisplay(QPaintDevice *device);
bool chooseConfig(const QEglProperties& properties, QEgl::PixelFormatMatch match = QEgl::ExactPixelFormat);
bool createContext(QEglContext *shareContext = 0, const QEglProperties *properties = 0);
+ void destroyContext();
EGLSurface createSurface(QPaintDevice *device, const QEglProperties *properties = 0);
void destroySurface(EGLSurface surface);
- void destroy();
-
bool makeCurrent(EGLSurface surface);
bool doneCurrent();
bool lazyDoneCurrent();
@@ -108,7 +106,7 @@ public:
static EGLint error() { return eglGetError(); }
static QString errorString(EGLint code);
- EGLDisplay display() const { return dpy; }
+ static EGLDisplay display();
EGLContext context() const { return ctx; }
void setContext(EGLContext context) { ctx = context; ownsContext = false;}
@@ -118,8 +116,6 @@ public:
QEglProperties configProperties(EGLConfig cfg = 0) const;
- static EGLDisplay defaultDisplay(QPaintDevice *device);
-
void dumpAllConfigs();
static QString extensions();
@@ -127,7 +123,6 @@ public:
private:
QEgl::API apiType;
- EGLDisplay dpy;
EGLContext ctx;
EGLConfig cfg;
EGLSurface currentSurface;
@@ -135,7 +130,8 @@ private:
bool ownsContext;
bool sharing;
- static EGLDisplay getDisplay(QPaintDevice *device);
+ static EGLDisplay dpy;
+ static EGLNativeDisplayType nativeDisplay();
static QEglContext *currentContext(QEgl::API api);
static void setCurrentContext(QEgl::API api, QEglContext *context);
diff --git a/src/gui/egl/qegl_qws.cpp b/src/gui/egl/qegl_qws.cpp
index e999e0b..2a61beb 100644
--- a/src/gui/egl/qegl_qws.cpp
+++ b/src/gui/egl/qegl_qws.cpp
@@ -64,12 +64,6 @@ EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties
return EGL_NO_SURFACE;
}
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
-{
- Q_UNUSED(device);
- return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY));
-}
-
static QScreen *screenForDevice(QPaintDevice *device)
{
QScreen *screen = qt_screen;
diff --git a/src/gui/egl/qegl_symbian.cpp b/src/gui/egl/qegl_symbian.cpp
index 44ecd19..b1c9408 100644
--- a/src/gui/egl/qegl_symbian.cpp
+++ b/src/gui/egl/qegl_symbian.cpp
@@ -86,14 +86,6 @@ EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties
return surf;
}
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
-{
- EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (dpy == EGL_NO_DISPLAY)
- qWarning("QEglContext::defaultDisplay(): Falling back to EGL_DEFAULT_DISPLAY");
- return dpy;
-}
-
// Set pixel format and other properties based on a paint device.
void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
{
diff --git a/src/gui/egl/qegl_wince.cpp b/src/gui/egl/qegl_wince.cpp
index 026a7b1..c9c9773 100644
--- a/src/gui/egl/qegl_wince.cpp
+++ b/src/gui/egl/qegl_wince.cpp
@@ -87,20 +87,15 @@ EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties
return surf;
}
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
+EGLNativeDisplayType QEglContext::nativeDisplay()
{
- EGLDisplay dpy = 0;
HWND win = (static_cast<QWidget*>(device))->winId();
HDC myDc = GetDC(win);
if (!myDc) {
- qWarning("QEglContext::defaultDisplay(): WinCE display is not open");
+ qWarning("QEglContext::nativeDisplay(): WinCE display is not open");
+ return EGL_DEFAULT_DISPLAY;
}
- dpy = eglGetDisplay(EGLNativeDisplayType(myDc));
- if (dpy == EGL_NO_DISPLAY) {
- qWarning("QEglContext::defaultDisplay(): Falling back to EGL_DEFAULT_DISPLAY");
- dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- }
- return dpy;
+ return EGLNativeDisplayType(myDc);
}
// Set pixel format and other properties based on a paint device.
diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp
index 2cf4e33..634ff13 100644
--- a/src/gui/egl/qegl_x11.cpp
+++ b/src/gui/egl/qegl_x11.cpp
@@ -93,15 +93,14 @@ EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties
return surf;
}
-EGLDisplay QEglContext::getDisplay(QPaintDevice *device)
+EGLNativeDisplayType QEglContext::nativeDisplay()
{
- Q_UNUSED(device);
Display *xdpy = QX11Info::display();
if (!xdpy) {
qWarning("QEglContext::getDisplay(): X11 display is not open");
- return EGL_NO_DISPLAY;
+ return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY);
}
- return eglGetDisplay(EGLNativeDisplayType(xdpy));
+ return EGLNativeDisplayType(xdpy);
}
static int countBits(unsigned long mask)
diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp
index 2915fb9..236ec37 100644
--- a/src/gui/egl/qeglproperties.cpp
+++ b/src/gui/egl/qeglproperties.cpp
@@ -60,7 +60,7 @@ QEglProperties::QEglProperties(EGLConfig cfg)
props.append(EGL_NONE);
for (int name = 0x3020; name <= 0x304F; ++name) {
EGLint value;
- if (name != EGL_NONE && eglGetConfigAttrib(QEglContext::defaultDisplay(0), cfg, name, &value))
+ if (name != EGL_NONE && eglGetConfigAttrib(QEglContext::display(), cfg, name, &value))
setValue(name, value);
}
eglGetError(); // Clear the error state.
@@ -273,12 +273,12 @@ static void addTag(QString& str, const QString& tag)
void QEglProperties::dumpAllConfigs()
{
EGLint count = 0;
- eglGetConfigs(QEglContext::defaultDisplay(0), 0, 0, &count);
+ eglGetConfigs(QEglContext::display(), 0, 0, &count);
if (count < 1)
return;
EGLConfig *configs = new EGLConfig [count];
- eglGetConfigs(QEglContext::defaultDisplay(0), configs, count, &count);
+ eglGetConfigs(QEglContext::display(), configs, count, &count);
for (EGLint index = 0; index < count; ++index)
qWarning() << QEglProperties(configs[index]).toString();
delete [] configs;
diff --git a/src/gui/image/qimagepixmapcleanuphooks.cpp b/src/gui/image/qimagepixmapcleanuphooks.cpp
index ace4bb6..517fcb0 100644
--- a/src/gui/image/qimagepixmapcleanuphooks.cpp
+++ b/src/gui/image/qimagepixmapcleanuphooks.cpp
@@ -122,19 +122,32 @@ void QImagePixmapCleanupHooks::executeImageHooks(qint64 key)
qt_image_cleanup_hook_64(key);
}
-void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
-{
- enableCleanupHooks(const_cast<QPixmap &>(pixmap).data_ptr().data());
-}
void QImagePixmapCleanupHooks::enableCleanupHooks(QPixmapData *pixmapData)
{
pixmapData->is_cached = true;
}
+void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
+{
+ enableCleanupHooks(const_cast<QPixmap &>(pixmap).data_ptr().data());
+}
+
void QImagePixmapCleanupHooks::enableCleanupHooks(const QImage &image)
{
const_cast<QImage &>(image).data_ptr()->is_cached = true;
}
+bool QImagePixmapCleanupHooks::isImageCached(const QImage &image)
+{
+ return const_cast<QImage &>(image).data_ptr()->is_cached;
+}
+
+bool QImagePixmapCleanupHooks::isPixmapCached(const QPixmap &pixmap)
+{
+ return const_cast<QPixmap&>(pixmap).data_ptr().data()->is_cached;
+}
+
+
+
QT_END_NAMESPACE
diff --git a/src/gui/image/qimagepixmapcleanuphooks_p.h b/src/gui/image/qimagepixmapcleanuphooks_p.h
index 88dd3a6..eae11f4 100644
--- a/src/gui/image/qimagepixmapcleanuphooks_p.h
+++ b/src/gui/image/qimagepixmapcleanuphooks_p.h
@@ -72,6 +72,9 @@ public:
static void enableCleanupHooks(const QPixmap &pixmap);
static void enableCleanupHooks(QPixmapData *pixmapData);
+ static bool isImageCached(const QImage &image);
+ static bool isPixmapCached(const QPixmap &pixmap);
+
// Gets called when a pixmap data is about to be modified:
void addPixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd);
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index d1e5c40..1df7946 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -1670,10 +1670,9 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode)
\o
The hasAlphaChannel() returns true if the pixmap has a format that
- respects the alpha channel, otherwise returns false, while the
- hasAlpha() function returns true if the pixmap has an alpha
- channel \e or a mask (otherwise false). The mask() function returns
- the mask as a QBitmap object, which can be set using setMask().
+ respects the alpha channel, otherwise returns false. The hasAlpha(),
+ setMask() and mask() functions are legacy and should not be used.
+ They are potentially very slow.
The createHeuristicMask() function creates and returns a 1-bpp
heuristic mask (i.e. a QBitmap) for this pixmap. It works by
@@ -1760,6 +1759,8 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode)
Returns true if this pixmap has an alpha channel, \e or has a
mask, otherwise returns false.
+ \warning This is potentially an expensive operation.
+
\sa hasAlphaChannel(), mask()
*/
bool QPixmap::hasAlpha() const
diff --git a/src/gui/painting/qcups.cpp b/src/gui/painting/qcups.cpp
index 7903762..ac41692 100644
--- a/src/gui/painting/qcups.cpp
+++ b/src/gui/painting/qcups.cpp
@@ -342,7 +342,9 @@ bool QCUPSSupport::printerHasPPD(const char *printerName)
{
if (!isAvailable())
return false;
- return _cupsGetPPD(printerName) != 0;
+ const char *ppdFile = _cupsGetPPD(printerName);
+ unlink(ppdFile);
+ return (ppdFile != 0);
}
QString QCUPSSupport::unicodeString(const char *s)
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 3bcaf8c..075c457 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -708,13 +708,14 @@ void QPainterPrivate::updateEmulationSpecifier(QPainterState *s)
bool penTextureAlpha = false;
if (penBrush.style() == Qt::TexturePattern)
penTextureAlpha = qHasPixmapTexture(penBrush)
- ? penBrush.texture().hasAlpha()
+ ? (penBrush.texture().depth() > 1) && penBrush.texture().hasAlpha()
: penBrush.textureImage().hasAlphaChannel();
bool brushTextureAlpha = false;
- if (s->brush.style() == Qt::TexturePattern)
+ if (s->brush.style() == Qt::TexturePattern) {
brushTextureAlpha = qHasPixmapTexture(s->brush)
- ? s->brush.texture().hasAlpha()
+ ? (s->brush.texture().depth() > 1) && s->brush.texture().hasAlpha()
: s->brush.textureImage().hasAlphaChannel();
+ }
if (((penBrush.style() == Qt::TexturePattern && penTextureAlpha)
|| (s->brush.style() == Qt::TexturePattern && brushTextureAlpha))
&& !engine->hasFeature(QPaintEngine::MaskedBrush))
diff --git a/src/gui/text/qfontdatabase_win.cpp b/src/gui/text/qfontdatabase_win.cpp
index 05c8f08..a6ceee1 100644
--- a/src/gui/text/qfontdatabase_win.cpp
+++ b/src/gui/text/qfontdatabase_win.cpp
@@ -336,8 +336,18 @@ void addFontToDatabase(QString familyName, const QString &scriptName,
signature->fsCsb[0], signature->fsCsb[1]
};
QList<QFontDatabase::WritingSystem> systems = determineWritingSystemsFromTrueTypeBits(unicodeRange, codePageRange);
- for (int i = 0; i < systems.count(); ++i)
- family->writingSystems[systems.at(i)] = QtFontFamily::Supported;
+
+ for (int i = 0; i < systems.count(); ++i) {
+ QFontDatabase::WritingSystem writingSystem = systems.at(i);
+
+ // ### Hack to work around problem with Thai text on Windows 7. Segoe UI contains
+ // the symbol for Baht, and Windows thus reports that it supports the Thai script.
+ // Since it's the default UI font on this platform, most widgets will be unable to
+ // display Thai text by default. As a temporary work around, we special case Segoe UI
+ // and remove the Thai script from its list of supported writing systems.
+ if (writingSystem != QFontDatabase::Thai || familyName != QLatin1String("Segoe UI"))
+ family->writingSystems[writingSystem] = QtFontFamily::Supported;
+ }
} else if (!family->writingSystemCheck) {
//qDebug("family='%s' script=%s", family->name.latin1(), script.latin1());
if (scriptName == QLatin1String("Western")
diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h
index 081697b..0f1c23c 100644
--- a/src/network/socket/qlocalsocket_p.h
+++ b/src/network/socket/qlocalsocket_p.h
@@ -128,10 +128,8 @@ public:
void _q_stateChanged(QAbstractSocket::SocketState newState);
void _q_error(QAbstractSocket::SocketError newError);
#elif defined(Q_OS_WIN)
- ~QLocalSocketPrivate() {
- CloseHandle(overlapped.hEvent);
- }
-
+ ~QLocalSocketPrivate();
+ void destroyPipeHandles();
void setErrorString(const QString &function);
void _q_notified();
void _q_canWrite();
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index 1f94df6..3283bf2 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -110,6 +110,20 @@ QLocalSocketPrivate::QLocalSocketPrivate() : QIODevicePrivate(),
{
}
+QLocalSocketPrivate::~QLocalSocketPrivate()
+{
+ destroyPipeHandles();
+ CloseHandle(overlapped.hEvent);
+}
+
+void QLocalSocketPrivate::destroyPipeHandles()
+{
+ if (handle != INVALID_HANDLE_VALUE) {
+ DisconnectNamedPipe(handle);
+ CloseHandle(handle);
+ }
+}
+
void QLocalSocket::connectToServer(const QString &name, OpenMode openMode)
{
Q_D(QLocalSocket);
@@ -388,8 +402,7 @@ void QLocalSocket::close()
d->readSequenceStarted = false;
d->pendingReadyRead = false;
d->pipeClosed = false;
- DisconnectNamedPipe(d->handle);
- CloseHandle(d->handle);
+ d->destroyPipeHandles();
d->handle = INVALID_HANDLE_VALUE;
ResetEvent(d->overlapped.hEvent);
d->state = UnconnectedState;
@@ -524,7 +537,10 @@ bool QLocalSocket::waitForDisconnected(int msecs)
bool QLocalSocket::isValid() const
{
Q_D(const QLocalSocket);
- return (d->handle != INVALID_HANDLE_VALUE);
+ if (d->handle == INVALID_HANDLE_VALUE)
+ return false;
+
+ return PeekNamedPipe(d->handle, NULL, 0, NULL, NULL, NULL);
}
bool QLocalSocket::waitForReadyRead(int msecs)
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 07f3159..8235a5c 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -1231,14 +1231,14 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
? QFontEngineGlyphCache::Type(ti.fontEngine->glyphFormat)
: d->glyphCacheType;
- if (txtype > QTransform::TxTranslate)
- glyphType = QFontEngineGlyphCache::Raster_A8;
- if (glyphType == QFontEngineGlyphCache::Raster_RGBMask
- && state()->composition_mode != QPainter::CompositionMode_Source
- && state()->composition_mode != QPainter::CompositionMode_SourceOver)
- {
- drawCached = false;
+ if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) {
+ if (d->device->alphaRequested() || txtype > QTransform::TxTranslate
+ || (state()->composition_mode != QPainter::CompositionMode_Source
+ && state()->composition_mode != QPainter::CompositionMode_SourceOver))
+ {
+ glyphType = QFontEngineGlyphCache::Raster_A8;
+ }
}
if (drawCached) {
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 0a89412..22b0602 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -1594,18 +1594,18 @@ QGLTextureCache::QGLTextureCache()
Q_ASSERT(qt_gl_texture_cache == 0);
qt_gl_texture_cache = this;
- QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTextures);
+ QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTexturesForPixampData);
QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(cleanupBeforePixmapDestruction);
- QImagePixmapCleanupHooks::instance()->addImageHook(imageCleanupHook);
+ QImagePixmapCleanupHooks::instance()->addImageHook(cleanupTexturesForCacheKey);
}
QGLTextureCache::~QGLTextureCache()
{
qt_gl_texture_cache = 0;
- QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTextures);
+ QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTexturesForPixampData);
QImagePixmapCleanupHooks::instance()->removePixmapDataDestructionHook(cleanupBeforePixmapDestruction);
- QImagePixmapCleanupHooks::instance()->removeImageHook(imageCleanupHook);
+ QImagePixmapCleanupHooks::instance()->removeImageHook(cleanupTexturesForCacheKey);
}
void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost)
@@ -1661,32 +1661,25 @@ QGLTextureCache* QGLTextureCache::instance()
a hook that removes textures from the cache when a pixmap/image
is deref'ed
*/
-void QGLTextureCache::imageCleanupHook(qint64 cacheKey)
+void QGLTextureCache::cleanupTexturesForCacheKey(qint64 cacheKey)
{
// ### remove when the GL texture cache becomes thread-safe
- if (qApp->thread() != QThread::currentThread())
- return;
- QGLTexture *texture = instance()->getTexture(cacheKey);
- if (texture && texture->options & QGLContext::MemoryManagedBindOption)
+ if (qApp->thread() == QThread::currentThread()) {
instance()->remove(cacheKey);
+ Q_ASSERT(instance()->getTexture(cacheKey) == 0);
+ }
}
-void QGLTextureCache::cleanupTextures(QPixmapData* pmd)
+void QGLTextureCache::cleanupTexturesForPixampData(QPixmapData* pmd)
{
- // ### remove when the GL texture cache becomes thread-safe
- if (qApp->thread() == QThread::currentThread()) {
- const qint64 cacheKey = pmd->cacheKey();
- QGLTexture *texture = instance()->getTexture(cacheKey);
- if (texture && texture->options & QGLContext::MemoryManagedBindOption)
- instance()->remove(cacheKey);
- }
+ cleanupTexturesForCacheKey(pmd->cacheKey());
}
void QGLTextureCache::cleanupBeforePixmapDestruction(QPixmapData* pmd)
{
// Remove any bound textures first:
- cleanupTextures(pmd);
+ cleanupTexturesForPixampData(pmd);
#if defined(Q_WS_X11)
if (pmd->classId() == QPixmapData::X11Class) {
@@ -2087,8 +2080,9 @@ QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
// NOTE: bindTexture(const QImage&, GLenum, GLint, const qint64, bool) should never return null
Q_ASSERT(texture);
- if (texture->id > 0)
- QImagePixmapCleanupHooks::enableCleanupHooks(image);
+ // Enable the cleanup hooks for this image so that the texture cache entry is removed when the
+ // image gets deleted:
+ QImagePixmapCleanupHooks::enableCleanupHooks(image);
return texture;
}
@@ -2142,6 +2136,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
int tx_h = qt_next_power_of_two(image.height());
QImage img = image;
+
if (!(QGLExtensions::glExtensions() & QGLExtensions::NPOTTextures)
&& !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0)
&& (target == GL_TEXTURE_2D && (tx_w != image.width() || tx_h != image.height())))
@@ -2310,6 +2305,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
int cost = img.width()*img.height()*4/1024;
QGLTexture *texture = new QGLTexture(q, tx_id, target, options);
QGLTextureCache::instance()->insert(q, key, texture, cost);
+
return texture;
}
@@ -2426,7 +2422,7 @@ GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format)
return 0;
Q_D(QGLContext);
- QGLTexture *texture = d->bindTexture(image, target, format, false, DefaultBindOption);
+ QGLTexture *texture = d->bindTexture(image, target, format, DefaultBindOption);
return texture->id;
}
@@ -2566,11 +2562,13 @@ void QGLContext::deleteTexture(GLuint id)
for (int i = 0; i < ddsKeys.size(); ++i) {
GLuint texture = dds_cache->value(ddsKeys.at(i));
if (id == texture) {
- glDeleteTextures(1, &texture);
dds_cache->remove(ddsKeys.at(i));
- return;
+ break;
}
}
+
+ // Finally, actually delete the texture ID
+ glDeleteTextures(1, &id);
}
#ifdef Q_MAC_COMPAT_GL_FUNCTIONS
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index da0887e..0d5a54a 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -540,8 +540,8 @@ public:
static QGLTextureCache *instance();
static void deleteIfEmpty();
- static void imageCleanupHook(qint64 cacheKey);
- static void cleanupTextures(QPixmapData* pixmap);
+ static void cleanupTexturesForCacheKey(qint64 cacheKey);
+ static void cleanupTexturesForPixampData(QPixmapData* pixmap);
static void cleanupBeforePixmapDestruction(QPixmapData* pixmap);
private:
diff --git a/src/opengl/qgl_qws.cpp b/src/opengl/qgl_qws.cpp
index d4adc8b..fd17a27 100644
--- a/src/opengl/qgl_qws.cpp
+++ b/src/opengl/qgl_qws.cpp
@@ -198,11 +198,6 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
// Get the display and initialize it.
d->eglContext = new QEglContext();
d->eglContext->setApi(QEgl::OpenGL);
- if (!d->eglContext->openDisplay(device())) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
// Construct the configuration we need for this surface.
QEglProperties configProps;
diff --git a/src/opengl/qgl_wince.cpp b/src/opengl/qgl_wince.cpp
index 00a125a..f81115c 100644
--- a/src/opengl/qgl_wince.cpp
+++ b/src/opengl/qgl_wince.cpp
@@ -155,11 +155,6 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
// Get the display and initialize it.
d->eglContext = new QEglContext();
d->eglContext->setApi(QEgl::OpenGL);
- if (!d->eglContext->openDisplay(device())) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
// Construct the configuration we need for this surface.
QEglProperties configProps;
diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp
index 61a16be..f0b06ef5 100644
--- a/src/opengl/qgl_x11.cpp
+++ b/src/opengl/qgl_x11.cpp
@@ -1656,8 +1656,11 @@ static bool qt_resolveTextureFromPixmap(QPaintDevice *paintDevice)
Display *display = xinfo ? xinfo->display() : X11->display;
int screen = xinfo ? xinfo->screen() : X11->defaultScreen;
- QGLExtensionMatcher extensions(glXQueryExtensionsString(display, screen));
- if (extensions.match("GLX_EXT_texture_from_pixmap")) {
+ QGLExtensionMatcher serverExtensions(glXQueryExtensionsString(display, screen));
+ QGLExtensionMatcher clientExtensions(glXGetClientString(display, GLX_EXTENSIONS));
+ if (serverExtensions.match("GLX_EXT_texture_from_pixmap")
+ && clientExtensions.match("GLX_EXT_texture_from_pixmap"))
+ {
glXBindTexImageEXT = (qt_glXBindTexImageEXT) qglx_getProcAddress("glXBindTexImageEXT");
glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) qglx_getProcAddress("glXReleaseTexImageEXT");
}
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index 572834b..3d183ee 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -190,11 +190,6 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
if (d->eglContext == 0) {
d->eglContext = new QEglContext();
d->eglContext->setApi(QEgl::OpenGL);
- if (!d->eglContext->openDisplay(device())) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
// Construct the configuration we need for this surface.
QEglProperties configProps;
@@ -614,7 +609,7 @@ EGLConfig Q_OPENGL_EXPORT qt_chooseEGLConfigForPixmap(bool hasAlpha, bool readOn
EGLint configCount = 0;
do {
- eglChooseConfig(QEglContext::defaultDisplay(0), configAttribs.properties(), targetConfig, 1, &configCount);
+ eglChooseConfig(QEglContext::display(), configAttribs.properties(), targetConfig, 1, &configCount);
if (configCount > 0) {
// Got one
qDebug() << "Found an" << (hasAlpha ? "ARGB" : "RGB") << (readOnly ? "readonly" : "target" )
@@ -653,7 +648,7 @@ bool Q_OPENGL_EXPORT qt_createEGLSurfaceForPixmap(QPixmapData* pmd, bool readOnl
pixmapAttribs.setValue(EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB);
EGLSurface pixmapSurface;
- pixmapSurface = eglCreatePixmapSurface(QEglContext::defaultDisplay(0),
+ pixmapSurface = eglCreatePixmapSurface(QEglContext::display(),
pixmapConfig,
(EGLNativePixmapType) pixmapData->handle(),
pixmapAttribs.properties());
@@ -762,7 +757,7 @@ void QGLContextPrivate::destroyGlSurfaceForPixmap(QPixmapData* pmd)
QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd);
if (pixmapData->gl_surface) {
EGLBoolean success;
- success = eglDestroySurface(QEglContext::defaultDisplay(0), (EGLSurface)pixmapData->gl_surface);
+ success = eglDestroySurface(QEglContext::display(), (EGLSurface)pixmapData->gl_surface);
if (success == EGL_FALSE) {
qWarning() << "destroyGlSurfaceForPixmap() - Error deleting surface: "
<< QEglContext::errorString(eglGetError());
@@ -777,7 +772,7 @@ void QGLContextPrivate::unbindPixmapFromTexture(QPixmapData* pmd)
QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd);
if (pixmapData->gl_surface) {
EGLBoolean success;
- success = eglReleaseTexImage(QEglContext::defaultDisplay(0),
+ success = eglReleaseTexImage(QEglContext::display(),
(EGLSurface)pixmapData->gl_surface,
EGL_BACK_BUFFER);
if (success == EGL_FALSE) {
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index ce80796..dd6a3d5 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -329,6 +329,13 @@ void QGLFBOGLPaintDevice::setFBO(QGLFramebufferObject* f,
} else if (attachment == QGLFramebufferObject::Depth) {
fboFormat.setDepth(true);
}
+
+ GLenum format = f->format().internalTextureFormat();
+ reqAlpha = (format != GL_RGB
+#ifndef QT_OPENGL_ES
+ && format != GL_RGB5 && format != GL_RGB8
+#endif
+ );
}
QGLContext *QGLFBOGLPaintDevice::context() const
diff --git a/src/opengl/qglframebufferobject_p.h b/src/opengl/qglframebufferobject_p.h
index d7f96a5..d8ff012 100644
--- a/src/opengl/qglframebufferobject_p.h
+++ b/src/opengl/qglframebufferobject_p.h
@@ -111,14 +111,16 @@ public:
virtual QSize size() const {return fbo->size();}
virtual QGLContext* context() const;
virtual QGLFormat format() const {return fboFormat;}
+ virtual bool alphaRequested() const { return reqAlpha; }
void setFBO(QGLFramebufferObject* f,
QGLFramebufferObject::Attachment attachment);
private:
- bool wasBound;
QGLFramebufferObject* fbo;
QGLFormat fboFormat;
+ bool wasBound;
+ bool reqAlpha;
};
class QGLFramebufferObjectPrivate
diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp
index 7697570..8ba0108 100644
--- a/src/opengl/qglpaintdevice.cpp
+++ b/src/opengl/qglpaintdevice.cpp
@@ -128,6 +128,11 @@ QGLFormat QGLPaintDevice::format() const
return context()->format();
}
+bool QGLPaintDevice::alphaRequested() const
+{
+ return context()->d_func()->reqFormat.alpha();
+}
+
diff --git a/src/opengl/qglpaintdevice_p.h b/src/opengl/qglpaintdevice_p.h
index 9815467..3d669da 100644
--- a/src/opengl/qglpaintdevice_p.h
+++ b/src/opengl/qglpaintdevice_p.h
@@ -75,6 +75,7 @@ public:
virtual QGLContext* context() const = 0;
virtual QGLFormat format() const;
virtual QSize size() const = 0;
+ virtual bool alphaRequested() const;
// returns the QGLPaintDevice for the given QPaintDevice
static QGLPaintDevice* getDevice(QPaintDevice*);
diff --git a/src/opengl/qglpixelbuffer_egl.cpp b/src/opengl/qglpixelbuffer_egl.cpp
index ca19011..dbe919d 100644
--- a/src/opengl/qglpixelbuffer_egl.cpp
+++ b/src/opengl/qglpixelbuffer_egl.cpp
@@ -65,13 +65,6 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge
ctx = new QEglContext();
ctx->setApi(QEgl::OpenGL);
- // Open the EGL display.
- if (!ctx->openDisplay(0)) {
- delete ctx;
- ctx = 0;
- return false;
- }
-
// Find the shared context.
QEglContext *shareContext = 0;
if (shareWidget && shareWidget->d_func()->glcx)
@@ -215,7 +208,7 @@ GLuint QGLPixelBuffer::generateDynamicTexture() const
bool QGLPixelBuffer::hasOpenGLPbuffers()
{
// See if we have at least 1 configuration that matches the default format.
- EGLDisplay dpy = QEglContext::defaultDisplay(0);
+ EGLDisplay dpy = QEglContext::display();
if (dpy == EGL_NO_DISPLAY)
return false;
QEglProperties configProps;
diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp
index aa80664..653e805 100644
--- a/src/opengl/qpixmapdata_gl.cpp
+++ b/src/opengl/qpixmapdata_gl.cpp
@@ -234,6 +234,11 @@ QSize QGLPixmapGLPaintDevice::size() const
return data->size();
}
+bool QGLPixmapGLPaintDevice::alphaRequested() const
+{
+ return data->m_hasAlpha;
+}
+
void QGLPixmapGLPaintDevice::setPixmapData(QGLPixmapData* d)
{
data = d;
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index e3ba5f8..c239bcb 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -88,6 +88,7 @@ public:
void endPaint();
QGLContext* context() const;
QSize size() const;
+ bool alphaRequested() const;
void setPixmapData(QGLPixmapData*);
private:
diff --git a/src/opengl/qpixmapdata_x11gl_egl.cpp b/src/opengl/qpixmapdata_x11gl_egl.cpp
index 55aa1d0..229f75a 100644
--- a/src/opengl/qpixmapdata_x11gl_egl.cpp
+++ b/src/opengl/qpixmapdata_x11gl_egl.cpp
@@ -96,14 +96,14 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
#endif
EGL_NONE
};
- qPixmapARGBSharedEglContext = eglCreateContext(QEglContext::defaultDisplay(0),
+ qPixmapARGBSharedEglContext = eglCreateContext(QEglContext::display(),
argbConfig, 0, contextAttribs);
if (argbConfig == rgbConfig) {
// If the configs are the same, we can re-use the same context.
qPixmapRGBSharedEglContext = qPixmapARGBSharedEglContext;
} else {
- qPixmapRGBSharedEglContext = eglCreateContext(QEglContext::defaultDisplay(0),
+ qPixmapRGBSharedEglContext = eglCreateContext(QEglContext::display(),
rgbConfig, 0, contextAttribs);
}
@@ -114,7 +114,7 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
if (!qt_createEGLSurfaceForPixmap(argbPixmapData, false))
break;
- haveX11Pixmaps = eglMakeCurrent(QEglContext::defaultDisplay(0),
+ haveX11Pixmaps = eglMakeCurrent(QEglContext::display(),
(EGLSurface)argbPixmapData->gl_surface,
(EGLSurface)argbPixmapData->gl_surface,
qPixmapARGBSharedEglContext);
@@ -134,7 +134,7 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
if (!qt_createEGLSurfaceForPixmap(rgbPixmapData, false))
break;
- haveX11Pixmaps = eglMakeCurrent(QEglContext::defaultDisplay(0),
+ haveX11Pixmaps = eglMakeCurrent(QEglContext::display(),
(EGLSurface)rgbPixmapData->gl_surface,
(EGLSurface)rgbPixmapData->gl_surface,
qPixmapRGBSharedEglContext);
@@ -147,7 +147,7 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
} while (0);
if (qPixmapARGBSharedEglContext || qPixmapRGBSharedEglContext) {
- eglMakeCurrent(QEglContext::defaultDisplay(0),
+ eglMakeCurrent(QEglContext::display(),
EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
}
@@ -167,12 +167,12 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
if (!haveX11Pixmaps) {
// Clean up the context(s) if we can't use X11GL pixmaps
if (qPixmapARGBSharedEglContext != EGL_NO_CONTEXT)
- eglDestroyContext(QEglContext::defaultDisplay(0), qPixmapARGBSharedEglContext);
+ eglDestroyContext(QEglContext::display(), qPixmapARGBSharedEglContext);
if (qPixmapRGBSharedEglContext != qPixmapARGBSharedEglContext &&
qPixmapRGBSharedEglContext != EGL_NO_CONTEXT)
{
- eglDestroyContext(QEglContext::defaultDisplay(0), qPixmapRGBSharedEglContext);
+ eglDestroyContext(QEglContext::display(), qPixmapRGBSharedEglContext);
}
qPixmapRGBSharedEglContext = EGL_NO_CONTEXT;
qPixmapARGBSharedEglContext = EGL_NO_CONTEXT;
@@ -212,7 +212,6 @@ QPaintEngine* QX11GLPixmapData::paintEngine() const
ctx = new QGLContext(glFormat());
if (ctx->d_func()->eglContext == 0)
ctx->d_func()->eglContext = new QEglContext();
- ctx->d_func()->eglContext->openDisplay(0); // ;-)
ctx->d_func()->eglContext->setApi(QEgl::OpenGL);
ctx->d_func()->eglContext->setContext(hasAlphaChannel() ? qPixmapARGBSharedEglContext
: qPixmapRGBSharedEglContext);
diff --git a/src/openvg/qwindowsurface_vgegl.cpp b/src/openvg/qwindowsurface_vgegl.cpp
index d92870f..9c44545 100644
--- a/src/openvg/qwindowsurface_vgegl.cpp
+++ b/src/openvg/qwindowsurface_vgegl.cpp
@@ -225,10 +225,6 @@ static QEglContext *createContext(QPaintDevice *device)
// Create the context object and open the display.
context = new QEglContext();
context->setApi(QEgl::OpenVG);
- if (!context->openDisplay(device)) {
- delete context;
- return 0;
- }
// Set the swap interval for the display.
QByteArray interval = qgetenv("QT_VG_SWAP_INTERVAL");
diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri
index 3af8b40..3fd3657 100644
--- a/src/plugins/qpluginbase.pri
+++ b/src/plugins/qpluginbase.pri
@@ -1,6 +1,6 @@
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.2
+ VERSION=4.6.3
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/src/qbase.pri b/src/qbase.pri
index 710a2b6..db55365 100644
--- a/src/qbase.pri
+++ b/src/qbase.pri
@@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat
isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.2
+ VERSION=4.6.3
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index 1c2db2f..5eff8a8 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -1113,6 +1113,14 @@ static void qParseArgs(int argc, char *argv[])
#endif
} else if (strcmp(argv[i], "-qws") == 0) {
// do nothing
+ } else if (strcmp(argv[i], "-graphicssystem") == 0) {
+ // do nothing
+ if (i + 1 >= argc) {
+ printf("-graphicssystem needs an extra parameter specifying the graphics system\n");
+ exit(1);
+ } else {
+ ++i;
+ }
} else if (argv[i][0] == '-') {
printf("Unknown option: '%s'\n\n%s", argv[i], testOptions);
exit(1);
diff --git a/tests/auto/mediaobject/dummy/dummy.pro b/tests/auto/mediaobject/dummy/dummy.pro
index 2f27c4a..cf1010e 100644
--- a/tests/auto/mediaobject/dummy/dummy.pro
+++ b/tests/auto/mediaobject/dummy/dummy.pro
@@ -1,7 +1,7 @@
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.2
+ VERSION=4.6.3
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp
index d37d727..2983af3 100644
--- a/tests/auto/qgl/tst_qgl.cpp
+++ b/tests/auto/qgl/tst_qgl.cpp
@@ -57,6 +57,8 @@
#ifdef QT_BUILD_INTERNAL
#include <QtOpenGL/private/qgl_p.h>
#include <QtGui/private/qpixmapdata_p.h>
+#include <QtGui/private/qimage_p.h>
+#include <QtGui/private/qimagepixmapcleanuphooks_p.h>
#endif
//TESTED_CLASS=
@@ -1947,7 +1949,6 @@ void tst_QGL::qglContextDefaultBindTexture()
#ifdef QT_BUILD_INTERNAL
QGLWidget w;
w.makeCurrent();
-
QGLContext *ctx = const_cast<QGLContext*>(w.context());
QImage *boundImage = new QImage(256, 256, QImage::Format_RGB32);
@@ -1955,29 +1956,36 @@ void tst_QGL::qglContextDefaultBindTexture()
QPixmap *boundPixmap = new QPixmap(256, 256);
boundPixmap->fill(Qt::red);
- // Check that calling QGLContext::bindTexture with default args adds textures to cache
int startCacheItemCount = QGLTextureCache::instance()->size();
+
GLuint boundImageTextureId = ctx->bindTexture(*boundImage);
GLuint boundPixmapTextureId = ctx->bindTexture(*boundPixmap);
+
+ // Make sure the image & pixmap have been added to the cache:
QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2);
+ // Make sure the image & pixmap have the is_cached flag set:
+ QVERIFY(QImagePixmapCleanupHooks::isImageCached(*boundImage));
+ QVERIFY(QImagePixmapCleanupHooks::isPixmapCached(*boundPixmap));
+
// Make sure the texture IDs returned are valid:
QCOMPARE((bool)glIsTexture(boundImageTextureId), GL_TRUE);
QCOMPARE((bool)glIsTexture(boundPixmapTextureId), GL_TRUE);
- // Make sure the textures are still there after we delete the image/pixmap:
+ // Make sure the textures are still valid after we delete the image/pixmap:
+ // Also check that although the textures are left intact, the cache entries are removed:
delete boundImage;
boundImage = 0;
+ QCOMPARE((bool)glIsTexture(boundImageTextureId), GL_TRUE);
+ QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1);
delete boundPixmap;
boundPixmap = 0;
- QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2);
+ QCOMPARE((bool)glIsTexture(boundPixmapTextureId), GL_TRUE);
+ QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount);
- // Make sure the textures are deleted from the cache after calling QGLContext::deleteTexture()
+ // Finally, make sure QGLContext::deleteTexture deletes the texture IDs:
ctx->deleteTexture(boundImageTextureId);
ctx->deleteTexture(boundPixmapTextureId);
- QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount);
-
- // Finally, make sure QGLContext::deleteTexture also deleted the texture IDs:
QCOMPARE((bool)glIsTexture(boundImageTextureId), GL_FALSE);
QCOMPARE((bool)glIsTexture(boundPixmapTextureId), GL_FALSE);
#endif
diff --git a/tests/auto/qtextcodec/tst_qtextcodec.cpp b/tests/auto/qtextcodec/tst_qtextcodec.cpp
index 65b0448..aa97e87 100644
--- a/tests/auto/qtextcodec/tst_qtextcodec.cpp
+++ b/tests/auto/qtextcodec/tst_qtextcodec.cpp
@@ -1795,12 +1795,12 @@ void tst_QTextCodec::utfHeaders()
QLatin1String ignoreReverseTestOn = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? QLatin1String(" le") : QLatin1String(" be");
QString rowName(QTest::currentDataTag());
- for (int i = 0; i < encoded.length(); ++i)
- qDebug() << hex << " " << (uint)(uchar)encoded.at(i);
+ /*for (int i = 0; i < encoded.length(); ++i)
+ qDebug() << hex << " " << (uint)(uchar)encoded.at(i);*/
if (toUnicode) {
QString result = codec->toUnicode(encoded.constData(), encoded.length(), &state);
- for (int i = 0; i < result.length(); ++i)
- qDebug() << hex << " " << (uint)result.at(i).unicode();
+ /*for (int i = 0; i < result.length(); ++i)
+ qDebug() << hex << " " << (uint)result.at(i).unicode();*/
QCOMPARE(result.length(), unicode.length());
QCOMPARE(result, unicode);
@@ -1939,7 +1939,7 @@ static int loadAndConvertMIB(int mib)
void tst_QTextCodec::threadSafety()
{
QThreadPool::globalInstance()->setMaxThreadCount(12);
-
+
QList<QByteArray> codecList = QTextCodec::availableCodecs();
QFuture<QByteArray> res = QtConcurrent::mapped(codecList, loadAndConvert);
diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt
index 1b65adf..b7c5665 100644
--- a/tests/auto/selftests/expected_cmptest.txt
+++ b/tests/auto/selftests/expected_cmptest.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Cmptest *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
PASS : tst_Cmptest::initTestCase()
PASS : tst_Cmptest::compare_boolfuncs()
PASS : tst_Cmptest::compare_pointerfuncs()
diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt
index aabe83d..71d79ca 100644
--- a/tests/auto/selftests/expected_crashes_3.txt
+++ b/tests/auto/selftests/expected_crashes_3.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Crashes *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
PASS : tst_Crashes::initTestCase()
QFATAL : tst_Crashes::crash() Received signal 11
FAIL! : tst_Crashes::crash() Received a fatal error.
diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt
index 3fe237a..5d94e23 100644
--- a/tests/auto/selftests/expected_longstring.txt
+++ b/tests/auto/selftests/expected_longstring.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_LongString *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
PASS : tst_LongString::initTestCase()
FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt
index 8bafeff..0da1799 100644
--- a/tests/auto/selftests/expected_maxwarnings.txt
+++ b/tests/auto/selftests/expected_maxwarnings.txt
@@ -1,5 +1,5 @@
********* Start testing of MaxWarnings *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
PASS : MaxWarnings::initTestCase()
QWARN : MaxWarnings::warn() 0
QWARN : MaxWarnings::warn() 1
diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt
index c4ef92d..c603913 100644
--- a/tests/auto/selftests/expected_skip.txt
+++ b/tests/auto/selftests/expected_skip.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Skip *********
-Config: Using QTest library 4.6.2, Qt 4.6.2
+Config: Using QTest library 4.6.3, Qt 4.6.3
PASS : tst_Skip::initTestCase()
SKIP : tst_Skip::test() skipping all
Loc: [/home/rmcgover/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)]
diff --git a/tests/auto/uic/baseline/config_fromuic3.ui.h b/tests/auto/uic/baseline/config_fromuic3.ui.h
index 6e22dc7..c77b303 100644
--- a/tests/auto/uic/baseline/config_fromuic3.ui.h
+++ b/tests/auto/uic/baseline/config_fromuic3.ui.h
@@ -45,7 +45,7 @@
** Form generated from reading UI file 'config_fromuic3.ui'
**
** Created: Thu Dec 17 12:48:42 2009
-** by: Qt User Interface Compiler version 4.6.2
+** by: Qt User Interface Compiler version 4.6.3
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
diff --git a/tests/benchmarks/corelib/codecs/codecs.pro b/tests/benchmarks/corelib/codecs/codecs.pro
new file mode 100644
index 0000000..dab324b
--- /dev/null
+++ b/tests/benchmarks/corelib/codecs/codecs.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = qtextcodec
+
diff --git a/tests/benchmarks/corelib/codecs/qtextcodec/main.cpp b/tests/benchmarks/corelib/codecs/qtextcodec/main.cpp
new file mode 100644
index 0000000..50d8b9d
--- /dev/null
+++ b/tests/benchmarks/corelib/codecs/qtextcodec/main.cpp
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QTextCodec>
+#include <QFile>
+#include <qtest.h>
+
+#ifdef Q_OS_SYMBIAN
+// In Symbian OS test data is located in applications private dir
+// Application private dir is default serach path for files, so SRCDIR can be set to empty
+#define SRCDIR ""
+#endif
+
+Q_DECLARE_METATYPE(QList<QByteArray>)
+Q_DECLARE_METATYPE(QTextCodec *)
+
+class tst_QTextCodec: public QObject
+{
+ Q_OBJECT
+private slots:
+ void codecForName() const;
+ void codecForName_data() const;
+ void codecForMib() const;
+ void fromUnicode_data() const;
+ void fromUnicode() const;
+ void toUnicode_data() const;
+ void toUnicode() const;
+};
+
+void tst_QTextCodec::codecForName() const
+{
+ QFETCH(QList<QByteArray>, codecs);
+
+ QBENCHMARK {
+ foreach(const QByteArray& c, codecs) {
+ QVERIFY(QTextCodec::codecForName(c));
+ QVERIFY(QTextCodec::codecForName(c + "-"));
+ }
+ foreach(const QByteArray& c, codecs) {
+ QVERIFY(QTextCodec::codecForName(c + "+"));
+ QVERIFY(QTextCodec::codecForName(c + "*"));
+ }
+ }
+}
+
+void tst_QTextCodec::codecForName_data() const
+{
+ QTest::addColumn<QList<QByteArray> >("codecs");
+
+ QTest::newRow("all") << QTextCodec::availableCodecs();
+ QTest::newRow("many utf-8") << (QList<QByteArray>()
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8"
+ << "utf-8" << "utf-8" << "utf-8" << "utf-8" << "utf-8" );
+}
+
+void tst_QTextCodec::codecForMib() const
+{
+ QBENCHMARK {
+ QTextCodec::codecForMib(106);
+ QTextCodec::codecForMib(111);
+ QTextCodec::codecForMib(106);
+ QTextCodec::codecForMib(2254);
+ QTextCodec::codecForMib(2255);
+ QTextCodec::codecForMib(2256);
+ QTextCodec::codecForMib(2257);
+ QTextCodec::codecForMib(2258);
+ QTextCodec::codecForMib(111);
+ QTextCodec::codecForMib(2250);
+ QTextCodec::codecForMib(2251);
+ QTextCodec::codecForMib(2252);
+ QTextCodec::codecForMib(106);
+ QTextCodec::codecForMib(106);
+ QTextCodec::codecForMib(106);
+ QTextCodec::codecForMib(106);
+ }
+}
+
+void tst_QTextCodec::fromUnicode_data() const
+{
+ QTest::addColumn<QTextCodec*>("codec");
+
+ QTest::newRow("utf-8") << QTextCodec::codecForName("utf-8");
+ QTest::newRow("latin 1") << QTextCodec::codecForName("latin 1");
+ QTest::newRow("utf-16") << QTextCodec::codecForName("utf16"); ;
+ QTest::newRow("utf-32") << QTextCodec::codecForName("utf32");
+ QTest::newRow("latin15") << QTextCodec::codecForName("iso-8859-15");
+ QTest::newRow("eucKr") << QTextCodec::codecForName("eucKr");
+}
+
+
+void tst_QTextCodec::fromUnicode() const
+{
+ QFETCH(QTextCodec*, codec);
+ QFile file(SRCDIR "utf-8.txt");
+ if (!file.open(QFile::ReadOnly)) {
+ qFatal("Cannot open input file");
+ return;
+ }
+ QByteArray data = file.readAll();
+ const char *d = data.constData();
+ int size = data.size();
+ QString s = QString::fromUtf8(d, size);
+ s = s + s + s;
+ s = s + s + s;
+ QBENCHMARK {
+ for (int i = 0; i < 10; i ++)
+ codec->fromUnicode(s);
+ }
+}
+
+
+void tst_QTextCodec::toUnicode_data() const
+{
+ fromUnicode_data();
+}
+
+
+void tst_QTextCodec::toUnicode() const
+{
+ QFETCH(QTextCodec*, codec);
+ QFile file(SRCDIR "utf-8.txt");
+ QVERIFY(file.open(QFile::ReadOnly));
+ QByteArray data = file.readAll();
+ const char *d = data.constData();
+ int size = data.size();
+ QString s = QString::fromUtf8(d, size);
+ s = s + s + s;
+ s = s + s + s;
+ QByteArray orig = codec->fromUnicode(s);
+ QBENCHMARK {
+ for (int i = 0; i < 10; i ++)
+ codec->toUnicode(orig);
+ }
+}
+
+
+
+
+QTEST_MAIN(tst_QTextCodec)
+
+#include "main.moc"
diff --git a/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro b/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
new file mode 100644
index 0000000..3167f26
--- /dev/null
+++ b/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
@@ -0,0 +1,16 @@
+load(qttest_p4)
+TARGET = tst_qtextcodec
+QT -= gui
+SOURCES += main.cpp
+
+wince*:{
+ DEFINES += SRCDIR=\\\"\\\"
+} else:symbian* {
+ addFiles.sources = utf-8.txt
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+ TARGET.EPOCHEAPSIZE="0x100 0x1000000"
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD/\\\"
+}
+
diff --git a/tests/benchmarks/corelib/codecs/qtextcodec/utf-8.txt b/tests/benchmarks/corelib/codecs/qtextcodec/utf-8.txt
new file mode 100644
index 0000000..a8a58de
--- /dev/null
+++ b/tests/benchmarks/corelib/codecs/qtextcodec/utf-8.txt
@@ -0,0 +1,72 @@
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: РуÑÑкий
+언어 : 한국어
+言語: 日本語
+Langage : Français
diff --git a/tests/benchmarks/corelib/corelib.pro b/tests/benchmarks/corelib/corelib.pro
index 72fca33..7669e0a 100644
--- a/tests/benchmarks/corelib/corelib.pro
+++ b/tests/benchmarks/corelib/corelib.pro
@@ -3,4 +3,5 @@ SUBDIRS = \
io \
kernel \
thread \
- tools
+ tools \
+ codecs
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.pro b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.pro
new file mode 100644
index 0000000..131ec12
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.pro
@@ -0,0 +1,71 @@
+load(qttest_p4)
+TEMPLATE = app
+
+QT += svg
+contains(QT_CONFIG, opengl):QT += opengl
+
+HEADERS += widgets/gvbwidget.h \
+ widgets/abstractscrollarea.h \
+ widgets/mainview.h \
+ widgets/iconitem.h \
+ widgets/label.h \
+ widgets/listitem.h \
+ widgets/scrollbar.h \
+ widgets/simplelistview.h \
+ widgets/scroller.h \
+ widgets/scroller_p.h \
+ widgets/button.h \
+ widgets/menu.h \
+ widgets/themeevent.h \
+ widgets/theme.h \
+ widgets/backgrounditem.h \
+ widgets/topbar.h \
+ widgets/commandline.h \
+ widgets/dummydatagen.h \
+ widgets/settings.h \
+ widgets/listitemcache.h \
+ widgets/listwidget.h \
+ widgets/simplelist.h \
+ widgets/itemrecyclinglist.h \
+ widgets/itemrecyclinglistview.h \
+ widgets/abstractitemview.h \
+ widgets/abstractviewitem.h \
+ widgets/recycledlistitem.h \
+ widgets/listitemcontainer.h \
+ widgets/abstractitemcontainer.h \
+ widgets/listmodel.h
+
+SOURCES += main.cpp \
+ widgets/gvbwidget.cpp \
+ widgets/abstractscrollarea.cpp \
+ widgets/mainview.cpp \
+ widgets/iconitem.cpp \
+ widgets/label.cpp \
+ widgets/listitem.cpp \
+ widgets/scrollbar.cpp \
+ widgets/simplelistview.cpp \
+ widgets/scroller.cpp \
+ widgets/button.cpp \
+ widgets/menu.cpp \
+ widgets/themeevent.cpp \
+ widgets/theme.cpp \
+ widgets/backgrounditem.cpp \
+ widgets/topbar.cpp \
+ widgets/commandline.cpp \
+ widgets/dummydatagen.cpp \
+ widgets/settings.cpp \
+ widgets/listitemcache.cpp \
+ widgets/listwidget.cpp \
+ widgets/simplelist.cpp \
+ widgets/itemrecyclinglist.cpp \
+ widgets/itemrecyclinglistview.cpp \
+ widgets/abstractitemview.cpp \
+ widgets/abstractviewitem.cpp \
+ widgets/recycledlistitem.cpp \
+ widgets/listitemcontainer.cpp \
+ widgets/abstractitemcontainer.cpp \
+ widgets/listmodel.cpp
+
+TARGET = tst_GraphicsViewBenchmark
+RESOURCES += GraphicsViewBenchmark.qrc
+INCLUDEPATH += widgets
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.qrc b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.qrc
new file mode 100644
index 0000000..18ae04d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/GraphicsViewBenchmark.qrc
@@ -0,0 +1,85 @@
+<RCC>
+ <qresource prefix="/themes/blue">
+ <file alias="background.svg">resources/blue_SVG/blue_background_360x640px.svg</file>
+ <file alias="background_horisontal.svg">resources/blue_SVG/blue_background_horisontal_640x360px.svg</file>
+ <file alias="contact_default_icon.svg">resources/blue_SVG/blue_contact_default_icon_52x52px.svg</file>
+ <file alias="contact_list_divider.svg">resources/blue_SVG/blue_contact_list_divider_360x76px.svg</file>
+ <file alias="contact_list_highlighter.svg">resources/blue_SVG/blue_contact_list_highlighter_360x76px.svg</file>
+ <file alias="contact_status_idle.svg">resources/blue_SVG/blue_contact_status_idle_33x33px.svg</file>
+ <file alias="contact_status_offline.svg">resources/blue_SVG/blue_contact_status_offline_33x33px.svg</file>
+ <file alias="contact_status_online.svg">resources/blue_SVG/blue_contact_status_online_33x33px.svg</file>
+ <file alias="scrollbar.svg">resources/blue_SVG/blue_scrollbar_7x14px.svg</file>
+ <file alias="scroll.svg">resources/blue_SVG/blue_scroll_16x80px.svg</file>
+ <file alias="status_field_left.svg">resources/blue_SVG/blue_status_field_left_14x24px.svg</file>
+ <file alias="status_field_middle.svg">resources/blue_SVG/blue_status_field_middle_14x24px.svg</file>
+ <file alias="status_field_right.svg">resources/blue_SVG/blue_status_field_right_14x24px.svg</file>
+ <file alias="topbar.svg">resources/blue_SVG/blue_topbar_356x96px.svg</file>
+ <file alias="topbar_horisontal.svg">resources/blue_SVG/blue_topbar_horisontal_636x96px.svg</file>
+ <file alias="user_default_icon.svg">resources/blue_SVG/blue_user_default_icon_68x68px.svg</file>
+ <file alias="user_status_idle.svg">resources/blue_SVG/blue_user_status_idle_38x38px.svg</file>
+ <file alias="user_status_offline.svg">resources/blue_SVG/blue_user_status_offline_38x38px.svg</file>
+ <file alias="user_status_online.svg">resources/blue_SVG/blue_user_status_online_38x38px.svg</file>
+ </qresource>
+
+ <qresource prefix="/themes/lime">
+ <file alias="background.svg">resources/lime_SVG/lime_background_360x640px.svg</file>
+ <file alias="background_horisontal.svg">resources/lime_SVG/lime_background_horisontal_640x360px.svg</file>
+ <file alias="contact_default_icon.svg">resources/lime_SVG/lime_contact_default_icon_53x53px.svg</file>
+ <file alias="contact_default_icon_highlight.svg">resources/lime_SVG/lime_contact_default_icon_highlight_53x53px.svg</file>
+ <file alias="contact_list_divider.svg">resources/lime_SVG/lime_contact_list_divider_360x76px.svg</file>
+ <file alias="contact_list_highlighter.svg">resources/lime_SVG/lime_contact_list_highlighter_357x80px.svg</file>
+ <file alias="contact_status_idle.svg">resources/blue_SVG/blue_contact_status_idle_33x33px.svg</file>
+ <file alias="contact_status_offline.svg">resources/blue_SVG/blue_contact_status_offline_33x33px.svg</file>
+ <file alias="contact_status_online.svg">resources/blue_SVG/blue_contact_status_online_33x33px.svg</file>
+ <file alias="scrollbar.svg">resources/lime_SVG/lime_scrollbar_5x14px.svg</file>
+ <file alias="scroll.svg">resources/lime_SVG/lime_scroll_5x80px.svg</file>
+ <file alias="status_field_left.svg">resources/lime_SVG/lime_status_field_left_14x24px.svg</file>
+ <file alias="status_field_middle.svg">resources/lime_SVG/lime_status_field_middle_10x24px.svg</file>
+ <file alias="status_field_right.svg">resources/lime_SVG/lime_status_field_right_14x24px.svg</file>
+ <file alias="topbar.svg">resources/lime_SVG/lime_topbar_356x96px.svg</file>
+ <file alias="topbar_horisontal.svg">resources/lime_SVG/lime_topbar_horisontal_636x96px.svg</file>
+ <file alias="user_default_icon.svg">resources/lime_SVG/lime_user_default_icon_84x68px.svg</file>
+ <file alias="user_status_idle.svg">resources/lime_SVG/lime_user_status_idle_24x24px.svg</file>
+ <file alias="user_status_offline.svg">resources/lime_SVG/lime_user_status_offline_24x24px.svg</file>
+ <file alias="user_status_online.svg">resources/lime_SVG/lime_user_status_online_24x24px.svg</file>
+ </qresource>
+
+ <qresource prefix="/avatars">
+ <file alias="avatar_001.png">resources/avatars/avatar_man_001_58x58.png</file>
+ <file alias="avatar_002.png">resources/avatars/avatar_man_002_58x58.png</file>
+ <file alias="avatar_003.png">resources/avatars/avatar_man_003_58x58.png</file>
+ <file alias="avatar_004.png">resources/avatars/avatar_man_004_58x58.png</file>
+ <file alias="avatar_005.png">resources/avatars/avatar_man_005_58x58.png</file>
+ <file alias="avatar_006.png">resources/avatars/avatar_man_006_58x58.png</file>
+ <file alias="avatar_007.png">resources/avatars/avatar_man_007_58x58.png</file>
+ <file alias="avatar_008.png">resources/avatars/avatar_man_008_58x58.png</file>
+ <file alias="avatar_009.png">resources/avatars/avatar_man_009_58x58.png</file>
+ <file alias="avatar_010.png">resources/avatars/avatar_man_010_58x58.png</file>
+
+ <file alias="avatar_011.png">resources/avatars/avatar_picture_001_58x58.png</file>
+ <file alias="avatar_012.png">resources/avatars/avatar_picture_002_58x58.png</file>
+ <file alias="avatar_013.png">resources/avatars/avatar_picture_003_58x58.png</file>
+ <file alias="avatar_014.png">resources/avatars/avatar_picture_004_58x58.png</file>
+ <file alias="avatar_015.png">resources/avatars/avatar_picture_005_58x58.png</file>
+
+ <file alias="avatar_016.png">resources/avatars/avatar_woman_001_58x58.png</file>
+ <file alias="avatar_017.png">resources/avatars/avatar_woman_002_58x58.png</file>
+ <file alias="avatar_018.png">resources/avatars/avatar_woman_003_58x58.png</file>
+ <file alias="avatar_019.png">resources/avatars/avatar_woman_004_58x58.png</file>
+ <file alias="avatar_020.png">resources/avatars/avatar_woman_005_58x58.png</file>
+ <file alias="avatar_021.png">resources/avatars/avatar_woman_006_58x58.png</file>
+ <file alias="avatar_022.png">resources/avatars/avatar_woman_007_58x58.png</file>
+ <file alias="avatar_023.png">resources/avatars/avatar_woman_008_58x58.png</file>
+ <file alias="avatar_024.png">resources/avatars/avatar_woman_009_58x58.png</file>
+ <file alias="avatar_025.png">resources/avatars/avatar_woman_010_58x58.png</file>
+ </qresource>
+
+ <qresource prefix="/contact">
+ <file alias="areacodes.txt">resources/contacts/areacodes.txt</file>
+ <file alias="firstnamesF.txt">resources/contacts/firstnamesF.txt</file>
+ <file alias="firstnamesM.txt">resources/contacts/firstnamesM.txt</file>
+ <file alias="lastnames.txt">resources/contacts/lastnames.txt</file>
+ </qresource>
+
+</RCC>
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp
new file mode 100644
index 0000000..b904f40
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp
@@ -0,0 +1,805 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QtGui/qgraphicsview.h>
+#include <QtGui/qpixmapcache.h>
+#include <QtGui/qdesktopwidget.h>
+
+#include "mainview.h"
+#include "dummydatagen.h"
+#include "simplelist.h"
+#include "itemrecyclinglist.h"
+#include "simplelist.h"
+#include "theme.h"
+#include "commandline.h"
+
+class tst_GraphicsViewBenchmark : public QObject
+{
+ Q_OBJECT
+public:
+ enum ListType {
+ Simple,
+ Recycling,
+ None
+ };
+
+ enum ScrollStep {
+ Slow = 2,
+ Normal = 8,
+ Fast = 64
+ };
+
+ tst_GraphicsViewBenchmark(Settings *settings)
+ : mSettings(settings), mMainView(0), currentListSize(-1), currentListType(None) {}
+ ~tst_GraphicsViewBenchmark() {}
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+
+private slots:
+ // Benchmarks:
+ void createAndFillList_data();
+ void createAndFillList();
+ void add100ItemsToBeginningOfList_data();
+ void add100ItemsToBeginningOfList();
+ void remove100ItemsFromBeginningOfList_data();
+ void remove100ItemsFromBeginningOfList();
+ void deleteList_data();
+ void deleteList();
+ void themeChange_data();
+ void themeChange();
+ void update_data();
+ void update();
+ void scroll_data();
+ void scroll();
+
+private:
+ Settings *mSettings;
+ MainView *mMainView;
+ DummyDataGenerator mDataGenerator;
+ int currentListSize;
+ ListType currentListType;
+
+ void resetView();
+ void ensureListSizeAndType(int listSize, ListType listType);
+ void ensureTheme(Theme::Themes theme);
+ void ensureRotationAngle(int rotation);
+ void ensureSubtreeCache(bool enable);
+ void ensureImageBasedRendering(bool enable);
+ void insertListData();
+ inline void setTestWidget(QGraphicsWidget *widget, int listSize, ListType listType)
+ {
+ currentListSize = listSize;
+ currentListType = listType;
+ mMainView->setTestWidget(widget);
+ }
+};
+
+Q_DECLARE_METATYPE(tst_GraphicsViewBenchmark::ListType)
+Q_DECLARE_METATYPE(Theme::Themes)
+Q_DECLARE_METATYPE(tst_GraphicsViewBenchmark::ScrollStep)
+
+const int AddRemoveCount = 100;
+
+static ListItem *newSimpleListItem(DummyDataGenerator &dataGenerator, const int id)
+{
+ ListItem *item = new ListItem();
+ item->setText(dataGenerator.randomName(), ListItem::FirstPos );
+ item->setText(dataGenerator.randomPhoneNumber(QString("%1").arg(id)), ListItem::SecondPos );
+ item->setIcon(new IconItem(dataGenerator.randomIconItem(), item), ListItem::LeftIcon );
+ item->setIcon(new IconItem(dataGenerator.randomStatusItem(), item), ListItem::RightIcon);
+ item->setFont(Theme::p()->font(Theme::ContactName), ListItem::FirstPos);
+ item->setFont(Theme::p()->font(Theme::ContactNumber), ListItem::SecondPos);
+ item->setBorderPen(Theme::p()->listItemBorderPen());
+ item->setRounding(Theme::p()->listItemRounding());
+ item->icon(ListItem::LeftIcon)->setRotation(Theme::p()->iconRotation(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setRotation(Theme::p()->iconRotation(ListItem::RightIcon));
+ item->icon(ListItem::LeftIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::RightIcon));
+ item->icon(ListItem::LeftIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::RightIcon));
+ return item;
+}
+
+static RecycledListItem *newRecyclingListItem(DummyDataGenerator &dataGenerator, const int id)
+{
+ RecycledListItem *item = new RecycledListItem();
+ item->item()->setText(dataGenerator.randomName(), ListItem::FirstPos );
+ item->item()->setText(dataGenerator.randomPhoneNumber(QString("%1").arg(id)), ListItem::SecondPos );
+ item->item()->setIcon(new IconItem(dataGenerator.randomIconItem()), ListItem::LeftIcon );
+ item->item()->setIcon(new IconItem(dataGenerator.randomStatusItem()), ListItem::RightIcon);
+ item->item()->setFont(Theme::p()->font(Theme::ContactName), ListItem::FirstPos);
+ item->item()->setFont(Theme::p()->font(Theme::ContactNumber), ListItem::SecondPos);
+ item->item()->setBorderPen(Theme::p()->listItemBorderPen());
+ item->item()->setRounding(Theme::p()->listItemRounding());
+ item->item()->icon(ListItem::LeftIcon)->setRotation(Theme::p()->iconRotation(ListItem::LeftIcon));
+ item->item()->icon(ListItem::RightIcon)->setRotation(Theme::p()->iconRotation(ListItem::RightIcon));
+ item->item()->icon(ListItem::LeftIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::LeftIcon));
+ item->item()->icon(ListItem::RightIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::RightIcon));
+ item->item()->icon(ListItem::LeftIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::LeftIcon));
+ item->item()->icon(ListItem::RightIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::RightIcon));
+ return item;
+}
+
+static void fillList(DummyDataGenerator &dataGenerator, int itemCount, QGraphicsWidget *list)
+{
+ if (SimpleList *simpleList = qobject_cast<SimpleList *>(list)) {
+ for (int i = 0; i < itemCount; ++i)
+ simpleList->addItem(newSimpleListItem(dataGenerator, i));
+ } else if (ItemRecyclingList *recyclingList = qobject_cast<ItemRecyclingList *>(list)) {
+ for (int i = 0; i < itemCount; ++i)
+ recyclingList->addItem(newRecyclingListItem(dataGenerator, i));
+ } else {
+ qFatal("fillList: internal error");
+ }
+}
+
+void tst_GraphicsViewBenchmark::resetView()
+{
+ if (QGraphicsWidget *widget = mMainView->takeTestWidget()) {
+ delete widget;
+ currentListSize = -1;
+ currentListType = None;
+ QTest::qWait(50);
+ } else {
+ if (currentListSize != -1)
+ qFatal("tst_GraphicsViewBenchmark::resetView: internal error: wrong list size");
+ if (currentListType != None)
+ qFatal("tst_GraphicsViewBenchmark::resetView: internal error: wrong list type");
+ }
+ ensureTheme(Theme::Blue);
+ ensureRotationAngle(0);
+ ensureSubtreeCache(false);
+ ensureImageBasedRendering(false);
+}
+
+void tst_GraphicsViewBenchmark::ensureListSizeAndType(int listSize, ListType listType)
+{
+ if (currentListSize != listSize || currentListType != listType) {
+ resetView();
+ if (listType == Simple) {
+ SimpleList *list = new SimpleList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ } else if (listType == Recycling) {
+ ItemRecyclingList *list = new ItemRecyclingList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ }
+ QTest::qWait(50);
+ return;
+ }
+
+ // Okay, we're supposed to have the right list type and size. Make sure we actually have it.
+ QGraphicsWidget *widget = mMainView->testWidget();
+ if (!widget) {
+ if (currentListType != None || currentListSize != -1)
+ qFatal("tst_GraphicsViewBenchmark::ensureListSizeAndType: internal error: no test widget");
+ return;
+ }
+
+ if (listType == Simple) {
+ SimpleList *list = qobject_cast<SimpleList *>(widget);
+ if (!list)
+ qFatal("tst_GraphicsViewBenchmark::ensureListSizeAndType: internal error: wrong list type");
+ if (list->itemCount() != listSize)
+ qFatal("tst_GraphicsViewBenchmark::ensureListSizeAndType: internal error: wrong list size");
+ } else if (listType == Recycling){
+ ItemRecyclingList *list = qobject_cast<ItemRecyclingList *>(widget);
+ if (!list)
+ qFatal("tst_GraphicsViewBenchmark::ensureListSizeAndType: internal error: wrong list type");
+ if (list->rows() != listSize)
+ qFatal("tst_GraphicsViewBenchmark::ensureListSizeAndType: internal error: wrong list size");
+ }
+}
+
+void tst_GraphicsViewBenchmark::ensureTheme(Theme::Themes theme)
+{
+ if (Theme::p()->theme() != theme) {
+ Theme::p()->setTheme(theme);
+ // The theme change itself can take a lot of time, so make
+ // sure we give it a little bit time to stabilize *after*
+ // the changes, hence sendPostedEvents(); qWait();
+ QApplication::sendPostedEvents();
+ QTest::qWait(50);
+ }
+}
+
+void tst_GraphicsViewBenchmark::ensureRotationAngle(int angle)
+{
+ const bool useTwoColumns = angle != 0;
+ bool wait = false;
+ if (mMainView->rotationAngle() != angle) {
+ mMainView->rotateContent(-mMainView->rotationAngle() + angle);
+ wait = true;
+ }
+ if (QGraphicsWidget *widget = mMainView->testWidget()) {
+ if (SimpleList *list = qobject_cast<SimpleList *>(widget)) {
+ if (list->twoColumns() != useTwoColumns) {
+ list->setTwoColumns(useTwoColumns);
+ wait = true;
+ }
+ } else if (ItemRecyclingList *list = qobject_cast<ItemRecyclingList *>(widget)) {
+ if (list->twoColumns() != useTwoColumns) {
+ list->setTwoColumns(useTwoColumns);
+ wait = true;
+ }
+ }
+ }
+ if (wait)
+ QTest::qWait(50);
+}
+
+void tst_GraphicsViewBenchmark::ensureSubtreeCache(bool enable)
+{
+ QGraphicsWidget *widget = mMainView->testWidget();
+ if (!widget)
+ return;
+
+ if (SimpleList *list = qobject_cast<SimpleList *>(widget)) {
+ if (list->listItemCaching() != enable) {
+ list->setListItemCaching(enable);
+ QTest::qWait(50);
+ }
+ } else if (ItemRecyclingList *list = qobject_cast<ItemRecyclingList *>(widget)) {
+ if (list->listItemCaching() != enable) {
+ list->setListItemCaching(enable);
+ QTest::qWait(50);
+ }
+ }
+ QPixmapCache::clear();
+}
+
+void tst_GraphicsViewBenchmark::ensureImageBasedRendering(bool enable)
+{
+ if (mMainView->imageBasedRendering() != enable) {
+ mMainView->setImageBasedRendering(enable);
+ QTest::qWait(50);
+ }
+}
+
+void tst_GraphicsViewBenchmark::insertListData()
+{
+ QTest::addColumn<int>("listSize");
+ QTest::addColumn<ListType>("listType");
+
+ QTest::newRow("Simple list containing 10 items") << 10 << Simple;
+ QTest::newRow("Recycling list containing 10 items") << 10 << Recycling;
+ QTest::newRow("Simple list containing 50 items") << 50 << Simple;
+ QTest::newRow("Recycling list containing 50 items") << 50 << Recycling;
+ QTest::newRow("Simple list containing 500 items") << 500 << Simple;
+ QTest::newRow("Recycling list containing 500 items") << 500 << Recycling;
+}
+
+void tst_GraphicsViewBenchmark::initTestCase()
+{
+ mMainView = new MainView(mSettings->options() & Settings::UseOpenGL,
+ mSettings->options() & Settings::OutputFps);
+
+ if (mSettings->size().width() > 0 && mSettings->size().height() > 0) {
+ mMainView->resize(mSettings->size().width(), mSettings->size().height());
+ mMainView->show();
+ } else {
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
+ mMainView->showFullScreen();
+#else
+ if (QApplication::desktop()->width() < 360 || QApplication::desktop()->height() < 640) {
+ mMainView->showFullScreen();
+ } else {
+ mMainView->resize(360, 640);
+ mMainView->show();
+ }
+#endif
+ }
+
+ mDataGenerator.Reset();
+ SimpleList *list = new SimpleList;
+ list->setListItemCaching(false);
+ mMainView->setTestWidget(list);
+ fillList(mDataGenerator, 5, list);
+ mMainView->takeTestWidget();
+ delete list;
+
+ currentListSize = -1;
+ currentListType = None;
+
+ QTest::qWaitForWindowShown(mMainView);
+}
+
+void tst_GraphicsViewBenchmark::cleanupTestCase()
+{
+ delete mMainView;
+ mMainView = 0;
+}
+
+void tst_GraphicsViewBenchmark::init()
+{
+ // Make sure we don't have pending events in the queue.
+ // Yes, each test run takes a little bit longer, but the results are more stable.
+ QTest::qWait(150);
+}
+
+void tst_GraphicsViewBenchmark::createAndFillList_data()
+{
+ insertListData();
+}
+
+void tst_GraphicsViewBenchmark::createAndFillList()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+
+ resetView();
+
+ if (listType == Simple) {
+ QBENCHMARK {
+ SimpleList *list = new SimpleList;
+ setTestWidget(list, listSize, listType);
+ fillList(mDataGenerator, listSize, list);
+ }
+ } else {
+ QBENCHMARK {
+ ItemRecyclingList *list = new ItemRecyclingList;
+ setTestWidget(list, listSize, listType);
+ fillList(mDataGenerator, listSize, list);
+ }
+ }
+
+ resetView();
+}
+
+void tst_GraphicsViewBenchmark::add100ItemsToBeginningOfList_data()
+{
+ insertListData();
+}
+
+void tst_GraphicsViewBenchmark::add100ItemsToBeginningOfList()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+
+ resetView();
+
+ if (listType == Simple) {
+ SimpleList *list = new SimpleList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ QTest::qWait(50);
+ QBENCHMARK {
+ for (int i = 0; i < AddRemoveCount; ++i)
+ list->insertItem(0, newSimpleListItem(mDataGenerator, i));
+ }
+ } else {
+ ItemRecyclingList *list = new ItemRecyclingList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ QTest::qWait(50);
+ QBENCHMARK {
+ for (int i = 0; i < AddRemoveCount; ++i)
+ list->insertItem(0, newRecyclingListItem(mDataGenerator, i));
+ }
+ }
+
+ resetView();
+}
+
+void tst_GraphicsViewBenchmark::remove100ItemsFromBeginningOfList_data()
+{
+ insertListData();
+}
+
+void tst_GraphicsViewBenchmark::remove100ItemsFromBeginningOfList()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+
+ resetView();
+
+ if (listType == Simple) {
+ SimpleList *list = new SimpleList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ QTest::qWait(50);
+ QBENCHMARK {
+ for (int i = 0; i < AddRemoveCount; ++i)
+ delete list->takeItem(0);
+ }
+ } else {
+ ItemRecyclingList *list = new ItemRecyclingList;
+ fillList(mDataGenerator, listSize, list);
+ setTestWidget(list, listSize, listType);
+ QTest::qWait(50);
+ QBENCHMARK {
+ for (int i = 0; i < AddRemoveCount; ++i)
+ delete list->takeItem(0);
+ }
+ }
+
+ resetView();
+}
+
+void tst_GraphicsViewBenchmark::deleteList_data()
+{
+ insertListData();
+ QTest::newRow("Simple list containing 1000 items") << 1000 << Simple;
+ QTest::newRow("Recycling list containing 1000 items") << 1000 << Recycling;
+}
+
+void tst_GraphicsViewBenchmark::deleteList()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+
+ if (listSize < 500)
+ return; // Too small to measure.
+
+ QGraphicsWidget *list = 0;
+ if (listType == Simple)
+ list = new SimpleList;
+ else
+ list = new ItemRecyclingList;
+ fillList(mDataGenerator, listSize, list);
+ QTest::qWait(20);
+
+ QBENCHMARK_ONCE {
+ delete list;
+ }
+}
+
+void tst_GraphicsViewBenchmark::themeChange_data()
+{
+ QTest::addColumn<int>("listSize");
+ QTest::addColumn<ListType>("listType");
+ QTest::addColumn<Theme::Themes>("fromTheme");
+ QTest::addColumn<Theme::Themes>("toTheme");
+
+ QTest::newRow("From Blue to Lime, simple list containing 10 items") << 10 << Simple << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, simple list containing 10 items") << 10 << Simple << Theme::Lime << Theme::Blue;
+
+ QTest::newRow("From Blue to Lime, recycling list containing 10 items") << 10 << Recycling << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, recycling list containing 10 items") << 10 << Recycling << Theme::Lime << Theme::Blue;
+
+ QTest::newRow("From Blue to Lime, simple list containing 50 items") << 50 << Simple << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, simple list containing 50 items") << 50 << Simple << Theme::Lime << Theme::Blue;
+
+ QTest::newRow("From Blue to Lime, recycling list containing 50 items") << 50 << Recycling << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, recycling list containing 50 items") << 50 << Recycling << Theme::Lime << Theme::Blue;
+
+ QTest::newRow("From Blue to Lime, simple list containing 500 items") << 500 << Simple << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, simple list containing 500 items") << 500 << Simple << Theme::Lime << Theme::Blue;
+
+ QTest::newRow("From Blue to Lime, recycling list containing 500 items") << 500 << Recycling << Theme::Blue << Theme::Lime;
+ QTest::newRow("From Lime to Blue, recycling list containing 500 items") << 500 << Recycling << Theme::Lime << Theme::Blue;
+}
+
+void tst_GraphicsViewBenchmark::themeChange()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+ QFETCH(Theme::Themes, fromTheme);
+ QFETCH(Theme::Themes, toTheme);
+
+ if (fromTheme == toTheme)
+ qFatal("tst_GraphicsViewBenchmark::themeChange: to and from theme is the same");
+
+ ensureListSizeAndType(listSize, listType);
+ ensureTheme(fromTheme);
+
+ QBENCHMARK {
+ Theme::p()->setTheme(toTheme);
+ }
+}
+
+static inline QLatin1String stringForTheme(Theme::Themes theme)
+{
+ if (theme == Theme::Blue)
+ return QLatin1String("Blue");
+ return QLatin1String("Lime");
+}
+
+static inline QLatin1String stringForListType(tst_GraphicsViewBenchmark::ListType type)
+{
+ if (type == tst_GraphicsViewBenchmark::Simple)
+ return QLatin1String("Simple");
+ if (type == tst_GraphicsViewBenchmark::Recycling)
+ return QLatin1String("Recycling");
+ return QLatin1String("None");
+}
+
+static inline QLatin1String stringForScrollStep(tst_GraphicsViewBenchmark::ScrollStep step)
+{
+ if (step == tst_GraphicsViewBenchmark::Slow)
+ return QLatin1String("Slow");
+ if (step == tst_GraphicsViewBenchmark::Normal)
+ return QLatin1String("Normal");
+ return QLatin1String("Fast");
+}
+
+static inline QString rowString(int listSize, tst_GraphicsViewBenchmark::ListType listType,
+ Theme::Themes theme, int toImage, int cache, int angle)
+{
+ return QString("Items=%1, List=%2, Theme=%3, RenderToImage=%4, Cache=%5, RotAngle=%6")
+ .arg(QString::number(listSize)).arg(stringForListType(listType))
+ .arg(stringForTheme(theme)).arg(QString::number(toImage))
+ .arg(QString::number(cache)).arg(QString::number(angle));
+}
+
+static inline QString rowString(int listSize, tst_GraphicsViewBenchmark::ListType listType,
+ Theme::Themes theme, int cache, int angle,
+ tst_GraphicsViewBenchmark::ScrollStep step)
+{
+ return QString("Items=%1, List=%2, Theme=%3, Cache=%4, RotAngle=%5, Speed=%6")
+ .arg(QString::number(listSize)).arg(stringForListType(listType))
+ .arg(stringForTheme(theme)).arg(QString::number(cache))
+ .arg(QString::number(angle)).arg(stringForScrollStep(step));
+}
+
+void tst_GraphicsViewBenchmark::update_data()
+{
+ QTest::addColumn<int>("listSize");
+ QTest::addColumn<ListType>("listType");
+ QTest::addColumn<Theme::Themes>("theme");
+ QTest::addColumn<bool>("renderToImage");
+ QTest::addColumn<bool>("subtreeCache");
+ QTest::addColumn<int>("rotationAngle");
+
+ QList<ListType> listTypes;
+ listTypes << Simple << Recycling;
+
+ QList<int> listSizes;
+ listSizes << 10 << 50 << 500;
+
+ QList<Theme::Themes> themes;
+ themes << Theme::Blue << Theme::Lime;
+
+ QList<int> rotationAngles;
+ rotationAngles << 0 << 90;
+
+ // Generate rows:
+ foreach (ListType listType, listTypes) {
+ foreach (int listSize, listSizes) {
+ foreach (int angle, rotationAngles) {
+ foreach (Theme::Themes theme, themes) {
+ for (int toImage = 0; toImage < 2; ++toImage) {
+ for (int cache = 0; cache < 2; ++cache) {
+ QString string = rowString(listSize, listType, theme, toImage, cache, angle);
+ QTest::newRow(string.toLatin1()) << listSize << listType << theme << bool(toImage)
+ << bool(cache) << angle;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void tst_GraphicsViewBenchmark::update()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+ QFETCH(Theme::Themes, theme);
+ QFETCH(bool, renderToImage);
+ QFETCH(bool, subtreeCache);
+ QFETCH(int, rotationAngle);
+
+ mMainView->viewport()->setUpdatesEnabled(false);
+
+ ensureListSizeAndType(listSize, listType);
+ ensureTheme(theme);
+ ensureRotationAngle(rotationAngle);
+ ensureSubtreeCache(subtreeCache);
+ ensureImageBasedRendering(renderToImage);
+
+ QEventLoop loop;
+ QObject::connect(mMainView, SIGNAL(repainted()), &loop, SLOT(quit()));
+ QTimer::singleShot(4000, &loop, SLOT(quit()));
+ // Dry run (especially important when cache is enabled).
+ // NB! setUpdatesEnabled triggers an update().
+ mMainView->viewport()->setUpdatesEnabled(true);
+ loop.exec(QEventLoop::AllEvents | QEventLoop::ExcludeUserInputEvents| QEventLoop::ExcludeSocketNotifiers);
+ QTest::qWait(50);
+
+ QTimer::singleShot(4000, &loop, SLOT(quit()));
+ QBENCHMARK {
+ mMainView->viewport()->update();
+ loop.exec(QEventLoop::AllEvents | QEventLoop::ExcludeUserInputEvents| QEventLoop::ExcludeSocketNotifiers);
+ }
+}
+
+void tst_GraphicsViewBenchmark::scroll_data()
+{
+ QTest::addColumn<int>("listSize");
+ QTest::addColumn<ListType>("listType");
+ QTest::addColumn<Theme::Themes>("theme");
+ QTest::addColumn<bool>("subtreeCache");
+ QTest::addColumn<int>("rotationAngle");
+ QTest::addColumn<ScrollStep>("scrollStep");
+
+ QList<ListType> listTypes;
+ listTypes << Simple << Recycling;
+
+ QList<int> listSizes;
+ listSizes << 10 << 50 << 500;
+
+ QList<Theme::Themes> themes;
+ themes << Theme::Blue << Theme::Lime;
+
+ QList<int> rotationAngles;
+ rotationAngles << 0 << 90;
+
+ QList<ScrollStep> scrollSteps;
+ scrollSteps << Slow << Normal << Fast;
+
+ // Generate rows:
+ foreach (ListType listType, listTypes) {
+ foreach (int listSize, listSizes) {
+ foreach (int angle, rotationAngles) {
+ foreach (ScrollStep step, scrollSteps) {
+ foreach (Theme::Themes theme, themes) {
+ for (int cache = 0; cache < 2; ++cache) {
+ QString string = rowString(listSize, listType, theme, cache, angle, step);
+ QTest::newRow(string.toLatin1()) << listSize << listType << theme
+ << bool(cache) << angle << step;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void tst_GraphicsViewBenchmark::scroll()
+{
+ QFETCH(int, listSize);
+ QFETCH(ListType, listType);
+ QFETCH(Theme::Themes, theme);
+ QFETCH(bool, subtreeCache);
+ QFETCH(int, rotationAngle);
+ QFETCH(ScrollStep, scrollStep);
+
+ mMainView->viewport()->setUpdatesEnabled(false);
+
+ ensureListSizeAndType(listSize, listType);
+ ensureTheme(theme);
+ ensureRotationAngle(rotationAngle);
+ ensureSubtreeCache(subtreeCache);
+ ensureImageBasedRendering(false);
+
+ ScrollBar *sb = 0;
+ if (listType == Simple)
+ sb = static_cast<SimpleList *>(mMainView->testWidget())->verticalScrollBar();
+ else
+ sb = static_cast<ItemRecyclingList *>(mMainView->testWidget())->verticalScrollBar();
+ const qreal sliderStart = sb->sliderSize() / qreal(2.0);
+ const qreal sliderTarget = sliderStart + qreal(scrollStep);
+ sb->setSliderPosition(sliderStart);
+
+ QEventLoop loop;
+ QObject::connect(mMainView, SIGNAL(repainted()), &loop, SLOT(quit()));
+ QTimer::singleShot(4000, &loop, SLOT(quit()));
+ // Dry run (especially important when cache is enabled).
+ // NB! setUpdatesEnabled triggers an update().
+ mMainView->viewport()->setUpdatesEnabled(true);
+ loop.exec(QEventLoop::AllEvents | QEventLoop::ExcludeUserInputEvents| QEventLoop::ExcludeSocketNotifiers);
+ QTest::qWait(50);
+
+ QTimer::singleShot(4000, &loop, SLOT(quit()));
+ QBENCHMARK {
+ sb->setSliderPosition(sliderTarget);
+ loop.exec(QEventLoop::AllEvents | QEventLoop::ExcludeUserInputEvents| QEventLoop::ExcludeSocketNotifiers);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ Settings settings;
+ if (!readSettingsFromCommandLine(argc, argv, settings))
+ return 1;
+
+ // Eat command line arguments.
+ int aargc = 0;
+ for (int i = 0; i < argc; ++i) {
+ if (argv[i])
+ ++aargc;
+ }
+ char **aargv = new char*[aargc];
+ aargc = 0;
+ for (int i = 0; i < argc; ++i) {
+ if (argv[i])
+ aargv[aargc++] = argv[i];
+ }
+
+ QApplication app(argc, argv);
+
+ int returnValue = 0;
+ if (settings.options() & Settings::ManualTest) {
+ MainView view(settings.options() & Settings::UseOpenGL, settings.options() & Settings::OutputFps);
+
+ DummyDataGenerator dataGenerator;
+ dataGenerator.Reset();
+
+ SimpleList *list = new SimpleList;
+ if (settings.options() & Settings::UseListItemCache)
+ list->setListItemCaching(true);
+ else
+ list->setListItemCaching(false);
+
+ if (settings.listItemCount())
+ fillList(dataGenerator, settings.listItemCount(), list);
+ else
+ fillList(dataGenerator, 500, list);
+
+ view.setTestWidget(list);
+
+ if ((settings.angle() % 360) != 0)
+ view.rotateContent(settings.angle());
+
+ if (settings.size().width() > 0 && settings.size().height() > 0) {
+ view.resize(settings.size().width(), settings.size().height());
+ view.show();
+ } else {
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5)
+ view.showFullScreen();
+#else
+ if (QApplication::desktop()->width() < 360 || QApplication::desktop()->height() < 640) {
+ view.showFullScreen();
+ } else {
+ view.resize(360, 640);
+ view.show();
+ }
+#endif
+ }
+ returnValue = app.exec();
+ } else {
+ QTEST_DISABLE_KEYPAD_NAVIGATION
+ tst_GraphicsViewBenchmark tc(&settings);
+ returnValue = QTest::qExec(&tc, aargc, aargv);
+ }
+
+ delete [] aargv;
+ return returnValue;
+}
+
+#include "main.moc"
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_001_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_001_58x58.png
new file mode 100644
index 0000000..525b555
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_001_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_002_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_002_58x58.png
new file mode 100644
index 0000000..3d93298
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_002_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_003_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_003_58x58.png
new file mode 100644
index 0000000..556cfcb
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_003_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_004_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_004_58x58.png
new file mode 100644
index 0000000..94acf9e
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_004_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_005_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_005_58x58.png
new file mode 100644
index 0000000..ed0c7c4
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_005_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_006_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_006_58x58.png
new file mode 100644
index 0000000..d4b4dc3
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_006_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_007_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_007_58x58.png
new file mode 100644
index 0000000..0e45d18
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_007_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_008_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_008_58x58.png
new file mode 100644
index 0000000..0c25540
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_008_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_009_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_009_58x58.png
new file mode 100644
index 0000000..ce435ea
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_009_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_010_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_010_58x58.png
new file mode 100644
index 0000000..021db25
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_man_010_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_001_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_001_58x58.png
new file mode 100644
index 0000000..0051da3
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_001_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_002_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_002_58x58.png
new file mode 100644
index 0000000..e8a946a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_002_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_003_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_003_58x58.png
new file mode 100644
index 0000000..b2bb851
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_003_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_004_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_004_58x58.png
new file mode 100644
index 0000000..871c075
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_004_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_005_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_005_58x58.png
new file mode 100644
index 0000000..d4c18b8
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_picture_005_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_001_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_001_58x58.png
new file mode 100644
index 0000000..10a5947
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_001_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_002_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_002_58x58.png
new file mode 100644
index 0000000..65b4e03
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_002_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_003_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_003_58x58.png
new file mode 100644
index 0000000..935ec07
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_003_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_004_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_004_58x58.png
new file mode 100644
index 0000000..fbc1a93
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_004_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_005_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_005_58x58.png
new file mode 100644
index 0000000..af96d3e
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_005_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_006_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_006_58x58.png
new file mode 100644
index 0000000..fb4192d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_006_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_007_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_007_58x58.png
new file mode 100644
index 0000000..f5d6dea
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_007_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_008_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_008_58x58.png
new file mode 100644
index 0000000..d08b8dc
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_008_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_009_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_009_58x58.png
new file mode 100644
index 0000000..768b97d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_009_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_010_58x58.png b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_010_58x58.png
new file mode 100644
index 0000000..d1fe28e
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/avatars/avatar_woman_010_58x58.png
Binary files differ
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_360x640px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_360x640px.svg
new file mode 100644
index 0000000..1552baf
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_360x640px.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="360px" height="640px" viewBox="0 0 360 640" enable-background="new 0 0 360 640" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-3.5137" y1="2.1079" x2="363.6142" y2="637.9921">
+ <stop offset="0.1538" style="stop-color:#2BD5FF"/>
+ <stop offset="0.4396" style="stop-color:#80E6FF"/>
+ <stop offset="0.7253" style="stop-color:#29CAF2"/>
+ </linearGradient>
+ <rect x="0.05" y="0.05" fill="url(#SVGID_1_)" width="360" height="640"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_horisontal_640x360px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_horisontal_640x360px.svg
new file mode 100644
index 0000000..5589110
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_background_horisontal_640x360px.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="640px" height="360px" viewBox="0 0 640 360" enable-background="new 0 0 640 360" xml:space="preserve">
+<g>
+ <rect x="-0.5" y="-0.5" fill="#FFFFFF" width="640" height="360"/>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="1580.5244" y1="-287.7886" x2="1038.1285" y2="-600.9408" gradientTransform="matrix(0 -1 -1 0 -124.8652 1488.8262)">
+ <stop offset="0.2527" style="stop-color:#2BD5FF"/>
+ <stop offset="0.5989" style="stop-color:#80E6FF"/>
+ <stop offset="0.9396" style="stop-color:#29CAF2"/>
+ </linearGradient>
+ <rect x="1.5" y="1.5" fill="url(#SVGID_1_)" width="636" height="356"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_default_icon_52x52px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_default_icon_52x52px.svg
new file mode 100644
index 0000000..665675b
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_default_icon_52x52px.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="52px" height="52px" viewBox="0 0 52 52" enable-background="new 0 0 52 52" xml:space="preserve">
+<g>
+ <path fill="#29CAF2" d="M52.07,48.77c0,1.79-1.46,3.25-3.25,3.25H3.32c-1.79,0-3.25-1.46-3.25-3.25V3.27
+ c0-1.79,1.46-3.25,3.25-3.25h45.5c1.79,0,3.25,1.46,3.25,3.25V48.77z"/>
+ <g>
+ <rect x="3.37" y="3.69" fill="#2BD5FF" width="44.69" height="44.69"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="6.8594" y1="27.8086" x2="48.0244" y2="27.8086">
+ <stop offset="0.1538" style="stop-color:#27C0E6"/>
+ <stop offset="0.4396" style="stop-color:#25B7DB"/>
+ <stop offset="0.7253" style="stop-color:#22A5C4"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M47.95,48.31c0.12-3.35,0.15-8.17-0.43-9.12c-2.87-4.64-11.55-3.61-14.02-3.22
+ c0-1.17-0.01-2.19-0.01-2.96c0.5-0.52,0.96-1.11,1.39-1.76l0.06,0.19c3.57,0.51,4.02-11.16,4.02-11.16
+ C39.21,3.66,28.83,7.47,27.18,8.18c-3.05-0.78-10.3-1.3-10.09,11.2c0,0-0.53,11.06,3.52,11.38c0.5,0.85,1.07,1.6,1.69,2.25
+ c-0.01,0.72-0.04,1.65-0.08,2.71c-5.32-0.36-14.73-0.08-15.35,6.39c-0.06,0.62,0.12,3.69,0.28,6.2L47.95,48.31z"/>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_divider_360x76px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_divider_360x76px.svg
new file mode 100644
index 0000000..db9fc7a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_divider_360x76px.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="360px" height="76px" viewBox="0 0 360 76" enable-background="new 0 0 360 76" xml:space="preserve">
+<rect x="0.01" y="0.35" opacity="0.2" fill="#FFFFFF" width="360" height="76"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_highlighter_360x76px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_highlighter_360x76px.svg
new file mode 100644
index 0000000..dae2bd4
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_list_highlighter_360x76px.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="360px" height="76px" viewBox="0 0 360 76" enable-background="new 0 0 360 76" xml:space="preserve">
+<rect x="0.02" y="0.05" opacity="0.4" fill="#FFFFFF" fill-opacity="0.8" width="360" height="76"/>
+<g>
+ <path fill="#FFFFFF" d="M360.02,0.05v76h-360v-76H360.02 M359.02,1.05h-358v74h358V1.05L359.02,1.05z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_idle_33x33px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_idle_33x33px.svg
new file mode 100644
index 0000000..fe12e78
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_idle_33x33px.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="33px" height="33px" viewBox="0 0 33 33" enable-background="new 0 0 33 33" xml:space="preserve">
+<g>
+ <path fill="#29CAF2" d="M33.03,16.58c0,9.11-7.39,16.5-16.5,16.5c-9.12,0-16.5-7.39-16.5-16.5c0-9.11,7.38-16.5,16.5-16.5
+ C25.63,0.08,33.03,7.47,33.03,16.58z"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="16.5249" y1="29.1172" x2="16.5249" y2="4.0435">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M16.52,29.12c-6.91,0-12.54-5.62-12.54-12.54c0-6.91,5.62-12.54,12.54-12.54
+ s12.54,5.62,12.54,12.54C29.06,23.49,23.44,29.12,16.52,29.12L16.52,29.12z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.875" y1="9.8242" x2="26.1715" y2="23.3358">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="16.52" cy="16.58" r="11.78"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="8.6343" y1="11.1309" x2="24.2014" y2="22.0311">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M16.42,26.08c-5.24,0-9.51-4.26-9.51-9.5c0-5.24,4.26-9.51,9.51-9.51c5.24,0,9.5,4.26,9.5,9.51
+ C25.92,21.82,21.66,26.08,16.42,26.08L16.42,26.08z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="23.0186" y1="22.1201" x2="9.8155" y2="11.0414">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="16.42" cy="16.58" r="8.62"/>
+ <path fill="#FF901F" d="M16.42,24.06c-4.12,0-7.48-3.35-7.48-7.47c0-4.12,3.36-7.48,7.48-7.48c4.12,0,7.47,3.36,7.47,7.48
+ C23.89,20.7,20.54,24.06,16.42,24.06L16.42,24.06z"/>
+ <g>
+ <path fill="#FFD06B" d="M14.09,14.25c2.1-2.1,5.31-2.41,7.75-0.94c-0.26-0.43-0.57-0.84-0.94-1.21c-2.47-2.47-6.49-2.47-8.96,0
+ c-2.47,2.47-2.47,6.49,0,8.96c0.37,0.37,0.78,0.68,1.21,0.94C11.68,19.56,11.99,16.35,14.09,14.25z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-122.4058" y1="66.873" x2="-127.2734" y2="58.442" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#FF901F"/>
+ <stop offset="1" style="stop-color:#FFB81F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M20.9,21.06c2.1-2.1,2.41-5.31,0.94-7.75c-2.43-1.47-5.65-1.16-7.75,0.94
+ c-2.1,2.1-2.41,5.31-0.94,7.75C15.58,23.47,18.8,23.16,20.9,21.06z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_offline_33x33px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_offline_33x33px.svg
new file mode 100644
index 0000000..0c973f1
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_offline_33x33px.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="33px" height="33px" viewBox="0 0 33 33" enable-background="new 0 0 33 33" xml:space="preserve">
+<g>
+ <circle fill="#29CAF2" cx="16.46" cy="16.52" r="16.5"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="16.4624" y1="29.0566" x2="16.4624" y2="3.9829">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M16.46,29.06c-6.91,0-12.54-5.62-12.54-12.54c0-6.91,5.62-12.54,12.54-12.54S29,9.61,29,16.52
+ C29,23.43,23.37,29.06,16.46,29.06L16.46,29.06z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.814" y1="9.7637" x2="26.1096" y2="23.2746">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M28.24,16.52c0,6.51-5.27,11.78-11.78,11.78c-6.5,0-11.78-5.27-11.78-11.78
+ c0-6.5,5.27-11.78,11.78-11.78C22.97,4.74,28.24,10.02,28.24,16.52z"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="8.5713" y1="11.0693" x2="24.1392" y2="21.9701">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M16.36,26.02c-5.24,0-9.51-4.26-9.51-9.5c0-5.24,4.26-9.51,9.51-9.51c5.24,0,9.5,4.27,9.5,9.51
+ C25.86,21.76,21.6,26.02,16.36,26.02L16.36,26.02z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="22.9561" y1="22.0576" x2="9.7545" y2="10.9802">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="16.36" cy="16.52" r="8.62"/>
+ <path fill="#BD0700" d="M16.36,24c-4.12,0-7.48-3.35-7.48-7.48c0-4.12,3.36-7.48,7.48-7.48c4.12,0,7.47,3.36,7.47,7.48
+ C23.83,20.64,20.48,24,16.36,24L16.36,24z"/>
+ <g>
+ <path fill="#F25757" d="M14.03,14.19c2.1-2.1,5.31-2.41,7.75-0.94c-0.26-0.43-0.57-0.84-0.94-1.21c-2.47-2.47-6.49-2.47-8.96,0
+ c-2.47,2.47-2.47,6.49,0,8.96c0.37,0.37,0.78,0.68,1.21,0.94C11.62,19.5,11.93,16.29,14.03,14.19z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-122.4668" y1="66.8125" x2="-127.3345" y2="58.3814" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#BD0700"/>
+ <stop offset="1" style="stop-color:#E35D58"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M20.83,21c2.1-2.1,2.41-5.31,0.94-7.75c-2.43-1.47-5.65-1.16-7.75,0.94
+ c-2.1,2.1-2.41,5.31-0.94,7.75C15.52,23.4,18.74,23.1,20.83,21z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_online_33x33px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_online_33x33px.svg
new file mode 100644
index 0000000..fcb434a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_contact_status_online_33x33px.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="33px" height="33px" viewBox="0 0 33 33" enable-background="new 0 0 33 33" xml:space="preserve">
+<g>
+ <path fill="#29CAF2" d="M32.96,16.59c0,9.11-7.39,16.5-16.5,16.5c-9.12,0-16.5-7.39-16.5-16.5c0-9.11,7.38-16.5,16.5-16.5
+ C25.57,0.09,32.96,7.47,32.96,16.59z"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="16.4624" y1="29.123" x2="16.4624" y2="4.0493">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M16.46,29.12c-6.91,0-12.54-5.62-12.54-12.54c0-6.91,5.62-12.54,12.54-12.54S29,9.67,29,16.58
+ C29,23.5,23.37,29.12,16.46,29.12L16.46,29.12z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.813" y1="9.8301" x2="26.1095" y2="23.3416">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M28.24,16.58c0,6.51-5.27,11.78-11.78,11.78S4.68,23.09,4.68,16.58c0-6.5,5.27-11.78,11.78-11.78
+ S28.24,10.08,28.24,16.58z"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="8.5723" y1="11.1362" x2="24.1386" y2="22.0359">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M16.36,26.09c-5.24,0-9.51-4.26-9.51-9.5c0-5.24,4.26-9.51,9.51-9.51c5.24,0,9.5,4.27,9.5,9.51
+ C25.86,21.83,21.6,26.09,16.36,26.09L16.36,26.09z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="22.9561" y1="22.125" x2="9.753" y2="11.0463">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="16.35" cy="16.58" r="8.62"/>
+ <path fill="#09B300" d="M16.36,24.06c-4.12,0-7.48-3.35-7.48-7.48c0-4.12,3.36-7.48,7.48-7.48c4.12,0,7.47,3.36,7.47,7.48
+ C23.83,20.71,20.48,24.06,16.36,24.06L16.36,24.06z"/>
+ <g>
+ <path fill="#57EB51" d="M14.03,14.25c2.1-2.1,5.31-2.41,7.75-0.94c-0.26-0.43-0.57-0.84-0.94-1.21c-2.47-2.47-6.49-2.47-8.96,0
+ c-2.47,2.47-2.47,6.49,0,8.96c0.37,0.37,0.78,0.68,1.21,0.94C11.62,19.57,11.93,16.35,14.03,14.25z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-122.4678" y1="66.8789" x2="-127.3354" y2="58.4478" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#09AA00"/>
+ <stop offset="1" style="stop-color:#4DCC46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M20.83,21.06c2.1-2.1,2.41-5.31,0.94-7.75c-2.43-1.47-5.65-1.16-7.75,0.94
+ c-2.1,2.1-2.41,5.31-0.94,7.75C15.52,23.47,18.73,23.16,20.83,21.06z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scroll_16x80px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scroll_16x80px.svg
new file mode 100644
index 0000000..897be81
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scroll_16x80px.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="16px" height="80px" viewBox="0 0 16 80" enable-background="new 0 0 16 80" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="0.1045" y1="40.0293" x2="16.1045" y2="40.0293">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M12.22,80.03c2.15,0,3.89-1.74,3.89-3.88V3.91c0-2.14-1.74-3.88-3.89-3.88H3.99
+ c-2.15,0-3.88,1.74-3.88,3.88c0,0,1.94,16.34,1.94,36.4c0,20.06-1.94,35.84-1.94,35.84c0,2.14,1.74,3.88,3.88,3.88H12.22z"/>
+ <path fill="#29CAF2" d="M12.22,78.09H3.99c-1.04,0-1.89-0.82-1.94-1.84c0.19-1.62,1.94-16.98,1.94-35.94
+ c0-18.96-1.75-34.84-1.94-36.49c0.05-1.03,0.9-1.85,1.94-1.85h8.23c1.04,0,1.89,0.82,1.94,1.84c-0.19,1.62-0.19,70.78,0,72.42
+ C14.11,77.27,13.26,78.09,12.22,78.09L12.22,78.09z"/>
+ <g>
+ <g>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="10.7334" y1="51.3867" x2="7.417" y2="45.6425">
+ <stop offset="0" style="stop-color:#E6E6E6"/>
+ <stop offset="0.6978" style="stop-color:#BFBFBF"/>
+ <stop offset="1" style="stop-color:#F2F2F2"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_2_)" points="7.42,51.39 5.76,48.52 7.42,45.64 10.73,45.64 12.39,48.52 10.73,51.39 "/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="10.7344" y1="42.9014" x2="7.4175" y2="37.1563">
+ <stop offset="0" style="stop-color:#E6E6E6"/>
+ <stop offset="0.6978" style="stop-color:#BFBFBF"/>
+ <stop offset="1" style="stop-color:#F2F2F2"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_3_)" points="7.42,42.9 5.76,40.03 7.42,37.16 10.73,37.16 12.39,40.03 10.73,42.9 "/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="10.7334" y1="34.4131" x2="7.4175" y2="28.6697">
+ <stop offset="0" style="stop-color:#E6E6E6"/>
+ <stop offset="0.6978" style="stop-color:#BFBFBF"/>
+ <stop offset="1" style="stop-color:#F2F2F2"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_4_)" points="7.42,34.41 5.76,31.54 7.42,28.67 10.73,28.67 12.39,31.54 10.73,34.41 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scrollbar_7x14px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scrollbar_7x14px.svg
new file mode 100644
index 0000000..3baec2f
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_scrollbar_7x14px.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="7px" height="14px" viewBox="0 0 7 14" enable-background="new 0 0 7 14" xml:space="preserve">
+<rect x="0.01" y="0.01" fill="#2BD5FF" width="7" height="14"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_left_14x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_left_14x24px.svg
new file mode 100644
index 0000000..dd6fb70
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_left_14x24px.svg
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="24px" viewBox="0 0 14 24" enable-background="new 0 0 14 24" xml:space="preserve">
+<g>
+ <path fill="none" d="M4.92,21.95c-0.28-0.33-0.53-0.67-0.77-1.03C4.39,21.28,4.64,21.63,4.92,21.95z"/>
+ <path fill="none" d="M2.11,15.42c-0.05-0.46-0.09-0.92-0.09-1.39C2.02,14.5,2.06,14.97,2.11,15.42z"/>
+ <path fill="none" d="M4.08,20.82c-0.23-0.35-0.45-0.71-0.64-1.08C3,18.9,2.65,18.01,2.41,17.07C2.76,18.43,3.33,19.7,4.08,20.82z"
+ />
+ <path fill="none" d="M2.37,16.92c-0.09-0.38-0.16-0.77-0.22-1.17C2.21,16.14,2.28,16.54,2.37,16.92z"/>
+ <path fill="#29CAF2" d="M4.13,20.82c-0.74-1.13-1.3-2.39-1.64-3.75c-0.01-0.05-0.02-0.1-0.04-0.16c-0.09-0.38-0.16-0.77-0.22-1.17
+ c-0.01-0.11-0.03-0.22-0.04-0.33c-0.05-0.46-0.08-0.92-0.08-1.39c0-6.63,5.57-12,11.86-12l0,0v-2h-2.61
+ c-6.29,0-11.39,5.37-11.39,12c0,4.13,1.98,7.76,4.99,9.92c-0.27-0.33-0.52-0.67-0.76-1.03C4.17,20.89,4.15,20.86,4.13,20.82z"/>
+ <path fill="#80E6FF" d="M10.17,22.03c-2.5,0-4.8-0.86-6.68-2.29c0.19,0.37,0.41,0.73,0.63,1.08c0.02,0.03,0.04,0.07,0.07,0.1
+ c0.24,0.36,0.49,0.7,0.76,1.03c1.82,1.31,4.03,2.08,6.4,2.08h2.61v-2H10.17z"/>
+ <path fill="#80E6FF" d="M4.08,20.82c0.02,0.04,0.04,0.07,0.07,0.1C4.12,20.89,4.1,20.86,4.08,20.82z"/>
+ <path fill="#2BD5FF" d="M13.97,2.03c-6.29,0-11.86,5.37-11.86,12c0,0.47,0.03,0.93,0.08,1.39c0.01,0.11,0.03,0.22,0.04,0.33
+ c0.06,0.4,0.12,0.79,0.22,1.17c0.01,0.05,0.02,0.1,0.04,0.16c0.24,0.94,0.58,1.83,1.01,2.67c1.88,1.44,4.18,2.29,6.68,2.29h3.8
+ V2.03L13.97,2.03z"/>
+ <path fill="#2BD5FF" d="M2.41,17.07c-0.01-0.05-0.02-0.1-0.04-0.16C2.39,16.97,2.4,17.02,2.41,17.07z"/>
+ <path fill="#2BD5FF" d="M2.15,15.75c-0.01-0.11-0.03-0.22-0.04-0.33C2.12,15.53,2.14,15.64,2.15,15.75z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_middle_14x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_middle_14x24px.svg
new file mode 100644
index 0000000..cabf928
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_middle_14x24px.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="10px" height="24px" viewBox="0 0 10 24" enable-background="new 0 0 10 24" xml:space="preserve">
+<g>
+ <rect y="1" fill="#2BD5FF" width="10" height="22"/>
+ <rect fill="#29CAF2" width="10" height="2"/>
+ <rect y="22" fill="#80E6FF" width="10" height="2"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_right_14x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_right_14x24px.svg
new file mode 100644
index 0000000..f3a795b
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_status_field_right_14x24px.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="24px" viewBox="0 0 14 24" enable-background="new 0 0 14 24" xml:space="preserve">
+<g>
+ <path fill="#29CAF2" d="M4.59,2C7,2,9.25,2.77,11.1,4.08C8.98,1.58,5.88,0,2.42,0H0v2H4.59z"/>
+ <path fill="#80E6FF" d="M11.6,4.71c0.76,1.6,1.2,3.39,1.2,5.29c0,6.63-5.19,12-11.59,12H0v2h2.41C8.82,24,14,18.63,14,12
+ C14,9.25,13.1,6.73,11.6,4.71z"/>
+ <path fill="#2BD5FF" d="M0,2v20h1.21c6.4,0,11.59-5.37,11.59-12c0-1.9-0.44-3.69-1.2-5.29c-0.16-0.22-0.32-0.43-0.5-0.64
+ C9.25,2.77,7,2,4.59,2H0z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_356x96px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_356x96px.svg
new file mode 100644
index 0000000..a0efd34
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_356x96px.svg
@@ -0,0 +1,2007 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="356px" height="96px" viewBox="0 0 356 96" enable-background="new 0 0 356 96" xml:space="preserve">
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-182.1821" y1="-52.7012" x2="-115.6673" y2="130.047" gradientTransform="matrix(-1 0 0 1 29.2188 0)">
+ <stop offset="0" style="stop-color:#2BD5FF"/>
+ <stop offset="0.3516" style="stop-color:#80E6FF"/>
+ <stop offset="0.9176" style="stop-color:#28C4EB"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M356.19,76.95V0H0.24v77.4c0,0,82.53,12.07,184.11,12.07C184.34,89.46,277.67,90.39,356.19,76.95z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-327.1934" y1="86.1738" x2="28.8057" y2="86.1738" gradientTransform="matrix(-1 0 0 1 29.2188 0)">
+ <stop offset="0" style="stop-color:#2BD5FF"/>
+ <stop offset="0.9176" style="stop-color:#28C6ED"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" d="M184.54,89.13C82.96,89.13,0.43,77.06,0.43,77.06l-0.02,4.56c0,0,82.53,14.04,184.11,14.04h171.39
+ l0.1-18.98C277.57,90.05,184.54,89.13,184.54,89.13z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-365.623" y1="-266.3726" x2="-362.1982" y2="-260.4406" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M353.52,73.18c-0.71-1-1.42-2.02-2.14-3.03c-1.43,0.19-2.85,0.38-4.27,0.56
+ c-0.71,1.21-1.42,2.43-2.13,3.65C347.82,73.98,350.67,73.58,353.52,73.18z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-365.6025" y1="-276.23" x2="-361.4175" y2="-268.9812" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M351.38,66.97c0.71-1.2,1.42-2.4,2.14-3.59c-0.71-1.02-1.42-2.04-2.14-3.07
+ c-1.42,0.16-2.85,0.32-4.28,0.48c-0.71,1.2-1.42,2.4-2.14,3.61c0.71,1.04,1.43,2.08,2.14,3.11
+ C348.53,67.33,349.95,67.15,351.38,66.97z"/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-365.5835" y1="-286.0889" x2="-361.4316" y2="-278.8976" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_5_)" d="M351.38,57.12c0.71-1.19,1.43-2.37,2.14-3.55c-0.71-1.03-1.43-2.07-2.14-3.11
+ c-1.43,0.14-2.85,0.27-4.28,0.4c-0.71,1.18-1.43,2.37-2.14,3.57c0.71,1.05,1.43,2.1,2.14,3.15
+ C348.53,57.43,349.95,57.27,351.38,57.12z"/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-365.5649" y1="-295.9473" x2="-361.4463" y2="-288.8135" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_6_)" d="M351.38,47.27c0.71-1.17,1.42-2.34,2.14-3.51c-0.71-1.04-1.43-2.1-2.14-3.15
+ c-1.43,0.11-2.85,0.22-4.28,0.33c-0.71,1.17-1.43,2.35-2.14,3.53c0.71,1.07,1.43,2.13,2.14,3.18
+ C348.52,47.52,349.95,47.4,351.38,47.27z"/>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-365.5439" y1="-305.8047" x2="-361.4585" y2="-298.7285" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_7_)" d="M351.37,37.43c0.71-1.16,1.43-2.32,2.14-3.47c-0.71-1.06-1.43-2.12-2.14-3.19
+ c-1.43,0.08-2.86,0.17-4.29,0.25c-0.71,1.16-1.43,2.32-2.14,3.49c0.72,1.08,1.43,2.16,2.14,3.23
+ C348.52,37.63,349.95,37.52,351.37,37.43z"/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-365.5264" y1="-315.6636" x2="-361.4736" y2="-308.644" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_8_)" d="M351.37,27.58c0.71-1.15,1.43-2.29,2.14-3.43c-0.71-1.07-1.43-2.15-2.14-3.23
+ c-1.43,0.06-2.86,0.11-4.29,0.17c-0.71,1.15-1.43,2.3-2.14,3.45c0.72,1.09,1.43,2.18,2.15,3.26
+ C348.51,27.72,349.94,27.65,351.37,27.58z"/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-365.5044" y1="-325.519" x2="-361.4858" y2="-318.5587" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_9_)" d="M351.37,17.73c0.71-1.14,1.43-2.27,2.14-3.39c-0.72-1.08-1.43-2.18-2.15-3.27
+ c-1.43,0.03-2.86,0.06-4.29,0.09c-0.71,1.13-1.43,2.27-2.14,3.41c0.72,1.11,1.43,2.21,2.15,3.3
+ C348.51,17.82,349.94,17.78,351.37,17.73z"/>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-365.4863" y1="-335.3774" x2="-361.501" y2="-328.4746" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)" d="M351.37,7.88c0.72-1.12,1.43-2.23,2.15-3.35c-0.72-1.1-1.43-2.2-2.15-3.31
+ c-1.43,0-2.86,0.01-4.3,0.01c-0.71,1.12-1.43,2.25-2.15,3.37c0.72,1.12,1.43,2.23,2.15,3.34C348.51,7.92,349.94,7.9,351.37,7.88z"/>
+<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="-354.4824" y1="-269.5742" x2="-350.2368" y2="-262.2206" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_11_)" d="M340.23,73.74c0.71-1.22,1.42-2.45,2.13-3.66c-0.72-1.04-1.43-2.09-2.14-3.14
+ c-1.42,0.17-2.85,0.33-4.28,0.49c-0.71,1.22-1.42,2.45-2.13,3.68c0.71,1.06,1.43,2.12,2.14,3.17
+ C337.38,74.1,338.8,73.92,340.23,73.74z"/>
+<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="-354.4536" y1="-279.6323" x2="-350.2397" y2="-272.3337" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_12_)" d="M340.22,63.69c0.71-1.21,1.42-2.42,2.13-3.62c-0.71-1.05-1.43-2.11-2.14-3.17
+ c-1.43,0.14-2.85,0.28-4.28,0.42c-0.71,1.21-1.43,2.42-2.14,3.64c0.71,1.07,1.43,2.14,2.14,3.21C337.37,64,338.8,63.85,340.22,63.69
+ z"/>
+<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="-354.4287" y1="-289.6929" x2="-350.2451" y2="-282.4467" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_13_)" d="M340.21,53.64c0.71-1.2,1.43-2.39,2.14-3.59c-0.71-1.06-1.43-2.14-2.14-3.21
+ c-1.43,0.12-2.86,0.23-4.29,0.34c-0.71,1.2-1.42,2.4-2.14,3.6c0.71,1.08,1.43,2.17,2.15,3.24
+ C337.36,53.91,338.78,53.78,340.21,53.64z"/>
+<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="-354.4023" y1="-299.7485" x2="-350.2505" y2="-292.5573" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_14_)" d="M340.2,43.59c0.71-1.19,1.43-2.37,2.14-3.55c-0.72-1.08-1.43-2.16-2.15-3.25
+ c-1.43,0.09-2.86,0.18-4.29,0.27c-0.71,1.19-1.43,2.37-2.14,3.57c0.71,1.1,1.43,2.19,2.15,3.28
+ C337.34,43.81,338.77,43.7,340.2,43.59z"/>
+<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="-354.376" y1="-309.8076" x2="-350.2554" y2="-302.6705" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_15_)" d="M340.19,33.54c0.71-1.17,1.43-2.34,2.14-3.51c-0.72-1.09-1.43-2.19-2.15-3.29
+ c-1.43,0.07-2.86,0.13-4.29,0.2c-0.71,1.17-1.43,2.35-2.14,3.53c0.72,1.11,1.43,2.21,2.15,3.31
+ C337.33,33.71,338.76,33.63,340.19,33.54z"/>
+<linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="-354.3486" y1="-319.8672" x2="-350.2593" y2="-312.7842" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_16_)" d="M340.18,23.5c0.71-1.16,1.43-2.32,2.14-3.47c-0.71-1.1-1.43-2.21-2.15-3.32
+ c-1.43,0.04-2.86,0.08-4.29,0.12c-0.71,1.16-1.43,2.33-2.14,3.5c0.72,1.12,1.43,2.24,2.15,3.35
+ C337.32,23.61,338.75,23.55,340.18,23.5z"/>
+<linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="-354.3242" y1="-329.9253" x2="-350.2656" y2="-322.8956" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_17_)" d="M340.17,13.45c0.71-1.15,1.43-2.29,2.15-3.43c-0.72-1.12-1.44-2.24-2.15-3.36
+ c-1.43,0.02-2.86,0.03-4.29,0.05c-0.71,1.15-1.43,2.3-2.14,3.46c0.72,1.13,1.43,2.26,2.15,3.39
+ C337.31,13.51,338.74,13.48,340.17,13.45z"/>
+<linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="-353.3623" y1="-338.3662" x2="-350.2695" y2="-333.0094" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_18_)" d="M333.71,0c0.72,1.15,1.43,2.29,2.15,3.42c1.43-0.01,2.86-0.01,4.3-0.02
+ c0.71-1.14,1.43-2.27,2.15-3.4C339.44,0,336.58,0,333.71,0z"/>
+<linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="-343.7051" y1="-263.6235" x2="-340.2715" y2="-257.6764" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_19_)" d="M331.57,76.08c-0.71-1.06-1.43-2.13-2.14-3.2c-1.43,0.17-2.86,0.33-4.28,0.49
+ c-0.71,1.24-1.42,2.49-2.13,3.73C325.87,76.78,328.72,76.43,331.57,76.08z"/>
+<linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="-343.6792" y1="-273.8569" x2="-339.4126" y2="-266.4669" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_20_)" d="M329.42,69.57c0.71-1.23,1.42-2.46,2.13-3.69c-0.71-1.07-1.43-2.15-2.15-3.23
+ c-1.43,0.14-2.86,0.28-4.28,0.42c-0.71,1.23-1.43,2.46-2.14,3.7c0.72,1.09,1.43,2.18,2.15,3.27C326.57,69.89,328,69.73,329.42,69.57
+ z"/>
+<linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="-343.6494" y1="-284.0972" x2="-339.4106" y2="-276.7554" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_21_)" d="M329.41,59.34c0.71-1.22,1.42-2.44,2.14-3.65c-0.72-1.09-1.43-2.18-2.15-3.27
+ c-1.43,0.12-2.86,0.24-4.29,0.35c-0.71,1.22-1.42,2.44-2.14,3.67c0.72,1.1,1.43,2.21,2.15,3.3
+ C326.55,59.61,327.98,59.48,329.41,59.34z"/>
+<linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="-343.6177" y1="-294.3369" x2="-339.4092" y2="-287.0476" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_22_)" d="M329.39,49.11c0.71-1.21,1.42-2.42,2.14-3.62c-0.72-1.1-1.43-2.2-2.15-3.3
+ c-1.43,0.1-2.86,0.19-4.29,0.28c-0.71,1.21-1.42,2.42-2.14,3.63c0.72,1.11,1.43,2.23,2.15,3.33
+ C326.53,49.33,327.96,49.22,329.39,49.11z"/>
+<linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="-343.5854" y1="-304.5762" x2="-339.4058" y2="-297.3367" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_23_)" d="M329.38,38.88c0.71-1.2,1.43-2.39,2.14-3.58c-0.72-1.11-1.43-2.22-2.15-3.34
+ c-1.43,0.07-2.86,0.14-4.29,0.21c-0.71,1.2-1.42,2.4-2.14,3.6c0.72,1.13,1.43,2.25,2.15,3.37
+ C326.52,39.06,327.95,38.97,329.38,38.88z"/>
+<linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="-343.5562" y1="-314.8164" x2="-339.4053" y2="-307.6269" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_24_)" d="M329.36,28.65c0.71-1.19,1.43-2.37,2.14-3.55c-0.72-1.12-1.43-2.24-2.15-3.37
+ c-1.43,0.05-2.86,0.1-4.29,0.15c-0.71,1.19-1.43,2.38-2.14,3.57c0.72,1.14,1.43,2.27,2.15,3.4
+ C326.5,28.78,327.93,28.71,329.36,28.65z"/>
+<linearGradient id="SVGID_25_" gradientUnits="userSpaceOnUse" x1="-343.5239" y1="-325.0557" x2="-339.4028" y2="-317.9177" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_25_)" d="M329.34,18.42c0.71-1.17,1.43-2.34,2.14-3.51c-0.72-1.13-1.44-2.27-2.15-3.41
+ c-1.43,0.03-2.86,0.05-4.29,0.08c-0.71,1.17-1.43,2.35-2.14,3.53c0.72,1.15,1.44,2.29,2.15,3.44
+ C326.48,18.5,327.91,18.46,329.34,18.42z"/>
+<linearGradient id="SVGID_26_" gradientUnits="userSpaceOnUse" x1="-343.4932" y1="-335.2979" x2="-339.4009" y2="-328.2098" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_26_)" d="M329.33,8.19c0.71-1.16,1.43-2.32,2.14-3.48c-0.72-1.14-1.44-2.29-2.15-3.45
+ c-1.43,0-2.87,0.01-4.3,0.01c-0.71,1.16-1.43,2.33-2.14,3.5c0.72,1.16,1.44,2.32,2.15,3.47C326.46,8.22,327.89,8.21,329.33,8.19z"/>
+<linearGradient id="SVGID_27_" gradientUnits="userSpaceOnUse" x1="-332.5376" y1="-267.1743" x2="-328.2202" y2="-259.6964" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_27_)" d="M318.26,76.36c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.09-1.43-2.19-2.15-3.29
+ c-1.43,0.14-2.86,0.28-4.29,0.42c-0.71,1.25-1.42,2.5-2.14,3.76c0.72,1.11,1.44,2.22,2.15,3.32
+ C315.4,76.67,316.83,76.52,318.26,76.36z"/>
+<linearGradient id="SVGID_28_" gradientUnits="userSpaceOnUse" x1="-332.502" y1="-277.5903" x2="-328.2109" y2="-270.1581" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_28_)" d="M318.24,65.96c0.71-1.24,1.42-2.48,2.14-3.71c-0.71-1.1-1.43-2.21-2.15-3.32
+ c-1.43,0.12-2.86,0.24-4.29,0.36c-0.71,1.24-1.42,2.48-2.14,3.73c0.72,1.12,1.44,2.24,2.15,3.36
+ C315.38,66.23,316.81,66.09,318.24,65.96z"/>
+<linearGradient id="SVGID_29_" gradientUnits="userSpaceOnUse" x1="-332.4697" y1="-288.0034" x2="-328.2061" y2="-280.6185" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_29_)" d="M318.22,55.55c0.71-1.23,1.42-2.46,2.14-3.68c-0.72-1.12-1.44-2.23-2.15-3.36
+ c-1.43,0.1-2.86,0.2-4.29,0.3c-0.71,1.23-1.43,2.46-2.14,3.7c0.72,1.13,1.44,2.26,2.15,3.39C315.36,55.78,316.79,55.66,318.22,55.55
+ z"/>
+<linearGradient id="SVGID_30_" gradientUnits="userSpaceOnUse" x1="-332.4331" y1="-298.416" x2="-328.1973" y2="-291.0793" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_30_)" d="M318.2,45.14c0.71-1.22,1.42-2.44,2.14-3.65c-0.72-1.13-1.43-2.26-2.15-3.39
+ c-1.43,0.08-2.86,0.16-4.29,0.23c-0.71,1.22-1.42,2.44-2.14,3.67c0.72,1.14,1.44,2.28,2.15,3.42
+ C315.34,45.33,316.77,45.24,318.2,45.14z"/>
+<linearGradient id="SVGID_31_" gradientUnits="userSpaceOnUse" x1="-332.3999" y1="-308.8311" x2="-328.1904" y2="-301.54" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_31_)" d="M318.18,34.74c0.71-1.21,1.43-2.42,2.14-3.62c-0.72-1.14-1.44-2.28-2.15-3.42
+ c-1.43,0.06-2.86,0.11-4.29,0.17c-0.71,1.21-1.43,2.42-2.14,3.63c0.72,1.16,1.44,2.3,2.15,3.45
+ C315.31,34.88,316.75,34.81,318.18,34.74z"/>
+<linearGradient id="SVGID_32_" gradientUnits="userSpaceOnUse" x1="-332.3647" y1="-319.2437" x2="-328.1831" y2="-312.0008" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_32_)" d="M318.15,24.33c0.71-1.2,1.43-2.39,2.14-3.58c-0.72-1.15-1.44-2.3-2.15-3.45
+ c-1.43,0.04-2.86,0.07-4.29,0.11c-0.71,1.2-1.43,2.4-2.14,3.6c0.72,1.16,1.44,2.32,2.15,3.48
+ C315.29,24.43,316.72,24.38,318.15,24.33z"/>
+<linearGradient id="SVGID_33_" gradientUnits="userSpaceOnUse" x1="-332.3286" y1="-329.6587" x2="-328.1729" y2="-322.4607" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_33_)" d="M318.13,13.92c0.72-1.19,1.43-2.37,2.14-3.55c-0.72-1.16-1.44-2.32-2.15-3.49
+ c-1.43,0.01-2.86,0.03-4.3,0.04c-0.71,1.19-1.43,2.38-2.14,3.57c0.72,1.18,1.44,2.34,2.15,3.51
+ C315.27,13.98,316.7,13.95,318.13,13.92z"/>
+<linearGradient id="SVGID_34_" gradientUnits="userSpaceOnUse" x1="-331.3086" y1="-338.3657" x2="-328.166" y2="-332.9226" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_34_)" d="M311.66,0c0.72,1.18,1.44,2.37,2.16,3.54c1.43-0.01,2.87-0.01,4.3-0.02
+ c0.71-1.18,1.42-2.35,2.14-3.52C317.39,0,314.53,0,311.66,0z"/>
+<linearGradient id="SVGID_35_" gradientUnits="userSpaceOnUse" x1="-321.7275" y1="-261.2515" x2="-318.2925" y2="-255.3018" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_35_)" d="M309.59,78.59c-0.72-1.11-1.43-2.23-2.15-3.35c-1.43,0.14-2.86,0.28-4.29,0.42
+ c-0.71,1.26-1.43,2.54-2.14,3.81C303.87,79.19,306.73,78.89,309.59,78.59z"/>
+<linearGradient id="SVGID_36_" gradientUnits="userSpaceOnUse" x1="-321.7114" y1="-271.8086" x2="-317.377" y2="-264.3011" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_36_)" d="M307.43,71.83c0.71-1.26,1.42-2.51,2.14-3.77c-0.72-1.12-1.44-2.25-2.15-3.38
+ c-1.43,0.12-2.86,0.24-4.29,0.36c-0.71,1.26-1.43,2.51-2.14,3.77c0.72,1.14,1.44,2.28,2.15,3.41C304.57,72.1,306,71.96,307.43,71.83
+ z"/>
+<linearGradient id="SVGID_37_" gradientUnits="userSpaceOnUse" x1="-321.6733" y1="-282.3789" x2="-317.3638" y2="-274.9145" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_37_)" d="M307.41,61.27c0.71-1.25,1.42-2.49,2.13-3.74c-0.72-1.13-1.44-2.27-2.15-3.41
+ c-1.43,0.1-2.86,0.2-4.29,0.3c-0.71,1.25-1.42,2.5-2.14,3.75c0.72,1.15,1.44,2.29,2.15,3.44C304.54,61.49,305.97,61.38,307.41,61.27
+ z"/>
+<linearGradient id="SVGID_38_" gradientUnits="userSpaceOnUse" x1="-321.6357" y1="-292.9482" x2="-317.3516" y2="-285.5278" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_38_)" d="M307.38,50.7c0.71-1.24,1.42-2.47,2.14-3.71c-0.72-1.14-1.44-2.29-2.15-3.44
+ c-1.43,0.08-2.86,0.16-4.29,0.24c-0.71,1.24-1.43,2.48-2.14,3.72c0.72,1.16,1.44,2.31,2.15,3.46
+ C304.52,50.89,305.95,50.8,307.38,50.7z"/>
+<linearGradient id="SVGID_39_" gradientUnits="userSpaceOnUse" x1="-321.6011" y1="-303.5161" x2="-317.3418" y2="-296.1388" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_39_)" d="M307.35,40.14c0.71-1.23,1.43-2.45,2.14-3.68c-0.72-1.15-1.44-2.31-2.16-3.47
+ c-1.43,0.06-2.86,0.12-4.29,0.18c-0.71,1.23-1.43,2.46-2.14,3.69c0.72,1.17,1.44,2.33,2.15,3.49
+ C304.49,40.29,305.92,40.22,307.35,40.14z"/>
+<linearGradient id="SVGID_40_" gradientUnits="userSpaceOnUse" x1="-321.5649" y1="-314.0874" x2="-317.3306" y2="-306.7532" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_40_)" d="M307.33,29.58c0.71-1.22,1.43-2.44,2.14-3.65c-0.72-1.16-1.44-2.33-2.15-3.5
+ c-1.43,0.04-2.86,0.08-4.3,0.12c-0.71,1.22-1.42,2.44-2.14,3.66c0.72,1.18,1.44,2.35,2.15,3.52
+ C304.47,29.69,305.9,29.63,307.33,29.58z"/>
+<linearGradient id="SVGID_41_" gradientUnits="userSpaceOnUse" x1="-321.5269" y1="-324.6572" x2="-317.3169" y2="-317.3654" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_41_)" d="M307.3,19.02c0.71-1.21,1.43-2.41,2.14-3.62c-0.72-1.17-1.44-2.35-2.16-3.53
+ c-1.43,0.02-2.86,0.04-4.3,0.07c-0.71,1.21-1.43,2.42-2.14,3.63c0.72,1.19,1.44,2.37,2.16,3.55
+ C304.44,19.09,305.87,19.05,307.3,19.02z"/>
+<linearGradient id="SVGID_42_" gradientUnits="userSpaceOnUse" x1="-321.4897" y1="-335.2251" x2="-317.3062" y2="-327.9789" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_42_)" d="M307.28,8.45c0.71-1.2,1.43-2.39,2.14-3.59c-0.72-1.18-1.44-2.37-2.16-3.56
+ c-1.43,0-2.86,0.01-4.3,0.01c-0.71,1.2-1.43,2.4-2.14,3.61c0.72,1.2,1.44,2.39,2.16,3.58C304.42,8.48,305.85,8.47,307.28,8.45z"/>
+<linearGradient id="SVGID_43_" gradientUnits="userSpaceOnUse" x1="-310.5508" y1="-265.1279" x2="-306.1753" y2="-257.5493" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_43_)" d="M296.25,78.6c0.71-1.27,1.43-2.54,2.14-3.81c-0.72-1.14-1.44-2.29-2.15-3.43
+ c-1.43,0.12-2.86,0.24-4.29,0.35c-0.71,1.27-1.43,2.55-2.14,3.82c0.72,1.16,1.44,2.31,2.16,3.46
+ C293.39,78.86,294.82,78.73,296.25,78.6z"/>
+<linearGradient id="SVGID_44_" gradientUnits="userSpaceOnUse" x1="-310.5122" y1="-275.8442" x2="-306.1597" y2="-268.3054" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_44_)" d="M296.22,67.89c0.71-1.26,1.42-2.53,2.14-3.79c-0.72-1.15-1.44-2.3-2.16-3.46
+ c-1.43,0.1-2.86,0.2-4.29,0.3c-0.71,1.26-1.42,2.53-2.14,3.79c0.72,1.17,1.44,2.33,2.15,3.49C293.36,68.12,294.79,68,296.22,67.89z"
+ />
+<linearGradient id="SVGID_45_" gradientUnits="userSpaceOnUse" x1="-310.4736" y1="-286.5635" x2="-306.144" y2="-279.0644" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_45_)" d="M296.2,57.18c0.71-1.25,1.43-2.51,2.14-3.76c-0.72-1.16-1.44-2.32-2.16-3.49
+ c-1.43,0.09-2.86,0.17-4.29,0.25c-0.71,1.25-1.42,2.51-2.14,3.77c0.72,1.17,1.44,2.34,2.16,3.51
+ C293.33,57.37,294.76,57.27,296.2,57.18z"/>
+<linearGradient id="SVGID_46_" gradientUnits="userSpaceOnUse" x1="-310.4351" y1="-297.2803" x2="-306.1279" y2="-289.8201" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_46_)" d="M296.17,46.46c0.71-1.25,1.42-2.49,2.14-3.73c-0.72-1.17-1.44-2.34-2.16-3.51
+ c-1.43,0.07-2.86,0.13-4.3,0.19c-0.71,1.25-1.42,2.49-2.14,3.74c0.72,1.18,1.44,2.36,2.16,3.54
+ C293.31,46.62,294.74,46.54,296.17,46.46z"/>
+<linearGradient id="SVGID_47_" gradientUnits="userSpaceOnUse" x1="-310.3955" y1="-307.9976" x2="-306.1123" y2="-300.5788" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_47_)" d="M296.14,35.75c0.71-1.24,1.43-2.47,2.14-3.71c-0.72-1.18-1.44-2.36-2.16-3.54
+ c-1.43,0.05-2.86,0.09-4.3,0.14c-0.71,1.24-1.42,2.48-2.14,3.72c0.72,1.19,1.44,2.38,2.16,3.56
+ C293.28,35.88,294.71,35.81,296.14,35.75z"/>
+<linearGradient id="SVGID_48_" gradientUnits="userSpaceOnUse" x1="-310.3628" y1="-318.7153" x2="-306.1011" y2="-311.3338" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_48_)" d="M296.12,25.04c0.71-1.23,1.43-2.46,2.14-3.68c-0.72-1.19-1.44-2.38-2.16-3.57
+ c-1.43,0.03-2.86,0.06-4.3,0.09c-0.71,1.23-1.42,2.46-2.14,3.69c0.72,1.2,1.44,2.4,2.16,3.59
+ C293.25,25.13,294.68,25.09,296.12,25.04z"/>
+<linearGradient id="SVGID_49_" gradientUnits="userSpaceOnUse" x1="-310.3232" y1="-329.4331" x2="-306.085" y2="-322.0922" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_49_)" d="M296.09,14.33c0.71-1.22,1.42-2.44,2.14-3.65c-0.72-1.19-1.44-2.39-2.16-3.6
+ c-1.43,0.01-2.86,0.02-4.3,0.04c-0.71,1.22-1.42,2.44-2.14,3.67c0.72,1.21,1.44,2.41,2.16,3.62
+ C293.22,14.38,294.66,14.36,296.09,14.33z"/>
+<linearGradient id="SVGID_50_" gradientUnits="userSpaceOnUse" x1="-309.2559" y1="-338.3657" x2="-306.0708" y2="-332.849" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_50_)" d="M289.61,0c0.72,1.22,1.44,2.43,2.16,3.64c1.43-0.01,2.87-0.01,4.3-0.02
+ c0.71-1.21,1.42-2.42,2.14-3.62C295.34,0,292.47,0,289.61,0z"/>
+<linearGradient id="SVGID_51_" gradientUnits="userSpaceOnUse" x1="-299.7114" y1="-259.2568" x2="-296.2817" y2="-253.3164" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_51_)" d="M287.56,80.72c-0.72-1.16-1.44-2.32-2.16-3.48c-1.43,0.12-2.87,0.23-4.3,0.35
+ c-0.71,1.28-1.42,2.57-2.14,3.86C281.84,81.21,284.7,80.97,287.56,80.72z"/>
+<linearGradient id="SVGID_52_" gradientUnits="userSpaceOnUse" x1="-299.7036" y1="-270.0845" x2="-295.3149" y2="-262.4831" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_52_)" d="M285.4,73.73c0.71-1.28,1.42-2.55,2.14-3.83c-0.72-1.16-1.44-2.33-2.16-3.5
+ c-1.43,0.1-2.87,0.2-4.3,0.3c-0.71,1.28-1.42,2.55-2.14,3.83c0.72,1.18,1.44,2.36,2.16,3.53C282.53,73.95,283.96,73.84,285.4,73.73z
+ "/>
+<linearGradient id="SVGID_53_" gradientUnits="userSpaceOnUse" x1="-299.6655" y1="-280.9321" x2="-295.2988" y2="-273.3688" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_53_)" d="M285.37,62.89c0.71-1.27,1.42-2.54,2.14-3.8c-0.72-1.17-1.44-2.35-2.16-3.53
+ c-1.43,0.08-2.87,0.17-4.3,0.25c-0.71,1.27-1.42,2.54-2.14,3.81c0.72,1.19,1.44,2.37,2.16,3.55
+ C282.51,63.07,283.94,62.98,285.37,62.89z"/>
+<linearGradient id="SVGID_54_" gradientUnits="userSpaceOnUse" x1="-299.627" y1="-291.7808" x2="-295.2812" y2="-284.2538" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_54_)" d="M285.34,52.04c0.71-1.26,1.42-2.52,2.14-3.78c-0.72-1.18-1.44-2.37-2.16-3.55
+ c-1.43,0.07-2.87,0.13-4.3,0.2c-0.71,1.26-1.42,2.52-2.14,3.79c0.72,1.2,1.44,2.39,2.16,3.58C282.48,52.2,283.91,52.12,285.34,52.04
+ z"/>
+<linearGradient id="SVGID_55_" gradientUnits="userSpaceOnUse" x1="-299.5894" y1="-302.6265" x2="-295.2642" y2="-295.135" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_55_)" d="M285.31,41.2c0.71-1.25,1.42-2.5,2.14-3.75c-0.72-1.19-1.44-2.38-2.16-3.58
+ c-1.43,0.05-2.87,0.1-4.3,0.15c-0.71,1.25-1.42,2.51-2.14,3.76c0.72,1.2,1.44,2.41,2.16,3.6C282.45,41.33,283.88,41.27,285.31,41.2z
+ "/>
+<linearGradient id="SVGID_56_" gradientUnits="userSpaceOnUse" x1="-299.5508" y1="-313.4751" x2="-295.2466" y2="-306.02" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_56_)" d="M285.29,30.36c0.71-1.24,1.42-2.49,2.14-3.73c-0.72-1.2-1.44-2.4-2.16-3.61
+ c-1.43,0.03-2.87,0.07-4.3,0.1c-0.71,1.25-1.42,2.49-2.14,3.74c0.72,1.21,1.44,2.42,2.16,3.63
+ C282.42,30.45,283.85,30.41,285.29,30.36z"/>
+<linearGradient id="SVGID_57_" gradientUnits="userSpaceOnUse" x1="-299.5132" y1="-324.3232" x2="-295.23" y2="-316.9045" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_57_)" d="M285.26,19.52c0.71-1.24,1.43-2.47,2.14-3.7c-0.72-1.21-1.44-2.42-2.16-3.63
+ c-1.43,0.02-2.87,0.04-4.3,0.05c-0.71,1.24-1.42,2.48-2.14,3.72c0.72,1.22,1.44,2.44,2.16,3.65
+ C282.39,19.58,283.83,19.55,285.26,19.52z"/>
+<linearGradient id="SVGID_58_" gradientUnits="userSpaceOnUse" x1="-299.4771" y1="-335.1685" x2="-295.2153" y2="-327.787" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_58_)" d="M285.23,8.68c0.71-1.23,1.43-2.45,2.14-3.68c-0.72-1.21-1.44-2.43-2.16-3.66
+ c-1.43,0-2.87,0-4.3,0.01c-0.71,1.23-1.42,2.46-2.14,3.69c0.72,1.23,1.44,2.45,2.16,3.67C282.36,8.7,283.8,8.69,285.23,8.68z"/>
+<linearGradient id="SVGID_59_" gradientUnits="userSpaceOnUse" x1="-288.5273" y1="-263.4331" x2="-284.1084" y2="-255.7793" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_59_)" d="M274.2,80.45c0.71-1.29,1.43-2.58,2.14-3.87c-0.72-1.18-1.44-2.37-2.16-3.55
+ c-1.43,0.1-2.87,0.19-4.3,0.29c-0.71,1.29-1.43,2.58-2.14,3.87c0.72,1.2,1.44,2.39,2.16,3.58C271.34,80.67,272.77,80.56,274.2,80.45
+ z"/>
+<linearGradient id="SVGID_60_" gradientUnits="userSpaceOnUse" x1="-288.4883" y1="-274.4014" x2="-284.0889" y2="-266.7814" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_60_)" d="M274.17,69.49c0.71-1.28,1.43-2.56,2.14-3.84c-0.72-1.19-1.44-2.38-2.16-3.57
+ c-1.43,0.08-2.87,0.17-4.3,0.25c-0.71,1.28-1.43,2.56-2.14,3.85c0.72,1.2,1.44,2.4,2.16,3.6C271.31,69.67,272.74,69.58,274.17,69.49
+ z"/>
+<linearGradient id="SVGID_61_" gradientUnits="userSpaceOnUse" x1="-288.4507" y1="-285.3701" x2="-284.0698" y2="-277.7823" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_61_)" d="M274.15,58.52c0.71-1.28,1.43-2.55,2.14-3.82c-0.72-1.2-1.44-2.39-2.16-3.6
+ c-1.43,0.07-2.86,0.14-4.3,0.2c-0.71,1.27-1.43,2.55-2.14,3.83c0.72,1.21,1.44,2.42,2.16,3.62
+ C271.28,58.68,272.71,58.6,274.15,58.52z"/>
+<linearGradient id="SVGID_62_" gradientUnits="userSpaceOnUse" x1="-288.4146" y1="-296.3384" x2="-284.0527" y2="-288.7835" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_62_)" d="M274.12,47.56c0.71-1.27,1.43-2.53,2.14-3.8c-0.72-1.21-1.44-2.41-2.16-3.62
+ c-1.43,0.05-2.86,0.11-4.3,0.16c-0.71,1.27-1.43,2.53-2.14,3.8c0.72,1.22,1.44,2.43,2.16,3.64
+ C271.25,47.69,272.69,47.63,274.12,47.56z"/>
+<linearGradient id="SVGID_63_" gradientUnits="userSpaceOnUse" x1="-288.3774" y1="-307.3091" x2="-284.0327" y2="-299.7838" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_63_)" d="M274.09,36.6c0.71-1.26,1.43-2.52,2.14-3.78c-0.72-1.21-1.44-2.42-2.16-3.64
+ c-1.43,0.04-2.87,0.08-4.3,0.12c-0.71,1.26-1.43,2.52-2.14,3.78c0.72,1.22,1.44,2.44,2.16,3.66
+ C271.23,36.7,272.66,36.65,274.09,36.6z"/>
+<linearGradient id="SVGID_64_" gradientUnits="userSpaceOnUse" x1="-288.3389" y1="-318.2759" x2="-284.0146" y2="-310.7861" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_64_)" d="M274.06,25.63c0.71-1.25,1.43-2.5,2.14-3.75c-0.72-1.22-1.44-2.44-2.16-3.66
+ c-1.43,0.02-2.87,0.05-4.3,0.07c-0.71,1.25-1.42,2.51-2.14,3.76c0.72,1.23,1.44,2.46,2.16,3.68
+ C271.2,25.7,272.63,25.67,274.06,25.63z"/>
+<linearGradient id="SVGID_65_" gradientUnits="userSpaceOnUse" x1="-288.3022" y1="-329.2456" x2="-283.9971" y2="-321.7888" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_65_)" d="M274.04,14.67c0.71-1.25,1.43-2.49,2.14-3.73c-0.72-1.23-1.44-2.46-2.16-3.69
+ c-1.43,0.01-2.86,0.02-4.3,0.03c-0.71,1.24-1.42,2.49-2.14,3.74c0.72,1.24,1.44,2.47,2.16,3.7
+ C271.17,14.71,272.61,14.69,274.04,14.67z"/>
+<linearGradient id="SVGID_66_" gradientUnits="userSpaceOnUse" x1="-287.2036" y1="-338.3652" x2="-283.9824" y2="-332.786" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_66_)" d="M267.55,0c0.72,1.24,1.44,2.48,2.16,3.72c1.43-0.01,2.86-0.01,4.3-0.01
+ c0.71-1.24,1.43-2.48,2.14-3.71C273.28,0,270.42,0,267.55,0z"/>
+<linearGradient id="SVGID_67_" gradientUnits="userSpaceOnUse" x1="-277.6582" y1="-257.6323" x2="-274.2441" y2="-251.719" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_67_)" d="M265.5,82.45c-0.72-1.2-1.44-2.4-2.16-3.6c-1.43,0.09-2.87,0.18-4.3,0.27
+ c-0.71,1.29-1.43,2.59-2.14,3.89C259.77,82.84,262.64,82.65,265.5,82.45z"/>
+<linearGradient id="SVGID_68_" gradientUnits="userSpaceOnUse" x1="-277.6636" y1="-268.6836" x2="-273.2383" y2="-261.0188" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_68_)" d="M263.34,75.27c0.71-1.29,1.43-2.58,2.14-3.87c-0.72-1.2-1.44-2.41-2.16-3.62
+ c-1.43,0.08-2.87,0.16-4.3,0.23c-0.71,1.29-1.43,2.58-2.14,3.87c0.72,1.22,1.44,2.43,2.16,3.64
+ C260.47,75.45,261.91,75.36,263.34,75.27z"/>
+<linearGradient id="SVGID_69_" gradientUnits="userSpaceOnUse" x1="-277.6289" y1="-279.7568" x2="-273.2192" y2="-272.1191" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_69_)" d="M263.31,64.2c0.71-1.29,1.43-2.57,2.14-3.85c-0.72-1.21-1.44-2.42-2.16-3.64
+ c-1.43,0.07-2.87,0.13-4.3,0.2c-0.71,1.28-1.43,2.57-2.14,3.86c0.72,1.22,1.44,2.44,2.16,3.66
+ C260.44,64.35,261.88,64.28,263.31,64.2z"/>
+<linearGradient id="SVGID_70_" gradientUnits="userSpaceOnUse" x1="-277.5923" y1="-290.8296" x2="-273.2012" y2="-283.224" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_70_)" d="M263.28,53.13c0.71-1.28,1.43-2.56,2.14-3.83c-0.72-1.22-1.44-2.43-2.16-3.66
+ c-1.43,0.05-2.87,0.11-4.3,0.16c-0.71,1.28-1.43,2.56-2.14,3.84c0.72,1.23,1.44,2.45,2.16,3.67
+ C260.42,53.26,261.85,53.2,263.28,53.13z"/>
+<linearGradient id="SVGID_71_" gradientUnits="userSpaceOnUse" x1="-277.5586" y1="-301.9033" x2="-273.1826" y2="-294.3239" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_71_)" d="M263.26,42.06c0.71-1.27,1.43-2.54,2.14-3.81c-0.72-1.22-1.44-2.45-2.16-3.68
+ c-1.43,0.04-2.87,0.08-4.3,0.12c-0.71,1.27-1.43,2.54-2.14,3.82c0.72,1.23,1.44,2.47,2.16,3.69
+ C260.39,42.16,261.82,42.11,263.26,42.06z"/>
+<linearGradient id="SVGID_72_" gradientUnits="userSpaceOnUse" x1="-277.5239" y1="-312.9766" x2="-273.1646" y2="-305.4259" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_72_)" d="M263.23,31c0.71-1.27,1.43-2.53,2.14-3.79c-0.72-1.23-1.44-2.46-2.16-3.69
+ c-1.43,0.03-2.87,0.05-4.3,0.08c-0.71,1.27-1.43,2.53-2.14,3.8c0.72,1.24,1.44,2.48,2.16,3.71C260.36,31.07,261.8,31.03,263.23,31z"
+ />
+<linearGradient id="SVGID_73_" gradientUnits="userSpaceOnUse" x1="-277.4893" y1="-324.0508" x2="-273.1465" y2="-316.5289" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_73_)" d="M263.2,19.93c0.71-1.26,1.43-2.52,2.14-3.77c-0.72-1.24-1.44-2.47-2.16-3.71
+ c-1.43,0.01-2.87,0.03-4.3,0.04c-0.71,1.26-1.43,2.52-2.14,3.78c0.72,1.25,1.44,2.49,2.16,3.73
+ C260.34,19.97,261.77,19.95,263.2,19.93z"/>
+<linearGradient id="SVGID_74_" gradientUnits="userSpaceOnUse" x1="-277.4536" y1="-335.1245" x2="-273.1274" y2="-327.6313" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_74_)" d="M263.18,8.86c0.71-1.25,1.43-2.5,2.14-3.75c-0.72-1.24-1.44-2.49-2.16-3.74c-1.43,0-2.87,0-4.3,0.01
+ c-0.71,1.25-1.43,2.51-2.14,3.76c0.72,1.25,1.44,2.5,2.16,3.75C260.31,8.88,261.74,8.87,263.18,8.86z"/>
+<linearGradient id="SVGID_75_" gradientUnits="userSpaceOnUse" x1="-266.4678" y1="-262.0903" x2="-262.0205" y2="-254.3874" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_75_)" d="M252.13,81.92c0.71-1.3,1.43-2.6,2.14-3.9c-0.72-1.22-1.44-2.44-2.16-3.66
+ c-1.44,0.08-2.87,0.15-4.3,0.22c-0.71,1.3-1.43,2.6-2.14,3.9c0.72,1.23,1.44,2.45,2.16,3.68C249.26,82.09,250.7,82.01,252.13,81.92z
+ "/>
+<linearGradient id="SVGID_76_" gradientUnits="userSpaceOnUse" x1="-266.4355" y1="-273.2568" x2="-262.0034" y2="-265.5802" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_76_)" d="M252.11,70.76c0.71-1.29,1.43-2.59,2.14-3.88c-0.72-1.22-1.44-2.44-2.16-3.67
+ c-1.43,0.06-2.87,0.12-4.3,0.19c-0.71,1.29-1.43,2.58-2.14,3.88c0.72,1.23,1.44,2.46,2.16,3.69
+ C249.24,70.9,250.67,70.83,252.11,70.76z"/>
+<linearGradient id="SVGID_77_" gradientUnits="userSpaceOnUse" x1="-266.4038" y1="-284.4263" x2="-261.9854" y2="-276.7733" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_77_)" d="M252.08,59.59c0.71-1.29,1.43-2.58,2.14-3.86c-0.72-1.23-1.44-2.46-2.16-3.69
+ c-1.43,0.05-2.87,0.1-4.3,0.15c-0.71,1.29-1.43,2.58-2.14,3.87c0.72,1.24,1.44,2.47,2.16,3.71
+ C249.21,59.71,250.65,59.66,252.08,59.59z"/>
+<linearGradient id="SVGID_78_" gradientUnits="userSpaceOnUse" x1="-266.3706" y1="-295.5933" x2="-261.9673" y2="-287.9665" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_78_)" d="M252.05,48.43c0.71-1.28,1.43-2.56,2.14-3.84c-0.72-1.23-1.44-2.47-2.16-3.71
+ c-1.43,0.04-2.87,0.08-4.3,0.12c-0.71,1.28-1.43,2.56-2.14,3.85c0.72,1.24,1.44,2.49,2.16,3.72
+ C249.19,48.53,250.62,48.48,252.05,48.43z"/>
+<linearGradient id="SVGID_79_" gradientUnits="userSpaceOnUse" x1="-266.3398" y1="-306.7612" x2="-261.9517" y2="-299.1607" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_79_)" d="M252.03,37.27c0.71-1.28,1.43-2.55,2.14-3.83c-0.72-1.24-1.44-2.48-2.16-3.73
+ c-1.43,0.03-2.87,0.06-4.3,0.09c-0.71,1.28-1.43,2.56-2.14,3.83c0.72,1.25,1.44,2.5,2.16,3.74
+ C249.17,37.34,250.6,37.31,252.03,37.27z"/>
+<linearGradient id="SVGID_80_" gradientUnits="userSpaceOnUse" x1="-266.3076" y1="-317.9287" x2="-261.9336" y2="-310.3527" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_80_)" d="M252,26.1c0.71-1.27,1.43-2.54,2.14-3.81c-0.72-1.25-1.44-2.49-2.16-3.74
+ c-1.43,0.02-2.87,0.04-4.3,0.06c-0.71,1.27-1.43,2.54-2.14,3.82c0.72,1.25,1.44,2.51,2.16,3.76C249.14,26.16,250.57,26.13,252,26.1z
+ "/>
+<linearGradient id="SVGID_81_" gradientUnits="userSpaceOnUse" x1="-266.2759" y1="-329.0972" x2="-261.9165" y2="-321.5465" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_81_)" d="M251.98,14.94c0.71-1.27,1.43-2.53,2.14-3.79c-0.72-1.25-1.44-2.5-2.16-3.76
+ c-1.43,0.01-2.86,0.02-4.3,0.02c-0.71,1.26-1.43,2.53-2.14,3.8c0.72,1.26,1.44,2.52,2.16,3.77
+ C249.11,14.97,250.55,14.96,251.98,14.94z"/>
+<linearGradient id="SVGID_82_" gradientUnits="userSpaceOnUse" x1="-265.1641" y1="-338.3574" x2="-261.9146" y2="-332.7291" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_82_)" d="M245.5,0c0.72,1.26,1.44,2.53,2.16,3.79c1.43,0,2.87-0.01,4.3-0.01c0.71-1.26,1.43-2.52,2.14-3.78
+ C251.23,0,248.37,0,245.5,0z"/>
+<linearGradient id="SVGID_83_" gradientUnits="userSpaceOnUse" x1="-255.5791" y1="-256.3857" x2="-252.186" y2="-250.5088" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_83_)" d="M243.42,83.79c-0.72-1.23-1.44-2.46-2.16-3.69c-1.43,0.07-2.87,0.14-4.31,0.2
+ c-0.71,1.3-1.43,2.61-2.14,3.91C237.68,84.08,240.55,83.94,243.42,83.79z"/>
+<linearGradient id="SVGID_84_" gradientUnits="userSpaceOnUse" x1="-255.5938" y1="-267.6055" x2="-251.1465" y2="-259.9026" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_84_)" d="M241.26,76.46c0.71-1.3,1.43-2.6,2.14-3.9c-0.72-1.23-1.44-2.47-2.16-3.71
+ c-1.43,0.06-2.87,0.12-4.3,0.17c-0.71,1.3-1.43,2.6-2.14,3.9c0.72,1.24,1.44,2.49,2.16,3.73C238.39,76.59,239.82,76.53,241.26,76.46
+ z"/>
+<linearGradient id="SVGID_85_" gradientUnits="userSpaceOnUse" x1="-255.5659" y1="-278.8545" x2="-251.1294" y2="-271.1702" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_85_)" d="M241.23,65.22c0.72-1.3,1.43-2.59,2.14-3.88c-0.72-1.24-1.44-2.48-2.16-3.72
+ c-1.43,0.05-2.87,0.1-4.3,0.14c-0.71,1.29-1.43,2.59-2.14,3.89c0.72,1.25,1.44,2.49,2.16,3.74
+ C238.36,65.33,239.8,65.27,241.23,65.22z"/>
+<linearGradient id="SVGID_86_" gradientUnits="userSpaceOnUse" x1="-255.5381" y1="-290.1001" x2="-251.1147" y2="-282.4387" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_86_)" d="M241.21,53.97c0.71-1.29,1.43-2.58,2.14-3.87c-0.72-1.24-1.44-2.49-2.16-3.74
+ c-1.43,0.04-2.87,0.08-4.3,0.12c-0.71,1.29-1.43,2.58-2.15,3.87c0.72,1.25,1.44,2.5,2.16,3.75
+ C238.34,54.06,239.78,54.02,241.21,53.97z"/>
+<linearGradient id="SVGID_87_" gradientUnits="userSpaceOnUse" x1="-255.5098" y1="-301.3467" x2="-251.0991" y2="-293.7072" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_87_)" d="M241.19,42.73c0.71-1.29,1.43-2.57,2.14-3.85c-0.72-1.25-1.44-2.5-2.16-3.75
+ c-1.43,0.03-2.87,0.06-4.3,0.09c-0.71,1.29-1.43,2.57-2.14,3.86c0.72,1.26,1.44,2.51,2.16,3.77
+ C238.32,42.8,239.75,42.77,241.19,42.73z"/>
+<linearGradient id="SVGID_88_" gradientUnits="userSpaceOnUse" x1="-255.4805" y1="-312.5938" x2="-251.0825" y2="-304.9763" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_88_)" d="M241.17,31.49c0.72-1.28,1.43-2.56,2.14-3.84c-0.72-1.25-1.44-2.51-2.16-3.77
+ c-1.43,0.02-2.87,0.04-4.3,0.06c-0.71,1.28-1.43,2.56-2.14,3.85c0.72,1.26,1.44,2.52,2.16,3.78
+ C238.3,31.54,239.73,31.51,241.17,31.49z"/>
+<linearGradient id="SVGID_89_" gradientUnits="userSpaceOnUse" x1="-255.4521" y1="-323.8418" x2="-251.0654" y2="-316.2438" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_89_)" d="M241.14,20.24c0.71-1.28,1.43-2.55,2.14-3.82c-0.72-1.26-1.43-2.52-2.16-3.78
+ c-1.43,0.01-2.87,0.02-4.3,0.03c-0.71,1.28-1.43,2.55-2.14,3.83c0.72,1.27,1.44,2.53,2.16,3.79
+ C238.28,20.28,239.71,20.26,241.14,20.24z"/>
+<linearGradient id="SVGID_90_" gradientUnits="userSpaceOnUse" x1="-255.4238" y1="-335.0898" x2="-251.0493" y2="-327.513" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_90_)" d="M241.12,9c0.71-1.27,1.43-2.54,2.14-3.81c-0.72-1.26-1.43-2.53-2.15-3.8c-1.43,0-2.87,0-4.3,0
+ c-0.71,1.27-1.43,2.55-2.14,3.82c0.72,1.27,1.44,2.54,2.15,3.8C238.25,9.01,239.69,9.01,241.12,9z"/>
+<linearGradient id="SVGID_91_" gradientUnits="userSpaceOnUse" x1="-244.3813" y1="-261.1006" x2="-239.9204" y2="-253.374" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_91_)" d="M230.04,83.01c0.72-1.3,1.43-2.61,2.15-3.91c-0.72-1.25-1.44-2.49-2.16-3.74
+ c-1.44,0.05-2.87,0.1-4.31,0.15c-0.71,1.3-1.43,2.61-2.15,3.91c0.72,1.26,1.44,2.51,2.16,3.76
+ C227.16,83.13,228.6,83.07,230.04,83.01z"/>
+<linearGradient id="SVGID_92_" gradientUnits="userSpaceOnUse" x1="-244.356" y1="-272.4121" x2="-239.9077" y2="-264.7075" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_92_)" d="M230.02,71.7c0.71-1.3,1.43-2.6,2.15-3.9c-0.72-1.25-1.44-2.5-2.16-3.75
+ c-1.43,0.04-2.87,0.09-4.3,0.13c-0.72,1.3-1.43,2.6-2.15,3.9c0.72,1.26,1.44,2.52,2.16,3.77C227.15,71.8,228.58,71.75,230.02,71.7z"
+ />
+<linearGradient id="SVGID_93_" gradientUnits="userSpaceOnUse" x1="-244.3325" y1="-283.729" x2="-239.8931" y2="-276.0396" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_93_)" d="M230,60.39c0.71-1.3,1.43-2.59,2.14-3.89c-0.72-1.25-1.44-2.51-2.16-3.77
+ c-1.43,0.04-2.87,0.07-4.3,0.11c-0.71,1.29-1.43,2.59-2.14,3.89c0.72,1.26,1.44,2.52,2.16,3.78C227.13,60.47,228.56,60.43,230,60.39
+ z"/>
+<linearGradient id="SVGID_94_" gradientUnits="userSpaceOnUse" x1="-244.3091" y1="-295.0435" x2="-239.8799" y2="-287.3719" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_94_)" d="M229.98,49.08c0.71-1.29,1.43-2.58,2.14-3.88c-0.72-1.26-1.44-2.52-2.16-3.78
+ c-1.44,0.03-2.87,0.06-4.3,0.08c-0.71,1.29-1.43,2.58-2.14,3.88c0.72,1.27,1.44,2.53,2.16,3.79
+ C227.11,49.14,228.54,49.11,229.98,49.08z"/>
+<linearGradient id="SVGID_95_" gradientUnits="userSpaceOnUse" x1="-244.2842" y1="-306.3579" x2="-239.8657" y2="-298.7049" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_95_)" d="M229.96,37.76c0.71-1.29,1.43-2.58,2.14-3.86c-0.72-1.26-1.44-2.53-2.16-3.79
+ c-1.43,0.02-2.87,0.04-4.3,0.06c-0.71,1.29-1.43,2.58-2.14,3.87c0.72,1.27,1.44,2.54,2.16,3.8
+ C227.09,37.81,228.52,37.79,229.96,37.76z"/>
+<linearGradient id="SVGID_96_" gradientUnits="userSpaceOnUse" x1="-244.2607" y1="-317.6738" x2="-239.8521" y2="-310.0378" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_96_)" d="M229.94,26.45c0.71-1.28,1.43-2.57,2.14-3.85c-0.72-1.27-1.44-2.53-2.16-3.8
+ c-1.43,0.01-2.87,0.03-4.3,0.04c-0.71,1.28-1.43,2.57-2.14,3.85c0.72,1.27,1.44,2.54,2.16,3.81
+ C227.07,26.49,228.5,26.47,229.94,26.45z"/>
+<linearGradient id="SVGID_97_" gradientUnits="userSpaceOnUse" x1="-244.2373" y1="-328.9888" x2="-239.8394" y2="-321.3713" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_97_)" d="M229.92,15.14c0.71-1.28,1.43-2.56,2.14-3.84c-0.72-1.27-1.44-2.54-2.16-3.82
+ c-1.43,0-2.86,0.01-4.3,0.01c-0.71,1.28-1.43,2.56-2.14,3.85c0.72,1.28,1.44,2.55,2.16,3.82C227.05,15.16,228.49,15.15,229.92,15.14
+ z"/>
+<linearGradient id="SVGID_98_" gradientUnits="userSpaceOnUse" x1="-243.1221" y1="-338.3506" x2="-239.853" y2="-332.6884" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_98_)" d="M223.45,0c0.72,1.28,1.43,2.56,2.15,3.83c1.43,0,2.86,0,4.3-0.01c0.71-1.28,1.43-2.55,2.14-3.83
+ C229.18,0,226.31,0,223.45,0z"/>
+<linearGradient id="SVGID_99_" gradientUnits="userSpaceOnUse" x1="-233.478" y1="-255.5127" x2="-230.1138" y2="-249.6856" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_99_)" d="M221.32,84.74c-0.72-1.26-1.44-2.51-2.16-3.77c-1.44,0.04-2.87,0.09-4.31,0.13
+ c-0.72,1.3-1.43,2.61-2.15,3.91C215.58,84.93,218.45,84.84,221.32,84.74z"/>
+<linearGradient id="SVGID_100_" gradientUnits="userSpaceOnUse" x1="-233.5024" y1="-266.855" x2="-229.0454" y2="-259.1352" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_100_)" d="M219.16,77.29c0.71-1.3,1.43-2.61,2.14-3.91c-0.72-1.26-1.44-2.52-2.16-3.78
+ c-1.44,0.04-2.87,0.08-4.31,0.11c-0.72,1.3-1.43,2.6-2.15,3.9c0.72,1.27,1.44,2.53,2.16,3.8C216.29,77.38,217.72,77.34,219.16,77.29
+ z"/>
+<linearGradient id="SVGID_101_" gradientUnits="userSpaceOnUse" x1="-233.4824" y1="-278.2231" x2="-229.0342" y2="-270.5186" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_101_)" d="M219.14,65.93c0.72-1.3,1.43-2.6,2.15-3.9c-0.72-1.26-1.44-2.53-2.16-3.79
+ c-1.44,0.03-2.87,0.06-4.31,0.09c-0.72,1.3-1.43,2.6-2.15,3.9c0.72,1.27,1.44,2.54,2.16,3.81C216.27,66,217.71,65.97,219.14,65.93z"
+ />
+<linearGradient id="SVGID_102_" gradientUnits="userSpaceOnUse" x1="-233.4624" y1="-289.5913" x2="-229.0225" y2="-281.9011" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_102_)" d="M219.12,54.56c0.71-1.29,1.43-2.59,2.15-3.89c-0.72-1.27-1.44-2.53-2.16-3.8
+ c-1.43,0.03-2.87,0.05-4.3,0.07c-0.71,1.29-1.43,2.59-2.15,3.89c0.72,1.27,1.44,2.54,2.16,3.81
+ C216.25,54.62,217.69,54.59,219.12,54.56z"/>
+<linearGradient id="SVGID_103_" gradientUnits="userSpaceOnUse" x1="-233.4443" y1="-300.959" x2="-229.0122" y2="-293.2823" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_103_)" d="M219.11,43.2c0.71-1.29,1.43-2.59,2.15-3.88c-0.72-1.27-1.44-2.54-2.16-3.81
+ c-1.43,0.02-2.87,0.04-4.3,0.06c-0.72,1.29-1.43,2.59-2.15,3.88c0.72,1.28,1.44,2.55,2.16,3.82
+ C216.24,43.24,217.67,43.22,219.11,43.2z"/>
+<linearGradient id="SVGID_104_" gradientUnits="userSpaceOnUse" x1="-233.4233" y1="-312.3262" x2="-229.0005" y2="-304.6656" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_104_)" d="M219.09,31.83c0.71-1.29,1.43-2.58,2.14-3.87c-0.72-1.27-1.44-2.54-2.16-3.82
+ c-1.43,0.01-2.87,0.02-4.3,0.04c-0.71,1.29-1.43,2.58-2.14,3.87c0.72,1.28,1.44,2.55,2.16,3.83
+ C216.23,31.86,217.66,31.85,219.09,31.83z"/>
+<linearGradient id="SVGID_105_" gradientUnits="userSpaceOnUse" x1="-233.4058" y1="-323.6953" x2="-228.9893" y2="-316.0457" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_105_)" d="M219.08,20.46c0.71-1.29,1.43-2.57,2.14-3.86c-0.72-1.28-1.43-2.55-2.15-3.83
+ c-1.43,0.01-2.87,0.01-4.3,0.02c-0.71,1.29-1.43,2.57-2.14,3.86c0.72,1.28,1.44,2.56,2.15,3.84
+ C216.21,20.49,217.64,20.47,219.08,20.46z"/>
+<linearGradient id="SVGID_106_" gradientUnits="userSpaceOnUse" x1="-233.3862" y1="-335.063" x2="-228.979" y2="-327.4294" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_106_)" d="M219.06,9.1c0.71-1.29,1.43-2.57,2.14-3.85c-0.72-1.28-1.44-2.56-2.15-3.84c-1.43,0-2.86,0-4.3,0
+ c-0.71,1.29-1.43,2.57-2.14,3.86c0.72,1.28,1.44,2.56,2.15,3.85C216.2,9.11,217.63,9.1,219.06,9.1z"/>
+<linearGradient id="SVGID_107_" gradientUnits="userSpaceOnUse" x1="-222.2739" y1="-260.4614" x2="-217.8154" y2="-252.7391" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_107_)" d="M207.93,83.72c0.72-1.3,1.43-2.61,2.15-3.91c-0.72-1.27-1.44-2.54-2.16-3.81
+ c-1.44,0.03-2.88,0.06-4.31,0.08c-0.71,1.3-1.43,2.6-2.15,3.9c0.72,1.28,1.44,2.55,2.16,3.82
+ C205.05,83.78,206.49,83.75,207.93,83.72z"/>
+<linearGradient id="SVGID_108_" gradientUnits="userSpaceOnUse" x1="-222.2593" y1="-271.8691" x2="-217.8081" y2="-264.1595" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_108_)" d="M207.92,72.31c0.72-1.3,1.43-2.6,2.15-3.9c-0.72-1.27-1.44-2.54-2.16-3.82
+ c-1.44,0.03-2.87,0.05-4.3,0.07c-0.72,1.3-1.43,2.6-2.15,3.9c0.72,1.28,1.44,2.55,2.16,3.83C205.04,72.37,206.48,72.34,207.92,72.31
+ z"/>
+<linearGradient id="SVGID_109_" gradientUnits="userSpaceOnUse" x1="-222.2451" y1="-283.2788" x2="-217.7993" y2="-275.5785" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_109_)" d="M207.9,60.9c0.72-1.3,1.43-2.6,2.15-3.9c-0.72-1.27-1.44-2.55-2.16-3.82
+ c-1.43,0.02-2.87,0.04-4.3,0.06c-0.72,1.3-1.43,2.59-2.15,3.89c0.72,1.28,1.44,2.56,2.16,3.84C205.03,60.95,206.47,60.92,207.9,60.9
+ z"/>
+<linearGradient id="SVGID_110_" gradientUnits="userSpaceOnUse" x1="-222.231" y1="-294.6875" x2="-217.792" y2="-286.999" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_110_)" d="M207.89,49.49c0.72-1.3,1.43-2.59,2.15-3.89c-0.72-1.27-1.44-2.55-2.16-3.83
+ c-1.43,0.02-2.87,0.03-4.3,0.04c-0.71,1.29-1.43,2.59-2.15,3.88c0.72,1.28,1.44,2.56,2.16,3.84
+ C205.02,49.53,206.46,49.51,207.89,49.49z"/>
+<linearGradient id="SVGID_111_" gradientUnits="userSpaceOnUse" x1="-222.2173" y1="-306.0991" x2="-217.7837" y2="-298.4199" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_111_)" d="M207.88,38.08c0.71-1.29,1.43-2.59,2.15-3.88c-0.72-1.28-1.44-2.56-2.15-3.84
+ c-1.43,0.01-2.87,0.02-4.3,0.03c-0.71,1.29-1.43,2.59-2.15,3.88c0.72,1.28,1.44,2.57,2.15,3.85
+ C205.01,38.11,206.45,38.1,207.88,38.08z"/>
+<linearGradient id="SVGID_112_" gradientUnits="userSpaceOnUse" x1="-222.2036" y1="-317.5083" x2="-217.7754" y2="-309.8384" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_112_)" d="M207.87,26.68c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.28-1.44-2.56-2.15-3.84
+ c-1.43,0.01-2.87,0.02-4.3,0.02c-0.72,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.44,2.57,2.15,3.85C205,26.7,206.43,26.69,207.87,26.68z
+ "/>
+<linearGradient id="SVGID_113_" gradientUnits="userSpaceOnUse" x1="-222.1899" y1="-328.9189" x2="-217.7681" y2="-321.26" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_113_)" d="M207.86,15.27c0.71-1.29,1.43-2.58,2.14-3.87c-0.72-1.28-1.44-2.57-2.15-3.85
+ c-1.43,0-2.87,0-4.3,0.01c-0.72,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.43,2.57,2.15,3.86C204.99,15.28,206.42,15.27,207.86,15.27z"
+ />
+<linearGradient id="SVGID_114_" gradientUnits="userSpaceOnUse" x1="-221.0752" y1="-338.3481" x2="-217.7915" y2="-332.6606" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_114_)" d="M201.39,0c0.72,1.29,1.43,2.58,2.15,3.86c1.43,0,2.86,0,4.3,0c0.71-1.29,1.43-2.58,2.14-3.86
+ C207.12,0,204.26,0,201.39,0z"/>
+<linearGradient id="SVGID_115_" gradientUnits="userSpaceOnUse" x1="-211.3623" y1="-255.0103" x2="-208.0376" y2="-249.2517" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_115_)" d="M199.21,85.31c-0.72-1.28-1.44-2.55-2.16-3.83c-1.44,0.02-2.87,0.04-4.31,0.05
+ c-0.72,1.3-1.43,2.6-2.15,3.89C193.46,85.39,196.33,85.36,199.21,85.31z"/>
+<linearGradient id="SVGID_116_" gradientUnits="userSpaceOnUse" x1="-211.3921" y1="-266.4248" x2="-206.9434" y2="-258.7194" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_116_)" d="M197.05,77.77c0.72-1.3,1.43-2.6,2.15-3.9c-0.72-1.28-1.44-2.56-2.16-3.84
+ c-1.44,0.02-2.87,0.03-4.31,0.04c-0.72,1.3-1.43,2.59-2.15,3.89c0.72,1.29,1.44,2.57,2.16,3.85
+ C194.18,77.81,195.61,77.79,197.05,77.77z"/>
+<linearGradient id="SVGID_117_" gradientUnits="userSpaceOnUse" x1="-211.3843" y1="-277.8638" x2="-206.939" y2="-270.1643" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_117_)" d="M197.04,66.34c0.72-1.3,1.43-2.6,2.15-3.89c-0.72-1.28-1.44-2.56-2.15-3.84
+ c-1.44,0.02-2.87,0.03-4.31,0.04c-0.72,1.3-1.43,2.59-2.15,3.89c0.72,1.29,1.44,2.57,2.16,3.85
+ C194.17,66.37,195.6,66.35,197.04,66.34z"/>
+<linearGradient id="SVGID_118_" gradientUnits="userSpaceOnUse" x1="-211.3745" y1="-289.2998" x2="-206.9336" y2="-281.6079" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_118_)" d="M197.03,54.9c0.71-1.29,1.43-2.59,2.15-3.89c-0.72-1.28-1.43-2.56-2.15-3.85
+ c-1.44,0.01-2.87,0.02-4.3,0.03c-0.72,1.29-1.43,2.59-2.15,3.88c0.72,1.29,1.44,2.57,2.15,3.86
+ C194.16,54.93,195.6,54.91,197.03,54.9z"/>
+<linearGradient id="SVGID_119_" gradientUnits="userSpaceOnUse" x1="-211.3662" y1="-300.7378" x2="-206.9287" y2="-293.0518" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_119_)" d="M197.03,43.46c0.72-1.29,1.43-2.59,2.15-3.88c-0.72-1.28-1.44-2.57-2.15-3.85
+ c-1.43,0.01-2.87,0.02-4.3,0.03c-0.71,1.29-1.43,2.59-2.15,3.88c0.72,1.29,1.43,2.57,2.15,3.86
+ C194.16,43.48,195.59,43.48,197.03,43.46z"/>
+<linearGradient id="SVGID_120_" gradientUnits="userSpaceOnUse" x1="-211.3569" y1="-312.1753" x2="-206.9238" y2="-304.4969" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_120_)" d="M197.02,32.03c0.71-1.29,1.43-2.59,2.15-3.88c-0.72-1.28-1.43-2.57-2.15-3.86
+ c-1.43,0.01-2.87,0.01-4.3,0.02c-0.71,1.29-1.43,2.59-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.86
+ C194.15,32.04,195.58,32.03,197.02,32.03z"/>
+<linearGradient id="SVGID_121_" gradientUnits="userSpaceOnUse" x1="-211.3491" y1="-323.6118" x2="-206.9189" y2="-315.9385" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_121_)" d="M197.01,20.59c0.71-1.29,1.43-2.58,2.14-3.88c-0.72-1.29-1.43-2.57-2.15-3.86
+ c-1.43,0-2.87,0.01-4.3,0.01c-0.72,1.29-1.43,2.58-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87C194.14,20.6,195.58,20.6,197.01,20.59z"
+ />
+<linearGradient id="SVGID_122_" gradientUnits="userSpaceOnUse" x1="-211.3398" y1="-335.0503" x2="-206.9136" y2="-327.3838" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_122_)" d="M197,9.15c0.71-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.44-2.58-2.15-3.87c-1.43,0-2.87,0-4.3,0
+ c-0.71,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.43,2.58,2.15,3.87C194.13,9.16,195.57,9.16,197,9.15z"/>
+<linearGradient id="SVGID_123_" gradientUnits="userSpaceOnUse" x1="-200.1514" y1="-260.1733" x2="-195.7119" y2="-252.484" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_123_)" d="M185.81,84.04c0.72-1.3,1.43-2.59,2.15-3.89c-0.72-1.29-1.44-2.57-2.15-3.86
+ c-1.44,0.01-2.87,0.01-4.31,0.02c-0.72,1.29-1.44,2.59-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87
+ C182.94,84.05,184.37,84.05,185.81,84.04z"/>
+<linearGradient id="SVGID_124_" gradientUnits="userSpaceOnUse" x1="-200.1489" y1="-271.625" x2="-195.7109" y2="-263.9382" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_124_)" d="M185.81,72.59c0.72-1.29,1.44-2.59,2.15-3.89c-0.72-1.29-1.44-2.57-2.15-3.86
+ c-1.43,0.01-2.87,0.01-4.31,0.02c-0.72,1.29-1.44,2.58-2.15,3.88c0.72,1.29,1.44,2.58,2.15,3.87
+ C182.93,72.6,184.37,72.6,185.81,72.59z"/>
+<linearGradient id="SVGID_125_" gradientUnits="userSpaceOnUse" x1="-200.146" y1="-283.0791" x2="-195.7095" y2="-275.3948" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_125_)" d="M185.8,61.13c0.72-1.29,1.43-2.59,2.15-3.88c-0.72-1.29-1.44-2.58-2.15-3.86
+ c-1.44,0-2.87,0.01-4.31,0.01c-0.72,1.29-1.43,2.59-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87C182.93,61.15,184.37,61.14,185.8,61.13
+ z"/>
+<linearGradient id="SVGID_126_" gradientUnits="userSpaceOnUse" x1="-200.1416" y1="-294.5293" x2="-195.7075" y2="-286.8492" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_126_)" d="M185.8,49.68c0.72-1.29,1.43-2.59,2.15-3.88c-0.72-1.29-1.44-2.58-2.15-3.86
+ c-1.43,0-2.87,0.01-4.3,0.01c-0.72,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.43,2.58,2.15,3.87C182.93,49.69,184.37,49.69,185.8,49.68z
+ "/>
+<linearGradient id="SVGID_127_" gradientUnits="userSpaceOnUse" x1="-200.1396" y1="-305.9839" x2="-195.7061" y2="-298.3047" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_127_)" d="M185.8,38.23c0.72-1.29,1.43-2.59,2.15-3.88c-0.72-1.29-1.44-2.58-2.15-3.87
+ c-1.43,0-2.87,0.01-4.3,0.01c-0.72,1.29-1.43,2.58-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87C182.93,38.24,184.36,38.24,185.8,38.23z
+ "/>
+<linearGradient id="SVGID_128_" gradientUnits="userSpaceOnUse" x1="-200.1367" y1="-317.4355" x2="-195.7051" y2="-309.7597" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_128_)" d="M185.79,26.78c0.71-1.29,1.43-2.59,2.15-3.88c-0.72-1.29-1.43-2.58-2.15-3.87c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.29-1.43,2.58-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87C182.93,26.78,184.36,26.78,185.79,26.78z"/>
+<linearGradient id="SVGID_129_" gradientUnits="userSpaceOnUse" x1="-200.1338" y1="-328.8887" x2="-195.7036" y2="-321.2154" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_129_)" d="M185.79,15.32c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.43-2.58-2.15-3.87c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.29-1.43,2.58-2.15,3.88c0.72,1.29,1.43,2.58,2.15,3.87C182.92,15.33,184.36,15.33,185.79,15.32z"/>
+<linearGradient id="SVGID_130_" gradientUnits="userSpaceOnUse" x1="-199.0234" y1="-338.3462" x2="-195.7349" y2="-332.6502" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_130_)" d="M179.34,0c0.71,1.29,1.43,2.58,2.15,3.88c1.43,0,2.86,0,4.3,0c0.72-1.29,1.43-2.58,2.15-3.87
+ C185.07,0,182.21,0,179.34,0z"/>
+<linearGradient id="SVGID_131_" gradientUnits="userSpaceOnUse" x1="-189.2378" y1="-254.8848" x2="-185.9585" y2="-249.2048" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_131_)" d="M177.09,85.48c-0.72-1.29-1.44-2.59-2.15-3.88c-1.44,0-2.87-0.01-4.31-0.02
+ c-0.72,1.29-1.44,2.57-2.16,3.86C171.34,85.47,174.21,85.48,177.09,85.48z"/>
+<linearGradient id="SVGID_132_" gradientUnits="userSpaceOnUse" x1="-189.2686" y1="-266.3203" x2="-184.8442" y2="-258.6572" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_132_)" d="M174.93,77.9c0.72-1.29,1.44-2.58,2.16-3.87c-0.72-1.29-1.44-2.58-2.15-3.88
+ c-1.44,0-2.87-0.01-4.31-0.02c-0.72,1.29-1.44,2.58-2.15,3.86c0.71,1.3,1.43,2.59,2.15,3.89C172.06,77.89,173.5,77.9,174.93,77.9z"
+ />
+<linearGradient id="SVGID_133_" gradientUnits="userSpaceOnUse" x1="-189.272" y1="-277.7749" x2="-184.8457" y2="-270.1084" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_133_)" d="M174.93,66.44c0.72-1.29,1.44-2.58,2.15-3.87c-0.72-1.29-1.44-2.58-2.15-3.88
+ c-1.43,0-2.87-0.01-4.31-0.01c-0.72,1.29-1.44,2.58-2.15,3.86c0.72,1.29,1.43,2.59,2.15,3.88C172.06,66.44,173.5,66.44,174.93,66.44
+ z"/>
+<linearGradient id="SVGID_134_" gradientUnits="userSpaceOnUse" x1="-189.2744" y1="-289.2305" x2="-184.8472" y2="-281.5623" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_134_)" d="M174.93,54.99c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.44-2.59-2.15-3.88
+ c-1.43,0-2.87-0.01-4.3-0.01c-0.72,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.44,2.59,2.15,3.88C172.06,54.98,173.5,54.98,174.93,54.99z
+ "/>
+<linearGradient id="SVGID_135_" gradientUnits="userSpaceOnUse" x1="-189.2773" y1="-300.6846" x2="-184.8496" y2="-293.0155" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_135_)" d="M174.94,43.53c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.43-2.58-2.15-3.88
+ c-1.43,0-2.87,0-4.3-0.01c-0.72,1.29-1.43,2.58-2.15,3.87c0.71,1.29,1.43,2.59,2.15,3.88C172.07,43.53,173.5,43.53,174.94,43.53z"/>
+<linearGradient id="SVGID_136_" gradientUnits="userSpaceOnUse" x1="-189.2793" y1="-312.1377" x2="-184.8516" y2="-304.4686" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_136_)" d="M174.94,32.08c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.43-2.58-2.15-3.88
+ c-1.43,0-2.87,0-4.3-0.01c-0.71,1.29-1.43,2.58-2.15,3.87c0.71,1.29,1.43,2.59,2.15,3.88C172.07,32.08,173.5,32.08,174.94,32.08z"/>
+<linearGradient id="SVGID_137_" gradientUnits="userSpaceOnUse" x1="-189.2822" y1="-323.5933" x2="-184.853" y2="-315.9217" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_137_)" d="M174.94,20.62c0.72-1.29,1.43-2.58,2.15-3.88c-0.71-1.29-1.43-2.58-2.15-3.88c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.29-1.43,2.58-2.15,3.87c0.72,1.29,1.43,2.59,2.15,3.88C172.07,20.62,173.5,20.62,174.94,20.62z"/>
+<linearGradient id="SVGID_138_" gradientUnits="userSpaceOnUse" x1="-189.2852" y1="-335.0493" x2="-184.855" y2="-327.376" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_138_)" d="M174.94,9.17c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.43-2.59-2.15-3.88c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.29-1.43,2.58-2.15,3.87c0.71,1.29,1.43,2.58,2.15,3.87C172.07,9.17,173.51,9.17,174.94,9.17z"/>
+<linearGradient id="SVGID_139_" gradientUnits="userSpaceOnUse" x1="-178.0176" y1="-260.2373" x2="-173.6118" y2="-252.6063" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_139_)" d="M163.69,83.98c0.72-1.28,1.44-2.56,2.16-3.85c-0.72-1.3-1.43-2.6-2.15-3.89
+ c-1.44-0.02-2.87-0.03-4.31-0.05c-0.72,1.28-1.44,2.56-2.16,3.84c0.72,1.3,1.44,2.6,2.15,3.9
+ C160.82,83.94,162.25,83.96,163.69,83.98z"/>
+<linearGradient id="SVGID_140_" gradientUnits="userSpaceOnUse" x1="-178.0269" y1="-271.6807" x2="-173.6177" y2="-264.0437" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_140_)" d="M163.7,72.54c0.72-1.28,1.43-2.57,2.15-3.85c-0.72-1.3-1.43-2.59-2.15-3.89
+ c-1.44-0.01-2.87-0.03-4.31-0.04c-0.72,1.28-1.43,2.56-2.15,3.84c0.72,1.3,1.43,2.6,2.15,3.9C160.82,72.5,162.26,72.52,163.7,72.54z
+ "/>
+<linearGradient id="SVGID_141_" gradientUnits="userSpaceOnUse" x1="-178.0342" y1="-283.124" x2="-173.6226" y2="-275.4829" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_141_)" d="M163.7,61.09c0.72-1.28,1.44-2.57,2.15-3.86c-0.72-1.3-1.43-2.59-2.15-3.89
+ c-1.43-0.01-2.87-0.02-4.31-0.04c-0.72,1.28-1.43,2.57-2.15,3.85c0.72,1.3,1.43,2.59,2.15,3.89
+ C160.83,61.07,162.26,61.08,163.7,61.09z"/>
+<linearGradient id="SVGID_142_" gradientUnits="userSpaceOnUse" x1="-178.043" y1="-294.5679" x2="-173.6274" y2="-286.92" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_142_)" d="M163.71,49.65c0.72-1.28,1.44-2.57,2.15-3.86c-0.72-1.29-1.43-2.59-2.15-3.88
+ c-1.43-0.01-2.87-0.02-4.31-0.03c-0.72,1.29-1.43,2.57-2.15,3.85c0.72,1.3,1.43,2.59,2.15,3.89
+ C160.84,49.63,162.27,49.64,163.71,49.65z"/>
+<linearGradient id="SVGID_143_" gradientUnits="userSpaceOnUse" x1="-178.0522" y1="-306.0107" x2="-173.6338" y2="-298.3578" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_143_)" d="M163.71,38.2c0.72-1.29,1.44-2.58,2.15-3.86c-0.72-1.29-1.43-2.59-2.15-3.88
+ c-1.44-0.01-2.87-0.01-4.3-0.02c-0.72,1.29-1.43,2.57-2.15,3.86c0.72,1.29,1.43,2.59,2.15,3.88
+ C160.84,38.19,162.28,38.2,163.71,38.2z"/>
+<linearGradient id="SVGID_144_" gradientUnits="userSpaceOnUse" x1="-178.0601" y1="-317.4526" x2="-173.6396" y2="-309.7963" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_144_)" d="M163.72,26.76c0.72-1.29,1.43-2.58,2.15-3.86c-0.72-1.29-1.43-2.58-2.15-3.88
+ c-1.43,0-2.87-0.01-4.3-0.01c-0.72,1.29-1.43,2.57-2.15,3.86c0.72,1.29,1.43,2.58,2.15,3.88C160.85,26.75,162.28,26.75,163.72,26.76
+ z"/>
+<linearGradient id="SVGID_145_" gradientUnits="userSpaceOnUse" x1="-178.0693" y1="-328.8984" x2="-173.644" y2="-321.2336" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_145_)" d="M163.72,15.31c0.72-1.29,1.43-2.58,2.15-3.87c-0.72-1.29-1.43-2.58-2.15-3.88c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.29-1.43,2.58-2.15,3.86c0.71,1.29,1.43,2.58,2.14,3.87C160.86,15.31,162.29,15.31,163.72,15.31z"/>
+<linearGradient id="SVGID_146_" gradientUnits="userSpaceOnUse" x1="-176.9688" y1="-338.3462" x2="-173.6821" y2="-332.6536" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_146_)" d="M157.29,0c0.71,1.29,1.43,2.58,2.14,3.87c1.43,0,2.87,0,4.3,0c0.72-1.29,1.43-2.58,2.15-3.87
+ C163.02,0,160.15,0,157.29,0z"/>
+<linearGradient id="SVGID_147_" gradientUnits="userSpaceOnUse" x1="-167.1094" y1="-255.1313" x2="-163.8838" y2="-249.5445" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_147_)" d="M154.97,85.27c-0.72-1.3-1.43-2.6-2.15-3.9c-1.44-0.03-2.87-0.06-4.31-0.09
+ c-0.72,1.27-1.44,2.54-2.16,3.81C149.22,85.15,152.09,85.21,154.97,85.27z"/>
+<linearGradient id="SVGID_148_" gradientUnits="userSpaceOnUse" x1="-167.1416" y1="-266.5391" x2="-162.7549" y2="-258.941" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_148_)" d="M152.82,77.67c0.72-1.27,1.44-2.55,2.16-3.83c-0.72-1.3-1.43-2.6-2.15-3.9
+ c-1.44-0.02-2.87-0.05-4.31-0.08c-0.72,1.27-1.44,2.54-2.16,3.81c0.72,1.3,1.43,2.6,2.15,3.9
+ C149.95,77.61,151.38,77.64,152.82,77.67z"/>
+<linearGradient id="SVGID_149_" gradientUnits="userSpaceOnUse" x1="-167.1562" y1="-277.959" x2="-162.7646" y2="-270.3525" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_149_)" d="M152.83,66.25c0.72-1.28,1.44-2.55,2.16-3.83c-0.72-1.3-1.43-2.6-2.15-3.89
+ c-1.43-0.02-2.87-0.04-4.3-0.06c-0.72,1.27-1.44,2.55-2.16,3.82c0.72,1.3,1.43,2.6,2.15,3.9C149.96,66.2,151.39,66.23,152.83,66.25z
+ "/>
+<linearGradient id="SVGID_150_" gradientUnits="userSpaceOnUse" x1="-167.168" y1="-289.3774" x2="-162.772" y2="-281.7634" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_150_)" d="M152.84,54.83c0.72-1.28,1.44-2.56,2.15-3.84c-0.71-1.29-1.43-2.59-2.15-3.89
+ c-1.43-0.02-2.87-0.04-4.3-0.05c-0.72,1.28-1.44,2.55-2.16,3.83c0.72,1.3,1.43,2.59,2.15,3.89
+ C149.97,54.79,151.4,54.81,152.84,54.83z"/>
+<linearGradient id="SVGID_151_" gradientUnits="userSpaceOnUse" x1="-167.1821" y1="-300.7969" x2="-162.7808" y2="-293.1735" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_151_)" d="M152.85,43.4c0.72-1.28,1.44-2.56,2.15-3.84c-0.71-1.3-1.43-2.59-2.15-3.88
+ c-1.43-0.01-2.87-0.03-4.3-0.04c-0.72,1.28-1.44,2.56-2.16,3.83c0.71,1.3,1.43,2.59,2.15,3.88
+ C149.98,43.37,151.41,43.39,152.85,43.4z"/>
+<linearGradient id="SVGID_152_" gradientUnits="userSpaceOnUse" x1="-167.1958" y1="-312.2178" x2="-162.7891" y2="-304.5851" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_152_)" d="M152.86,31.98c0.72-1.28,1.44-2.57,2.15-3.85c-0.71-1.29-1.43-2.59-2.15-3.88
+ c-1.43-0.01-2.87-0.02-4.3-0.03c-0.72,1.28-1.44,2.56-2.15,3.84c0.72,1.29,1.43,2.58,2.15,3.88
+ C149.99,31.96,151.42,31.97,152.86,31.98z"/>
+<linearGradient id="SVGID_153_" gradientUnits="userSpaceOnUse" x1="-167.21" y1="-323.6357" x2="-162.7969" y2="-315.9921" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_153_)" d="M152.87,20.56c0.72-1.29,1.43-2.57,2.15-3.86c-0.72-1.29-1.43-2.58-2.15-3.87
+ c-1.43,0-2.87-0.01-4.3-0.01c-0.72,1.28-1.44,2.57-2.15,3.85c0.71,1.29,1.43,2.58,2.14,3.87C150,20.55,151.44,20.56,152.87,20.56z"
+ />
+<linearGradient id="SVGID_154_" gradientUnits="userSpaceOnUse" x1="-167.2231" y1="-335.0566" x2="-162.8057" y2="-327.4053" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_154_)" d="M152.88,9.14c0.72-1.29,1.43-2.57,2.15-3.86c-0.71-1.29-1.43-2.58-2.14-3.87c-1.43,0-2.86,0-4.3,0
+ c-0.72,1.29-1.43,2.57-2.15,3.86c0.72,1.29,1.43,2.57,2.15,3.86C150.01,9.13,151.45,9.14,152.88,9.14z"/>
+<linearGradient id="SVGID_155_" gradientUnits="userSpaceOnUse" x1="-155.8848" y1="-260.6543" x2="-151.5269" y2="-253.1062" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_155_)" d="M141.58,83.54c0.72-1.26,1.44-2.53,2.16-3.79c-0.72-1.31-1.43-2.61-2.15-3.91
+ c-1.44-0.04-2.87-0.08-4.31-0.12c-0.72,1.26-1.44,2.52-2.16,3.78c0.72,1.3,1.43,2.61,2.15,3.91
+ C138.7,83.45,140.14,83.5,141.58,83.54z"/>
+<linearGradient id="SVGID_156_" gradientUnits="userSpaceOnUse" x1="-155.9028" y1="-272.0366" x2="-151.5381" y2="-264.4767" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_156_)" d="M141.59,72.15c0.72-1.27,1.44-2.53,2.16-3.8c-0.71-1.3-1.43-2.6-2.15-3.9
+ c-1.44-0.03-2.87-0.07-4.31-0.1c-0.72,1.26-1.44,2.52-2.16,3.78c0.71,1.3,1.43,2.6,2.15,3.9C138.72,72.08,140.15,72.12,141.59,72.15
+ z"/>
+<linearGradient id="SVGID_157_" gradientUnits="userSpaceOnUse" x1="-155.9214" y1="-283.4185" x2="-151.5493" y2="-275.8458" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_157_)" d="M141.6,60.77c0.72-1.27,1.44-2.54,2.16-3.81c-0.71-1.3-1.43-2.6-2.15-3.89
+ c-1.43-0.03-2.87-0.05-4.3-0.08c-0.72,1.27-1.44,2.53-2.16,3.8c0.71,1.3,1.43,2.6,2.15,3.89C138.73,60.71,140.17,60.74,141.6,60.77z
+ "/>
+<linearGradient id="SVGID_158_" gradientUnits="userSpaceOnUse" x1="-155.9399" y1="-294.7988" x2="-151.5601" y2="-287.2126" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_158_)" d="M141.62,49.39c0.72-1.27,1.44-2.54,2.16-3.82c-0.72-1.29-1.43-2.59-2.15-3.88
+ c-1.44-0.02-2.87-0.04-4.3-0.07c-0.72,1.27-1.44,2.54-2.16,3.81c0.71,1.29,1.43,2.59,2.14,3.88
+ C138.75,49.33,140.18,49.36,141.62,49.39z"/>
+<linearGradient id="SVGID_159_" gradientUnits="userSpaceOnUse" x1="-155.9604" y1="-306.1821" x2="-151.5728" y2="-298.5824" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_159_)" d="M141.63,38c0.72-1.27,1.44-2.55,2.16-3.83c-0.72-1.29-1.43-2.59-2.15-3.88
+ c-1.44-0.01-2.87-0.03-4.3-0.05c-0.72,1.27-1.44,2.54-2.16,3.82c0.71,1.29,1.43,2.58,2.15,3.87C138.76,37.96,140.2,37.98,141.63,38z
+ "/>
+<linearGradient id="SVGID_160_" gradientUnits="userSpaceOnUse" x1="-155.9785" y1="-317.5605" x2="-151.5845" y2="-309.9498" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_160_)" d="M141.65,26.62c0.72-1.28,1.44-2.55,2.16-3.83c-0.72-1.29-1.43-2.58-2.15-3.87
+ c-1.43-0.01-2.87-0.02-4.3-0.03c-0.72,1.28-1.44,2.55-2.15,3.82c0.71,1.29,1.43,2.57,2.14,3.86
+ C138.78,26.59,140.21,26.6,141.65,26.62z"/>
+<linearGradient id="SVGID_161_" gradientUnits="userSpaceOnUse" x1="-155.9971" y1="-328.9438" x2="-151.5952" y2="-321.3196" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_161_)" d="M141.66,15.24c0.72-1.28,1.44-2.56,2.16-3.84c-0.71-1.29-1.43-2.57-2.14-3.86
+ c-1.43,0-2.87-0.01-4.3-0.01c-0.72,1.28-1.44,2.56-2.15,3.83c0.71,1.28,1.43,2.57,2.14,3.85C138.79,15.22,140.23,15.23,141.66,15.24
+ z"/>
+<linearGradient id="SVGID_162_" gradientUnits="userSpaceOnUse" x1="-154.9106" y1="-338.3506" x2="-151.6333" y2="-332.6741" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_162_)" d="M135.24,0c0.71,1.28,1.43,2.56,2.14,3.84c1.43,0,2.87,0,4.3,0.01c0.72-1.28,1.44-2.57,2.15-3.85
+ C140.96,0,138.1,0,135.24,0z"/>
+<linearGradient id="SVGID_163_" gradientUnits="userSpaceOnUse" x1="-144.9844" y1="-255.7524" x2="-141.8208" y2="-250.273" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_163_)" d="M132.85,84.67c-0.72-1.31-1.43-2.61-2.15-3.91c-1.44-0.05-2.87-0.11-4.31-0.16
+ c-0.72,1.25-1.44,2.49-2.16,3.74C127.11,84.45,129.98,84.56,132.85,84.67z"/>
+<linearGradient id="SVGID_164_" gradientUnits="userSpaceOnUse" x1="-145.0103" y1="-267.0806" x2="-140.6787" y2="-259.5781" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_164_)" d="M130.71,77.08c0.72-1.25,1.44-2.51,2.16-3.76c-0.72-1.3-1.43-2.6-2.15-3.9
+ c-1.44-0.05-2.87-0.09-4.31-0.14c-0.72,1.25-1.44,2.5-2.16,3.75c0.71,1.3,1.43,2.6,2.14,3.91
+ C127.84,76.98,129.28,77.03,130.71,77.08z"/>
+<linearGradient id="SVGID_165_" gradientUnits="userSpaceOnUse" x1="-145.0361" y1="-278.4165" x2="-140.6929" y2="-270.8938" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_165_)" d="M130.73,65.75c0.72-1.26,1.44-2.51,2.16-3.78c-0.72-1.3-1.43-2.59-2.15-3.89
+ c-1.44-0.04-2.87-0.07-4.31-0.12c-0.72,1.25-1.44,2.51-2.16,3.76c0.71,1.29,1.43,2.59,2.15,3.89
+ C127.86,65.66,129.29,65.71,130.73,65.75z"/>
+<linearGradient id="SVGID_166_" gradientUnits="userSpaceOnUse" x1="-145.0601" y1="-289.7476" x2="-140.7085" y2="-282.2104" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_166_)" d="M130.75,54.41c0.72-1.26,1.44-2.52,2.16-3.79c-0.71-1.3-1.43-2.59-2.14-3.88
+ c-1.44-0.03-2.87-0.06-4.3-0.09c-0.72,1.26-1.44,2.52-2.16,3.77c0.71,1.29,1.43,2.58,2.14,3.88
+ C127.88,54.34,129.31,54.38,130.75,54.41z"/>
+<linearGradient id="SVGID_167_" gradientUnits="userSpaceOnUse" x1="-145.0835" y1="-301.0791" x2="-140.7217" y2="-293.5242" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_167_)" d="M130.77,43.08c0.72-1.26,1.44-2.53,2.16-3.8c-0.71-1.29-1.43-2.58-2.14-3.87
+ c-1.43-0.02-2.87-0.05-4.3-0.07c-0.72,1.26-1.44,2.52-2.16,3.79c0.71,1.29,1.43,2.58,2.14,3.87
+ C127.9,43.02,129.33,43.05,130.77,43.08z"/>
+<linearGradient id="SVGID_168_" gradientUnits="userSpaceOnUse" x1="-145.1064" y1="-312.4102" x2="-140.7358" y2="-304.8401" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_168_)" d="M130.79,31.74c0.72-1.27,1.44-2.54,2.16-3.81c-0.72-1.29-1.43-2.58-2.14-3.86
+ c-1.43-0.02-2.87-0.03-4.3-0.05c-0.72,1.27-1.44,2.53-2.16,3.8c0.71,1.28,1.43,2.57,2.14,3.86
+ C127.92,31.7,129.35,31.72,130.79,31.74z"/>
+<linearGradient id="SVGID_169_" gradientUnits="userSpaceOnUse" x1="-145.1304" y1="-323.7427" x2="-140.75" y2="-316.1556" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_169_)" d="M130.8,20.41c0.72-1.27,1.44-2.54,2.15-3.82c-0.71-1.28-1.43-2.57-2.14-3.85
+ c-1.43-0.01-2.87-0.02-4.3-0.03c-0.72,1.27-1.44,2.54-2.16,3.81c0.72,1.28,1.43,2.56,2.14,3.84
+ C127.94,20.38,129.37,20.39,130.8,20.41z"/>
+<linearGradient id="SVGID_170_" gradientUnits="userSpaceOnUse" x1="-145.1538" y1="-335.0757" x2="-140.7642" y2="-327.4726" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_170_)" d="M130.82,9.07c0.72-1.27,1.44-2.55,2.15-3.83c-0.71-1.28-1.43-2.56-2.14-3.84c-1.43,0-2.86,0-4.3,0
+ c-0.72,1.28-1.44,2.55-2.16,3.82c0.71,1.27,1.43,2.55,2.14,3.83C127.95,9.06,129.39,9.07,130.82,9.07z"/>
+<linearGradient id="SVGID_171_" gradientUnits="userSpaceOnUse" x1="-133.7466" y1="-261.4253" x2="-129.4541" y2="-253.9905" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_171_)" d="M119.47,82.71c0.72-1.24,1.44-2.48,2.16-3.72c-0.71-1.3-1.43-2.6-2.14-3.91
+ c-1.43-0.06-2.87-0.12-4.3-0.19c-0.72,1.24-1.44,2.47-2.16,3.7c0.71,1.3,1.43,2.6,2.14,3.91C116.6,82.58,118.03,82.65,119.47,82.71z
+ "/>
+<linearGradient id="SVGID_172_" gradientUnits="userSpaceOnUse" x1="-133.7759" y1="-272.6929" x2="-129.4712" y2="-265.2369" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_172_)" d="M119.49,71.44c0.72-1.24,1.44-2.48,2.16-3.73c-0.72-1.3-1.43-2.59-2.15-3.89
+ c-1.43-0.05-2.87-0.1-4.3-0.16c-0.72,1.24-1.44,2.48-2.16,3.71c0.71,1.3,1.43,2.59,2.14,3.89
+ C116.62,71.33,118.06,71.38,119.49,71.44z"/>
+<linearGradient id="SVGID_173_" gradientUnits="userSpaceOnUse" x1="-133.8062" y1="-283.9609" x2="-129.4893" y2="-276.4839" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_173_)" d="M119.51,60.17c0.72-1.25,1.44-2.5,2.16-3.75c-0.71-1.3-1.43-2.59-2.14-3.88
+ c-1.43-0.04-2.87-0.08-4.3-0.13c-0.72,1.25-1.44,2.49-2.16,3.73c0.71,1.29,1.43,2.58,2.14,3.88
+ C116.64,60.07,118.08,60.12,119.51,60.17z"/>
+<linearGradient id="SVGID_174_" gradientUnits="userSpaceOnUse" x1="-133.8359" y1="-295.2256" x2="-129.5078" y2="-287.7291" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_174_)" d="M119.53,48.9c0.72-1.25,1.44-2.5,2.16-3.76c-0.71-1.29-1.43-2.58-2.14-3.87
+ c-1.43-0.03-2.87-0.07-4.3-0.1c-0.72,1.25-1.44,2.5-2.16,3.74c0.71,1.29,1.43,2.57,2.14,3.86C116.66,48.82,118.1,48.86,119.53,48.9z
+ "/>
+<linearGradient id="SVGID_175_" gradientUnits="userSpaceOnUse" x1="-133.8643" y1="-306.4946" x2="-129.5234" y2="-298.9761" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_175_)" d="M119.56,37.63c0.72-1.25,1.44-2.51,2.15-3.77c-0.71-1.29-1.43-2.57-2.14-3.85
+ c-1.43-0.02-2.87-0.05-4.3-0.07c-0.72,1.26-1.44,2.51-2.16,3.76c0.71,1.28,1.43,2.56,2.14,3.85
+ C116.69,37.56,118.12,37.6,119.56,37.63z"/>
+<linearGradient id="SVGID_176_" gradientUnits="userSpaceOnUse" x1="-133.8916" y1="-317.7617" x2="-129.5396" y2="-310.2238" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_176_)" d="M119.58,26.35c0.72-1.26,1.44-2.52,2.16-3.79c-0.71-1.28-1.43-2.56-2.14-3.84
+ c-1.43-0.02-2.87-0.03-4.3-0.05c-0.72,1.26-1.44,2.52-2.16,3.78c0.71,1.28,1.43,2.55,2.14,3.83
+ C116.71,26.31,118.14,26.33,119.58,26.35z"/>
+<linearGradient id="SVGID_177_" gradientUnits="userSpaceOnUse" x1="-133.9194" y1="-329.0303" x2="-129.5552" y2="-321.4712" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_177_)" d="M119.6,15.08c0.72-1.27,1.44-2.53,2.16-3.8c-0.71-1.28-1.43-2.55-2.14-3.83
+ c-1.43,0-2.87-0.01-4.3-0.02c-0.72,1.27-1.44,2.53-2.15,3.79c0.71,1.27,1.43,2.54,2.14,3.82C116.73,15.06,118.16,15.07,119.6,15.08z
+ "/>
+<linearGradient id="SVGID_178_" gradientUnits="userSpaceOnUse" x1="-132.8477" y1="-338.3555" x2="-129.5874" y2="-332.7086" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_178_)" d="M113.18,0c0.71,1.27,1.42,2.53,2.14,3.8c1.43,0,2.87,0,4.3,0.01c0.72-1.27,1.44-2.54,2.16-3.81
+ C118.91,0,116.05,0,113.18,0z"/>
+<linearGradient id="SVGID_179_" gradientUnits="userSpaceOnUse" x1="-122.8516" y1="-256.7583" x2="-119.7583" y2="-251.4006" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_179_)" d="M110.75,83.67c-0.72-1.3-1.43-2.61-2.14-3.9c-1.43-0.08-2.87-0.15-4.3-0.24
+ c-0.72,1.22-1.44,2.44-2.16,3.65C105.01,83.35,107.88,83.52,110.75,83.67z"/>
+<linearGradient id="SVGID_180_" gradientUnits="userSpaceOnUse" x1="-122.8828" y1="-267.9502" x2="-118.6206" y2="-260.5678" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_180_)" d="M108.62,76.14c0.72-1.23,1.44-2.46,2.16-3.69c-0.71-1.3-1.43-2.59-2.14-3.89
+ c-1.44-0.07-2.87-0.13-4.3-0.2c-0.72,1.22-1.44,2.45-2.16,3.67c0.72,1.29,1.43,2.59,2.14,3.89C105.75,76,107.18,76.07,108.62,76.14z
+ "/>
+<linearGradient id="SVGID_181_" gradientUnits="userSpaceOnUse" x1="-122.916" y1="-279.1445" x2="-118.6392" y2="-271.7368" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_181_)" d="M108.64,64.95c0.72-1.23,1.44-2.47,2.16-3.7c-0.71-1.29-1.43-2.59-2.14-3.88
+ c-1.43-0.05-2.87-0.11-4.3-0.17c-0.72,1.23-1.44,2.46-2.16,3.68c0.71,1.29,1.43,2.58,2.14,3.87
+ C105.77,64.82,107.21,64.89,108.64,64.95z"/>
+<linearGradient id="SVGID_182_" gradientUnits="userSpaceOnUse" x1="-122.9473" y1="-290.3364" x2="-118.6567" y2="-282.905" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_182_)" d="M108.67,53.75c0.72-1.24,1.44-2.48,2.16-3.72c-0.71-1.29-1.43-2.57-2.14-3.86
+ c-1.43-0.04-2.87-0.09-4.3-0.13c-0.72,1.24-1.44,2.47-2.16,3.7c0.71,1.28,1.43,2.57,2.14,3.85C105.8,53.65,107.23,53.7,108.67,53.75
+ z"/>
+<linearGradient id="SVGID_183_" gradientUnits="userSpaceOnUse" x1="-122.98" y1="-301.5293" x2="-118.6748" y2="-294.0725" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_183_)" d="M108.69,42.55c0.72-1.24,1.44-2.49,2.16-3.73c-0.71-1.28-1.43-2.56-2.14-3.84
+ c-1.43-0.03-2.87-0.07-4.3-0.1c-0.72,1.24-1.44,2.48-2.16,3.72c0.71,1.28,1.43,2.55,2.14,3.84
+ C105.82,42.47,107.25,42.51,108.69,42.55z"/>
+<linearGradient id="SVGID_184_" gradientUnits="userSpaceOnUse" x1="-123.0132" y1="-312.7188" x2="-118.6953" y2="-305.24" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_184_)" d="M108.71,31.35c0.72-1.25,1.44-2.5,2.16-3.75c-0.71-1.28-1.43-2.55-2.14-3.82
+ c-1.43-0.02-2.87-0.05-4.3-0.07c-0.72,1.25-1.44,2.49-2.16,3.73c0.71,1.27,1.43,2.54,2.14,3.82
+ C105.85,31.29,107.28,31.33,108.71,31.35z"/>
+<linearGradient id="SVGID_185_" gradientUnits="userSpaceOnUse" x1="-123.0459" y1="-323.9121" x2="-118.7134" y2="-316.408" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_185_)" d="M108.74,20.16c0.72-1.25,1.44-2.51,2.16-3.76c-0.71-1.27-1.43-2.54-2.14-3.81
+ c-1.43-0.01-2.87-0.02-4.3-0.04c-0.72,1.26-1.44,2.5-2.16,3.75c0.71,1.26,1.43,2.53,2.14,3.8C105.87,20.12,107.3,20.14,108.74,20.16
+ z"/>
+<linearGradient id="SVGID_186_" gradientUnits="userSpaceOnUse" x1="-123.0781" y1="-335.1045" x2="-118.7324" y2="-327.5775" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_186_)" d="M108.76,8.96c0.72-1.26,1.44-2.52,2.16-3.78c-0.71-1.26-1.43-2.53-2.14-3.79c-1.43,0-2.87,0-4.3,0
+ c-0.72,1.26-1.44,2.51-2.16,3.77c0.71,1.26,1.43,2.52,2.14,3.78C105.9,8.94,107.33,8.95,108.76,8.96z"/>
+<linearGradient id="SVGID_187_" gradientUnits="userSpaceOnUse" x1="-111.6235" y1="-262.5454" x2="-107.4111" y2="-255.2493" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_187_)" d="M97.38,81.5c0.72-1.21,1.44-2.41,2.16-3.63c-0.71-1.3-1.43-2.59-2.14-3.88
+ c-1.44-0.08-2.87-0.17-4.3-0.25c-0.72,1.21-1.44,2.41-2.16,3.61c0.71,1.29,1.42,2.59,2.14,3.88C94.51,81.32,95.95,81.41,97.38,81.5z
+ "/>
+<linearGradient id="SVGID_188_" gradientUnits="userSpaceOnUse" x1="-111.6582" y1="-273.647" x2="-107.4292" y2="-266.3221" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_188_)" d="M97.41,70.4c0.72-1.21,1.44-2.43,2.16-3.65c-0.71-1.29-1.43-2.58-2.14-3.87
+ c-1.43-0.07-2.87-0.14-4.3-0.22c-0.72,1.21-1.44,2.42-2.16,3.62c0.71,1.29,1.43,2.57,2.14,3.86C94.54,70.24,95.97,70.32,97.41,70.4z
+ "/>
+<linearGradient id="SVGID_189_" gradientUnits="userSpaceOnUse" x1="-111.6929" y1="-284.749" x2="-107.4473" y2="-277.3954" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_189_)" d="M97.43,59.29c0.72-1.22,1.44-2.44,2.16-3.67c-0.71-1.28-1.43-2.57-2.14-3.85
+ c-1.43-0.06-2.87-0.12-4.3-0.18c-0.72,1.22-1.44,2.43-2.16,3.65c0.71,1.28,1.43,2.56,2.14,3.84C94.57,59.16,96,59.22,97.43,59.29z"
+ />
+<linearGradient id="SVGID_190_" gradientUnits="userSpaceOnUse" x1="-111.7285" y1="-295.8501" x2="-107.4668" y2="-288.4686" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_190_)" d="M97.46,48.18c0.72-1.22,1.44-2.45,2.16-3.68c-0.71-1.28-1.43-2.55-2.14-3.83
+ c-1.43-0.05-2.87-0.09-4.3-0.14c-0.72,1.22-1.44,2.45-2.16,3.67c0.71,1.27,1.43,2.55,2.14,3.82C94.59,48.07,96.03,48.13,97.46,48.18
+ z"/>
+<linearGradient id="SVGID_191_" gradientUnits="userSpaceOnUse" x1="-111.7642" y1="-306.9541" x2="-107.4854" y2="-299.543" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_191_)" d="M97.49,37.08c0.72-1.23,1.44-2.46,2.16-3.7c-0.71-1.27-1.42-2.54-2.14-3.81
+ c-1.43-0.03-2.87-0.06-4.3-0.1c-0.72,1.23-1.44,2.46-2.16,3.68c0.71,1.27,1.43,2.53,2.14,3.8C94.62,36.99,96.05,37.04,97.49,37.08z"
+ />
+<linearGradient id="SVGID_192_" gradientUnits="userSpaceOnUse" x1="-111.7983" y1="-318.0527" x2="-107.5044" y2="-310.6154" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_192_)" d="M97.51,25.97c0.72-1.24,1.44-2.48,2.16-3.72c-0.72-1.27-1.43-2.53-2.14-3.79
+ c-1.43-0.02-2.87-0.04-4.3-0.06c-0.72,1.24-1.44,2.47-2.16,3.7c0.71,1.26,1.43,2.52,2.14,3.78C94.65,25.91,96.08,25.94,97.51,25.97z
+ "/>
+<linearGradient id="SVGID_193_" gradientUnits="userSpaceOnUse" x1="-111.8354" y1="-329.1562" x2="-107.5239" y2="-321.6885" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_193_)" d="M97.54,14.86c0.72-1.25,1.44-2.49,2.16-3.74c-0.71-1.26-1.43-2.52-2.14-3.78
+ c-1.43-0.01-2.87-0.01-4.3-0.02c-0.72,1.24-1.44,2.49-2.16,3.72c0.71,1.25,1.42,2.51,2.14,3.76C94.67,14.83,96.11,14.85,97.54,14.86
+ z"/>
+<linearGradient id="SVGID_194_" gradientUnits="userSpaceOnUse" x1="-110.7812" y1="-338.3633" x2="-107.5464" y2="-332.7603" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_194_)" d="M91.13,0c0.71,1.25,1.43,2.5,2.14,3.74c1.43,0,2.87,0.01,4.3,0.01C98.28,2.51,99,1.25,99.72,0
+ C96.86,0,93.99,0,91.13,0z"/>
+<linearGradient id="SVGID_195_" gradientUnits="userSpaceOnUse" x1="-100.7314" y1="-258.1406" x2="-97.7163" y2="-252.9183" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_195_)" d="M88.67,82.29c-0.71-1.3-1.43-2.59-2.14-3.88c-1.43-0.1-2.87-0.2-4.3-0.31
+ c-0.72,1.18-1.44,2.37-2.16,3.54C82.94,81.87,85.8,82.08,88.67,82.29z"/>
+<linearGradient id="SVGID_196_" gradientUnits="userSpaceOnUse" x1="-100.7686" y1="-269.1406" x2="-96.5928" y2="-261.908" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_196_)" d="M86.54,74.85c0.72-1.19,1.44-2.39,2.16-3.59c-0.71-1.29-1.43-2.57-2.14-3.86
+ c-1.43-0.09-2.87-0.17-4.3-0.26c-0.72,1.19-1.44,2.38-2.16,3.56c0.71,1.28,1.43,2.57,2.14,3.85C83.67,74.66,85.11,74.75,86.54,74.85
+ z"/>
+<linearGradient id="SVGID_197_" gradientUnits="userSpaceOnUse" x1="-100.8052" y1="-280.1421" x2="-96.6094" y2="-272.8748" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_197_)" d="M86.57,63.84c0.72-1.2,1.44-2.4,2.16-3.61c-0.71-1.28-1.43-2.56-2.14-3.84
+ c-1.43-0.07-2.87-0.15-4.3-0.22c-0.72,1.2-1.44,2.39-2.16,3.59c0.71,1.27,1.43,2.55,2.14,3.83C83.7,63.68,85.13,63.76,86.57,63.84z"
+ />
+<linearGradient id="SVGID_198_" gradientUnits="userSpaceOnUse" x1="-100.8433" y1="-291.1426" x2="-96.6304" y2="-283.8456" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_198_)" d="M86.6,52.84c0.72-1.21,1.44-2.42,2.16-3.63c-0.71-1.27-1.43-2.54-2.14-3.82
+ c-1.43-0.06-2.87-0.12-4.3-0.18c-0.72,1.21-1.44,2.41-2.16,3.61c0.71,1.27,1.43,2.54,2.14,3.81C83.73,52.7,85.16,52.77,86.6,52.84z"
+ />
+<linearGradient id="SVGID_199_" gradientUnits="userSpaceOnUse" x1="-100.8804" y1="-302.145" x2="-96.6479" y2="-294.8142" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_199_)" d="M86.62,41.83c0.72-1.21,1.44-2.43,2.16-3.65c-0.71-1.27-1.43-2.53-2.14-3.8
+ c-1.43-0.04-2.87-0.09-4.3-0.13c-0.72,1.21-1.44,2.43-2.16,3.63c0.71,1.26,1.43,2.52,2.14,3.79C83.76,41.72,85.19,41.78,86.62,41.83
+ z"/>
+<linearGradient id="SVGID_200_" gradientUnits="userSpaceOnUse" x1="-100.9175" y1="-313.145" x2="-96.667" y2="-305.783" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_200_)" d="M86.65,30.82c0.72-1.22,1.44-2.44,2.16-3.67c-0.71-1.26-1.43-2.52-2.14-3.78
+ c-1.43-0.03-2.87-0.06-4.3-0.09c-0.72,1.22-1.44,2.44-2.16,3.65c0.71,1.25,1.43,2.51,2.14,3.76C83.79,30.74,85.22,30.78,86.65,30.82
+ z"/>
+<linearGradient id="SVGID_201_" gradientUnits="userSpaceOnUse" x1="-100.9561" y1="-324.1465" x2="-96.6865" y2="-316.7514" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_201_)" d="M86.68,19.82c0.72-1.23,1.44-2.46,2.16-3.69c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.02-2.87-0.03-4.3-0.05c-0.72,1.23-1.44,2.46-2.16,3.67c0.71,1.25,1.43,2.49,2.14,3.74C83.81,19.77,85.25,19.79,86.68,19.82
+ z"/>
+<linearGradient id="SVGID_202_" gradientUnits="userSpaceOnUse" x1="-100.9922" y1="-335.146" x2="-96.7056" y2="-327.7213" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_202_)" d="M86.71,8.81c0.72-1.24,1.44-2.47,2.16-3.71c-0.71-1.25-1.43-2.49-2.14-3.73
+ c-1.43,0-2.86,0-4.3-0.01c-0.72,1.23-1.44,2.47-2.16,3.7c0.71,1.24,1.42,2.48,2.14,3.72C83.84,8.79,85.27,8.8,86.71,8.81z"/>
+<linearGradient id="SVGID_203_" gradientUnits="userSpaceOnUse" x1="-89.5137" y1="-264.0156" x2="-85.3979" y2="-256.887" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_203_)" d="M75.32,79.91c0.72-1.17,1.44-2.34,2.16-3.52c-0.71-1.28-1.43-2.57-2.14-3.85
+ c-1.43-0.11-2.87-0.21-4.3-0.32c-0.72,1.17-1.44,2.33-2.16,3.49c0.71,1.28,1.42,2.56,2.14,3.84C72.45,79.68,73.88,79.8,75.32,79.91z
+ "/>
+<linearGradient id="SVGID_204_" gradientUnits="userSpaceOnUse" x1="-89.5513" y1="-274.9004" x2="-85.4146" y2="-267.7354" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_204_)" d="M75.34,69.02c0.72-1.18,1.44-2.36,2.16-3.54c-0.71-1.28-1.42-2.55-2.14-3.82
+ c-1.43-0.09-2.87-0.18-4.3-0.27c-0.72,1.17-1.44,2.35-2.16,3.52c0.71,1.27,1.42,2.54,2.14,3.82C72.48,68.82,73.91,68.92,75.34,69.02
+ z"/>
+<linearGradient id="SVGID_205_" gradientUnits="userSpaceOnUse" x1="-89.5903" y1="-285.7837" x2="-85.4336" y2="-278.584" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_205_)" d="M75.37,58.13c0.72-1.19,1.44-2.37,2.16-3.57c-0.71-1.27-1.43-2.54-2.14-3.8
+ c-1.43-0.08-2.86-0.15-4.3-0.23c-0.72,1.18-1.44,2.37-2.16,3.54c0.71,1.26,1.43,2.53,2.14,3.79C72.51,57.96,73.94,58.05,75.37,58.13
+ z"/>
+<linearGradient id="SVGID_206_" gradientUnits="userSpaceOnUse" x1="-89.6284" y1="-296.668" x2="-85.4502" y2="-289.4311" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_206_)" d="M75.4,47.24c0.72-1.19,1.44-2.39,2.16-3.59c-0.71-1.26-1.43-2.52-2.14-3.78
+ c-1.43-0.06-2.86-0.12-4.3-0.18c-0.72,1.19-1.44,2.38-2.16,3.57c0.71,1.25,1.43,2.51,2.14,3.77C72.53,47.1,73.97,47.17,75.4,47.24z"
+ />
+<linearGradient id="SVGID_207_" gradientUnits="userSpaceOnUse" x1="-89.6689" y1="-307.5522" x2="-85.4692" y2="-300.2781" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_207_)" d="M75.43,36.35c0.72-1.2,1.44-2.41,2.16-3.61c-0.71-1.25-1.42-2.51-2.14-3.75
+ c-1.43-0.04-2.87-0.08-4.3-0.13c-0.72,1.2-1.44,2.4-2.16,3.59c0.71,1.25,1.42,2.49,2.14,3.74C72.56,36.25,73.99,36.3,75.43,36.35z"
+ />
+<linearGradient id="SVGID_208_" gradientUnits="userSpaceOnUse" x1="-89.7065" y1="-318.436" x2="-85.4863" y2="-311.1264" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_208_)" d="M75.46,25.46c0.72-1.21,1.44-2.42,2.16-3.64c-0.71-1.24-1.43-2.49-2.14-3.73
+ c-1.43-0.02-2.87-0.05-4.3-0.08c-0.72,1.21-1.44,2.41-2.16,3.61c0.71,1.24,1.43,2.48,2.14,3.72C72.59,25.39,74.02,25.43,75.46,25.46
+ z"/>
+<linearGradient id="SVGID_209_" gradientUnits="userSpaceOnUse" x1="-89.7466" y1="-329.3203" x2="-85.5044" y2="-321.9726" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_209_)" d="M75.48,14.57c0.72-1.22,1.44-2.44,2.16-3.66c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.43-0.01-2.87-0.02-4.3-0.03c-0.72,1.22-1.44,2.43-2.16,3.64c0.71,1.23,1.43,2.46,2.14,3.69C72.62,14.53,74.05,14.55,75.48,14.57
+ z"/>
+<linearGradient id="SVGID_210_" gradientUnits="userSpaceOnUse" x1="-88.7231" y1="-338.3652" x2="-85.522" y2="-332.8206" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_210_)" d="M69.07,0c0.71,1.22,1.43,2.44,2.14,3.67c1.43,0.01,2.87,0.01,4.3,0.02
+ c0.72-1.23,1.44-2.45,2.16-3.68C74.8,0,71.94,0,69.07,0z"/>
+<linearGradient id="SVGID_211_" gradientUnits="userSpaceOnUse" x1="-78.6309" y1="-259.8955" x2="-75.7031" y2="-254.8245" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_211_)" d="M66.62,80.52c-0.71-1.28-1.43-2.56-2.14-3.83c-1.43-0.13-2.86-0.25-4.29-0.38
+ c-0.72,1.14-1.44,2.28-2.15,3.42C60.89,80,63.75,80.26,66.62,80.52z"/>
+<linearGradient id="SVGID_212_" gradientUnits="userSpaceOnUse" x1="-78.6694" y1="-270.6533" x2="-74.5952" y2="-263.5966" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_212_)" d="M64.49,73.2c0.72-1.15,1.44-2.31,2.16-3.47c-0.71-1.27-1.43-2.54-2.14-3.81
+ c-1.43-0.11-2.86-0.21-4.29-0.33c-0.72,1.15-1.44,2.3-2.15,3.45c0.71,1.26,1.42,2.53,2.14,3.8C61.63,72.96,63.06,73.08,64.49,73.2z"
+ />
+<linearGradient id="SVGID_213_" gradientUnits="userSpaceOnUse" x1="-78.7085" y1="-281.4111" x2="-74.6104" y2="-274.3129" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_213_)" d="M64.52,62.44c0.72-1.16,1.44-2.33,2.16-3.5c-0.71-1.26-1.42-2.52-2.14-3.78
+ c-1.43-0.09-2.86-0.18-4.3-0.27c-0.72,1.16-1.44,2.32-2.15,3.47c0.71,1.25,1.42,2.51,2.14,3.77C61.65,62.23,63.08,62.33,64.52,62.44
+ z"/>
+<linearGradient id="SVGID_214_" gradientUnits="userSpaceOnUse" x1="-78.7466" y1="-292.1685" x2="-74.6265" y2="-285.0322" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_214_)" d="M64.54,51.67c0.72-1.17,1.44-2.35,2.16-3.53c-0.71-1.25-1.42-2.51-2.14-3.75
+ c-1.43-0.07-2.86-0.15-4.3-0.22c-0.72,1.17-1.44,2.34-2.16,3.5c0.71,1.24,1.42,2.49,2.14,3.75C61.68,51.5,63.11,51.59,64.54,51.67z"
+ />
+<linearGradient id="SVGID_215_" gradientUnits="userSpaceOnUse" x1="-78.7861" y1="-302.9268" x2="-74.6421" y2="-295.7491" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_215_)" d="M64.57,40.91c0.72-1.18,1.44-2.36,2.16-3.55c-0.71-1.25-1.43-2.49-2.14-3.73
+ c-1.43-0.05-2.86-0.11-4.29-0.17c-0.72,1.18-1.44,2.36-2.16,3.53c0.71,1.24,1.43,2.48,2.14,3.72
+ C61.71,40.77,63.14,40.84,64.57,40.91z"/>
+<linearGradient id="SVGID_216_" gradientUnits="userSpaceOnUse" x1="-78.8252" y1="-313.6831" x2="-74.6592" y2="-306.4673" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_216_)" d="M64.6,30.14c0.72-1.19,1.44-2.38,2.16-3.58c-0.71-1.24-1.43-2.47-2.14-3.7
+ c-1.43-0.04-2.86-0.08-4.3-0.11c-0.72,1.19-1.44,2.37-2.16,3.55c0.71,1.23,1.42,2.46,2.14,3.69C61.74,30.04,63.17,30.09,64.6,30.14z
+ "/>
+<linearGradient id="SVGID_217_" gradientUnits="userSpaceOnUse" x1="-78.8643" y1="-324.4409" x2="-74.6738" y2="-317.1829" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_217_)" d="M64.63,19.38c0.72-1.2,1.44-2.4,2.16-3.6c-0.71-1.23-1.43-2.46-2.14-3.68
+ c-1.43-0.02-2.86-0.04-4.3-0.06c-0.72,1.2-1.44,2.39-2.16,3.58c0.71,1.22,1.43,2.44,2.14,3.66C61.76,19.32,63.19,19.35,64.63,19.38z
+ "/>
+<linearGradient id="SVGID_218_" gradientUnits="userSpaceOnUse" x1="-78.9038" y1="-335.1973" x2="-74.6914" y2="-327.9012" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_218_)" d="M64.65,8.62c0.72-1.21,1.44-2.42,2.16-3.63c-0.71-1.22-1.43-2.44-2.14-3.65
+ c-1.43,0-2.87,0-4.3-0.01c-0.72,1.21-1.44,2.41-2.16,3.61c0.71,1.21,1.42,2.42,2.14,3.63C61.79,8.59,63.22,8.6,64.65,8.62z"/>
+<linearGradient id="SVGID_219_" gradientUnits="userSpaceOnUse" x1="-67.4243" y1="-265.8389" x2="-63.4219" y2="-258.9064" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_219_)" d="M53.28,77.94c0.72-1.13,1.44-2.26,2.15-3.39c-0.71-1.27-1.42-2.53-2.14-3.79
+ c-1.43-0.13-2.86-0.26-4.29-0.39c-0.72,1.13-1.43,2.25-2.15,3.36c0.71,1.26,1.42,2.52,2.14,3.78C50.42,77.66,51.85,77.8,53.28,77.94
+ z"/>
+<linearGradient id="SVGID_220_" gradientUnits="userSpaceOnUse" x1="-67.4619" y1="-276.4507" x2="-63.4351" y2="-269.476" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_220_)" d="M53.3,67.32c0.72-1.14,1.44-2.28,2.15-3.42c-0.71-1.26-1.43-2.51-2.14-3.76
+ c-1.43-0.11-2.86-0.22-4.29-0.33c-0.72,1.13-1.44,2.27-2.15,3.39c0.71,1.25,1.42,2.5,2.13,3.75C50.44,67.07,51.88,67.2,53.3,67.32z"
+ />
+<linearGradient id="SVGID_221_" gradientUnits="userSpaceOnUse" x1="-67.4995" y1="-287.0659" x2="-63.4458" y2="-280.0447" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_221_)" d="M53.33,56.7c0.72-1.15,1.44-2.3,2.15-3.45c-0.71-1.25-1.42-2.49-2.14-3.73
+ c-1.43-0.09-2.86-0.18-4.29-0.27c-0.72,1.14-1.44,2.28-2.15,3.42c0.71,1.24,1.43,2.48,2.14,3.72C50.47,56.49,51.9,56.59,53.33,56.7z
+ "/>
+<linearGradient id="SVGID_222_" gradientUnits="userSpaceOnUse" x1="-67.5376" y1="-297.6787" x2="-63.46" y2="-290.616" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_222_)" d="M53.36,46.08c0.72-1.16,1.44-2.32,2.15-3.48c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.43-0.07-2.86-0.14-4.29-0.21c-0.72,1.16-1.44,2.31-2.16,3.45c0.71,1.23,1.42,2.46,2.14,3.69
+ C50.49,45.91,51.93,45.99,53.36,46.08z"/>
+<linearGradient id="SVGID_223_" gradientUnits="userSpaceOnUse" x1="-67.5767" y1="-308.2935" x2="-63.4722" y2="-301.1843" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_223_)" d="M53.38,35.46c0.72-1.17,1.44-2.33,2.16-3.51c-0.71-1.23-1.42-2.46-2.14-3.68
+ c-1.43-0.05-2.86-0.1-4.29-0.15c-0.72,1.16-1.44,2.32-2.16,3.48c0.71,1.22,1.42,2.44,2.14,3.66C50.52,35.33,51.95,35.39,53.38,35.46
+ z"/>
+<linearGradient id="SVGID_224_" gradientUnits="userSpaceOnUse" x1="-67.6147" y1="-318.9062" x2="-63.4854" y2="-311.7539" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_224_)" d="M53.41,24.83c0.72-1.17,1.44-2.35,2.16-3.54c-0.71-1.22-1.42-2.43-2.14-3.65
+ c-1.43-0.03-2.86-0.06-4.29-0.1c-0.72,1.17-1.44,2.34-2.16,3.51c0.71,1.21,1.43,2.42,2.14,3.63C50.54,24.74,51.98,24.79,53.41,24.83
+ z"/>
+<linearGradient id="SVGID_225_" gradientUnits="userSpaceOnUse" x1="-67.6523" y1="-329.52" x2="-63.4971" y2="-322.3229" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_225_)" d="M53.43,14.21c0.72-1.19,1.44-2.37,2.16-3.57c-0.71-1.21-1.42-2.42-2.14-3.62
+ c-1.43-0.01-2.86-0.03-4.3-0.04c-0.72,1.19-1.44,2.37-2.16,3.54c0.71,1.2,1.43,2.4,2.14,3.6C50.57,14.16,52,14.19,53.43,14.21z"/>
+<linearGradient id="SVGID_226_" gradientUnits="userSpaceOnUse" x1="-66.6709" y1="-338.3662" x2="-63.5103" y2="-332.8918" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_226_)" d="M47.02,0c0.71,1.19,1.43,2.38,2.14,3.57c1.43,0,2.87,0.01,4.3,0.02C54.18,2.4,54.89,1.2,55.62,0
+ C52.75,0,49.89,0,47.02,0z"/>
+<linearGradient id="SVGID_227_" gradientUnits="userSpaceOnUse" x1="-56.5552" y1="-262.0264" x2="-53.7236" y2="-257.122" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_227_)" d="M44.6,78.36c-0.71-1.26-1.42-2.52-2.14-3.77c-1.43-0.15-2.86-0.3-4.29-0.45
+ c-0.72,1.1-1.43,2.19-2.15,3.28C38.88,77.73,41.74,78.05,44.6,78.36z"/>
+<linearGradient id="SVGID_228_" gradientUnits="userSpaceOnUse" x1="-56.5918" y1="-272.4888" x2="-52.6367" y2="-265.6384" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_228_)" d="M42.47,71.2c0.72-1.11,1.43-2.22,2.15-3.34c-0.71-1.25-1.42-2.5-2.14-3.74
+ c-1.43-0.13-2.86-0.26-4.29-0.39c-0.71,1.11-1.43,2.21-2.15,3.31c0.71,1.24,1.42,2.48,2.13,3.73C39.61,70.91,41.04,71.05,42.47,71.2
+ z"/>
+<linearGradient id="SVGID_229_" gradientUnits="userSpaceOnUse" x1="-56.627" y1="-282.9502" x2="-52.644" y2="-276.0516" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_229_)" d="M42.49,60.73c0.72-1.12,1.43-2.24,2.15-3.37c-0.71-1.24-1.42-2.48-2.14-3.71
+ c-1.43-0.11-2.86-0.21-4.29-0.33c-0.71,1.12-1.43,2.23-2.15,3.34c0.71,1.23,1.42,2.46,2.13,3.7C39.63,60.48,41.06,60.6,42.49,60.73z
+ "/>
+<linearGradient id="SVGID_230_" gradientUnits="userSpaceOnUse" x1="-56.6636" y1="-293.4126" x2="-52.6523" y2="-286.4649" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_230_)" d="M42.51,50.26c0.72-1.13,1.44-2.26,2.15-3.4c-0.71-1.23-1.43-2.46-2.14-3.68
+ c-1.43-0.09-2.86-0.17-4.29-0.26c-0.72,1.13-1.43,2.25-2.15,3.38c0.71,1.22,1.43,2.44,2.14,3.66
+ C39.65,50.05,41.08,50.16,42.51,50.26z"/>
+<linearGradient id="SVGID_231_" gradientUnits="userSpaceOnUse" x1="-56.7002" y1="-303.875" x2="-52.6606" y2="-296.8783" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_231_)" d="M42.54,39.79c0.72-1.14,1.44-2.29,2.15-3.43c-0.71-1.22-1.42-2.44-2.14-3.65
+ c-1.43-0.06-2.86-0.13-4.29-0.2c-0.72,1.14-1.43,2.28-2.15,3.41c0.71,1.21,1.42,2.42,2.14,3.63C39.68,39.63,41.11,39.71,42.54,39.79
+ z"/>
+<linearGradient id="SVGID_232_" gradientUnits="userSpaceOnUse" x1="-56.7358" y1="-314.3369" x2="-52.668" y2="-307.2912" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_232_)" d="M42.56,29.32c0.72-1.15,1.44-2.31,2.15-3.46c-0.71-1.21-1.43-2.41-2.14-3.62
+ c-1.43-0.04-2.86-0.09-4.3-0.13c-0.72,1.15-1.43,2.3-2.15,3.44c0.71,1.2,1.43,2.4,2.14,3.6C39.7,29.2,41.13,29.26,42.56,29.32z"/>
+<linearGradient id="SVGID_233_" gradientUnits="userSpaceOnUse" x1="-56.7715" y1="-324.7979" x2="-52.6758" y2="-317.7039" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_233_)" d="M42.58,18.85c0.72-1.16,1.44-2.33,2.15-3.5c-0.71-1.2-1.42-2.39-2.14-3.59
+ c-1.43-0.02-2.87-0.05-4.3-0.07c-0.72,1.16-1.44,2.32-2.15,3.47c0.71,1.19,1.43,2.37,2.14,3.57C39.72,18.77,41.15,18.81,42.58,18.85
+ z"/>
+<linearGradient id="SVGID_234_" gradientUnits="userSpaceOnUse" x1="-56.8086" y1="-335.2598" x2="-52.686" y2="-328.1193" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_234_)" d="M42.6,8.38c0.72-1.17,1.44-2.35,2.16-3.53c-0.71-1.19-1.43-2.38-2.14-3.56c-1.43,0-2.86,0-4.3-0.01
+ c-0.72,1.17-1.44,2.34-2.15,3.5c0.71,1.17,1.43,2.35,2.14,3.53C39.74,8.34,41.17,8.36,42.6,8.38z"/>
+<linearGradient id="SVGID_235_" gradientUnits="userSpaceOnUse" x1="-45.3628" y1="-268.0112" x2="-41.4912" y2="-261.3055" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_235_)" d="M31.28,75.58c0.72-1.08,1.43-2.16,2.15-3.25c-0.71-1.24-1.42-2.48-2.14-3.72
+ c-1.43-0.15-2.85-0.3-4.28-0.46c-0.72,1.08-1.43,2.15-2.14,3.21c0.71,1.23,1.42,2.47,2.13,3.71C28.43,75.25,29.85,75.42,31.28,75.58
+ z"/>
+<linearGradient id="SVGID_236_" gradientUnits="userSpaceOnUse" x1="-45.395" y1="-278.3027" x2="-41.4917" y2="-271.542" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_236_)" d="M31.3,65.28c0.72-1.09,1.43-2.18,2.15-3.28c-0.71-1.23-1.42-2.46-2.14-3.69
+ c-1.43-0.13-2.86-0.26-4.29-0.39c-0.72,1.09-1.43,2.17-2.15,3.25c0.71,1.22,1.42,2.44,2.13,3.67C28.44,64.99,29.87,65.14,31.3,65.28
+ z"/>
+<linearGradient id="SVGID_237_" gradientUnits="userSpaceOnUse" x1="-45.4272" y1="-288.5952" x2="-41.4937" y2="-281.782" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_237_)" d="M31.32,54.98c0.72-1.1,1.43-2.21,2.15-3.32c-0.71-1.22-1.42-2.44-2.14-3.65
+ c-1.43-0.11-2.86-0.21-4.29-0.32c-0.71,1.1-1.43,2.19-2.15,3.28c0.71,1.21,1.43,2.42,2.14,3.64C28.46,54.74,29.89,54.86,31.32,54.98
+ z"/>
+<linearGradient id="SVGID_238_" gradientUnits="userSpaceOnUse" x1="-45.459" y1="-298.8857" x2="-41.4961" y2="-292.0218" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_238_)" d="M31.33,44.68c0.72-1.11,1.43-2.23,2.15-3.35c-0.71-1.21-1.42-2.41-2.14-3.62
+ c-1.43-0.08-2.86-0.17-4.29-0.25c-0.72,1.11-1.43,2.22-2.15,3.32c0.71,1.2,1.43,2.4,2.14,3.6C28.48,44.49,29.91,44.58,31.33,44.68z"
+ />
+<linearGradient id="SVGID_239_" gradientUnits="userSpaceOnUse" x1="-45.4922" y1="-309.1777" x2="-41.499" y2="-302.2614" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_239_)" d="M31.35,34.38c0.72-1.12,1.43-2.25,2.15-3.38c-0.71-1.2-1.43-2.39-2.14-3.58
+ c-1.43-0.06-2.86-0.12-4.29-0.18c-0.72,1.12-1.43,2.24-2.15,3.36c0.71,1.18,1.43,2.37,2.14,3.56
+ C28.49,34.23,29.92,34.31,31.35,34.38z"/>
+<linearGradient id="SVGID_240_" gradientUnits="userSpaceOnUse" x1="-45.5244" y1="-319.4678" x2="-41.5015" y2="-312.4998" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_240_)" d="M31.37,24.08c0.71-1.13,1.43-2.27,2.15-3.42c-0.71-1.19-1.43-2.37-2.14-3.55
+ c-1.43-0.04-2.86-0.07-4.29-0.11c-0.72,1.13-1.44,2.26-2.15,3.39c0.71,1.17,1.43,2.35,2.14,3.53
+ C28.51,23.97,29.94,24.03,31.37,24.08z"/>
+<linearGradient id="SVGID_241_" gradientUnits="userSpaceOnUse" x1="-45.5576" y1="-329.7598" x2="-41.5039" y2="-322.7385" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_241_)" d="M31.39,13.78c0.72-1.15,1.44-2.29,2.15-3.45c-0.71-1.17-1.43-2.35-2.14-3.52
+ c-1.43-0.01-2.86-0.03-4.3-0.05c-0.72,1.15-1.44,2.29-2.15,3.43c0.71,1.16,1.43,2.33,2.14,3.5C28.53,13.72,29.96,13.75,31.39,13.78z
+ "/>
+<linearGradient id="SVGID_242_" gradientUnits="userSpaceOnUse" x1="-44.6172" y1="-338.3657" x2="-41.5068" y2="-332.9784" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_242_)" d="M24.97,0c0.71,1.15,1.43,2.3,2.14,3.46c1.43,0.01,2.87,0.02,4.3,0.03
+ c0.72-1.16,1.44-2.32,2.15-3.48C30.7,0,27.83,0,24.97,0z"/>
+<linearGradient id="SVGID_243_" gradientUnits="userSpaceOnUse" x1="-34.5127" y1="-264.5337" x2="-31.7847" y2="-259.8086" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_243_)" d="M22.61,75.8c-0.71-1.23-1.42-2.46-2.13-3.69c-1.42-0.17-2.85-0.35-4.28-0.53
+ c-0.71,1.05-1.43,2.08-2.14,3.12C16.91,75.08,19.76,75.45,22.61,75.8z"/>
+<linearGradient id="SVGID_244_" gradientUnits="userSpaceOnUse" x1="-34.54" y1="-274.6479" x2="-30.7202" y2="-268.0318" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_244_)" d="M20.48,68.84c0.72-1.06,1.43-2.12,2.15-3.19c-0.71-1.22-1.42-2.44-2.13-3.66
+ c-1.43-0.15-2.85-0.3-4.28-0.45c-0.71,1.06-1.43,2.11-2.14,3.15c0.71,1.21,1.42,2.42,2.14,3.64C17.63,68.51,19.06,68.67,20.48,68.84
+ z"/>
+<linearGradient id="SVGID_245_" gradientUnits="userSpaceOnUse" x1="-34.5679" y1="-284.7627" x2="-30.7153" y2="-278.0899" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_245_)" d="M20.5,58.72c0.72-1.07,1.43-2.15,2.14-3.23c-0.71-1.21-1.42-2.42-2.14-3.62
+ c-1.43-0.13-2.86-0.25-4.29-0.38c-0.71,1.07-1.43,2.13-2.14,3.19c0.71,1.2,1.43,2.4,2.14,3.6C17.64,58.43,19.07,58.57,20.5,58.72z"
+ />
+<linearGradient id="SVGID_246_" gradientUnits="userSpaceOnUse" x1="-34.5952" y1="-294.874" x2="-30.7109" y2="-288.1463" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_246_)" d="M20.51,48.59c0.71-1.08,1.43-2.17,2.15-3.26c-0.71-1.2-1.43-2.39-2.14-3.58
+ c-1.43-0.1-2.86-0.2-4.29-0.31c-0.71,1.08-1.43,2.16-2.14,3.23c0.71,1.18,1.42,2.38,2.14,3.57C17.65,48.36,19.08,48.48,20.51,48.59z
+ "/>
+<linearGradient id="SVGID_247_" gradientUnits="userSpaceOnUse" x1="-34.6221" y1="-304.9878" x2="-30.7056" y2="-298.2042" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_247_)" d="M20.52,38.47c0.71-1.1,1.43-2.2,2.15-3.3c-0.71-1.19-1.42-2.37-2.14-3.55
+ c-1.43-0.08-2.86-0.15-4.29-0.23c-0.71,1.09-1.43,2.18-2.15,3.27c0.71,1.17,1.42,2.35,2.14,3.53
+ C17.66,38.28,19.09,38.38,20.52,38.47z"/>
+<linearGradient id="SVGID_248_" gradientUnits="userSpaceOnUse" x1="-34.6523" y1="-315.1035" x2="-30.7021" y2="-308.2616" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_248_)" d="M20.53,28.35c0.72-1.11,1.43-2.22,2.15-3.33c-0.71-1.17-1.43-2.35-2.14-3.51
+ c-1.43-0.05-2.86-0.1-4.29-0.16c-0.72,1.11-1.43,2.21-2.15,3.31c0.71,1.16,1.43,2.32,2.14,3.49C17.67,28.21,19.1,28.28,20.53,28.35z
+ "/>
+<linearGradient id="SVGID_249_" gradientUnits="userSpaceOnUse" x1="-34.6782" y1="-325.2178" x2="-30.6943" y2="-318.3175" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_249_)" d="M20.55,18.23c0.71-1.12,1.43-2.24,2.15-3.37c-0.71-1.16-1.43-2.32-2.14-3.48
+ c-1.43-0.03-2.87-0.06-4.3-0.08c-0.72,1.12-1.43,2.23-2.15,3.34c0.71,1.15,1.43,2.3,2.14,3.46C17.68,18.14,19.12,18.18,20.55,18.23z
+ "/>
+<linearGradient id="SVGID_250_" gradientUnits="userSpaceOnUse" x1="-34.707" y1="-335.332" x2="-30.6909" y2="-328.3759" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_250_)" d="M20.56,8.1c0.72-1.13,1.43-2.26,2.15-3.4C22,3.54,21.28,2.4,20.57,1.25c-1.43,0-2.87-0.01-4.3-0.01
+ c-0.72,1.13-1.43,2.26-2.15,3.38c0.72,1.13,1.43,2.27,2.14,3.42C17.7,8.06,19.13,8.08,20.56,8.1z"/>
+<linearGradient id="SVGID_251_" gradientUnits="userSpaceOnUse" x1="-23.334" y1="-270.5356" x2="-19.6069" y2="-264.0802" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_251_)" d="M9.33,72.84c0.71-1.02,1.42-2.05,2.14-3.09c-0.71-1.21-1.42-2.42-2.14-3.63
+ c-1.43-0.17-2.85-0.35-4.28-0.53c-0.71,1.02-1.42,2.04-2.14,3.05c0.71,1.2,1.43,2.4,2.14,3.61C6.48,72.46,7.9,72.65,9.33,72.84z"/>
+<linearGradient id="SVGID_252_" gradientUnits="userSpaceOnUse" x1="-23.355" y1="-280.4526" x2="-19.5942" y2="-273.9388" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_252_)" d="M9.33,62.92c0.71-1.04,1.43-2.08,2.14-3.13c-0.71-1.2-1.42-2.4-2.14-3.59
+ c-1.43-0.15-2.85-0.3-4.28-0.45c-0.71,1.04-1.43,2.06-2.14,3.09c0.71,1.19,1.43,2.38,2.14,3.57C6.48,62.58,7.9,62.75,9.33,62.92z"/>
+<linearGradient id="SVGID_253_" gradientUnits="userSpaceOnUse" x1="-23.376" y1="-290.3691" x2="-19.5801" y2="-283.7945" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_253_)" d="M9.33,52.99c0.71-1.05,1.42-2.1,2.14-3.17c-0.71-1.19-1.42-2.37-2.14-3.55
+ c-1.43-0.12-2.85-0.25-4.28-0.37C4.34,46.95,3.63,48,2.92,49.04c0.71,1.17,1.43,2.35,2.14,3.53C6.48,52.71,7.91,52.85,9.33,52.99z"
+ />
+<linearGradient id="SVGID_254_" gradientUnits="userSpaceOnUse" x1="-23.396" y1="-300.2866" x2="-19.5649" y2="-293.651" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_254_)" d="M9.34,43.06c0.71-1.06,1.43-2.13,2.14-3.2c-0.71-1.17-1.42-2.34-2.14-3.51
+ c-1.43-0.1-2.85-0.19-4.29-0.29c-0.71,1.06-1.43,2.12-2.14,3.17c0.72,1.16,1.43,2.32,2.14,3.49C6.49,42.84,7.91,42.95,9.34,43.06z"
+ />
+<linearGradient id="SVGID_255_" gradientUnits="userSpaceOnUse" x1="-23.4194" y1="-310.2041" x2="-19.5522" y2="-303.506" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_255_)" d="M9.34,33.14c0.72-1.08,1.43-2.16,2.15-3.24c-0.71-1.16-1.43-2.32-2.14-3.47
+ c-1.43-0.07-2.86-0.14-4.29-0.21c-0.71,1.08-1.43,2.15-2.14,3.21c0.71,1.15,1.43,2.29,2.14,3.45C6.49,32.96,7.91,33.05,9.34,33.14z"
+ />
+<linearGradient id="SVGID_256_" gradientUnits="userSpaceOnUse" x1="-23.438" y1="-320.1191" x2="-19.5381" y2="-313.3643" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_256_)" d="M9.35,23.21c0.72-1.09,1.43-2.18,2.15-3.28c-0.71-1.15-1.43-2.29-2.14-3.43
+ c-1.43-0.04-2.86-0.09-4.29-0.13c-0.71,1.09-1.43,2.17-2.14,3.25c0.72,1.13,1.43,2.27,2.14,3.41C6.49,23.09,7.92,23.15,9.35,23.21z"
+ />
+<linearGradient id="SVGID_257_" gradientUnits="userSpaceOnUse" x1="-23.4614" y1="-330.0376" x2="-19.5244" y2="-323.2185" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_257_)" d="M9.35,13.28c0.72-1.1,1.43-2.21,2.15-3.32c-0.71-1.14-1.43-2.27-2.14-3.4
+ C7.92,6.55,6.5,6.53,5.06,6.52c-0.71,1.1-1.43,2.2-2.15,3.29c0.72,1.12,1.43,2.24,2.14,3.37C6.49,13.21,7.92,13.25,9.35,13.28z"/>
+<linearGradient id="SVGID_258_" gradientUnits="userSpaceOnUse" x1="-22.5654" y1="-338.3662" x2="-19.5107" y2="-333.0753" gradientTransform="matrix(-1 0 0 1 -14.2783 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+</linearGradient>
+<path fill="url(#SVGID_258_)" d="M2.92,0c0.71,1.11,1.43,2.22,2.15,3.33c1.44,0.01,2.86,0.02,4.3,0.03
+ c0.72-1.11,1.43-2.23,2.15-3.36C8.65,0,5.78,0,2.92,0z"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_horisontal_636x96px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_horisontal_636x96px.svg
new file mode 100644
index 0000000..0a3efd8
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_topbar_horisontal_636x96px.svg
@@ -0,0 +1,4060 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="636px" height="96px" viewBox="0 0 636 96" enable-background="new 0 0 636 96" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="367.2852" y1="-98.1338" x2="268.8617" y2="172.2825">
+ <stop offset="0" style="stop-color:#2BD5FF"/>
+ <stop offset="0.3516" style="stop-color:#80E6FF"/>
+ <stop offset="0.9176" style="stop-color:#28C4EB"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M464.28,86.13c0.34,0,0.68,0,1.02,0c0,0,92.78,0.9,170.84-12.08V-0.28H464.28H182.14h-182v74.75
+ c0,0,81.49,11.57,182,11.65H464.28z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="329.376" y1="19.6938" x2="309.3868" y2="133.0578">
+ <stop offset="0" style="stop-color:#2BD5FF"/>
+ <stop offset="0.9176" style="stop-color:#28C6ED"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M465.68,85.81c-0.41,0-283.53,0.32-283.53,0.32v-0.32C81.73,85.71,0.34,74.16,0.34,74.16l-0.02,4.41
+ c0,0,80.84,13.35,180.79,13.55v0.01c380.6,8.1,454.93-0.01,454.93-0.01l0.1-18.33C558.16,86.7,465.68,85.81,465.68,85.81z"/>
+
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-363.0977" y1="-269.0723" x2="-359.7446" y2="-263.2646" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M631.02,70.41c-0.71-0.97-1.42-1.95-2.12-2.93c-1.42,0.18-2.83,0.37-4.25,0.54
+ c-0.71,1.17-1.41,2.34-2.12,3.52C625.36,71.17,628.19,70.79,631.02,70.41z"/>
+
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-363.0767" y1="-278.5928" x2="-359.0044" y2="-271.5394" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M628.9,64.4c0.71-1.16,1.41-2.32,2.12-3.47c-0.71-0.98-1.42-1.97-2.12-2.96
+ c-1.42,0.16-2.83,0.31-4.25,0.47c-0.71,1.16-1.41,2.32-2.12,3.48c0.71,1.01,1.42,2.01,2.13,3C626.06,64.75,627.48,64.58,628.9,64.4
+ z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-363.0591" y1="-288.1143" x2="-359.0181" y2="-281.115" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M628.9,54.89c0.71-1.15,1.42-2.29,2.12-3.43c-0.71-1-1.42-2-2.13-3c-1.42,0.13-2.84,0.26-4.25,0.39
+ c-0.71,1.14-1.42,2.29-2.13,3.45c0.71,1.02,1.42,2.03,2.13,3.04C626.06,55.19,627.48,55.04,628.9,54.89z"/>
+
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-363.041" y1="-297.6362" x2="-359.0332" y2="-290.6945" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M628.89,45.38c0.71-1.13,1.42-2.26,2.13-3.39c-0.71-1.01-1.42-2.02-2.13-3.04
+ c-1.42,0.11-2.84,0.21-4.26,0.32c-0.71,1.13-1.42,2.27-2.13,3.41c0.71,1.03,1.42,2.05,2.13,3.07
+ C626.06,45.62,627.48,45.5,628.89,45.38z"/>
+
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-363.02" y1="-307.1558" x2="-359.0444" y2="-300.2698" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M628.89,35.87c0.71-1.12,1.42-2.24,2.13-3.35c-0.71-1.02-1.42-2.05-2.13-3.08
+ c-1.42,0.08-2.84,0.16-4.26,0.24c-0.71,1.12-1.42,2.24-2.13,3.37c0.71,1.04,1.42,2.08,2.13,3.12
+ C626.05,36.06,627.47,35.97,628.89,35.87z"/>
+
+ <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-363.0029" y1="-316.6782" x2="-359.0586" y2="-309.8464" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_8_)" d="M628.89,26.36c0.71-1.11,1.42-2.21,2.13-3.31c-0.71-1.04-1.42-2.08-2.13-3.12
+ c-1.42,0.06-2.84,0.11-4.27,0.16c-0.71,1.11-1.42,2.22-2.13,3.34c0.71,1.05,1.42,2.1,2.13,3.15
+ C626.05,26.5,627.47,26.43,628.89,26.36z"/>
+
+ <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-362.9824" y1="-326.1982" x2="-359.0698" y2="-319.4214" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_9_)" d="M628.89,16.85c0.71-1.1,1.42-2.19,2.13-3.28c-0.71-1.05-1.42-2.1-2.13-3.16
+ c-1.42,0.03-2.85,0.06-4.27,0.08c-0.71,1.1-1.42,2.2-2.13,3.3c0.71,1.07,1.42,2.13,2.13,3.19
+ C626.04,16.94,627.47,16.89,628.89,16.85z"/>
+
+ <linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-362.9653" y1="-335.7188" x2="-359.0854" y2="-328.9986" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_10_)" d="M628.89,7.33c0.71-1.08,1.42-2.16,2.13-3.23c-0.71-1.06-1.42-2.13-2.13-3.2
+ c-1.43,0-2.85,0.01-4.27,0.01c-0.71,1.08-1.42,2.17-2.13,3.26c0.71,1.08,1.42,2.15,2.13,3.22C626.04,7.38,627.46,7.35,628.89,7.33z
+ "/>
+
+ <linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="-352.021" y1="-272.1646" x2="-347.8901" y2="-265.0097" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_11_)" d="M617.82,70.94c0.71-1.18,1.41-2.36,2.12-3.54c-0.71-1.01-1.42-2.02-2.13-3.03
+ c-1.42,0.16-2.83,0.32-4.25,0.47c-0.71,1.18-1.41,2.36-2.12,3.55c0.71,1.02,1.42,2.04,2.13,3.06
+ C614.98,71.29,616.4,71.12,617.82,70.94z"/>
+
+ <linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="-351.9932" y1="-281.8779" x2="-347.8936" y2="-274.7772" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_12_)" d="M617.8,61.24c0.71-1.17,1.42-2.34,2.12-3.5c-0.71-1.02-1.42-2.04-2.13-3.07
+ c-1.42,0.14-2.84,0.27-4.26,0.4c-0.71,1.17-1.42,2.34-2.12,3.52c0.71,1.04,1.42,2.07,2.13,3.1
+ C614.97,61.54,616.39,61.39,617.8,61.24z"/>
+
+ <linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="-351.9683" y1="-291.5947" x2="-347.8979" y2="-284.5447" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_13_)" d="M617.79,51.53c0.71-1.16,1.42-2.31,2.12-3.46c-0.71-1.03-1.42-2.07-2.13-3.1
+ c-1.42,0.11-2.84,0.22-4.26,0.33c-0.71,1.16-1.41,2.32-2.12,3.48c0.71,1.05,1.42,2.09,2.13,3.13
+ C614.96,51.79,616.38,51.66,617.79,51.53z"/>
+
+ <linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="-351.9429" y1="-301.3062" x2="-347.9033" y2="-294.3094" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_14_)" d="M617.78,41.83c0.71-1.15,1.42-2.29,2.13-3.43c-0.71-1.04-1.42-2.09-2.13-3.14
+ c-1.42,0.09-2.84,0.17-4.26,0.26c-0.71,1.14-1.42,2.29-2.12,3.45c0.71,1.06,1.42,2.12,2.13,3.17
+ C614.94,42.04,616.37,41.93,617.78,41.83z"/>
+
+ <linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="-351.9175" y1="-311.022" x2="-347.9077" y2="-304.0768" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_15_)" d="M617.78,32.12c0.71-1.13,1.42-2.26,2.13-3.39c-0.71-1.05-1.42-2.11-2.14-3.17
+ c-1.42,0.06-2.84,0.13-4.26,0.19c-0.71,1.13-1.42,2.27-2.13,3.41c0.71,1.07,1.42,2.14,2.13,3.2
+ C614.93,32.28,616.36,32.2,617.78,32.12z"/>
+
+ <linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="-351.8921" y1="-320.7388" x2="-347.9116" y2="-313.8444" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_16_)" d="M617.77,22.42c0.71-1.12,1.42-2.24,2.13-3.36c-0.71-1.06-1.42-2.14-2.13-3.21
+ c-1.42,0.04-2.85,0.08-4.27,0.12c-0.71,1.12-1.42,2.25-2.13,3.38c0.71,1.08,1.42,2.16,2.14,3.24
+ C614.92,22.53,616.34,22.47,617.77,22.42z"/>
+
+ <linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="-351.8672" y1="-330.4517" x2="-347.917" y2="-323.6097" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_17_)" d="M617.75,12.71c0.71-1.11,1.42-2.21,2.13-3.32c-0.71-1.08-1.43-2.16-2.14-3.25
+ c-1.42,0.02-2.85,0.03-4.27,0.05c-0.71,1.11-1.42,2.23-2.13,3.34c0.71,1.09,1.42,2.19,2.14,3.27
+ C614.91,12.77,616.33,12.74,617.75,12.71z"/>
+
+ <linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="-350.9536" y1="-338.6313" x2="-347.9209" y2="-333.3785" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_18_)" d="M611.34-0.28c0.71,1.11,1.43,2.21,2.14,3.31c1.42-0.01,2.85-0.01,4.27-0.02
+ c0.71-1.1,1.42-2.19,2.13-3.28C617.03-0.28,614.18-0.28,611.34-0.28z"/>
+
+ <linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="-341.3149" y1="-266.4116" x2="-337.9531" y2="-260.5888" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_19_)" d="M609.21,73.21c-0.71-1.03-1.42-2.06-2.13-3.09c-1.42,0.16-2.84,0.32-4.26,0.47
+ c-0.71,1.2-1.42,2.4-2.12,3.61C603.54,73.88,606.37,73.55,609.21,73.21z"/>
+
+ <linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="-341.2812" y1="-276.2993" x2="-337.1309" y2="-269.1106" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_20_)" d="M607.07,66.92c0.71-1.19,1.42-2.38,2.12-3.56c-0.71-1.04-1.42-2.08-2.13-3.12
+ c-1.42,0.14-2.84,0.27-4.26,0.41c-0.71,1.19-1.42,2.38-2.12,3.57c0.71,1.06,1.43,2.11,2.14,3.16
+ C604.23,67.22,605.65,67.07,607.07,66.92z"/>
+
+ <linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="-341.2524" y1="-286.1904" x2="-337.1284" y2="-279.0474" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_21_)" d="M607.05,57.04c0.71-1.18,1.42-2.36,2.12-3.53c-0.71-1.05-1.43-2.1-2.13-3.16
+ c-1.42,0.12-2.84,0.23-4.26,0.34c-0.71,1.18-1.42,2.36-2.12,3.54c0.71,1.07,1.43,2.13,2.14,3.19
+ C604.22,57.3,605.63,57.17,607.05,57.04z"/>
+
+ <linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="-341.2212" y1="-296.0801" x2="-337.1265" y2="-288.9878" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_22_)" d="M607.04,47.16c0.71-1.17,1.42-2.33,2.12-3.49c-0.71-1.06-1.42-2.12-2.14-3.19
+ c-1.42,0.09-2.84,0.18-4.26,0.27c-0.71,1.17-1.42,2.34-2.12,3.51c0.71,1.08,1.42,2.15,2.14,3.22
+ C604.2,47.37,605.62,47.27,607.04,47.16z"/>
+
+ <linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="-341.1899" y1="-305.9692" x2="-337.1226" y2="-298.9243" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_23_)" d="M607.02,37.28c0.71-1.15,1.42-2.31,2.13-3.46c-0.71-1.07-1.42-2.15-2.14-3.22
+ c-1.42,0.07-2.84,0.14-4.27,0.21c-0.71,1.16-1.42,2.31-2.12,3.48c0.71,1.09,1.43,2.17,2.14,3.26
+ C604.18,37.45,605.6,37.36,607.02,37.28z"/>
+
+ <linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="-341.1616" y1="-315.8604" x2="-337.1216" y2="-308.8628" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_24_)" d="M607.01,27.4c0.71-1.15,1.42-2.29,2.13-3.43c-0.71-1.08-1.43-2.17-2.14-3.26
+ c-1.42,0.05-2.84,0.1-4.27,0.14c-0.71,1.15-1.42,2.29-2.12,3.45c0.71,1.1,1.42,2.19,2.14,3.29
+ C604.16,27.52,605.58,27.46,607.01,27.4z"/>
+
+ <linearGradient id="SVGID_25_" gradientUnits="userSpaceOnUse" x1="-341.1304" y1="-325.75" x2="-337.1187" y2="-318.8015" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_25_)" d="M606.99,17.51c0.71-1.13,1.42-2.26,2.13-3.39c-0.71-1.1-1.43-2.19-2.14-3.29
+ c-1.42,0.03-2.85,0.05-4.27,0.08c-0.71,1.13-1.42,2.27-2.12,3.41c0.71,1.11,1.43,2.22,2.14,3.32
+ C604.14,17.59,605.57,17.56,606.99,17.51z"/>
+
+ <linearGradient id="SVGID_26_" gradientUnits="userSpaceOnUse" x1="-341.0991" y1="-335.6426" x2="-337.1152" y2="-328.7423" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_26_)" d="M606.97,7.63c0.71-1.12,1.42-2.24,2.13-3.36c-0.71-1.1-1.43-2.21-2.14-3.33
+ c-1.43,0-2.85,0.01-4.27,0.01c-0.71,1.12-1.42,2.25-2.13,3.38c0.71,1.12,1.43,2.24,2.14,3.35C604.13,7.67,605.55,7.65,606.97,7.63z
+ "/>
+
+ <linearGradient id="SVGID_27_" gradientUnits="userSpaceOnUse" x1="-330.2061" y1="-269.8462" x2="-326.0059" y2="-262.5712" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_27_)" d="M595.97,73.47c0.71-1.21,1.41-2.42,2.12-3.62c-0.71-1.06-1.42-2.12-2.13-3.18
+ c-1.42,0.14-2.84,0.27-4.26,0.41c-0.71,1.21-1.42,2.42-2.12,3.63c0.71,1.07,1.43,2.14,2.14,3.21
+ C593.13,73.78,594.55,73.63,595.97,73.47z"/>
+
+ <linearGradient id="SVGID_28_" gradientUnits="userSpaceOnUse" x1="-330.1714" y1="-279.9058" x2="-325.9966" y2="-272.6748" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_28_)" d="M595.95,63.42c0.71-1.2,1.42-2.39,2.12-3.59c-0.71-1.07-1.42-2.14-2.13-3.21
+ c-1.42,0.12-2.84,0.23-4.27,0.35c-0.71,1.2-1.42,2.39-2.12,3.6c0.71,1.08,1.43,2.16,2.14,3.24
+ C593.11,63.69,594.53,63.56,595.95,63.42z"/>
+
+ <linearGradient id="SVGID_29_" gradientUnits="userSpaceOnUse" x1="-330.1382" y1="-289.9644" x2="-325.9897" y2="-282.7791" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_29_)" d="M595.93,53.38c0.71-1.19,1.42-2.38,2.12-3.56c-0.71-1.08-1.43-2.16-2.14-3.24
+ c-1.42,0.1-2.84,0.19-4.27,0.29c-0.71,1.19-1.42,2.38-2.13,3.57c0.71,1.09,1.43,2.19,2.14,3.27
+ C593.09,53.59,594.51,53.48,595.93,53.38z"/>
+
+ <linearGradient id="SVGID_30_" gradientUnits="userSpaceOnUse" x1="-330.1021" y1="-300.02" x2="-325.9805" y2="-292.8812" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_30_)" d="M595.91,43.32c0.71-1.18,1.41-2.35,2.12-3.52c-0.71-1.09-1.43-2.18-2.14-3.27
+ c-1.42,0.08-2.84,0.15-4.27,0.22c-0.71,1.18-1.42,2.36-2.13,3.54c0.71,1.1,1.43,2.2,2.14,3.3
+ C593.07,43.5,594.49,43.41,595.91,43.32z"/>
+
+ <linearGradient id="SVGID_31_" gradientUnits="userSpaceOnUse" x1="-330.0688" y1="-310.0796" x2="-325.9727" y2="-302.9848" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_31_)" d="M595.89,33.27c0.71-1.17,1.42-2.33,2.13-3.49c-0.71-1.1-1.43-2.2-2.14-3.31
+ c-1.42,0.06-2.84,0.11-4.27,0.17c-0.71,1.17-1.42,2.33-2.13,3.51c0.71,1.12,1.43,2.22,2.14,3.33
+ C593.04,33.41,594.47,33.34,595.89,33.27z"/>
+
+ <linearGradient id="SVGID_32_" gradientUnits="userSpaceOnUse" x1="-330.0347" y1="-320.1353" x2="-325.9658" y2="-313.0878" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_32_)" d="M595.87,23.22c0.71-1.16,1.42-2.31,2.13-3.46c-0.71-1.11-1.43-2.22-2.14-3.34
+ c-1.42,0.03-2.85,0.07-4.27,0.1c-0.71,1.16-1.42,2.32-2.12,3.48c0.71,1.12,1.43,2.24,2.14,3.36
+ C593.02,23.32,594.45,23.27,595.87,23.22z"/>
+
+ <linearGradient id="SVGID_33_" gradientUnits="userSpaceOnUse" x1="-329.9995" y1="-330.1958" x2="-325.9551" y2="-323.1906" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_33_)" d="M595.85,13.17c0.71-1.15,1.42-2.29,2.13-3.43c-0.71-1.12-1.43-2.24-2.14-3.37
+ c-1.42,0.01-2.85,0.03-4.27,0.04c-0.71,1.15-1.42,2.29-2.13,3.45c0.71,1.14,1.43,2.26,2.14,3.39
+ C593,13.23,594.42,13.2,595.85,13.17z"/>
+
+ <linearGradient id="SVGID_34_" gradientUnits="userSpaceOnUse" x1="-329.0283" y1="-338.6309" x2="-325.9473" y2="-333.2943" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_34_)" d="M589.41-0.28c0.71,1.14,1.43,2.29,2.14,3.42c1.43-0.01,2.85-0.01,4.27-0.02
+ c0.71-1.14,1.41-2.27,2.12-3.4C595.11-0.28,592.26-0.28,589.41-0.28z"/>
+
+ <linearGradient id="SVGID_35_" gradientUnits="userSpaceOnUse" x1="-319.4795" y1="-264.1133" x2="-316.1167" y2="-258.2888" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_35_)" d="M587.35,75.63c-0.71-1.08-1.43-2.15-2.14-3.23c-1.42,0.14-2.85,0.27-4.27,0.4
+ c-0.71,1.22-1.42,2.45-2.12,3.67C581.67,76.2,584.51,75.92,587.35,75.63z"/>
+
+ <linearGradient id="SVGID_36_" gradientUnits="userSpaceOnUse" x1="-319.4438" y1="-274.3223" x2="-315.2266" y2="-267.0177" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_36_)" d="M585.21,69.1c0.71-1.22,1.42-2.43,2.12-3.64c-0.71-1.08-1.43-2.17-2.14-3.26
+ c-1.42,0.12-2.85,0.23-4.26,0.35c-0.71,1.21-1.42,2.43-2.12,3.65c0.71,1.1,1.43,2.2,2.14,3.29
+ C582.36,69.36,583.78,69.23,585.21,69.1z"/>
+
+ <linearGradient id="SVGID_37_" gradientUnits="userSpaceOnUse" x1="-319.4058" y1="-284.5303" x2="-315.2134" y2="-277.2689" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_37_)" d="M585.18,58.9c0.71-1.21,1.41-2.41,2.12-3.61c-0.71-1.09-1.43-2.19-2.14-3.29
+ c-1.42,0.1-2.85,0.19-4.27,0.29c-0.71,1.21-1.42,2.41-2.12,3.62c0.71,1.11,1.43,2.21,2.14,3.32
+ C582.33,59.12,583.76,59.01,585.18,58.9z"/>
+
+ <linearGradient id="SVGID_38_" gradientUnits="userSpaceOnUse" x1="-319.3706" y1="-294.7388" x2="-315.2026" y2="-287.5196" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_38_)" d="M585.16,48.69c0.71-1.19,1.41-2.39,2.12-3.58c-0.71-1.1-1.43-2.21-2.14-3.32
+ c-1.42,0.08-2.85,0.16-4.27,0.23c-0.71,1.19-1.42,2.39-2.13,3.59c0.71,1.12,1.43,2.24,2.14,3.35
+ C582.31,48.88,583.73,48.79,585.16,48.69z"/>
+
+ <linearGradient id="SVGID_39_" gradientUnits="userSpaceOnUse" x1="-319.3335" y1="-304.9473" x2="-315.189" y2="-297.7687" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_39_)" d="M585.13,38.49c0.71-1.18,1.42-2.37,2.12-3.55c-0.71-1.11-1.43-2.23-2.14-3.35
+ c-1.42,0.06-2.85,0.12-4.27,0.18c-0.71,1.19-1.42,2.37-2.13,3.57c0.71,1.13,1.43,2.25,2.14,3.37
+ C582.29,38.64,583.71,38.57,585.13,38.49z"/>
+
+ <linearGradient id="SVGID_40_" gradientUnits="userSpaceOnUse" x1="-319.2974" y1="-315.1562" x2="-315.1777" y2="-308.0208" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_40_)" d="M585.11,28.29c0.71-1.17,1.42-2.35,2.12-3.52c-0.71-1.12-1.43-2.25-2.14-3.38
+ c-1.43,0.04-2.85,0.08-4.27,0.12c-0.71,1.18-1.42,2.36-2.12,3.54c0.71,1.14,1.43,2.27,2.14,3.4
+ C582.26,28.4,583.68,28.34,585.11,28.29z"/>
+
+ <linearGradient id="SVGID_41_" gradientUnits="userSpaceOnUse" x1="-319.2612" y1="-325.3652" x2="-315.1646" y2="-318.2696" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_41_)" d="M585.08,18.09c0.71-1.17,1.42-2.33,2.13-3.49c-0.71-1.13-1.43-2.27-2.14-3.41
+ c-1.42,0.02-2.85,0.04-4.27,0.07c-0.71,1.17-1.42,2.34-2.13,3.51c0.71,1.15,1.43,2.29,2.14,3.43
+ C582.24,18.16,583.66,18.12,585.08,18.09z"/>
+
+ <linearGradient id="SVGID_42_" gradientUnits="userSpaceOnUse" x1="-319.2231" y1="-335.5723" x2="-315.1519" y2="-328.5206" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_42_)" d="M585.06,7.89c0.71-1.16,1.42-2.31,2.12-3.46c-0.71-1.14-1.43-2.29-2.14-3.44
+ c-1.42,0-2.85,0.01-4.27,0.01c-0.71,1.16-1.42,2.32-2.13,3.48c0.71,1.15,1.43,2.31,2.14,3.46C582.21,7.92,583.63,7.9,585.06,7.89z"
+ />
+
+ <linearGradient id="SVGID_43_" gradientUnits="userSpaceOnUse" x1="-308.3457" y1="-267.8691" x2="-304.0898" y2="-260.4978" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_43_)" d="M574.09,75.64c0.71-1.23,1.42-2.46,2.12-3.68c-0.71-1.1-1.43-2.21-2.14-3.31
+ c-1.42,0.12-2.85,0.23-4.27,0.34c-0.71,1.23-1.42,2.46-2.12,3.69c0.71,1.12,1.43,2.23,2.14,3.34
+ C571.25,75.89,572.67,75.76,574.09,75.64z"/>
+
+ <linearGradient id="SVGID_44_" gradientUnits="userSpaceOnUse" x1="-308.3096" y1="-278.2183" x2="-304.0767" y2="-270.8867" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_44_)" d="M574.06,65.29c0.71-1.22,1.42-2.44,2.12-3.66c-0.71-1.11-1.43-2.22-2.14-3.34
+ c-1.42,0.1-2.85,0.2-4.27,0.29c-0.71,1.22-1.42,2.44-2.12,3.67c0.71,1.13,1.43,2.25,2.14,3.37
+ C571.22,65.51,572.64,65.4,574.06,65.29z"/>
+
+ <linearGradient id="SVGID_45_" gradientUnits="userSpaceOnUse" x1="-308.272" y1="-288.5713" x2="-304.0605" y2="-281.2769" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_45_)" d="M574.04,54.95c0.71-1.21,1.42-2.43,2.12-3.63c-0.71-1.12-1.43-2.24-2.14-3.37
+ c-1.42,0.08-2.85,0.16-4.27,0.24c-0.71,1.21-1.42,2.43-2.12,3.64c0.71,1.13,1.43,2.26,2.14,3.39
+ C571.19,55.13,572.62,55.04,574.04,54.95z"/>
+
+ <linearGradient id="SVGID_46_" gradientUnits="userSpaceOnUse" x1="-308.2344" y1="-298.9209" x2="-304.0454" y2="-291.6654" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_46_)" d="M574.01,44.6c0.71-1.2,1.42-2.4,2.12-3.6c-0.71-1.13-1.43-2.26-2.14-3.39
+ c-1.42,0.06-2.85,0.13-4.27,0.19c-0.71,1.2-1.42,2.41-2.12,3.62c0.71,1.14,1.43,2.28,2.14,3.42
+ C571.16,44.75,572.59,44.67,574.01,44.6z"/>
+
+ <linearGradient id="SVGID_47_" gradientUnits="userSpaceOnUse" x1="-308.1963" y1="-309.272" x2="-304.0293" y2="-302.0545" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_47_)" d="M573.98,34.26c0.71-1.19,1.42-2.39,2.13-3.58c-0.71-1.14-1.43-2.28-2.14-3.42
+ c-1.42,0.04-2.85,0.09-4.27,0.14c-0.71,1.2-1.42,2.39-2.12,3.59c0.71,1.15,1.43,2.3,2.14,3.44
+ C571.14,34.37,572.56,34.31,573.98,34.26z"/>
+
+ <linearGradient id="SVGID_48_" gradientUnits="userSpaceOnUse" x1="-308.1611" y1="-319.626" x2="-304.0151" y2="-312.4449" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_48_)" d="M573.96,23.91c0.71-1.19,1.42-2.37,2.13-3.55c-0.71-1.14-1.43-2.29-2.14-3.45
+ c-1.42,0.03-2.85,0.06-4.27,0.09c-0.71,1.19-1.42,2.37-2.12,3.56c0.71,1.16,1.43,2.31,2.14,3.47
+ C571.11,23.99,572.54,23.95,573.96,23.91z"/>
+
+ <linearGradient id="SVGID_49_" gradientUnits="userSpaceOnUse" x1="-308.1221" y1="-329.9766" x2="-303.9985" y2="-322.8344" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_49_)" d="M573.93,13.57c0.71-1.18,1.42-2.35,2.12-3.53c-0.71-1.15-1.43-2.31-2.14-3.47
+ c-1.42,0.01-2.85,0.02-4.27,0.04c-0.71,1.18-1.42,2.36-2.12,3.54c0.71,1.17,1.43,2.33,2.14,3.49
+ C571.08,13.61,572.51,13.59,573.93,13.57z"/>
+
+ <linearGradient id="SVGID_50_" gradientUnits="userSpaceOnUse" x1="-307.106" y1="-338.6313" x2="-303.9834" y2="-333.2229" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_50_)" d="M567.49-0.28c0.71,1.17,1.43,2.35,2.14,3.52c1.42-0.01,2.85-0.01,4.27-0.02
+ c0.71-1.17,1.42-2.33,2.13-3.5C573.18-0.28,570.34-0.28,567.49-0.28z"/>
+
+ <linearGradient id="SVGID_51_" gradientUnits="userSpaceOnUse" x1="-297.5938" y1="-262.1865" x2="-294.2358" y2="-256.3705" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_51_)" d="M565.46,77.68c-0.71-1.12-1.43-2.24-2.14-3.36c-1.42,0.12-2.85,0.22-4.27,0.33
+ c-0.71,1.24-1.42,2.48-2.12,3.73C559.76,78.16,562.61,77.92,565.46,77.68z"/>
+
+ <linearGradient id="SVGID_52_" gradientUnits="userSpaceOnUse" x1="-297.5625" y1="-272.6567" x2="-293.2939" y2="-265.2634" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_52_)" d="M563.3,70.93c0.71-1.23,1.42-2.47,2.12-3.7c-0.71-1.12-1.43-2.25-2.14-3.39
+ c-1.42,0.1-2.85,0.19-4.27,0.29c-0.71,1.23-1.41,2.47-2.12,3.71c0.72,1.14,1.43,2.27,2.14,3.41
+ C560.46,71.15,561.88,71.04,563.3,70.93z"/>
+
+ <linearGradient id="SVGID_53_" gradientUnits="userSpaceOnUse" x1="-297.5269" y1="-283.1328" x2="-293.2788" y2="-275.775" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_53_)" d="M563.28,60.46c0.71-1.23,1.42-2.45,2.13-3.67c-0.71-1.13-1.43-2.27-2.14-3.41
+ c-1.42,0.08-2.85,0.16-4.27,0.24c-0.71,1.23-1.42,2.45-2.12,3.68c0.71,1.15,1.43,2.29,2.14,3.43
+ C560.43,60.64,561.85,60.55,563.28,60.46z"/>
+
+ <linearGradient id="SVGID_54_" gradientUnits="userSpaceOnUse" x1="-297.4897" y1="-293.6089" x2="-293.2627" y2="-286.2874" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_54_)" d="M563.25,49.99c0.71-1.22,1.42-2.43,2.13-3.65c-0.72-1.14-1.43-2.29-2.14-3.43
+ c-1.42,0.07-2.85,0.13-4.27,0.19c-0.71,1.22-1.42,2.44-2.12,3.66c0.71,1.15,1.43,2.31,2.14,3.46
+ C560.4,50.14,561.82,50.07,563.25,49.99z"/>
+
+ <linearGradient id="SVGID_55_" gradientUnits="userSpaceOnUse" x1="-297.4526" y1="-304.0854" x2="-293.2446" y2="-296.797" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_55_)" d="M563.22,39.52c0.71-1.21,1.42-2.42,2.13-3.63c-0.72-1.15-1.43-2.3-2.15-3.46
+ c-1.42,0.05-2.85,0.1-4.27,0.14c-0.71,1.21-1.42,2.42-2.12,3.64c0.71,1.16,1.43,2.32,2.14,3.48
+ C560.37,39.64,561.8,39.58,563.22,39.52z"/>
+
+ <linearGradient id="SVGID_56_" gradientUnits="userSpaceOnUse" x1="-297.4146" y1="-314.562" x2="-293.228" y2="-307.3107" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_56_)" d="M563.19,29.04c0.71-1.2,1.42-2.4,2.12-3.6c-0.71-1.16-1.43-2.32-2.14-3.48
+ c-1.42,0.03-2.85,0.07-4.27,0.1c-0.71,1.2-1.42,2.41-2.12,3.61c0.71,1.17,1.43,2.34,2.14,3.5
+ C560.35,29.13,561.77,29.09,563.19,29.04z"/>
+
+ <linearGradient id="SVGID_57_" gradientUnits="userSpaceOnUse" x1="-297.3784" y1="-325.0405" x2="-293.2109" y2="-317.8222" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_57_)" d="M563.16,18.58c0.71-1.2,1.42-2.39,2.13-3.58c-0.71-1.17-1.43-2.33-2.14-3.51
+ c-1.42,0.02-2.85,0.04-4.27,0.05c-0.71,1.2-1.42,2.39-2.13,3.59c0.71,1.18,1.43,2.35,2.14,3.52
+ C560.32,18.63,561.74,18.6,563.16,18.58z"/>
+
+ <linearGradient id="SVGID_58_" gradientUnits="userSpaceOnUse" x1="-297.3384" y1="-335.5166" x2="-293.1929" y2="-328.3364" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_58_)" d="M563.14,8.1c0.71-1.19,1.42-2.37,2.12-3.55c-0.71-1.17-1.43-2.35-2.14-3.53
+ c-1.42,0-2.85,0-4.27,0.01c-0.71,1.19-1.42,2.38-2.13,3.57c0.72,1.18,1.43,2.37,2.15,3.54C560.29,8.13,561.71,8.12,563.14,8.1z"/>
+
+ <linearGradient id="SVGID_59_" gradientUnits="userSpaceOnUse" x1="-286.4502" y1="-266.2334" x2="-282.1519" y2="-258.7885" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_59_)" d="M552.18,77.43c0.71-1.25,1.42-2.49,2.13-3.73c-0.71-1.14-1.43-2.29-2.14-3.43
+ c-1.43,0.09-2.85,0.19-4.28,0.28c-0.71,1.24-1.42,2.49-2.13,3.74c0.71,1.16,1.43,2.31,2.14,3.45
+ C549.33,77.63,550.75,77.53,552.18,77.43z"/>
+
+ <linearGradient id="SVGID_60_" gradientUnits="userSpaceOnUse" x1="-286.4141" y1="-276.8271" x2="-282.1338" y2="-269.4135" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_60_)" d="M552.15,66.84c0.71-1.24,1.42-2.47,2.13-3.71c-0.71-1.15-1.43-2.3-2.14-3.45
+ c-1.42,0.08-2.85,0.16-4.27,0.24c-0.71,1.24-1.42,2.48-2.13,3.72c0.72,1.16,1.43,2.32,2.14,3.47
+ C549.3,67.01,550.72,66.93,552.15,66.84z"/>
+
+ <linearGradient id="SVGID_61_" gradientUnits="userSpaceOnUse" x1="-286.376" y1="-287.4204" x2="-282.1143" y2="-280.0389" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_61_)" d="M552.12,56.25c0.71-1.23,1.42-2.46,2.13-3.69c-0.71-1.16-1.43-2.31-2.15-3.47
+ c-1.42,0.07-2.85,0.13-4.27,0.19c-0.71,1.23-1.42,2.46-2.13,3.7c0.71,1.17,1.43,2.33,2.15,3.5
+ C549.27,56.4,550.7,56.32,552.12,56.25z"/>
+
+ <linearGradient id="SVGID_62_" gradientUnits="userSpaceOnUse" x1="-286.3418" y1="-298.0117" x2="-282.0991" y2="-290.6632" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_62_)" d="M552.09,45.66c0.71-1.23,1.42-2.45,2.13-3.67c-0.71-1.16-1.43-2.33-2.15-3.5
+ c-1.42,0.05-2.85,0.1-4.27,0.15c-0.71,1.22-1.42,2.45-2.12,3.68c0.71,1.17,1.43,2.35,2.14,3.51
+ C549.24,45.78,550.67,45.72,552.09,45.66z"/>
+
+ <linearGradient id="SVGID_63_" gradientUnits="userSpaceOnUse" x1="-286.3062" y1="-308.6084" x2="-282.0796" y2="-301.2878" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_63_)" d="M552.06,35.07c0.71-1.22,1.42-2.43,2.13-3.65c-0.71-1.17-1.43-2.34-2.14-3.52
+ c-1.42,0.04-2.85,0.08-4.27,0.11c-0.71,1.22-1.42,2.43-2.12,3.65c0.71,1.18,1.43,2.36,2.14,3.54
+ C549.22,35.17,550.64,35.12,552.06,35.07z"/>
+
+ <linearGradient id="SVGID_64_" gradientUnits="userSpaceOnUse" x1="-286.269" y1="-319.1992" x2="-282.062" y2="-311.9124" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_64_)" d="M552.04,24.48c0.71-1.21,1.42-2.42,2.12-3.62c-0.71-1.18-1.43-2.35-2.14-3.54
+ c-1.42,0.02-2.85,0.05-4.28,0.07c-0.71,1.21-1.42,2.42-2.12,3.63c0.71,1.19,1.43,2.37,2.14,3.56
+ C549.19,24.55,550.61,24.52,552.04,24.48z"/>
+
+ <linearGradient id="SVGID_65_" gradientUnits="userSpaceOnUse" x1="-286.2334" y1="-329.7939" x2="-282.0449" y2="-322.5393" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_65_)" d="M552.01,13.89c0.71-1.2,1.42-2.4,2.12-3.6c-0.71-1.18-1.43-2.37-2.14-3.56
+ c-1.42,0.01-2.85,0.02-4.27,0.03c-0.71,1.2-1.41,2.41-2.12,3.61c0.71,1.2,1.43,2.39,2.14,3.57
+ C549.16,13.93,550.59,13.91,552.01,13.89z"/>
+
+ <linearGradient id="SVGID_66_" gradientUnits="userSpaceOnUse" x1="-285.1821" y1="-338.6313" x2="-282.0254" y2="-333.1637" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_66_)" d="M545.56-0.28c0.71,1.2,1.43,2.4,2.14,3.59c1.43-0.01,2.85-0.01,4.27-0.01
+ c0.71-1.2,1.42-2.39,2.13-3.58C551.26-0.28,548.41-0.28,545.56-0.28z"/>
+
+ <linearGradient id="SVGID_67_" gradientUnits="userSpaceOnUse" x1="-275.6704" y1="-260.6182" x2="-272.3271" y2="-254.8275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_67_)" d="M543.53,79.35c-0.71-1.16-1.43-2.31-2.14-3.47c-1.43,0.09-2.85,0.18-4.28,0.26
+ c-0.71,1.25-1.42,2.5-2.13,3.76C537.83,79.73,540.68,79.54,543.53,79.35z"/>
+
+ <linearGradient id="SVGID_68_" gradientUnits="userSpaceOnUse" x1="-275.6523" y1="-271.3037" x2="-271.3477" y2="-263.8478" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_68_)" d="M541.38,72.42c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.16-1.43-2.32-2.15-3.49
+ c-1.42,0.08-2.85,0.15-4.28,0.23c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.18,1.43,2.35,2.14,3.51
+ C538.52,72.59,539.95,72.51,541.38,72.42z"/>
+
+ <linearGradient id="SVGID_69_" gradientUnits="userSpaceOnUse" x1="-275.6177" y1="-281.9995" x2="-271.3281" y2="-274.5698" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_69_)" d="M541.35,61.73c0.71-1.24,1.42-2.48,2.13-3.72c-0.71-1.17-1.43-2.34-2.14-3.51
+ c-1.43,0.06-2.85,0.12-4.28,0.19c-0.71,1.24-1.42,2.48-2.13,3.73c0.71,1.18,1.43,2.36,2.14,3.53
+ C538.5,61.88,539.92,61.81,541.35,61.73z"/>
+
+ <linearGradient id="SVGID_70_" gradientUnits="userSpaceOnUse" x1="-275.5815" y1="-292.6943" x2="-271.3096" y2="-285.2951" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_70_)" d="M541.32,51.04c0.71-1.24,1.42-2.47,2.13-3.7c-0.71-1.18-1.43-2.35-2.14-3.53
+ c-1.43,0.05-2.85,0.1-4.28,0.15c-0.71,1.24-1.42,2.47-2.12,3.71c0.72,1.19,1.43,2.37,2.14,3.55
+ C538.47,51.16,539.89,51.1,541.32,51.04z"/>
+
+ <linearGradient id="SVGID_71_" gradientUnits="userSpaceOnUse" x1="-275.5479" y1="-303.3892" x2="-271.2905" y2="-296.0153" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_71_)" d="M541.29,40.35c0.71-1.23,1.42-2.46,2.13-3.68c-0.71-1.18-1.43-2.36-2.14-3.55
+ c-1.43,0.04-2.85,0.08-4.28,0.12c-0.71,1.23-1.42,2.46-2.13,3.69c0.71,1.19,1.43,2.38,2.14,3.57
+ C538.44,40.45,539.87,40.4,541.29,40.35z"/>
+
+ <linearGradient id="SVGID_72_" gradientUnits="userSpaceOnUse" x1="-275.5142" y1="-314.0815" x2="-271.2734" y2="-306.7364" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_72_)" d="M541.27,29.66c0.71-1.22,1.42-2.44,2.12-3.66c-0.71-1.19-1.43-2.38-2.14-3.57
+ c-1.43,0.03-2.85,0.05-4.27,0.08c-0.71,1.22-1.42,2.45-2.13,3.67c0.71,1.2,1.43,2.39,2.14,3.59
+ C538.42,29.73,539.84,29.7,541.27,29.66z"/>
+
+ <linearGradient id="SVGID_73_" gradientUnits="userSpaceOnUse" x1="-275.4805" y1="-324.7773" x2="-271.2563" y2="-317.4609" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_73_)" d="M541.24,18.97c0.71-1.22,1.42-2.43,2.12-3.64c-0.71-1.19-1.43-2.39-2.14-3.59
+ c-1.43,0.01-2.85,0.03-4.27,0.04c-0.71,1.22-1.42,2.43-2.13,3.65c0.72,1.2,1.43,2.41,2.15,3.6
+ C538.39,19.01,539.81,18.99,541.24,18.97z"/>
+
+ <linearGradient id="SVGID_74_" gradientUnits="userSpaceOnUse" x1="-275.4487" y1="-335.4722" x2="-271.2402" y2="-328.1828" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_74_)" d="M541.21,8.28c0.71-1.21,1.42-2.42,2.13-3.62c-0.71-1.2-1.43-2.4-2.14-3.61
+ c-1.42,0-2.85,0-4.27,0.01c-0.71,1.21-1.42,2.42-2.12,3.64c0.71,1.21,1.43,2.42,2.14,3.62C538.36,8.3,539.79,8.29,541.21,8.28z"/>
+
+ <linearGradient id="SVGID_75_" gradientUnits="userSpaceOnUse" x1="-264.5215" y1="-264.936" x2="-260.1963" y2="-257.4446" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_75_)" d="M530.23,78.85c0.71-1.26,1.42-2.51,2.13-3.76c-0.71-1.18-1.43-2.35-2.14-3.53
+ c-1.43,0.07-2.85,0.14-4.28,0.21c-0.71,1.25-1.42,2.51-2.13,3.77c0.72,1.18,1.43,2.37,2.15,3.55
+ C527.38,79.01,528.8,78.93,530.23,78.85z"/>
+
+ <linearGradient id="SVGID_76_" gradientUnits="userSpaceOnUse" x1="-264.4883" y1="-275.7197" x2="-260.1782" y2="-268.2545" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_76_)" d="M530.21,68.07c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.18-1.43-2.36-2.15-3.54
+ c-1.43,0.06-2.85,0.12-4.28,0.18c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.19,1.43,2.38,2.15,3.57
+ C527.36,68.2,528.78,68.14,530.21,68.07z"/>
+
+ <linearGradient id="SVGID_77_" gradientUnits="userSpaceOnUse" x1="-264.4595" y1="-286.5088" x2="-260.1611" y2="-279.0638" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_77_)" d="M530.18,57.28c0.71-1.24,1.42-2.49,2.13-3.73c-0.72-1.18-1.43-2.37-2.15-3.56
+ c-1.43,0.05-2.85,0.1-4.28,0.15c-0.71,1.24-1.42,2.49-2.13,3.73c0.72,1.2,1.43,2.39,2.15,3.58
+ C527.33,57.4,528.76,57.34,530.18,57.28z"/>
+
+ <linearGradient id="SVGID_78_" gradientUnits="userSpaceOnUse" x1="-264.4253" y1="-297.2939" x2="-260.1421" y2="-289.8752" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_78_)" d="M530.16,46.5c0.71-1.24,1.42-2.48,2.13-3.71c-0.72-1.19-1.43-2.38-2.15-3.58
+ c-1.43,0.04-2.85,0.08-4.28,0.12c-0.71,1.24-1.42,2.48-2.13,3.72c0.71,1.2,1.43,2.4,2.14,3.6
+ C527.31,46.59,528.73,46.55,530.16,46.5z"/>
+
+ <linearGradient id="SVGID_79_" gradientUnits="userSpaceOnUse" x1="-264.395" y1="-308.0801" x2="-260.1265" y2="-300.6867" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_79_)" d="M530.13,35.72c0.71-1.23,1.42-2.47,2.13-3.7c-0.71-1.2-1.43-2.4-2.14-3.6
+ c-1.43,0.03-2.85,0.06-4.27,0.08c-0.71,1.23-1.42,2.47-2.13,3.7c0.72,1.21,1.43,2.41,2.15,3.61
+ C527.29,35.79,528.71,35.75,530.13,35.72z"/>
+
+ <linearGradient id="SVGID_80_" gradientUnits="userSpaceOnUse" x1="-264.3638" y1="-318.8662" x2="-260.1089" y2="-311.4966" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_80_)" d="M530.11,24.94c0.71-1.23,1.42-2.46,2.13-3.68c-0.71-1.2-1.43-2.41-2.14-3.61
+ c-1.43,0.02-2.85,0.04-4.27,0.05c-0.71,1.23-1.42,2.46-2.13,3.69c0.71,1.21,1.43,2.42,2.14,3.63
+ C527.26,24.99,528.68,24.96,530.11,24.94z"/>
+
+ <linearGradient id="SVGID_81_" gradientUnits="userSpaceOnUse" x1="-264.333" y1="-329.6528" x2="-260.0918" y2="-322.3069" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_81_)" d="M530.08,14.15c0.71-1.22,1.42-2.44,2.13-3.66c-0.71-1.21-1.43-2.42-2.14-3.63
+ c-1.42,0.01-2.85,0.02-4.27,0.02c-0.71,1.22-1.42,2.45-2.13,3.67c0.71,1.22,1.43,2.43,2.14,3.64
+ C527.23,14.18,528.66,14.17,530.08,14.15z"/>
+
+ <linearGradient id="SVGID_82_" gradientUnits="userSpaceOnUse" x1="-263.2588" y1="-338.6313" x2="-260.0757" y2="-333.118" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_82_)" d="M523.64-0.28c0.71,1.22,1.43,2.44,2.14,3.66c1.42,0,2.85-0.01,4.27-0.01
+ c0.71-1.22,1.42-2.43,2.13-3.65C529.34-0.28,526.49-0.28,523.64-0.28z"/>
+
+ <linearGradient id="SVGID_83_" gradientUnits="userSpaceOnUse" x1="-253.7207" y1="-259.4141" x2="-250.3975" y2="-253.658" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_83_)" d="M521.58,80.65c-0.72-1.19-1.43-2.38-2.15-3.57c-1.43,0.07-2.86,0.13-4.28,0.19
+ c-0.71,1.26-1.42,2.52-2.13,3.78C515.87,80.93,518.72,80.8,521.58,80.65z"/>
+
+ <linearGradient id="SVGID_84_" gradientUnits="userSpaceOnUse" x1="-253.7124" y1="-270.2632" x2="-249.3857" y2="-262.7692" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_84_)" d="M519.42,73.57c0.71-1.26,1.42-2.51,2.13-3.76c-0.72-1.19-1.43-2.39-2.15-3.58
+ c-1.43,0.06-2.85,0.11-4.28,0.17c-0.71,1.25-1.42,2.51-2.13,3.76c0.71,1.2,1.43,2.4,2.15,3.6C516.57,73.7,518,73.63,519.42,73.57z"
+ />
+
+ <linearGradient id="SVGID_85_" gradientUnits="userSpaceOnUse" x1="-253.6851" y1="-281.127" x2="-249.3691" y2="-273.6516" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_85_)" d="M519.4,62.71c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.2-1.43-2.4-2.14-3.6
+ c-1.43,0.05-2.85,0.1-4.28,0.14c-0.71,1.25-1.42,2.5-2.13,3.75c0.72,1.21,1.43,2.41,2.15,3.61
+ C516.54,62.82,517.97,62.77,519.4,62.71z"/>
+
+ <linearGradient id="SVGID_86_" gradientUnits="userSpaceOnUse" x1="-253.6572" y1="-291.9888" x2="-249.3545" y2="-284.5362" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_86_)" d="M519.38,51.85c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.2-1.43-2.4-2.14-3.61
+ c-1.43,0.04-2.85,0.08-4.28,0.11c-0.71,1.25-1.42,2.49-2.13,3.74c0.72,1.21,1.43,2.42,2.15,3.62
+ C516.52,51.94,517.95,51.9,519.38,51.85z"/>
+
+ <linearGradient id="SVGID_87_" gradientUnits="userSpaceOnUse" x1="-253.6299" y1="-302.8511" x2="-249.3389" y2="-295.4188" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_87_)" d="M519.36,40.99c0.71-1.24,1.42-2.48,2.13-3.72c-0.71-1.21-1.43-2.41-2.14-3.62
+ c-1.43,0.03-2.85,0.06-4.28,0.08c-0.71,1.24-1.42,2.48-2.13,3.73c0.71,1.21,1.43,2.43,2.15,3.64
+ C516.5,41.06,517.93,41.03,519.36,40.99z"/>
+
+ <linearGradient id="SVGID_88_" gradientUnits="userSpaceOnUse" x1="-253.5986" y1="-313.7134" x2="-249.3208" y2="-306.304" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_88_)" d="M519.33,30.13c0.71-1.24,1.42-2.47,2.13-3.71c-0.71-1.21-1.43-2.42-2.14-3.64
+ c-1.43,0.02-2.85,0.04-4.28,0.06c-0.71,1.24-1.42,2.47-2.13,3.71c0.71,1.22,1.43,2.43,2.14,3.65
+ C516.48,30.18,517.91,30.16,519.33,30.13z"/>
+
+ <linearGradient id="SVGID_89_" gradientUnits="userSpaceOnUse" x1="-253.5713" y1="-324.5762" x2="-249.3047" y2="-317.1862" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_89_)" d="M519.31,19.27c0.71-1.23,1.42-2.46,2.13-3.69c-0.71-1.22-1.43-2.43-2.14-3.65
+ c-1.42,0.01-2.85,0.02-4.27,0.03c-0.71,1.23-1.42,2.46-2.13,3.7c0.71,1.22,1.43,2.44,2.14,3.66
+ C516.46,19.31,517.88,19.29,519.31,19.27z"/>
+
+ <linearGradient id="SVGID_90_" gradientUnits="userSpaceOnUse" x1="-253.5449" y1="-335.4404" x2="-249.2891" y2="-328.0691" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_90_)" d="M519.29,8.41c0.71-1.23,1.42-2.45,2.12-3.68c-0.71-1.22-1.43-2.44-2.14-3.67c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.23-1.42,2.46-2.13,3.69c0.71,1.23,1.43,2.45,2.14,3.67C516.44,8.43,517.86,8.42,519.29,8.41z"/>
+
+ <linearGradient id="SVGID_91_" gradientUnits="userSpaceOnUse" x1="-242.5649" y1="-263.9795" x2="-238.2266" y2="-256.4652" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_91_)" d="M508.27,79.9c0.71-1.26,1.42-2.52,2.13-3.78c-0.72-1.2-1.43-2.41-2.15-3.62
+ c-1.43,0.05-2.86,0.1-4.28,0.15c-0.71,1.26-1.42,2.52-2.13,3.78c0.71,1.21,1.43,2.42,2.14,3.63
+ C505.41,80.01,506.84,79.96,508.27,79.9z"/>
+
+ <linearGradient id="SVGID_92_" gradientUnits="userSpaceOnUse" x1="-242.5405" y1="-274.9058" x2="-238.2139" y2="-267.4118" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_92_)" d="M508.25,68.97c0.71-1.26,1.42-2.51,2.13-3.77c-0.72-1.21-1.43-2.42-2.15-3.62
+ c-1.42,0.04-2.85,0.09-4.28,0.12c-0.71,1.25-1.42,2.51-2.13,3.76c0.71,1.21,1.43,2.43,2.15,3.64
+ C505.39,69.07,506.82,69.02,508.25,68.97z"/>
+
+ <linearGradient id="SVGID_93_" gradientUnits="userSpaceOnUse" x1="-242.5171" y1="-285.835" x2="-238.1987" y2="-278.3553" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_93_)" d="M508.23,58.05c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.21-1.43-2.42-2.15-3.64
+ c-1.42,0.04-2.85,0.07-4.28,0.1c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.22,1.43,2.44,2.15,3.65
+ C505.38,58.13,506.8,58.09,508.23,58.05z"/>
+
+ <linearGradient id="SVGID_94_" gradientUnits="userSpaceOnUse" x1="-242.4937" y1="-296.7627" x2="-238.186" y2="-289.3017" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_94_)" d="M508.21,47.12c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.21-1.43-2.43-2.14-3.65
+ c-1.43,0.03-2.85,0.06-4.28,0.08c-0.71,1.25-1.42,2.5-2.13,3.74c0.71,1.22,1.43,2.44,2.14,3.66
+ C505.36,47.19,506.78,47.15,508.21,47.12z"/>
+
+ <linearGradient id="SVGID_95_" gradientUnits="userSpaceOnUse" x1="-242.4692" y1="-307.6914" x2="-238.1714" y2="-300.2473" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_95_)" d="M508.19,36.2c0.71-1.25,1.42-2.49,2.13-3.73c-0.71-1.22-1.43-2.44-2.14-3.66
+ c-1.42,0.02-2.85,0.04-4.27,0.06c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.22,1.43,2.45,2.14,3.67
+ C505.34,36.25,506.77,36.22,508.19,36.2z"/>
+
+ <linearGradient id="SVGID_96_" gradientUnits="userSpaceOnUse" x1="-242.4463" y1="-318.6201" x2="-238.1582" y2="-311.1929" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_96_)" d="M508.17,25.27c0.71-1.24,1.42-2.48,2.13-3.72c-0.71-1.22-1.43-2.45-2.14-3.67
+ c-1.43,0.01-2.85,0.03-4.28,0.04c-0.71,1.24-1.42,2.48-2.13,3.72c0.71,1.23,1.43,2.46,2.14,3.68
+ C505.32,25.31,506.75,25.29,508.17,25.27z"/>
+
+ <linearGradient id="SVGID_97_" gradientUnits="userSpaceOnUse" x1="-242.4224" y1="-329.5483" x2="-238.1445" y2="-322.1389" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_97_)" d="M508.15,14.34c0.71-1.24,1.42-2.47,2.13-3.71c-0.71-1.23-1.43-2.46-2.14-3.69
+ c-1.42,0-2.85,0.01-4.27,0.01c-0.71,1.24-1.42,2.47-2.13,3.71c0.71,1.23,1.43,2.46,2.14,3.69
+ C505.3,14.37,506.73,14.35,508.15,14.34z"/>
+
+ <linearGradient id="SVGID_98_" gradientUnits="userSpaceOnUse" x1="-241.3369" y1="-338.6299" x2="-238.1338" y2="-333.0819" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_98_)" d="M501.72-0.28c0.71,1.24,1.43,2.47,2.14,3.7c1.43,0,2.85,0,4.27-0.01c0.71-1.23,1.42-2.47,2.13-3.7
+ C507.41-0.28,504.57-0.28,501.72-0.28z"/>
+
+ <linearGradient id="SVGID_99_" gradientUnits="userSpaceOnUse" x1="-231.75" y1="-258.5693" x2="-228.4551" y2="-252.8624" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_99_)" d="M499.6,81.57c-0.71-1.21-1.43-2.43-2.14-3.64c-1.43,0.04-2.86,0.08-4.28,0.12
+ c-0.71,1.26-1.43,2.52-2.14,3.78C493.89,81.75,496.75,81.67,499.6,81.57z"/>
+
+ <linearGradient id="SVGID_100_" gradientUnits="userSpaceOnUse" x1="-231.75" y1="-269.5381" x2="-227.415" y2="-262.0297" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_100_)" d="M497.46,74.38c0.71-1.26,1.42-2.52,2.13-3.77c-0.71-1.22-1.43-2.43-2.14-3.65
+ c-1.43,0.04-2.86,0.07-4.28,0.11c-0.71,1.26-1.42,2.51-2.13,3.77c0.71,1.22,1.43,2.45,2.14,3.67
+ C494.6,74.46,496.03,74.42,497.46,74.38z"/>
+
+ <linearGradient id="SVGID_101_" gradientUnits="userSpaceOnUse" x1="-231.7305" y1="-280.5166" x2="-227.4038" y2="-273.0226" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_101_)" d="M497.44,63.4c0.71-1.26,1.42-2.51,2.13-3.76c-0.71-1.22-1.43-2.44-2.14-3.66
+ c-1.43,0.03-2.85,0.06-4.28,0.09c-0.71,1.25-1.42,2.51-2.13,3.76c0.71,1.23,1.43,2.45,2.14,3.68
+ C494.58,63.47,496.01,63.44,497.44,63.4z"/>
+
+ <linearGradient id="SVGID_102_" gradientUnits="userSpaceOnUse" x1="-231.7104" y1="-291.4966" x2="-227.3921" y2="-284.017" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_102_)" d="M497.42,52.42c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.22-1.43-2.45-2.14-3.67
+ c-1.42,0.03-2.85,0.05-4.28,0.07c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.23,1.43,2.46,2.14,3.68
+ C494.57,52.48,496,52.45,497.42,52.42z"/>
+
+ <linearGradient id="SVGID_103_" gradientUnits="userSpaceOnUse" x1="-231.6929" y1="-302.4766" x2="-227.3818" y2="-295.0096" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_103_)" d="M497.4,41.44c0.71-1.25,1.42-2.5,2.13-3.75c-0.72-1.22-1.43-2.45-2.14-3.68
+ c-1.42,0.02-2.85,0.04-4.28,0.05c-0.71,1.25-1.43,2.5-2.13,3.75c0.71,1.23,1.43,2.46,2.14,3.69
+ C494.55,41.49,495.98,41.47,497.4,41.44z"/>
+
+ <linearGradient id="SVGID_104_" gradientUnits="userSpaceOnUse" x1="-231.6724" y1="-313.4556" x2="-227.3706" y2="-306.0047" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_104_)" d="M497.39,30.46c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.23-1.43-2.46-2.14-3.69
+ c-1.43,0.01-2.85,0.02-4.28,0.03c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.23,1.43,2.46,2.14,3.7
+ C494.54,30.5,495.96,30.48,497.39,30.46z"/>
+
+ <linearGradient id="SVGID_105_" gradientUnits="userSpaceOnUse" x1="-231.6548" y1="-324.4355" x2="-227.3584" y2="-316.994" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_105_)" d="M497.38,19.49c0.71-1.24,1.42-2.48,2.13-3.73c-0.71-1.23-1.43-2.46-2.14-3.7
+ c-1.42,0.01-2.85,0.01-4.28,0.02c-0.71,1.24-1.42,2.49-2.13,3.73c0.71,1.24,1.43,2.47,2.14,3.71
+ C494.52,19.51,495.95,19.5,497.38,19.49z"/>
+
+ <linearGradient id="SVGID_106_" gradientUnits="userSpaceOnUse" x1="-231.6353" y1="-335.4165" x2="-227.3472" y2="-327.9893" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_106_)" d="M497.36,8.51c0.71-1.24,1.42-2.48,2.13-3.71c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.42,2.48-2.13,3.73c0.71,1.24,1.43,2.48,2.14,3.71C494.51,8.52,495.93,8.51,497.36,8.51z"/>
+
+ <linearGradient id="SVGID_107_" gradientUnits="userSpaceOnUse" x1="-220.5879" y1="-263.3618" x2="-216.251" y2="-255.8501" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_107_)" d="M486.29,80.58c0.71-1.26,1.43-2.52,2.14-3.78c-0.71-1.23-1.43-2.45-2.14-3.68
+ c-1.43,0.03-2.86,0.06-4.28,0.08c-0.71,1.26-1.42,2.51-2.14,3.77c0.72,1.23,1.43,2.46,2.14,3.69
+ C483.43,80.64,484.86,80.61,486.29,80.58z"/>
+
+ <linearGradient id="SVGID_108_" gradientUnits="userSpaceOnUse" x1="-220.5737" y1="-274.3813" x2="-216.2437" y2="-266.8814" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_108_)" d="M486.28,69.56c0.71-1.25,1.42-2.51,2.14-3.77c-0.72-1.23-1.43-2.46-2.15-3.69
+ c-1.43,0.03-2.85,0.05-4.28,0.07c-0.71,1.26-1.42,2.51-2.14,3.77c0.72,1.23,1.43,2.47,2.14,3.7
+ C483.42,69.62,484.85,69.59,486.28,69.56z"/>
+
+ <linearGradient id="SVGID_109_" gradientUnits="userSpaceOnUse" x1="-220.5591" y1="-285.3999" x2="-216.2354" y2="-277.911" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_109_)" d="M486.27,58.54c0.71-1.25,1.42-2.51,2.13-3.76c-0.71-1.23-1.43-2.46-2.14-3.69
+ c-1.43,0.02-2.85,0.04-4.28,0.05c-0.71,1.25-1.42,2.51-2.13,3.76c0.71,1.24,1.43,2.47,2.14,3.71
+ C483.41,58.59,484.84,58.57,486.27,58.54z"/>
+
+ <linearGradient id="SVGID_110_" gradientUnits="userSpaceOnUse" x1="-220.5444" y1="-296.4189" x2="-216.2271" y2="-288.941" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_110_)" d="M486.25,47.52c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.23-1.43-2.46-2.14-3.7
+ c-1.43,0.01-2.85,0.03-4.28,0.04c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.24,1.43,2.47,2.14,3.71
+ C483.4,47.56,484.83,47.54,486.25,47.52z"/>
+
+ <linearGradient id="SVGID_111_" gradientUnits="userSpaceOnUse" x1="-220.5317" y1="-307.4409" x2="-216.2197" y2="-299.9723" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_111_)" d="M486.24,36.5c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.43,0.01-2.85,0.02-4.28,0.03c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.24,1.43,2.48,2.14,3.71
+ C483.39,36.53,484.82,36.52,486.24,36.5z"/>
+
+ <linearGradient id="SVGID_112_" gradientUnits="userSpaceOnUse" x1="-220.5171" y1="-318.4595" x2="-216.2109" y2="-311.001" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_112_)" d="M486.23,25.49c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.42,0.01-2.85,0.01-4.27,0.02c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.24,1.43,2.48,2.14,3.72
+ C483.38,25.51,484.8,25.5,486.23,25.49z"/>
+
+ <linearGradient id="SVGID_113_" gradientUnits="userSpaceOnUse" x1="-220.5044" y1="-329.481" x2="-216.2031" y2="-322.0309" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_113_)" d="M486.22,14.47c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.24-1.43-2.48-2.14-3.72
+ c-1.42,0-2.85,0-4.28,0.01c-0.71,1.24-1.42,2.49-2.13,3.73c0.71,1.24,1.42,2.49,2.14,3.73C483.37,14.48,484.79,14.47,486.22,14.47z
+ "/>
+
+ <linearGradient id="SVGID_114_" gradientUnits="userSpaceOnUse" x1="-219.4209" y1="-338.6265" x2="-216.2041" y2="-333.0548" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_114_)" d="M479.79-0.28c0.71,1.24,1.43,2.49,2.14,3.73c1.42,0,2.85,0,4.27,0c0.71-1.24,1.42-2.49,2.13-3.73
+ C485.49-0.28,482.64-0.28,479.79-0.28z"/>
+
+ <linearGradient id="SVGID_115_" gradientUnits="userSpaceOnUse" x1="-209.7646" y1="-258.085" x2="-206.5078" y2="-252.444" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_115_)" d="M477.62,82.12c-0.72-1.23-1.43-2.47-2.15-3.7c-1.43,0.02-2.86,0.04-4.28,0.05
+ c-0.71,1.25-1.43,2.51-2.14,3.76C471.91,82.2,474.76,82.16,477.62,82.12z"/>
+
+ <linearGradient id="SVGID_116_" gradientUnits="userSpaceOnUse" x1="-209.7695" y1="-269.1221" x2="-205.4429" y2="-261.6281" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_116_)" d="M475.47,74.84c0.71-1.25,1.42-2.51,2.14-3.77c-0.71-1.23-1.43-2.47-2.14-3.71
+ c-1.43,0.02-2.86,0.03-4.28,0.04c-0.71,1.25-1.43,2.51-2.14,3.76c0.71,1.24,1.43,2.48,2.14,3.72
+ C472.62,74.88,474.04,74.86,475.47,74.84z"/>
+
+ <linearGradient id="SVGID_117_" gradientUnits="userSpaceOnUse" x1="-209.7617" y1="-280.1714" x2="-205.4375" y2="-272.6816" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_117_)" d="M475.46,63.8c0.71-1.25,1.43-2.51,2.14-3.76c-0.71-1.24-1.43-2.47-2.14-3.71
+ c-1.43,0.02-2.85,0.03-4.28,0.04c-0.71,1.25-1.42,2.5-2.14,3.75c0.72,1.24,1.43,2.48,2.14,3.72
+ C472.61,63.83,474.04,63.81,475.46,63.8z"/>
+
+ <linearGradient id="SVGID_118_" gradientUnits="userSpaceOnUse" x1="-209.7529" y1="-291.2163" x2="-205.4326" y2="-283.7333" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_118_)" d="M475.46,52.75c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.24-1.43-2.48-2.14-3.72
+ c-1.43,0.01-2.85,0.02-4.28,0.03c-0.71,1.25-1.42,2.5-2.14,3.75c0.71,1.24,1.43,2.48,2.14,3.73
+ C472.61,52.77,474.03,52.76,475.46,52.75z"/>
+
+ <linearGradient id="SVGID_119_" gradientUnits="userSpaceOnUse" x1="-209.7437" y1="-302.2632" x2="-205.4272" y2="-294.787" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_119_)" d="M475.45,41.7c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.24-1.43-2.48-2.14-3.72
+ c-1.43,0.01-2.85,0.02-4.28,0.02c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.24,1.43,2.49,2.14,3.73
+ C472.6,41.72,474.02,41.71,475.45,41.7z"/>
+
+ <linearGradient id="SVGID_120_" gradientUnits="userSpaceOnUse" x1="-209.7354" y1="-313.3101" x2="-205.4229" y2="-305.8406" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_120_)" d="M475.44,30.66c0.71-1.25,1.42-2.5,2.13-3.75c-0.71-1.24-1.43-2.48-2.14-3.73
+ c-1.43,0.01-2.85,0.01-4.28,0.02c-0.71,1.25-1.42,2.5-2.13,3.75c0.71,1.24,1.43,2.49,2.14,3.73
+ C472.59,30.67,474.02,30.66,475.44,30.66z"/>
+
+ <linearGradient id="SVGID_121_" gradientUnits="userSpaceOnUse" x1="-209.7261" y1="-324.355" x2="-205.417" y2="-316.8914" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_121_)" d="M475.44,19.61c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.24-1.43-2.49-2.14-3.73
+ c-1.43,0-2.85,0.01-4.27,0.01c-0.71,1.25-1.42,2.5-2.14,3.74c0.71,1.25,1.43,2.49,2.14,3.73
+ C472.59,19.62,474.01,19.62,475.44,19.61z"/>
+
+ <linearGradient id="SVGID_122_" gradientUnits="userSpaceOnUse" x1="-209.7183" y1="-335.4033" x2="-205.4121" y2="-327.9449" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_122_)" d="M475.43,8.56c0.71-1.25,1.42-2.49,2.13-3.74c-0.71-1.24-1.43-2.49-2.14-3.73
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.43,2.49,2.14,3.74C472.58,8.57,474,8.57,475.43,8.56z"/>
+
+ <linearGradient id="SVGID_123_" gradientUnits="userSpaceOnUse" x1="90.915" y1="-257.9634" x2="94.127" y2="-252.4002" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_123_)" d="M176.95,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.28-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C171.23,82.27,174.09,82.28,176.95,82.29z"/>
+
+ <linearGradient id="SVGID_124_" gradientUnits="userSpaceOnUse" x1="90.9062" y1="-269.0225" x2="95.2104" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_124_)" d="M174.8,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.86-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C171.95,74.95,173.38,74.96,174.8,74.96
+ z"/>
+
+ <linearGradient id="SVGID_125_" gradientUnits="userSpaceOnUse" x1="90.9033" y1="-280.0854" x2="95.209" y2="-272.6278" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_125_)" d="M174.8,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C171.95,63.89,173.38,63.89,174.8,63.9z"/>
+
+ <linearGradient id="SVGID_126_" gradientUnits="userSpaceOnUse" x1="90.9009" y1="-291.1475" x2="95.2061" y2="-283.6907" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_126_)" d="M174.81,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C171.95,52.83,173.38,52.83,174.81,52.83z"/>
+
+ <linearGradient id="SVGID_127_" gradientUnits="userSpaceOnUse" x1="90.8984" y1="-302.2114" x2="95.2056" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_127_)" d="M174.81,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C171.96,41.77,173.38,41.77,174.81,41.77z"
+ />
+
+ <linearGradient id="SVGID_128_" gradientUnits="userSpaceOnUse" x1="90.897" y1="-313.2734" x2="95.2036" y2="-305.8141" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_128_)" d="M174.81,30.71c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C171.96,30.7,173.38,30.71,174.81,30.71z"/>
+
+ <linearGradient id="SVGID_129_" gradientUnits="userSpaceOnUse" x1="90.8945" y1="-324.3364" x2="95.2026" y2="-316.8746" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_129_)" d="M174.81,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C171.96,19.64,173.38,19.64,174.81,19.64z"/>
+
+ <linearGradient id="SVGID_130_" gradientUnits="userSpaceOnUse" x1="90.8911" y1="-335.4014" x2="95.1997" y2="-327.9387" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_130_)" d="M174.81,8.58c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C171.96,8.58,173.39,8.58,174.81,8.58z"/>
+
+ <linearGradient id="SVGID_131_" gradientUnits="userSpaceOnUse" x1="102.0923" y1="-263.147" x2="106.3779" y2="-255.724" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_131_)" d="M163.63,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C160.77,80.8,162.2,80.82,163.63,80.83z"/>
+
+ <linearGradient id="SVGID_132_" gradientUnits="userSpaceOnUse" x1="102.0825" y1="-274.1987" x2="106.3711" y2="-266.7707" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_132_)" d="M163.63,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C160.78,69.75,162.21,69.77,163.63,69.78z"/>
+
+ <linearGradient id="SVGID_133_" gradientUnits="userSpaceOnUse" x1="102.0747" y1="-285.251" x2="106.3657" y2="-277.8187" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_133_)" d="M163.64,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C160.79,58.7,162.21,58.72,163.64,58.73z"/>
+
+ <linearGradient id="SVGID_134_" gradientUnits="userSpaceOnUse" x1="102.0659" y1="-296.3032" x2="106.3608" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_134_)" d="M163.64,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C160.79,47.66,162.22,47.67,163.64,47.67z"/>
+
+ <linearGradient id="SVGID_135_" gradientUnits="userSpaceOnUse" x1="102.0581" y1="-307.3564" x2="106.356" y2="-299.9124" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_135_)" d="M163.65,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C160.8,36.61,162.22,36.61,163.65,36.62z"/>
+
+ <linearGradient id="SVGID_136_" gradientUnits="userSpaceOnUse" x1="102.0498" y1="-318.4067" x2="106.3501" y2="-310.9584" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_136_)" d="M163.66,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C160.81,25.56,162.23,25.56,163.66,25.57z"/>
+
+ <linearGradient id="SVGID_137_" gradientUnits="userSpaceOnUse" x1="102.041" y1="-329.4595" x2="106.3452" y2="-322.0044" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_137_)" d="M163.66,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C160.81,14.51,162.24,14.51,163.66,14.51z"/>
+
+ <linearGradient id="SVGID_138_" gradientUnits="userSpaceOnUse" x1="103.1108" y1="-338.6255" x2="106.3306" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_138_)" d="M157.26-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C162.96-0.28,160.11-0.28,157.26-0.28z"/>
+
+ <linearGradient id="SVGID_139_" gradientUnits="userSpaceOnUse" x1="69.4688" y1="-257.9639" x2="72.6816" y2="-252.399" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_139_)" d="M198.39,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C192.68,82.27,195.54,82.28,198.39,82.29z"/>
+
+ <linearGradient id="SVGID_140_" gradientUnits="userSpaceOnUse" x1="69.4604" y1="-269.0225" x2="73.7646" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_140_)" d="M196.25,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C193.39,74.95,194.82,74.96,196.25,74.96z"/>
+
+ <linearGradient id="SVGID_141_" gradientUnits="userSpaceOnUse" x1="69.4565" y1="-280.0859" x2="73.7627" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_141_)" d="M196.25,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C193.4,63.89,194.82,63.89,196.25,63.9z"/>
+
+ <linearGradient id="SVGID_142_" gradientUnits="userSpaceOnUse" x1="69.4551" y1="-291.1479" x2="73.7607" y2="-283.6903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_142_)" d="M196.25,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C193.4,52.83,194.83,52.83,196.25,52.83
+ z"/>
+
+ <linearGradient id="SVGID_143_" gradientUnits="userSpaceOnUse" x1="69.4531" y1="-302.2114" x2="73.7603" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_143_)" d="M196.25,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C193.4,41.77,194.83,41.77,196.25,41.77z"
+ />
+
+ <linearGradient id="SVGID_144_" gradientUnits="userSpaceOnUse" x1="69.4507" y1="-313.2739" x2="73.7578" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_144_)" d="M196.26,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C193.4,30.7,194.83,30.71,196.26,30.71z"/>
+
+ <linearGradient id="SVGID_145_" gradientUnits="userSpaceOnUse" x1="69.4487" y1="-324.3374" x2="73.7573" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_145_)" d="M196.26,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C193.41,19.64,194.83,19.64,196.26,19.64z"/>
+
+ <linearGradient id="SVGID_146_" gradientUnits="userSpaceOnUse" x1="69.4448" y1="-335.4019" x2="73.7539" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_146_)" d="M196.26,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C193.41,8.58,194.83,8.58,196.26,8.58z"/>
+
+ <linearGradient id="SVGID_147_" gradientUnits="userSpaceOnUse" x1="80.647" y1="-263.147" x2="84.9326" y2="-255.724" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_147_)" d="M185.07,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C182.22,80.8,183.64,80.82,185.07,80.83z"/>
+
+ <linearGradient id="SVGID_148_" gradientUnits="userSpaceOnUse" x1="80.6372" y1="-274.1987" x2="84.9258" y2="-266.7707" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_148_)" d="M185.08,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C182.22,69.75,183.65,69.77,185.08,69.78z"/>
+
+ <linearGradient id="SVGID_149_" gradientUnits="userSpaceOnUse" x1="80.6304" y1="-285.251" x2="84.9219" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_149_)" d="M185.08,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C182.23,58.7,183.66,58.72,185.08,58.73z"/>
+
+ <linearGradient id="SVGID_150_" gradientUnits="userSpaceOnUse" x1="80.6216" y1="-296.3037" x2="84.917" y2="-288.8638" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_150_)" d="M185.09,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C182.24,47.66,183.67,47.67,185.09,47.67z"/>
+
+ <linearGradient id="SVGID_151_" gradientUnits="userSpaceOnUse" x1="80.6123" y1="-307.356" x2="84.9102" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_151_)" d="M185.1,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C182.24,36.61,183.67,36.61,185.1,36.62z"/>
+
+ <linearGradient id="SVGID_152_" gradientUnits="userSpaceOnUse" x1="80.604" y1="-318.4067" x2="84.9043" y2="-310.9584" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_152_)" d="M185.1,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74C182.25,25.56,183.68,25.56,185.1,25.57
+ z"/>
+
+ <linearGradient id="SVGID_153_" gradientUnits="userSpaceOnUse" x1="80.5957" y1="-329.4595" x2="84.8999" y2="-322.0044" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_153_)" d="M185.11,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C182.26,14.51,183.68,14.51,185.11,14.51z"/>
+
+ <linearGradient id="SVGID_154_" gradientUnits="userSpaceOnUse" x1="81.665" y1="-338.6255" x2="84.8848" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_154_)" d="M178.71-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C184.4-0.28,181.56-0.28,178.71-0.28z"/>
+
+ <linearGradient id="SVGID_155_" gradientUnits="userSpaceOnUse" x1="48.0234" y1="-257.9639" x2="51.2363" y2="-252.399" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_155_)" d="M219.84,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C214.12,82.27,216.98,82.28,219.84,82.29z"/>
+
+ <linearGradient id="SVGID_156_" gradientUnits="userSpaceOnUse" x1="48.0156" y1="-269.0225" x2="52.3203" y2="-261.5665" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_156_)" d="M217.7,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C214.84,74.95,216.27,74.96,217.7,74.96
+ z"/>
+
+ <linearGradient id="SVGID_157_" gradientUnits="userSpaceOnUse" x1="48.0117" y1="-280.0859" x2="52.3179" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_157_)" d="M217.7,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C214.84,63.89,216.27,63.89,217.7,63.9z"/>
+
+ <linearGradient id="SVGID_158_" gradientUnits="userSpaceOnUse" x1="48.0107" y1="-291.1484" x2="52.3169" y2="-283.69" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_158_)" d="M217.7,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C214.84,52.83,216.27,52.83,217.7,52.83
+ z"/>
+
+ <linearGradient id="SVGID_159_" gradientUnits="userSpaceOnUse" x1="48.0078" y1="-302.2109" x2="52.3149" y2="-294.7508" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_159_)" d="M217.7,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C214.85,41.77,216.27,41.77,217.7,41.77z"
+ />
+
+ <linearGradient id="SVGID_160_" gradientUnits="userSpaceOnUse" x1="48.0054" y1="-313.2739" x2="52.3125" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_160_)" d="M217.7,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C214.85,30.7,216.28,30.71,217.7,30.71z"/>
+
+ <linearGradient id="SVGID_161_" gradientUnits="userSpaceOnUse" x1="48.0029" y1="-324.3374" x2="52.3115" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_161_)" d="M217.7,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C214.85,19.64,216.28,19.64,217.7,19.64z"/>
+
+ <linearGradient id="SVGID_162_" gradientUnits="userSpaceOnUse" x1="47.9995" y1="-335.4019" x2="52.3086" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_162_)" d="M217.7,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C214.85,8.58,216.28,8.58,217.7,8.58z"/>
+
+ <linearGradient id="SVGID_163_" gradientUnits="userSpaceOnUse" x1="59.2012" y1="-263.1475" x2="63.4878" y2="-255.7228" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_163_)" d="M206.52,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C203.66,80.8,205.09,80.82,206.52,80.83z"/>
+
+ <linearGradient id="SVGID_164_" gradientUnits="userSpaceOnUse" x1="59.1914" y1="-274.1997" x2="63.481" y2="-266.77" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_164_)" d="M206.53,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.29-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C203.67,69.75,205.1,69.77,206.53,69.78z"/>
+
+ <linearGradient id="SVGID_165_" gradientUnits="userSpaceOnUse" x1="59.1846" y1="-285.251" x2="63.4761" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_165_)" d="M206.53,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C203.68,58.7,205.1,58.72,206.53,58.73z"/>
+
+ <linearGradient id="SVGID_166_" gradientUnits="userSpaceOnUse" x1="59.1753" y1="-296.3032" x2="63.4707" y2="-288.8633" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_166_)" d="M206.54,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C203.68,47.66,205.11,47.67,206.54,47.67z"/>
+
+ <linearGradient id="SVGID_167_" gradientUnits="userSpaceOnUse" x1="59.1665" y1="-307.3555" x2="63.4644" y2="-299.9114" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_167_)" d="M206.54,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C203.69,36.61,205.12,36.61,206.54,36.62z"/>
+
+ <linearGradient id="SVGID_168_" gradientUnits="userSpaceOnUse" x1="59.1582" y1="-318.4077" x2="63.459" y2="-310.9586" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_168_)" d="M206.55,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74C203.7,25.56,205.12,25.56,206.55,25.57
+ z"/>
+
+ <linearGradient id="SVGID_169_" gradientUnits="userSpaceOnUse" x1="59.1489" y1="-329.46" x2="63.4536" y2="-322.004" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_169_)" d="M206.55,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C203.7,14.51,205.13,14.51,206.55,14.51z"/>
+
+ <linearGradient id="SVGID_170_" gradientUnits="userSpaceOnUse" x1="60.2197" y1="-338.6255" x2="63.4395" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_170_)" d="M200.15-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C205.85-0.28,203-0.28,200.15-0.28z"/>
+
+ <linearGradient id="SVGID_171_" gradientUnits="userSpaceOnUse" x1="26.5781" y1="-257.9639" x2="29.791" y2="-252.399" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_171_)" d="M241.28,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C235.57,82.27,238.43,82.28,241.28,82.29z"/>
+
+ <linearGradient id="SVGID_172_" gradientUnits="userSpaceOnUse" x1="26.5708" y1="-269.0229" x2="30.8755" y2="-261.567" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_172_)" d="M239.14,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C236.29,74.95,237.71,74.96,239.14,74.96z"/>
+
+ <linearGradient id="SVGID_173_" gradientUnits="userSpaceOnUse" x1="26.5664" y1="-280.0859" x2="30.8726" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_173_)" d="M239.14,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C236.29,63.89,237.71,63.89,239.14,63.9z"
+ />
+
+ <linearGradient id="SVGID_174_" gradientUnits="userSpaceOnUse" x1="26.5654" y1="-291.1484" x2="30.8716" y2="-283.69" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_174_)" d="M239.14,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C236.29,52.83,237.72,52.83,239.14,52.83z"/>
+
+ <linearGradient id="SVGID_175_" gradientUnits="userSpaceOnUse" x1="26.5625" y1="-302.2109" x2="30.8696" y2="-294.7508" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_175_)" d="M239.14,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C236.29,41.77,237.72,41.77,239.14,41.77z"
+ />
+
+ <linearGradient id="SVGID_176_" gradientUnits="userSpaceOnUse" x1="26.5601" y1="-313.2739" x2="30.8672" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_176_)" d="M239.15,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C236.29,30.7,237.72,30.71,239.15,30.71z"/>
+
+ <linearGradient id="SVGID_177_" gradientUnits="userSpaceOnUse" x1="26.5576" y1="-324.3374" x2="30.8662" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_177_)" d="M239.15,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C236.3,19.64,237.72,19.64,239.15,19.64z"/>
+
+ <linearGradient id="SVGID_178_" gradientUnits="userSpaceOnUse" x1="26.5547" y1="-335.4023" x2="30.8638" y2="-327.9388" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_178_)" d="M239.15,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C236.3,8.58,237.72,8.58,239.15,8.58z"/>
+
+ <linearGradient id="SVGID_179_" gradientUnits="userSpaceOnUse" x1="37.7559" y1="-263.1475" x2="42.0425" y2="-255.7228" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_179_)" d="M227.96,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C225.11,80.8,226.54,80.82,227.96,80.83z"/>
+
+ <linearGradient id="SVGID_180_" gradientUnits="userSpaceOnUse" x1="37.7461" y1="-274.1997" x2="42.0356" y2="-266.77" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_180_)" d="M227.97,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.29-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C225.11,69.75,226.54,69.77,227.97,69.78z"/>
+
+ <linearGradient id="SVGID_181_" gradientUnits="userSpaceOnUse" x1="37.7393" y1="-285.251" x2="42.0308" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_181_)" d="M227.98,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C225.12,58.7,226.55,58.72,227.98,58.73z"/>
+
+ <linearGradient id="SVGID_182_" gradientUnits="userSpaceOnUse" x1="37.73" y1="-296.3032" x2="42.0254" y2="-288.8633" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_182_)" d="M227.98,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C225.13,47.66,226.56,47.67,227.98,47.67z"/>
+
+ <linearGradient id="SVGID_183_" gradientUnits="userSpaceOnUse" x1="37.7207" y1="-307.3555" x2="42.0186" y2="-299.9114" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_183_)" d="M227.99,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C225.13,36.61,226.56,36.61,227.99,36.62z"/>
+
+ <linearGradient id="SVGID_184_" gradientUnits="userSpaceOnUse" x1="37.7129" y1="-318.4077" x2="42.0137" y2="-310.9586" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_184_)" d="M227.99,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C225.14,25.56,226.57,25.56,227.99,25.57z"/>
+
+ <linearGradient id="SVGID_185_" gradientUnits="userSpaceOnUse" x1="37.7046" y1="-329.459" x2="42.0088" y2="-322.0039" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_185_)" d="M228,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C225.15,14.51,226.57,14.51,228,14.51z"/>
+
+ <linearGradient id="SVGID_186_" gradientUnits="userSpaceOnUse" x1="38.7744" y1="-338.6255" x2="41.9941" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_186_)" d="M221.6-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C227.29-0.28,224.45-0.28,221.6-0.28z"/>
+
+ <linearGradient id="SVGID_187_" gradientUnits="userSpaceOnUse" x1="5.1328" y1="-257.9639" x2="8.3452" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_187_)" d="M262.73,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C257.02,82.27,259.87,82.28,262.73,82.29z"/>
+
+ <linearGradient id="SVGID_188_" gradientUnits="userSpaceOnUse" x1="5.1255" y1="-269.0229" x2="9.4302" y2="-261.567" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_188_)" d="M260.59,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C257.73,74.95,259.16,74.96,260.59,74.96z"/>
+
+ <linearGradient id="SVGID_189_" gradientUnits="userSpaceOnUse" x1="5.1216" y1="-280.0859" x2="9.4277" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_189_)" d="M260.59,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C257.73,63.89,259.16,63.89,260.59,63.9z"
+ />
+
+ <linearGradient id="SVGID_190_" gradientUnits="userSpaceOnUse" x1="5.1201" y1="-291.1484" x2="9.4263" y2="-283.69" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_190_)" d="M260.59,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C257.73,52.83,259.16,52.83,260.59,52.83z"/>
+
+ <linearGradient id="SVGID_191_" gradientUnits="userSpaceOnUse" x1="5.1172" y1="-302.2114" x2="9.4243" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_191_)" d="M260.59,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C257.74,41.77,259.16,41.77,260.59,41.77z"
+ />
+
+ <linearGradient id="SVGID_192_" gradientUnits="userSpaceOnUse" x1="5.1143" y1="-313.2739" x2="9.4214" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_192_)" d="M260.59,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C257.74,30.7,259.17,30.71,260.59,30.71z"/>
+
+ <linearGradient id="SVGID_193_" gradientUnits="userSpaceOnUse" x1="5.1123" y1="-324.3374" x2="9.4209" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_193_)" d="M260.59,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C257.74,19.64,259.17,19.64,260.59,19.64z"/>
+
+ <linearGradient id="SVGID_194_" gradientUnits="userSpaceOnUse" x1="5.1094" y1="-335.4019" x2="9.4185" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_194_)" d="M260.59,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.5-2.13,3.74c0.71,1.25,1.42,2.49,2.13,3.74C257.74,8.58,259.17,8.58,260.59,8.58z"/>
+
+ <linearGradient id="SVGID_195_" gradientUnits="userSpaceOnUse" x1="16.311" y1="-263.1479" x2="20.5977" y2="-255.7233" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_195_)" d="M249.41,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C246.55,80.8,247.98,80.82,249.41,80.83z"/>
+
+ <linearGradient id="SVGID_196_" gradientUnits="userSpaceOnUse" x1="16.3008" y1="-274.1997" x2="20.5903" y2="-266.77" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_196_)" d="M249.42,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.29-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C246.56,69.75,247.99,69.77,249.42,69.78z"/>
+
+ <linearGradient id="SVGID_197_" gradientUnits="userSpaceOnUse" x1="16.2935" y1="-285.251" x2="20.585" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_197_)" d="M249.42,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C246.57,58.7,247.99,58.72,249.42,58.73z"/>
+
+ <linearGradient id="SVGID_198_" gradientUnits="userSpaceOnUse" x1="16.2842" y1="-296.3032" x2="20.5796" y2="-288.8633" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_198_)" d="M249.43,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C246.57,47.66,248,47.67,249.43,47.67z"/>
+
+ <linearGradient id="SVGID_199_" gradientUnits="userSpaceOnUse" x1="16.2764" y1="-307.356" x2="20.5742" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_199_)" d="M249.43,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C246.58,36.61,248.01,36.61,249.43,36.62z"/>
+
+ <linearGradient id="SVGID_200_" gradientUnits="userSpaceOnUse" x1="16.2686" y1="-318.4067" x2="20.5688" y2="-310.9584" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_200_)" d="M249.44,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C246.59,25.56,248.01,25.56,249.44,25.57z"/>
+
+ <linearGradient id="SVGID_201_" gradientUnits="userSpaceOnUse" x1="16.2598" y1="-329.4595" x2="20.564" y2="-322.0044" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_201_)" d="M249.44,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C246.6,14.51,248.02,14.51,249.44,14.51z"/>
+
+ <linearGradient id="SVGID_202_" gradientUnits="userSpaceOnUse" x1="17.3291" y1="-338.6255" x2="20.5488" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_202_)" d="M243.04-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C248.74-0.28,245.89-0.28,243.04-0.28z"/>
+
+ <linearGradient id="SVGID_203_" gradientUnits="userSpaceOnUse" x1="-16.3125" y1="-257.9639" x2="-13.1001" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_203_)" d="M284.17,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C278.46,82.27,281.32,82.28,284.17,82.29z"/>
+
+ <linearGradient id="SVGID_204_" gradientUnits="userSpaceOnUse" x1="-16.3208" y1="-269.0225" x2="-12.0166" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_204_)" d="M282.03,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C279.18,74.95,280.61,74.96,282.03,74.96z"/>
+
+ <linearGradient id="SVGID_205_" gradientUnits="userSpaceOnUse" x1="-16.3237" y1="-280.0859" x2="-12.0176" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_205_)" d="M282.03,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C279.18,63.89,280.61,63.89,282.03,63.9z"
+ />
+
+ <linearGradient id="SVGID_206_" gradientUnits="userSpaceOnUse" x1="-16.3257" y1="-291.1484" x2="-12.02" y2="-283.6908" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_206_)" d="M282.03,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C279.18,52.83,280.61,52.83,282.03,52.83z"/>
+
+ <linearGradient id="SVGID_207_" gradientUnits="userSpaceOnUse" x1="-16.3281" y1="-302.2114" x2="-12.021" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_207_)" d="M282.04,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C279.18,41.77,280.61,41.77,282.04,41.77z"
+ />
+
+ <linearGradient id="SVGID_208_" gradientUnits="userSpaceOnUse" x1="-16.3296" y1="-313.2734" x2="-12.0229" y2="-305.8141" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_208_)" d="M282.04,30.71c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C279.19,30.7,280.61,30.71,282.04,30.71z"/>
+
+ <linearGradient id="SVGID_209_" gradientUnits="userSpaceOnUse" x1="-16.3325" y1="-324.3364" x2="-12.0244" y2="-316.8746" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_209_)" d="M282.04,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C279.19,19.64,280.61,19.64,282.04,19.64z"/>
+
+ <linearGradient id="SVGID_210_" gradientUnits="userSpaceOnUse" x1="-16.3354" y1="-335.4014" x2="-12.0269" y2="-327.9387" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_210_)" d="M282.04,8.58c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C279.19,8.58,280.62,8.58,282.04,8.58z"/>
+
+ <linearGradient id="SVGID_211_" gradientUnits="userSpaceOnUse" x1="-5.1348" y1="-263.1465" x2="-0.8486" y2="-255.7227" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_211_)" d="M270.86,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C268,80.8,269.43,80.82,270.86,80.83z"/>
+
+ <linearGradient id="SVGID_212_" gradientUnits="userSpaceOnUse" x1="-5.144" y1="-274.1987" x2="-0.855" y2="-266.7699" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_212_)" d="M270.86,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.13,3.76
+ C268,69.75,269.43,69.77,270.86,69.78z"/>
+
+ <linearGradient id="SVGID_213_" gradientUnits="userSpaceOnUse" x1="-5.1514" y1="-285.251" x2="-0.8599" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_213_)" d="M270.87,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.13,3.76
+ C268.01,58.7,269.44,58.72,270.87,58.73z"/>
+
+ <linearGradient id="SVGID_214_" gradientUnits="userSpaceOnUse" x1="-5.1597" y1="-296.3037" x2="-0.8643" y2="-288.8638" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_214_)" d="M270.87,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.76
+ C268.02,47.66,269.45,47.67,270.87,47.67z"/>
+
+ <linearGradient id="SVGID_215_" gradientUnits="userSpaceOnUse" x1="-5.1685" y1="-307.3564" x2="-0.8706" y2="-299.9124" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_215_)" d="M270.88,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C268.03,36.61,269.45,36.61,270.88,36.62z"/>
+
+ <linearGradient id="SVGID_216_" gradientUnits="userSpaceOnUse" x1="-5.1768" y1="-318.4067" x2="-0.8765" y2="-310.9584" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_216_)" d="M270.88,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C268.03,25.56,269.46,25.56,270.88,25.57z"/>
+
+ <linearGradient id="SVGID_217_" gradientUnits="userSpaceOnUse" x1="-5.186" y1="-329.4595" x2="-0.8818" y2="-322.0044" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_217_)" d="M270.89,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C268.04,14.51,269.46,14.51,270.89,14.51z"/>
+
+ <linearGradient id="SVGID_218_" gradientUnits="userSpaceOnUse" x1="-4.1157" y1="-338.6255" x2="-0.896" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_218_)" d="M264.49-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C270.19-0.28,267.34-0.28,264.49-0.28z"/>
+
+ <linearGradient id="SVGID_219_" gradientUnits="userSpaceOnUse" x1="-37.7573" y1="-257.9629" x2="-34.5454" y2="-252.3997" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_219_)" d="M305.62,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.28-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C299.9,82.27,302.76,82.28,305.62,82.29z"/>
+
+ <linearGradient id="SVGID_220_" gradientUnits="userSpaceOnUse" x1="-37.7656" y1="-269.0225" x2="-33.4614" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_220_)" d="M303.47,74.96c0.72-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C300.62,74.95,302.05,74.96,303.47,74.96z"/>
+
+ <linearGradient id="SVGID_221_" gradientUnits="userSpaceOnUse" x1="-37.7686" y1="-280.0854" x2="-33.4629" y2="-272.6278" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_221_)" d="M303.48,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C300.62,63.89,302.05,63.89,303.48,63.9z"
+ />
+
+ <linearGradient id="SVGID_222_" gradientUnits="userSpaceOnUse" x1="-37.7705" y1="-291.1475" x2="-33.4653" y2="-283.6907" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_222_)" d="M303.48,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C300.62,52.83,302.05,52.83,303.48,52.83z"/>
+
+ <linearGradient id="SVGID_223_" gradientUnits="userSpaceOnUse" x1="-37.7734" y1="-302.2114" x2="-33.4663" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_223_)" d="M303.48,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C300.63,41.77,302.05,41.77,303.48,41.77z"
+ />
+
+ <linearGradient id="SVGID_224_" gradientUnits="userSpaceOnUse" x1="-37.7749" y1="-313.2734" x2="-33.4683" y2="-305.8141" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_224_)" d="M303.48,30.71c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C300.63,30.7,302.06,30.71,303.48,30.71z"/>
+
+ <linearGradient id="SVGID_225_" gradientUnits="userSpaceOnUse" x1="-37.7778" y1="-324.3364" x2="-33.4697" y2="-316.8746" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_225_)" d="M303.48,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C300.63,19.64,302.06,19.64,303.48,19.64z"/>
+
+ <linearGradient id="SVGID_226_" gradientUnits="userSpaceOnUse" x1="-37.7808" y1="-335.4014" x2="-33.4722" y2="-327.9387" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_226_)" d="M303.48,8.58c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C300.63,8.58,302.06,8.58,303.48,8.58z"/>
+
+ <linearGradient id="SVGID_227_" gradientUnits="userSpaceOnUse" x1="-26.5801" y1="-263.1465" x2="-22.2944" y2="-255.7235" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_227_)" d="M292.3,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C289.44,80.8,290.87,80.82,292.3,80.83z"/>
+
+ <linearGradient id="SVGID_228_" gradientUnits="userSpaceOnUse" x1="-26.5898" y1="-274.1987" x2="-22.3013" y2="-266.7707" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_228_)" d="M292.31,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.14,3.76
+ C289.45,69.75,290.88,69.77,292.31,69.78z"/>
+
+ <linearGradient id="SVGID_229_" gradientUnits="userSpaceOnUse" x1="-26.5967" y1="-285.251" x2="-22.3057" y2="-277.8187" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_229_)" d="M292.31,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.14,3.76
+ C289.46,58.7,290.88,58.72,292.31,58.73z"/>
+
+ <linearGradient id="SVGID_230_" gradientUnits="userSpaceOnUse" x1="-26.606" y1="-296.3032" x2="-22.311" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_230_)" d="M292.32,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C289.46,47.66,290.89,47.67,292.32,47.67z"/>
+
+ <linearGradient id="SVGID_231_" gradientUnits="userSpaceOnUse" x1="-26.6147" y1="-307.356" x2="-22.3169" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_231_)" d="M292.32,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C289.47,36.61,290.9,36.61,292.32,36.62z"/>
+
+ <linearGradient id="SVGID_232_" gradientUnits="userSpaceOnUse" x1="-26.623" y1="-318.4062" x2="-22.3232" y2="-310.9588" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_232_)" d="M292.33,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.27-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.74C289.48,25.56,290.9,25.56,292.33,25.57
+ z"/>
+
+ <linearGradient id="SVGID_233_" gradientUnits="userSpaceOnUse" x1="-26.6309" y1="-329.4595" x2="-22.3271" y2="-322.0052" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_233_)" d="M292.33,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C289.49,14.51,290.91,14.51,292.33,14.51z"/>
+
+ <linearGradient id="SVGID_234_" gradientUnits="userSpaceOnUse" x1="-25.561" y1="-338.6255" x2="-22.3413" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_234_)" d="M285.94-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C291.63-0.28,288.78-0.28,285.94-0.28z"/>
+
+ <linearGradient id="SVGID_235_" gradientUnits="userSpaceOnUse" x1="-59.2031" y1="-257.9639" x2="-55.9907" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_235_)" d="M327.06,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C321.35,82.27,324.21,82.28,327.06,82.29z"/>
+
+ <linearGradient id="SVGID_236_" gradientUnits="userSpaceOnUse" x1="-59.2119" y1="-269.022" x2="-54.9077" y2="-261.5669" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_236_)" d="M324.92,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C322.07,74.95,323.49,74.96,324.92,74.96z"/>
+
+ <linearGradient id="SVGID_237_" gradientUnits="userSpaceOnUse" x1="-59.2148" y1="-280.0859" x2="-54.9087" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_237_)" d="M324.92,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C322.07,63.89,323.5,63.89,324.92,63.9z"/>
+
+ <linearGradient id="SVGID_238_" gradientUnits="userSpaceOnUse" x1="-59.2163" y1="-291.1484" x2="-54.9106" y2="-283.6908" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_238_)" d="M324.92,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C322.07,52.83,323.5,52.83,324.92,52.83
+ z"/>
+
+ <linearGradient id="SVGID_239_" gradientUnits="userSpaceOnUse" x1="-59.2188" y1="-302.2114" x2="-54.9116" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_239_)" d="M324.93,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C322.07,41.77,323.5,41.77,324.93,41.77z"
+ />
+
+ <linearGradient id="SVGID_240_" gradientUnits="userSpaceOnUse" x1="-59.2217" y1="-313.2739" x2="-54.9146" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_240_)" d="M324.93,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C322.08,30.7,323.5,30.71,324.93,30.71z"/>
+
+ <linearGradient id="SVGID_241_" gradientUnits="userSpaceOnUse" x1="-59.2236" y1="-324.3369" x2="-54.915" y2="-316.8742" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_241_)" d="M324.93,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C322.08,19.64,323.5,19.64,324.93,19.64z"/>
+
+ <linearGradient id="SVGID_242_" gradientUnits="userSpaceOnUse" x1="-59.2275" y1="-335.4014" x2="-54.9185" y2="-327.9378" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_242_)" d="M324.93,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C322.08,8.58,323.5,8.58,324.93,8.58z"/>
+
+ <linearGradient id="SVGID_243_" gradientUnits="userSpaceOnUse" x1="-48.0254" y1="-263.1465" x2="-43.7397" y2="-255.7235" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_243_)" d="M313.75,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C310.89,80.8,312.32,80.82,313.75,80.83z"/>
+
+ <linearGradient id="SVGID_244_" gradientUnits="userSpaceOnUse" x1="-48.0352" y1="-274.1987" x2="-43.7466" y2="-266.7707" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_244_)" d="M313.75,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.14,3.76
+ C310.89,69.75,312.32,69.77,313.75,69.78z"/>
+
+ <linearGradient id="SVGID_245_" gradientUnits="userSpaceOnUse" x1="-48.042" y1="-285.251" x2="-43.751" y2="-277.8187" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_245_)" d="M313.76,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.14,3.76
+ C310.9,58.7,312.33,58.72,313.76,58.73z"/>
+
+ <linearGradient id="SVGID_246_" gradientUnits="userSpaceOnUse" x1="-48.0513" y1="-296.3032" x2="-43.7563" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_246_)" d="M313.76,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C310.91,47.66,312.34,47.67,313.76,47.67z"/>
+
+ <linearGradient id="SVGID_247_" gradientUnits="userSpaceOnUse" x1="-48.0596" y1="-307.356" x2="-43.7617" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_247_)" d="M313.77,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C310.92,36.61,312.34,36.61,313.77,36.62z"/>
+
+ <linearGradient id="SVGID_248_" gradientUnits="userSpaceOnUse" x1="-48.0684" y1="-318.4062" x2="-43.7686" y2="-310.9588" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_248_)" d="M313.78,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.27-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.74
+ C310.92,25.56,312.35,25.56,313.78,25.57z"/>
+
+ <linearGradient id="SVGID_249_" gradientUnits="userSpaceOnUse" x1="-48.0762" y1="-329.4595" x2="-43.7725" y2="-322.0052" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_249_)" d="M313.78,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C310.93,14.51,312.36,14.51,313.78,14.51z"/>
+
+ <linearGradient id="SVGID_250_" gradientUnits="userSpaceOnUse" x1="-47.0068" y1="-338.6255" x2="-43.7871" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_250_)" d="M307.38-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C313.08-0.28,310.23-0.28,307.38-0.28z"/>
+
+ <linearGradient id="SVGID_251_" gradientUnits="userSpaceOnUse" x1="-80.6489" y1="-257.9639" x2="-77.4365" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_251_)" d="M348.51,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C342.79,82.27,345.65,82.28,348.51,82.29z"/>
+
+ <linearGradient id="SVGID_252_" gradientUnits="userSpaceOnUse" x1="-80.6572" y1="-269.022" x2="-76.353" y2="-261.5669" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_252_)" d="M346.37,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C343.51,74.95,344.94,74.96,346.37,74.96z"/>
+
+ <linearGradient id="SVGID_253_" gradientUnits="userSpaceOnUse" x1="-80.6602" y1="-280.0859" x2="-76.354" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_253_)" d="M346.37,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C343.51,63.89,344.94,63.89,346.37,63.9z"
+ />
+
+ <linearGradient id="SVGID_254_" gradientUnits="userSpaceOnUse" x1="-80.6616" y1="-291.1484" x2="-76.356" y2="-283.6908" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_254_)" d="M346.37,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C343.52,52.83,344.94,52.83,346.37,52.83z"/>
+
+ <linearGradient id="SVGID_255_" gradientUnits="userSpaceOnUse" x1="-80.6636" y1="-302.2114" x2="-76.3564" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_255_)" d="M346.37,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C343.52,41.77,344.94,41.77,346.37,41.77z"
+ />
+
+ <linearGradient id="SVGID_256_" gradientUnits="userSpaceOnUse" x1="-80.667" y1="-313.2739" x2="-76.3599" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_256_)" d="M346.37,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C343.52,30.7,344.95,30.71,346.37,30.71z"/>
+
+ <linearGradient id="SVGID_257_" gradientUnits="userSpaceOnUse" x1="-80.6689" y1="-324.3369" x2="-76.3604" y2="-316.8742" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_257_)" d="M346.37,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C343.52,19.64,344.95,19.64,346.37,19.64z"/>
+
+ <linearGradient id="SVGID_258_" gradientUnits="userSpaceOnUse" x1="-80.6729" y1="-335.4014" x2="-76.3638" y2="-327.9378" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_258_)" d="M346.38,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C343.53,8.58,344.95,8.58,346.38,8.58z"/>
+
+ <linearGradient id="SVGID_259_" gradientUnits="userSpaceOnUse" x1="-69.4707" y1="-263.1465" x2="-65.1851" y2="-255.7235" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_259_)" d="M335.19,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.28-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C332.33,80.8,333.76,80.82,335.19,80.83z"/>
+
+ <linearGradient id="SVGID_260_" gradientUnits="userSpaceOnUse" x1="-69.48" y1="-274.1987" x2="-65.1914" y2="-266.7707" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_260_)" d="M335.2,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.76
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C332.34,69.75,333.77,69.77,335.2,69.78z"/>
+
+ <linearGradient id="SVGID_261_" gradientUnits="userSpaceOnUse" x1="-69.4873" y1="-285.251" x2="-65.1963" y2="-277.8187" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_261_)" d="M335.2,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C332.35,58.7,333.77,58.72,335.2,58.73z"/>
+
+ <linearGradient id="SVGID_262_" gradientUnits="userSpaceOnUse" x1="-69.4966" y1="-296.3032" x2="-65.2017" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_262_)" d="M335.21,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C332.35,47.66,333.78,47.67,335.21,47.67z"/>
+
+ <linearGradient id="SVGID_263_" gradientUnits="userSpaceOnUse" x1="-69.5054" y1="-307.356" x2="-65.2075" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_263_)" d="M335.21,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C332.36,36.61,333.79,36.61,335.21,36.62z"/>
+
+ <linearGradient id="SVGID_264_" gradientUnits="userSpaceOnUse" x1="-69.5132" y1="-318.4067" x2="-65.2134" y2="-310.9593" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_264_)" d="M335.22,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.74
+ C332.37,25.56,333.79,25.56,335.22,25.57z"/>
+
+ <linearGradient id="SVGID_265_" gradientUnits="userSpaceOnUse" x1="-69.5215" y1="-329.4595" x2="-65.2173" y2="-322.0044" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_265_)" d="M335.22,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C332.38,14.51,333.8,14.51,335.22,14.51z"/>
+
+ <linearGradient id="SVGID_266_" gradientUnits="userSpaceOnUse" x1="-68.4521" y1="-338.6255" x2="-65.2324" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_266_)" d="M328.83-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C334.52-0.28,331.67-0.28,328.83-0.28z"/>
+
+ <linearGradient id="SVGID_267_" gradientUnits="userSpaceOnUse" x1="-102.0942" y1="-257.9639" x2="-98.8813" y2="-252.399" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_267_)" d="M369.95,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C364.24,82.27,367.1,82.28,369.95,82.29z"/>
+
+ <linearGradient id="SVGID_268_" gradientUnits="userSpaceOnUse" x1="-102.1025" y1="-269.022" x2="-97.7983" y2="-261.5669" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_268_)" d="M367.81,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C364.96,74.95,366.38,74.96,367.81,74.96z"/>
+
+ <linearGradient id="SVGID_269_" gradientUnits="userSpaceOnUse" x1="-102.1055" y1="-280.0859" x2="-97.7993" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_269_)" d="M367.81,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C364.96,63.89,366.39,63.89,367.81,63.9z"
+ />
+
+ <linearGradient id="SVGID_270_" gradientUnits="userSpaceOnUse" x1="-102.1069" y1="-291.1484" x2="-97.8013" y2="-283.6908" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_270_)" d="M367.81,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C364.96,52.83,366.39,52.83,367.81,52.83z"/>
+
+ <linearGradient id="SVGID_271_" gradientUnits="userSpaceOnUse" x1="-102.1089" y1="-302.2114" x2="-97.8018" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_271_)" d="M367.82,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C364.96,41.77,366.39,41.77,367.82,41.77z"
+ />
+
+ <linearGradient id="SVGID_272_" gradientUnits="userSpaceOnUse" x1="-102.1123" y1="-313.2739" x2="-97.8052" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_272_)" d="M367.82,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.14,3.75C364.97,30.7,366.39,30.71,367.82,30.71z"/>
+
+ <linearGradient id="SVGID_273_" gradientUnits="userSpaceOnUse" x1="-102.1147" y1="-324.3369" x2="-97.8062" y2="-316.8742" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_273_)" d="M367.82,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.43,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C364.97,19.64,366.39,19.64,367.82,19.64z"/>
+
+ <linearGradient id="SVGID_274_" gradientUnits="userSpaceOnUse" x1="-102.1182" y1="-335.4019" x2="-97.8091" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_274_)" d="M367.82,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.43,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C364.97,8.58,366.39,8.58,367.82,8.58z"/>
+
+ <linearGradient id="SVGID_275_" gradientUnits="userSpaceOnUse" x1="-90.916" y1="-263.1475" x2="-86.6299" y2="-255.7237" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_275_)" d="M356.64,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C353.78,80.8,355.21,80.82,356.64,80.83z"/>
+
+ <linearGradient id="SVGID_276_" gradientUnits="userSpaceOnUse" x1="-90.9258" y1="-274.1997" x2="-86.6367" y2="-266.7708" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_276_)" d="M356.64,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C353.79,69.75,355.21,69.77,356.64,69.78z"/>
+
+ <linearGradient id="SVGID_277_" gradientUnits="userSpaceOnUse" x1="-90.9336" y1="-285.2505" x2="-86.6426" y2="-277.8182" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_277_)" d="M356.65,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C353.79,58.7,355.22,58.72,356.65,58.73z"/>
+
+ <linearGradient id="SVGID_278_" gradientUnits="userSpaceOnUse" x1="-90.9419" y1="-296.3032" x2="-86.647" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_278_)" d="M356.65,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.42,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C353.8,47.66,355.23,47.67,356.65,47.67z"/>
+
+ <linearGradient id="SVGID_279_" gradientUnits="userSpaceOnUse" x1="-90.9507" y1="-307.356" x2="-86.6528" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_279_)" d="M356.66,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.42,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C353.81,36.61,355.23,36.61,356.66,36.62z"/>
+
+ <linearGradient id="SVGID_280_" gradientUnits="userSpaceOnUse" x1="-90.959" y1="-318.4077" x2="-86.6582" y2="-310.9586" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_280_)" d="M356.67,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C353.81,25.56,355.24,25.56,356.67,25.57z"/>
+
+ <linearGradient id="SVGID_281_" gradientUnits="userSpaceOnUse" x1="-90.9683" y1="-329.46" x2="-86.6636" y2="-322.004" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_281_)" d="M356.67,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C353.82,14.51,355.25,14.51,356.67,14.51z"/>
+
+ <linearGradient id="SVGID_282_" gradientUnits="userSpaceOnUse" x1="-89.8975" y1="-338.6255" x2="-86.6777" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_282_)" d="M350.27-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C355.97-0.28,353.12-0.28,350.27-0.28z"/>
+
+ <linearGradient id="SVGID_283_" gradientUnits="userSpaceOnUse" x1="-123.5396" y1="-257.9639" x2="-120.3271" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_283_)" d="M391.4,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C385.69,82.27,388.54,82.28,391.4,82.29z"/>
+
+ <linearGradient id="SVGID_284_" gradientUnits="userSpaceOnUse" x1="-123.5479" y1="-269.022" x2="-119.2437" y2="-261.5669" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_284_)" d="M389.26,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75C386.4,74.95,387.83,74.96,389.26,74.96
+ z"/>
+
+ <linearGradient id="SVGID_285_" gradientUnits="userSpaceOnUse" x1="-123.5508" y1="-280.0859" x2="-119.2446" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_285_)" d="M389.26,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C386.4,63.89,387.83,63.89,389.26,63.9z"/>
+
+ <linearGradient id="SVGID_286_" gradientUnits="userSpaceOnUse" x1="-123.5522" y1="-291.1479" x2="-119.2466" y2="-283.6903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_286_)" d="M389.26,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C386.41,52.83,387.83,52.83,389.26,52.83z"/>
+
+ <linearGradient id="SVGID_287_" gradientUnits="userSpaceOnUse" x1="-123.5547" y1="-302.2114" x2="-119.2476" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_287_)" d="M389.26,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C386.41,41.77,387.84,41.77,389.26,41.77z"
+ />
+
+ <linearGradient id="SVGID_288_" gradientUnits="userSpaceOnUse" x1="-123.5576" y1="-313.2739" x2="-119.2505" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_288_)" d="M389.26,30.71c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C386.41,30.7,387.84,30.71,389.26,30.71z"/>
+
+ <linearGradient id="SVGID_289_" gradientUnits="userSpaceOnUse" x1="-123.5596" y1="-324.3374" x2="-119.251" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_289_)" d="M389.26,19.64c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C386.41,19.64,387.84,19.64,389.26,19.64z"/>
+
+ <linearGradient id="SVGID_290_" gradientUnits="userSpaceOnUse" x1="-123.5625" y1="-335.4019" x2="-119.2534" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_290_)" d="M389.27,8.58c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.42,2.5-2.13,3.74c0.71,1.25,1.42,2.49,2.13,3.74C386.42,8.58,387.84,8.58,389.27,8.58z"/>
+
+ <linearGradient id="SVGID_291_" gradientUnits="userSpaceOnUse" x1="-112.3608" y1="-263.1479" x2="-108.0747" y2="-255.7242" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_291_)" d="M378.08,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C375.22,80.8,376.65,80.82,378.08,80.83z"/>
+
+ <linearGradient id="SVGID_292_" gradientUnits="userSpaceOnUse" x1="-112.3706" y1="-274.1997" x2="-108.0811" y2="-266.77" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_292_)" d="M378.09,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.29-0.04c-0.71,1.24-1.42,2.47-2.14,3.71c0.71,1.25,1.43,2.51,2.14,3.76
+ C375.23,69.75,376.66,69.77,378.09,69.78z"/>
+
+ <linearGradient id="SVGID_293_" gradientUnits="userSpaceOnUse" x1="-112.3784" y1="-285.251" x2="-108.0869" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_293_)" d="M378.09,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.42,2.48-2.14,3.72c0.71,1.25,1.43,2.51,2.14,3.76
+ C375.24,58.7,376.66,58.72,378.09,58.73z"/>
+
+ <linearGradient id="SVGID_294_" gradientUnits="userSpaceOnUse" x1="-112.3872" y1="-296.3032" x2="-108.0918" y2="-288.8633" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_294_)" d="M378.1,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.42,2.48-2.14,3.72c0.71,1.25,1.43,2.5,2.14,3.76
+ C375.24,47.66,376.67,47.67,378.1,47.67z"/>
+
+ <linearGradient id="SVGID_295_" gradientUnits="userSpaceOnUse" x1="-112.396" y1="-307.356" x2="-108.0981" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_295_)" d="M378.11,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C375.25,36.61,376.68,36.61,378.11,36.62z"/>
+
+ <linearGradient id="SVGID_296_" gradientUnits="userSpaceOnUse" x1="-112.4043" y1="-318.4072" x2="-108.1035" y2="-310.9581" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_296_)" d="M378.11,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C375.26,25.56,376.68,25.56,378.11,25.57z"/>
+
+ <linearGradient id="SVGID_297_" gradientUnits="userSpaceOnUse" x1="-112.4136" y1="-329.4595" x2="-108.1089" y2="-322.0035" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_297_)" d="M378.12,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C375.27,14.51,376.69,14.51,378.12,14.51z"/>
+
+ <linearGradient id="SVGID_298_" gradientUnits="userSpaceOnUse" x1="-111.3423" y1="-338.6255" x2="-108.1226" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_298_)" d="M371.72-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C377.41-0.28,374.57-0.28,371.72-0.28z"/>
+
+ <linearGradient id="SVGID_299_" gradientUnits="userSpaceOnUse" x1="-144.9844" y1="-257.9639" x2="-141.772" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_299_)" d="M412.84,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C407.13,82.27,409.99,82.28,412.84,82.29z"/>
+
+ <linearGradient id="SVGID_300_" gradientUnits="userSpaceOnUse" x1="-144.9932" y1="-269.022" x2="-140.689" y2="-261.5669" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_300_)" d="M410.7,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75C407.85,74.95,409.28,74.96,410.7,74.96
+ z"/>
+
+ <linearGradient id="SVGID_301_" gradientUnits="userSpaceOnUse" x1="-144.9961" y1="-280.0859" x2="-140.6899" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_301_)" d="M410.71,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C407.85,63.89,409.28,63.89,410.71,63.9z"
+ />
+
+ <linearGradient id="SVGID_302_" gradientUnits="userSpaceOnUse" x1="-144.9976" y1="-291.1479" x2="-140.6919" y2="-283.6903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_302_)" d="M410.71,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75
+ C407.85,52.83,409.28,52.83,410.71,52.83z"/>
+
+ <linearGradient id="SVGID_303_" gradientUnits="userSpaceOnUse" x1="-145" y1="-302.2114" x2="-140.6929" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_303_)" d="M410.71,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C407.86,41.77,409.28,41.77,410.71,41.77z"
+ />
+
+ <linearGradient id="SVGID_304_" gradientUnits="userSpaceOnUse" x1="-145.0029" y1="-313.2739" x2="-140.6958" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_304_)" d="M410.71,30.71c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C407.86,30.7,409.28,30.71,410.71,30.71z"/>
+
+ <linearGradient id="SVGID_305_" gradientUnits="userSpaceOnUse" x1="-145.0049" y1="-324.3374" x2="-140.6963" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_305_)" d="M410.71,19.64c0.71-1.25,1.43-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C407.86,19.64,409.29,19.64,410.71,19.64z"/>
+
+ <linearGradient id="SVGID_306_" gradientUnits="userSpaceOnUse" x1="-145.0088" y1="-335.4014" x2="-140.6997" y2="-327.9378" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_306_)" d="M410.71,8.58c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C407.86,8.58,409.29,8.58,410.71,8.58z"/>
+
+ <linearGradient id="SVGID_307_" gradientUnits="userSpaceOnUse" x1="-133.8071" y1="-263.1475" x2="-129.5205" y2="-255.7228" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_307_)" d="M399.53,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C396.67,80.8,398.1,80.82,399.53,80.83z"/>
+
+ <linearGradient id="SVGID_308_" gradientUnits="userSpaceOnUse" x1="-133.8159" y1="-274.1997" x2="-129.5264" y2="-266.77" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_308_)" d="M399.53,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.29-0.04c-0.71,1.24-1.42,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.13,3.76
+ C396.68,69.75,398.1,69.77,399.53,69.78z"/>
+
+ <linearGradient id="SVGID_309_" gradientUnits="userSpaceOnUse" x1="-133.8237" y1="-285.251" x2="-129.5322" y2="-277.8179" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_309_)" d="M399.54,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.13,3.76
+ C396.68,58.7,398.11,58.72,399.54,58.73z"/>
+
+ <linearGradient id="SVGID_310_" gradientUnits="userSpaceOnUse" x1="-133.8325" y1="-296.3032" x2="-129.5371" y2="-288.8633" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_310_)" d="M399.54,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.76
+ C396.69,47.66,398.12,47.67,399.54,47.67z"/>
+
+ <linearGradient id="SVGID_311_" gradientUnits="userSpaceOnUse" x1="-133.8413" y1="-307.356" x2="-129.5435" y2="-299.9119" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_311_)" d="M399.55,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C396.7,36.61,398.12,36.61,399.55,36.62z"/>
+
+ <linearGradient id="SVGID_312_" gradientUnits="userSpaceOnUse" x1="-133.8496" y1="-318.4072" x2="-129.5488" y2="-310.9581" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_312_)" d="M399.56,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.42,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C396.71,25.56,398.13,25.56,399.56,25.57z"/>
+
+ <linearGradient id="SVGID_313_" gradientUnits="userSpaceOnUse" x1="-133.8589" y1="-329.4595" x2="-129.5542" y2="-322.0035" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_313_)" d="M399.56,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C396.71,14.51,398.14,14.51,399.56,14.51z"/>
+
+ <linearGradient id="SVGID_314_" gradientUnits="userSpaceOnUse" x1="-132.7886" y1="-338.625" x2="-129.5688" y2="-333.0483" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_314_)" d="M393.16-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C398.86-0.28,396.01-0.28,393.16-0.28z"/>
+
+ <linearGradient id="SVGID_315_" gradientUnits="userSpaceOnUse" x1="-166.4292" y1="-257.9639" x2="-163.2168" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_315_)" d="M434.29,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C428.58,82.27,431.43,82.28,434.29,82.29z"/>
+
+ <linearGradient id="SVGID_316_" gradientUnits="userSpaceOnUse" x1="-166.438" y1="-269.0225" x2="-162.1338" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_316_)" d="M432.15,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C429.29,74.95,430.72,74.96,432.15,74.96z"/>
+
+ <linearGradient id="SVGID_317_" gradientUnits="userSpaceOnUse" x1="-166.4414" y1="-280.0859" x2="-162.1353" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_317_)" d="M432.15,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C429.29,63.89,430.72,63.89,432.15,63.9z"
+ />
+
+ <linearGradient id="SVGID_318_" gradientUnits="userSpaceOnUse" x1="-166.4434" y1="-291.1479" x2="-162.1377" y2="-283.6903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_318_)" d="M432.15,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C429.3,52.83,430.72,52.83,432.15,52.83
+ z"/>
+
+ <linearGradient id="SVGID_319_" gradientUnits="userSpaceOnUse" x1="-166.4453" y1="-302.2114" x2="-162.1382" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_319_)" d="M432.15,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C429.3,41.77,430.73,41.77,432.15,41.77z"
+ />
+
+ <linearGradient id="SVGID_320_" gradientUnits="userSpaceOnUse" x1="-166.4482" y1="-313.2739" x2="-162.1411" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_320_)" d="M432.15,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C429.3,30.7,430.73,30.71,432.15,30.71z"/>
+
+ <linearGradient id="SVGID_321_" gradientUnits="userSpaceOnUse" x1="-166.4502" y1="-324.3369" x2="-162.1416" y2="-316.8742" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_321_)" d="M432.15,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C429.3,19.64,430.73,19.64,432.15,19.64z"/>
+
+ <linearGradient id="SVGID_322_" gradientUnits="userSpaceOnUse" x1="-166.4536" y1="-335.4019" x2="-162.1445" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_322_)" d="M432.16,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C429.31,8.58,430.73,8.58,432.16,8.58z"/>
+
+ <linearGradient id="SVGID_323_" gradientUnits="userSpaceOnUse" x1="-155.2524" y1="-263.1475" x2="-150.9663" y2="-255.7237" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_323_)" d="M420.97,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C418.12,80.8,419.54,80.82,420.97,80.83z"/>
+
+ <linearGradient id="SVGID_324_" gradientUnits="userSpaceOnUse" x1="-155.2622" y1="-274.1992" x2="-150.9731" y2="-266.7704" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_324_)" d="M420.98,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.14,3.76
+ C418.12,69.75,419.55,69.77,420.98,69.78z"/>
+
+ <linearGradient id="SVGID_325_" gradientUnits="userSpaceOnUse" x1="-155.27" y1="-285.2505" x2="-150.979" y2="-277.8182" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_325_)" d="M420.98,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.14,3.76
+ C418.13,58.7,419.56,58.72,420.98,58.73z"/>
+
+ <linearGradient id="SVGID_326_" gradientUnits="userSpaceOnUse" x1="-155.2788" y1="-296.3027" x2="-150.9839" y2="-288.8637" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_326_)" d="M420.99,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C418.13,47.66,419.56,47.67,420.99,47.67z"/>
+
+ <linearGradient id="SVGID_327_" gradientUnits="userSpaceOnUse" x1="-155.2876" y1="-307.3555" x2="-150.9897" y2="-299.9114" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_327_)" d="M421,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C418.14,36.61,419.57,36.61,421,36.62z"/>
+
+ <linearGradient id="SVGID_328_" gradientUnits="userSpaceOnUse" x1="-155.2959" y1="-318.4067" x2="-150.9956" y2="-310.9584" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_328_)" d="M421,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74C418.15,25.56,419.58,25.56,421,25.57z"
+ />
+
+ <linearGradient id="SVGID_329_" gradientUnits="userSpaceOnUse" x1="-155.3027" y1="-329.4595" x2="-150.999" y2="-322.0052" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_329_)" d="M421.01,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C418.16,14.51,419.58,14.51,421.01,14.51z"/>
+
+ <linearGradient id="SVGID_330_" gradientUnits="userSpaceOnUse" x1="-154.2339" y1="-338.625" x2="-151.0142" y2="-333.0483" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_330_)" d="M414.61-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C420.3-0.28,417.46-0.28,414.61-0.28z"/>
+
+ <linearGradient id="SVGID_331_" gradientUnits="userSpaceOnUse" x1="-187.875" y1="-257.9639" x2="-184.6626" y2="-252.3998" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_331_)" d="M455.73,82.29c-0.71-1.25-1.43-2.5-2.14-3.75c-1.43,0-2.86-0.01-4.29-0.02
+ c-0.71,1.24-1.43,2.49-2.14,3.72C450.02,82.27,452.88,82.28,455.73,82.29z"/>
+
+ <linearGradient id="SVGID_332_" gradientUnits="userSpaceOnUse" x1="-187.8833" y1="-269.0225" x2="-183.5791" y2="-261.5674" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_332_)" d="M453.59,74.96c0.71-1.25,1.43-2.49,2.14-3.74c-0.72-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.14,3.75
+ C450.74,74.95,452.17,74.96,453.59,74.96z"/>
+
+ <linearGradient id="SVGID_333_" gradientUnits="userSpaceOnUse" x1="-187.8872" y1="-280.0859" x2="-183.5811" y2="-272.6275" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_333_)" d="M453.6,63.9c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85,0-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C450.74,63.89,452.17,63.89,453.6,63.9z"/>
+
+ <linearGradient id="SVGID_334_" gradientUnits="userSpaceOnUse" x1="-187.8887" y1="-291.1479" x2="-183.583" y2="-283.6903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_334_)" d="M453.6,52.83c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.43-2.5-2.14-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.43,2.5,2.14,3.75C450.74,52.83,452.17,52.83,453.6,52.83
+ z"/>
+
+ <linearGradient id="SVGID_335_" gradientUnits="userSpaceOnUse" x1="-187.8906" y1="-302.2114" x2="-183.5835" y2="-294.7513" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_335_)" d="M453.6,41.77c0.71-1.25,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85,0-4.28-0.01c-0.71,1.25-1.43,2.49-2.14,3.74c0.71,1.25,1.42,2.5,2.13,3.75C450.75,41.77,452.17,41.77,453.6,41.77z"
+ />
+
+ <linearGradient id="SVGID_336_" gradientUnits="userSpaceOnUse" x1="-187.8931" y1="-313.2739" x2="-183.5859" y2="-305.8138" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_336_)" d="M453.6,30.71c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C450.75,30.7,452.17,30.71,453.6,30.71z"/>
+
+ <linearGradient id="SVGID_337_" gradientUnits="userSpaceOnUse" x1="-187.895" y1="-324.3374" x2="-183.5864" y2="-316.8747" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_337_)" d="M453.6,19.64c0.71-1.25,1.42-2.5,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.28,0
+ c-0.71,1.25-1.42,2.49-2.13,3.74c0.71,1.25,1.42,2.5,2.13,3.75C450.75,19.64,452.18,19.64,453.6,19.64z"/>
+
+ <linearGradient id="SVGID_338_" gradientUnits="userSpaceOnUse" x1="-187.8989" y1="-335.4019" x2="-183.5898" y2="-327.9383" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_338_)" d="M453.6,8.58c0.71-1.25,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.25-1.43,2.5-2.14,3.74c0.71,1.25,1.42,2.49,2.13,3.74C450.75,8.58,452.18,8.58,453.6,8.58z"/>
+
+ <linearGradient id="SVGID_339_" gradientUnits="userSpaceOnUse" x1="-176.6978" y1="-263.147" x2="-172.4116" y2="-255.7232" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_339_)" d="M442.42,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C439.56,80.8,440.99,80.82,442.42,80.83z"/>
+
+ <linearGradient id="SVGID_340_" gradientUnits="userSpaceOnUse" x1="-176.7075" y1="-274.1992" x2="-172.4185" y2="-266.7704" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_340_)" d="M442.42,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.14,3.76
+ C439.57,69.75,441,69.77,442.42,69.78z"/>
+
+ <linearGradient id="SVGID_341_" gradientUnits="userSpaceOnUse" x1="-176.7144" y1="-285.251" x2="-172.4233" y2="-277.8187" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_341_)" d="M442.43,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.14,3.76
+ C439.57,58.7,441,58.72,442.43,58.73z"/>
+
+ <linearGradient id="SVGID_342_" gradientUnits="userSpaceOnUse" x1="-176.7231" y1="-296.3032" x2="-172.4282" y2="-288.8642" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_342_)" d="M442.43,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C439.58,47.66,441.01,47.67,442.43,47.67z"/>
+
+ <linearGradient id="SVGID_343_" gradientUnits="userSpaceOnUse" x1="-176.7319" y1="-307.3555" x2="-172.4341" y2="-299.9114" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_343_)" d="M442.44,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C439.59,36.61,441.02,36.61,442.44,36.62z"/>
+
+ <linearGradient id="SVGID_344_" gradientUnits="userSpaceOnUse" x1="-176.7397" y1="-318.4067" x2="-172.4399" y2="-310.9593" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_344_)" d="M442.45,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42,0-2.85-0.01-4.27-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74C439.6,25.56,441.02,25.56,442.45,25.57
+ z"/>
+
+ <linearGradient id="SVGID_345_" gradientUnits="userSpaceOnUse" x1="-176.748" y1="-329.4595" x2="-172.4443" y2="-322.0052" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_345_)" d="M442.45,14.51c0.71-1.24,1.43-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.14-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C439.6,14.51,441.03,14.51,442.45,14.51z"/>
+
+ <linearGradient id="SVGID_346_" gradientUnits="userSpaceOnUse" x1="-175.6792" y1="-338.625" x2="-172.4595" y2="-333.0483" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_346_)" d="M436.05-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C441.75-0.28,438.9-0.28,436.05-0.28z"/>
+
+ <linearGradient id="SVGID_347_" gradientUnits="userSpaceOnUse" x1="-198.1436" y1="-263.147" x2="-193.8574" y2="-255.7232" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_347_)" d="M463.86,80.83c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.51-2.14-3.76
+ c-1.43-0.02-2.86-0.03-4.29-0.05c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.26,1.43,2.51,2.14,3.77
+ C461.01,80.8,462.44,80.82,463.86,80.83z"/>
+
+ <linearGradient id="SVGID_348_" gradientUnits="userSpaceOnUse" x1="-198.1533" y1="-274.1992" x2="-193.8643" y2="-266.7704" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_348_)" d="M463.87,69.78c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.43-2.5-2.14-3.76
+ c-1.43-0.01-2.86-0.03-4.28-0.04c-0.71,1.24-1.43,2.47-2.14,3.71c0.71,1.25,1.42,2.51,2.14,3.76
+ C461.01,69.75,462.44,69.77,463.87,69.78z"/>
+
+ <linearGradient id="SVGID_349_" gradientUnits="userSpaceOnUse" x1="-198.1606" y1="-285.25" x2="-193.8696" y2="-277.8177" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_349_)" d="M463.88,58.73c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.04c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.51,2.14,3.76
+ C461.02,58.7,462.45,58.72,463.88,58.73z"/>
+
+ <linearGradient id="SVGID_350_" gradientUnits="userSpaceOnUse" x1="-198.1689" y1="-296.3027" x2="-193.874" y2="-288.8637" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_350_)" d="M463.88,47.67c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.14,3.76
+ C461.03,47.66,462.46,47.67,463.88,47.67z"/>
+
+ <linearGradient id="SVGID_351_" gradientUnits="userSpaceOnUse" x1="-198.1777" y1="-307.3555" x2="-193.8799" y2="-299.9114" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_351_)" d="M463.89,36.62c0.71-1.24,1.43-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.01-4.28-0.02c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.5,2.13,3.75
+ C461.03,36.61,462.46,36.61,463.89,36.62z"/>
+
+ <linearGradient id="SVGID_352_" gradientUnits="userSpaceOnUse" x1="-198.186" y1="-318.4072" x2="-193.8857" y2="-310.9589" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_352_)" d="M463.89,25.57c0.71-1.24,1.42-2.49,2.14-3.73c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43,0-2.85-0.01-4.28-0.01c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.5,2.13,3.74
+ C461.04,25.56,462.46,25.56,463.89,25.57z"/>
+
+ <linearGradient id="SVGID_353_" gradientUnits="userSpaceOnUse" x1="-198.1948" y1="-329.46" x2="-193.8906" y2="-322.0049" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_353_)" d="M463.9,14.51c0.71-1.24,1.42-2.49,2.14-3.74c-0.71-1.25-1.42-2.5-2.13-3.74c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.25,1.42,2.49,2.13,3.74C461.05,14.51,462.47,14.51,463.9,14.51z"/>
+
+ <linearGradient id="SVGID_354_" gradientUnits="userSpaceOnUse" x1="-197.124" y1="-338.6255" x2="-193.9043" y2="-333.0488" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_354_)" d="M457.5-0.28c0.71,1.24,1.42,2.49,2.13,3.74c1.42,0,2.85,0,4.27,0c0.71-1.25,1.42-2.49,2.14-3.74
+ C463.19-0.28,460.35-0.28,457.5-0.28z"/>
+
+ <linearGradient id="SVGID_355_" gradientUnits="userSpaceOnUse" x1="112.9204" y1="-258.2065" x2="116.082" y2="-252.7305" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_355_)" d="M154.96,82.08c-0.71-1.26-1.43-2.51-2.14-3.77c-1.43-0.03-2.86-0.06-4.29-0.09
+ c-0.71,1.23-1.43,2.45-2.14,3.68C149.24,81.97,152.1,82.03,154.96,82.08z"/>
+
+ <linearGradient id="SVGID_356_" gradientUnits="userSpaceOnUse" x1="112.9058" y1="-269.2368" x2="117.1743" y2="-261.8435" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_356_)" d="M152.82,74.74c0.71-1.23,1.43-2.46,2.14-3.7c-0.71-1.25-1.43-2.51-2.14-3.77
+ c-1.43-0.02-2.85-0.05-4.28-0.07c-0.72,1.23-1.43,2.46-2.15,3.68c0.71,1.25,1.42,2.51,2.14,3.77
+ C149.97,74.68,151.39,74.71,152.82,74.74z"/>
+
+ <linearGradient id="SVGID_357_" gradientUnits="userSpaceOnUse" x1="112.8926" y1="-280.2642" x2="117.1646" y2="-272.8649" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_357_)" d="M152.83,63.71c0.71-1.23,1.43-2.47,2.14-3.7c-0.71-1.26-1.43-2.51-2.14-3.76
+ c-1.42-0.02-2.85-0.04-4.28-0.06c-0.72,1.23-1.43,2.46-2.14,3.69c0.71,1.25,1.42,2.51,2.14,3.76
+ C149.98,63.66,151.4,63.69,152.83,63.71z"/>
+
+ <linearGradient id="SVGID_358_" gradientUnits="userSpaceOnUse" x1="112.8804" y1="-291.293" x2="117.1567" y2="-283.8861" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_358_)" d="M152.84,52.68c0.71-1.24,1.43-2.47,2.14-3.71c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.42-0.01-2.85-0.03-4.28-0.05c-0.71,1.23-1.43,2.46-2.14,3.69c0.71,1.25,1.42,2.5,2.14,3.76
+ C149.99,52.64,151.42,52.66,152.84,52.68z"/>
+
+ <linearGradient id="SVGID_359_" gradientUnits="userSpaceOnUse" x1="112.8647" y1="-302.3213" x2="117.1465" y2="-294.9051" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_359_)" d="M152.85,41.64c0.71-1.23,1.43-2.47,2.14-3.71c-0.71-1.25-1.42-2.5-2.14-3.75
+ c-1.42-0.01-2.85-0.02-4.27-0.04c-0.71,1.24-1.43,2.47-2.14,3.7c0.71,1.25,1.42,2.5,2.13,3.75C150,41.62,151.43,41.63,152.85,41.64
+ z"/>
+
+ <linearGradient id="SVGID_360_" gradientUnits="userSpaceOnUse" x1="112.8496" y1="-313.3501" x2="117.1362" y2="-305.9254" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_360_)" d="M152.86,30.61c0.72-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.42-0.01-2.85-0.02-4.27-0.03c-0.71,1.24-1.43,2.48-2.14,3.71c0.71,1.25,1.42,2.49,2.13,3.74
+ C150.01,30.59,151.44,30.6,152.86,30.61z"/>
+
+ <linearGradient id="SVGID_361_" gradientUnits="userSpaceOnUse" x1="112.8354" y1="-324.3779" x2="117.1284" y2="-316.9423" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_361_)" d="M152.87,19.58c0.71-1.24,1.43-2.48,2.14-3.72c-0.71-1.25-1.42-2.49-2.14-3.74
+ c-1.42,0-2.85-0.01-4.27-0.01c-0.71,1.24-1.43,2.48-2.14,3.72c0.71,1.25,1.42,2.49,2.13,3.74
+ C150.02,19.57,151.45,19.58,152.87,19.58z"/>
+
+ <linearGradient id="SVGID_362_" gradientUnits="userSpaceOnUse" x1="112.8232" y1="-335.4092" x2="117.1201" y2="-327.9668" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_362_)" d="M152.88,8.55c0.71-1.24,1.43-2.48,2.14-3.73c-0.71-1.25-1.42-2.49-2.13-3.74
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.24-1.43,2.49-2.14,3.73c0.71,1.24,1.42,2.49,2.13,3.73C150.03,8.54,151.46,8.55,152.88,8.55z"/>
+
+ <linearGradient id="SVGID_363_" gradientUnits="userSpaceOnUse" x1="124.0977" y1="-263.5513" x2="128.3364" y2="-256.2095" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_363_)" d="M141.64,80.41c0.71-1.22,1.43-2.44,2.14-3.66c-0.71-1.26-1.42-2.52-2.13-3.78
+ c-1.43-0.04-2.86-0.08-4.28-0.12c-0.71,1.22-1.43,2.43-2.15,3.65c0.71,1.26,1.43,2.52,2.13,3.78
+ C138.79,80.32,140.21,80.37,141.64,80.41z"/>
+
+ <linearGradient id="SVGID_364_" gradientUnits="userSpaceOnUse" x1="124.0786" y1="-274.5439" x2="128.3242" y2="-267.1903" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_364_)" d="M141.66,69.41c0.71-1.22,1.43-2.45,2.14-3.67c-0.71-1.26-1.42-2.51-2.13-3.77
+ c-1.43-0.03-2.86-0.06-4.28-0.1c-0.71,1.22-1.43,2.44-2.14,3.66c0.71,1.25,1.42,2.51,2.13,3.77
+ C138.8,69.34,140.23,69.38,141.66,69.41z"/>
+
+ <linearGradient id="SVGID_365_" gradientUnits="userSpaceOnUse" x1="124.0596" y1="-285.5361" x2="128.313" y2="-278.169" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_365_)" d="M141.67,58.42c0.71-1.23,1.43-2.45,2.14-3.68c-0.71-1.25-1.42-2.51-2.13-3.76
+ c-1.43-0.02-2.85-0.05-4.28-0.08c-0.71,1.22-1.43,2.44-2.14,3.67c0.71,1.25,1.42,2.51,2.13,3.76
+ C138.82,58.36,140.24,58.39,141.67,58.42z"/>
+
+ <linearGradient id="SVGID_366_" gradientUnits="userSpaceOnUse" x1="124.0405" y1="-296.5273" x2="128.3013" y2="-289.1475" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_366_)" d="M141.68,47.42c0.72-1.23,1.43-2.46,2.15-3.69c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.02-2.85-0.04-4.28-0.06c-0.71,1.23-1.43,2.45-2.14,3.67c0.71,1.25,1.42,2.5,2.13,3.75
+ C138.83,47.37,140.26,47.4,141.68,47.42z"/>
+
+ <linearGradient id="SVGID_367_" gradientUnits="userSpaceOnUse" x1="124.02" y1="-307.5225" x2="128.2886" y2="-300.1291" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_367_)" d="M141.7,36.43c0.71-1.23,1.43-2.46,2.14-3.69c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.01-2.85-0.03-4.28-0.04c-0.71,1.23-1.43,2.46-2.14,3.69c0.71,1.25,1.42,2.49,2.13,3.74
+ C138.85,36.39,140.27,36.41,141.7,36.43z"/>
+
+ <linearGradient id="SVGID_368_" gradientUnits="userSpaceOnUse" x1="124.0034" y1="-318.5122" x2="128.2773" y2="-311.1096" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_368_)" d="M141.71,25.43c0.71-1.23,1.43-2.47,2.14-3.7c-0.71-1.25-1.42-2.49-2.13-3.73
+ c-1.42-0.01-2.85-0.02-4.27-0.03c-0.71,1.23-1.43,2.46-2.14,3.69c0.71,1.25,1.42,2.49,2.13,3.73
+ C138.87,25.41,140.29,25.42,141.71,25.43z"/>
+
+ <linearGradient id="SVGID_369_" gradientUnits="userSpaceOnUse" x1="123.9839" y1="-329.5044" x2="128.2651" y2="-322.0891" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_369_)" d="M141.73,14.44c0.71-1.24,1.43-2.48,2.14-3.71c-0.71-1.24-1.42-2.48-2.13-3.72
+ c-1.43,0-2.85-0.01-4.27-0.01c-0.71,1.24-1.43,2.47-2.14,3.7c0.71,1.24,1.42,2.48,2.13,3.72C138.88,14.42,140.3,14.43,141.73,14.44
+ z"/>
+
+ <linearGradient id="SVGID_370_" gradientUnits="userSpaceOnUse" x1="125.0405" y1="-338.6304" x2="128.252" y2="-333.068" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_370_)" d="M135.34-0.28c0.71,1.24,1.42,2.48,2.13,3.71c1.42,0,2.85,0,4.27,0.01
+ c0.71-1.24,1.43-2.48,2.14-3.72C141.04-0.28,138.19-0.28,135.34-0.28z"/>
+
+ <linearGradient id="SVGID_371_" gradientUnits="userSpaceOnUse" x1="134.9282" y1="-258.8154" x2="138.0298" y2="-253.4434" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_371_)" d="M132.97,81.5c-0.71-1.26-1.42-2.52-2.13-3.78c-1.43-0.05-2.85-0.1-4.28-0.16
+ c-0.71,1.21-1.43,2.41-2.15,3.61C127.26,81.29,130.12,81.39,132.97,81.5z"/>
+
+ <linearGradient id="SVGID_372_" gradientUnits="userSpaceOnUse" x1="134.9053" y1="-269.7573" x2="139.1196" y2="-262.4579" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_372_)" d="M130.84,74.17c0.72-1.21,1.43-2.42,2.15-3.64c-0.71-1.26-1.42-2.51-2.13-3.77
+ c-1.43-0.04-2.85-0.09-4.28-0.14c-0.71,1.21-1.43,2.41-2.14,3.62c0.71,1.25,1.42,2.51,2.13,3.77
+ C127.99,74.07,129.42,74.12,130.84,74.17z"/>
+
+ <linearGradient id="SVGID_373_" gradientUnits="userSpaceOnUse" x1="134.8804" y1="-280.707" x2="139.1064" y2="-273.3873" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_373_)" d="M130.86,63.22c0.71-1.21,1.43-2.43,2.15-3.65c-0.71-1.25-1.42-2.5-2.13-3.76
+ c-1.43-0.03-2.85-0.07-4.28-0.11c-0.71,1.21-1.43,2.42-2.14,3.63c0.71,1.25,1.42,2.5,2.13,3.76
+ C128.01,63.14,129.44,63.19,130.86,63.22z"/>
+
+ <linearGradient id="SVGID_374_" gradientUnits="userSpaceOnUse" x1="134.8579" y1="-291.6499" x2="139.0913" y2="-284.3174" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_374_)" d="M130.88,52.28c0.71-1.22,1.43-2.44,2.14-3.66c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.03-2.85-0.06-4.28-0.09c-0.71,1.22-1.43,2.43-2.14,3.64c0.71,1.25,1.42,2.5,2.13,3.75
+ C128.03,52.21,129.45,52.24,130.88,52.28z"/>
+
+ <linearGradient id="SVGID_375_" gradientUnits="userSpaceOnUse" x1="134.8335" y1="-302.5942" x2="139.0767" y2="-295.2449" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_375_)" d="M130.9,41.33c0.71-1.22,1.43-2.44,2.14-3.67c-0.71-1.25-1.42-2.49-2.13-3.74
+ c-1.43-0.02-2.85-0.04-4.28-0.07c-0.72,1.22-1.43,2.44-2.15,3.66c0.71,1.24,1.42,2.49,2.13,3.74
+ C128.05,41.27,129.47,41.3,130.9,41.33z"/>
+
+ <linearGradient id="SVGID_376_" gradientUnits="userSpaceOnUse" x1="134.8101" y1="-313.5381" x2="139.062" y2="-306.1735" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_376_)" d="M130.92,30.38c0.71-1.22,1.43-2.45,2.14-3.68c-0.71-1.24-1.42-2.49-2.13-3.73
+ c-1.42-0.01-2.85-0.03-4.28-0.05c-0.71,1.22-1.43,2.44-2.14,3.67c0.71,1.24,1.42,2.48,2.13,3.72
+ C128.07,30.34,129.49,30.36,130.92,30.38z"/>
+
+ <linearGradient id="SVGID_377_" gradientUnits="userSpaceOnUse" x1="134.7881" y1="-324.4824" x2="139.0493" y2="-317.1017" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_377_)" d="M130.94,19.44c0.71-1.23,1.43-2.46,2.14-3.69c-0.71-1.24-1.42-2.48-2.13-3.72
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.23-1.43,2.45-2.14,3.68c0.71,1.24,1.42,2.47,2.13,3.71
+ C128.09,19.41,129.51,19.42,130.94,19.44z"/>
+
+ <linearGradient id="SVGID_378_" gradientUnits="userSpaceOnUse" x1="134.7637" y1="-335.4282" x2="139.0337" y2="-328.0323" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_378_)" d="M130.95,8.48c0.71-1.23,1.43-2.46,2.14-3.7c-0.71-1.24-1.42-2.47-2.13-3.71c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.23-1.43,2.46-2.14,3.69c0.71,1.23,1.42,2.46,2.13,3.7C128.1,8.47,129.53,8.48,130.95,8.48z"/>
+
+ <linearGradient id="SVGID_379_" gradientUnits="userSpaceOnUse" x1="146.1016" y1="-264.2944" x2="150.2773" y2="-257.0618" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_379_)" d="M119.67,79.61c0.72-1.2,1.43-2.39,2.14-3.59c-0.71-1.26-1.42-2.52-2.13-3.77
+ c-1.43-0.06-2.85-0.12-4.28-0.18c-0.72,1.19-1.43,2.39-2.15,3.58c0.71,1.26,1.42,2.51,2.13,3.77
+ C116.81,79.48,118.24,79.54,119.67,79.61z"/>
+
+ <linearGradient id="SVGID_380_" gradientUnits="userSpaceOnUse" x1="146.0728" y1="-275.1763" x2="150.2603" y2="-267.9233" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_380_)" d="M119.69,68.72c0.72-1.2,1.43-2.4,2.15-3.6c-0.71-1.25-1.42-2.51-2.13-3.76
+ c-1.43-0.05-2.85-0.1-4.28-0.15c-0.71,1.2-1.43,2.39-2.15,3.59c0.71,1.25,1.42,2.5,2.13,3.76
+ C116.84,68.61,118.26,68.67,119.69,68.72z"/>
+
+ <linearGradient id="SVGID_381_" gradientUnits="userSpaceOnUse" x1="146.0444" y1="-286.0601" x2="150.2437" y2="-278.7868" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_381_)" d="M119.71,57.84c0.72-1.2,1.43-2.41,2.15-3.62c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.04-2.85-0.08-4.28-0.13c-0.71,1.2-1.43,2.4-2.14,3.6c0.71,1.25,1.42,2.49,2.13,3.74
+ C116.86,57.74,118.28,57.79,119.71,57.84z"/>
+
+ <linearGradient id="SVGID_382_" gradientUnits="userSpaceOnUse" x1="146.0161" y1="-296.9409" x2="150.2271" y2="-289.6474" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_382_)" d="M119.73,46.95c0.72-1.21,1.43-2.42,2.14-3.63c-0.71-1.25-1.42-2.49-2.13-3.73
+ c-1.43-0.03-2.85-0.07-4.28-0.1c-0.71,1.21-1.43,2.41-2.14,3.62c0.71,1.24,1.42,2.49,2.13,3.73
+ C116.88,46.87,118.3,46.91,119.73,46.95z"/>
+
+ <linearGradient id="SVGID_383_" gradientUnits="userSpaceOnUse" x1="145.9873" y1="-307.8242" x2="150.21" y2="-300.5104" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_383_)" d="M119.75,36.06c0.71-1.21,1.43-2.43,2.14-3.64c-0.71-1.24-1.42-2.48-2.13-3.72
+ c-1.42-0.02-2.85-0.05-4.28-0.07c-0.71,1.21-1.43,2.42-2.14,3.63c0.71,1.24,1.42,2.47,2.13,3.71
+ C116.9,36,118.33,36.04,119.75,36.06z"/>
+
+ <linearGradient id="SVGID_384_" gradientUnits="userSpaceOnUse" x1="145.9595" y1="-318.7065" x2="150.1938" y2="-311.3724" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_384_)" d="M119.77,25.18c0.71-1.22,1.43-2.44,2.14-3.66c-0.71-1.24-1.42-2.47-2.13-3.71
+ c-1.42-0.01-2.85-0.03-4.28-0.04c-0.71,1.22-1.43,2.43-2.14,3.64c0.71,1.23,1.42,2.47,2.13,3.7
+ C116.92,25.14,118.35,25.16,119.77,25.18z"/>
+
+ <linearGradient id="SVGID_385_" gradientUnits="userSpaceOnUse" x1="145.9312" y1="-329.5879" x2="150.1763" y2="-322.2351" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_385_)" d="M119.79,14.29c0.71-1.22,1.43-2.45,2.14-3.67c-0.71-1.23-1.42-2.47-2.13-3.69
+ c-1.43,0-2.85-0.01-4.28-0.02c-0.71,1.22-1.43,2.44-2.14,3.66c0.71,1.23,1.42,2.46,2.13,3.69
+ C116.95,14.27,118.37,14.28,119.79,14.29z"/>
+
+ <linearGradient id="SVGID_386_" gradientUnits="userSpaceOnUse" x1="146.9658" y1="-338.6309" x2="150.1602" y2="-333.0981" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_386_)" d="M113.42-0.28c0.71,1.22,1.42,2.45,2.13,3.67c1.42,0,2.85,0,4.27,0.01
+ c0.71-1.23,1.43-2.45,2.14-3.68C119.11-0.28,116.27-0.28,113.42-0.28z"/>
+
+ <linearGradient id="SVGID_387_" gradientUnits="userSpaceOnUse" x1="156.9312" y1="-259.7856" x2="159.9639" y2="-254.5328" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_387_)" d="M111,80.54c-0.71-1.26-1.42-2.52-2.13-3.77c-1.43-0.08-2.85-0.15-4.28-0.23
+ c-0.71,1.18-1.43,2.35-2.14,3.52C105.3,80.23,108.15,80.39,111,80.54z"/>
+
+ <linearGradient id="SVGID_388_" gradientUnits="userSpaceOnUse" x1="156.9004" y1="-270.5967" x2="161.0474" y2="-263.4139" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_388_)" d="M108.88,73.27c0.71-1.19,1.43-2.37,2.15-3.56c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.06-2.85-0.13-4.28-0.2c-0.72,1.18-1.43,2.36-2.15,3.54c0.71,1.25,1.42,2.5,2.13,3.75
+ C106.03,73.12,107.45,73.2,108.88,73.27z"/>
+
+ <linearGradient id="SVGID_389_" gradientUnits="userSpaceOnUse" x1="156.8677" y1="-281.4067" x2="161.0288" y2="-274.1994" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_389_)" d="M108.9,62.45c0.71-1.19,1.43-2.38,2.14-3.57c-0.71-1.25-1.42-2.5-2.13-3.74
+ c-1.42-0.05-2.85-0.11-4.28-0.16c-0.71,1.18-1.43,2.37-2.14,3.55c0.71,1.25,1.42,2.49,2.13,3.74
+ C106.05,62.33,107.48,62.39,108.9,62.45z"/>
+
+ <linearGradient id="SVGID_390_" gradientUnits="userSpaceOnUse" x1="156.8359" y1="-292.2158" x2="161.0098" y2="-284.9865" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_390_)" d="M108.93,51.64c0.72-1.2,1.43-2.39,2.15-3.59c-0.71-1.24-1.42-2.49-2.13-3.73
+ c-1.42-0.04-2.85-0.09-4.27-0.13c-0.71,1.19-1.43,2.38-2.14,3.57c0.71,1.24,1.42,2.48,2.13,3.72
+ C106.08,51.54,107.5,51.59,108.93,51.64z"/>
+
+ <linearGradient id="SVGID_391_" gradientUnits="userSpaceOnUse" x1="156.8042" y1="-303.0273" x2="160.9932" y2="-295.7719" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_391_)" d="M108.95,40.82c0.72-1.2,1.43-2.4,2.15-3.61c-0.71-1.24-1.42-2.48-2.13-3.71
+ c-1.42-0.03-2.85-0.06-4.27-0.1c-0.71,1.2-1.43,2.4-2.15,3.59c0.71,1.23,1.42,2.47,2.13,3.71
+ C106.1,40.74,107.53,40.78,108.95,40.82z"/>
+
+ <linearGradient id="SVGID_392_" gradientUnits="userSpaceOnUse" x1="156.7739" y1="-313.8354" x2="160.9746" y2="-306.5597" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_392_)" d="M108.97,30.01c0.71-1.2,1.43-2.41,2.15-3.62c-0.71-1.23-1.42-2.46-2.13-3.69
+ c-1.42-0.02-2.85-0.05-4.27-0.07c-0.71,1.2-1.43,2.41-2.15,3.61c0.71,1.23,1.42,2.46,2.13,3.69
+ C106.12,29.95,107.55,29.98,108.97,30.01z"/>
+
+ <linearGradient id="SVGID_393_" gradientUnits="userSpaceOnUse" x1="156.7407" y1="-324.646" x2="160.9561" y2="-317.3448" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_393_)" d="M109,19.19c0.71-1.21,1.43-2.42,2.14-3.63c-0.71-1.23-1.42-2.46-2.13-3.68
+ c-1.42-0.01-2.85-0.02-4.27-0.04c-0.71,1.21-1.43,2.42-2.14,3.62c0.71,1.22,1.42,2.45,2.13,3.67
+ C106.15,19.16,107.57,19.17,109,19.19z"/>
+
+ <linearGradient id="SVGID_394_" gradientUnits="userSpaceOnUse" x1="156.708" y1="-335.4565" x2="160.936" y2="-328.1334" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_394_)" d="M109.02,8.38c0.71-1.21,1.43-2.43,2.14-3.65c-0.71-1.22-1.42-2.44-2.13-3.67
+ c-1.42,0-2.85,0-4.27,0c-0.71,1.21-1.43,2.43-2.14,3.64c0.71,1.21,1.42,2.43,2.13,3.65C106.18,8.36,107.6,8.37,109.02,8.38z"/>
+
+ <linearGradient id="SVGID_395_" gradientUnits="userSpaceOnUse" x1="168.0923" y1="-265.375" x2="172.1914" y2="-258.2751" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_395_)" d="M97.71,78.44c0.71-1.17,1.43-2.33,2.14-3.5c-0.71-1.25-1.42-2.5-2.13-3.75
+ c-1.43-0.08-2.85-0.16-4.28-0.25c-0.71,1.16-1.43,2.33-2.14,3.48c0.71,1.25,1.42,2.5,2.12,3.75
+ C94.86,78.26,96.28,78.35,97.71,78.44z"/>
+
+ <linearGradient id="SVGID_396_" gradientUnits="userSpaceOnUse" x1="168.0586" y1="-276.0962" x2="172.1719" y2="-268.9718" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_396_)" d="M97.73,67.71c0.71-1.17,1.43-2.34,2.15-3.52c-0.71-1.25-1.42-2.49-2.13-3.73
+ c-1.42-0.07-2.85-0.14-4.27-0.21c-0.72,1.17-1.43,2.34-2.15,3.5c0.71,1.24,1.42,2.49,2.13,3.73
+ C94.88,67.56,96.31,67.64,97.73,67.71z"/>
+
+ <linearGradient id="SVGID_397_" gradientUnits="userSpaceOnUse" x1="168.0234" y1="-286.8203" x2="172.1543" y2="-279.6655" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_397_)" d="M97.76,56.99c0.72-1.18,1.43-2.36,2.15-3.54c-0.71-1.24-1.42-2.48-2.13-3.72
+ c-1.43-0.06-2.85-0.12-4.28-0.17c-0.72,1.18-1.43,2.35-2.14,3.52c0.71,1.23,1.42,2.47,2.13,3.71
+ C94.91,56.86,96.34,56.92,97.76,56.99z"/>
+
+ <linearGradient id="SVGID_398_" gradientUnits="userSpaceOnUse" x1="167.9888" y1="-297.542" x2="172.1348" y2="-290.3609" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_398_)" d="M97.79,46.26c0.71-1.18,1.43-2.37,2.14-3.56c-0.71-1.23-1.42-2.47-2.13-3.7
+ c-1.42-0.04-2.85-0.09-4.27-0.13c-0.72,1.18-1.43,2.36-2.15,3.54c0.71,1.23,1.42,2.46,2.13,3.69
+ C94.94,46.15,96.36,46.21,97.79,46.26z"/>
+
+ <linearGradient id="SVGID_399_" gradientUnits="userSpaceOnUse" x1="167.9531" y1="-308.2676" x2="172.1167" y2="-301.0561" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_399_)" d="M97.81,35.53c0.72-1.19,1.43-2.38,2.14-3.57c-0.71-1.23-1.42-2.46-2.12-3.69
+ c-1.43-0.03-2.85-0.06-4.28-0.1c-0.71,1.19-1.43,2.37-2.14,3.56c0.71,1.22,1.42,2.45,2.12,3.67
+ C94.96,35.45,96.39,35.49,97.81,35.53z"/>
+
+ <linearGradient id="SVGID_400_" gradientUnits="userSpaceOnUse" x1="167.9194" y1="-318.9868" x2="172.0981" y2="-311.7491" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_400_)" d="M97.84,24.81c0.71-1.2,1.43-2.39,2.14-3.59c-0.71-1.22-1.42-2.44-2.13-3.66
+ c-1.42-0.02-2.85-0.04-4.27-0.06c-0.72,1.19-1.43,2.39-2.14,3.58c0.71,1.22,1.42,2.43,2.12,3.66
+ C94.99,24.75,96.42,24.78,97.84,24.81z"/>
+
+ <linearGradient id="SVGID_401_" gradientUnits="userSpaceOnUse" x1="167.8838" y1="-329.7104" x2="172.0776" y2="-322.4465" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_401_)" d="M97.87,14.08c0.71-1.2,1.43-2.4,2.14-3.61c-0.71-1.22-1.42-2.43-2.13-3.65
+ c-1.42-0.01-2.85-0.01-4.27-0.02c-0.72,1.2-1.43,2.4-2.14,3.6c0.71,1.21,1.42,2.42,2.13,3.63C95.02,14.05,96.44,14.06,97.87,14.08z
+ "/>
+
+ <linearGradient id="SVGID_402_" gradientUnits="userSpaceOnUse" x1="168.8901" y1="-338.6313" x2="172.0601" y2="-333.1409" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_402_)" d="M91.49-0.28c0.71,1.2,1.42,2.41,2.13,3.62c1.42,0,2.85,0.01,4.27,0.01
+ c0.71-1.21,1.43-2.42,2.14-3.63C97.19-0.28,94.34-0.28,91.49-0.28z"/>
+
+ <linearGradient id="SVGID_403_" gradientUnits="userSpaceOnUse" x1="178.9194" y1="-261.1211" x2="181.877" y2="-255.9985" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_403_)" d="M89.05,79.2c-0.71-1.25-1.42-2.5-2.13-3.75c-1.42-0.1-2.85-0.19-4.27-0.3
+ c-0.71,1.14-1.43,2.29-2.14,3.42C83.35,78.79,86.2,79,89.05,79.2z"/>
+
+ <linearGradient id="SVGID_404_" gradientUnits="userSpaceOnUse" x1="178.8828" y1="-271.7446" x2="182.9463" y2="-264.7065" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_404_)" d="M86.93,72.01c0.71-1.15,1.43-2.31,2.15-3.46c-0.71-1.24-1.42-2.48-2.13-3.73
+ c-1.42-0.08-2.85-0.17-4.27-0.25c-0.71,1.15-1.43,2.3-2.14,3.44c0.71,1.24,1.42,2.48,2.12,3.72
+ C84.08,71.83,85.51,71.92,86.93,72.01z"/>
+
+ <linearGradient id="SVGID_405_" gradientUnits="userSpaceOnUse" x1="178.8457" y1="-282.3716" x2="182.9292" y2="-275.2988" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_405_)" d="M86.96,61.38c0.71-1.16,1.43-2.32,2.15-3.48c-0.71-1.24-1.42-2.47-2.13-3.71
+ c-1.43-0.07-2.85-0.14-4.28-0.21c-0.71,1.16-1.43,2.31-2.14,3.46c0.71,1.23,1.42,2.46,2.12,3.7
+ C84.11,61.23,85.54,61.31,86.96,61.38z"/>
+
+ <linearGradient id="SVGID_406_" gradientUnits="userSpaceOnUse" x1="178.8086" y1="-292.9961" x2="182.9087" y2="-285.8945" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_406_)" d="M86.99,50.75c0.71-1.17,1.43-2.33,2.15-3.51c-0.71-1.23-1.42-2.46-2.13-3.68
+ c-1.43-0.06-2.85-0.12-4.28-0.17c-0.71,1.17-1.43,2.33-2.14,3.49c0.71,1.22,1.42,2.45,2.13,3.68
+ C84.14,50.62,85.56,50.69,86.99,50.75z"/>
+
+ <linearGradient id="SVGID_407_" gradientUnits="userSpaceOnUse" x1="178.7725" y1="-303.6211" x2="182.8911" y2="-296.4874" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_407_)" d="M87.01,40.12c0.72-1.17,1.43-2.35,2.15-3.53c-0.71-1.22-1.42-2.45-2.13-3.67
+ c-1.42-0.04-2.85-0.09-4.27-0.13c-0.72,1.17-1.43,2.34-2.14,3.51c0.71,1.22,1.42,2.44,2.12,3.66
+ C84.17,40.02,85.59,40.07,87.01,40.12z"/>
+
+ <linearGradient id="SVGID_408_" gradientUnits="userSpaceOnUse" x1="178.7358" y1="-314.2451" x2="182.8716" y2="-307.0818" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_408_)" d="M87.04,29.49c0.72-1.18,1.43-2.36,2.15-3.54c-0.71-1.22-1.42-2.43-2.13-3.64
+ c-1.42-0.03-2.85-0.06-4.27-0.09c-0.71,1.18-1.43,2.36-2.14,3.53c0.71,1.21,1.42,2.42,2.13,3.64
+ C84.19,29.41,85.62,29.45,87.04,29.49z"/>
+
+ <linearGradient id="SVGID_409_" gradientUnits="userSpaceOnUse" x1="178.6992" y1="-324.8711" x2="182.853" y2="-317.6765" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_409_)" d="M87.07,18.86c0.71-1.19,1.43-2.38,2.14-3.57c-0.71-1.21-1.42-2.42-2.12-3.62
+ c-1.42-0.02-2.85-0.03-4.27-0.05c-0.71,1.19-1.43,2.37-2.14,3.55c0.71,1.2,1.42,2.41,2.12,3.61
+ C84.22,18.81,85.65,18.84,87.07,18.86z"/>
+
+ <linearGradient id="SVGID_410_" gradientUnits="userSpaceOnUse" x1="178.6616" y1="-335.4951" x2="182.8325" y2="-328.2709" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_410_)" d="M87.1,8.23c0.71-1.19,1.43-2.39,2.14-3.58c-0.71-1.21-1.42-2.41-2.13-3.61c-1.42,0-2.85,0-4.27,0
+ c-0.71,1.19-1.43,2.38-2.14,3.57C81.41,5.8,82.12,7,82.83,8.2C84.25,8.21,85.67,8.22,87.1,8.23z"/>
+
+ <linearGradient id="SVGID_411_" gradientUnits="userSpaceOnUse" x1="190.0698" y1="-266.7964" x2="194.0757" y2="-259.858" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_411_)" d="M75.77,76.91c0.71-1.13,1.43-2.26,2.14-3.4c-0.71-1.24-1.42-2.48-2.12-3.72
+ c-1.42-0.1-2.85-0.21-4.27-0.31c-0.71,1.13-1.43,2.25-2.14,3.38c0.71,1.23,1.42,2.47,2.12,3.71
+ C72.93,76.68,74.35,76.79,75.77,76.91z"/>
+
+ <linearGradient id="SVGID_412_" gradientUnits="userSpaceOnUse" x1="190.0327" y1="-277.3081" x2="194.0586" y2="-270.3351" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_412_)" d="M75.8,66.39c0.71-1.14,1.43-2.28,2.14-3.42c-0.71-1.23-1.42-2.46-2.12-3.69
+ c-1.42-0.09-2.85-0.17-4.27-0.26c-0.71,1.14-1.43,2.27-2.14,3.4c0.71,1.23,1.42,2.45,2.12,3.69C72.95,66.19,74.38,66.29,75.8,66.39
+ z"/>
+
+ <linearGradient id="SVGID_413_" gradientUnits="userSpaceOnUse" x1="189.9941" y1="-287.8203" x2="194.04" y2="-280.8126" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_413_)" d="M75.83,55.87c0.71-1.15,1.43-2.29,2.14-3.44c-0.71-1.23-1.42-2.45-2.13-3.67
+ c-1.42-0.07-2.85-0.15-4.27-0.22c-0.71,1.14-1.43,2.28-2.14,3.42c0.71,1.22,1.42,2.44,2.12,3.66
+ C72.98,55.71,74.4,55.79,75.83,55.87z"/>
+
+ <linearGradient id="SVGID_414_" gradientUnits="userSpaceOnUse" x1="189.957" y1="-298.3311" x2="194.0229" y2="-291.2887" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_414_)" d="M75.86,45.35c0.71-1.15,1.43-2.31,2.14-3.47c-0.71-1.22-1.42-2.43-2.13-3.65
+ c-1.42-0.06-2.85-0.11-4.27-0.17c-0.71,1.15-1.43,2.3-2.14,3.44c0.71,1.21,1.42,2.42,2.12,3.64
+ C73.01,45.22,74.43,45.29,75.86,45.35z"/>
+
+ <linearGradient id="SVGID_415_" gradientUnits="userSpaceOnUse" x1="189.918" y1="-308.8442" x2="194.0044" y2="-301.7663" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_415_)" d="M75.88,34.84c0.71-1.16,1.43-2.33,2.14-3.49c-0.71-1.21-1.42-2.42-2.12-3.63
+ c-1.43-0.04-2.85-0.08-4.27-0.12c-0.71,1.16-1.43,2.32-2.14,3.47c0.71,1.2,1.42,2.41,2.13,3.61
+ C73.04,34.73,74.46,34.78,75.88,34.84z"/>
+
+ <linearGradient id="SVGID_416_" gradientUnits="userSpaceOnUse" x1="189.8809" y1="-319.356" x2="193.9873" y2="-312.2434" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_416_)" d="M75.91,24.32c0.71-1.17,1.43-2.34,2.14-3.51c-0.71-1.2-1.42-2.4-2.12-3.6
+ c-1.43-0.02-2.85-0.05-4.28-0.08c-0.71,1.16-1.43,2.33-2.14,3.49c0.71,1.2,1.42,2.39,2.13,3.59
+ C73.06,24.24,74.49,24.28,75.91,24.32z"/>
+
+ <linearGradient id="SVGID_417_" gradientUnits="userSpaceOnUse" x1="189.8408" y1="-329.8691" x2="193.9688" y2="-322.7194" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_417_)" d="M75.94,13.8c0.71-1.18,1.43-2.35,2.15-3.54c-0.71-1.2-1.42-2.39-2.12-3.58
+ c-1.43-0.01-2.85-0.02-4.28-0.03c-0.71,1.17-1.43,2.35-2.14,3.52c0.71,1.19,1.42,2.37,2.13,3.57
+ C73.09,13.76,74.52,13.78,75.94,13.8z"/>
+
+ <linearGradient id="SVGID_418_" gradientUnits="userSpaceOnUse" x1="190.8145" y1="-338.6304" x2="193.9517" y2="-333.1966" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_418_)" d="M69.57-0.28c0.71,1.18,1.42,2.36,2.13,3.54c1.42,0.01,2.85,0.01,4.27,0.02
+ c0.71-1.18,1.43-2.37,2.14-3.56C75.26-0.28,72.42-0.28,69.57-0.28z"/>
+
+ <linearGradient id="SVGID_419_" gradientUnits="userSpaceOnUse" x1="200.8877" y1="-262.8164" x2="203.7612" y2="-257.8393" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_419_)" d="M67.13,77.49c-0.71-1.24-1.42-2.47-2.12-3.7c-1.42-0.12-2.85-0.24-4.27-0.37
+ c-0.71,1.1-1.43,2.2-2.14,3.3C61.44,76.99,64.28,77.24,67.13,77.49z"/>
+
+ <linearGradient id="SVGID_420_" gradientUnits="userSpaceOnUse" x1="200.8506" y1="-273.207" x2="204.8164" y2="-266.338" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_420_)" d="M65.01,70.42c0.71-1.12,1.43-2.23,2.14-3.36c-0.71-1.23-1.42-2.45-2.12-3.68
+ c-1.43-0.1-2.85-0.21-4.27-0.32c-0.71,1.11-1.43,2.22-2.14,3.33c0.71,1.22,1.42,2.44,2.12,3.67
+ C62.17,70.19,63.59,70.31,65.01,70.42z"/>
+
+ <linearGradient id="SVGID_421_" gradientUnits="userSpaceOnUse" x1="200.8115" y1="-283.5967" x2="204.8003" y2="-276.6879" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_421_)" d="M65.04,60.03c0.71-1.12,1.43-2.25,2.14-3.38c-0.71-1.22-1.42-2.44-2.12-3.65
+ c-1.43-0.09-2.85-0.17-4.27-0.26c-0.71,1.12-1.43,2.24-2.14,3.35c0.71,1.21,1.41,2.42,2.12,3.64
+ C62.19,59.83,63.62,59.93,65.04,60.03z"/>
+
+ <linearGradient id="SVGID_422_" gradientUnits="userSpaceOnUse" x1="200.7739" y1="-293.9863" x2="204.7837" y2="-287.0412" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_422_)" d="M65.07,49.63c0.71-1.13,1.43-2.27,2.14-3.4c-0.71-1.21-1.42-2.42-2.12-3.63
+ c-1.43-0.07-2.85-0.14-4.27-0.21c-0.71,1.13-1.43,2.26-2.14,3.38c0.71,1.2,1.42,2.41,2.12,3.62
+ C62.22,49.47,63.64,49.55,65.07,49.63z"/>
+
+ <linearGradient id="SVGID_423_" gradientUnits="userSpaceOnUse" x1="200.7354" y1="-304.377" x2="204.7686" y2="-297.3912" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_423_)" d="M65.09,39.23c0.71-1.14,1.43-2.28,2.14-3.43c-0.71-1.2-1.42-2.4-2.12-3.6
+ c-1.42-0.05-2.85-0.11-4.27-0.16c-0.71,1.14-1.43,2.27-2.14,3.41c0.71,1.19,1.42,2.39,2.12,3.59
+ C62.25,39.1,63.67,39.17,65.09,39.23z"/>
+
+ <linearGradient id="SVGID_424_" gradientUnits="userSpaceOnUse" x1="200.6973" y1="-314.7651" x2="204.751" y2="-307.7439" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_424_)" d="M65.12,28.84c0.71-1.15,1.43-2.3,2.14-3.45c-0.71-1.19-1.42-2.39-2.13-3.58
+ c-1.42-0.04-2.85-0.07-4.27-0.11c-0.71,1.15-1.43,2.29-2.14,3.43c0.71,1.19,1.42,2.37,2.13,3.56
+ C62.27,28.74,63.7,28.79,65.12,28.84z"/>
+
+ <linearGradient id="SVGID_425_" gradientUnits="userSpaceOnUse" x1="200.6582" y1="-325.1562" x2="204.7363" y2="-318.0927" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_425_)" d="M65.15,18.44c0.72-1.16,1.43-2.32,2.15-3.48c-0.71-1.19-1.42-2.37-2.13-3.55
+ c-1.42-0.02-2.85-0.04-4.27-0.06c-0.71,1.16-1.43,2.31-2.14,3.46c0.71,1.18,1.42,2.36,2.13,3.54
+ C62.3,18.38,63.72,18.41,65.15,18.44z"/>
+
+ <linearGradient id="SVGID_426_" gradientUnits="userSpaceOnUse" x1="200.6187" y1="-335.5449" x2="204.7178" y2="-328.445" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_426_)" d="M65.17,8.04c0.71-1.17,1.43-2.33,2.15-3.5c-0.71-1.18-1.42-2.36-2.13-3.53c-1.42,0-2.85,0-4.27,0
+ c-0.72,1.17-1.43,2.33-2.14,3.49C59.49,5.66,60.19,6.83,60.9,8C62.33,8.02,63.75,8.03,65.17,8.04z"/>
+
+ <linearGradient id="SVGID_427_" gradientUnits="userSpaceOnUse" x1="212.0288" y1="-268.5566" x2="215.9248" y2="-261.8086" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_427_)" d="M53.87,75c0.71-1.09,1.43-2.18,2.14-3.28c-0.71-1.22-1.42-2.44-2.12-3.66
+ c-1.42-0.12-2.85-0.25-4.27-0.38c-0.71,1.09-1.42,2.17-2.14,3.25c0.71,1.21,1.42,2.43,2.12,3.65C51.02,74.72,52.45,74.86,53.87,75z
+ "/>
+
+ <linearGradient id="SVGID_428_" gradientUnits="userSpaceOnUse" x1="211.9917" y1="-278.8057" x2="215.9116" y2="-272.0162" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_428_)" d="M53.89,64.74c0.71-1.1,1.43-2.2,2.14-3.3c-0.71-1.22-1.42-2.43-2.12-3.63
+ c-1.42-0.1-2.84-0.21-4.27-0.32c-0.71,1.1-1.43,2.19-2.14,3.28c0.71,1.21,1.42,2.41,2.12,3.62C51.05,64.5,52.47,64.62,53.89,64.74z
+ "/>
+
+ <linearGradient id="SVGID_429_" gradientUnits="userSpaceOnUse" x1="211.9541" y1="-289.0591" x2="215.8999" y2="-282.2248" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_429_)" d="M53.92,54.48c0.71-1.11,1.43-2.22,2.14-3.33c-0.71-1.2-1.41-2.41-2.12-3.61
+ c-1.42-0.09-2.85-0.17-4.27-0.26c-0.71,1.1-1.43,2.21-2.14,3.3c0.71,1.2,1.42,2.39,2.12,3.6C51.07,54.28,52.5,54.38,53.92,54.48z"
+ />
+
+ <linearGradient id="SVGID_430_" gradientUnits="userSpaceOnUse" x1="211.9165" y1="-299.3091" x2="215.8857" y2="-292.4342" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_430_)" d="M53.94,44.22c0.72-1.12,1.43-2.24,2.14-3.36c-0.71-1.2-1.42-2.39-2.12-3.58
+ c-1.42-0.07-2.85-0.14-4.27-0.21c-0.72,1.12-1.43,2.23-2.14,3.33c0.71,1.19,1.42,2.37,2.12,3.57
+ C51.1,44.06,52.52,44.14,53.94,44.22z"/>
+
+ <linearGradient id="SVGID_431_" gradientUnits="userSpaceOnUse" x1="211.8784" y1="-309.5605" x2="215.873" y2="-302.6416" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_431_)" d="M53.97,33.97c0.71-1.13,1.43-2.25,2.14-3.39c-0.71-1.18-1.42-2.37-2.12-3.55
+ c-1.42-0.05-2.85-0.1-4.27-0.15C49,28,48.29,29.12,47.57,30.24c0.71,1.18,1.42,2.36,2.13,3.54C51.12,33.84,52.54,33.91,53.97,33.97
+ z"/>
+
+ <linearGradient id="SVGID_432_" gradientUnits="userSpaceOnUse" x1="211.8413" y1="-319.811" x2="215.8604" y2="-312.8499" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_432_)" d="M53.99,23.71c0.71-1.13,1.43-2.27,2.14-3.42c-0.71-1.18-1.42-2.35-2.12-3.52
+ c-1.42-0.03-2.85-0.06-4.27-0.09c-0.71,1.13-1.43,2.26-2.14,3.39c0.71,1.17,1.42,2.34,2.13,3.51
+ C51.15,23.62,52.57,23.67,53.99,23.71z"/>
+
+ <linearGradient id="SVGID_433_" gradientUnits="userSpaceOnUse" x1="211.8042" y1="-330.0625" x2="215.8481" y2="-323.0582" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_433_)" d="M54.02,13.45c0.71-1.14,1.43-2.29,2.14-3.44c-0.71-1.17-1.42-2.33-2.12-3.5
+ c-1.42-0.01-2.85-0.02-4.27-0.04c-0.71,1.14-1.43,2.28-2.14,3.42c0.71,1.16,1.42,2.32,2.13,3.48C51.17,13.4,52.6,13.43,54.02,13.45
+ z"/>
+
+ <linearGradient id="SVGID_434_" gradientUnits="userSpaceOnUse" x1="212.7363" y1="-338.6313" x2="215.8345" y2="-333.2652" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_434_)" d="M47.65-0.28c0.71,1.15,1.42,2.3,2.13,3.45c1.42,0,2.85,0.01,4.27,0.02
+ c0.71-1.15,1.43-2.31,2.14-3.47C53.34-0.28,50.49-0.28,47.65-0.28z"/>
+
+ <linearGradient id="SVGID_435_" gradientUnits="userSpaceOnUse" x1="222.8325" y1="-264.8745" x2="225.6128" y2="-260.0589" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_435_)" d="M45.24,75.4c-0.71-1.22-1.41-2.43-2.12-3.64c-1.42-0.15-2.84-0.29-4.26-0.44
+ c-0.71,1.06-1.42,2.12-2.14,3.17C39.55,74.8,42.39,75.11,45.24,75.4z"/>
+
+ <linearGradient id="SVGID_436_" gradientUnits="userSpaceOnUse" x1="222.7974" y1="-274.979" x2="226.6479" y2="-268.3096" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_436_)" d="M43.12,68.49c0.71-1.07,1.43-2.15,2.14-3.23c-0.71-1.21-1.41-2.41-2.12-3.61
+ c-1.42-0.12-2.84-0.25-4.26-0.38c-0.71,1.07-1.42,2.14-2.13,3.2c0.71,1.2,1.41,2.4,2.12,3.6C40.28,68.21,41.7,68.35,43.12,68.49z"
+ />
+
+ <linearGradient id="SVGID_437_" gradientUnits="userSpaceOnUse" x1="222.7627" y1="-285.083" x2="226.6396" y2="-278.3679" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_437_)" d="M43.14,58.37c0.71-1.08,1.43-2.17,2.14-3.26c-0.71-1.2-1.42-2.39-2.12-3.58
+ c-1.42-0.1-2.84-0.21-4.26-0.32c-0.71,1.08-1.42,2.16-2.14,3.23c0.71,1.19,1.42,2.38,2.12,3.57C40.3,58.14,41.72,58.26,43.14,58.37
+ z"/>
+
+ <linearGradient id="SVGID_438_" gradientUnits="userSpaceOnUse" x1="222.7266" y1="-295.188" x2="226.6313" y2="-288.4247" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_438_)" d="M43.16,48.26c0.71-1.09,1.43-2.19,2.14-3.29c-0.71-1.19-1.42-2.37-2.12-3.55
+ c-1.42-0.08-2.84-0.17-4.27-0.25c-0.71,1.09-1.43,2.18-2.14,3.26c0.71,1.18,1.42,2.35,2.12,3.54
+ C40.32,48.07,41.74,48.17,43.16,48.26z"/>
+
+ <linearGradient id="SVGID_439_" gradientUnits="userSpaceOnUse" x1="222.6895" y1="-305.293" x2="226.6216" y2="-298.4823" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_439_)" d="M43.19,38.15c0.71-1.1,1.43-2.21,2.14-3.32c-0.71-1.18-1.42-2.35-2.12-3.53
+ c-1.42-0.06-2.85-0.13-4.27-0.19c-0.71,1.1-1.43,2.2-2.14,3.29c0.71,1.17,1.42,2.33,2.12,3.51C40.34,38,41.77,38.07,43.19,38.15z"
+ />
+
+ <linearGradient id="SVGID_440_" gradientUnits="userSpaceOnUse" x1="222.6543" y1="-315.397" x2="226.6138" y2="-308.539" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_440_)" d="M43.21,28.04c0.71-1.11,1.43-2.23,2.14-3.35c-0.71-1.17-1.42-2.33-2.12-3.49
+ c-1.42-0.04-2.85-0.09-4.27-0.13c-0.71,1.11-1.43,2.22-2.14,3.32c0.71,1.16,1.42,2.31,2.12,3.48
+ C40.36,27.93,41.79,27.98,43.21,28.04z"/>
+
+ <linearGradient id="SVGID_441_" gradientUnits="userSpaceOnUse" x1="222.6196" y1="-325.5005" x2="226.6055" y2="-318.5968" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_441_)" d="M43.23,17.93c0.71-1.12,1.43-2.25,2.14-3.38c-0.71-1.16-1.42-2.31-2.13-3.46
+ c-1.42-0.02-2.85-0.05-4.27-0.07c-0.71,1.12-1.43,2.24-2.14,3.36c0.71,1.15,1.42,2.29,2.13,3.45
+ C40.38,17.86,41.81,17.89,43.23,17.93z"/>
+
+ <linearGradient id="SVGID_442_" gradientUnits="userSpaceOnUse" x1="222.5825" y1="-335.6055" x2="226.5947" y2="-328.6561" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_442_)" d="M43.25,7.82c0.72-1.13,1.43-2.27,2.14-3.41c-0.71-1.15-1.42-2.29-2.13-3.44
+ c-1.42,0-2.85,0-4.27-0.01c-0.71,1.13-1.43,2.26-2.14,3.39c0.71,1.13,1.42,2.27,2.13,3.41C40.41,7.78,41.83,7.8,43.25,7.82z"/>
+
+ <linearGradient id="SVGID_443_" gradientUnits="userSpaceOnUse" x1="233.9585" y1="-270.6538" x2="237.728" y2="-264.1248" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_443_)" d="M32,72.72c0.71-1.04,1.42-2.09,2.13-3.14c-0.71-1.2-1.42-2.4-2.12-3.59
+ c-1.42-0.15-2.84-0.29-4.26-0.44c-0.71,1.04-1.42,2.07-2.13,3.1c0.7,1.19,1.41,2.39,2.12,3.58C29.16,72.4,30.58,72.56,32,72.72z"/>
+
+ <linearGradient id="SVGID_444_" gradientUnits="userSpaceOnUse" x1="233.9268" y1="-280.5952" x2="237.7271" y2="-274.0129" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_444_)" d="M32.02,62.77c0.71-1.05,1.42-2.11,2.13-3.17c-0.71-1.19-1.42-2.38-2.12-3.56
+ c-1.42-0.12-2.84-0.25-4.26-0.38c-0.71,1.05-1.42,2.1-2.13,3.14c0.71,1.18,1.41,2.36,2.12,3.55C29.18,62.5,30.6,62.64,32.02,62.77z
+ "/>
+
+ <linearGradient id="SVGID_445_" gradientUnits="userSpaceOnUse" x1="233.8955" y1="-290.5352" x2="237.7251" y2="-283.9021" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_445_)" d="M32.03,52.83c0.71-1.06,1.42-2.13,2.14-3.2c-0.71-1.18-1.42-2.35-2.12-3.53
+ c-1.42-0.1-2.84-0.2-4.26-0.31c-0.71,1.06-1.42,2.12-2.13,3.17c0.71,1.17,1.42,2.34,2.12,3.51C29.19,52.59,30.61,52.71,32.03,52.83
+ z"/>
+
+ <linearGradient id="SVGID_446_" gradientUnits="userSpaceOnUse" x1="233.8633" y1="-300.4727" x2="237.7207" y2="-293.7914" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_446_)" d="M32.05,42.88c0.71-1.08,1.42-2.15,2.14-3.24c-0.71-1.17-1.42-2.33-2.13-3.49
+ c-1.42-0.08-2.84-0.16-4.26-0.24c-0.71,1.07-1.42,2.14-2.13,3.21c0.71,1.16,1.42,2.32,2.12,3.48
+ C29.21,42.69,30.63,42.78,32.05,42.88z"/>
+
+ <linearGradient id="SVGID_447_" gradientUnits="userSpaceOnUse" x1="233.8306" y1="-310.4131" x2="237.7173" y2="-303.6811" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_447_)" d="M32.07,32.93c0.71-1.09,1.43-2.17,2.14-3.27c-0.71-1.16-1.42-2.31-2.13-3.46
+ c-1.42-0.06-2.84-0.12-4.27-0.18c-0.71,1.08-1.43,2.16-2.14,3.24c0.71,1.14,1.42,2.29,2.13,3.44
+ C29.23,32.78,30.65,32.86,32.07,32.93z"/>
+
+ <linearGradient id="SVGID_448_" gradientUnits="userSpaceOnUse" x1="233.8008" y1="-320.3525" x2="237.7163" y2="-313.5706" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_448_)" d="M32.09,22.98c0.71-1.1,1.43-2.2,2.14-3.3c-0.71-1.15-1.42-2.29-2.13-3.43
+ c-1.42-0.04-2.85-0.07-4.27-0.11c-0.71,1.1-1.43,2.19-2.14,3.27c0.71,1.13,1.42,2.27,2.13,3.41
+ C29.24,22.88,30.67,22.93,32.09,22.98z"/>
+
+ <linearGradient id="SVGID_449_" gradientUnits="userSpaceOnUse" x1="233.7666" y1="-330.2925" x2="237.7119" y2="-323.459" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_449_)" d="M32.11,13.03c0.71-1.11,1.43-2.22,2.14-3.33c-0.71-1.13-1.42-2.27-2.13-3.4
+ c-1.42-0.01-2.85-0.03-4.27-0.04c-0.71,1.11-1.43,2.21-2.14,3.31c0.71,1.12,1.42,2.25,2.13,3.38
+ C29.26,12.98,30.68,13.01,32.11,13.03z"/>
+
+ <linearGradient id="SVGID_450_" gradientUnits="userSpaceOnUse" x1="234.6597" y1="-338.6313" x2="237.7095" y2="-333.3489" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_450_)" d="M25.72-0.28c0.71,1.11,1.42,2.22,2.13,3.34c1.42,0.01,2.85,0.02,4.27,0.02
+ c0.71-1.12,1.43-2.24,2.14-3.37C31.42-0.28,28.57-0.28,25.72-0.28z"/>
+
+ <linearGradient id="SVGID_451_" gradientUnits="userSpaceOnUse" x1="244.7446" y1="-267.2954" x2="247.4238" y2="-262.6549" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_451_)" d="M23.38,72.94c-0.71-1.19-1.41-2.38-2.12-3.57c-1.41-0.17-2.83-0.34-4.25-0.51
+ c-0.71,1.01-1.42,2.01-2.13,3.01C17.71,72.24,20.55,72.59,23.38,72.94z"/>
+
+ <linearGradient id="SVGID_452_" gradientUnits="userSpaceOnUse" x1="244.7158" y1="-277.0654" x2="248.4365" y2="-270.621" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_452_)" d="M21.26,66.21c0.71-1.02,1.42-2.05,2.13-3.08c-0.71-1.18-1.42-2.36-2.12-3.53
+ c-1.42-0.14-2.84-0.29-4.26-0.43c-0.71,1.02-1.42,2.04-2.13,3.05c0.71,1.17,1.41,2.34,2.12,3.52
+ C18.43,65.89,19.85,66.05,21.26,66.21z"/>
+
+ <linearGradient id="SVGID_453_" gradientUnits="userSpaceOnUse" x1="244.6895" y1="-286.8335" x2="248.4409" y2="-280.3358" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_453_)" d="M21.28,56.43c0.71-1.04,1.42-2.08,2.13-3.12c-0.71-1.17-1.42-2.33-2.12-3.5
+ c-1.42-0.12-2.84-0.24-4.26-0.36c-0.71,1.03-1.42,2.06-2.13,3.08c0.71,1.16,1.42,2.32,2.12,3.48
+ C18.44,56.16,19.86,56.29,21.28,56.43z"/>
+
+ <linearGradient id="SVGID_454_" gradientUnits="userSpaceOnUse" x1="244.6626" y1="-296.5991" x2="248.4438" y2="-290.0498" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_454_)" d="M21.29,46.65c0.71-1.04,1.42-2.09,2.13-3.15c-0.71-1.16-1.42-2.31-2.13-3.46
+ c-1.42-0.1-2.84-0.2-4.26-0.3c-0.71,1.04-1.42,2.09-2.13,3.12c0.71,1.14,1.42,2.29,2.12,3.44C18.45,46.43,19.87,46.54,21.29,46.65z
+ "/>
+
+ <linearGradient id="SVGID_455_" gradientUnits="userSpaceOnUse" x1="244.6372" y1="-306.3667" x2="248.4497" y2="-299.7632" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_455_)" d="M21.3,36.88c0.71-1.06,1.43-2.12,2.13-3.19c-0.71-1.15-1.42-2.29-2.12-3.42
+ c-1.42-0.08-2.84-0.15-4.26-0.22c-0.71,1.06-1.42,2.11-2.13,3.16c0.71,1.13,1.42,2.27,2.13,3.41C18.46,36.7,19.88,36.79,21.3,36.88
+ z"/>
+
+ <linearGradient id="SVGID_456_" gradientUnits="userSpaceOnUse" x1="244.6079" y1="-316.1377" x2="248.4536" y2="-309.4767" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_456_)" d="M21.31,27.1c0.71-1.07,1.42-2.14,2.14-3.22c-0.71-1.13-1.42-2.27-2.13-3.39
+ c-1.42-0.05-2.84-0.1-4.27-0.15c-0.71,1.07-1.42,2.13-2.13,3.19c0.71,1.12,1.42,2.24,2.13,3.37C18.47,26.97,19.89,27.04,21.31,27.1
+ z"/>
+
+ <linearGradient id="SVGID_457_" gradientUnits="userSpaceOnUse" x1="244.5815" y1="-325.9062" x2="248.46" y2="-319.1886" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_457_)" d="M21.33,17.33c0.71-1.08,1.42-2.17,2.13-3.26c-0.71-1.12-1.42-2.24-2.13-3.36
+ c-1.42-0.03-2.85-0.05-4.27-0.08c-0.71,1.08-1.42,2.16-2.14,3.23c0.71,1.11,1.42,2.22,2.13,3.34
+ C18.48,17.24,19.91,17.28,21.33,17.33z"/>
+
+ <linearGradient id="SVGID_458_" gradientUnits="userSpaceOnUse" x1="244.5532" y1="-335.6743" x2="248.4624" y2="-328.9034" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_458_)" d="M21.34,7.55c0.71-1.09,1.43-2.19,2.14-3.29c-0.71-1.11-1.42-2.22-2.13-3.33
+ c-1.42,0-2.85-0.01-4.27-0.01c-0.71,1.09-1.42,2.18-2.14,3.27c0.71,1.09,1.42,2.19,2.13,3.3C18.49,7.51,19.92,7.53,21.34,7.55z"/>
+
+ <linearGradient id="SVGID_459_" gradientUnits="userSpaceOnUse" x1="255.856" y1="-273.0938" x2="259.4858" y2="-266.8066" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_459_)" d="M10.17,70.07c0.71-0.99,1.42-1.98,2.12-2.98c-0.71-1.17-1.42-2.34-2.12-3.51
+ c-1.42-0.17-2.83-0.33-4.25-0.51c-0.71,0.99-1.42,1.97-2.13,2.95c0.71,1.16,1.42,2.32,2.12,3.49C7.34,69.71,8.75,69.89,10.17,70.07
+ z"/>
+
+ <linearGradient id="SVGID_460_" gradientUnits="userSpaceOnUse" x1="255.8354" y1="-282.6714" x2="259.4985" y2="-276.3267" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_460_)" d="M10.18,60.49c0.71-1,1.42-2.01,2.13-3.02c-0.71-1.16-1.41-2.31-2.12-3.47
+ c-1.42-0.14-2.83-0.29-4.25-0.43c-0.71,1-1.42,1.99-2.13,2.98C4.51,57.7,5.22,58.85,5.92,60C7.34,60.17,8.76,60.33,10.18,60.49z"/>
+
+ <linearGradient id="SVGID_461_" gradientUnits="userSpaceOnUse" x1="255.8149" y1="-292.249" x2="259.5117" y2="-285.846" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_461_)" d="M10.18,50.9c0.71-1.01,1.42-2.03,2.13-3.06c-0.71-1.15-1.42-2.29-2.13-3.43
+ c-1.42-0.12-2.83-0.24-4.26-0.36c-0.71,1.01-1.42,2.02-2.13,3.02c0.71,1.13,1.42,2.27,2.13,3.41C7.35,50.63,8.76,50.77,10.18,50.9z
+ "/>
+
+ <linearGradient id="SVGID_462_" gradientUnits="userSpaceOnUse" x1="255.7964" y1="-301.8252" x2="259.5254" y2="-295.3664" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_462_)" d="M10.19,41.31c0.71-1.03,1.42-2.06,2.13-3.09c-0.71-1.13-1.42-2.26-2.13-3.39
+ c-1.42-0.09-2.84-0.19-4.26-0.28c-0.71,1.02-1.42,2.05-2.13,3.06c0.71,1.12,1.42,2.24,2.13,3.37C7.35,41.1,8.76,41.21,10.19,41.31z
+ "/>
+
+ <linearGradient id="SVGID_463_" gradientUnits="userSpaceOnUse" x1="255.7729" y1="-311.4058" x2="259.5381" y2="-304.8843" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_463_)" d="M10.19,31.73c0.71-1.04,1.42-2.08,2.13-3.13c-0.71-1.12-1.42-2.24-2.13-3.36
+ c-1.42-0.06-2.84-0.13-4.26-0.2c-0.71,1.04-1.42,2.07-2.13,3.1c0.71,1.11,1.42,2.22,2.13,3.33C7.35,31.56,8.77,31.64,10.19,31.73z"
+ />
+
+ <linearGradient id="SVGID_464_" gradientUnits="userSpaceOnUse" x1="255.7559" y1="-320.9819" x2="259.5527" y2="-314.4055" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_464_)" d="M10.2,22.14c0.71-1.05,1.42-2.11,2.13-3.17c-0.71-1.11-1.42-2.21-2.13-3.31
+ c-1.42-0.04-2.84-0.08-4.27-0.13c-0.71,1.05-1.42,2.1-2.13,3.14c0.71,1.09,1.42,2.19,2.13,3.29C7.36,22.02,8.77,22.08,10.2,22.14z"
+ />
+
+ <linearGradient id="SVGID_465_" gradientUnits="userSpaceOnUse" x1="255.7334" y1="-330.5615" x2="259.5659" y2="-323.9234" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_465_)" d="M10.2,12.55c0.71-1.06,1.43-2.13,2.13-3.2c-0.71-1.1-1.42-2.19-2.13-3.28
+ C8.78,6.05,7.36,6.03,5.93,6.02C5.22,7.08,4.51,8.14,3.8,9.2c0.71,1.08,1.42,2.16,2.13,3.25C7.36,12.48,8.78,12.52,10.2,12.55z"/>
+
+ <linearGradient id="SVGID_466_" gradientUnits="userSpaceOnUse" x1="256.5825" y1="-338.6318" x2="259.5781" y2="-333.4433" gradientTransform="matrix(-1 0 0 1 265.7217 336.5049)">
+ <stop offset="0.1264" style="stop-color:#80E6FF"/>
+ <stop offset="0.6429" style="stop-color:#2BD5FF"/>
+ <stop offset="1" style="stop-color:#2BD5FF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_466_)" d="M3.8-0.28c0.71,1.07,1.42,2.14,2.13,3.22c1.43,0.01,2.85,0.02,4.27,0.03
+ c0.71-1.08,1.43-2.16,2.14-3.24C9.5-0.28,6.65-0.28,3.8-0.28z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_default_icon_68x68px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_default_icon_68x68px.svg
new file mode 100644
index 0000000..1ffeedd
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_default_icon_68x68px.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="68px" height="68px" viewBox="0 0 68 68" enable-background="new 0 0 68 68" xml:space="preserve">
+<g>
+ <path fill="#29CAF2" d="M68.03,63.85c0,2.35-1.9,4.25-4.25,4.25H4.28c-2.35,0-4.25-1.9-4.25-4.25V4.35C0.03,2,1.94,0.1,4.28,0.1
+ h59.5c2.35,0,4.25,1.9,4.25,4.25V63.85z"/>
+ <g>
+ <rect x="4.35" y="4.89" fill="#2BD5FF" width="58.44" height="58.44"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.9175" y1="36.4287" x2="62.7471" y2="36.4287">
+ <stop offset="0.1538" style="stop-color:#27C0E6"/>
+ <stop offset="0.4396" style="stop-color:#25B7DB"/>
+ <stop offset="0.7253" style="stop-color:#22A5C4"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M62.65,63.24c0.15-4.38,0.2-10.69-0.56-11.92c-3.75-6.06-15.11-4.72-18.33-4.21
+ c0-1.52-0.01-2.86-0.02-3.88c0.66-0.68,1.26-1.46,1.81-2.31l0.08,0.25c4.67,0.67,5.26-14.6,5.26-14.6
+ C51.22,4.85,37.65,9.83,35.49,10.76c-3.99-1.01-13.46-1.7-13.19,14.65c0,0-0.69,14.47,4.61,14.88c0.65,1.11,1.4,2.09,2.21,2.94
+ c-0.01,0.94-0.05,2.15-0.1,3.54c-6.95-0.48-19.27-0.11-20.08,8.36c-0.08,0.82,0.15,4.82,0.36,8.11L62.65,63.24z"/>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_idle_38x38px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_idle_38x38px.svg
new file mode 100644
index 0000000..71f49aa
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_idle_38x38px.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="38px" height="38px" viewBox="0 0 38 38" enable-background="new 0 0 38 38" xml:space="preserve">
+<g>
+ <circle fill="#29CAF2" cx="19.08" cy="19.08" r="19"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.0747" y1="31.4219" x2="19.0747" y2="6.7417">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M19.08,31.42c-6.8,0-12.34-5.54-12.34-12.34c0-6.8,5.54-12.34,12.34-12.34
+ c6.8,0,12.34,5.54,12.34,12.34C31.41,25.88,25.88,31.42,19.08,31.42L19.08,31.42z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="9.5791" y1="12.4316" x2="28.57" y2="25.7292">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="19.07" cy="19.08" r="11.59"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="11.3086" y1="13.7173" x2="26.6309" y2="24.4461">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M18.97,28.44c-5.16,0-9.36-4.19-9.36-9.35c0-5.16,4.2-9.36,9.36-9.36c5.16,0,9.35,4.2,9.35,9.36
+ C28.32,24.24,24.13,28.44,18.97,28.44L18.97,28.44z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="25.4668" y1="24.5332" x2="12.4717" y2="13.629">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="18.97" cy="19.08" r="8.48"/>
+ <path fill="#FF901F" d="M18.97,26.44c-4.06,0-7.36-3.3-7.36-7.36c0-4.06,3.3-7.36,7.36-7.36c4.06,0,7.36,3.3,7.36,7.36
+ C26.33,23.14,23.03,26.44,18.97,26.44L18.97,26.44z"/>
+ <g>
+ <path fill="#FFD06B" d="M16.68,16.79c2.07-2.07,5.23-2.37,7.63-0.92c-0.25-0.42-0.56-0.83-0.93-1.19
+ c-2.43-2.43-6.39-2.43-8.82,0c-2.43,2.43-2.43,6.39,0,8.82c0.37,0.37,0.77,0.67,1.19,0.92C14.3,22.02,14.61,18.85,16.68,16.79z"
+ />
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-119.9077" y1="69.291" x2="-124.6987" y2="60.9927" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#FF901F"/>
+ <stop offset="1" style="stop-color:#FFB81F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M23.38,23.49c2.07-2.07,2.37-5.23,0.93-7.63c-2.4-1.45-5.56-1.14-7.63,0.92
+ c-2.07,2.07-2.37,5.23-0.92,7.63C18.15,25.86,21.31,25.55,23.38,23.49z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_offline_38x38px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_offline_38x38px.svg
new file mode 100644
index 0000000..84c2514
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_offline_38x38px.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="38px" height="38px" viewBox="0 0 38 38" enable-background="new 0 0 38 38" xml:space="preserve">
+<g>
+ <circle fill="#29CAF2" cx="19.08" cy="19.09" r="19"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.0757" y1="31.4287" x2="19.0757" y2="6.7485">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M19.08,31.43c-6.8,0-12.34-5.54-12.34-12.34c0-6.8,5.54-12.34,12.34-12.34s12.34,5.54,12.34,12.34
+ C31.42,25.89,25.88,31.43,19.08,31.43L19.08,31.43z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="9.5801" y1="12.439" x2="28.5702" y2="25.736">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="19.07" cy="19.09" r="11.59"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="11.3101" y1="13.7241" x2="26.6308" y2="24.4518">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M18.97,28.44c-5.16,0-9.36-4.2-9.36-9.35c0-5.16,4.2-9.36,9.36-9.36c5.16,0,9.35,4.2,9.35,9.36
+ C28.32,24.25,24.13,28.44,18.97,28.44L18.97,28.44z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="25.4678" y1="24.54" x2="12.4734" y2="13.6365">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="18.97" cy="19.09" r="8.48"/>
+ <path fill="#BD0700" d="M18.97,26.45c-4.06,0-7.36-3.3-7.36-7.36s3.3-7.36,7.36-7.36c4.06,0,7.36,3.3,7.36,7.36
+ S23.03,26.45,18.97,26.45L18.97,26.45z"/>
+ <g>
+ <path fill="#F25757" d="M16.68,16.79c2.07-2.07,5.23-2.37,7.63-0.92c-0.25-0.42-0.56-0.83-0.92-1.19
+ c-2.43-2.43-6.39-2.43-8.82,0c-2.43,2.43-2.43,6.39,0,8.82c0.37,0.37,0.77,0.67,1.19,0.92C14.3,22.02,14.61,18.86,16.68,16.79z"
+ />
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-119.9072" y1="69.2979" x2="-124.6982" y2="60.9996" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#BD0700"/>
+ <stop offset="1" style="stop-color:#E35D58"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M23.38,23.5c2.07-2.07,2.37-5.23,0.92-7.63c-2.4-1.45-5.56-1.14-7.63,0.92
+ c-2.07,2.07-2.37,5.23-0.92,7.63C18.15,25.86,21.31,25.56,23.38,23.5z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_online_38x38px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_online_38x38px.svg
new file mode 100644
index 0000000..76daf31
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/blue_SVG/blue_user_status_online_38x38px.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="38px" height="38px" viewBox="0 0 38 38" enable-background="new 0 0 38 38" xml:space="preserve">
+<g>
+ <circle fill="#29CAF2" cx="19.07" cy="19.08" r="19"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.0737" y1="31.4219" x2="19.0737" y2="6.7417">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M19.07,31.42c-6.8,0-12.34-5.54-12.34-12.34c0-6.8,5.54-12.34,12.34-12.34s12.34,5.54,12.34,12.34
+ C31.41,25.88,25.88,31.42,19.07,31.42L19.07,31.42z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="9.5786" y1="12.4321" x2="28.5695" y2="25.7297">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="19.07" cy="19.08" r="11.59"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="11.3086" y1="13.7178" x2="26.6293" y2="24.4454">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M18.97,28.44c-5.16,0-9.36-4.19-9.36-9.35c0-5.16,4.2-9.36,9.36-9.36s9.35,4.2,9.35,9.36
+ C28.32,24.24,24.13,28.44,18.97,28.44L18.97,28.44z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="25.4648" y1="24.5322" x2="12.4713" y2="13.6293">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="18.97" cy="19.08" r="8.48"/>
+ <path fill="#09B300" d="M18.97,26.44c-4.06,0-7.36-3.3-7.36-7.36c0-4.06,3.3-7.36,7.36-7.36c4.06,0,7.36,3.3,7.36,7.36
+ C26.33,23.14,23.03,26.44,18.97,26.44L18.97,26.44z"/>
+ <g>
+ <path fill="#57EB51" d="M16.68,16.79c2.07-2.07,5.23-2.37,7.62-0.92c-0.25-0.42-0.56-0.83-0.92-1.19
+ c-2.43-2.43-6.39-2.43-8.82,0c-2.43,2.43-2.43,6.39,0,8.82c0.37,0.37,0.77,0.67,1.19,0.93C14.3,22.02,14.61,18.85,16.68,16.79z"
+ />
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-119.9087" y1="69.292" x2="-124.6997" y2="60.9937" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#09AA00"/>
+ <stop offset="1" style="stop-color:#4DCC46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M23.38,23.49c2.07-2.07,2.37-5.23,0.92-7.63c-2.39-1.45-5.56-1.14-7.62,0.92
+ c-2.07,2.07-2.37,5.23-0.93,7.63C18.15,25.86,21.31,25.55,23.38,23.49z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/areacodes.txt b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/areacodes.txt
new file mode 100644
index 0000000..dc7e7d8
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/areacodes.txt
@@ -0,0 +1,62 @@
++30
++31
++32
++33
++34
++350
++351
++352
++353
++354
++355
++356
++357
++358
++359
++36
++3
++370
++371
++372
++373
++374
++375
++376
++377
++377 44
++378
++379
++38
++380
++381
++382
++383
++384
++385
++386
++386 49
++387
++388
++388 3
++389
++39
++40
++41
++42
++420
++421
++422
++423
++424
++425
++426
++427
++428
++429
++43
++44
++45
++46
++47
++48
++49 \ No newline at end of file
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesF.txt b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesF.txt
new file mode 100644
index 0000000..4bf1492
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesF.txt
@@ -0,0 +1,100 @@
+Aida
+Aija
+Aila
+Aili
+Ailikki
+Aimi
+Aina
+Alexia
+Alice
+Amanda
+Amber
+Amy
+Angela
+Angelica
+Ann
+Beth
+Brenda
+Brooke
+Caitlin
+Camilla
+Camille
+Carmen
+Cassandra
+Catherine
+Edna
+Eeva
+Eeve
+Eevi
+Eija
+Eila
+Eimi
+Eleanor
+Eleonora
+Elizabeth
+Ellen
+Enna
+Enni
+Erica
+Erika
+Erja
+Essi
+Essie
+Heini
+Heleena
+Helen
+Helena
+Helene
+Helga
+Hilja
+Hilkka
+Hille
+Hillervo
+Hillevi
+Hilma
+Irene
+Irina
+Irja
+Irma
+Irmeli
+Iro
+Jacqueline
+Jane
+Jennifer
+Jenny
+Jessica
+Jill
+Kaire
+Kaisa
+Kaisla
+Kaisu
+Katarine
+Kate
+Kate
+Kateriina
+Katharina
+Katharine
+Katherine
+Kathleen
+Marge
+Mary
+May
+Megan
+Melinda
+Morgan
+Nellie
+Nelly
+Pauline
+Peggy
+Pepi
+Scarlett
+Sheila
+Shirley
+Sissy
+Stephanie
+Sylvia
+Taylor
+Terrie
+Terry
+Victoria
+Violet \ No newline at end of file
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesM.txt b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesM.txt
new file mode 100644
index 0000000..189d8d0
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/firstnamesM.txt
@@ -0,0 +1,100 @@
+Aabraham
+Aadam
+Aadolf
+Aake
+Aaku
+Aatu
+Ahti
+Ahvo
+Aimo
+Aki
+Akseli
+Aku
+Bartholomew
+Ben
+Benjamin
+Bill
+Billie
+Billy
+Bob
+Brendan
+Brian
+Bryan
+Calvin
+Carl
+Charles
+Chester
+Chris
+Christian
+Christopher
+Chuck
+Dale
+Dave
+David
+Dennis
+Dick
+Dominick
+Donald
+Dustin
+Dusty
+Harri
+Heikki
+Heimo
+Heino
+Helmer
+Helmeri
+Hemmi
+Hemmo
+Henri
+Jeff
+Jeffrey
+Jermu
+Jero
+Jerri
+Jerry
+Jesper
+Jesperi
+Jesse
+Jetro
+Jim
+Jimi
+Jimmy
+Joakim
+Joe
+John
+Johnny
+Jonah
+Jonathan
+Joseph
+Leevi
+Leimo
+Leimu
+Leino
+Leivo
+Lenne
+Lennu
+Mark
+Martin
+Matt
+Matthew
+Michael
+Mike
+Niko
+Nooa
+Nuutti
+Nyyrikki
+Okke
+Okko
+Olavi
+Oliver
+Olli
+Onni
+Pertti
+Perttu
+Walter
+Warren
+Wesley
+William
+Willie
+Winston
+Woodrow \ No newline at end of file
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/lastnames.txt b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/lastnames.txt
new file mode 100644
index 0000000..35b3f9f
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/contacts/lastnames.txt
@@ -0,0 +1,150 @@
+Adams
+Allen
+Anderson
+Bailey
+Baker
+Barnes
+Bell
+Bennett
+Brooks
+Brown
+Butler
+Campbell
+Carter
+Clark
+Collins
+Cook
+Cooper
+Cox
+Cruz
+Davis
+Díaz
+Edwards
+Evans
+Fisher
+Flores
+Foster
+García
+Gómez
+González
+Gray
+Green
+Gutiérrez
+Hall
+Harris
+Heikkinen
+Helenius
+Helve
+Hernández
+Hill
+Hiltunen
+Hirvonen
+Holm
+Honkanen
+Howard
+Hughes
+Huhtala
+Huttunen
+Hyppönen
+Jackson
+James
+Jenkins
+Johnson
+Jones
+Kauppinen
+Kelly
+Kemppainen
+King
+Klemetti
+Kokkonen
+Kolehmainen
+Korhonen
+Kurikka
+Kuura
+Kyrö
+Kärkkäinen
+Lee
+Lewis
+Long
+López
+Martikainen
+Martin
+Martínez
+Mattila
+Mikkola
+Mikkonen
+Miller
+Mitchell
+Moore
+Morales
+Morgan
+Morris
+Muje
+Murphy
+Mustonen
+Myers
+Myllärinen
+Mäenpää
+Mäkelä
+Mäkinen
+Nelson
+Nguyen
+Ortiz
+Parker
+Pérez
+Perry
+Peterson
+Phillips
+Powell
+Price
+Ramírez
+Reed
+Reyes
+Richardson
+Rivera
+Roberts
+Robinson
+Rodríguez
+Rogers
+Ross
+Russell
+Saarinen
+Saaristo
+Salminen
+Salo
+Salonen
+Sánchez
+Sanders
+Scott
+Seppänen
+Silvennoinen
+Silvo
+Smith
+Sokura
+Stewart
+Sullivan
+Suomalainen
+Taylor
+Thomas
+Thompson
+Torres
+Turner
+Valkeapää
+Walker
+Valo
+Valtonen
+Vanhanen
+Ward
+Watson
+Venäläinen
+Vesa
+White
+Vihavainen
+Williams
+Wilson
+Virtanen
+Wood
+Voutilainen
+Wright
+Vuorela
+Young \ No newline at end of file
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_360x640px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_360x640px.svg
new file mode 100644
index 0000000..8daf275
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_360x640px.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="360px" height="640px" viewBox="0 0 360 640" enable-background="new 0 0 360 640" xml:space="preserve">
+<g>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="180.5498" y1="640.4805" x2="180.5498" y2="0.4805">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <rect x="0.55" y="0.48" fill="url(#SVGID_1_)" width="360" height="640"/>
+ </g>
+</g>
+<g>
+ <path opacity="0.5" fill="#3FD900" enable-background="new " d="M81.87,177.64c-26.04,112.67-2.73,201.9,36.7,294.07
+ c29.47,68.89,20.63,130.26,7.36,168.61H0.55V0.53h174.27C157.12,65.8,96.34,115.02,81.87,177.64z"/>
+
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="458.8857" y1="1985.248" x2="-180.46" y2="1985.248" gradientTransform="matrix(0 -1 0.7343 0 -1400.0699 459.4961)">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <path opacity="0.5" fill="url(#SVGID_2_)" enable-background="new " d="M102.88,480.39c25.66,64.29,6.13,119.47-25.71,159.56
+ H0.69V536.03c32.62-1.35,73.55,32.06,82.03-30.04c6.33-46.35-59-157.3-41.01-287.49c6.61-47.82,9.32-133.33-6.81-217.89h72.92
+ C92.79,58.16,62.46,114.8,49.63,219.24C41.9,282.07,51.58,351.9,102.88,480.39z"/>
+ <path opacity="0.5" fill="#3FD900" enable-background="new " d="M279.23,463.41c26.04-112.67,2.74-201.9-36.7-294.07
+ c-29.47-68.89-20.63-130.26-7.36-168.61h125.38v639.81H186.27C215.23,586.79,264.76,526.04,279.23,463.41z"/>
+
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="655.6582" y1="83.9292" x2="16.3125" y2="83.9291" gradientTransform="matrix(0 1 -0.7343 0 366.7535 -15.209)">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M258.22,160.67C232.57,96.37,268.5-25.81,330.4,63.01l30-61.91V158.9
+ c0-79.74-73.55-85.93-82.03-23.82c-6.33,46.35,59,157.3,41.01,287.49c-6.61,47.82-9.32,133.33,6.81,217.89h-72.92
+ c15.02-57.56,45.35-114.2,58.18-218.63C319.2,358.99,309.51,289.15,258.22,160.67z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_horisontal_640x360px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_horisontal_640x360px.svg
new file mode 100644
index 0000000..c2b070a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_background_horisontal_640x360px.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="640px" height="360px" viewBox="0 0 640 360" enable-background="new 0 0 640 360" xml:space="preserve">
+<g>
+ <g>
+ <rect x="0.02" y="0.02" fill="#FFFFFF" width="640" height="360"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="320.0181" y1="358.0205" x2="320.018" y2="2.0205">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_1_)" points="638.02,358.02 2.02,358.02 2.02,2.02 638.02,2.02 638.02,358.02 "/>
+ </g>
+ <path opacity="0.5" fill="#3FD900" d="M144.17,100.86c-45.53,62.62-4.77,112.21,64.16,163.44c51.53,38.29,36.07,72.4,12.87,93.71
+ H2.03V2.42h304.66C275.74,38.7,169.48,66.06,144.17,100.86z"/>
+
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="507.0713" y1="-1386.6294" x2="151.7412" y2="-1386.6294" gradientTransform="matrix(0 -1 -0.7343 0 -916.2726 509.4961)">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <path opacity="0.5" fill="url(#SVGID_2_)" d="M180.9,269.08c44.86,35.73,10.73,66.4-44.95,88.68H2.28V300
+ c57.02-0.75,128.57,17.82,143.4-16.7c11.07-25.76-103.15-87.42-71.7-159.78C85.52,96.94,90.26,49.41,62.07,2.42h127.46
+ c-26.25,31.99-79.27,63.47-101.71,121.51C74.31,158.85,91.24,197.67,180.9,269.08z"/>
+ <path opacity="0.5" fill="#3FD900" d="M495.59,259.17c45.54-62.62,4.77-112.21-64.15-163.44c-51.53-38.29-36.07-72.4-12.87-93.71
+ h219.17l0,355.59H333.07C383.69,327.74,470.28,293.98,495.59,259.17z"/>
+
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="499.5596" y1="193.2451" x2="144.2295" y2="193.2451" gradientTransform="matrix(0 1 0.7343 0 398.9562 -142.209)">
+ <stop offset="0" style="stop-color:#9EFF78"/>
+ <stop offset="0.3626" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#3AC900"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M458.86,90.7C414,54.97,476.82-12.94,585.04,36.43l52.45-34.41v87.7
+ c0-44.32-128.57-47.76-143.4-13.24c-11.07,25.76,103.15,87.42,71.7,159.78c-11.55,26.57-16.29,74.11,11.91,121.09H450.24
+ c26.25-31.99,79.27-63.47,101.71-121.51C565.45,200.92,548.52,162.11,458.86,90.7z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_53x53px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_53x53px.svg
new file mode 100644
index 0000000..6e34f25
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_53x53px.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="53px" height="53px" viewBox="0 0 53 53" enable-background="new 0 0 53 53" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.4878" y1="53.0156" x2="26.4878" y2="0.0156">
+ <stop offset="0" style="stop-color:#8BF261"/>
+ <stop offset="0.1255" style="stop-color:#7AE74D"/>
+ <stop offset="0.3699" style="stop-color:#5DD62C"/>
+ <stop offset="0.6034" style="stop-color:#49C914"/>
+ <stop offset="0.8191" style="stop-color:#3CC205"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M-0.01,49.7c0,1.83,1.48,3.31,3.31,3.31h46.38c1.83,0,3.31-1.48,3.31-3.31V3.33
+ c0-1.83-1.48-3.31-3.31-3.31H3.3c-1.83,0-3.31,1.48-3.31,3.31V49.7z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="26.4878" y1="50.6777" x2="26.4878" y2="2.354">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M2.33,49.7c0,0.54,0.44,0.98,0.97,0.98h46.38l0,0c0.54,0,0.97-0.44,0.97-0.98V3.33
+ c0-0.54-0.44-0.97-0.97-0.97H3.3c-0.54,0-0.97,0.44-0.97,0.97V49.7z"/>
+ <path fill="#43EB00" d="M45.55,50.68c0.11-8.96,0.14-13.45-0.4-14.33c-2.67-4.31-10.75-3.36-13.04-2.99c0-1.08-0.01-2.04-0.01-2.76
+ c0.47-0.49,0.9-1.04,1.29-1.64l0.06,0.18c3.33,0.47,3.74-10.39,3.74-10.39C37.41,3.29,27.75,6.83,26.22,7.49
+ c-2.84-0.72-9.58-1.21-9.39,10.43c0,0-0.49,10.29,3.28,10.59c0.46,0.79,0.99,1.49,1.58,2.09c-0.01,0.67-0.04,1.53-0.07,2.52
+ c-4.95-0.34-13.71-0.08-14.29,5.95c-0.05,0.58,0.11,3.43,0.26,11.62H45.55z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_highlight_53x53px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_highlight_53x53px.svg
new file mode 100644
index 0000000..29c284d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_default_icon_highlight_53x53px.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="53px" height="53px" viewBox="0 0 53 53" enable-background="new 0 0 53 53" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="26.5083" y1="53.0332" x2="26.5083" y2="0.0342">
+ <stop offset="0" style="stop-color:#8BF261"/>
+ <stop offset="0.1471" style="stop-color:#A7F587"/>
+ <stop offset="0.3385" style="stop-color:#C6F9B2"/>
+ <stop offset="0.5243" style="stop-color:#DFFBD3"/>
+ <stop offset="0.7006" style="stop-color:#F1FDEB"/>
+ <stop offset="0.8635" style="stop-color:#FBFFFA"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M0.01,49.72c0,1.83,1.48,3.31,3.31,3.31H49.7c1.83,0,3.31-1.48,3.31-3.31V3.35
+ c0-1.83-1.48-3.31-3.31-3.31H3.32c-1.83,0-3.31,1.48-3.31,3.31V49.72z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="26.5083" y1="50.6963" x2="26.5083" y2="2.3726">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M2.35,49.72c0,0.54,0.44,0.98,0.97,0.98H49.7l0,0c0.54,0,0.97-0.44,0.97-0.98V3.35
+ c0-0.54-0.44-0.97-0.97-0.97H3.32c-0.54,0-0.97,0.44-0.97,0.97V49.72z"/>
+ <path fill="#43EB00" d="M45.57,50.7c0.11-8.96,0.14-13.45-0.4-14.33c-2.67-4.31-10.75-3.36-13.04-2.99c0-1.09-0.01-2.04-0.01-2.76
+ c0.47-0.49,0.9-1.04,1.29-1.64l0.06,0.17c3.33,0.47,3.74-10.39,3.74-10.39C37.43,3.3,27.77,6.85,26.24,7.51
+ c-2.84-0.72-9.58-1.21-9.39,10.43c0,0-0.49,10.29,3.28,10.59c0.46,0.79,0.99,1.49,1.58,2.09c-0.01,0.67-0.04,1.53-0.07,2.52
+ c-4.95-0.34-13.71-0.08-14.29,5.95C7.29,39.66,7.45,42.51,7.6,50.7L45.57,50.7z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_divider_360x76px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_divider_360x76px.svg
new file mode 100644
index 0000000..db9fc7a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_divider_360x76px.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="360px" height="76px" viewBox="0 0 360 76" enable-background="new 0 0 360 76" xml:space="preserve">
+<rect x="0.01" y="0.35" opacity="0.2" fill="#FFFFFF" width="360" height="76"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_highlighter_357x80px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_highlighter_357x80px.svg
new file mode 100644
index 0000000..0ee3ea2
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_list_highlighter_357x80px.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="357px" height="80px" viewBox="0 0 357 80" enable-background="new 0 0 357 80" xml:space="preserve">
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.300781e-03" y1="40.0156" x2="357.0078" y2="40.0156">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="1" style="stop-color:#94FF69"/>
+</linearGradient>
+<rect x="0.01" y="0.02" fill="url(#SVGID_1_)" width="357" height="80"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_idle_27x47.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_idle_27x47.svg
new file mode 100644
index 0000000..925d3eb
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_idle_27x47.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27px" height="47px" viewBox="0 0 27 47" enable-background="new 0 0 27 47" xml:space="preserve">
+<g>
+ <path opacity="0.2" fill="#FFFFFF" d="M0.04,0.04c15.51,0,27,10.52,27,23.5c0,12.98-11.49,23.5-27,23.5V0.04z"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-18.8911" y1="23.5415" x2="18.8759" y2="23.5415">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M18.88,23.54C18.88,13,10.45,4.45,0.04,4.43v6.7c6.74,0.03,12.22,5.58,12.22,12.41
+ S6.78,35.93,0.04,35.96v6.7C10.45,42.63,18.88,34.08,18.88,23.54z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.1475" y1="35.9551" x2="6.1475" y2="11.1284">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M11.51,23.54c0,6.43-5.13,11.64-11.48,11.66v0.75c6.74-0.02,12.22-5.58,12.22-12.41
+ S6.78,11.15,0.04,11.13v0.75C6.38,11.91,11.51,17.12,11.51,23.54z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-8.9409" y1="16.0107" x2="10.0672" y2="29.3204">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.51,23.54c0-6.43-5.13-11.64-11.48-11.66v2.25c5.06,0.08,9.15,4.27,9.15,9.41
+ c0,5.14-4.09,9.32-9.15,9.4v2.25C6.38,35.18,11.51,29.97,11.51,23.54z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7.3013" y1="17.4404" x2="8.0348" y2="28.1788">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M8.32,23.54c0,4.66-3.7,8.44-8.28,8.53v0.88c5.06-0.08,9.15-4.26,9.15-9.4
+ c0-5.14-4.09-9.32-9.15-9.41v0.88C4.62,15.1,8.32,18.88,8.32,23.54z"/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="7.0356" y1="28.2002" x2="-5.98" y2="17.2788">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M8.32,23.54c0-4.66-3.7-8.44-8.28-8.52v1.13C4,16.23,7.2,19.51,7.2,23.54
+ c0,4.03-3.2,7.31-7.16,7.39v1.13C4.62,31.99,8.32,28.2,8.32,23.54z"/>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="0.0371" y1="23.542" x2="7.2012" y2="23.542">
+ <stop offset="0" style="stop-color:#FF901F"/>
+ <stop offset="1" style="stop-color:#FFB81F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M4.27,19.1c0.36,0.37,0.67,0.77,0.92,1.2c1.44,2.41,1.13,5.6-0.92,7.67
+ c-1.17,1.18-2.7,1.77-4.23,1.81v1.15C4,30.86,7.2,27.57,7.2,23.54c0-4.03-3.2-7.32-7.16-7.4v1.13C1.57,17.31,3.1,17.92,4.27,19.1z
+ "/>
+ <path fill="#FFD06B" d="M5.19,20.3c-0.25-0.43-0.56-0.83-0.92-1.2c-1.17-1.18-2.7-1.79-4.23-1.83v2.46
+ C1.74,19.17,3.62,19.35,5.19,20.3z"/>
+
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-137.9243" y1="73.1523" x2="-142.7352" y2="64.8197" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#FF901F"/>
+ <stop offset="1" style="stop-color:#FFB81F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M5.19,20.3c-1.56-0.96-3.45-1.14-5.15-0.57v10.05c1.54-0.04,3.06-0.62,4.23-1.81
+ C6.32,25.9,6.62,22.71,5.19,20.3z"/>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_offline_27x47.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_offline_27x47.svg
new file mode 100644
index 0000000..6f74723
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_offline_27x47.svg
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27px" height="47px" viewBox="0 0 27 47" enable-background="new 0 0 27 47" xml:space="preserve">
+<g>
+ <path opacity="0.2" fill="#FFFFFF" d="M0.04,0.04c15.51,0,27,10.52,27,23.5c0,12.98-11.49,23.5-27,23.5V0.04z"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-18.8911" y1="23.542" x2="18.8759" y2="23.542">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M18.88,23.54C18.88,13,10.45,4.45,0.04,4.43v6.7c6.74,0.03,12.22,5.58,12.22,12.41
+ c0,6.83-5.48,12.39-12.22,12.41v6.7C10.45,42.63,18.88,34.08,18.88,23.54z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.1475" y1="35.9551" x2="6.1475" y2="11.1289">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M11.51,23.54c0,6.43-5.13,11.64-11.48,11.66v0.75c6.74-0.03,12.22-5.58,12.22-12.41
+ c0-6.83-5.48-12.39-12.22-12.41v0.75C6.38,11.91,11.51,17.12,11.51,23.54z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-8.9409" y1="16.0107" x2="10.0672" y2="29.3204">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.51,23.54c0-6.43-5.13-11.64-11.48-11.66v2.25c5.06,0.08,9.15,4.27,9.15,9.41
+ c0,5.14-4.09,9.32-9.15,9.4v2.25C6.38,35.18,11.51,29.97,11.51,23.54z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7.3013" y1="17.4409" x2="8.0348" y2="28.1793">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M8.32,23.54c0,4.66-3.7,8.44-8.28,8.53v0.88c5.06-0.08,9.15-4.27,9.15-9.4
+ c0-5.14-4.09-9.32-9.15-9.41v0.88C4.62,15.1,8.32,18.88,8.32,23.54z"/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="7.0361" y1="28.2012" x2="-5.9795" y2="17.2798">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M8.32,23.54c0-4.66-3.7-8.44-8.28-8.52v1.13C4,16.23,7.2,19.51,7.2,23.54
+ c0,4.03-3.2,7.31-7.16,7.39v1.13C4.62,31.99,8.32,28.2,8.32,23.54z"/>
+ <path fill="#BD0700" d="M4.27,19.1c0.36,0.37,0.67,0.77,0.92,1.2c1.44,2.41,1.13,5.6-0.92,7.67c-1.17,1.19-2.7,1.77-4.23,1.81
+ v1.15C4,30.86,7.2,27.57,7.2,23.54c0-4.03-3.2-7.32-7.16-7.4v1.13C1.57,17.31,3.1,17.92,4.27,19.1z"/>
+ <path fill="#F25757" d="M5.19,20.3c-0.25-0.43-0.56-0.83-0.92-1.2c-1.17-1.18-2.7-1.79-4.23-1.83v2.46
+ C1.74,19.17,3.62,19.35,5.19,20.3z"/>
+
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-137.9243" y1="73.1533" x2="-142.7357" y2="64.8198" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#BD0700"/>
+ <stop offset="1" style="stop-color:#E35D58"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M5.19,20.3c-1.56-0.96-3.45-1.14-5.15-0.57v10.05c1.54-0.04,3.06-0.62,4.23-1.81
+ C6.32,25.9,6.62,22.72,5.19,20.3z"/>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_online_27x47.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_online_27x47.svg
new file mode 100644
index 0000000..5695160
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_contact_status_online_27x47.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="27px" height="47px" viewBox="0 0 27 47" enable-background="new 0 0 27 47" xml:space="preserve">
+<g>
+ <path opacity="0.2" fill="#FFFFFF" d="M0.04,0.03c15.51,0,27,10.52,27,23.5c0,12.98-11.49,23.5-27,23.5V0.03z"/>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-18.8911" y1="23.5264" x2="18.8759" y2="23.5264">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M18.88,23.53c0-10.54-8.43-19.09-18.84-19.11v6.7c6.74,0.02,12.22,5.58,12.22,12.41
+ c0,6.83-5.48,12.39-12.22,12.41v6.7C10.45,42.62,18.88,34.07,18.88,23.53z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.1475" y1="35.9414" x2="6.1475" y2="11.1152">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M11.51,23.53c0,6.43-5.13,11.64-11.48,11.66v0.75c6.74-0.03,12.22-5.58,12.22-12.41
+ c0-6.83-5.48-12.39-12.22-12.41v0.75C6.38,11.89,11.51,17.1,11.51,23.53z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-8.9414" y1="15.9961" x2="10.0667" y2="29.3057">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.51,23.53c0-6.43-5.13-11.64-11.48-11.66v2.25c5.06,0.08,9.15,4.27,9.15,9.41
+ c0,5.14-4.09,9.32-9.15,9.4v2.25C6.38,35.16,11.51,29.95,11.51,23.53z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7.3013" y1="17.4268" x2="8.0348" y2="28.1652">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M8.32,23.53c0,4.66-3.7,8.44-8.28,8.53v0.88c5.06-0.08,9.15-4.27,9.15-9.4
+ c0-5.14-4.09-9.33-9.15-9.41V15C4.62,15.08,8.32,18.87,8.32,23.53z"/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="7.0356" y1="28.1865" x2="-5.98" y2="17.2651">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M8.32,23.53c0-4.66-3.7-8.44-8.28-8.52v1.13C4,16.21,7.2,19.5,7.2,23.53c0,4.03-3.2,7.31-7.16,7.39
+ v1.13C4.62,31.97,8.32,28.19,8.32,23.53z"/>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="0.0371" y1="23.5283" x2="7.2012" y2="23.5283">
+ <stop offset="0" style="stop-color:#09AA00"/>
+ <stop offset="1" style="stop-color:#4DCC46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M4.27,19.09c0.36,0.37,0.67,0.77,0.92,1.2c1.44,2.41,1.13,5.6-0.92,7.67
+ c-1.17,1.19-2.7,1.77-4.23,1.81v1.15C4,30.84,7.2,27.56,7.2,23.53c0-4.03-3.2-7.32-7.16-7.4v1.13C1.57,17.3,3.1,17.91,4.27,19.09z
+ "/>
+ <path fill="#57EB51" d="M5.19,20.29c-0.25-0.43-0.56-0.83-0.92-1.2c-1.17-1.19-2.7-1.79-4.23-1.83v2.46
+ C1.74,19.15,3.62,19.33,5.19,20.29z"/>
+
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-137.9243" y1="73.1387" x2="-142.7352" y2="64.806" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#09AA00"/>
+ <stop offset="1" style="stop-color:#4DCC46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M5.19,20.29c-1.56-0.96-3.45-1.14-5.15-0.57v10.05c1.54-0.04,3.06-0.62,4.23-1.81
+ C6.32,25.88,6.62,22.7,5.19,20.29z"/>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scroll_5x80px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scroll_5x80px.svg
new file mode 100644
index 0000000..4f6482a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scroll_5x80px.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="5px" height="80px" viewBox="0 0 5 80" enable-background="new 0 0 5 80" xml:space="preserve">
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="2.4917" y1="0.0908" x2="2.4917" y2="80.0913">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="0.3516" style="stop-color:#94FF69"/>
+ <stop offset="0.9176" style="stop-color:#3FD900"/>
+</linearGradient>
+<rect x="-0.01" y="0.09" fill="url(#SVGID_1_)" width="5" height="80"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scrollbar_5x14px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scrollbar_5x14px.svg
new file mode 100644
index 0000000..54a40c3
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_scrollbar_5x14px.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="5px" height="14px" viewBox="0 0 5 14" enable-background="new 0 0 5 14" xml:space="preserve">
+<rect fill="#41E600" width="5" height="14"/>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_left_14x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_left_14x24px.svg
new file mode 100644
index 0000000..a21c91d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_left_14x24px.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="24px" viewBox="0 0 14 24" enable-background="new 0 0 14 24" xml:space="preserve">
+<g>
+ <path fill="none" d="M4.96,21.94c-0.28-0.33-0.53-0.67-0.77-1.03C4.43,21.27,4.68,21.62,4.96,21.94z"/>
+ <path fill="none" d="M2.15,15.41c-0.05-0.46-0.09-0.92-0.09-1.39C2.06,14.49,2.09,14.96,2.15,15.41z"/>
+ <path fill="none" d="M4.12,20.81c-0.23-0.35-0.45-0.71-0.64-1.09C3.03,18.89,2.69,18,2.45,17.06C2.79,18.42,3.36,19.69,4.12,20.81z
+ "/>
+ <path fill="none" d="M2.41,16.91c-0.09-0.38-0.16-0.77-0.22-1.17C2.25,16.13,2.32,16.52,2.41,16.91z"/>
+ <path fill="#38BF00" d="M4.17,20.81c-0.74-1.13-1.3-2.39-1.64-3.75c-0.01-0.05-0.02-0.1-0.04-0.16c-0.09-0.38-0.16-0.77-0.22-1.17
+ c-0.01-0.11-0.03-0.21-0.04-0.32c-0.05-0.46-0.08-0.92-0.08-1.39c0-6.63,5.57-12,11.86-12l0,0v-2H11.4c-6.29,0-11.39,5.37-11.39,12
+ c0,4.13,1.98,7.76,4.99,9.92c-0.27-0.33-0.52-0.67-0.76-1.03C4.21,20.88,4.19,20.85,4.17,20.81z"/>
+ <path fill="#8BF261" d="M10.21,22.02c-2.5,0-4.8-0.86-6.68-2.29c0.19,0.38,0.41,0.73,0.63,1.09c0.02,0.03,0.04,0.07,0.07,0.1
+ c0.24,0.36,0.49,0.7,0.76,1.03c1.82,1.31,4.03,2.08,6.4,2.08h2.61v-2H10.21z"/>
+ <path fill="#80E6FF" d="M4.12,20.81c0.02,0.04,0.04,0.07,0.07,0.1C4.16,20.88,4.14,20.85,4.12,20.81z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.0742" y1="22.0195" x2="8.0742" y2="2.0205">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M14.01,2.02c-6.29,0-11.86,5.37-11.86,12c0,0.47,0.03,0.94,0.08,1.39c0.01,0.11,0.03,0.22,0.04,0.32
+ c0.06,0.4,0.12,0.79,0.22,1.17c0.01,0.05,0.02,0.1,0.04,0.16C2.76,18,3.1,18.89,3.53,19.73c1.88,1.44,4.18,2.29,6.68,2.29h3.8V2.02
+ L14.01,2.02z"/>
+ <path fill="#2BD5FF" d="M2.45,17.06c-0.01-0.05-0.02-0.1-0.04-0.16C2.42,16.96,2.43,17.01,2.45,17.06z"/>
+ <path fill="#2BD5FF" d="M2.19,15.74c-0.01-0.11-0.03-0.21-0.04-0.32C2.16,15.52,2.17,15.63,2.19,15.74z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_middle_10x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_middle_10x24px.svg
new file mode 100644
index 0000000..b84200d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_middle_10x24px.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="10px" height="24px" viewBox="0 0 10 24" enable-background="new 0 0 10 24" xml:space="preserve">
+<g>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="62.5" y1="-100.9995" x2="62.5" y2="-79" gradientTransform="matrix(1 0 0 -1 -57.5 -78)">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <rect y="1" fill="url(#SVGID_1_)" width="10" height="22"/>
+ <rect fill="#38BF00" width="10" height="2"/>
+ <rect y="22" fill="#8BF261" width="10" height="2"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_right_14x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_right_14x24px.svg
new file mode 100644
index 0000000..231560d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_status_field_right_14x24px.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="24px" viewBox="0 0 14 24" enable-background="new 0 0 14 24" xml:space="preserve">
+<g>
+ <path fill="#38BF00" d="M4.59,2.02c2.42,0,4.66,0.77,6.52,2.08C8.98,1.6,5.88,0.02,2.42,0.02H0.01v2H4.59z"/>
+ <path fill="#8BF261" d="M11.6,4.73c0.76,1.6,1.2,3.39,1.2,5.29c0,6.63-5.19,12-11.59,12H0.01v2h2.41c6.4,0,11.59-5.37,11.59-12
+ C14.01,9.27,13.1,6.75,11.6,4.73z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="6.4028" y1="22.0205" x2="6.4028" y2="2.021">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M0.01,2.02v20h1.21c6.4,0,11.59-5.37,11.59-12c0-1.9-0.44-3.69-1.2-5.29
+ c-0.16-0.22-0.32-0.43-0.5-0.64c-1.86-1.31-4.1-2.08-6.52-2.08H0.01z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_356x96px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_356x96px.svg
new file mode 100644
index 0000000..679d9a5
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_356x96px.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="356px" height="96px" viewBox="0 0 356 96" enable-background="new 0 0 356 96" xml:space="preserve">
+<g>
+ <g>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-184.8071" y1="-51.2339" x2="-112.3086" y2="147.9543" gradientTransform="matrix(-1 0 0 1 29.2188 0)">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="0.3516" style="stop-color:#94FF69"/>
+ <stop offset="0.9176" style="stop-color:#3FD900"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_1_)" points="355.87,95.84 355.87,0.39 -0.14,0.39 -0.14,96.39 "/>
+
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-148.647" y1="96.3936" x2="-148.647" y2="58.96" gradientTransform="matrix(-1 0 0 1 29.2188 0)">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="0.9176" style="stop-color:#3FD900"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_2_)" points="355.87,96.18 355.87,58.96 -0.14,58.96 -0.14,96.39 "/>
+ <polygon fill="#38BF00" points="355.87,96.37 355.87,92.21 -0.14,92.21 -0.14,96.39 "/>
+ </g>
+ <polygon opacity="0.2" fill="#FFFFFF" points="266.5,92.09 167.84,92.09 272.84,0.77 326.5,0.77 "/>
+ <polygon opacity="0.2" fill="#FFFFFF" points="314.5,92.09 285.84,92.09 330.84,0.77 339.5,0.77 "/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_horisontal_636x96px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_horisontal_636x96px.svg
new file mode 100644
index 0000000..1ef4fb9
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_topbar_horisontal_636x96px.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="636px" height="96px" viewBox="0 0 636 96" enable-background="new 0 0 636 96" xml:space="preserve">
+<g>
+ <g>
+
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-61.3369" y1="-96.5996" x2="43.9144" y2="192.5761" gradientTransform="matrix(-1 0 0 1 309.2188 0)">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="0.3516" style="stop-color:#94FF69"/>
+ <stop offset="0.9176" style="stop-color:#3FD900"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_1_)" points="636.02,95.46 636.02,0.02 0.02,0.02 0.02,96.02 "/>
+
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-8.8003" y1="96.0205" x2="-8.8003" y2="58.5869" gradientTransform="matrix(-1 0 0 1 309.2188 0)">
+ <stop offset="0" style="stop-color:#46F200"/>
+ <stop offset="0.9176" style="stop-color:#3FD900"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_2_)" points="636.02,95.8 636.02,58.59 0.02,58.59 0.02,96.02 "/>
+ <polygon fill="#38BF00" points="636.02,95.99 636.02,91.84 0.02,91.84 0.02,96.02 "/>
+ </g>
+ <polygon opacity="0.2" fill="#FFFFFF" points="546.65,91.72 447.99,91.72 552.99,0.4 606.65,0.4 "/>
+ <polygon opacity="0.2" fill="#FFFFFF" points="594.65,91.72 565.99,91.72 610.99,0.4 619.65,0.4 "/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_default_icon_84x68px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_default_icon_84x68px.svg
new file mode 100644
index 0000000..4df0214
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_default_icon_84x68px.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="84px" height="68px" viewBox="0 0 84 68" enable-background="new 0 0 84 68" xml:space="preserve">
+<g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="42.1343" y1="68.0352" x2="42.1343" y2="0.0361">
+ <stop offset="0" style="stop-color:#8BF261"/>
+ <stop offset="0.1255" style="stop-color:#7AE74D"/>
+ <stop offset="0.3699" style="stop-color:#5DD62C"/>
+ <stop offset="0.6034" style="stop-color:#49C914"/>
+ <stop offset="0.8191" style="stop-color:#3CC205"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M80.01,0.04h-59.5c-2.35,0-4.25,1.9-4.25,4.25v25.78c-9,0.13-16.26,7.46-16.26,16.49
+ c0,9.03,7.26,16.36,16.26,16.49v0.75c0,2.35,1.9,4.25,4.25,4.25h59.5c2.35,0,4.25-1.9,4.25-4.25V4.29
+ C84.26,1.94,82.36,0.04,80.01,0.04z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="42.1333" y1="65.0371" x2="42.1333" y2="3.0366">
+ <stop offset="0" style="stop-color:#3ED900"/>
+ <stop offset="0.3899" style="stop-color:#3DD500"/>
+ <stop offset="0.7931" style="stop-color:#3AC800"/>
+ <stop offset="1" style="stop-color:#38BF00"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M80.01,65.04h-59.5c-0.69,0-1.25-0.56-1.25-1.25v-0.75v-2.96l-2.96-0.04
+ c-7.33-0.11-13.3-6.16-13.3-13.49s5.97-13.38,13.3-13.49l2.96-0.04v-2.96V4.29c0-0.69,0.56-1.25,1.25-1.25h59.5
+ c0.69,0,1.25,0.56,1.25,1.25v59.5C81.26,64.47,80.7,65.04,80.01,65.04L80.01,65.04z"/>
+ <path fill="#43EB00" d="M74.71,65.04c0.14-11.5,0.19-17.26-0.51-18.38c-3.42-5.53-13.79-4.31-16.74-3.84
+ c0-1.39-0.01-2.61-0.02-3.54c0.6-0.62,1.15-1.33,1.65-2.11l0.08,0.22c4.27,0.61,4.8-13.33,4.8-13.33
+ C64.28,4.23,51.88,8.78,49.91,9.62C46.27,8.7,37.62,8.07,37.87,23c0,0-0.63,13.21,4.21,13.58c0.59,1.01,1.28,1.91,2.02,2.69
+ c-0.01,0.86-0.05,1.96-0.09,3.23c-6.35-0.43-17.59-0.1-18.33,7.63c-0.07,0.74,0.14,4.4,0.33,14.91L74.71,65.04z"/>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_idle_24x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_idle_24x24px.svg
new file mode 100644
index 0000000..2d6da38
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_idle_24x24px.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<g>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="12.0337" y1="23.9922" x2="12.0337" y2="-7.812500e-03">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M12.03,23.99c-6.62,0-12-5.38-12-12c0-6.62,5.39-12,12-12s12,5.38,12,12
+ C24.03,18.61,18.65,23.99,12.03,23.99L12.03,23.99z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.7993" y1="5.5259" x2="21.267" y2="18.4571">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="12.03" cy="11.99" r="11.27"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="4.4814" y1="6.7754" x2="19.3806" y2="17.2079">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.93,21.09c-5.02,0-9.1-4.08-9.1-9.09c0-5.02,4.08-9.1,9.1-9.1s9.1,4.08,9.1,9.1
+ C21.03,17.01,16.95,21.09,11.93,21.09L11.93,21.09z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="18.249" y1="17.293" x2="5.613" y2="6.6901">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="11.93" cy="11.99" r="8.25"/>
+ <path fill="#FF901F" d="M11.93,19.15c-3.95,0-7.16-3.21-7.16-7.15c0-3.95,3.21-7.16,7.16-7.16c3.94,0,7.16,3.21,7.16,7.16
+ C19.09,15.94,15.88,19.15,11.93,19.15L11.93,19.15z"/>
+ <g>
+ <path fill="#FFD06B" d="M9.7,9.76c2.01-2.01,5.09-2.3,7.42-0.9c-0.25-0.41-0.54-0.8-0.9-1.16c-2.36-2.37-6.21-2.37-8.58,0
+ c-2.36,2.37-2.36,6.21,0,8.58c0.36,0.36,0.75,0.65,1.16,0.9C7.39,14.85,7.69,11.77,9.7,9.76z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-127.042" y1="62.0576" x2="-131.7007" y2="53.9885" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#FF901F"/>
+ <stop offset="1" style="stop-color:#FFB81F"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M16.22,16.28c2.01-2.01,2.3-5.09,0.9-7.42c-2.33-1.41-5.41-1.11-7.42,0.9
+ c-2.01,2.01-2.31,5.09-0.9,7.42C11.13,18.58,14.21,18.29,16.22,16.28z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_offline_24x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_offline_24x24px.svg
new file mode 100644
index 0000000..d592026
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_offline_24x24px.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<g>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="12.0005" y1="24.0449" x2="12.0005" y2="0.0454">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M12,24.04c-6.62,0-12-5.38-12-12c0-6.62,5.39-12,12-12s12,5.38,12,12
+ C24,18.66,18.62,24.04,12,24.04L12,24.04z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.7661" y1="5.5786" x2="21.2346" y2="18.5104">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="12" cy="12.04" r="11.27"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="4.4487" y1="6.8286" x2="19.3479" y2="17.2611">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.9,21.14c-5.02,0-9.1-4.08-9.1-9.09c0-5.02,4.08-9.1,9.1-9.1c5.02,0,9.1,4.08,9.1,9.1
+ C20.99,17.06,16.92,21.14,11.9,21.14L11.9,21.14z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="18.2168" y1="17.3467" x2="5.5801" y2="6.7432">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="11.9" cy="12.04" r="8.25"/>
+ <path fill="#BD0700" d="M11.9,19.2c-3.95,0-7.16-3.21-7.16-7.15c0-3.95,3.21-7.16,7.16-7.16c3.95,0,7.16,3.21,7.16,7.16
+ C19.05,15.99,15.84,19.2,11.9,19.2L11.9,19.2z"/>
+ <g>
+ <path fill="#F25757" d="M9.67,9.81c2.01-2.01,5.09-2.3,7.42-0.9c-0.25-0.41-0.54-0.8-0.9-1.16c-2.36-2.37-6.21-2.37-8.58,0
+ c-2.36,2.37-2.36,6.21,0,8.58c0.36,0.36,0.75,0.65,1.16,0.9C7.36,14.9,7.66,11.82,9.67,9.81z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-127.0752" y1="62.1104" x2="-131.7339" y2="54.0413" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#BD0700"/>
+ <stop offset="1" style="stop-color:#E35D58"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M16.19,16.33c2.01-2.01,2.3-5.08,0.9-7.41c-2.33-1.41-5.41-1.11-7.42,0.9
+ c-2.01,2.01-2.31,5.09-0.9,7.42C11.1,18.63,14.18,18.34,16.19,16.33z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_online_24x24px.svg b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_online_24x24px.svg
new file mode 100644
index 0000000..46ad07d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/resources/lime_SVG/lime_user_status_online_24x24px.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<g>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="12.0337" y1="23.9502" x2="12.0337" y2="-0.0498">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.8407" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#D9D9D9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M12.03,23.95c-6.62,0-12-5.38-12-12c0-6.62,5.38-12,12-12c6.62,0,12,5.38,12,12
+ C24.03,18.57,18.65,23.95,12.03,23.95L12.03,23.95z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="2.7988" y1="5.4839" x2="21.2673" y2="18.4157">
+ <stop offset="0.1099" style="stop-color:#FFFFFF"/>
+ <stop offset="0.6978" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_2_)" cx="12.03" cy="11.95" r="11.27"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="4.4819" y1="6.7339" x2="19.3803" y2="17.1658">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.93,21.05c-5.01,0-9.1-4.08-9.1-9.09c0-5.02,4.08-9.1,9.1-9.1c5.02,0,9.1,4.08,9.1,9.1
+ C21.03,16.97,16.95,21.05,11.93,21.05L11.93,21.05z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="18.248" y1="17.251" x2="5.6128" y2="6.6487">
+ <stop offset="0" style="stop-color:#A6A6A6"/>
+ <stop offset="0.4341" style="stop-color:#8C8C8C"/>
+ <stop offset="0.7308" style="stop-color:#999999"/>
+ <stop offset="1" style="stop-color:#E6E6E6"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_4_)" cx="11.93" cy="11.95" r="8.25"/>
+ <path fill="#09B300" d="M11.93,19.11c-3.95,0-7.16-3.21-7.16-7.15c0-3.95,3.21-7.16,7.16-7.16c3.94,0,7.16,3.21,7.16,7.16
+ C19.09,15.9,15.88,19.11,11.93,19.11L11.93,19.11z"/>
+ <g>
+ <path fill="#57EB51" d="M9.7,9.72c2.01-2.01,5.09-2.3,7.42-0.9c-0.25-0.41-0.54-0.8-0.9-1.16c-2.36-2.37-6.21-2.37-8.57,0
+ c-2.36,2.37-2.36,6.21,0,8.58c0.36,0.36,0.75,0.65,1.16,0.9C7.39,14.8,7.69,11.73,9.7,9.72z"/>
+
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-127.042" y1="62.0156" x2="-131.7007" y2="53.9465" gradientTransform="matrix(1 0 0 1 142.3301 -45.0029)">
+ <stop offset="0" style="stop-color:#09AA00"/>
+ <stop offset="1" style="stop-color:#4DCC46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M16.22,16.24c2.01-2.01,2.3-5.09,0.9-7.42c-2.33-1.41-5.41-1.11-7.42,0.9
+ c-2.01,2.01-2.31,5.09-0.9,7.42C11.13,18.54,14.21,18.25,16.22,16.24z"/>
+ </g>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp
new file mode 100644
index 0000000..f866fd7
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp
@@ -0,0 +1,401 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QDebug>
+#include <QGraphicsLayout>
+
+#include "abstractitemcontainer.h"
+#include "abstractitemview.h"
+#include "abstractviewitem.h"
+#include "scrollbar.h"
+
+AbstractItemContainer::AbstractItemContainer(int bufferSize, QGraphicsWidget *parent)
+ : GvbWidget(parent),
+ m_items(),
+ m_itemView(0),
+ m_prototype(0),
+ m_bufferSize(bufferSize),
+ m_twoColumns(false)
+{
+}
+
+AbstractItemContainer::~AbstractItemContainer()
+{
+ delete m_prototype;
+ m_prototype = 0;
+}
+
+AbstractViewItem *AbstractItemContainer::prototype()
+{
+ return m_prototype;
+}
+
+int AbstractItemContainer::bufferSize() const
+{
+ return m_bufferSize;
+}
+
+bool AbstractItemContainer::event(QEvent *e)
+{
+ if (e->type() == QEvent::LayoutRequest)
+ updateItemBuffer();
+
+ return QGraphicsWidget::event(e);
+}
+
+
+bool AbstractItemContainer::eventFilter(QObject *obj, QEvent *event)
+{
+ if (event->type()==QEvent::GraphicsSceneResize && m_itemView) {
+#if (QT_VERSION >= 0x040600)
+ const bool caching = m_itemView->listItemCaching();
+ m_itemView->setListItemCaching(false);
+#endif
+
+ QSizeF s = m_itemView->size();
+ s.setWidth(s.width()-m_itemView->verticalScrollBar()->size().width());
+ adjustVisibleContainerSize(s);
+
+ m_itemView->updateViewContent();
+ updateItemBuffer();
+
+#if (QT_VERSION >= 0x040600)
+ m_itemView->setListItemCaching(caching);
+#endif
+ }
+
+ return QGraphicsWidget::eventFilter(obj, event);
+}
+
+QVariant AbstractItemContainer::itemChange(GraphicsItemChange change, const QVariant &value)
+{
+ QVariant ichange = QGraphicsWidget::itemChange(change,value);
+
+ if (change == ItemPositionChange) {
+ if (m_itemView && layout() && !layout()->isActivated())
+ m_itemView->refreshContainerGeometry();
+ }
+ return ichange;
+ }
+
+/*virtual*/
+void AbstractItemContainer::setItemView(AbstractItemView *view)
+{
+ m_itemView = view;
+
+ if (m_itemView) {
+ setParentItem(m_itemView);
+ m_itemView->installEventFilter(this);
+ }
+}
+/*virtual*/
+void AbstractItemContainer::setItemPrototype(AbstractViewItem *ptype)
+{
+ m_prototype = ptype;
+ m_prototype->setParentItem(0);
+ m_prototype->hide();
+}
+
+/*virtual*/
+void AbstractItemContainer::reset()
+{
+ qDeleteAll(m_items);
+ m_items.clear();
+ updateItemBuffer();
+}
+
+
+/*virtual*/
+void AbstractItemContainer::addItem(const QModelIndex &index)
+{
+ if (m_items.count() < maxItemCountInItemBuffer() ||
+ (m_items.count() > 0 &&
+ m_items.first()->modelIndex().row()-1 <= index.row() &&
+ m_items.last()->modelIndex().row() >= index.row())) {
+ int itemPos = 0;
+ if (m_items.count() != 0)
+ itemPos = qMax(0, index.row() - m_items.first()->modelIndex().row());
+
+ if (itemPos >= m_items.count() || m_items.at(itemPos)->modelIndex() != index) {
+ AbstractViewItem *item = 0;
+ if (m_prototype)
+ item = m_prototype->newItemInstance();
+
+ if (item) {
+ item->setModel(m_itemView->model());
+ item->setTwoColumns(m_twoColumns);
+ m_items.insert(itemPos, item);
+ addItemToVisibleLayout(itemPos, item);
+
+ if (item->modelIndex() != index) {
+ item->setModelIndex(index);
+ }
+ }
+ }
+ updateItemBuffer();
+ }
+}
+void AbstractItemContainer::removeItem(const QModelIndex &index)
+{
+ AbstractViewItem *item = findItemByIndex(index);
+
+ if (item) {
+ if (maxItemCountInItemBuffer() < m_items.count()) {
+ m_items.removeOne(item);
+ removeItemFromVisibleLayout(item);
+
+ delete item;
+ }
+ else {
+ m_items.removeOne(item);
+ removeItemFromVisibleLayout(item);
+
+ QModelIndex newIndex = m_itemView->nextIndex(m_items.last()->modelIndex());
+ if (newIndex.isValid()) {
+ // Item readded as last item in buffer.
+ m_items.append(item);
+ addItemToVisibleLayout(m_items.count() - 1, item);
+ item->setModelIndex(newIndex);
+ } else {
+ // Item readded as first item in buffer.
+ newIndex = m_itemView->previousIndex(m_items.first()->modelIndex());
+
+ m_items.prepend(item);
+ addItemToVisibleLayout(0, item);
+ item->setModelIndex(newIndex);
+ }
+ }
+ }
+}
+
+/*virtual*/
+int AbstractItemContainer::itemCount() const
+{
+ return m_items.count();
+}
+
+AbstractViewItem *AbstractItemContainer::firstItem()
+{
+ return m_items.first();
+}
+
+/*virtual*/
+AbstractViewItem* AbstractItemContainer::itemAt(const int row) const
+{
+ if (row<0 || row >= m_items.count())
+ return 0;
+ return m_items.at(row);
+}
+
+AbstractViewItem* AbstractItemContainer::findItemByIndex(const QModelIndex &index) const
+{
+ AbstractViewItem *item = 0;
+ for (int i = 0; i < m_items.count(); ++i) {
+ if (m_items.at(i)->modelIndex() == index) {
+ item = m_items.at(i);
+ break;
+ }
+ }
+ return item;
+}
+
+bool AbstractItemContainer::itemVisibleInView(AbstractViewItem* item, const QRectF &viewRect, bool fullyVisible) const
+{
+ if (!item || !m_itemView)
+ return false;
+
+ QRectF itemRectBoundingRect = item->mapToItem(m_itemView, item->boundingRect()).boundingRect();
+
+ if (fullyVisible && viewRect.contains(itemRectBoundingRect))
+ return true;
+ else if (viewRect.intersects(itemRectBoundingRect))
+ return true;
+
+ return false;
+}
+
+void AbstractItemContainer::updateItemBuffer()
+{
+ if (!m_itemView || (m_itemView && !m_itemView->boundingRect().isValid()))
+ return;
+
+ int maxCount = maxItemCountInItemBuffer();
+
+ if (m_items.count() < maxCount) {
+ // New items needs to be added.
+ QModelIndex index;
+ if (m_items.count() > 0)
+ index = m_items.last()->modelIndex();
+ while (m_items.count() < maxCount) {
+ index = m_itemView->nextIndex(index);
+
+ if (!index.isValid())
+ break;
+
+ insertItem(m_items.count(), index);
+ }
+
+ index = m_items.first()->modelIndex();
+ while (m_items.count() < maxCount) {
+ index = m_itemView->previousIndex(index);
+
+ if (!index.isValid())
+ break;
+
+ insertItem(0, index);
+ }
+ }
+
+ QRectF viewRect = boundingRect();
+
+ while (m_items.count() > maxCount) {
+ int firstVisible = 0;
+ int lastVisible = 0;
+ findFirstAndLastVisibleBufferIndex(firstVisible, lastVisible, viewRect, false);
+
+ AbstractViewItem* item = 0;
+ if (lastVisible != m_items.count() - 1) {
+ item = m_items.takeLast();
+ }
+ else if (firstVisible != 0 && m_items.first()->modelIndex().row() != firstVisible-1) {
+ item = m_items.takeFirst();
+ }
+ else {
+ // All the items are visible. Take the item at the end of the buffer.
+ item = m_items.takeLast();
+ }
+
+ m_items.removeOne(item);
+ removeItemFromVisibleLayout(item);
+ delete item;
+ }
+}
+
+void AbstractItemContainer::insertItem(int pos, const QModelIndex &index)
+{
+ AbstractViewItem *item = 0;
+ if (m_prototype)
+ item = m_prototype->newItemInstance();
+
+ if (item) {
+ item->setModel(m_itemView->model());
+ item->setModelIndex(index);
+ item->setTwoColumns(m_twoColumns);
+ m_items.insert(pos, item);
+ addItemToVisibleLayout(pos, item);
+ item->updateItemContents();
+ if (pos == 0)
+ m_itemView->scrollContentsBy(qreal(0.0),
+ item->effectiveSizeHint(Qt::PreferredSize).height());
+ }
+}
+
+void AbstractItemContainer::findFirstAndLastVisibleBufferIndex(int &firstVisibleBufferIndex,
+ int &lastVisibleBufferIndex,
+ const QRectF &viewRect,
+ bool fullyVisible) const
+{
+ if (layout() && !layout()->isActivated())
+ layout()->activate();
+
+ firstVisibleBufferIndex = -1;
+ lastVisibleBufferIndex = -1;
+
+ int count = m_items.count();
+ for (int i = 0; i < count; ++i) {
+ if (itemVisibleInView(m_items.at(i), viewRect, fullyVisible)) {
+ if (firstVisibleBufferIndex == -1)
+ firstVisibleBufferIndex = i;
+ lastVisibleBufferIndex = i;
+ }
+ else if ( lastVisibleBufferIndex != -1 )
+ break; // lastVisibleBufferIndex is already set
+ }
+}
+
+/*virtual*/
+int AbstractItemContainer::maxItemCountInItemBuffer() const
+{
+ if (m_itemView && !m_itemView->boundingRect().isEmpty())
+ {
+ return m_itemView->indexCount();
+ }
+ return 0;
+}
+
+
+void AbstractItemContainer::themeChange()
+{
+ for (int i = 0; i <m_items.count(); ++i)
+ m_items.at(i)->themeChange();
+}
+
+void AbstractItemContainer::updateContent()
+{
+ for (int i = 0; i <m_items.count(); ++i)
+ m_items.at(i)->updateItemContents();
+}
+
+#if (QT_VERSION >= 0x040600)
+void AbstractItemContainer::setSubtreeCacheEnabled(bool enabled)
+{
+ for (int i = 0; i <m_items.count(); ++i)
+ m_items.at(i)->setSubtreeCacheEnabled(enabled);
+ if (m_prototype)
+ m_prototype->setSubtreeCacheEnabled(enabled);
+}
+#endif
+
+void AbstractItemContainer::setTwoColumns(const bool enabled)
+{
+ if (m_twoColumns == enabled)
+ return;
+
+ m_twoColumns = enabled;
+
+ for (int i = 0; i < m_items.count(); ++i)
+ m_items.at(i)->setTwoColumns(enabled);
+}
+
+bool AbstractItemContainer::twoColumns()
+{
+ return m_twoColumns;
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h
new file mode 100644
index 0000000..026bd11
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ABSTRACTITEMCONTAINER_H
+#define ABSTRACTITEMCONTAINER_H
+
+#include <QModelIndex>
+
+#include "gvbwidget.h"
+
+class QGraphicsWidget;
+class AbstractItemView;
+class AbstractViewItem;
+
+class AbstractItemContainer : public GvbWidget
+{
+ Q_OBJECT
+public:
+ AbstractItemContainer(int bufferSize, QGraphicsWidget *parent=0);
+ virtual ~AbstractItemContainer();
+
+ virtual void addItem(const QModelIndex &index);
+ virtual void removeItem(const QModelIndex &index);
+
+ virtual void setItemView(AbstractItemView *view);
+ virtual void setItemPrototype(AbstractViewItem *ptype);
+ virtual void reset();
+ virtual int itemCount() const;
+ virtual AbstractViewItem* itemAt(const int row) const;
+ AbstractViewItem* findItemByIndex(const QModelIndex &index) const;
+ AbstractViewItem *prototype();
+ AbstractViewItem *firstItem();
+ void updateContent();
+ void themeChange();
+ int bufferSize() const;
+ virtual void setTwoColumns(const bool enabled);
+ bool twoColumns();
+
+#if (QT_VERSION >= 0x040600)
+ void setSubtreeCacheEnabled(const bool enabled);
+ virtual void setListItemCaching(const bool enabled, const int index) = 0;
+#endif
+
+protected:
+ virtual void adjustVisibleContainerSize(const QSizeF &size) = 0;
+ virtual void addItemToVisibleLayout(int index, AbstractViewItem *item) = 0;
+ virtual void removeItemFromVisibleLayout(AbstractViewItem *item) = 0;
+
+ virtual bool event(QEvent *e);
+ virtual bool eventFilter(QObject *obj, QEvent *event);
+ virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
+ virtual int maxItemCountInItemBuffer() const;
+ bool itemVisibleInView(AbstractViewItem* item, const QRectF &viewRect, bool fullyVisible = true) const;
+
+protected:
+ void updateItemBuffer();
+ void findFirstAndLastVisibleBufferIndex(int &firstVisibleBufferIndex,
+ int &lastVisibleBufferIndex,
+ const QRectF &viewRect,
+ bool fullyVisible) const;
+ QList<AbstractViewItem*> m_items;
+ AbstractItemView *m_itemView;
+ AbstractViewItem *m_prototype;
+ int m_bufferSize;
+
+private:
+ void insertItem(int pos, const QModelIndex &index);
+ bool m_twoColumns;
+
+ Q_DISABLE_COPY(AbstractItemContainer)
+};
+
+#endif // ABSTRACTITEMCONTAINER_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp
new file mode 100644
index 0000000..fe03a21
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp
@@ -0,0 +1,443 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QGraphicsLayout>
+
+#include "abstractitemview.h"
+#include "abstractviewitem.h"
+#include "scrollbar.h"
+
+AbstractItemView::AbstractItemView(QGraphicsWidget *parent)
+ : AbstractScrollArea(parent),
+ m_model(0),
+ m_rootIndex(),
+ m_container(0),
+ m_selectionModel(0),
+ m_currentIndex(),
+ m_scroller()
+{
+ setRootIndex(QModelIndex());
+}
+
+/*virtual*/
+AbstractItemView::~AbstractItemView()
+{
+}
+
+/*virtual*/
+void AbstractItemView::setModel(QAbstractItemModel *model, AbstractViewItem *prototype)
+{
+ if( m_model == model || !model)
+ return;
+
+ if (m_model) {
+ disconnect(m_model, SIGNAL(destroyed()),
+ this, SLOT(_q_modelDestroyed()));
+ disconnect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT( dataChanged(QModelIndex,QModelIndex)));
+ disconnect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(rowsInserted(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
+ this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(columnsInserted(QModelIndex,int,int)),
+ this, SLOT(columnsInserted(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)),
+ this, SLOT(columnsAboutToBeInserted(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
+ this, SLOT(columnsRemoved(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
+ this, SLOT(columnsAboutToBeRemoved(QModelIndex,int,int)));
+ disconnect(m_model, SIGNAL(modelReset()), this, SLOT(reset()));
+ disconnect(m_model, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged()));
+
+ m_model = 0;
+ }
+
+ setSelectionModel(0);
+
+ m_currentIndex = QModelIndex();
+ m_rootIndex = QModelIndex();
+
+ m_model = model;
+
+ Q_ASSERT_X(m_model->index(0,0) == m_model->index(0,0),
+ "AbstractItemView::setModel",
+ "A model should return the exact same index "
+ "(including its internal id/pointer) when asked for it twice in a row.");
+ Q_ASSERT_X(m_model->index(0,0).parent() == QModelIndex(),
+ "AbstractItemView::setModel",
+ "The parent of a top level index should be invalid");
+
+
+ connect(m_model, SIGNAL(destroyed()), this, SLOT(modelDestroyed()));
+ connect(m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT( dataChanged(QModelIndex,QModelIndex)));
+ connect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
+ this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)));
+ connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(rowsInserted(QModelIndex,int,int)));
+ connect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
+ connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+ connect(m_model, SIGNAL(modelReset()), this, SLOT(reset()));
+ connect(m_model, SIGNAL(layoutChanged()), this, SLOT(layoutChanged()));
+
+ setSelectionModel(new QItemSelectionModel(m_model));
+
+ if (prototype && m_container) {
+ m_container->setItemPrototype(prototype);
+ m_container->reset();
+ }
+}
+
+/*virtual*/
+void AbstractItemView::setContainer(AbstractItemContainer *container)
+{
+ m_container = container;
+ m_container->setItemView(this);
+ m_container->setParentItem(viewport());
+
+ viewport()->setFlag(
+ QGraphicsItem::ItemClipsChildrenToShape, true);
+ m_scroller.setScrollable(this);
+ installEventFilter(&m_scroller);
+}
+
+/*virtual*/
+void AbstractItemView::setRootIndex(const QModelIndex &index)
+{
+ m_rootIndex = index;
+ // TODO fix this if we change index, container should be updated? Or do we need root index?
+}
+
+/*virtual*/
+int AbstractItemView::indexCount() const
+{
+ if (m_model)
+ return m_model->rowCount(m_rootIndex);
+ return 0;
+}
+
+/*virtual*/
+QAbstractItemModel* AbstractItemView::model() const
+{
+ return m_model;
+}
+
+/*virtual*/
+QModelIndex AbstractItemView::nextIndex(const QModelIndex &index) const
+{
+ if (!m_model)
+ return QModelIndex();
+
+ if (index.isValid())
+ return m_model->index(index.row() + 1, 0, m_rootIndex);
+ else
+ return m_model->index(0, 0, m_rootIndex);
+}
+
+/*virtual*/
+QModelIndex AbstractItemView::previousIndex(const QModelIndex &index) const
+{
+ if (!m_model)
+ return QModelIndex();
+
+ if (index.isValid())
+ return m_model->index(index.row() - 1, 0, m_rootIndex);
+ else
+ return m_model->index(m_model->rowCount(m_rootIndex) - 1, 0, m_rootIndex);
+}
+
+/*virtual*/
+void AbstractItemView::setItemPrototype(AbstractViewItem* prototype)
+{
+ if (prototype && m_container) {
+ m_container->setItemPrototype(prototype);
+ m_container->reset();
+ }
+}
+
+void AbstractItemView::setSelectionModel(QItemSelectionModel *smodel)
+{
+ if (smodel && smodel->model() != m_model) {
+ return;
+ }
+ if (m_selectionModel) {
+ disconnect(m_selectionModel, SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
+ this, SLOT(currentSelectionChanged(QItemSelection, QItemSelection)));
+
+ disconnect(m_selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ this, SLOT(currentIndexChanged(QModelIndex, QModelIndex)));
+
+ delete m_selectionModel;
+ m_selectionModel = 0;
+ }
+
+ m_selectionModel = smodel;
+
+ if (m_selectionModel) {
+ connect(m_selectionModel, SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
+ this, SLOT(currentSelectionChanged(QItemSelection, QItemSelection)));
+ connect(m_selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ this, SLOT(currentIndexChanged(QModelIndex, QModelIndex)));
+ }
+}
+
+/*virtual*/
+void AbstractItemView::currentIndexChanged(const QModelIndex &current, const QModelIndex &previous)
+{
+ Q_UNUSED(previous)
+
+ if (current != m_currentIndex)
+ m_currentIndex = current;
+}
+
+/*virtual*/
+void AbstractItemView::currentSelectionChanged(const QItemSelection &selected,
+ const QItemSelection &deselected)
+{
+ Q_UNUSED(selected)
+ Q_UNUSED(deselected)
+}
+
+/*virtual*/
+void AbstractItemView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{
+ Q_UNUSED(topLeft)
+ Q_UNUSED(bottomRight)
+ // TODO implement if we like to edit view items.
+}
+
+/*virtual*/
+void AbstractItemView::rowsAboutToBeInserted(const QModelIndex &index, int start, int end)
+{
+ Q_UNUSED(index)
+ Q_UNUSED(start)
+ Q_UNUSED(end)
+
+ // TODO implement
+}
+
+
+/*virtual*/
+void AbstractItemView::rowsAboutToBeRemoved(const QModelIndex &index,int start, int end)
+{
+ Q_UNUSED(index)
+ Q_UNUSED(start)
+ Q_UNUSED(end)
+}
+
+/*virtual*/
+void AbstractItemView::rowsRemoved(const QModelIndex &parent,int start, int end)
+{
+ Q_UNUSED(parent)
+ Q_UNUSED(start)
+ Q_UNUSED(end)
+
+ if (start <= m_currentIndex.row() && m_currentIndex.row() <= end) {
+ QModelIndex newCurrentIndex = m_model->index(start, 0, m_rootIndex);
+ if (!newCurrentIndex.isValid()) {
+ newCurrentIndex = m_model->index(qMax(0,start - 1), 0, m_rootIndex);
+ }
+
+ if (m_selectionModel) {
+ m_selectionModel->setCurrentIndex(newCurrentIndex, QItemSelectionModel::NoUpdate);
+ }
+ }
+ for (int i = end; i >= start; --i) //The items are already removed from the model.
+ m_container->removeItem(QModelIndex()); // Indexes are already invalid.
+}
+
+/*virtual*/
+void AbstractItemView::reset()
+{
+ m_rootIndex = QModelIndex();
+
+ if (m_container)
+ m_container->reset();
+
+ setCurrentIndex(QModelIndex());
+
+ ScrollBar *sb = verticalScrollBar();
+
+ if (sb)
+ sb->setSliderSize(0);
+}
+
+/*virtual*/
+void AbstractItemView::rowsInserted(const QModelIndex &parent, int start, int end)
+{
+ if (!m_container)
+ return;
+
+ for (int i = start; i <= end; ++i)
+ m_container->addItem(m_model->index(i, 0, parent));
+
+ refreshContainerGeometry();
+}
+
+/*virtual*/
+void AbstractItemView::modelDestroyed()
+{
+ m_model = 0;
+ setSelectionModel(0);
+ reset();
+}
+
+/*virtual*/
+void AbstractItemView::layoutChanged()
+{
+ m_container->reset();
+}
+
+bool AbstractItemView::event(QEvent *e)
+{
+ bool result = AbstractScrollArea::event(e);
+ if (e && e->type()==QEvent::LayoutRequest) {
+ refreshContainerGeometry();
+ result = true;
+ }
+ if (e && e->type()==QEvent::GraphicsSceneResize) {
+ m_scroller.stopScrolling();
+ refreshContainerGeometry();
+
+ m_container->resize(this->size().width()-verticalScrollBar()->size().width(),
+ m_container->preferredHeight());
+
+ if(verticalScrollBar()->sliderPosition() > verticalScrollBar()->sliderSize())
+ verticalScrollBar()->setSliderPosition(verticalScrollBar()->sliderSize());
+
+ result = true;
+ }
+ return result;
+}
+
+void AbstractItemView::setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags selectionFlag)
+{
+ if (m_selectionModel)
+ m_selectionModel->setCurrentIndex(index, selectionFlag);
+}
+
+void AbstractItemView::refreshContainerGeometry()
+{
+ if (!m_container || !m_model)
+ return;
+
+ if (m_container->layout() && !m_container->layout()->isActivated())
+ m_container->layout()->activate();
+
+ ScrollBar *sb = verticalScrollBar();
+
+ if (sb) {
+ AbstractViewItem *item = m_container->itemAt(0);
+ if (item) {
+ qreal oneItemH = item->size().height();
+ sb->setSliderSize(oneItemH*m_model->rowCount(m_rootIndex)-size().height());
+ }
+ if (!sb->isVisible() && verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff &&
+ contentsRect().height() < m_container->boundingRect().height())
+ sb->show();
+ }
+}
+
+void AbstractItemView::scrollContentsBy(qreal dx, qreal dy)
+{
+ AbstractScrollArea::scrollContentsBy(dx, dy);
+
+ if (!viewport() || !m_container || (m_container && m_container->itemCount() <= 0) ||
+ !m_model || (m_model && m_model->rowCount() <= 0) ||
+ (viewport() && viewport()->boundingRect().height() < contentsRect().height()))
+ return;
+
+ qreal itemH = 1;
+
+ AbstractViewItem *item = m_container->itemAt(0);
+ if(item && item->size().height() > 1) {
+ itemH = item->size().height();
+ }
+ else if(item && item->preferredHeight() > 1) {
+ itemH = item->preferredHeight();
+ }
+
+ qreal vpx = m_container->pos().x();
+ qreal vpy = m_container->pos().y();
+
+ if ((vpy+m_container->size().height()-dy > pos().y()+size().height()) &&
+ (qAbs(dy) < itemH) && (vpy-dy <= 0)) {
+ m_container->setPos(vpx, vpy-dy);
+ }
+ else {
+ qreal vPos = verticalScrollBar()->sliderPosition();
+ int startRow = m_model->index(vPos/itemH, 0).row();
+ int itemsInContainer = m_container->itemCount();
+
+ for (int i = 0; i<itemsInContainer; ++i) {
+ AbstractViewItem *changedItem = m_container->itemAt(i);
+ changedItem->setModelIndex(m_model->index(startRow+i,0));
+#if (QT_VERSION >= 0x040600)
+ m_container->setListItemCaching(listItemCaching(), i);
+#endif
+ }
+
+ qreal diff = vPos-startRow*itemH;
+
+ if (diff < 0)
+ m_container->setPos(vpx, diff);
+ else
+ m_container->setPos(vpx, -diff);
+ }
+}
+
+void AbstractItemView::changeTheme()
+{
+ if (m_container)
+ m_container->themeChange();
+}
+
+void AbstractItemView::updateViewContent()
+{
+ if (m_container)
+ m_container->updateContent();
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h
new file mode 100644
index 0000000..2e191a1
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ABSTRACTITEMVIEW_H
+#define ABSTRACTITEMVIEW_H
+
+#include <QAbstractItemModel>
+#include <QGraphicsSceneResizeEvent>
+#include <QPersistentModelIndex>
+#include <QItemSelection>
+
+#include "listitemcontainer.h"
+#include "abstractscrollarea.h"
+#include "scroller.h"
+
+class QItemSelectionModel;
+
+class AbstractItemView : public AbstractScrollArea
+{
+ Q_OBJECT
+public:
+ AbstractItemView(QGraphicsWidget *parent = 0);
+ virtual ~AbstractItemView();
+ virtual void setContainer(AbstractItemContainer *container);
+ virtual void setModel(QAbstractItemModel *model, AbstractViewItem *prototype);
+ virtual QAbstractItemModel* model() const;
+ virtual void setItemPrototype(AbstractViewItem* prototype);
+
+ void setSelectionModel(QItemSelectionModel *smodel);
+
+ virtual QModelIndex nextIndex(const QModelIndex &index) const;
+ virtual QModelIndex previousIndex(const QModelIndex &index) const;
+
+ virtual int indexCount() const;
+
+ void refreshContainerGeometry(); // TODO Can this be moved to scroll area?
+
+ void updateViewContent();
+ virtual void scrollContentsBy(qreal dx, qreal dy);
+
+#if (QT_VERSION >= 0x040600)
+ virtual bool listItemCaching() const = 0;
+ virtual void setListItemCaching(bool enabled) = 0;
+#endif
+
+protected:
+ virtual bool event(QEvent *e);
+ void changeTheme();
+
+public slots:
+ virtual void setRootIndex(const QModelIndex &index);
+ void setCurrentIndex(const QModelIndex &index,
+ QItemSelectionModel::SelectionFlags selectionFlag = QItemSelectionModel::NoUpdate);
+protected slots:
+ virtual void currentIndexChanged(const QModelIndex &current, const QModelIndex &previous);
+ virtual void currentSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+ virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+ virtual void rowsAboutToBeInserted(const QModelIndex &index, int start, int end);
+ virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+ virtual void rowsAboutToBeRemoved(const QModelIndex &index,int start, int end);
+ virtual void rowsRemoved(const QModelIndex &parent,int start, int end);
+ virtual void modelDestroyed();
+ virtual void layoutChanged();
+ virtual void reset();
+
+protected:
+
+ QAbstractItemModel *m_model;
+ QPersistentModelIndex m_rootIndex;
+ AbstractItemContainer *m_container;
+ QItemSelectionModel *m_selectionModel;
+ QPersistentModelIndex m_currentIndex;
+
+private:
+ Q_DISABLE_COPY(AbstractItemView)
+ Scroller m_scroller;
+};
+
+
+#endif // ABSTRACTITEMVIEW_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp
new file mode 100644
index 0000000..f6d7a6c
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp
@@ -0,0 +1,249 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsSceneResizeEvent>
+#include <QGraphicsWidget>
+#include <QDebug>
+#include "abstractscrollarea.h"
+#include "scrollbar.h"
+
+AbstractScrollArea::AbstractScrollArea(QGraphicsWidget *parent)
+ : GvbWidget(parent)
+ , m_viewport(0)
+ , m_horizontalScrollBar(0)
+ , m_verticalScrollBar(0)
+ , m_prevHorizontalValue(0.0)
+ , m_prevVerticalValue(0.0)
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setContentsMargins(0, 0, 0, 0);
+
+ m_horizontalScrollBar = new ScrollBar(Qt::Horizontal, this);
+ m_horizontalScrollBar->hide();
+ m_horizontalScrollBar->setContentsMargins(0, 0, 0, 0);
+ m_horizontalScrollBarPolicy = Qt::ScrollBarAsNeeded;
+ m_horizontalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top
+ m_horizontalScrollBar->setVisible(false);
+
+ connect(m_horizontalScrollBar, SIGNAL(sliderPositionChange(qreal)),
+ this, SLOT(horizontalScroll(qreal)));
+ connect(m_horizontalScrollBar, SIGNAL(sliderPressed()),
+ this, SLOT(horizontalScrollStart()));
+
+ m_verticalScrollBar = new ScrollBar(Qt::Vertical, this);
+ m_verticalScrollBar->hide();
+ m_verticalScrollBar->setContentsMargins(0, 0, 0, 0);
+ m_verticalScrollBarPolicy = Qt::ScrollBarAsNeeded;
+ m_verticalScrollBar->setZValue(zValue()+1); // Raise scroll bar to top
+ m_verticalScrollBar->setVisible(false);
+
+ connect(m_verticalScrollBar, SIGNAL(sliderPositionChange(qreal)),
+ this, SLOT(verticalScroll(qreal)));
+ connect(m_verticalScrollBar, SIGNAL(sliderPressed()),
+ this, SLOT(verticalScrollStart()));
+
+ QGraphicsWidget *viewport = new QGraphicsWidget;
+ setViewport(viewport);
+}
+
+AbstractScrollArea::~AbstractScrollArea()
+{
+}
+
+ScrollBar *AbstractScrollArea::verticalScrollBar() const
+{
+ return m_verticalScrollBar;
+}
+
+ScrollBar *AbstractScrollArea::horizontalScrollBar() const
+{
+ return m_horizontalScrollBar;
+}
+
+void AbstractScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy)
+{
+ m_horizontalScrollBarPolicy = policy;
+}
+
+void AbstractScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy)
+{
+ m_verticalScrollBarPolicy = policy;
+}
+
+Qt::ScrollBarPolicy AbstractScrollArea::verticalScrollBarPolicy() const
+{
+ return m_verticalScrollBarPolicy;
+}
+
+Qt::ScrollBarPolicy AbstractScrollArea::horizontalScrollBarPolicy() const
+{
+ return m_horizontalScrollBarPolicy;
+}
+
+QGraphicsWidget *AbstractScrollArea::viewport() const
+{
+ return m_viewport;
+}
+
+void AbstractScrollArea::setViewport(QGraphicsWidget *viewport)
+{
+ if (m_viewport) {
+ m_viewport->setParentItem(0);
+
+ QList<QGraphicsItem*> children = m_viewport->childItems();
+
+ foreach (QGraphicsItem *child, children)
+ child->setParentItem(0);
+
+ delete m_viewport;
+ }
+
+ m_viewport = viewport;
+
+ if (viewport) {
+
+ m_viewport->setParentItem(this);
+ m_viewport->setContentsMargins(0, 0, 0, 0);
+
+ adjustScrollBars();
+ }
+
+ emit viewportChanged(viewport);
+}
+
+bool AbstractScrollArea::event(QEvent *e)
+{
+ if (e->type() == QEvent::ApplicationLayoutDirectionChange
+ || e->type() == QEvent::LayoutDirectionChange) {
+ } else if (e->type() == QEvent::GraphicsSceneResize) {
+ QGraphicsSceneResizeEvent *event =
+ static_cast<QGraphicsSceneResizeEvent*>(e);
+
+ QSizeF newSize = event->newSize();
+ QRectF hrect = m_horizontalScrollBar->boundingRect();
+ QRectF vrect = m_verticalScrollBar->boundingRect();
+
+ QSizeF vpSize = newSize;
+
+ if (m_horizontalScrollBarPolicy != Qt::ScrollBarAlwaysOff)
+ vpSize.setHeight(newSize.height() - hrect.height());
+ if (m_verticalScrollBarPolicy != Qt::ScrollBarAlwaysOff)
+ vpSize.setWidth(newSize.width() - vrect.width());
+
+ m_viewport->resize(vpSize);
+
+ adjustScrollBars();
+ }
+
+ return QGraphicsWidget::event(e);
+}
+
+
+void AbstractScrollArea::scrollContentsBy(qreal dx, qreal dy)
+{
+ Q_UNUSED(dx)
+ Q_UNUSED(dy)
+ prepareGeometryChange();
+}
+
+void AbstractScrollArea::verticalScrollStart()
+{
+ m_prevVerticalValue = m_verticalScrollBar->sliderPosition();
+}
+
+void AbstractScrollArea::verticalScroll(qreal value)
+{
+ qreal dy = value - m_prevVerticalValue;
+ if (!qFuzzyCompare(dy,qreal(0.0))) {
+ scrollContentsBy(0.0, dy);
+ m_prevVerticalValue = value;
+ }
+}
+
+void AbstractScrollArea::horizontalScrollStart()
+{
+ m_prevHorizontalValue = m_horizontalScrollBar->sliderPosition();
+}
+
+void AbstractScrollArea::horizontalScroll(qreal value)
+{
+ qreal dx = value - m_prevHorizontalValue;
+ if (!qFuzzyCompare(dx,qreal(0.0))) {
+ scrollContentsBy(dx, 0.0);
+ m_prevHorizontalValue = value;
+ }
+}
+
+void AbstractScrollArea::adjustScrollBars()
+{
+ if (m_horizontalScrollBarPolicy == Qt::ScrollBarAlwaysOff) {
+ m_horizontalScrollBar->hide();
+ } else {
+ m_horizontalScrollBar->show();
+
+ QRectF sbgeom = boundingRect();
+
+ sbgeom.setTop(sbgeom.bottom() - m_horizontalScrollBar->boundingRect().height());
+ sbgeom.setRight(sbgeom.right() - m_verticalScrollBar->boundingRect().width());
+ m_horizontalScrollBar->setGeometry(sbgeom);
+ }
+
+ if (m_verticalScrollBarPolicy == Qt::ScrollBarAlwaysOff) {
+ m_verticalScrollBar->hide();
+ QRectF sbgeom = boundingRect();
+ sbgeom.setLeft(sbgeom.right());
+ sbgeom.setBottom(sbgeom.bottom());
+ m_verticalScrollBar->setGeometry(sbgeom);
+ } else {
+ m_verticalScrollBar->show();
+
+ QRectF sbgeom = boundingRect();
+
+ sbgeom.setLeft(sbgeom.right() - m_verticalScrollBar->boundingRect().width());
+ if (m_horizontalScrollBarPolicy != Qt::ScrollBarAlwaysOff)
+ sbgeom.setBottom(sbgeom.bottom() - m_horizontalScrollBar->boundingRect().height());
+ m_verticalScrollBar->setGeometry(sbgeom);
+ }
+}
+
+
+
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h
new file mode 100644
index 0000000..5e15d52
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ABSTRACTSCROLLAREA_H
+#define ABSTRACTSCROLLAREA_H
+
+#include "gvbwidget.h"
+
+class ScrollBar;
+class QGraphicsGridLayout;
+
+class AbstractScrollArea : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+
+ AbstractScrollArea(QGraphicsWidget *parent = 0);
+ ~AbstractScrollArea();
+
+public:
+
+ void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy);
+ void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy);
+ Qt::ScrollBarPolicy verticalScrollBarPolicy() const;
+ Qt::ScrollBarPolicy horizontalScrollBarPolicy() const;
+
+ QGraphicsWidget *viewport() const;
+ void setViewport(QGraphicsWidget *viewport);
+
+ ScrollBar *verticalScrollBar() const;
+ ScrollBar *horizontalScrollBar() const;
+
+signals:
+
+ void viewportChanged(QGraphicsWidget *viewport);
+
+protected:
+
+ virtual bool event(QEvent *e);
+ virtual void scrollContentsBy(qreal dx, qreal dy);
+
+private slots:
+
+ void verticalScrollStart();
+ void verticalScroll(qreal);
+ void horizontalScrollStart();
+ void horizontalScroll(qreal);
+
+private:
+
+ void adjustScrollBars();
+
+ QGraphicsWidget *m_viewport;
+ ScrollBar *m_horizontalScrollBar;
+ ScrollBar *m_verticalScrollBar;
+ Qt::ScrollBarPolicy m_verticalScrollBarPolicy;
+ Qt::ScrollBarPolicy m_horizontalScrollBarPolicy;
+ qreal m_prevHorizontalValue;
+ qreal m_prevVerticalValue;
+};
+
+#endif // ABSTRACTSCROLLAREA_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp
new file mode 100644
index 0000000..528bd87
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "abstractviewitem.h"
+
+AbstractViewItem::AbstractViewItem(QGraphicsWidget *parent)
+ : GvbWidget(parent),
+ m_index(),
+ m_itemView(0),
+ m_prototype(0)
+{
+}
+
+/*virtual*/
+AbstractViewItem::~AbstractViewItem()
+{
+}
+
+QModelIndex AbstractViewItem::modelIndex() const
+{
+ return m_index;
+}
+
+AbstractViewItem *AbstractViewItem::prototype() const
+{
+ return m_prototype;
+}
+
+AbstractItemView *AbstractViewItem::itemView() const
+{
+ return m_itemView;
+}
+
+void AbstractViewItem::setItemView(AbstractItemView *itemView)
+{
+ m_itemView = itemView;
+}
+
+void AbstractViewItem::setModelIndex(const QModelIndex &index)
+{
+ if (m_index != index) {
+ m_index = index;
+ updateItemContents();
+ }
+}
+
+/*virtual*/
+QSizeF AbstractViewItem::effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+ return GvbWidget::effectiveSizeHint(which, constraint);
+}
+
+/*virtual*/
+bool AbstractViewItem::event(QEvent *e)
+{
+ return QGraphicsWidget::event(e);
+}
+
+/*virtual*/
+void AbstractViewItem::updateItemContents()
+{
+ ; // No impl yet
+}
+
+/*virtual*/
+void AbstractViewItem::themeChange()
+{
+ ; // No impl yet
+}
+
+#if (QT_VERSION >= 0x040600)
+/*virtual*/
+void AbstractViewItem::setSubtreeCacheEnabled(bool enabled)
+{
+ Q_UNUSED(enabled)
+ ; // No impl
+}
+#endif
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h
new file mode 100644
index 0000000..3649cb0
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ABSTRACTVIEWITEM_H
+#define ABSTRACTVIEWITEM_H
+
+#include <QModelIndex>
+
+#include "gvbwidget.h"
+#include "abstractitemview.h"
+#include "listitem.h"
+
+class QGraphicsWidget;
+
+class AbstractViewItem : public GvbWidget
+{
+ Q_OBJECT
+public:
+ AbstractViewItem(QGraphicsWidget *parent = 0);
+ virtual ~AbstractViewItem();
+
+ virtual AbstractViewItem *newItemInstance() = 0;
+
+ QModelIndex modelIndex() const;
+
+ void setModelIndex(const QModelIndex &index);
+
+ AbstractViewItem *prototype() const;
+ AbstractItemView *itemView() const;
+ void setItemView(AbstractItemView *itemView) ;
+ virtual void updateItemContents();
+ virtual void themeChange();
+
+#if (QT_VERSION >= 0x040600)
+ virtual void setSubtreeCacheEnabled(bool enabled);
+#endif
+
+ virtual QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+
+ virtual void setModel(QAbstractItemModel *model) = 0;
+ virtual QVariant data(int role) const = 0;
+ virtual void setData(const QVariant &value, int role = Qt::DisplayRole) = 0;
+ virtual void setTwoColumns(const bool enabled) = 0;
+
+protected:
+ virtual bool event(QEvent *e);
+
+ QPersistentModelIndex m_index;
+
+private:
+ Q_DISABLE_COPY(AbstractViewItem)
+
+ AbstractItemView *m_itemView;
+ AbstractViewItem *m_prototype;
+
+};
+
+#endif // ABSTRACTVIEWITEM_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp
new file mode 100644
index 0000000..e4cef5d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QStyleOptionGraphicsItem>
+#include <QGraphicsSceneResizeEvent>
+#include <QPainter>
+#include <QRectF>
+
+#include "backgrounditem.h"
+#include "theme.h"
+
+BackgroundItem::BackgroundItem(const QString &filename, QGraphicsWidget *parent)
+ : GvbWidget(parent),
+ m_background(),
+ m_fileName(filename)
+{
+ setContentsMargins(0,0,0,0);
+
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+}
+
+BackgroundItem::~BackgroundItem()
+{
+
+}
+
+void BackgroundItem::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ GvbWidget::resizeEvent(event);
+ m_background = Theme::p()->pixmap(m_fileName, size().toSize());
+}
+
+void BackgroundItem::paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ Q_UNUSED(widget)
+ painter->setCompositionMode(QPainter::CompositionMode_Source);
+ painter->drawPixmap(option->exposedRect, m_background, option->exposedRect);
+}
+
+void BackgroundItem::themeChange()
+{
+ m_background = Theme::p()->pixmap(m_fileName, size().toSize());
+ update();
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h
new file mode 100644
index 0000000..e69dbfe
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __BACKGROUNDITEM_H__
+#define __BACKGROUNDITEM_H__
+
+#include <QPixmap>
+
+#include "gvbwidget.h"
+
+class QGraphicsWidget;
+
+class BackgroundItem : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+ BackgroundItem(const QString &filename, QGraphicsWidget *parent=0);
+ ~BackgroundItem();
+
+ void paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget = 0);
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+public slots:
+ void themeChange();
+
+private:
+ QPixmap m_background;
+ QString m_fileName;
+};
+
+#endif /* __BACKGROUNDITEM_H__ */
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
new file mode 100644
index 0000000..3380ea4
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
@@ -0,0 +1,209 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "button.h"
+#include "theme.h"
+
+static const int MinTextWidthAsChars = 8;
+
+class ButtonPrivate {
+ Q_DECLARE_PUBLIC(Button)
+
+public:
+
+ ButtonPrivate(Button *button)
+ : down(false)
+ , q_ptr(button)
+ {
+ textItem = new QGraphicsSimpleTextItem(q_ptr);
+ }
+
+ QGraphicsSimpleTextItem *textItem;
+ bool down;
+ Button *q_ptr;
+};
+
+Button::Button(const QString &text, QGraphicsItem *parent, QSizeF minimumSize)
+ : QGraphicsWidget(parent)
+ , d_ptr(new ButtonPrivate(this)), m_background(), m_selected(false)
+{
+ Q_D(Button);
+ setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ //setCacheMode(QGraphicsItem::ItemCoordinateCache);
+ if(minimumSize.isValid())
+ setMinimumSize(minimumSize);
+ setContentsMargins(0, 0, 0, 0);
+ d->textItem->setText(text);
+ prepareGeometryChange();
+
+ m_font = Theme::p()->font(Theme::MenuItem);
+ d->textItem->setFont(m_font);
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+}
+
+Button::~Button()
+{
+ delete d_ptr;
+}
+
+bool Button::isDown()
+{
+ Q_D(Button);
+
+ return d->down;
+}
+
+void Button::setText(const QString &text)
+{
+ Q_D(Button);
+ d->textItem->setText(text);
+ update();
+}
+
+QString Button::text()
+{
+ Q_D(Button);
+ return d->textItem->text();
+}
+
+void Button::paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(option);
+
+ if(!m_background.isNull())
+ painter->drawPixmap(QPoint(), m_background);
+ if(m_selected) {
+ painter->setBrush(Qt::black);
+ painter->setOpacity(0.2);
+ painter->drawRect(boundingRect().toRect());
+ }
+}
+
+QSizeF Button::sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint) const
+{
+ Q_D(const Button);
+
+ switch (which)
+ {
+ case Qt::MinimumSize:
+ {
+ QFontMetricsF fm(d->textItem->font());
+ return QSizeF(MinTextWidthAsChars * fm.maxWidth(), fm.height());
+ }
+ case Qt::PreferredSize:
+ {
+ QFontMetricsF fm(d->textItem->font());
+ return QSizeF(fm.width(d->textItem->text()), fm.height());
+ }
+ default:
+ return QGraphicsWidget::sizeHint(which, constraint);
+ }
+}
+
+void Button::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(Button);
+
+ if (event->button() != Qt::LeftButton ||
+ !sceneBoundingRect().contains(event->scenePos()))
+ return;
+
+ d->down = true;
+
+ prepareGeometryChange();
+ emit pressed();
+
+}
+
+void Button::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(Button);
+
+ if (!d->down || event->button() != Qt::LeftButton)
+ return;
+
+ d->down = false;
+
+ prepareGeometryChange();
+
+ emit released();
+
+ if (sceneBoundingRect().contains(event->scenePos()))
+ emit clicked();
+}
+
+void Button::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_UNUSED(event);
+}
+
+void Button::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ Q_D(Button);
+ QGraphicsWidget::resizeEvent(event);
+
+ QRectF rect = d->textItem->boundingRect();
+ QRectF buttonrect = this->boundingRect();
+ d->textItem->setPos((buttonrect.width() - rect.width())/2, (buttonrect.height() - rect.height())/2 );
+
+ QSize currentSize = buttonrect.size().toSize();
+ if( m_background.size() != currentSize && (currentSize.width() > 0 && currentSize.height() > 0) ) {
+ m_background = Theme::p()->pixmap("status_field_middle.svg", buttonrect.size().toSize());
+ }
+}
+
+void Button::setBackground(QPixmap& background)
+{
+ m_background = background;
+}
+
+void Button::themeChange()
+{
+ Q_D(Button);
+
+ m_font = Theme::p()->font(Theme::MenuItem);
+ d->textItem->setFont(m_font);
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h
new file mode 100644
index 0000000..adea9da
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BUTTON_H
+#define BUTTON_H
+
+#include <QGraphicsWidget>
+
+class ButtonPrivate;
+class QTextDocument;
+
+class QPixmap;
+class QFont;
+
+class Button : public QGraphicsWidget
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(Button)
+
+public:
+
+ Button(const QString &text, QGraphicsItem *parent=0, QSizeF minimumSize = QSizeF());
+ virtual ~Button();
+
+signals:
+
+ void clicked(bool checked = false);
+ void pressed();
+ void released();
+
+public slots:
+
+ void themeChange();
+ void setText(const QString &text);
+ QString text();
+
+public:
+
+ void setBackground(QPixmap& background);
+ bool isDown();
+ void select(bool select){m_selected = select;}
+ void click() {emit clicked();}
+
+private:
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget = 0);
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint = QSizeF()) const;
+
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+private:
+ Q_DISABLE_COPY(Button)
+ ButtonPrivate *d_ptr;
+ QPixmap m_background;
+ QFont m_font;
+ bool m_selected;
+};
+
+#endif // BUTTON_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp
new file mode 100644
index 0000000..4fadac6
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QStringList>
+#include <QDebug>
+
+#include "commandline.h"
+
+static void usage(const char *appname)
+{
+ Q_UNUSED(appname);
+ printf(" GraphicsViewBenchmark related options:\n");
+ printf(" -h,-help,--help: This help\n");
+ printf(" -resolution : UI resolution in format WxH where width and height are positive values\n");
+ printf(" -opengl : Enables OpenGL usage. Building PRECONDITIONS: QT_NO_OPENGL is off.\n");
+ printf(" -manual : Run test manually \n");
+ printf("\n The following options are available in manual mode:\n");
+ printf(" -rotation : UI rotation in degrees\n");
+ printf(" -subtree-cache : Enables usage of subtree caching method\n");
+ printf(" -fps : Output FPS count to stdout during application execution\n");
+ printf(" -items : Count of items created to the list\n");
+ printf("\n");
+}
+
+static inline bool argumentOnlyAvailableInManualMode(const char *arg)
+{
+ return (strcmp(arg, "-rotation") == 0)
+ || (strcmp(arg, "-subtree-cache") == 0)
+ || (strcmp(arg, "-fps") == 0)
+ || (strcmp(arg, "-items") == 0);
+}
+
+bool readSettingsFromCommandLine(int argc, char *argv[],
+ Settings& config)
+{
+ bool builtWithOpenGL = false;
+ Settings::Options options;
+
+#ifndef QT_NO_OPENGL
+ builtWithOpenGL = true;
+#endif
+ for (int i = 1; i < argc; ++i) {
+ if (strcmp(argv[i], "-manual") == 0) {
+ options |= Settings::ManualTest;
+ argv[i] = 0;
+ break;
+ }
+ }
+
+ for (int i = 1; i < argc; ++i) {
+ if (!argv[i])
+ continue;
+ if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0 || strcmp(argv[i], "--help") == 0) {
+ usage(argv[0]);
+ return true;
+ }
+ if (strcmp(argv[i], "-opengl") == 0) {
+ if (builtWithOpenGL) {
+ options |= Settings::UseOpenGL;
+ argv[i] = 0;
+ } else {
+ printf("-opengl parameter can be used only with building PRECONDITIONS: QT_NO_OPENGL is off.\n");
+ usage(argv[0]);
+ return false;
+ }
+ } else if (strcmp(argv[i], "-resolution") == 0) {
+ if (i + 1 >= argc) {
+ printf("-resolution needs an extra parameter specifying the application UI resolution\n");
+ usage(argv[0]);
+ return false;
+ }
+ else {
+ QStringList res = QString(argv[i+1]).split("x");
+ if (res.count() != 2) {
+ printf("-resolution parameter UI resolution should be set in format WxH where width and height are positive values\n");
+ usage(argv[0]);
+ return false;
+ }
+ int width = res.at(0).toInt();
+ int height = res.at(1).toInt();
+
+ config.setSize(QSize(width, height));
+
+ if (width <=0 || height <=0) {
+ printf("-resolution parameter UI resolution should be set in format WxH where width and height are positive values\n");
+ usage(argv[0]);
+ return false;
+ }
+ argv[i] = 0;
+ i++;
+ argv[i] = 0;
+ }
+ }
+
+ if (!argv[i])
+ continue;
+
+ if (!(options & Settings::ManualTest)) {
+ if (argumentOnlyAvailableInManualMode(argv[i])) {
+ printf("\nWrong option: '%s' is only available in manual mode\n\n", argv[i]);
+ usage(argv[0]);
+ return false;
+ }
+ continue;
+ }
+
+ if (strcmp(argv[i], "-rotation") == 0) {
+ if (i + 1 >= argc) {
+ printf("-rotation needs an extra parameter specifying the application UI rotation in degrees\n");
+ usage(argv[0]);
+ return false;
+ }
+ else {
+ bool ok;
+ int angle = QString(argv[i+1]).toInt(&ok);
+ if (!ok) {
+ printf("-rotation parameter should specify rotation angle in degrees\n");
+ usage(argv[0]);
+ return false;
+ }
+ config.setAngle(angle);
+ argv[i] = 0;
+ i++;
+ argv[i] = 0;
+ }
+ } else if (strcmp(argv[i], "-subtree-cache") == 0) {
+ options |= Settings::UseListItemCache;
+ argv[i] = 0;
+ } else if (strcmp(argv[i], "-fps") == 0) {
+ options |= Settings::OutputFps;
+ argv[i] = 0;
+ } else if (strcmp(argv[i], "-items") == 0) {
+ if (i + 1 >= argc) {
+ printf("-items needs an extra parameter specifying amount of list items\n");
+ usage(argv[0]);
+ return false;
+ }
+ else {
+ bool ok;
+ int amount = QString(argv[i+1]).toInt(&ok);
+ if (!ok) {
+ printf("-items needs an extra parameter specifying amount (integer) of list items\n");
+ usage(argv[0]);
+ return false;
+ }
+ config.setListItemCount(amount);
+ argv[i] = 0;
+ i++;
+ argv[i] = 0;
+ }
+ }
+ }
+
+ config.setOptions(options);
+
+ return true;
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h
new file mode 100644
index 0000000..8676d92
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef COMMANDLINE_H
+#define COMMANDLINE_H
+
+#include "settings.h"
+
+bool readSettingsFromCommandLine(int argc,
+ char *argv[],
+ Settings& settings);
+
+
+#endif // COMMANDLINE_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp
new file mode 100644
index 0000000..0c3eba4
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp
@@ -0,0 +1,141 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QFile>
+#include "theme.h"
+
+#include "dummydatagen.h"
+
+DummyDataGenerator::DummyDataGenerator() : m_isMale(false)
+{
+ QFile countryCodeFile(":/contact/areacodes.txt");
+ countryCodeFile.open(QIODevice::ReadOnly);
+ while (!countryCodeFile.atEnd()) {
+ m_countryCodes << QString(countryCodeFile.readLine()).remove("\n");
+ }
+
+ QFile firstNameFFile(":/contact/firstnamesF.txt");
+ firstNameFFile.open(QIODevice::ReadOnly);
+ while (!firstNameFFile.atEnd()) {
+ m_firstNamesF << QString(firstNameFFile.readLine()).remove("\n");
+ }
+
+ QFile firstNameMFile(":/contact/firstnamesM.txt");
+ firstNameMFile.open(QIODevice::ReadOnly);
+ while (!firstNameMFile.atEnd()) {
+ m_firstNamesM << QString(firstNameMFile.readLine()).remove("\n");
+ }
+
+ QFile lastNameFile(":/contact/lastnames.txt");
+ lastNameFile.open(QIODevice::ReadOnly);
+ while (!lastNameFile.atEnd()) {
+ m_lastNames << QString(lastNameFile.readLine()).remove("\n");
+ }
+ Reset();
+}
+
+DummyDataGenerator::~DummyDataGenerator()
+{
+
+}
+
+void DummyDataGenerator::Reset()
+{
+ qsrand(100);
+}
+
+QString DummyDataGenerator::randomPhoneNumber(QString indexNumber)
+{
+ int index = qrand()%m_countryCodes.count();
+ QString countryCode = m_countryCodes.at(index);
+ QString areaCode = QString::number(index) + QString("0").repeated(2-QString::number(index).length());
+ QString beginNumber = QString::number(555-index*2);
+ QString endNumber = QString("0").repeated(4-indexNumber.length()) + indexNumber;
+
+ return countryCode +" " + areaCode +" " + beginNumber +" " + endNumber;
+}
+
+QString DummyDataGenerator::randomFirstName()
+{
+ m_isMale = !m_isMale;
+ if (m_isMale)
+ return m_firstNamesM.at(qrand()%m_firstNamesM.count());
+ return m_firstNamesF.at(qrand()%m_firstNamesF.count());
+}
+
+QString DummyDataGenerator::randomLastName()
+{
+ return m_lastNames.at(qrand()%m_lastNames.count());
+}
+
+QString DummyDataGenerator::randomName()
+{
+ return QString(randomFirstName()+QString(", ")+randomLastName());
+}
+
+QString DummyDataGenerator::randomIconItem()
+{
+ QString avatar = Theme::p()->pixmapPath() + "contact_default_icon.svg";
+ if (qrand()%4) {
+ int randVal = 1+qrand()%25;
+
+ if(m_isMale && randVal > 15) {
+ randVal -= 15;
+ }
+ if(!m_isMale && randVal <= 10) {
+ randVal += 10;
+ }
+
+ avatar = QString(":/avatars/avatar_%1.png").arg(randVal, 3, 10, QChar('0'));
+ }
+ return avatar;
+}
+
+QString DummyDataGenerator::randomStatusItem()
+{
+ switch ( qrand()%3 )
+ {
+ case 0: return Theme::p()->pixmapPath() + "contact_status_online.svg";
+ case 1: return Theme::p()->pixmapPath() + "contact_status_offline.svg";
+ case 2: return Theme::p()->pixmapPath() + "contact_status_idle.svg";
+ }
+ return 0;
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h
new file mode 100644
index 0000000..a6c0ff1
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __DUMMYDATAGEN_H__
+#define __DUMMYDATAGEN_H__
+
+#include <QObject>
+#include <QStringList>
+
+class DummyDataGenerator : public QObject
+{
+ Q_OBJECT
+public:
+ DummyDataGenerator();
+ ~DummyDataGenerator();
+
+public:
+ void Reset();
+ QString randomPhoneNumber(QString indexNumber);
+ QString randomFirstName();
+ QString randomLastName();
+ QString randomName();
+ QString randomIconItem();
+ QString randomStatusItem();
+
+private:
+ QStringList m_countryCodes;
+ QStringList m_firstNamesF;
+ QStringList m_firstNamesM;
+ QStringList m_lastNames;
+ bool m_isMale;
+};
+
+#endif // __DUMMYDATAGEN_H__
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp
new file mode 100644
index 0000000..e2b6f78
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include "gvbwidget.h"
+
+GvbWidget::GvbWidget(QGraphicsItem * parent, Qt::WindowFlags wFlags)
+ : QGraphicsWidget(parent, wFlags)
+{
+
+}
+
+GvbWidget::~GvbWidget()
+{
+}
+
+void GvbWidget::keyPressEvent(QKeyEvent *event)
+{
+ Q_UNUSED(event)
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h
new file mode 100644
index 0000000..fbe7426
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef GVBWIDGET_H
+#define GVBWIDGET_H
+
+#include <QGraphicsWidget>
+
+class GvbWidget : public QGraphicsWidget
+{
+ Q_OBJECT
+
+public:
+
+ GvbWidget(QGraphicsItem * parent = 0, Qt::WindowFlags wFlags = 0);
+ ~GvbWidget();
+ virtual void keyPressEvent(QKeyEvent *event);
+};
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp
new file mode 100644
index 0000000..44bbc7f
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <QSvgRenderer>
+
+#if (QT_VERSION >= 0x040600)
+#include <QGraphicsEffect>
+#endif
+
+#include "iconitem.h"
+
+IconItem::IconItem(const QString &filename, QGraphicsItem *parent)
+ : GvbWidget(parent)
+ , m_filename(filename)
+ , m_rotation(0.0)
+#if (QT_VERSION >= 0x040600)
+ , m_opacityEffect(0)
+#endif
+ , m_smoothTransformation(false)
+{
+ setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ setContentsMargins(0,0,0,0);
+ setPreferredSize(58,58);
+}
+
+IconItem::~IconItem()
+{
+}
+
+void IconItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+
+ reload();
+
+ const QPointF c = boundingRect().center();
+ painter->translate(c.x(), c.y());
+ painter->rotate(m_rotation);
+ painter->translate(-c.x(), -c.y());
+
+ if (m_smoothTransformation)
+ painter->setRenderHints(QPainter::SmoothPixmapTransform);
+
+ painter->drawPixmap(0,0, m_pixmap);
+}
+
+QSizeF IconItem::sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint) const
+{
+ switch (which)
+ {
+ case Qt::MinimumSize:
+ case Qt::PreferredSize:
+ case Qt::MaximumSize:
+ return m_pixmap.size();
+
+ default:
+ return GvbWidget::sizeHint(which, constraint);
+ }
+}
+
+void IconItem::reload()
+{
+ const QSize iconSize = size().toSize();
+ if (iconSize.width() == 0 || iconSize.height() == 0)
+ return;
+
+ const QString key = m_filename+QString::number(iconSize.width())+QString::number(iconSize.height());
+ if (QPixmapCache::find(key, m_pixmap))
+ return;
+
+ if (m_filename.endsWith(".svg", Qt::CaseInsensitive))
+ {
+ m_pixmap = QPixmap(iconSize);
+ m_pixmap.fill(Qt::transparent);
+ QSvgRenderer doc(m_filename);
+ QPainter painter(&m_pixmap);
+ painter.setViewport(0, 0, iconSize.width(), iconSize.height());
+ doc.render(&painter);
+ }
+ else
+ {
+ m_pixmap = QPixmap(m_filename).scaled(iconSize);
+ }
+
+ QPixmapCache::insert(key, m_pixmap);
+ updateGeometry();
+}
+
+QString IconItem::fileName() const
+{
+ return m_filename;
+}
+
+void IconItem::setFileName(const QString &filename)
+{
+ if( m_filename != filename) {
+ m_filename = filename;
+ reload();
+ }
+}
+
+#if (QT_VERSION >= 0x040600)
+void IconItem::setOpacityEffectEnabled(const bool enable)
+{
+ if (!m_opacityEffect)
+ {
+ QRadialGradient gradient(0.5, 0.5, 1.0);
+ gradient.setCoordinateMode(QGradient::ObjectBoundingMode);
+ gradient.setColorAt(0.0, QColor(0,0,0, 255));
+ gradient.setColorAt(0.46, QColor(0,0,0, 255));
+ gradient.setColorAt(0.62, QColor(0,0,0, 0));
+
+ m_opacityEffect = new QGraphicsOpacityEffect;
+ m_opacityEffect->setOpacityMask(gradient);
+ m_opacityEffect->setOpacity(1.0);
+ this->setGraphicsEffect(m_opacityEffect);
+ }
+ m_opacityEffect->setEnabled(enable);
+}
+
+bool IconItem::isOpacityEffectEnabled() const
+{
+ if (m_opacityEffect)
+ return m_opacityEffect->isEnabled();
+
+ return false;
+}
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h
new file mode 100644
index 0000000..3828a58
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ICONITEM_H
+#define ICONITEM_H
+
+#include <QPainter>
+
+#include "gvbwidget.h"
+
+#if (QT_VERSION >= 0x040600)
+class QGraphicsOpacityEffect;
+#endif
+class QPainter;
+
+class IconItem : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+
+ IconItem(const QString &filename = "", QGraphicsItem *parent = 0);
+
+ virtual ~IconItem();
+
+ QString fileName() const;
+ void setFileName(const QString &filename);
+
+#if (QT_VERSION >= 0x040600)
+ void setOpacityEffectEnabled(const bool enable);
+ bool isOpacityEffectEnabled() const;
+#endif
+ void setRotation(const qreal rotation) { m_rotation = rotation; }
+ qreal rotation() const { return m_rotation; }
+
+ void setSmoothTransformationEnabled(const bool enable) { m_smoothTransformation = enable; }
+ bool isSmoothTransformationEnabled() const { return m_smoothTransformation; }
+
+private:
+
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*widget = 0*/);
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint = QSizeF()) const;
+
+private:
+ Q_DISABLE_COPY(IconItem)
+ void reload();
+
+ QString m_filename;
+ QPixmap m_pixmap;
+ qreal m_rotation;
+#if (QT_VERSION >= 0x040600)
+ QGraphicsOpacityEffect *m_opacityEffect;
+#endif
+ bool m_smoothTransformation;
+};
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
new file mode 100644
index 0000000..f05904e
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
@@ -0,0 +1,275 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QTime>
+
+#include "itemrecyclinglist.h"
+#include "listitemcontainer.h"
+#include "abstractviewitem.h"
+#include "recycledlistitem.h"
+#include "theme.h"
+#include "scrollbar.h"
+
+ItemRecyclingList::ItemRecyclingList(const int itemBuffer, QGraphicsWidget * parent)
+ : ItemRecyclingListView(parent),
+ m_listModel(new ListModel(this))
+{
+ ListItemContainer *container = new ListItemContainer(itemBuffer, this, this);
+ container->setParentItem(this);
+ ItemRecyclingListView::setContainer(container);
+ ItemRecyclingListView::setModel(m_listModel, new RecycledListItem(this));
+ setObjectName("ItemRecyclingList");
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+}
+
+/* virtual */
+ItemRecyclingList::~ItemRecyclingList()
+{
+}
+
+/* virtual */
+void ItemRecyclingList::insertItem(int index, RecycledListItem *item)
+{
+ if (index<0)
+ index = 0;
+ if (index > m_listModel->rowCount())
+ index = m_listModel->rowCount();
+ if (m_listModel && item)
+ m_listModel->insert(index,item);
+
+ updateListItemBackgrounds(index);
+}
+
+/* virtual */
+void ItemRecyclingList::addItem(RecycledListItem *item)
+{
+ if (item)
+ m_listModel->appendRow(item);
+
+ const int index = m_listModel->rowCount()-1;
+ updateListItemBackgrounds(index);
+}
+
+/* virtual */
+void ItemRecyclingList::clear()
+{
+ m_listModel->clear();
+}
+
+/* virtual */
+AbstractViewItem *ItemRecyclingList::takeItem(const int row)
+{
+ if (row < 0 || row >= m_listModel->rowCount() || !m_listModel)
+ return 0;
+ return m_listModel->takeItem(row);
+}
+
+/*virtual*/
+void ItemRecyclingList::setItemPrototype(AbstractViewItem* prototype)
+{
+ ItemRecyclingListView::setItemPrototype(prototype);
+}
+
+void ItemRecyclingList::themeChange()
+{
+ const bool caching = listItemCaching();
+ setListItemCaching(false);
+
+ const QString iconName = Theme::p()->pixmapPath()+"contact_default_icon.svg";
+ const int count = m_listModel->rowCount();
+
+ for (int i=0; i<count; ++i)
+ {
+ RecycledListItem *ritem = m_listModel->item(i);
+ if (ritem) {
+ ListItem *item = ritem->item();
+
+ // Update default icons
+ const QString filename = item->icon(ListItem::LeftIcon)->fileName();
+ if (filename.contains("contact_default_icon")) {
+ item->icon(ListItem::LeftIcon)->setFileName(iconName);
+ }
+
+ // Update status icons
+ QString statusIcon = item->icon(ListItem::RightIcon)->fileName();
+ const int index = statusIcon.indexOf("contact_status");
+ if (index != -1) {
+ statusIcon.remove(0, index);
+ item->icon(ListItem::RightIcon)->setFileName(Theme::p()->pixmapPath()+statusIcon);
+ }
+
+ // Update fonts
+ item->setFont(Theme::p()->font(Theme::ContactName), ListItem::FirstPos);
+ item->setFont(Theme::p()->font(Theme::ContactNumber), ListItem::SecondPos);
+ item->setFont(Theme::p()->font(Theme::ContactEmail), ListItem::ThirdPos);
+
+ // Update list dividers
+ if (i%2) {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushOdd());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityOdd());
+ }
+ else {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushEven());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityEven());
+ }
+
+ // Update borders
+ item->setBorderPen(Theme::p()->listItemBorderPen());
+ item->setRounding(Theme::p()->listItemRounding());
+
+ // Update icons
+ item->icon(ListItem::LeftIcon)->setRotation(Theme::p()->iconRotation(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setRotation(Theme::p()->iconRotation(ListItem::RightIcon));
+#if (QT_VERSION >= 0x040600)
+ item->icon(ListItem::LeftIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::RightIcon));
+#endif
+ item->icon(ListItem::LeftIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::RightIcon));
+ }
+ }
+ updateViewContent();
+ setListItemCaching(caching);
+}
+
+void ItemRecyclingList::keyPressEvent(QKeyEvent *event)
+{
+ static QTime keyPressInterval = QTime::currentTime();
+ static qreal step = 0.0;
+ static bool repeat = false;
+ int interval = keyPressInterval.elapsed();
+
+ ScrollBar* sb = verticalScrollBar();
+ qreal currentValue = sb->sliderPosition();
+
+ if(interval < 250 ) {
+ if(!repeat) step = 0.0;
+ step = step + 2.0;
+ if(step > 100) step = 100;
+ repeat = true;
+ }
+ else {
+ step = 1.0;
+ if(m_listModel->item(0)) m_listModel->item(0)->size().height();
+ step = m_listModel->item(0)->size().height();
+ repeat = false;
+ }
+
+ if(event->key() == Qt::Key_Up ) { //Up Arrow
+ sb->setSliderPosition(currentValue - step);
+ }
+
+ if(event->key() == Qt::Key_Down ) { //Down Arrow
+ sb->setSliderPosition(currentValue + step);
+ }
+ keyPressInterval.start();
+}
+
+bool ItemRecyclingList::listItemCaching() const
+{
+#if (QT_VERSION >= 0x040600)
+ ListItemContainer *container =
+ static_cast<ListItemContainer *>(m_container);
+
+ return container->listItemCaching();
+#else
+ return false;
+#endif
+}
+
+void ItemRecyclingList::setListItemCaching(bool enabled)
+{
+#if (QT_VERSION >= 0x040600)
+ ListItemContainer *container =
+ static_cast<ListItemContainer *>(m_container);
+ container->setListItemCaching(enabled);
+#else
+ Q_UNUSED(enabled)
+#endif
+}
+
+void ItemRecyclingList::updateListItemBackgrounds(int index)
+{
+ const int itemCount = m_listModel->rowCount();
+
+ for (int i=index; i<itemCount; ++i)
+ {
+ RecycledListItem *ritem = m_listModel->item(i);
+ if (ritem) {
+ ListItem *item = ritem->item();
+ if (i%2) {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushOdd());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityOdd());
+ }
+ else {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushEven());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityEven());
+ }
+ }
+ }
+}
+
+void ItemRecyclingList::setTwoColumns(const bool enabled)
+{
+ if (twoColumns() == enabled)
+ return;
+
+#if (QT_VERSION >= 0x040600)
+ const bool caching = listItemCaching();
+ setListItemCaching(false);
+#endif
+
+ m_container->setTwoColumns(enabled);
+ refreshContainerGeometry();
+
+#if (QT_VERSION >= 0x040600)
+ setListItemCaching(caching);
+#endif
+}
+
+bool ItemRecyclingList::twoColumns()
+{
+ return m_container->twoColumns();
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h
new file mode 100644
index 0000000..d40e34c
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ITEMRECYCLINGLIST_H
+#define ITEMRECYCLINGLIST_H
+
+#include "listitem.h"
+#include "abstractitemview.h"
+#include "listmodel.h"
+#include "itemrecyclinglistview.h"
+#include "recycledlistitem.h"
+
+class QGraphicsWidget;
+
+class ItemRecyclingList : public ItemRecyclingListView
+{
+ Q_OBJECT
+
+public:
+ ItemRecyclingList(const int itemBuffer = 4, QGraphicsWidget * parent = 0);
+ virtual ~ItemRecyclingList();
+
+ virtual void insertItem(int index, RecycledListItem *item);
+ virtual void addItem(RecycledListItem *item);
+ virtual void clear();
+ virtual AbstractViewItem *takeItem(const int row);
+ virtual void setItemPrototype(AbstractViewItem* prototype);
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual bool listItemCaching() const;
+ virtual void setListItemCaching(bool enabled);
+
+ void setTwoColumns(const bool enabled);
+ bool twoColumns();
+
+public slots:
+ void themeChange();
+
+private:
+ void updateListItemBackgrounds(int index);
+
+private:
+ Q_DISABLE_COPY(ItemRecyclingList)
+
+ ListModel *m_listModel;
+};
+
+#endif // ITEMRECYCLINGLIST_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.pri b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.pri
new file mode 100644
index 0000000..55b551e
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.pri
@@ -0,0 +1,19 @@
+HEADERS += $$ROOTDIR/tests/itemrecyclinglist/itemrecyclinglist.h \
+ $$ROOTDIR/tests/itemrecyclinglist/itemrecyclinglistview.h \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractitemview.h \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractviewitem.h \
+ $$ROOTDIR/tests/itemrecyclinglist/recycledlistitem.h \
+ $$ROOTDIR/tests/itemrecyclinglist/listitemcontainer.h \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractitemcontainer.h \
+ $$ROOTDIR/tests/itemrecyclinglist/listmodel.h
+
+SOURCES += $$ROOTDIR/tests/itemrecyclinglist/itemrecyclinglist.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/itemrecyclinglistview.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractitemview.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractviewitem.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/recycledlistitem.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/listitemcontainer.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/abstractitemcontainer.cpp \
+ $$ROOTDIR/tests/itemrecyclinglist/listmodel.cpp
+
+INCLUDEPATH += $$ROOTDIR/tests/itemrecyclinglist
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp
new file mode 100644
index 0000000..38076e9
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "itemrecyclinglistview.h"
+
+ItemRecyclingListView::ItemRecyclingListView(QGraphicsWidget * parent)
+ : AbstractItemView(parent), m_rootIndex()
+{
+}
+
+/*virtual*/
+ItemRecyclingListView::~ItemRecyclingListView()
+{
+}
+void ItemRecyclingListView::setCurrentRow(const int row)
+{
+ setCurrentIndex(model()->index(row,0));
+}
+
+int ItemRecyclingListView::rows() const
+{
+ if (m_model)
+ return m_model->rowCount();
+ return 0;
+}
+
+/*virtual*/
+void ItemRecyclingListView::rowsInserted(const QModelIndex &parent, int start, int end)
+{
+ if (parent == m_rootIndex) {
+ AbstractItemView::rowsInserted(parent, start, end);
+ }
+}
+
+/*virtual*/
+void ItemRecyclingListView::rowsRemoved(const QModelIndex &parent, int start, int end)
+{
+ if (parent == m_rootIndex) {
+ AbstractItemView::rowsRemoved(parent, start, end);
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h
new file mode 100644
index 0000000..8f90395
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ITEMRECYCLINGLISTVIEW_H
+#define ITEMRECYCLINGLISTVIEW_H
+
+#include "abstractitemview.h"
+
+class ItemRecyclingListView : public AbstractItemView
+{
+public:
+ ItemRecyclingListView(QGraphicsWidget * parent = 0);
+ virtual ~ItemRecyclingListView();
+ void setCurrentRow(const int row);
+ int rows() const;
+#if (QT_VERSION >= 0x040600)
+ virtual bool listItemCaching() const = 0;
+ virtual void setListItemCaching(bool enabled) = 0;
+#endif
+
+protected:
+ void rowsInserted(const QModelIndex &parent, int start, int end);
+ void rowsRemoved(const QModelIndex &parent,int start,int end);
+
+private:
+ QModelIndex m_rootIndex;
+};
+
+#endif // ITEMRECYCLINGLISTVIEW_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
new file mode 100644
index 0000000..344d7e8
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "label.h"
+
+Label::Label(const QString& text, QGraphicsItem *parent)
+ : GvbWidget(parent)
+{
+ m_textItem = new QGraphicsSimpleTextItem(this);
+ setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ setContentsMargins(0, 0, 0, 0);
+ setText(text);
+#if QT_VERSION >= 0x040600
+ // This flag was introduced in Qt 4.6.
+ setFlag(QGraphicsItem::ItemHasNoContents, true);
+#endif
+}
+
+Label::~Label()
+{
+}
+
+void Label::setText(const QString& text)
+{
+ m_textItem->setText(text);
+ prepareGeometryChange();
+}
+
+QString Label::text() const
+{
+ return m_textItem->text();
+}
+
+void Label::setFont(const QFont font)
+{
+ m_textItem->setFont(font);
+}
+
+void Label::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ GvbWidget::resizeEvent(event);
+}
+
+QSizeF Label::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+ switch (which)
+ {
+ case Qt::MinimumSize:
+ // fall thru
+ case Qt::PreferredSize:
+ {
+ QFontMetricsF fm(m_textItem->font());
+ return QSizeF(fm.width(m_textItem->text()), fm.height());
+ }
+ default:
+ return GvbWidget::sizeHint(which, constraint);
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h
new file mode 100644
index 0000000..29ea302
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TEXTITEM_H
+#define TEXTITEM_H
+
+#include "gvbwidget.h"
+
+class QPainter;
+class QStyleOptionGraphicsItem;
+class QGraphicsTextItem;
+
+class Label : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+
+ Label(const QString& text, QGraphicsItem *parent = 0);
+ ~Label();
+
+public:
+
+ void setText(const QString& text);
+ QString text() const;
+ void setFont(const QFont font);
+
+private:
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint = QSizeF()) const;
+
+private:
+ Q_DISABLE_COPY(Label)
+ QGraphicsSimpleTextItem *m_textItem;
+};
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp
new file mode 100644
index 0000000..b91a84c
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp
@@ -0,0 +1,314 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QGraphicsGridLayout>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsSceneMouseEvent>
+#include <QPainter>
+#include <QStyleOptionGraphicsItem>
+#include "listitem.h"
+#include "theme.h"
+
+struct ItemData
+{
+ QHash<ListItem::TextPos, QString> texts;
+ QHash<ListItem::TextPos, QFont> fonts;
+ QHash<ListItem::IconItemPos, QString> icons;
+ QHash<ListItem::IconItemPos, qreal> iconRotations;
+ QHash<ListItem::IconItemPos, bool> iconSmoothTransformations;
+ QHash<ListItem::IconItemPos, bool> iconOpacityEffets;
+ QPen borderPen;
+ QBrush backgroundBrush;
+ qreal backgroundOpacity;
+ QSize rounding;
+};
+Q_DECLARE_METATYPE(ItemData);
+
+ListItem::ListItem(QGraphicsWidget *parent)
+ : GvbWidget(parent),
+ m_txtlayout(new QGraphicsGridLayout()),
+ m_layout(new QGraphicsLinearLayout(Qt::Horizontal)),
+ m_liconlayout(new QGraphicsLinearLayout(Qt::Horizontal)),
+ m_riconlayout(new QGraphicsLinearLayout(Qt::Horizontal))
+ ,m_fonts()
+ ,m_borderPen(Qt::NoPen)
+ ,m_backgroundBrush(QBrush())
+ ,m_backgroundOpacity(1.0)
+ ,m_rounding(0.0, 0.0)
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ setContentsMargins(0,4,4,0);
+ m_layout->setContentsMargins(0,0,0,0);
+
+ m_txtlayout->setContentsMargins(0,8,0,8);
+ m_liconlayout->setContentsMargins(8,8,8,8);
+ m_riconlayout->setContentsMargins(0,8,4,8);
+
+ m_layout->insertItem(0, m_liconlayout);
+ m_layout->insertItem(1, m_txtlayout);
+ m_layout->insertItem(2, m_riconlayout);
+
+ m_layout->setStretchFactor(m_liconlayout, 1);
+ m_layout->setStretchFactor(m_txtlayout, 5);
+ m_layout->setStretchFactor(m_riconlayout, 1);
+
+ setFlag(QGraphicsItem::ItemClipsToShape);
+ setLayout(m_layout);
+}
+
+ListItem::~ListItem()
+{
+ if ( !m_liconlayout->parentLayoutItem() )
+ delete m_liconlayout;
+
+ if ( !m_riconlayout->parentLayoutItem() )
+ delete m_riconlayout;
+}
+
+void ListItem::setIcon( IconItem *iconItem, const IconItemPos iconPos )
+{
+ if (iconPos == LeftIcon) {
+ if (m_liconlayout->count() > 0 && m_liconlayout->itemAt(0)) {
+ delete m_liconlayout->itemAt(0);
+ m_liconlayout->addItem( iconItem );
+ }
+ else {
+ m_liconlayout->addItem( iconItem );
+ }
+ m_liconlayout->itemAt(0)->setMaximumSize(58,58);
+ }
+ else if (iconPos == RightIcon) {
+ if (m_riconlayout->count() > 0 && m_riconlayout->itemAt(0)) {
+ delete m_riconlayout->itemAt(0);
+ m_riconlayout->addItem( iconItem );
+ }
+ else {
+ m_riconlayout->addItem( iconItem );
+ }
+ m_riconlayout->itemAt(0)->setMaximumSize(22,22);
+ }
+ m_layout->invalidate();
+}
+
+IconItem* ListItem::icon( const IconItemPos iconPos ) const
+{
+ QGraphicsLayoutItem* item = 0;
+
+ if (iconPos == LeftIcon && m_liconlayout->count() > 0) {
+ item = m_liconlayout->itemAt(0);
+ }
+ else if (iconPos == RightIcon && m_riconlayout->count() > 0) {
+ item = m_riconlayout->itemAt(0);
+ }
+
+ if (item) {
+ IconItem* titem = static_cast<IconItem *>(item);
+ return titem;
+ }
+ return 0;
+}
+
+QVariant ListItem::data(int role) const
+{
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ ItemData data;
+
+ if (text(ListItem::FirstPos).size() > 0) {
+ data.texts[ListItem::FirstPos] = text(ListItem::FirstPos);
+ data.fonts[ListItem::FirstPos] = m_fonts[ListItem::FirstPos];
+ }
+ if (text(ListItem::SecondPos).size() > 0) {
+ data.texts[ListItem::SecondPos] = text(ListItem::SecondPos);
+ data.fonts[ListItem::SecondPos] = m_fonts[ListItem::SecondPos];
+ }
+ if (text(ListItem::ThirdPos).size() > 0) {
+ data.texts[ListItem::ThirdPos] = text(ListItem::ThirdPos);
+ data.fonts[ListItem::ThirdPos] = m_fonts[ListItem::ThirdPos];
+ }
+ if (text(ListItem::LastPos).size() > 0) {
+ data.texts[ListItem::LastPos] = text(ListItem::LastPos);
+ data.fonts[ListItem::LastPos] = m_fonts[ListItem::LastPos];
+ }
+
+ if (icon(ListItem::LeftIcon)) {
+ data.icons[ListItem::LeftIcon] = icon(ListItem::LeftIcon)->fileName();
+ data.iconRotations[ListItem::LeftIcon] = icon(ListItem::LeftIcon)->rotation();
+ data.iconSmoothTransformations[ListItem::LeftIcon] = icon(ListItem::LeftIcon)->isSmoothTransformationEnabled();
+#if (QT_VERSION >= 0x040600)
+ data.iconOpacityEffets[ListItem::LeftIcon] = icon(ListItem::LeftIcon)->isOpacityEffectEnabled();
+#endif
+ }
+
+ if (icon(ListItem::RightIcon)) {
+ data.icons[ListItem::RightIcon] = icon(ListItem::RightIcon)->fileName();
+ data.iconRotations[ListItem::RightIcon] = icon(ListItem::RightIcon)->rotation();
+ data.iconSmoothTransformations[ListItem::RightIcon] = icon(ListItem::RightIcon)->isSmoothTransformationEnabled();
+#if (QT_VERSION >= 0x040600)
+ data.iconOpacityEffets[ListItem::RightIcon] = icon(ListItem::RightIcon)->isOpacityEffectEnabled();
+#endif
+ }
+
+ data.borderPen = m_borderPen;
+ data.backgroundBrush = m_backgroundBrush;
+ data.backgroundOpacity = m_backgroundOpacity;
+ data.rounding = m_rounding;
+
+ QVariant var;
+ var.setValue(data);
+ return var;
+}
+
+void ListItem::setData(const QVariant &value, int role)
+{
+ if (role != Qt::DisplayRole)
+ return;
+
+ ItemData data = value.value<ItemData>();
+ QList<ListItem::TextPos> textkeys = data.texts.keys();
+
+ for( int i = 0; i<textkeys.count(); ++i) {
+ setText(data.texts[textkeys.at(i)],textkeys.at(i));
+ setFont(data.fonts[textkeys.at(i)], textkeys.at(i));
+ }
+
+ QList<ListItem::IconItemPos> iconkeys = data.icons.keys();
+ for( int i = 0; i<iconkeys.count(); ++i) {
+ IconItem *iconItem = icon(iconkeys.at(i));
+ if (iconItem)
+ iconItem->setFileName(data.icons[iconkeys.at(i)]);
+ else {
+ IconItem *iconItem = new IconItem(data.icons[iconkeys.at(i)], this);
+ setIcon(iconItem, iconkeys.at(i));
+ }
+ }
+
+ if (icon(ListItem::LeftIcon)) {
+ icon(ListItem::LeftIcon)->setRotation(data.iconRotations[ListItem::LeftIcon]);
+ icon(ListItem::LeftIcon)->setSmoothTransformationEnabled(data.iconSmoothTransformations[ListItem::LeftIcon]);
+#if (QT_VERSION >= 0x040600)
+ icon(ListItem::LeftIcon)->setOpacityEffectEnabled(data.iconOpacityEffets[ListItem::LeftIcon]);
+#endif
+ }
+
+ if (icon(ListItem::RightIcon)) {
+ icon(ListItem::RightIcon)->setRotation(data.iconRotations[ListItem::RightIcon]);
+ icon(ListItem::RightIcon)->setSmoothTransformationEnabled(data.iconSmoothTransformations[ListItem::RightIcon]);
+#if (QT_VERSION >= 0x040600)
+ icon(ListItem::RightIcon)->setOpacityEffectEnabled(data.iconOpacityEffets[ListItem::RightIcon]);
+#endif
+ }
+
+ m_borderPen = data.borderPen;
+ m_backgroundBrush = data.backgroundBrush;
+ m_backgroundOpacity = data.backgroundOpacity;
+ m_rounding = data.rounding;
+}
+
+void ListItem::setText(const QString str, const TextPos position)
+{
+ QGraphicsLayoutItem * item = 0;
+
+ if (m_txtlayout->rowCount() > position && position >= 0)
+ item = m_txtlayout->itemAt(position, 0);
+
+ if (!item) {
+ Label *label = new Label(str,this);
+ m_txtlayout->addItem(label, position, 0);
+ if (m_fonts.contains(position))
+ label->setFont(m_fonts[position]);
+ }
+ else {
+ Label *titem = static_cast<Label *>(item);
+ titem->setText(str);
+ }
+}
+
+void ListItem::setFont(const QFont font, const TextPos position)
+{
+ m_fonts.insert(position, font);
+ QGraphicsLayoutItem * item = 0;
+
+ if (m_txtlayout->rowCount() > position && position >= 0)
+ item = m_txtlayout->itemAt(position, 0);
+
+ if (item) {
+ Label *titem = static_cast<Label *>(item);
+ titem->setFont(font);
+ }
+}
+
+QString ListItem::text(const TextPos position) const
+{
+ QGraphicsLayoutItem * item = 0;
+
+ if (m_txtlayout->rowCount() > position && position >= 0)
+ item = m_txtlayout->itemAt(position, 0);
+
+ if (item) {
+ Label *titem = static_cast<Label *>(item);
+ return titem->text();
+ }
+ return "";
+}
+
+void ListItem::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
+{
+ const int penWidth = m_borderPen.width();
+ QRectF r = rect();
+ r.adjust(penWidth, penWidth, -penWidth, -penWidth);
+
+ if (m_borderPen != Qt::NoPen)
+ {
+ painter->setPen(m_borderPen);
+ painter->drawRoundedRect(r, m_rounding.width(), m_rounding.height());
+ }
+
+ if (m_backgroundBrush != Qt::NoBrush)
+ {
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(m_backgroundBrush);
+ painter->setOpacity(m_backgroundOpacity);
+ painter->drawRoundedRect(r, m_rounding.width(), m_rounding.height());
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h
new file mode 100644
index 0000000..76d8354
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LISTITEM_H
+#define LISTITEM_H
+
+#include <QPen>
+#include "iconitem.h"
+#include "label.h"
+#include "gvbwidget.h"
+
+class QGraphicsGridLayout;
+class QGraphicsLinearLayout;
+class QGraphicsSceneMouseEvent;
+class QGraphicsItem;
+
+class ListItem : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+
+ enum TextPos {
+ FirstPos = 0,
+ SecondPos = 1,
+ ThirdPos = 2,
+ LastPos = 3
+ };
+
+ enum IconItemPos {
+ LeftIcon = 0,
+ RightIcon = 1
+ };
+
+ ListItem(QGraphicsWidget *parent = 0);
+ virtual ~ListItem();
+
+ void setIcon(IconItem *iconItem, const IconItemPos iconPos);
+ IconItem* icon(const IconItemPos position) const;
+ void setText(const QString str, const TextPos position);
+ QString text(const TextPos position) const;
+ void setFont(const QFont font, const TextPos position);
+
+ QVariant data(int role = Qt::DisplayRole) const;
+ void setData(const QVariant &value, int role = Qt::DisplayRole);
+
+ void setBorderPen(const QPen pen) { m_borderPen = pen; }
+ void setBackgroundBrush(const QBrush brush) { m_backgroundBrush = brush; }
+ void setBackgroundOpacity(const qreal opacity) { m_backgroundOpacity = opacity; }
+ void setRounding(const QSize rounding) { m_rounding = rounding; }
+
+protected:
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+private:
+ Q_DISABLE_COPY(ListItem)
+ QGraphicsGridLayout *m_txtlayout;
+ QGraphicsLinearLayout *m_layout;
+ QGraphicsLinearLayout *m_liconlayout;
+ QGraphicsLinearLayout *m_riconlayout;
+ QHash<TextPos, QFont> m_fonts;
+
+ QPen m_borderPen;
+ QBrush m_backgroundBrush;
+ qreal m_backgroundOpacity;
+ QSize m_rounding;
+};
+
+#endif // LISTITEM_H
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp
new file mode 100644
index 0000000..e794622
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsItem>
+#include <QPainter>
+#include <QDebug>
+#include "listitemcache.h"
+
+ListItemCache::ListItemCache()
+{
+}
+
+ListItemCache::~ListItemCache()
+{
+ QPixmapCache::remove(m_cacheKey);
+}
+
+void ListItemCache::draw(QPainter * painter)
+{
+ QRectF irect = sourceBoundingRect(Qt::LogicalCoordinates);
+ QRectF vrect = painter->clipPath().boundingRect();
+
+ if (vrect.intersects(irect)) {
+ QRectF newVisibleRect = irect.intersected(vrect);
+ QPixmap pixmap;
+
+ if (!QPixmapCache::find(m_cacheKey, &pixmap) ||
+ m_visibleRect.toRect() != newVisibleRect.toRect()) {
+ //qDebug() << "ListItemCache: caching" << m_visibleRect
+ // << "->" << newVisibleRect;
+
+ pixmap = QPixmap(sourceBoundingRect().toRect().size());
+ pixmap.fill(Qt::transparent);
+
+ QPainter pixmapPainter(&pixmap);
+ drawSource(&pixmapPainter);
+ pixmapPainter.end();
+ m_cacheKey = QPixmapCache::insert(pixmap);
+
+ m_visibleRect = newVisibleRect;
+ }
+
+ //qDebug() << "ListItemCache: blitting" << m_visibleRect;
+ painter->drawPixmap(0, 0, pixmap);
+ }
+}
+
+void ListItemCache::sourceChanged(ChangeFlags)
+{
+ QPixmapCache::remove(m_cacheKey);
+}
+
+
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h
new file mode 100644
index 0000000..7db47a0
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LISTITEMCACHE_H
+#define LISTITEMCACHE_H
+
+#include <QGraphicsEffect>
+#include <QPixmapCache>
+
+class ListItemCache : public QGraphicsEffect
+{
+ Q_OBJECT
+
+public:
+
+ ListItemCache();
+ ~ListItemCache();
+
+public: // QGraphicsEffect
+
+ void draw(QPainter *painter);
+ void sourceChanged(ChangeFlags flags);
+
+private:
+
+ QPixmapCache::Key m_cacheKey;
+ QRectF m_visibleRect;
+};
+
+#endif // LISTITEMCACHE_H
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp
new file mode 100644
index 0000000..89e8215
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qmath.h>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsScene>
+
+#include "listitemcontainer.h"
+#include "abstractviewitem.h"
+
+#include "recycledlistitem.h"
+
+#if (QT_VERSION >= 0x040600)
+#include "listitemcache.h"
+#include "itemrecyclinglist.h"
+#endif
+
+ListItemContainer::ListItemContainer(int bufferSize, ItemRecyclingList *view, QGraphicsWidget *parent)
+ : AbstractItemContainer(bufferSize, parent)
+ , m_view(view)
+ , m_layout(new QGraphicsLinearLayout(Qt::Vertical))
+#if (QT_VERSION >= 0x040600)
+ , m_listItemCaching(false)
+#endif
+{
+ setContentsMargins(0,0,0,0);
+ m_layout->setContentsMargins(0,0,0,0);
+ m_layout->setSpacing(0);
+ setLayout(m_layout);
+}
+
+/*virtual*/
+ListItemContainer::~ListItemContainer()
+{
+#if (QT_VERSION >= 0x040600)
+ setListItemCaching(false);
+#endif
+ for (int i = 0; i < m_items.count(); ++i) {
+ m_layout->removeItem(m_items.at(i));
+ m_items.at(i)->setParentItem(0);
+ }
+ qDeleteAll(m_items);
+ m_items.clear();
+}
+
+#if (QT_VERSION >= 0x040600)
+bool ListItemContainer::listItemCaching() const
+{
+ return m_listItemCaching;
+}
+
+void ListItemContainer::setListItemCaching(const bool enabled)
+{
+ if (m_listItemCaching == enabled)
+ return;
+
+ m_listItemCaching = enabled;
+
+ const int itemCount = m_layout->count();
+
+ for (int i = 0; i < itemCount; ++i)
+ setListItemCaching(enabled, i);
+}
+#endif
+
+/*virtual*/
+void ListItemContainer::adjustVisibleContainerSize(const QSizeF &size)
+{
+ m_layout->setPreferredWidth(size.width());
+}
+
+/*virtual*/
+void ListItemContainer::addItemToVisibleLayout(int index, AbstractViewItem *item)
+{
+ m_layout->insertItem(index,item);
+
+#if (QT_VERSION >= 0x040600)
+ setListItemCaching(m_listItemCaching, index);
+#endif
+}
+
+/*virtual*/
+void ListItemContainer::removeItemFromVisibleLayout(AbstractViewItem *item)
+{
+ m_layout->removeItem(item);
+
+#if (QT_VERSION >= 0x040600)
+ RecycledListItem *recycledItem = static_cast<RecycledListItem*>(item);
+
+ if (!recycledItem)
+ return;
+
+ ListItem *listItem = recycledItem->item();
+
+ setListItemCaching(false, listItem);
+#endif
+}
+
+/*virtual*/
+int ListItemContainer::maxItemCountInItemBuffer() const
+{
+ int count = AbstractItemContainer::maxItemCountInItemBuffer();
+
+ if (count > 0) {
+ int currentItemCount = m_items.count();
+ qreal heightOfOneItem = 0;
+ if (currentItemCount > 0)
+ {
+ heightOfOneItem = m_layout->effectiveSizeHint(Qt::PreferredSize).height() / currentItemCount;
+ }
+ int guess = 0;
+ if( heightOfOneItem <= 0 ) {
+ if (m_prototype) {
+ heightOfOneItem = m_prototype->effectiveSizeHint(Qt::PreferredSize).height();
+ }
+ else
+ heightOfOneItem = 50; // TODO magic number, do we have better guess if prototype is not set?
+ }
+ if (heightOfOneItem > 0) {
+ guess = qCeil(m_itemView->boundingRect().height() / heightOfOneItem) + m_bufferSize;
+
+ if (guess < currentItemCount) {
+ if( guess > currentItemCount-2) { // TODO magic number here, Can we use buffer size?
+ guess = currentItemCount;
+ }
+ }
+ }
+ count = qMin(guess, count);
+ }
+ return count;
+}
+
+#if (QT_VERSION >= 0x040600)
+void ListItemContainer::setListItemCaching(const bool enabled, const int index)
+{
+ RecycledListItem *recycledItem = static_cast<RecycledListItem*>(m_layout->itemAt(index));
+
+ if (!recycledItem)
+ return;
+
+ ListItem *listItem = recycledItem->item();
+
+ if (!listItem)
+ return;
+
+ setListItemCaching(enabled, listItem);
+}
+
+void ListItemContainer::setListItemCaching(const bool enabled, ListItem *listItem)
+{
+ if (!listItem)
+ return;
+
+ // Deletes the effect.
+ listItem->setGraphicsEffect(0);
+
+ if (enabled) {
+ ListItemCache* cache = new ListItemCache;
+ Q_ASSERT(!listItem->graphicsEffect());
+ listItem->setGraphicsEffect(cache);
+ }
+}
+#endif
+
+
+void ListItemContainer::setTwoColumns(const bool twoColumns)
+{
+ AbstractItemContainer::setTwoColumns(twoColumns);
+
+ if (!m_layout->isActivated())
+ m_layout->activate();
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h
new file mode 100644
index 0000000..31b69a5
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LISTITEMCONTAINER_H
+#define LISTITEMCONTAINER_H
+
+#include <QGraphicsWidget>
+#include <QColor>
+
+#include "abstractitemcontainer.h"
+
+class QGraphicsLinearLayout;
+class AbstractViewItem;
+class ListItemCache;
+class ListItem;
+class ItemRecyclingList;
+
+class ListItemContainer : public AbstractItemContainer
+{
+ Q_OBJECT
+
+public:
+ ListItemContainer(int bufferSize, ItemRecyclingList *view, QGraphicsWidget *parent=0);
+ virtual ~ListItemContainer();
+
+ virtual void setTwoColumns(const bool twoColumns);
+
+#if (QT_VERSION >= 0x040600)
+ bool listItemCaching() const;
+ void setListItemCaching(const bool enabled);
+ virtual void setListItemCaching(const bool enabled, const int index);
+#endif
+
+protected:
+
+ virtual void addItemToVisibleLayout(int index, AbstractViewItem *item);
+ virtual void removeItemFromVisibleLayout(AbstractViewItem *item);
+
+ virtual void adjustVisibleContainerSize(const QSizeF &size);
+ virtual int maxItemCountInItemBuffer() const;
+
+private:
+ Q_DISABLE_COPY(ListItemContainer)
+
+ ItemRecyclingList *m_view;
+ QGraphicsLinearLayout *m_layout;
+#if (QT_VERSION >= 0x040600)
+ void setListItemCaching(const bool enabled, ListItem *listItem);
+ bool m_listItemCaching;
+#endif
+};
+
+
+#endif // LISTITEMCONTAINER_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp
new file mode 100644
index 0000000..fe10b28
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp
@@ -0,0 +1,146 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "listmodel.h"
+#include "recycledlistitem.h"
+
+ListModel::ListModel(QObject *parent)
+ : QAbstractListModel(parent)
+ , m_items()
+{
+
+}
+
+ListModel::~ListModel()
+{
+ qDeleteAll(m_items);
+ m_items.clear();
+}
+
+int ListModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+ return m_items.count();
+}
+
+QVariant ListModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (index.row() >= m_items.size() || index.row() < 0)
+ return QVariant();
+
+ switch (role)
+ {
+ case Qt::DisplayRole:
+ return QVariant::fromValue(m_items.at(index.row())->data(role));
+ default:
+ return QVariant();
+ }
+}
+
+bool ListModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+ // TODO implement if we like to edit list items
+ Q_UNUSED(index)
+ Q_UNUSED(value)
+ Q_UNUSED(role)
+ return false;
+}
+
+void ListModel::clear()
+{
+ m_items.clear();
+ reset();
+}
+
+QModelIndex ListModel::index(int row, int column, const QModelIndex &parent) const
+{
+ if (hasIndex(row, column, parent))
+ return createIndex(row, column, m_items.at(row));
+
+ return QModelIndex();
+}
+
+void ListModel::insert(int row, RecycledListItem *item)
+{
+ if (item)
+ item->setModel(this);
+ if (!item || m_items.contains(item) ) {
+ return;
+ }
+ if (row < 0)
+ row = 0;
+ else if (row > m_items.count())
+ row = m_items.count();
+ beginInsertRows(QModelIndex(), row, row);
+ m_items.insert(row, item);
+ endInsertRows();
+}
+
+void ListModel::appendRow(RecycledListItem *item)
+{
+ if (!item) return;
+ item->setModel(this);
+ insert(rowCount(),item);
+}
+
+RecycledListItem *ListModel::item(const int row) const
+{
+ if (row < 0 || row > m_items.count())
+ return 0;
+ return m_items.at(row);
+}
+
+RecycledListItem *ListModel::takeItem(const int row)
+{
+ if (row < 0 || row >= m_items.count())
+ return 0;
+
+ beginRemoveRows(QModelIndex(), row, row);
+ RecycledListItem *item = m_items.takeAt(row);
+ endRemoveRows();
+
+ return item;
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h
new file mode 100644
index 0000000..dfa12d6
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LISTMODEL_H
+#define LISTMODEL_H
+
+#include <QAbstractListModel>
+
+class RecycledListItem;
+class ListItemCache;
+
+class ListModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+
+ ListModel(QObject *parent = 0);
+ ~ListModel();
+
+public:
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole ) const;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+
+ void insert(const int row, RecycledListItem *item);
+ void appendRow(RecycledListItem *item);
+
+ void clear();
+
+ RecycledListItem *item(const int row) const;
+
+ RecycledListItem *takeItem(const int row);
+
+private:
+ Q_DISABLE_COPY(ListModel)
+ QList<RecycledListItem *> m_items;
+};
+
+#endif // LISTMODEL_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp
new file mode 100644
index 0000000..736b9fe
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsSceneResizeEvent>
+#include <QGraphicsGridLayout>
+#include <QGraphicsLinearLayout>
+#include <QTimer>
+#include "listwidget.h"
+
+ListWidget::ListWidget(QGraphicsWidget * parent)
+ : GvbWidget(parent),
+ m_layout(new QGraphicsLinearLayout(Qt::Vertical)),
+ m_listView(new SimpleListView(this))
+{
+ //listView->setViewport(listView->content());
+ //listView->content()->setParentItem(listView);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setContentsMargins(0,0,0,0);
+ m_layout->setContentsMargins(0,0,0,0);
+ m_listView->setContentsMargins(0,0,0,0);
+ m_layout->addItem(m_listView);
+ setLayout(m_layout);
+
+ m_scroller.setScrollable(m_listView);
+ m_listView->installEventFilter(&m_scroller);
+ m_listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+}
+
+ListWidget::~ListWidget()
+{
+
+}
+
+void ListWidget::addItem(QGraphicsWidget *item)
+{
+ m_listView->addItem(item);
+}
+
+void ListWidget::insertItem(int index, QGraphicsWidget *item)
+{
+ m_listView->insertItem(index, item);
+}
+
+QGraphicsWidget* ListWidget::takeItem(int row)
+{
+ return m_listView->takeItem(row);
+}
+
+QGraphicsWidget* ListWidget::itemAt(int row)
+{
+ return m_listView->itemAt(row);
+}
+
+/* virtual */
+void ListWidget::resizeEvent( QGraphicsSceneResizeEvent * event )
+{
+ QGraphicsWidget::resizeEvent(event);
+}
+
+int ListWidget::itemCount() const
+{
+ if (m_listView)
+ return m_listView->itemCount();
+ return 0;
+}
+
+ScrollBar* ListWidget::verticalScrollBar() const
+{
+ if (m_listView)
+ return m_listView->verticalScrollBar();
+ return 0;
+}
+
+#if (QT_VERSION >= 0x040600)
+bool ListWidget::listItemCaching() const
+{
+ return m_listView->listItemCaching();
+}
+
+void ListWidget::setListItemCaching(bool enable)
+{
+ m_listView->setListItemCaching(enable);
+}
+#endif
+
+void ListWidget::setTwoColumns(const bool twoColumns)
+{
+ m_listView->setTwoColumns(twoColumns);
+}
+
+bool ListWidget::twoColumns()
+{
+ return m_listView->twoColumns();
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h
new file mode 100644
index 0000000..342083f
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LISTWIDGET_H
+#define LISTWIDGET_H
+
+#include <QGraphicsWidget>
+#include "simplelistview.h"
+#include "scroller.h"
+#include "gvbwidget.h"
+
+class AbstractViewItem;
+class QGraphicsSceneResizeEvent;
+class QGraphicsGridLayout;
+class QGraphicsLinearLayout;
+
+class ListWidget : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+ ListWidget(QGraphicsWidget * parent = 0);
+ virtual ~ListWidget();
+ void addItem(QGraphicsWidget *item);
+ void insertItem(int index, QGraphicsWidget *item);
+ QGraphicsWidget* takeItem(int row);
+ QGraphicsWidget* itemAt(int row);
+ int itemCount() const;
+#if (QT_VERSION >= 0x040600)
+ bool listItemCaching() const;
+ void setListItemCaching(bool enable);
+#endif
+ ScrollBar* verticalScrollBar() const;
+
+ void setTwoColumns(const bool twoColumns);
+ bool twoColumns();
+
+protected:
+ virtual void resizeEvent( QGraphicsSceneResizeEvent * event );
+
+private:
+ Q_DISABLE_COPY(ListWidget)
+
+ QGraphicsLinearLayout *m_layout;
+ SimpleListView *m_listView;
+ Scroller m_scroller;
+};
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
new file mode 100644
index 0000000..ad62a9d
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
@@ -0,0 +1,344 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QApplication>
+#include <QGraphicsLinearLayout>
+#ifndef QT_NO_OPENGL
+#include <QGLWidget>
+#endif
+#include <QObject>
+
+#include "button.h"
+#include "label.h"
+#include "menu.h"
+#include "topbar.h"
+#include "backgrounditem.h"
+#include "theme.h"
+#include "mainview.h"
+#include "gvbwidget.h"
+
+MainView::MainView(const bool enableOpenGL, const bool outputFps, const bool imageRendering, QWidget *parent)
+ : QGraphicsView(parent)
+ , m_scene(0)
+ , m_mainLayout(0)
+ , m_mainWidget(0)
+ , m_testWidget(0)
+ , m_imageBasedRendering(imageRendering)
+ , m_pixmapToRender(0)
+ , m_OutputFps(outputFps)
+ , m_fpsUpdated()
+ , m_Fpss()
+ , m_angle(0)
+ , m_enableOpenGL(enableOpenGL)
+{
+ construct();
+}
+
+MainView::~MainView()
+{
+ if (!m_scene->parent())
+ delete m_scene;
+
+ delete m_pixmapToRender;
+}
+
+void MainView::setTestWidget(QGraphicsWidget *testWidget)
+{
+ if (!testWidget)
+ return;
+
+ if (m_testWidget) {
+ m_mainLayout->removeItem(m_testWidget);
+ if (!m_testWidget->parent() && !m_testWidget->parentLayoutItem())
+ delete m_testWidget;
+ }
+ m_testWidget = testWidget;
+ m_mainLayout->addItem(m_testWidget);
+ resizeContent(size());
+}
+
+QGraphicsWidget *MainView::takeTestWidget()
+{
+ if (m_testWidget) {
+ m_mainLayout->removeItem(m_testWidget);
+ QGraphicsWidget *tmp = m_testWidget;
+ m_testWidget = 0;
+ return tmp;
+ }
+ return 0;
+}
+
+QGraphicsWidget *MainView::testWidget()
+{
+ return m_testWidget;
+}
+
+void MainView::setImageBasedRendering(const bool imageBasedRendering)
+{
+ m_imageBasedRendering = imageBasedRendering;
+ delete m_pixmapToRender;
+ m_pixmapToRender = 0;
+ viewport()->update();
+}
+
+bool MainView::imageBasedRendering() const
+{
+ return m_imageBasedRendering;
+}
+
+qreal MainView::fps()
+{
+ if (m_Fpss.count() <= 0)
+ updateFps();
+
+ if (m_Fpss.count() <= 0)
+ return 0.0;
+
+ qreal sum = 0;
+ int count = m_Fpss.count();
+ for (int i = 0; i<count; ++i)
+ sum += m_Fpss.at(i);
+ m_Fpss.clear();
+ fpsReset();
+ return sum/qreal(count);
+}
+
+void MainView::fpsReset()
+{
+ m_frameCount = 0;
+ m_fpsFirstTs.start();
+ m_fpsLatestTs = m_fpsFirstTs;
+ m_fpsUpdated.start();
+}
+
+void MainView::rotateContent(int angle)
+{
+ bool portrait = ((m_angle+angle)%90 == 0) && ((m_angle+angle)%180 != 0);
+ bool landscape = ((m_angle+angle)%180 == 0);
+ if (!portrait && !landscape)
+ return;
+
+ m_angle = (m_angle + angle)%360;
+
+ rotate(angle);
+
+ resizeContent(size());
+}
+
+int MainView::rotationAngle() const
+{
+ return m_angle;
+}
+
+void MainView::resizeContent(const QSize &s)
+{
+ QSizeF l_size(s);
+ QSizeF p_size(l_size.height(), l_size.width());
+ bool portrait = (m_angle%90 == 0) && (m_angle%180 != 0);
+ if (portrait) {
+ m_mainWidget->resize(p_size);
+ m_backGround->resize(p_size);
+ }
+ else {
+ m_mainWidget->resize(l_size);
+ m_backGround->resize(l_size);
+ }
+ m_menu->setPos(m_topBar->getStatusBarLocation());
+ setSceneRect(QRectF(m_mainWidget->pos(), m_mainWidget->size()));
+}
+
+void MainView::resizeEvent(QResizeEvent * event)
+{
+ QGraphicsView::resizeEvent(event);
+ resizeContent(event->size());
+}
+
+void MainView::paintEvent (QPaintEvent *event)
+{
+ if (m_imageBasedRendering) {
+ if (!m_pixmapToRender)
+ m_pixmapToRender = new QPixmap(size());
+
+ if (m_pixmapToRender->size() != size()) {
+ delete m_pixmapToRender;
+ m_pixmapToRender = new QPixmap(size());
+ }
+ QPainter p(m_pixmapToRender);
+ render(&p);
+ p.end();
+ }
+ else {
+ QGraphicsView::paintEvent(event);
+ }
+
+ if (!m_OutputFps)
+ emit repainted();
+
+ m_frameCount++;
+ m_fpsLatestTs.start();
+ if(m_fpsUpdated.elapsed() > 2000) {
+ updateFps();
+ m_fpsUpdated.start();
+ }
+}
+
+void MainView::keyPressEvent(QKeyEvent *event)
+{
+ if (event->key() == Qt::Key_F) {
+ if (isFullScreen())
+ showNormal();
+ else
+ showFullScreen();
+ }
+
+ //S60 3.x specific
+ if(m_menu->menuVisible()) {
+ m_menu->keyPressEvent(event);
+ return;
+ }
+
+ if(event->key() == 16777235 ) { //Up Arrow
+ GvbWidget* widget = qobject_cast<GvbWidget*>(m_testWidget);
+ if(widget)
+ widget->keyPressEvent(event);
+ }
+
+ if(event->key() == 16777237 ) { //Down Arrow
+ GvbWidget* widget = qobject_cast<GvbWidget*>(m_testWidget);
+ if(widget)
+ widget->keyPressEvent(event);
+ }
+
+ if(event->key() == 17825792 ) { //LSK
+ if(!m_menu->menuVisible())
+ m_menu->menuShowHide();
+ }
+
+ if(event->key() == 17825793 ) { //RSK
+ QApplication::quit();
+ }
+}
+
+void MainView::construct()
+{
+ m_scene = new QGraphicsScene;
+
+#ifndef QT_NO_OPENGL
+ if (m_enableOpenGL) {
+ qDebug() << "OpenGL enabled";
+ m_scene->setSortCacheEnabled(false);
+ setViewport(new QGLWidget);
+
+ // Qt doc says: This is the preferred update mode for
+ // viewports that do not support partial updates, such as QGLWidget...
+ setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
+ } else
+#endif
+ setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
+
+ setScene(m_scene);
+ m_scene->setItemIndexMethod(QGraphicsScene::NoIndex);
+
+ //setCacheMode(QGraphicsView::CacheBackground);
+ setAlignment(Qt::AlignLeft | Qt::AlignTop);
+
+ // Turn off automatic background
+ setAttribute(Qt::WA_OpaquePaintEvent);
+ setAttribute(Qt::WA_NoBackground);
+ setAttribute(Qt::WA_NoSystemBackground);
+ setAutoFillBackground(false);
+
+ //Background
+ m_backGround = new BackgroundItem("background.svg");
+ m_scene->addItem(m_backGround);
+ m_backGround->setZValue(0);
+
+ //Menu
+ m_menu = new Menu(this);
+ m_scene->addItem(m_menu); //Add menu to the scene directly
+ m_menu->setZValue(10); //Bring to front
+
+ m_mainLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ m_mainLayout->setContentsMargins(0,0,0,0);
+ m_mainLayout->setSpacing(0);
+
+ m_mainWidget = new QGraphicsWidget;
+ m_mainWidget->setLayout(m_mainLayout);
+ m_mainWidget->setZValue(1);
+ m_scene->addItem(m_mainWidget);
+
+ //Topbar
+ m_topBar = new TopBar(this, 0);
+ m_mainLayout->addItem(m_topBar);
+ m_topBar->setZValue(1);
+ connect(m_topBar, SIGNAL(clicked(bool)), m_menu, SLOT(menuShowHide()));
+
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setContentsMargins(0,0,0,0);
+ setViewportMargins(0,0,0,0);
+ setFrameShape(QFrame::NoFrame);
+
+ fpsReset();
+ m_fpsUpdated.start();
+}
+
+void MainView::updateFps()
+{
+ int msecs = m_fpsFirstTs.msecsTo(m_fpsLatestTs);
+ qreal fps = 0;
+ if (msecs > 0) {
+ fps = m_frameCount * 1000.0 / msecs;
+
+ if (m_OutputFps)
+ qDebug() << "FPS: " << fps;
+
+ m_Fpss.append(fps);
+ }
+ m_fpsFirstTs = m_fpsLatestTs;
+ m_frameCount = 0;
+}
+
+Menu *MainView::menu()
+{
+ return m_menu;
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
new file mode 100644
index 0000000..7591be6
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __MAINWINDOW_H__
+#define __MAINWINDOW_H__
+
+#include <QGraphicsView>
+#include <QTime>
+#include <QTimer>
+
+#include "settings.h"
+
+class QGraphicsScene;
+class QGraphicsLinearLayout;
+class QResizeEvent;
+class Label;
+class Menu;
+class BackgroundItem;
+class TopBar;
+
+class MainView : public QGraphicsView {
+
+Q_OBJECT
+
+public:
+ MainView(const bool enableOpenGL, const bool outputFps, const bool imageBasedRendering = false, QWidget *parent = 0);
+ ~MainView();
+
+ void setTestWidget(QGraphicsWidget *testWidget);
+ QGraphicsWidget *takeTestWidget();
+ QGraphicsWidget *testWidget();
+
+ qreal fps();
+ void fpsReset();
+ void setImageBasedRendering(const bool imageBasedRendering);
+ bool imageBasedRendering() const;
+ Menu *menu();
+ int rotationAngle() const;
+
+signals:
+ void repainted();
+
+public slots:
+ void rotateContent(int angle);
+
+protected:
+
+ virtual void resizeEvent(QResizeEvent * event);
+ virtual void paintEvent(QPaintEvent *event);
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual void wheelEvent(QWheelEvent *event) { Q_UNUSED (event); };
+
+private slots:
+ void updateFps();
+
+private:
+ void construct();
+ void resizeContent(const QSize &s);
+
+private:
+ Q_DISABLE_COPY(MainView)
+
+ QGraphicsScene *m_scene;
+ QGraphicsLinearLayout *m_mainLayout;
+ QGraphicsWidget *m_mainWidget;
+ QGraphicsWidget *m_testWidget;
+ Menu* m_menu;
+ BackgroundItem* m_backGround;
+ TopBar* m_topBar;
+
+ bool m_imageBasedRendering;
+ QPixmap *m_pixmapToRender;
+ // Used for FPS
+ int m_frameCount;
+ QTime m_fpsFirstTs;
+ QTime m_fpsLatestTs;
+ bool m_OutputFps;
+ QTime m_fpsUpdated;
+ QList<qreal> m_Fpss;
+
+ int m_angle;
+ bool m_enableOpenGL;
+};
+
+#endif //__MAINWINDOW_H__
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp
new file mode 100644
index 0000000..3de39b8
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp
@@ -0,0 +1,202 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsView>
+#include <QGraphicsWidget>
+#include <QGraphicsLinearLayout>
+#include <QList>
+
+#include "button.h"
+#include "menu.h"
+#include "themeevent.h"
+#include "theme.h"
+
+static const int MinMenuItemWidth = 150;
+static const int MinMenuItemHeight = 40;
+
+Menu::Menu(QGraphicsView* parent) : QGraphicsWidget(),
+ m_Parent(parent), m_Layout(new QGraphicsLinearLayout(Qt::Vertical, this)),
+ m_ButtonContainer(0), m_isMenuVisible(false), m_currentSelectedIndex(-1)
+{
+ init();
+}
+
+Menu::~Menu()
+{
+ for(int i = 0; i < m_ButtonContainer->count(); i++ ) {
+ delete m_ButtonContainer->at(i);
+ }
+ m_ButtonContainer->clear();
+
+ delete m_ButtonContainer;
+ m_ButtonContainer = 0;
+}
+
+void Menu::init()
+{
+ m_ButtonContainer = new QList<Button*>;
+
+ m_Layout->setContentsMargins(0,0,0,0);
+ m_Layout->setSpacing(0);
+
+ setMinimumWidth(150);
+
+ setLayout(m_Layout);
+
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+}
+
+Button* Menu::addMenuItem(const QString itemName, QObject* receiver, const char* member)
+{
+ Button* button = new Button(itemName ,this);
+ button->setVisible(m_isMenuVisible);
+ connect(button, SIGNAL(clicked(bool)), receiver, member);
+ connect(button, SIGNAL(clicked(bool)), this, SLOT(menuShowHide()));
+ m_ButtonContainer->append(button);
+ button->setMinimumWidth(MinMenuItemWidth);
+ button->setMinimumHeight(MinMenuItemHeight);
+ return button;
+}
+
+void Menu::menuShowHide()
+{
+ m_isMenuVisible ? menuHide() : menuShow();
+ m_isMenuVisible = !m_isMenuVisible;
+}
+
+void Menu::menuShow()
+{
+ for(int i = 0; i < m_ButtonContainer->count(); i++) {
+ Button* button = m_ButtonContainer->at(i);
+ m_Layout->addItem(button);
+ button->show();
+ }
+}
+
+void Menu::menuHide()
+{
+ for(int i = 0; i < m_ButtonContainer->count(); i++) {
+ Button* button = m_ButtonContainer->at(i);
+ button->select(false);
+ button->hide();
+ m_Layout->removeItem(button);
+ }
+ m_currentSelectedIndex = -1;
+}
+
+void Menu::themeChange()
+{
+ QPixmap pixmap = Theme::p()->pixmap("status_field_middle.svg",
+ QSize(MinMenuItemWidth, MinMenuItemHeight));
+
+ for(int i = 0; i < m_ButtonContainer->count(); i++) {
+ Button* button = m_ButtonContainer->at(i);
+ button->setBackground(pixmap);
+ }
+ update();
+}
+
+void Menu::keyPressEvent(QKeyEvent *event)
+{
+ //S60 3.x specific
+ if(event->key() == 16777235 ) { //Up Arrow
+ if(m_currentSelectedIndex > 0) { //One step up
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(false);
+ button->update();
+
+ m_currentSelectedIndex--;
+ button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(true);
+ button->update();
+ }
+ else { //Jump to bottom
+ if(m_currentSelectedIndex >= 0) {
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(false);
+ button->update();
+ }
+ m_currentSelectedIndex = m_ButtonContainer->count() -1;
+ if(m_currentSelectedIndex >= 0) {
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(true);
+ button->update();
+ }
+ }
+ }
+
+ if(event->key() == 16777237 ) { //Down Arrow
+ if (m_currentSelectedIndex < m_ButtonContainer->count()-1) { //One step down
+ if(m_currentSelectedIndex >= 0) {
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(false);
+ button->update();
+ }
+ m_currentSelectedIndex++;
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(true);
+ button->update();
+ }
+ else { //Jump to top
+ if(m_currentSelectedIndex >= 0) {
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(false);
+ button->update();
+ m_currentSelectedIndex = 0;
+ button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->select(true);
+ button->update();
+ }
+ }
+ }
+
+ if(event->key() == 17825792 || event->key() == 16842752 || //LSK, center key or enter
+ event->key() == 16777221 ) {
+ if(m_currentSelectedIndex >= 0) {
+ Button* button = m_ButtonContainer->at(m_currentSelectedIndex);
+ button->click();
+ }
+ }
+
+ if(event->key() == 17825793 ) { //RSK
+ menuShowHide();
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h
new file mode 100644
index 0000000..1f762ec
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __MENU_H__
+#define __MENU_H__
+
+#include <QGraphicsWidget>
+#include <QList>
+
+class QGraphicsView;
+class QGraphicsLinearLayout;
+class Button;
+
+class Menu : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ Menu(QGraphicsView* parent);
+ ~Menu();
+
+public:
+ Button* addMenuItem(const QString itemName, QObject* receiver, const char* member);
+ inline bool menuVisible() { return m_isMenuVisible; }
+ virtual void keyPressEvent(QKeyEvent *event);
+
+public slots:
+ void themeChange();
+
+public slots:
+ void menuShowHide();
+
+private:
+ void init();
+ void menuShow();
+ void menuHide();
+
+private:
+ Q_DISABLE_COPY(Menu)
+ QGraphicsView* m_Parent;
+ QGraphicsLinearLayout* m_Layout;
+ QList<Button*>* m_ButtonContainer;
+ bool m_isMenuVisible;
+ int m_currentSelectedIndex;
+};
+
+#endif // __MENU_H__
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp
new file mode 100644
index 0000000..f84b90a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsGridLayout>
+#include <QDebug>
+
+#include "recycledlistitem.h"
+#include "listmodel.h"
+
+static const int MinItemHeight = 70;
+static const int MinItemWidth = 276;
+
+RecycledListItem::RecycledListItem(QGraphicsWidget *parent)
+ : AbstractViewItem(parent),
+ m_item(new ListItem(this)),
+ m_item2(0),
+ m_model(0),
+ m_layout(new QGraphicsGridLayout())
+{
+ m_item->setMinimumWidth(MinItemWidth);
+ setContentsMargins(0,0,0,0);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_layout->addItem(m_item, 0, 0);
+ setLayout(m_layout);
+ m_layout->setContentsMargins(0,0,0,0);
+ m_layout->setSpacing(0);
+ m_layout->setHorizontalSpacing(0.0);
+ m_layout->setVerticalSpacing(0.0);
+}
+
+RecycledListItem::~RecycledListItem()
+{
+}
+
+void RecycledListItem::setModel(QAbstractItemModel *model)
+{
+ m_model = model;
+}
+
+/*virtual*/
+AbstractViewItem *RecycledListItem::newItemInstance()
+{
+ RecycledListItem* item = new RecycledListItem();
+ return item;
+}
+
+QSizeF RecycledListItem::effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+ QSizeF s = m_item->effectiveSizeHint(which,constraint);
+ if (m_item2)
+ s.setWidth(s.width()*2);
+ if (s.height()<MinItemHeight)
+ s.setHeight(MinItemHeight);
+ return s;
+}
+
+QVariant RecycledListItem::data(int role) const
+{
+ if (m_item && role == Qt::DisplayRole)
+ return m_item->data();
+
+ return QVariant();
+}
+
+void RecycledListItem::setData(const QVariant &value, int role)
+{
+ if (m_item && role == Qt::DisplayRole) {
+ m_item->setData(value);
+ if (m_item2) {
+ m_item2->setData(value);
+ }
+ }
+}
+
+/*virtual*/
+void RecycledListItem::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ AbstractViewItem::resizeEvent(event);
+}
+
+void RecycledListItem::updateItemContents()
+{
+ AbstractViewItem::updateItemContents();
+ if (m_model && m_index.isValid())
+ setData(m_model->data(m_index,Qt::DisplayRole), Qt::DisplayRole);
+}
+
+void RecycledListItem::setTwoColumns(const bool enabled)
+{
+ if (m_item2 && enabled)
+ return;
+
+ if (enabled) {
+ m_item2 = new ListItem();
+ m_item2->setMinimumWidth(MinItemWidth);
+ m_layout->addItem(m_item2, 0, 1);
+ updateItemContents();
+ }
+ else {
+ if (m_layout->count() > 1) {
+ m_layout->removeAt(1);
+ }
+ delete m_item2;
+ m_item2 = 0;
+ }
+
+ if (!m_layout->isActivated())
+ m_layout->activate();
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h
new file mode 100644
index 0000000..a155eef
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef RECYCLEDLISTITEM_H
+#define RECYCLEDLISTITEM_H
+
+#include "abstractviewitem.h"
+
+class ListItem;
+class QGraphicsWidget;
+class QGraphicsGridLayout;
+
+class RecycledListItem : public AbstractViewItem
+{
+ Q_OBJECT
+public:
+ RecycledListItem(QGraphicsWidget *parent=0);
+ virtual ~RecycledListItem();
+
+ virtual void setModel(QAbstractItemModel *model);
+
+ virtual AbstractViewItem *newItemInstance();
+ virtual void updateItemContents();
+
+ virtual QVariant data(int role) const;
+ virtual void setData(const QVariant &value, int role = Qt::DisplayRole);
+
+ ListItem *item() { return m_item; }
+
+ void setTwoColumns(const bool enabled);
+
+protected:
+ virtual QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+ virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+private:
+ Q_DISABLE_COPY(RecycledListItem)
+
+ ListItem *m_item;
+ ListItem *m_item2;
+ QAbstractItemModel *m_model;
+ QGraphicsGridLayout *m_layout;
+};
+
+#endif // RECYCLEDLISTITEM_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h
new file mode 100644
index 0000000..990843a
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __RESOURCEMONINTERFACE_H__
+#define __RESOURCEMONINTERFACE_H__
+
+class ResourceMonitorInterface
+{
+public:
+ struct MemoryAllocation
+ {
+ int allocatedInAppThread;
+ int numberOfAllocatedCellsInAppThread;
+ int availableMemoryInAppThreadHeap;
+ qint64 availableMemoryInSystem;
+ qint64 totalMemoryInSystem;
+ MemoryAllocation() :
+ allocatedInAppThread(0),
+ numberOfAllocatedCellsInAppThread(0),
+ availableMemoryInAppThreadHeap(0),
+ availableMemoryInSystem(0),
+ totalMemoryInSystem(0)
+ {}
+ };
+
+ struct CpuUsage
+ {
+ qreal systemUsage;
+ qreal appTreadUsage;
+ CpuUsage() :
+ systemUsage(0.0),
+ appTreadUsage(0.0)
+ {}
+ };
+
+public:
+ virtual ~ResourceMonitorInterface() {}
+
+public:
+ //for symbian, prepares the resource monitor for data capture, opens handle to ekern null
+ //thread and sets initial values
+ virtual bool Prepare(QString applicationThreadName) = 0;
+
+ //functions for CPU load and memory - Call Prepare before calling these
+ virtual CpuUsage CPULoad()=0;
+ virtual MemoryAllocation MemoryLoad()=0;
+
+ virtual void BeginMeasureMemoryLoad()=0;
+ virtual MemoryAllocation EndMeasureMemoryLoad()=0;
+
+ virtual void BeginMeasureCPULoad()=0;
+ virtual CpuUsage EndMeasureCPULoad()=0;
+
+};
+
+Q_DECLARE_INTERFACE(ResourceMonitorInterface,
+ "com.trolltech.Plugin.ResourceMonitorInterface/1.0");
+
+#endif //__RESOURCEMONINTERFACE_H__
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp
new file mode 100644
index 0000000..4cf05e5
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp
@@ -0,0 +1,299 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsWidget>
+#include <QPainter>
+#include <QGraphicsSceneMouseEvent>
+#include <QDebug>
+
+#include "scrollbar.h"
+#include "theme.h"
+
+class ScrollBarPrivate {
+ Q_DECLARE_PUBLIC(ScrollBar)
+
+public:
+
+ ScrollBarPrivate(Qt::Orientation orientation, ScrollBar *scrollBar)
+ : orientation(orientation)
+ , sliderPosition(0.0)
+ , sliderSize(0.0)
+ , sliderDown(false)
+ , q_ptr(scrollBar)
+ {
+ construct();
+ }
+
+ void themeChange()
+ {
+ construct();
+ updateSlider();
+ }
+
+ void construct()
+ {
+ scrollerPixmap = Theme::p()->pixmap("scroll.svg");
+ scrollBarPixmap = Theme::p()->pixmap("scrollbar.svg");
+
+ if (orientation == Qt::Horizontal) {
+ scrollerPixmap = scrollerPixmap.transformed(QTransform().rotate(90));
+ scrollBarPixmap = scrollBarPixmap.transformed(QTransform().rotate(90));
+ }
+ }
+
+ void setSliderPosition(qreal pos)
+ {
+ if (pos < 0.0)
+ pos = 0.0;
+
+ if (pos > sliderSize)
+ pos = sliderSize;
+
+ sliderPosition = pos;
+
+ if (!qFuzzyCompare(pos, sliderPosition))
+ updateSlider();
+ }
+
+ void updateSlider()
+ {
+ QRectF oldSlider = slider;
+ slider = q_func()->boundingRect();
+
+ qreal x = 0;
+ qreal y = 0;
+ qreal w = scrollerPixmap.width();
+ qreal h = scrollerPixmap.height();
+
+ //Adjust the scrollBar in relation to the scroller
+
+ if (orientation == Qt::Horizontal) {
+ qreal scrollBarHeight = scrollBarPixmap.height();
+
+ if (h > scrollBarHeight) {
+ slider.setTop((h - scrollBarHeight)/2.0);
+ slider.setHeight(scrollBarHeight);
+ }
+ } else {
+ qreal scrollBarWidth = scrollBarPixmap.width();
+
+ if (w > scrollBarWidth) {
+ slider.setLeft((w - scrollBarWidth)/2.0);
+ }
+ slider.setWidth(scrollBarWidth);
+ }
+
+ if(oldSlider != slider && (slider.size().width() > 0 &&slider.size().height() > 0 )) {
+ scrollBarPixmap = Theme::p()->pixmap("scrollbar.svg", slider.size().toSize());
+ }
+ cursor = QRectF(x, y, w, h);
+
+ if (orientation == Qt::Horizontal) {
+ qreal dx = qreal(int(sliderPosition)) * (slider.width() - cursor.width()) / sliderSize;
+ cursor.translate(dx, 0.0);
+ } else {
+ qreal dy = qreal(int(sliderPosition)) * (slider.height() - cursor.height()) / sliderSize;
+ cursor.translate(0.0, dy);
+ }
+ }
+
+ Qt::Orientation orientation;
+ qreal sliderPosition;
+ qreal sliderSize;
+
+ QPointF pressPos;
+ bool sliderDown;
+
+ QRectF slider;
+ QRectF cursor;
+ QPixmap scrollerPixmap;
+ QPixmap scrollBarPixmap;
+
+ ScrollBar *q_ptr;
+};
+
+ScrollBar::ScrollBar(Qt::Orientation orientation, QGraphicsWidget *parent)
+ : QGraphicsWidget(parent)
+ , d_ptr(new ScrollBarPrivate(orientation, this))
+{
+ setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);
+ setContentsMargins(0, 0, 0, 0);
+
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+}
+
+ScrollBar::~ScrollBar()
+{
+ delete d_ptr;
+}
+
+qreal ScrollBar::sliderSize() const
+{
+ Q_D(const ScrollBar);
+ return d->sliderSize;
+}
+
+void ScrollBar::setSliderSize(const qreal s)
+{
+ Q_D(ScrollBar);
+ d->sliderSize = s;
+}
+
+void ScrollBar::setSliderPosition(qreal pos)
+{
+ Q_D(ScrollBar);
+
+ d->setSliderPosition(pos);
+ prepareGeometryChange();
+ emit sliderPositionChange(d->sliderPosition);
+}
+
+qreal ScrollBar::sliderPosition() const
+{
+ Q_D(const ScrollBar);
+ return d->sliderPosition;
+}
+
+bool ScrollBar::sliderDown() const
+{
+ Q_D(const ScrollBar);
+ return d->sliderDown;
+}
+
+void ScrollBar::paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ Q_D(ScrollBar);
+ Q_UNUSED(widget);
+ Q_UNUSED(option);
+
+ d->updateSlider();
+
+ QRect sliderRect = d->slider.toRect();
+ painter->drawPixmap(sliderRect.topLeft(), d->scrollBarPixmap);
+
+ QRect cursorRect = d->cursor.toRect();
+ painter->drawPixmap(cursorRect.topLeft(), d->scrollerPixmap);
+}
+
+QSizeF ScrollBar::sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint) const
+{
+ Q_D(const ScrollBar);
+
+ QSizeF s;
+
+ if (d->orientation == Qt::Horizontal)
+ s = QSizeF(-1, qMax(d->scrollBarPixmap.height(), d->scrollerPixmap.height()));
+ else
+ s = QSizeF(qMax(d->scrollBarPixmap.width(), d->scrollerPixmap.width()), -1);
+
+ switch (which)
+ {
+ case Qt::MinimumSize:
+ return s;
+
+ case Qt::MaximumSize:
+ return s;
+
+ default:
+ return QGraphicsWidget::sizeHint(which, constraint);
+ }
+}
+
+void ScrollBar::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(ScrollBar);
+
+ d->updateSlider();
+
+ if (d->cursor.contains(event->pos())) {
+ d->sliderDown = true;
+ d->pressPos = event->pos();
+ emit sliderPressed();
+ }
+}
+
+void ScrollBar::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(ScrollBar);
+ Q_UNUSED(event);
+
+ d->sliderDown = false;
+}
+
+void ScrollBar::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_D(ScrollBar);
+
+ if (!d->sliderDown)
+ return;
+
+ if (d->orientation == Qt::Horizontal) {
+ qreal f = (event->pos().x() - d->pressPos.x())/(d->slider.width() - d->cursor.width());
+ qreal dx = f * d->sliderSize;
+
+ d->setSliderPosition(d->sliderPosition + dx);
+ } else {
+ qreal f = (event->pos().y() - d->pressPos.y())/(d->slider.height() - d->cursor.height());
+ qreal dy = f * d->sliderSize;
+
+ d->setSliderPosition(d->sliderPosition + dy);
+ }
+
+ d->pressPos = event->pos();
+
+ prepareGeometryChange();
+ emit sliderPositionChange(d->sliderPosition);
+}
+
+void ScrollBar::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ QGraphicsWidget::resizeEvent(event);
+}
+
+void ScrollBar::themeChange()
+{
+ Q_D(ScrollBar);
+ d->themeChange();
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h
new file mode 100644
index 0000000..3b0ae04
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SCROLLBAR_H
+#define SCROLLBAR_H
+
+#include <QGraphicsWidget>
+#include <QPixmap>
+
+class ScrollBarPrivate;
+
+class ScrollBar : public QGraphicsWidget
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(ScrollBar)
+
+public:
+
+ ScrollBar(Qt::Orientation orientation, QGraphicsWidget *parent=0);
+ virtual ~ScrollBar();
+
+public:
+
+ bool sliderDown() const;
+ qreal sliderPosition() const;
+ qreal sliderSize() const;
+ void setSliderSize(const qreal s);
+
+signals:
+
+ void sliderPressed();
+
+ void sliderPositionChange(qreal position);
+
+public slots:
+
+ void setSliderPosition(qreal pos);
+ void themeChange();
+
+private:
+
+ void paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget);
+
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint = QSizeF()) const;
+
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+private:
+ Q_DISABLE_COPY(ScrollBar)
+ ScrollBarPrivate *d_ptr;
+};
+
+#endif // SCROLLBAR_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp
new file mode 100644
index 0000000..1cdcaf9
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp
@@ -0,0 +1,305 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QScrollBar>
+#include <QEvent>
+#include <QGraphicsSceneMouseEvent>
+#include <QGraphicsView>
+#include <QDebug>
+
+#include "scroller.h"
+#include "scroller_p.h"
+#include "abstractscrollarea.h"
+#include "scrollbar.h"
+
+const int ScrollStep = 1;
+const int UpdateScrollingInterval = 55;
+const int UpdateScrollingSmoothInterval = 0;
+static const qreal MaxScrollingSpeed = 48.0;
+
+ScrollerPrivate::ScrollerPrivate(Scroller *scroller)
+ : m_scrollArea(0)
+ , m_scrollFactor(1.0)
+ , m_state(Stopped)
+ , q_ptr(scroller)
+ , m_eventViewport(0)
+{
+}
+
+ScrollerPrivate::~ScrollerPrivate()
+{
+}
+
+void ScrollerPrivate::stopScrolling()
+{
+ m_state = ScrollerPrivate::Started;
+ m_cursorPos = QCursor::pos();
+ m_speed = QPoint(0, 0);
+
+ if (m_scrollTimer.isActive())
+ m_scrollTimer.stop();
+}
+
+//Maps screen coordinates to scrollArea coordinates though current m_eventViewport widget
+QPointF ScrollerPrivate::mapToScrollArea(const QPoint &point)
+{
+ if (!m_scrollArea || !m_eventViewport)
+ return point;
+
+ QObject *vparent = m_eventViewport->parent();
+ if (!vparent)
+ return point;
+
+ QGraphicsView *view = qobject_cast<QGraphicsView*>(vparent);
+ if (!view)
+ return point;
+
+ QPoint pt = view->mapFromGlobal(point);
+ return m_scrollArea->mapFromScene(view->mapToScene(pt));
+}
+
+bool ScrollerPrivate::eventFilter(QObject *obj, QEvent *event)
+{
+ if (obj != m_scrollArea
+ || (event->type() != QEvent::GraphicsSceneMouseMove
+ && event->type() != QEvent::GraphicsSceneMousePress
+ && event->type() != QEvent::GraphicsSceneMouseRelease
+ /*&& event->type() != QEvent::GraphicsSceneKeyPressed
+ && event->type() != QEvent::GraphicsSceneKeyReleased*/))
+ return false;
+
+ QGraphicsSceneMouseEvent* mouseEvent =
+ static_cast<QGraphicsSceneMouseEvent*>(event);
+
+ m_eventViewport = mouseEvent->widget();
+
+ bool eventConsumed = false;
+
+ switch (m_state) {
+ case ScrollerPrivate::Stopped:
+ if (mouseEvent->type() == QEvent::GraphicsSceneMousePress &&
+ mouseEvent->buttons() == Qt::LeftButton) {
+ m_cursorPos = QCursor::pos();
+ m_speed = QPointF(0.0, 0.0);
+ m_state = Started;
+ }
+
+ eventConsumed = true;
+ break;
+
+ case ScrollerPrivate::Started:
+ if (mouseEvent->type() == QEvent::GraphicsSceneMouseMove) {
+ m_cursorPos = QCursor::pos();
+ m_state = ManualScrolling;
+
+ if (!m_scrollTimer.isActive())
+ m_scrollTimer.start(UpdateScrollingInterval);
+ else {
+ m_scrollTimer.stop();
+ m_scrollTimer.start(UpdateScrollingInterval);
+ }
+
+ } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+ m_speed = QPoint(0, 0);
+ m_state = Stopped;
+
+ if (m_scrollTimer.isActive())
+ m_scrollTimer.stop();
+ }
+ eventConsumed = true;
+ break;
+
+ case ScrollerPrivate::ManualScrolling:
+ if (mouseEvent->type() == QEvent::GraphicsSceneMouseMove &&
+ m_scrollArea->viewport()->boundingRect().contains(mouseEvent->pos()) ) {
+
+ ScrollBar *hscroll = m_scrollArea->horizontalScrollBar();
+ ScrollBar *vscroll = m_scrollArea->verticalScrollBar();
+
+ QPointF d = m_scrollFactor * (mapToScrollArea(QCursor::pos()) - mapToScrollArea(m_cursorPos));
+
+ hscroll->setSliderPosition(hscroll->sliderPosition() - d.x());
+ vscroll->setSliderPosition(vscroll->sliderPosition() - d.y());
+
+ if (m_lastCursorTime.elapsed() > UpdateScrollingInterval) {
+ m_speed = mapToScrollArea(QCursor::pos()) - mapToScrollArea(m_cursorPos);
+ m_lastCursorTime.restart();
+ }
+
+ m_lastFrameTime.restart();
+
+ m_cursorPos = QCursor::pos();
+ } else if (mouseEvent->type() == QEvent::GraphicsSceneMouseRelease) {
+ m_state = AutoScrolling;
+ m_scrollSlowAccum = 0;
+ if (m_scrollTimer.isActive()) {
+ m_scrollTimer.stop();
+ m_scrollTimer.start(UpdateScrollingSmoothInterval);
+ }
+ }
+ eventConsumed = true;
+ break;
+
+ case ScrollerPrivate::AutoScrolling:
+ if (mouseEvent->type() == QEvent::GraphicsSceneMousePress) {
+ stopScrolling();
+ } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+ m_state = Stopped;
+ }
+ eventConsumed = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return eventConsumed;
+}
+
+void ScrollerPrivate::updateScrolling()
+{
+ bool scrollOngoing = false;
+
+ if (!m_scrollArea) {
+ m_scrollTimer.stop();
+ return;
+ }
+
+ if (m_state == ManualScrolling) {
+ scrollOngoing = true;
+ m_speed = mapToScrollArea(QCursor::pos()) - mapToScrollArea(m_cursorPos);
+ m_cursorPos = QCursor::pos();
+ } else if (m_state == AutoScrolling) {
+ scrollOngoing = true;
+
+
+ qreal x = qMax(-MaxScrollingSpeed, qMin(m_speed.x(), MaxScrollingSpeed));
+ qreal y = qMax(-MaxScrollingSpeed, qMin(m_speed.y(), MaxScrollingSpeed));
+
+ int sinceLast = m_lastFrameTime.elapsed();
+ int slowdown = (ScrollStep * sinceLast) + m_scrollSlowAccum;
+ m_scrollSlowAccum = slowdown & 0x3F;
+ slowdown >>= 6;
+
+ if (x > 0)
+ x= qMax(qreal(0.0), x - slowdown);
+ else
+ x = qMin(qreal(0.0), x + slowdown);
+
+ if (y > 0)
+ y = qMax(qreal(0.0), y - slowdown);
+ else
+ y = qMin(qreal(0.0), y + slowdown);
+
+ m_speed = QPoint(x,y);
+
+ if (m_speed != QPoint(0,0)) {
+ QPointF d;
+
+ int xstep = (int(m_speed.x()) * sinceLast)>>6; // >>6 ~= *60 /1000 (==*64 /1024)
+ int ystep = (int(m_speed.y()) * sinceLast)>>6;
+ //qDebug() << sinceLast << "speedy" << speed.y()<<"ystep" << ystep;
+ QPoint step = QPoint(xstep,ystep);
+
+ if (ystep > 0)
+ d = (m_scrollArea->pos() + step);
+ else
+ d = -(m_scrollArea->pos() - step);
+
+ ScrollBar *hscroll = m_scrollArea->horizontalScrollBar();
+ ScrollBar *vscroll = m_scrollArea->verticalScrollBar();
+
+ hscroll->setSliderPosition(hscroll->sliderPosition() - m_scrollFactor * d.x());
+ vscroll->setSliderPosition(vscroll->sliderPosition() - m_scrollFactor * d.y());
+ } else {
+ m_state = Stopped;
+ scrollOngoing = false;
+ }
+ }
+
+ m_lastFrameTime.restart();
+
+ if (!scrollOngoing)
+ m_scrollTimer.stop();
+}
+
+
+Scroller::Scroller(QObject *parent)
+ : QObject(parent), d_ptr(new ScrollerPrivate(this))
+{
+ Q_D(Scroller);
+ connect(&d->m_scrollTimer, SIGNAL(timeout()), this, SLOT(updateScrolling()));
+}
+
+Scroller::~Scroller()
+{
+ delete d_ptr;
+}
+
+void Scroller::setScrollable(AbstractScrollArea *area)
+{
+ Q_D(Scroller);
+
+ if (!area)
+ return;
+
+ d->m_scrollArea = area;
+}
+
+void Scroller::setScrollFactor(qreal scrollFactor)
+{
+ Q_D(Scroller);
+
+ d->m_scrollFactor = scrollFactor;
+}
+
+bool Scroller::eventFilter(QObject *obj, QEvent *event)
+{
+ Q_D(Scroller);
+ return d->eventFilter(obj, event);
+}
+
+void Scroller::stopScrolling()
+{
+ Q_D(Scroller);
+ d->stopScrolling();
+}
+#include "moc_scroller.cpp"
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h
new file mode 100644
index 0000000..d3c9f35
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SCROLLER_H
+#define SCROLLER_H
+
+#include <QObject>
+
+class ScrollerPrivate;
+class AbstractScrollArea;
+
+class Scroller : public QObject
+{
+ Q_OBJECT
+
+public:
+
+ Scroller(QObject *parent = 0);
+ virtual ~Scroller();
+
+public:
+
+ void setScrollable(AbstractScrollArea *area);
+ void setScrollFactor(qreal scrollFactor);
+ void stopScrolling();
+
+private:
+
+ bool eventFilter(QObject *obj, QEvent *ev);
+
+private:
+
+ Q_DECLARE_PRIVATE(Scroller)
+ Q_DISABLE_COPY(Scroller)
+
+ Q_PRIVATE_SLOT(d_ptr, void updateScrolling())
+
+ ScrollerPrivate * const d_ptr;
+};
+
+#endif // SCROLLER_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
new file mode 100644
index 0000000..69c04a0
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SCROLLER_P_H
+#define SCROLLER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QPoint>
+#include <QTimer>
+#include <QTime>
+
+#include "scroller.h"
+
+class AbstractScrollArea;
+
+class ScrollerPrivate
+{
+ Q_DECLARE_PUBLIC(Scroller)
+
+public:
+ enum State {
+ Stopped,
+ Started,
+ ManualScrolling,
+ AutoScrolling
+ };
+
+ ScrollerPrivate(Scroller *scroller);
+ ~ScrollerPrivate();
+ void stopScrolling();
+ bool eventFilter(QObject *obj, QEvent *ev);
+
+ AbstractScrollArea *m_scrollArea;
+ qreal m_scrollFactor;
+ QPoint m_cursorPos;
+ QPointF m_speed;
+ State m_state;
+ QTime m_lastCursorTime;
+ QTime m_lastFrameTime;
+ QTimer m_scrollTimer;
+ int m_scrollSlowAccum;
+
+private Q_SLOTS:
+
+ void updateScrolling();
+
+private:
+
+ Q_DISABLE_COPY(ScrollerPrivate)
+ Scroller * const q_ptr;
+ QPointF mapToScrollArea(const QPoint &point);
+ QWidget *m_eventViewport;
+};
+
+#endif // SCROLLER_P_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp
new file mode 100644
index 0000000..bffedf7
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "settings.h"
+
+
+Settings::Settings()
+ : QObject(),
+ m_scriptName(),
+ m_outputFileName(),
+ m_resultFormat(0),
+ m_size(0,0),
+ m_angle(0),
+ m_listItemCount(200),
+ m_options()
+{
+}
+
+Settings::~Settings()
+{
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h
new file mode 100644
index 0000000..d2c0122
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+#include <QObject>
+#include <QSize>
+#include <QString>
+#include <QFlags>
+
+class Settings : public QObject {
+ Q_OBJECT
+
+public:
+ enum Option {
+ NoOptions = 0x1,
+ UseListItemCache = 0x2,
+ UseOpenGL = 0x4,
+ OutputFps = 0x8,
+ NoResourceUsage = 0x10,
+ ManualTest = 0x20
+ };
+ Q_DECLARE_FLAGS(Options, Option)
+
+ Settings();
+ ~Settings();
+
+ const QString &scriptName() const
+ { return m_scriptName; }
+ void setScriptName(const QString& scriptName)
+ { m_scriptName = scriptName; }
+
+ const QString &outputFileName() const
+ { return m_outputFileName; }
+ void setOutputFileName(const QString& outputFileName)
+ { m_outputFileName = outputFileName; }
+
+ int resultFormat() const
+ { return m_resultFormat; }
+ void setResultFormat(int resultFormat)
+ { m_resultFormat = resultFormat; }
+
+ const QSize& size() const
+ { return m_size; }
+ void setSize(const QSize& size)
+ { m_size = size; }
+
+ int angle() const
+ { return m_angle; }
+ void setAngle(int angle)
+ { m_angle = angle; }
+
+ const Options& options() const
+ { return m_options; }
+ void setOptions(Options options)
+ { m_options = options; }
+
+ int listItemCount()
+ { return m_listItemCount; }
+
+ void setListItemCount(int items)
+ { m_listItemCount = items; }
+
+private:
+
+ QString m_scriptName;
+ QString m_outputFileName;
+ int m_resultFormat;
+ QSize m_size;
+ int m_angle;
+ int m_listItemCount;
+ Options m_options;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(Settings::Options)
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
new file mode 100644
index 0000000..af25628
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
@@ -0,0 +1,164 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QGraphicsLinearLayout>
+#include <QFont>
+#include <QTime>
+
+#include "simplelist.h"
+static const int MinItemWidth = 276;
+
+SimpleList::SimpleList(QGraphicsWidget *parent)
+ : GvbWidget(parent),
+ m_list(new ListWidget(this))
+{
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout();
+ layout->setContentsMargins(0,0,0,0);
+ setContentsMargins(0,0,0,0);
+ setLayout(layout);
+ layout->addItem(m_list);
+ setObjectName("SimpleList");
+}
+
+/*virtual*/
+SimpleList::~SimpleList()
+{
+}
+
+void SimpleList::addItem(ListItem *item)
+{
+ item->setMinimumWidth(MinItemWidth);
+ m_list->addItem(item);
+}
+
+void SimpleList::insertItem(int index, ListItem *item)
+{
+ item->setMinimumWidth(MinItemWidth);
+ m_list->insertItem(index, item);
+}
+
+ListItem* SimpleList::takeItem(int row)
+{
+ return static_cast<ListItem*>(m_list->takeItem(row));
+}
+
+ListItem* SimpleList::itemAt(int row)
+{
+ return static_cast<ListItem*>(m_list->itemAt(row));
+}
+
+int SimpleList::itemCount() const
+{
+ if (m_list)
+ return m_list->itemCount();
+ return 0;
+}
+
+ScrollBar* SimpleList::verticalScrollBar() const
+{
+ if (m_list)
+ return m_list->verticalScrollBar();
+ return 0;
+}
+
+bool SimpleList::listItemCaching() const
+{
+#if (QT_VERSION >= 0x040600)
+ return m_list->listItemCaching();
+#else
+ return false;
+#endif
+}
+
+void SimpleList::setListItemCaching(bool enable)
+{
+#if (QT_VERSION >= 0x040600)
+ m_list->setListItemCaching(enable);
+#else
+ Q_UNUSED(enable)
+#endif
+}
+
+void SimpleList::keyPressEvent(QKeyEvent *event)
+{
+ static QTime keyPressInterval = QTime::currentTime();
+ static qreal step = 0.0;
+ static bool repeat = false;
+ int interval = keyPressInterval.elapsed();
+
+ ScrollBar* sb = verticalScrollBar();
+ qreal currentValue = sb->sliderPosition();
+
+ if(interval < 250 ) {
+ if(!repeat) step = 0.0;
+ step = step + 2.0;
+ if(step > 100) step = 100;
+ repeat = true;
+ }
+ else {
+ step = 1.0;
+ if(itemAt(0))
+ step = itemAt(0)->size().height();
+ repeat = false;
+ }
+
+ if(event->key() == Qt::Key_Up ) { //Up Arrow
+ sb->setSliderPosition(currentValue - step);
+ }
+
+ if(event->key() == Qt::Key_Down ) { //Down Arrow
+ sb->setSliderPosition(currentValue + step);
+ }
+ keyPressInterval.start();
+}
+
+
+void SimpleList::setTwoColumns(const bool twoColumns)
+{
+ m_list->setTwoColumns(twoColumns);
+}
+
+bool SimpleList::twoColumns()
+{
+ return m_list->twoColumns();
+}
+
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h
new file mode 100644
index 0000000..152cce7
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SIMPLELIST_H_
+#define SIMPLELIST_H_
+
+
+#include "gvbwidget.h"
+#include "listitem.h"
+#include "listwidget.h"
+
+class QGraphicsWidget;
+
+class SimpleList : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+ SimpleList(QGraphicsWidget *parent=0);
+ virtual ~SimpleList();
+ void addItem(ListItem *item);
+ void insertItem(int index, ListItem *item);
+ ListItem* takeItem(int row);
+ ListItem* itemAt(int row);
+ int itemCount() const;
+ virtual void keyPressEvent(QKeyEvent *event);
+ bool listItemCaching() const;
+ void setListItemCaching(bool enable);
+
+ void setTwoColumns(const bool twoColumns);
+ bool twoColumns();
+
+public slots:
+ ScrollBar* verticalScrollBar() const;
+
+private:
+ Q_DISABLE_COPY(SimpleList)
+
+ ListWidget *m_list;
+};
+
+#endif /* LISTTEST_H_ */
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp
new file mode 100644
index 0000000..106f435
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp
@@ -0,0 +1,500 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "simplelistview.h"
+#include "scrollbar.h"
+#include "simplelistview.h"
+#include "scrollbar.h"
+#include "listitem.h"
+#if (QT_VERSION >= 0x040600)
+#include "listitemcache.h"
+#endif
+#include "theme.h"
+
+class SimpleListViewPrivate
+{
+ Q_DECLARE_PUBLIC(SimpleListView)
+
+public:
+
+ SimpleListViewPrivate(SimpleListView *button)
+ : m_content(0)
+ , m_layout(0)
+ , m_twoColumns(false)
+ , q_ptr(button)
+#if (QT_VERSION >= 0x040600)
+ , m_listItemCaching(false)
+#endif
+ {
+ Q_Q(SimpleListView);
+
+ m_layout = new QGraphicsGridLayout();
+ m_layout->setContentsMargins(0, 0, 0, 0);
+ m_layout->setSpacing(0);
+ m_layout->setColumnSpacing(0,0);
+ m_layout->setColumnSpacing(1,0);
+ m_layout->setRowSpacing(0,0);
+ m_layout->setRowSpacing(1,0);
+ m_content = new QGraphicsWidget;
+ m_content->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ m_content->setParentItem(q->viewport());
+ m_content->setLayout(m_layout);
+
+ q->horizontalScrollBar()->setSliderSize(0.0);
+
+ QObject::connect(Theme::p(), SIGNAL(themeChanged()), q, SLOT(themeChange()));
+ }
+
+ ~SimpleListViewPrivate()
+ {
+ if (!m_content->parentItem() && !m_content->parent())
+ delete m_content;
+ }
+
+ void resizeContents(QSizeF s)
+ {
+ Q_UNUSED(s);
+ Q_Q(SimpleListView);
+
+ if (!m_content)
+ return;
+
+#if (QT_VERSION >= 0x040600)
+ const bool caching = q->listItemCaching();
+ q->setListItemCaching(false);
+#endif
+ m_content->resize(q->viewport()->size().width(),
+ m_layout->preferredHeight());
+ const bool clip =
+ m_content->size().width() > q->viewport()->size().width()
+ || m_content->size().height() > q->viewport()->size().height();
+
+ q->viewport()->setFlag(
+ QGraphicsItem::ItemClipsChildrenToShape, clip);
+
+#if (QT_VERSION >= 0x040600)
+ q->setListItemCaching(caching);
+#endif
+ }
+
+ void resizeScrollBars()
+ {
+ Q_Q(SimpleListView);
+
+ if (!m_content)
+ return;
+
+ m_content->resize(m_content->size().width(),
+ m_layout->preferredHeight());
+
+ QRectF contentRect = m_content->boundingRect();
+ QRectF listRect = q->boundingRect();
+
+ // List do not have horizontal scroll bar visible.
+ q->horizontalScrollBar()->setSliderSize(0.0);
+
+ if (contentRect.height()-q->boundingRect().height() > 0) {
+ q->verticalScrollBar()->setSliderSize(contentRect.height()-q->boundingRect().height());
+ if (q->verticalScrollBarPolicy() != Qt::ScrollBarAlwaysOff &&
+ !q->verticalScrollBar()->isVisible()) {
+ q->verticalScrollBar()->show();
+ }
+ }
+ else if (q->verticalScrollBarPolicy() == Qt::ScrollBarAsNeeded ||
+ q->verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
+ q->verticalScrollBar()->setSliderSize(0.0);
+ q->verticalScrollBar()->hide();
+ }
+ else {
+ q->verticalScrollBar()->setSliderSize(0.0);
+ }
+
+ qreal pos = 0.0;
+ if ((m_content->boundingRect().height() - q->boundingRect().height()) != 0) {
+ qreal min = qMin(-contentRect.top(), m_content->pos().y());
+ qreal diff = contentRect.height() - listRect.height();
+ pos = qAbs(contentRect.top() + min) / diff;
+ }
+
+ q->verticalScrollBar()->setSliderPosition(pos);
+ }
+
+ void updateListContents()
+ {
+#if (QT_VERSION >= 0x040600)
+ Q_Q(SimpleListView);
+
+ const bool caching = q->listItemCaching();
+ q->setListItemCaching(false);
+#endif
+ const QString defaultIcon = Theme::p()->pixmapPath()+"contact_default_icon.svg";
+ const int itemCount = m_layout->count();
+
+ for (int i=0; i<itemCount; ++i) {
+ ListItem* item = static_cast<ListItem*>(m_layout->itemAt(i));
+
+ // Update default icons
+ const QString filename = item->icon(ListItem::LeftIcon)->fileName();
+ if (filename.contains("contact_default_icon")) {
+ item->icon(ListItem::LeftIcon)->setFileName(defaultIcon);
+ }
+
+ // Update status icons
+ QString statusIcon = item->icon(ListItem::RightIcon)->fileName();
+ const int index = statusIcon.indexOf("contact_status");
+ if (index != -1) {
+ statusIcon.remove(0, index);
+ item->icon(ListItem::RightIcon)->setFileName(Theme::p()->pixmapPath()+statusIcon);
+ }
+
+ // Update fonts
+ item->setFont(Theme::p()->font(Theme::ContactName), ListItem::FirstPos);
+ item->setFont(Theme::p()->font(Theme::ContactNumber), ListItem::SecondPos);
+ item->setFont(Theme::p()->font(Theme::ContactEmail), ListItem::ThirdPos);
+
+ // Update list dividers
+ if (i%2) {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushOdd());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityOdd());
+ }
+ else {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushEven());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityEven());
+ }
+
+ // Update borders
+ item->setBorderPen(Theme::p()->listItemBorderPen());
+ item->setRounding(Theme::p()->listItemRounding());
+
+ // Update icons
+ item->icon(ListItem::LeftIcon)->setRotation(Theme::p()->iconRotation(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setRotation(Theme::p()->iconRotation(ListItem::RightIcon));
+#if (QT_VERSION >= 0x040600)
+ item->icon(ListItem::LeftIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setOpacityEffectEnabled(Theme::p()->isIconOpacityEffectEnabled(ListItem::RightIcon));
+#endif
+ item->icon(ListItem::LeftIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::LeftIcon));
+ item->icon(ListItem::RightIcon)->setSmoothTransformationEnabled(Theme::p()->isIconSmoothTransformationEnabled(ListItem::RightIcon));
+ }
+#if (QT_VERSION >= 0x040600)
+ q->setListItemCaching(caching);
+#endif
+ }
+
+ void updateListItemBackgrounds(int index)
+ {
+#if (QT_VERSION >= 0x040600)
+ Q_Q(SimpleListView);
+
+ const bool caching = q->listItemCaching();
+ q->setListItemCaching(false);
+#endif
+ const int itemCount = m_layout->count();
+
+ for (int i=index; i<itemCount; ++i) {
+ ListItem* item = static_cast<ListItem*>(m_layout->itemAt(i));
+ if (i%2) {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushOdd());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityOdd());
+ }
+ else {
+ item->setBackgroundBrush(Theme::p()->listItemBackgroundBrushEven());
+ item->setBackgroundOpacity(Theme::p()->listItemBackgroundOpacityEven());
+ }
+ }
+
+#if (QT_VERSION >= 0x040600)
+ q->setListItemCaching(caching);
+#endif
+ }
+
+ void setTwoColumns(const bool twoColumns)
+ {
+ if(twoColumns == m_twoColumns)
+ return;
+
+ Q_Q(SimpleListView);
+ m_twoColumns = twoColumns;
+
+#if (QT_VERSION >= 0x040600)
+ bool cache = q->listItemCaching();
+ q->setListItemCaching(false);
+#endif
+ QList<QGraphicsLayoutItem *> moveditems;
+ if(twoColumns) {
+ int half = m_layout->count()/2;
+ for (int i = m_layout->count()-1; i>=half; --i) {
+ QGraphicsLayoutItem *item = m_layout->itemAt(i);
+ m_layout->removeAt(i);
+ moveditems.append(item);
+ }
+ for ( int i = 0; i < moveditems.count(); ++i)
+ m_layout->addItem(moveditems.at(i), i, 1);
+
+ m_layout->setColumnSpacing(0,0);
+ m_layout->setColumnSpacing(1,0);
+ m_layout->setRowSpacing(0,0);
+ m_layout->setRowSpacing(1,0);
+ }
+ else {
+ int count = m_layout->count()/2;
+ for (int i = m_layout->count()-1; i>=0; --i) {
+ if (i >= count)
+ moveditems.append(m_layout->itemAt(i));
+ else
+ moveditems.insert(moveditems.begin(), m_layout->itemAt(i));
+ m_layout->removeAt(i);
+ }
+ for (int i = 0; i<moveditems.count(); ++i) {
+ m_layout->addItem(moveditems.at(i), m_layout->count(), 0);
+ }
+ }
+
+ resizeContents(q->size());
+ resizeScrollBars();
+
+#if (QT_VERSION >= 0x040600)
+ q->setListItemCaching(cache);
+#endif
+ }
+
+ bool twoColumns()
+ {
+ return m_twoColumns;
+ }
+
+ QGraphicsWidget *m_content;
+ QGraphicsGridLayout *m_layout;
+ bool m_twoColumns;
+ SimpleListView *q_ptr;
+#if (QT_VERSION >= 0x040600)
+ bool m_listItemCaching;
+#endif
+};
+
+SimpleListView::SimpleListView(QGraphicsWidget *parent)
+ : AbstractScrollArea(parent)
+ , d_ptr(new SimpleListViewPrivate(this))
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setContentsMargins(0, 0, 0, 0);
+ verticalScrollBar()->hide();
+ horizontalScrollBar()->hide();
+}
+
+SimpleListView::~SimpleListView()
+{
+ Q_D(SimpleListView);
+
+ if (d->m_content) {
+ d->m_content->setParentItem(0);
+ }
+
+ delete d_ptr;
+}
+
+void SimpleListView::addItem(QGraphicsWidget *item)
+{
+ Q_D(SimpleListView);
+
+ Q_ASSERT(item);
+
+ insertItem(d->m_layout->count(), item);
+}
+
+void SimpleListView::insertItem(int index, QGraphicsWidget *item)
+{
+ Q_D(SimpleListView);
+
+ // Grid layout doe not have insert item method.
+ // We need to first remove all items, add new item and
+ // append old items to layout.
+ QList<QGraphicsLayoutItem *> moveditems;
+
+ for (int i = d->m_layout->count()-1; i >= index; --i) {
+ moveditems.append(d->m_layout->itemAt(i));
+ d->m_layout->removeAt(i);
+ }
+ moveditems.append(item);
+
+ for (int i = moveditems.count()-1; i>=0; --i) {
+ d->m_layout->addItem(moveditems.at(i), d->m_layout->count(), 0);
+ }
+
+#if (QT_VERSION >= 0x040600)
+ ListItemCache *cache = new ListItemCache;
+ item->setGraphicsEffect(cache);
+ cache->setEnabled(listItemCaching());
+#endif
+
+ d->resizeScrollBars();
+ d->updateListItemBackgrounds(index);
+}
+
+QGraphicsWidget *SimpleListView::takeItem(int index)
+{
+ Q_D(SimpleListView);
+
+ QGraphicsWidget *item = 0;
+
+ if (index >= 0 && d->m_layout->count() > index) {
+ QList<QGraphicsLayoutItem *> moveditems;
+ for (int i = d->m_layout->count()-1; i >=0; --i) {
+ if (index != i)
+ moveditems.insert(moveditems.begin(), d->m_layout->itemAt(i));
+ else {
+ item = static_cast<QGraphicsWidget*>(d->m_layout->itemAt(index));
+ item->setGraphicsEffect(0);
+ }
+
+ d->m_layout->removeAt(i);
+ }
+
+ for (int i = 0; i < moveditems.count(); ++i)
+ d->m_layout->addItem(moveditems.at(i), d->m_layout->count(), 0);
+ }
+ d->resizeScrollBars();
+ return item;
+}
+
+QGraphicsWidget *SimpleListView::itemAt(int row)
+{
+ Q_D(SimpleListView);
+
+ QGraphicsWidget *item = 0;
+
+ if (row >= 0 && d->m_layout->count() > row) {
+ item = static_cast<QGraphicsWidget*>(d->m_layout->itemAt(row));
+ }
+
+ return item;
+}
+
+int SimpleListView::itemCount()
+{
+ Q_D(SimpleListView);
+ return d->m_layout->count();
+}
+
+#if (QT_VERSION >= 0x040600)
+bool SimpleListView::listItemCaching() const
+{
+ Q_D(const SimpleListView);
+ return d->m_listItemCaching;
+}
+
+void SimpleListView::setListItemCaching(bool enabled)
+{
+ Q_D(SimpleListView);
+
+ if (d->m_listItemCaching == enabled)
+ return;
+
+ d->m_listItemCaching = enabled;
+
+ for (int i = 0; i < d->m_layout->count(); ++i) {
+ ListItem *item = static_cast<ListItem*>(d->m_layout->itemAt(i));
+ ListItemCache *cache = static_cast<ListItemCache *>(
+ item->graphicsEffect());
+ cache->setEnabled(enabled);
+ }
+}
+#endif
+
+void SimpleListView::scrollContentsBy(qreal dx, qreal dy)
+{
+ Q_D(SimpleListView);
+ Q_UNUSED(dx)
+ QRectF contentRect = d->m_content->boundingRect();
+ QRectF viewportRect = viewport()->boundingRect();
+ QPointF contentPos = d->m_content->pos();
+
+ qreal newy = contentPos.y() - dy;
+ qreal miny = qMin(qreal(0.0), -(contentRect.height() - viewportRect.height()));
+
+ if (newy < miny)
+ newy = miny;
+ else if (newy > 0)
+ newy = 0.0;
+
+ d->m_content->setPos(contentPos.x(), newy);
+}
+
+void SimpleListView::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ Q_D(SimpleListView);
+
+ AbstractScrollArea::resizeEvent(event);
+ d->resizeContents(event->newSize());
+ d->resizeScrollBars();
+}
+
+QSizeF SimpleListView::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
+{
+ Q_D(const SimpleListView);
+
+ if (which == Qt::PreferredSize)
+ return d->m_content->size();
+
+ return AbstractScrollArea::sizeHint(which, constraint);
+}
+
+void SimpleListView::themeChange()
+{
+ Q_D(SimpleListView);
+
+ d->updateListContents();
+ d->resizeScrollBars();
+}
+
+void SimpleListView::setTwoColumns(const bool twoColumns)
+{
+ Q_D(SimpleListView);
+ d->setTwoColumns(twoColumns);
+}
+
+bool SimpleListView::twoColumns()
+{
+ Q_D(SimpleListView);
+ return d->twoColumns();
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h
new file mode 100644
index 0000000..25a0546
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SIMPLELISTVIEW_H
+#define SIMPLELISTVIEW_H
+
+#include "scrollbar.h"
+#include "abstractscrollarea.h"
+
+class SimpleListViewPrivate;
+
+class SimpleListView : public AbstractScrollArea
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(SimpleListView)
+
+public:
+
+ SimpleListView(QGraphicsWidget *parent = 0);
+ virtual ~SimpleListView();
+
+public:
+
+ void addItem(QGraphicsWidget *item);
+ void insertItem(int index, QGraphicsWidget *item);
+ QGraphicsWidget* takeItem(int row);
+ QGraphicsWidget* itemAt(int row);
+ int itemCount();
+ void updateListContents();
+
+ void setTwoColumns(const bool twoColumns);
+ bool twoColumns();
+
+public slots:
+
+ void themeChange();
+#if (QT_VERSION >= 0x040600)
+ bool listItemCaching() const;
+ void setListItemCaching(bool enabled);
+#endif
+
+protected:
+
+ virtual void scrollContentsBy(qreal dx, qreal dy);
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF & constraint) const;
+
+private:
+
+ SimpleListViewPrivate *d_ptr;
+};
+
+#endif
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp
new file mode 100644
index 0000000..4ed8608
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QPainter>
+#include <QPixmapCache>
+#include <QSvgRenderer>
+
+#include "theme.h"
+
+Q_DECLARE_METATYPE(Theme::Themes*)
+
+Theme::Theme(QObject *parent)
+ : QObject(parent)
+ , m_currentTheme()
+ , m_availableThemes()
+ , m_fonts()
+ , m_pixmapPath()
+ , m_listItemBackgroundBrushEven()
+ , m_listItemBackgroundOpacityEven()
+ , m_listItemBackgroundBrushOdd()
+ , m_listItemBackgroundOpacityOdd()
+ , m_listItemBorderPen(QPen())
+ , m_listItemRounding()
+#if (QT_VERSION >= 0x040600)
+ , m_iconOpacityEffectEnabled()
+#endif
+ , m_iconRotation()
+ , m_iconSmoothTransformation()
+{
+ m_availableThemes << "Blue" << "Lime";
+
+ // Set blue theme as a default theme without emiting themeChanged() signal
+ setBlueTheme();
+}
+
+Theme::~Theme()
+{
+}
+
+Theme* Theme::p()
+{
+ static Theme t;
+ return &t;
+}
+
+void Theme::setTheme(const QString theme)
+{
+ if (theme.compare("blue", Qt::CaseInsensitive) == 0)
+ {
+ setTheme(Theme::Blue);
+ }
+ else if (theme.compare("lime", Qt::CaseInsensitive) == 0)
+ {
+ setTheme(Theme::Lime);
+ }
+ else
+ {
+ qDebug() << "Unknown theme";
+ }
+}
+
+void Theme::setTheme(const Themes theme)
+{
+ if (m_currentTheme == theme)
+ return;
+
+ switch (theme)
+ {
+ case Theme::Blue:
+ setBlueTheme();
+ emit themeChanged();
+ break;
+
+ case Theme::Lime:
+ setLimeTheme();
+ emit themeChanged();
+ break;
+ }
+}
+
+void Theme::setBlueTheme()
+{
+ m_currentTheme = Theme::Blue;
+
+ m_fonts[ContactName].setFamily("Arial");
+ m_fonts[ContactName].setPixelSize(16);
+ m_fonts[ContactName].setStyle(QFont::StyleNormal);
+ m_fonts[ContactName].setWeight(QFont::Normal);
+
+ m_fonts[ContactNumber].setFamily("Arial");
+ m_fonts[ContactNumber].setPixelSize(14);
+ m_fonts[ContactNumber].setStyle(QFont::StyleNormal);
+
+ m_fonts[ContactEmail].setFamily("Arial");
+ m_fonts[ContactEmail].setPixelSize(14);
+ m_fonts[ContactEmail].setStyle(QFont::StyleNormal);
+
+ m_fonts[TitleBar].setFamily("Arial");
+ m_fonts[TitleBar].setPixelSize(36);
+ m_fonts[TitleBar].setStyle(QFont::StyleNormal);
+
+ m_fonts[StatusBar].setFamily("Arial");
+ m_fonts[StatusBar].setPixelSize(16);
+ m_fonts[StatusBar].setStyle(QFont::StyleNormal);
+
+ m_fonts[MenuItem].setFamily("Arial");
+ m_fonts[MenuItem].setPixelSize(14);
+ m_fonts[MenuItem].setStyle(QFont::StyleNormal);
+
+ m_pixmapPath = ":/themes/blue/";
+
+ m_listItemBackgroundBrushEven = QBrush(Qt::NoBrush);
+ m_listItemBackgroundOpacityEven = 1.0;
+ m_listItemBackgroundBrushOdd = QBrush(QColor(44,214,250), Qt::SolidPattern);
+ m_listItemBackgroundOpacityOdd = 1.0;
+
+ m_listItemBorderPen = QPen(Qt::NoPen);
+ m_listItemRounding = QSize(0.0, 0.0);
+
+#if (QT_VERSION >= 0x040600)
+ m_iconOpacityEffectEnabled[ListItem::LeftIcon] = false;
+ m_iconOpacityEffectEnabled[ListItem::RightIcon] = false;
+#endif
+ m_iconRotation[ListItem::LeftIcon] = 0.0;
+ m_iconRotation[ListItem::RightIcon] = 0.0;
+
+ m_iconSmoothTransformation[ListItem::LeftIcon] = false;
+ m_iconSmoothTransformation[ListItem::RightIcon] = false;
+}
+
+void Theme::setLimeTheme()
+{
+ m_currentTheme = Theme::Lime;
+
+ m_fonts[ContactName].setFamily("Arial");
+ m_fonts[ContactName].setPixelSize(16);
+ m_fonts[ContactName].setStyle(QFont::StyleItalic);
+ m_fonts[ContactName].setWeight(QFont::Bold);
+
+ m_fonts[ContactNumber].setFamily("Arial");
+ m_fonts[ContactNumber].setPixelSize(14);
+ m_fonts[ContactNumber].setStyle(QFont::StyleItalic);
+
+ m_fonts[ContactEmail].setFamily("Arial");
+ m_fonts[ContactEmail].setPixelSize(14);
+ m_fonts[ContactEmail].setStyle(QFont::StyleItalic);
+
+ m_fonts[TitleBar].setFamily("Arial");
+ m_fonts[TitleBar].setPixelSize(36);
+ m_fonts[TitleBar].setStyle(QFont::StyleItalic);
+
+ m_fonts[StatusBar].setFamily("Arial");
+ m_fonts[StatusBar].setPixelSize(16);
+ m_fonts[StatusBar].setStyle(QFont::StyleItalic);
+
+ m_fonts[MenuItem].setFamily("Arial");
+ m_fonts[MenuItem].setPixelSize(14);
+ m_fonts[MenuItem].setStyle(QFont::StyleItalic);
+
+ m_pixmapPath = ":/themes/lime/";
+
+ m_listItemBackgroundBrushEven = QBrush(QPixmap(":/avatars/avatar_014.png"));
+ m_listItemBackgroundOpacityEven = 0.05;
+
+ m_listItemBackgroundBrushOdd = QBrush(QPixmap(":/avatars/avatar_012.png"));
+ m_listItemBackgroundOpacityOdd = 0.15;
+
+ m_listItemBorderPen = QPen(QColor(0,0,0,55), 3, Qt::SolidLine);
+ m_listItemRounding = QSize(12.0, 12.0);
+
+#if (QT_VERSION >= 0x040600)
+ m_iconOpacityEffectEnabled[ListItem::LeftIcon] = true;
+ m_iconOpacityEffectEnabled[ListItem::RightIcon] = false;
+#endif
+ m_iconRotation[ListItem::LeftIcon] = -4.0;
+ m_iconRotation[ListItem::RightIcon] = 0.0;
+
+ m_iconSmoothTransformation[ListItem::LeftIcon] = true;
+ m_iconSmoothTransformation[ListItem::RightIcon] = false;
+}
+
+QPixmap Theme::pixmap(const QString filename, QSize size)
+{
+ if (filename.endsWith(".svg", Qt::CaseInsensitive))
+ {
+ QSvgRenderer doc(m_pixmapPath+filename);
+ if (size == QSize(0,0))
+ size = doc.defaultSize();
+ QPixmap pix(size.width(),size.height());
+ pix.fill(Qt::transparent);
+ QPainter painter(&pix);
+ painter.setViewport(0, 0, size.width(), size.height());
+ doc.render(&painter);
+ return pix;
+ }
+ else
+ {
+ QPixmap pix(m_pixmapPath+filename);
+ return pix.scaled(size);
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h
new file mode 100644
index 0000000..51db185
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef THEME_H
+#define THEME_H
+
+#include <QPen>
+#include <QPainter>
+
+#include "gvbwidget.h"
+#include "listitem.h"
+
+class Theme : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum Themes
+ {
+ Blue = 0,
+ Lime = 1,
+ };
+
+ enum Fonts
+ {
+ ContactName,
+ ContactNumber,
+ ContactEmail,
+ TitleBar,
+ StatusBar,
+ MenuItem,
+ };
+
+ virtual ~Theme();
+
+ static Theme* p();
+
+ void setTheme(const QString theme);
+ void setTheme(const Themes theme);
+
+ Themes theme() const { return m_currentTheme; }
+ QString currentThemeName() { return m_availableThemes.at(m_currentTheme); }
+ QStringList themes() const { return m_availableThemes; }
+ int themesCount() const { return m_availableThemes.count(); }
+
+ QPixmap pixmap(const QString filename = "", QSize size = QSize(0,0));
+ QFont font(Fonts type) const { return m_fonts[type]; }
+ QString pixmapPath() const { return m_pixmapPath; }
+
+ QBrush listItemBackgroundBrushEven() const { return m_listItemBackgroundBrushEven; }
+ QBrush listItemBackgroundBrushOdd() const { return m_listItemBackgroundBrushOdd; }
+ qreal listItemBackgroundOpacityEven() const { return m_listItemBackgroundOpacityEven; }
+ qreal listItemBackgroundOpacityOdd() const { return m_listItemBackgroundOpacityOdd; }
+
+ QPen listItemBorderPen() const { return m_listItemBorderPen; }
+ QSize listItemRounding() const { return m_listItemRounding; }
+
+#if (QT_VERSION >= 0x040600)
+ bool isIconOpacityEffectEnabled(const ListItem::IconItemPos iconPos) const { return m_iconOpacityEffectEnabled[iconPos]; }
+#endif
+ qreal iconRotation(const ListItem::IconItemPos iconPos) const { return m_iconRotation[iconPos]; }
+ bool isIconSmoothTransformationEnabled(const ListItem::IconItemPos iconPos) const { return m_iconSmoothTransformation[iconPos]; }
+
+signals:
+ void themeChanged();
+
+private:
+ Theme(QObject *parent = 0);
+
+ void setBlueTheme();
+ void setLimeTheme();
+
+private:
+ Q_DISABLE_COPY(Theme)
+
+ Themes m_currentTheme;
+ QStringList m_availableThemes;
+ QHash<Fonts, QFont> m_fonts;
+ QString m_pixmapPath;
+
+ QBrush m_listItemBackgroundBrushEven;
+ qreal m_listItemBackgroundOpacityEven;
+ QBrush m_listItemBackgroundBrushOdd;
+ qreal m_listItemBackgroundOpacityOdd;
+
+ QPen m_listItemBorderPen;
+ QSize m_listItemRounding;
+
+#if (QT_VERSION >= 0x040600)
+ QHash<ListItem::IconItemPos, bool> m_iconOpacityEffectEnabled;
+#endif
+ QHash<ListItem::IconItemPos, qreal> m_iconRotation;
+ QHash<ListItem::IconItemPos, bool> m_iconSmoothTransformation;
+};
+
+#endif // THEME_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp
new file mode 100644
index 0000000..75bc320
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "themeevent.h"
+
+ThemeEvent::ThemeEvent( QString newTheme, Type type) : QEvent(type),
+ m_theme(newTheme)
+{
+
+}
+
+ThemeEvent::~ThemeEvent()
+{
+
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h
new file mode 100644
index 0000000..365b1fd
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __THEMEEVENT_H__
+#define __THEMEEVENT_H__
+
+#include <QEvent>
+#include <QString>
+
+static QEvent::Type ThemeEventType = (QEvent::Type) 1010;
+
+class ThemeEvent : public QEvent
+{
+public:
+ ThemeEvent(QString newTheme, QEvent::Type type = ThemeEventType );
+ ~ThemeEvent();
+
+public:
+ inline QString getTheme() { return m_theme; }
+
+private:
+ QString m_theme;
+};
+
+
+#endif /* __THEMEEVENT_H__ */
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp
new file mode 100644
index 0000000..68ffcd5
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp
@@ -0,0 +1,359 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGraphicsView>
+#include <QStyleOptionGraphicsItem>
+#include <QGraphicsSceneResizeEvent>
+#include <QPixmap>
+#include <QFont>
+
+#include "themeevent.h"
+#include "theme.h"
+#include "topbar.h"
+#include "mainview.h"
+
+TopBar::TopBar(QGraphicsView* mainView, QGraphicsWidget* parent) :
+ GvbWidget(parent), m_mainView(mainView), m_isLimeTheme(false),
+ m_orientation(TopBar::None), m_topBarPixmap(), m_sizesBlue(), m_sizesLime()
+{
+ setDefaultSizes();
+
+ m_titleFont = Theme::p()->font(Theme::TitleBar);
+ m_statusFont = Theme::p()->font(Theme::StatusBar);
+
+ connect(Theme::p(), SIGNAL(themeChanged()), this, SLOT(themeChange()));
+}
+
+TopBar::~TopBar()
+{
+}
+
+void TopBar::resizeEvent(QGraphicsSceneResizeEvent* /*event*/)
+{
+ //Check orientation
+ QString topbarName;
+ QSize mainViewSize = m_mainView->size();
+ int rotationAngle = static_cast<MainView*>(m_mainView)->rotationAngle();
+ if(rotationAngle == 90 || rotationAngle == 270 ) {
+ int wd = mainViewSize.width();
+ int ht = mainViewSize.height();
+ mainViewSize.setWidth(ht);
+ mainViewSize.setHeight(wd);
+ }
+ bool m_orientationChanged = false;
+ if(mainViewSize.height() >= mainViewSize.width()) {
+ if(m_orientation == TopBar::Landscape)
+ m_orientationChanged = true;
+ m_orientation = TopBar::Portrait;
+ topbarName = "topbar.svg";
+ }
+ else {
+ if(m_orientation == TopBar::Portrait)
+ m_orientationChanged = true;
+ m_orientation = TopBar::Landscape;
+ topbarName = "topbar_horisontal.svg";
+ }
+
+ //Calculate new size, resize by height, don't make it wider than the screen
+ QHash<QString, QSize>sizes = (Theme::p()->theme() == Theme::Blue) ?
+ m_sizesBlue : m_sizesLime;
+
+ //Get current size for topbarpixmap
+ QSize currentSize = !m_topBarPixmap.isNull() && !m_orientationChanged ?
+ m_topBarPixmap.size() : sizes[topbarName];
+ QSize newSize = !m_orientationChanged ? QSize(currentSize) : sizes[topbarName];
+
+ //Scale according to aspect ratio
+ newSize.scale(size().toSize(), Qt::KeepAspectRatio);
+
+ //fix width to window widht if previous scaling produced too narrow image
+ if(newSize.width() < size().width()) {
+ newSize.scale(size().toSize(), Qt::KeepAspectRatioByExpanding);
+ }
+
+ //Calculate scaling factor for rest of the graphics scaling
+ qreal scaleFactor = (newSize.width() *1.0) / (currentSize.width() * 1.0);
+
+ //Scale graphics, if the scalefactor applies
+ //This is really heavy since the SVG graphics are read again from the resource
+ if(scaleFactor != 1 || m_topBarPixmap.isNull() ) {
+ m_topBarPixmap = Theme::p()->pixmap(topbarName, newSize );
+ m_topBarUserIcon = Theme::p()->pixmap("user_default_icon.svg",
+ !m_topBarUserIcon.isNull() && !m_orientationChanged ? m_topBarUserIcon.size()* scaleFactor : sizes["user_default_icon.svg"] * scaleFactor);
+
+ m_topBarUserStatus = Theme::p()->pixmap("user_status_online.svg",
+ !m_topBarUserStatus.isNull() && !m_orientationChanged ? m_topBarUserStatus.size() * scaleFactor : sizes["user_status_online.svg"] * scaleFactor);
+
+ m_topBarStatusBarLeft = Theme::p()->pixmap("status_field_left.svg",
+ !m_topBarStatusBarLeft.isNull() && !m_orientationChanged ? m_topBarStatusBarLeft.size()* scaleFactor : sizes["status_field_left.svg"] * scaleFactor);
+
+ m_topBarStatusBarRight = Theme::p()->pixmap("status_field_right.svg",
+ !m_topBarStatusBarRight.isNull() && !m_orientationChanged ? m_topBarStatusBarRight.size()* scaleFactor : sizes["status_field_right.svg"] * scaleFactor);
+
+ m_topBarStatusBarMiddle = Theme::p()->pixmap("status_field_middle.svg",
+ !m_topBarStatusBarMiddle.isNull() && !m_orientationChanged ? m_topBarStatusBarMiddle.size() * scaleFactor : QSize(185, sizes["status_field_middle.svg"].height()) * scaleFactor);
+
+ //Update the sizeHint to match the size of the scaled m_topBarPixmap
+ updateGeometry();
+
+ //Point Update - Positions relative to the Top Bar "Backgroud" size.
+ //TODO: consider some layout instead of calculating relative locations
+ QSize topBarPixmapSize = m_topBarPixmap.size();
+ QSize topBarUserIconSize = m_topBarUserIcon.size();
+ QSize topBarUserStatusSize = m_topBarUserStatus.size();
+ QSize topBarStatusBarLeftSize = m_topBarStatusBarLeft.size();
+ QSize topBarStatusBarMiddleSize = m_topBarStatusBarMiddle.size();
+
+ //Location for Title text 5% width, 35% heigth of the background pixmap
+ m_topBarTitlePoint = QPoint(topBarPixmapSize.width()* 0.05,
+ topBarPixmapSize.height() * 0.35);
+
+ //User Icon location
+ //Placing 70% of the width and 10% of the height of the top bar background
+ m_topBarUserIconPoint = QPoint((topBarPixmapSize.width() * 0.7), (topBarPixmapSize.height() * 0.1));
+
+ //If Blue theme is in use - position user status icon on the right side of the user icon
+ if(!m_isLimeTheme) {
+ //Place the status icon on top of the right edge of the user icon, lower it by 35% of the height of the user icon
+ m_topBarUserStatusPoint = QPoint( ( (m_topBarUserIconPoint.x()+topBarUserIconSize.width() ) -
+ ( topBarUserStatusSize.width()/2 )),
+ (m_topBarUserIconPoint.y() + (topBarUserIconSize.height() * 0.35 )));
+ }
+ //If Lime theme is in use - position user status icon on the left side of the user icon
+ else {
+ //Place the status icon on top of the left side of the user icon, lower it by 50% of the height of the user icon
+ //and move left by 5% of the icon
+ m_topBarUserStatusPoint = QPoint( m_topBarUserIconPoint.x() + ( topBarUserIconSize.width() * 0.05),
+ (m_topBarUserIconPoint.y() + (topBarUserIconSize.height() * 0.5 )));
+ }
+
+ //Status bar
+ //Placing the left side of the status bar 5% of the width, 50% of the height of the top bar background
+ //Set the text baseline 80% of the height of the status bar
+ m_topBarStatusBarLeftPoint = QPoint( (topBarPixmapSize.width()* 0.05),
+ (topBarPixmapSize.height() * 0.5));
+ m_topBarStatusBarMiddlePoint = QPoint( (m_topBarStatusBarLeftPoint.x() + topBarStatusBarLeftSize.width()),
+ (m_topBarStatusBarLeftPoint.y()));
+ m_topBarStatusBarRightPoint = QPoint( (m_topBarStatusBarMiddlePoint.x() + topBarStatusBarMiddleSize.width()),
+ (m_topBarStatusBarMiddlePoint.y() ) );
+ m_topBarStatusBarTextPoint = QPoint(m_topBarStatusBarMiddlePoint.x(),
+ m_topBarStatusBarMiddlePoint.y() + (topBarStatusBarMiddleSize.height()*0.8) );
+ } //if scalefactor
+}
+
+void TopBar::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*widget*/ )
+{
+ //Topbar background
+ painter->drawPixmap(option->exposedRect, m_topBarPixmap, option->exposedRect);
+
+ //User Icon
+ painter->drawPixmap(m_topBarUserIconPoint, m_topBarUserIcon);
+
+ //User Status
+ painter->drawPixmap(m_topBarUserStatusPoint, m_topBarUserStatus);
+
+ //Status bar
+ painter->drawPixmap(m_topBarStatusBarLeftPoint, m_topBarStatusBarLeft);
+ painter->drawPixmap(m_topBarStatusBarMiddlePoint, m_topBarStatusBarMiddle);
+ painter->drawPixmap(m_topBarStatusBarRightPoint, m_topBarStatusBarRight);
+
+ //Title text
+ painter->save();
+ painter->setFont(m_titleFont);
+ painter->setOpacity(0.7);
+ painter->setPen(Qt::white);
+ painter->drawText(m_topBarTitlePoint, QString("Contacts") );
+ //Status text
+ painter->setFont(m_statusFont);
+ painter->setOpacity(1.0);
+ painter->drawText(m_topBarStatusBarTextPoint, QString("My Status (fixed)") );
+ painter->restore();
+}
+
+QRectF TopBar::boundingRect() const
+{
+ //It's possible that m_topBarPixmap is not allocated yet,
+ //in this case default size is used for setting boundingRect
+ QHash<QString, QSize>sizes = (Theme::p()->theme() == Theme::Blue) ?
+ m_sizesBlue : m_sizesLime;
+
+ if(!m_topBarPixmap.isNull())
+ return QRectF(0, 0, m_topBarPixmap.size().width(), m_topBarPixmap.size().height());
+ else
+ return QRectF(0, 0, sizes["topbar.svg"].width(), sizes["topbar.svg"].height());
+}
+
+void TopBar::themeChange()
+{
+ m_titleFont = Theme::p()->font(Theme::TitleBar);
+ m_statusFont = Theme::p()->font(Theme::StatusBar);
+
+ //Calculate the scaling factor
+ QHash<QString, QSize>sizes = (Theme::p()->theme() == Theme::Blue) ?
+ m_sizesBlue : m_sizesLime;
+
+ QString topbarString= m_orientation == TopBar::Portrait ?
+ "topbar.svg" : "topbar_horisontal.svg";
+
+ QSize topBarSize = sizes[topbarString];
+ QSize newSize = QSize(topBarSize);
+
+ //Scale according to aspect ratio
+ newSize.scale(size().toSize(), Qt::KeepAspectRatio);
+
+ //fix width to window widht if previous scaling produced too narrow image
+ if(newSize.width() < size().width()) {
+ newSize.scale(size().toSize(), Qt::KeepAspectRatioByExpanding);
+ }
+
+ //Calculate scaling factor for rest of the graphics scaling
+ qreal scaleFactor = (newSize.width() *1.0) / (topBarSize.width() * 1.0);
+
+ //Background
+ m_topBarPixmap = Theme::p()->pixmap(topbarString, sizes[topbarString] * scaleFactor);
+
+ //User Icon
+ m_topBarUserIcon = Theme::p()->pixmap("user_default_icon.svg", sizes["user_default_icon.svg"] * scaleFactor);
+
+ //User Status
+ m_topBarUserStatus = Theme::p()->pixmap("user_status_online.svg", sizes["user_status_online.svg"] * scaleFactor);
+
+ //Status Bar
+ m_topBarStatusBarLeft = Theme::p()->pixmap("status_field_left.svg", sizes["status_field_left.svg"] * scaleFactor);
+ m_topBarStatusBarRight = Theme::p()->pixmap("status_field_right.svg", sizes["status_field_right.svg"] * scaleFactor);
+ m_topBarStatusBarMiddle = Theme::p()->pixmap("status_field_middle.svg",
+ QSize(185, sizes["status_field_middle.svg"].height())* scaleFactor);
+
+ //Update Drawing points for Top Bar elements, points are relative to the top bar background size
+ QSize topBarPixmapSize = m_topBarPixmap.size();
+ QSize topBarUserIconSize = m_topBarUserIcon.size();
+ QSize topBarUserStatusSize = m_topBarUserStatus.size();
+ QSize topBarStatusBarLeftSize = m_topBarStatusBarLeft.size();
+ QSize topBarStatusBarMiddleSize = m_topBarStatusBarMiddle.size();
+
+ //Theme Check
+ (Theme::p()->theme() == Theme::Lime) ? m_isLimeTheme = true : m_isLimeTheme = false;
+
+ //User Icon location
+ //Placing 70% of the width and 10% of the height of the top bar background
+ m_topBarUserIconPoint = QPoint((0.7*topBarPixmapSize.width()), (0.1*topBarPixmapSize.height()));
+
+ //If Blue theme is in use - position user status icon on the right side of the user icon
+ if(!m_isLimeTheme) {
+ //Place the status icon on top of the right edge of the user icon, lower it by 35% of the height of the user icon
+ m_topBarUserStatusPoint = QPoint( ( (m_topBarUserIconPoint.x()+topBarUserIconSize.width() ) - ( topBarUserStatusSize.width()/2 )),
+ (m_topBarUserIconPoint.y() + (topBarUserIconSize.height() * 0.35 )));
+ }
+ //If Lime theme is in use - position user status icon on the left side of the user icon
+ else {
+ //Place the status icon on top of the left side of the user icon, lower it by 50% of the height of the user icon
+ //and move left by 5% of the icon
+ m_topBarUserStatusPoint = QPoint( m_topBarUserIconPoint.x() + ( topBarUserIconSize.width() * 0.05),
+ (m_topBarUserIconPoint.y() + (topBarUserIconSize.height() * 0.5 )));
+ }
+
+ //Status bar
+ //Placing the left side of the status bar 5% of the width, 50% of the height of the top bar background
+ //Set the text baseline 80% of the height of the status bar
+ m_topBarStatusBarLeftPoint = QPoint( (topBarPixmapSize.width()* 0.05),
+ (topBarPixmapSize.height() * 0.5));
+ m_topBarStatusBarMiddlePoint = QPoint( (m_topBarStatusBarLeftPoint.x() + topBarStatusBarLeftSize.width()),
+ (m_topBarStatusBarLeftPoint.y()));
+ m_topBarStatusBarRightPoint = QPoint( (m_topBarStatusBarMiddlePoint.x() + topBarStatusBarMiddleSize.width()),
+ (m_topBarStatusBarMiddlePoint.y() ) );
+ m_topBarStatusBarTextPoint = QPoint(m_topBarStatusBarMiddlePoint.x(),
+ m_topBarStatusBarMiddlePoint.y() + (topBarStatusBarMiddleSize.height()*0.8) );
+
+ update();
+}
+
+QSizeF TopBar::sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint) const
+{
+ //It's possible that m_topBarPixmap is not allocated yet,
+ //in this case default size is used for setting size hint
+ QHash<QString, QSize>sizes = (Theme::p()->theme() == Theme::Blue) ?
+ m_sizesBlue : m_sizesLime;
+
+ int height = !m_topBarPixmap.isNull() ?
+ m_topBarPixmap.height() : sizes["topbar.svg"].height();
+
+ switch (which)
+ {
+ case Qt::MinimumSize:
+ return QSizeF(-1, height);
+
+ case Qt::MaximumSize:
+ return QSizeF(-1, height);
+
+ default:
+ return QGraphicsWidget::sizeHint(which, constraint);
+ }
+}
+
+void TopBar::setDefaultSizes()
+{
+ m_sizesBlue["topbar.svg"] = QSize(356,96);
+ m_sizesBlue["topbar_horisontal.svg"] = QSize(636,96);
+ m_sizesBlue["user_default_icon.svg"] = QSize(68,68);
+ m_sizesBlue["user_status_online.svg"] = QSize(38,38);
+ m_sizesBlue["status_field_left.svg"] = QSize(14,24);
+ m_sizesBlue["status_field_right.svg"] = QSize(10,24);
+ m_sizesBlue["status_field_middle.svg"] = QSize(14,24);
+
+ m_sizesLime["topbar.svg"] = QSize(356,96);
+ m_sizesLime["topbar_horisontal.svg"] = QSize(636,96);
+ m_sizesLime["user_default_icon.svg"] = QSize(84,68);
+ m_sizesLime["user_status_online.svg"] = QSize(24,24);
+ m_sizesLime["status_field_left.svg"] = QSize(14,24);
+ m_sizesLime["status_field_right.svg"] = QSize(10,24);
+ m_sizesLime["status_field_middle.svg"] = QSize(14,24);
+}
+
+void TopBar::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ QRect rect = m_topBarStatusBarMiddle.rect();
+ rect.moveTopLeft(m_topBarStatusBarMiddlePoint);
+ QPointF scenePoint = event->scenePos();
+ if(rect.contains(scenePoint.toPoint())) {
+ emit clicked();
+ }
+}
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h
new file mode 100644
index 0000000..e2722ed
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __TOPBAR_H__
+#define __TOPBAR_H__
+
+#include <QObject>
+#include <QHash>
+
+#include "gvbwidget.h"
+
+class QPixmap;
+class QPoint;
+class QGraphicsView;
+class QFont;
+
+class TopBar : public GvbWidget
+{
+ Q_OBJECT
+
+public:
+ enum Orientation
+ {
+ Portrait,
+ Landscape,
+ None
+ };
+
+public:
+ TopBar(QGraphicsView* mainView, QGraphicsWidget* parent);
+ ~TopBar();
+
+public:
+ void paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0 );
+ QRectF boundingRect() const;
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+ inline QPoint getStatusBarLocation() { return m_topBarStatusBarMiddlePoint +
+ m_topBarStatusBarMiddle.rect().bottomLeft(); }
+
+public slots:
+ void themeChange();
+
+protected:
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+
+signals:
+ void clicked(bool checked = false);
+
+private:
+ QSizeF sizeHint(Qt::SizeHint which,
+ const QSizeF &constraint = QSizeF()) const;
+ void setDefaultSizes();
+
+
+private:
+ Q_DISABLE_COPY(TopBar)
+
+ QGraphicsView* m_mainView;
+ bool m_isLimeTheme;
+ Orientation m_orientation;
+
+ //Fonts
+ QFont m_titleFont;
+ QFont m_statusFont;
+
+ //Pixmaps
+ QPixmap m_topBarPixmap;
+ QPixmap m_topBarUserIcon;
+ QPixmap m_topBarUserStatus;
+ QPixmap m_topBarStatusBarLeft;
+ QPixmap m_topBarStatusBarRight;
+ QPixmap m_topBarStatusBarMiddle;
+
+ //Drawing points
+ QPoint m_topBarUserIconPoint;
+ QPoint m_topBarUserStatusPoint;
+ QPoint m_topBarStatusBarLeftPoint;
+ QPoint m_topBarStatusBarRightPoint;
+ QPoint m_topBarStatusBarMiddlePoint;
+ QPoint m_topBarStatusBarTextPoint;
+ QPoint m_topBarTitlePoint;
+
+ //Sizes
+ QHash<QString, QSize> m_sizesBlue;
+ QHash<QString, QSize> m_sizesLime;
+};
+
+#endif // __TOPBAR_H__
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp
new file mode 100644
index 0000000..2f113ee
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp
@@ -0,0 +1,304 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "webview.h"
+#include "webview_p.h"
+#include <QtGui>
+
+static const int MotionEndWaitTime = 2000;
+static const int TileSideLength = 128;
+
+WebViewPrivate::WebViewPrivate(WebView *w)
+ : q(w)
+ , cache(0)
+{
+ web = new QGraphicsWebView;
+
+ web->setParentItem(q->viewport());
+
+ web->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ web->page()->mainFrame()->setScrollBarPolicy(
+ Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+ web->page()->mainFrame()->setScrollBarPolicy(
+ Qt::Vertical, Qt::ScrollBarAlwaysOff);
+ web->setZValue(3);
+
+// cache = new WebViewCache(web);
+// web->setGraphicsEffect(cache);
+
+ adjustSize();
+}
+
+void WebViewPrivate::adjustSize()
+{
+ QSizeF contentSize = web->page()->mainFrame()->contentsSize();
+ QPointF pos = web->pos();
+
+ qreal w = qMax(contentSize.width(), q->viewport()->boundingRect().width());
+ qreal h = qMax(contentSize.height(), q->viewport()->boundingRect().height());
+
+ if (web->boundingRect().size() != QSizeF(w, h)) {
+ //qDebug() << "WebView: adjustSize:" << QSizeF(w, h);
+
+ web->resize(w, h);
+ web->setPos(pos);
+
+ if (w > q->viewport()->boundingRect().width())
+ q->horizontalScrollBar()->setSliderSize(w);
+ else
+ q->horizontalScrollBar()->setSliderSize(0.0);
+
+
+ if (h > q->viewport()->boundingRect().height())
+ q->verticalScrollBar()->setSliderSize(h);
+ else
+ q->verticalScrollBar()->setSliderSize(0.0);
+ }
+}
+
+void WebViewPrivate::_q_loadStarted()
+{
+ qDebug() << "WebView: load started";
+ adjustSize();
+}
+
+void WebViewPrivate::_q_loadProgress(int progress)
+{
+ Q_UNUSED(progress)
+// qDebug() << "WebView: load progress" << progress;
+ adjustSize();
+}
+
+void WebViewPrivate::_q_loadFinished(bool ok)
+{
+ qDebug() << "WebView: load finished" << (ok ? "ok" : "not ok");
+ adjustSize();
+}
+
+void WebViewPrivate::_q_viewportChanged(QGraphicsWidget* viewport)
+{
+ web->setParentItem(viewport);
+ viewport->setFlag(QGraphicsItem::ItemClipsChildrenToShape,
+ true);
+ adjustSize();
+}
+
+void WebViewPrivate::_q_motionEnded()
+{
+ motionTimer.stop();
+ qDebug() << "Motion ended";
+ q->prepareGeometryChange();
+}
+
+WebViewCache::WebViewCache(QGraphicsWebView *webView)
+ : m_webView(webView)
+{
+
+}
+
+WebViewCache::~WebViewCache()
+{
+}
+
+void WebViewCache::draw(QPainter * painter, QGraphicsEffectSource * source)
+{
+ const QGraphicsItem *item = source->graphicsItem();
+
+ QSizeF itemSize = item->boundingRect().size();
+
+ if (!qFuzzyCompare(itemSize.width(), m_itemSize.width()) ||
+ !qFuzzyCompare(itemSize.height(), m_itemSize.height())) {
+ qDebug() << "Refresh tile cache, for new size" << itemSize;
+
+ for (int i = 0; i < m_tilePixmaps.size(); i++) {
+ QPixmapCache::remove(m_tilePixmaps[i]);
+ }
+
+ m_tilePixmaps.clear();
+ m_tileRects.clear();
+
+ int itemWidth = itemSize.width() + 0.5;
+ int itemHeight = itemSize.height() + 0.5;
+
+ int tilesX = itemWidth / TileSideLength;
+ int tilesY = itemHeight / TileSideLength;
+
+ if ((itemWidth % TileSideLength) != 0) {
+ ++tilesX;
+ }
+
+ if ((itemHeight % TileSideLength) != 0) {
+ ++tilesY;
+ }
+
+ int tilesCount = tilesX * tilesY;
+
+ m_tilePixmaps.resize(tilesCount);
+ m_tileRects.resize(tilesCount);
+
+ for (int i = 0; i < tilesX; i++) {
+ for (int j = 0; j < tilesY; j++) {
+ int x = i * TileSideLength;
+ int y = j * TileSideLength;
+
+ m_tileRects[i + j * tilesX]
+ = QRectF(x, y, TileSideLength, TileSideLength);
+ }
+ }
+
+ m_itemSize = itemSize;
+ }
+
+ const QGraphicsItem *parentItem = item->parentItem();
+ QPointF itemPos = item->pos();
+ QRectF parentRect = parentItem->boundingRect();
+
+ for (int i = 0; i < m_tileRects.size(); i++) {
+ QRectF tileRect = m_tileRects[i].translated(itemPos);
+
+ if (!tileRect.intersects(parentRect) && !tileRect.contains(parentRect)) {
+ continue;
+ }
+
+ QPixmap tilePixmap;
+
+ if (!QPixmapCache::find(m_tilePixmaps[i], &tilePixmap)) {
+ tilePixmap = QPixmap(TileSideLength, TileSideLength);
+
+ QWebFrame *webFrame = m_webView->page()->mainFrame();
+
+ QPainter tilePainter(&tilePixmap);
+ tilePainter.translate(-m_tileRects[i].left(), -m_tileRects[i].top());
+ webFrame->render(&tilePainter, m_tileRects[i].toRect());
+ tilePainter.end();
+
+ m_tilePixmaps[i] = QPixmapCache::insert(tilePixmap);
+ }
+
+ tileRect = tileRect.translated(-itemPos);
+
+ painter->drawPixmap(tileRect.topLeft(), tilePixmap);
+ }
+}
+
+WebView::WebView(QGraphicsWidget *parent)
+ : AbstractScrollArea(parent)
+ , d(new WebViewPrivate(this))
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setContentsMargins(0, 0, 0, 0);
+ connect(d->web->page(), SIGNAL(loadStarted()),
+ this, SLOT(_q_loadStarted()));
+ connect(d->web->page(), SIGNAL(loadProgress(int)),
+ this, SLOT(_q_loadProgress(int)));
+ connect(d->web->page(), SIGNAL(loadFinished(bool)),
+ this, SLOT(_q_loadFinished(bool)));
+ connect(this, SIGNAL(viewportChanged(QGraphicsWidget*)),
+ this, SLOT(_q_viewportChanged(QGraphicsWidget*)));
+ connect(&d->motionTimer, SIGNAL(timeout()),
+ this, SLOT(_q_motionEnded()));
+}
+
+WebView::~WebView()
+{
+ d->web->setGraphicsEffect(0);
+ delete d->cache;
+}
+
+void WebView::setUrl(const QUrl& url)
+{
+ d->adjustSize();
+ d->web->setUrl(url);
+}
+
+void WebView::scrollContentsBy(qreal dx, qreal dy)
+{
+ if (qFuzzyCompare((float)dy, 0.0f) && qFuzzyCompare((float)dx, 0.0f))
+ return;
+
+ if (!d->motionTimer.isActive()) {
+ d->motionTimer.start(MotionEndWaitTime);
+ }
+
+ QSizeF contentSize = d->web->page()->mainFrame()->contentsSize();
+ QRectF viewportRect = viewport()->boundingRect();
+ QPointF pos = d->web->pos();
+
+ qreal w = qMax(contentSize.width(), viewportRect.width());
+ qreal h = qMax(contentSize.height(), viewportRect.height());
+
+ qreal minx = qMin(0.0f, (float) -(w - viewportRect.width()));
+ qreal miny = qMin(0.0f, (float) -(h - viewportRect.height()));
+
+ qreal x = d->web->pos().x() - dx;
+
+ if (x < minx)
+ x = minx;
+ else if (x > 0)
+ x = 0.0;
+
+ qreal y = d->web->pos().y() - dy;
+
+ if (y < miny)
+ y = miny;
+ else if (y > 0)
+ y = 0.0;
+
+ d->web->setPos(x, y);
+}
+
+QSizeF WebView::sizeHint(Qt::SizeHint which, const QSizeF & constraint) const
+{
+ if (which == Qt::PreferredSize) {
+ QSizeF contentSize = d->web->page()->mainFrame()->contentsSize();
+ return contentSize;
+ }
+
+ return AbstractScrollArea::sizeHint(which, constraint);
+}
+
+void WebView::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ AbstractScrollArea::resizeEvent(event);
+ d->adjustSize();
+}
+
+#include "moc_webview.cpp"
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h
new file mode 100644
index 0000000..1e73424
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WEBVIEW_H
+#define WEBVIEW_H
+
+#include "scrollbar.h"
+#include "abstractscrollarea.h"
+
+class WebViewPrivate;
+
+class WebView : public AbstractScrollArea
+{
+ Q_OBJECT
+
+public:
+
+ WebView(QGraphicsWidget *parent = 0);
+ ~WebView();
+
+public:
+
+ void setUrl(const QUrl& url);
+
+private:
+
+ void scrollContentsBy(qreal dx, qreal dy);
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF & constraint) const;
+
+private:
+
+ Q_PRIVATE_SLOT(d, void _q_loadStarted())
+ Q_PRIVATE_SLOT(d, void _q_loadProgress(int))
+ Q_PRIVATE_SLOT(d, void _q_loadFinished(bool))
+ Q_PRIVATE_SLOT(d, void _q_viewportChanged(QGraphicsWidget*))
+ Q_PRIVATE_SLOT(d, void _q_motionEnded())
+
+ WebViewPrivate *d;
+ friend class WebViewPrivate;
+};
+
+#endif // WEBVIEW_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h
new file mode 100644
index 0000000..4a81e89
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WEBVIEW_P_H
+#define WEBVIEW_P_H
+
+#include "webview.h"
+#include <QtWebKit/qgraphicswebview.h>
+#include <QtWebKit/qwebpage.h>
+#include <QtWebKit/qwebframe.h>
+#include <QGraphicsEffect>
+#include <QPainter>
+#include <QPixmapCache>
+#include <QTimer>
+#include <QDebug>
+
+class WebViewCache;
+
+class WebViewPrivate {
+public:
+
+ WebViewPrivate(WebView *w);
+ void adjustSize();
+ void _q_loadStarted();
+ void _q_loadProgress(int);
+ void _q_loadFinished(bool);
+ void _q_viewportChanged(QGraphicsWidget*);
+ void _q_motionEnded();
+
+ WebView *q;
+ QGraphicsWebView *web;
+ WebViewCache *cache;
+ QTimer motionTimer;
+};
+
+class WebViewCache : public QGraphicsEffect
+{
+ Q_OBJECT
+
+public:
+
+ WebViewCache(QGraphicsWebView *webView);
+ virtual ~WebViewCache();
+
+public:
+
+ void refresh();
+
+ void draw(QPainter * painter, QGraphicsEffectSource * source);
+
+private:
+
+ QVector<QRectF> m_tileRects;
+ QVector<QPixmapCache::Key> m_tilePixmaps;
+ QSizeF m_itemSize;
+ QGraphicsWebView *m_webView;
+
+ friend class WebViewPrivate;
+};
+
+#endif // WEBVIEW_P_H
diff --git a/tests/benchmarks/gui/graphicsview/functional/functional.pro b/tests/benchmarks/gui/graphicsview/functional/functional.pro
new file mode 100644
index 0000000..f8e122b
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/functional/functional.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = \
+ GraphicsViewBenchmark
diff --git a/tests/benchmarks/gui/graphicsview/graphicsview.pro b/tests/benchmarks/gui/graphicsview/graphicsview.pro
index 93c00d2..e4fed19 100644
--- a/tests/benchmarks/gui/graphicsview/graphicsview.pro
+++ b/tests/benchmarks/gui/graphicsview/graphicsview.pro
@@ -1,5 +1,6 @@
TEMPLATE = subdirs
SUBDIRS = \
+ functional \
qgraphicsanchorlayout \
qgraphicsitem \
qgraphicsscene \
diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf
index b8726a4..365613b 100644
--- a/tools/assistant/tools/assistant/doc/assistant.qdocconf
+++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf
@@ -12,5 +12,5 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"30%\" align=\"left\">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"40%\" align=\"center\">Trademarks</td>\n" \
- "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.2</div></td>\n" \
+ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.3</div></td>\n" \
"</tr></table></div></address>"
diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf
index 38da552..f03d970 100644
--- a/tools/qdoc3/test/assistant.qdocconf
+++ b/tools/qdoc3/test/assistant.qdocconf
@@ -17,7 +17,7 @@ qhp.Assistant.namespace = com.trolltech.assistant.460
qhp.Assistant.virtualFolder = qdoc
qhp.Assistant.indexTitle = Qt Assistant Manual
qhp.Assistant.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Assistant.filterAttributes = qt 4.6.2 tools assistant
+qhp.Assistant.filterAttributes = qt 4.6.3 tools assistant
qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual
qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant
qhp.Assistant.subprojects = manual examples
diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf
index 57d21a9..0c3e05b 100644
--- a/tools/qdoc3/test/designer.qdocconf
+++ b/tools/qdoc3/test/designer.qdocconf
@@ -17,7 +17,7 @@ qhp.Designer.namespace = com.trolltech.designer.460
qhp.Designer.virtualFolder = qdoc
qhp.Designer.indexTitle = Qt Designer Manual
qhp.Designer.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Designer.filterAttributes = qt 4.6.2 tools designer
+qhp.Designer.filterAttributes = qt 4.6.3 tools designer
qhp.Designer.customFilters.Designer.name = Qt Designer Manual
qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer
qhp.Designer.subprojects = manual examples
diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf
index 5860b33..739f4af 100644
--- a/tools/qdoc3/test/linguist.qdocconf
+++ b/tools/qdoc3/test/linguist.qdocconf
@@ -17,7 +17,7 @@ qhp.Linguist.namespace = com.trolltech.linguist.460
qhp.Linguist.virtualFolder = qdoc
qhp.Linguist.indexTitle = Qt Linguist Manual
qhp.Linguist.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Linguist.filterAttributes = qt 4.6.2 tools linguist
+qhp.Linguist.filterAttributes = qt 4.6.3 tools linguist
qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual
qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist
qhp.Linguist.subprojects = manual examples
diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf
index 0e7d960..696949e 100644
--- a/tools/qdoc3/test/qmake.qdocconf
+++ b/tools/qdoc3/test/qmake.qdocconf
@@ -17,7 +17,7 @@ qhp.qmake.namespace = com.trolltech.qmake.460
qhp.qmake.virtualFolder = qdoc
qhp.qmake.indexTitle = QMake Manual
qhp.qmake.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.qmake.filterAttributes = qt 4.6.2 tools qmake
+qhp.qmake.filterAttributes = qt 4.6.3 tools qmake
qhp.qmake.customFilters.qmake.name = qmake Manual
qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake
qhp.qmake.subprojects = manual
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index def4e67..d7a06b8 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -32,9 +32,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.6.2 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.2
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.2
+qhp.Qt.filterAttributes = qt 4.6.3 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.3
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.3
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index 1aefa98..d5a2995 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -34,9 +34,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.6.2 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.2
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.2
+qhp.Qt.filterAttributes = qt 4.6.3 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.3
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.3
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes