From 6c2f8a646154328be6bea8bffd7d193130c97861 Mon Sep 17 00:00:00 2001 From: Hardik Juneja Date: Tue, 8 Nov 2016 10:24:43 +0000 Subject: [PATCH 1/2] erp5_officejs: Image Editor for Officejs --- .../gadget_image_editor.appcache.xml | 380 + .../gadget_image_editor_html.html | 339 + .../gadget_image_editor_html.xml | 326 + .../web_page_module/gadget_image_editor_js.js | 55 + .../gadget_image_editor_js.xml | 320 + ...get_officejs_image_editor_router_html.html | 23 + ...dget_officejs_image_editor_router_html.xml | 359 + .../gadget_officejs_jio_image_view_html.html | 58 + .../gadget_officejs_jio_image_view_html.xml | 363 + .../gadget_officejs_jio_image_view_js.js | 233 + .../gadget_officejs_jio_image_view_js.xml | 359 + .../web_site_module/officejs_image_editor.xml | 630 + .../officejs_image_editor/hateoas.xml | 491 + .../officejs_image_editor/rjsunsafe.xml | 362 + .../erp5_officejs_theme/miniPaint.xml | 26 + .../miniPaint/config.js.js | 42 + .../miniPaint/config.js.xml | 28 + .../erp5_officejs_theme/miniPaint/img.xml | 26 + .../miniPaint/img/colorwheel.png.png | Bin 0 -> 829 bytes .../miniPaint/img/colorwheel.png.xml | 28 + .../miniPaint/img/favicon.png.png | Bin 0 -> 385 bytes .../miniPaint/img/favicon.png.xml | 28 + .../miniPaint/img/logo.png.png | Bin 0 -> 1388 bytes .../miniPaint/img/logo.png.xml | 28 + .../miniPaint/img/preview.jpg.jpg | Bin 0 -> 194842 bytes .../miniPaint/img/preview.jpg.xml | 28 + .../miniPaint/img/right.png.png | Bin 0 -> 163 bytes .../miniPaint/img/right.png.xml | 28 + .../miniPaint/img/sprites.png.png | Bin 0 -> 9275 bytes .../miniPaint/img/sprites.png.xml | 28 + .../erp5_officejs_theme/miniPaint/js.xml | 26 + .../miniPaint/js/draw_tools.js.js | 1674 +++ .../miniPaint/js/draw_tools.js.xml | 28 + .../miniPaint/js/edit.js.js | 187 + .../miniPaint/js/edit.js.xml | 28 + .../miniPaint/js/effects.js.js | 1125 ++ .../miniPaint/js/effects.js.xml | 28 + .../miniPaint/js/elements.js.js | 289 + .../miniPaint/js/elements.js.xml | 28 + .../miniPaint/js/events.js.js | 809 ++ .../miniPaint/js/events.js.xml | 28 + .../miniPaint/js/file.js.js | 495 + .../miniPaint/js/file.js.xml | 28 + .../miniPaint/js/gui.js.js | 739 + .../miniPaint/js/gui.js.xml | 28 + .../miniPaint/js/help.js.js | 66 + .../miniPaint/js/help.js.xml | 28 + .../miniPaint/js/image.js.js | 1073 ++ .../miniPaint/js/image.js.xml | 28 + .../miniPaint/js/layers.js.js | 729 + .../miniPaint/js/layers.js.xml | 28 + .../miniPaint/js/main.js.js | 57 + .../miniPaint/js/main.js.xml | 28 + .../miniPaint/js/tools.js.js | 366 + .../miniPaint/js/tools.js.xml | 28 + .../miniPaint/languages.xml | 26 + .../miniPaint/languages/de.js.js | 342 + .../miniPaint/languages/de.js.xml | 28 + .../miniPaint/languages/empty.js.js | 335 + .../miniPaint/languages/empty.js.xml | 28 + .../miniPaint/languages/es.js.js | 342 + .../miniPaint/languages/es.js.xml | 28 + .../miniPaint/languages/fr.js.js | 342 + .../miniPaint/languages/fr.js.xml | 28 + .../miniPaint/languages/it.js.js | 342 + .../miniPaint/languages/it.js.xml | 28 + .../miniPaint/languages/ja.js.js | 342 + .../miniPaint/languages/ja.js.xml | 28 + .../miniPaint/languages/ko.js.js | 342 + .../miniPaint/languages/ko.js.xml | 28 + .../miniPaint/languages/lt.js.js | 342 + .../miniPaint/languages/lt.js.xml | 28 + .../miniPaint/languages/pt.js.js | 342 + .../miniPaint/languages/pt.js.xml | 28 + .../miniPaint/languages/ru.js.js | 342 + .../miniPaint/languages/ru.js.xml | 28 + .../miniPaint/languages/tr.js.js | 342 + .../miniPaint/languages/tr.js.xml | 28 + .../miniPaint/languages/zh.js.js | 342 + .../miniPaint/languages/zh.js.xml | 28 + .../erp5_officejs_theme/miniPaint/libs.xml | 26 + .../miniPaint/libs/helpers.js.js | 294 + .../miniPaint/libs/helpers.js.xml | 28 + .../miniPaint/libs/popup.js.js | 470 + .../miniPaint/libs/popup.js.xml | 28 + .../miniPaint/libs/sift.js.js | 183 + .../miniPaint/libs/sift.js.xml | 28 + .../miniPaint/libs/vintage.js.js | 200 + .../miniPaint/libs/vintage.js.xml | 28 + .../erp5_officejs_theme/miniPaint/styles.xml | 26 + .../miniPaint/styles/styles.css.css | 711 + .../miniPaint/styles/styles.css.xml | 28 + .../erp5_officejs_theme/miniPaint/vendor.xml | 26 + .../miniPaint/vendor/exif.xml | 26 + .../miniPaint/vendor/exif/exif.js.js | 806 ++ .../miniPaint/vendor/exif/exif.js.xml | 28 + .../miniPaint/vendor/exif/exif.min.js.js | 2 + .../miniPaint/vendor/exif/exif.min.js.xml | 28 + .../miniPaint/vendor/file-saver.xml | 26 + .../vendor/file-saver/FileSaver.min.js.js | 2 + .../vendor/file-saver/FileSaver.min.js.xml | 28 + .../vendor/file-saver/canvas-toBlob.js.js | 2 + .../vendor/file-saver/canvas-toBlob.js.xml | 28 + .../miniPaint/vendor/glfx.xml | 26 + .../miniPaint/vendor/glfx/glfx.js.js | 59 + .../miniPaint/vendor/glfx/glfx.js.xml | 28 + .../miniPaint/vendor/harmony.xml | 26 + .../miniPaint/vendor/harmony/harmony.js.js | 130 + .../miniPaint/vendor/harmony/harmony.js.xml | 28 + .../vendor/harmony/harmony.min.js.js | 2 + .../vendor/harmony/harmony.min.js.xml | 28 + .../miniPaint/vendor/hermite-resize.xml | 26 + .../vendor/hermite-resize/hermite.js.js | 5 + .../vendor/hermite-resize/hermite.js.xml | 28 + .../miniPaint/vendor/hqx.xml | 26 + .../miniPaint/vendor/hqx/hqx.js.js | 11876 ++++++++++++++++ .../miniPaint/vendor/hqx/hqx.js.xml | 28 + .../miniPaint/vendor/hqx/hqx.min.js.js | 12 + .../miniPaint/vendor/hqx/hqx.min.js.xml | 28 + .../miniPaint/vendor/imagefilters.xml | 26 + .../vendor/imagefilters/imagefilters.js.js | 2005 +++ .../vendor/imagefilters/imagefilters.js.xml | 28 + .../imagefilters/imagefilters.min.js.js | 4 + .../imagefilters/imagefilters.min.js.xml | 28 + .../miniPaint/vendor/jquery.xml | 26 + .../vendor/jquery/jquery-migrate.js.js | 2 + .../vendor/jquery/jquery-migrate.js.xml | 28 + .../miniPaint/vendor/jquery/jquery.js.js | 4 + .../miniPaint/vendor/jquery/jquery.js.xml | 28 + .../miniPaint/vendor/menu.xml | 26 + .../miniPaint/vendor/menu/menu.js.js | 641 + .../miniPaint/vendor/menu/menu.js.xml | 28 + .../miniPaint/vendor/menu/menu.min.js.js | 17 + .../miniPaint/vendor/menu/menu.min.js.xml | 28 + .../miniPaint/vendor/translate.xml | 26 + .../vendor/translate/jquery.translate.js.js | 63 + .../vendor/translate/jquery.translate.js.xml | 28 + .../translate/jquery.translate.min.js.js | 2 + .../translate/jquery.translate.min.js.xml | 28 + ..._keep_last_workflow_history_only_path_list | 5 +- .../bt/template_keep_workflow_path_list | 5 +- bt5/erp5_officejs/bt/template_path_list | 4 + 142 files changed, 35504 insertions(+), 2 deletions(-) create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor.appcache.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.html create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.js create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.html create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.html create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.js create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/hateoas.xml create mode 100644 bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/rjsunsafe.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.png create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.png create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.png create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.jpg create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.png create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.png create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.css create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.xml create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.js create mode 100644 bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.xml diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor.appcache.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor.appcache.xml new file mode 100644 index 00000000000..88a51ca2862 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor.appcache.xml @@ -0,0 +1,380 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + content_md5 + + + + + + default_reference + gadget_image_editor.appcache + + + description + + + + + + id + gadget_image_editor.appcache + + + language + + + + + + portal_type + Web Manifest + + + text_content + CACHE MANIFEST\r\n +CACHE:\r\n +rsvp.js\r\n +renderjs.js\r\n +jiodev.js\r\n +gadget_image_editor.js\r\n +gadget_image_editor.html/renderjs.js\r\n +gadget_image_editor.html/rsvp.js\r\n +gadget_image_editor.html/miniPaint/config.js\r\n +gadget_image_editor.html/miniPaint/img/colorwheel.png\r\n +gadget_image_editor.html/miniPaint/img/favicon.png\r\n +gadget_image_editor.html/miniPaint/img/logo.png\r\n +gadget_image_editor.html/miniPaint/img/preview.jpg\r\n +gadget_image_editor.html/miniPaint/img/sprites.png\r\n +gadget_image_editor.html/miniPaint/js/draw_tools.js\r\n +gadget_image_editor.html/miniPaint/js/edit.js\r\n +gadget_image_editor.html/miniPaint/js/effects.js\r\n +gadget_image_editor.html/miniPaint/js/elements.js\r\n +gadget_image_editor.html/miniPaint/js/events.js\r\n +gadget_image_editor.html/miniPaint/js/file.js\r\n +gadget_image_editor.html/miniPaint/js/gui.js\r\n +gadget_image_editor.html/miniPaint/js/help.js\r\n +gadget_image_editor.html/miniPaint/js/image.js\r\n +gadget_image_editor.html/miniPaint/js/layers.js\r\n +gadget_image_editor.html/miniPaint/js/main.js\r\n +gadget_image_editor.html/miniPaint/js/tools.js\r\n +gadget_image_editor.html/miniPaint/languages/de.js\r\n +gadget_image_editor.html/miniPaint/languages/empty.js\r\n +gadget_image_editor.html/miniPaint/languages/es.js\r\n +gadget_image_editor.html/miniPaint/languages/fr.js\r\n +gadget_image_editor.html/miniPaint/languages/it.js\r\n +gadget_image_editor.html/miniPaint/languages/ja.js\r\n +gadget_image_editor.html/miniPaint/languages/ko.js\r\n +gadget_image_editor.html/miniPaint/languages/lt.js\r\n +gadget_image_editor.html/miniPaint/languages/pt.js\r\n +gadget_image_editor.html/miniPaint/languages/ru.js\r\n +gadget_image_editor.html/miniPaint/languages/tr.js\r\n +gadget_image_editor.html/miniPaint/languages/zh.js\r\n +gadget_image_editor.html/miniPaint/libs/helpers.js\r\n +gadget_image_editor.html/miniPaint/libs/popup.js\r\n +gadget_image_editor.html/miniPaint/libs/sift.js\r\n +gadget_image_editor.html/miniPaint/libs/vintage.js\r\n +gadget_image_editor.html/miniPaint/styles/styles.css\r\n +gadget_image_editor.html/miniPaint/vendor/exif/exif.js\r\n +gadget_image_editor.html/miniPaint/vendor/exif/exif.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/file-saver/FileSaver.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/file-saver/canvas-toBlob.js\r\n +gadget_image_editor.html/miniPaint/vendor/glfx/glfx.js\r\n +gadget_image_editor.html/miniPaint/vendor/harmony/harmony.js\r\n +gadget_image_editor.html/miniPaint/vendor/harmony/harmony.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/hermite-resize/hermite.js\r\n +gadget_image_editor.html/miniPaint/vendor/hqx/hqx.js\r\n +gadget_image_editor.html/miniPaint/vendor/hqx/hqx.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/imagefilters/imagefilters.js\r\n +gadget_image_editor.html/miniPaint/vendor/imagefilters/imagefilters.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/jquery/jquery-migrate.js\r\n +gadget_image_editor.html/miniPaint/vendor/jquery/jquery.js \r\n +gadget_image_editor.html/miniPaint/vendor/menu/menu.js \r\n +gadget_image_editor.html/miniPaint/vendor/menu/menu.min.js\r\n +gadget_image_editor.html/miniPaint/vendor/translate/jquery.translate.js\r\n +gadget_image_editor.html/miniPaint/vendor/translate/jquery.translate.min.js\r\n +NETWORK:\r\n +* + + + title + Image Editor Gadget AppCache + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1479134025.22 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.17991.46421.38161 + + + state + current + + + time + + + + + + + + + + + 1479134016.35 + UTC + + + + + + + + + + + + + + + + + + + + + action + + + + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + empty + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1479133901.09 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.html b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.html new file mode 100644 index 00000000000..d800e23022f --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.html @@ -0,0 +1,339 @@ + + + + + + Image Editor Gadget + + + + + + + + + + + +
+ +
+
Your browser doesn't support canvas.
+
+ + + +
+
+
+
+ +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.xml new file mode 100644 index 00000000000..8ba2dd02f40 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_html.xml @@ -0,0 +1,326 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + content_md5 + + + + + + content_type + text/html + + + default_reference + gadget_image_editor.html + + + description + + + + + + id + gadget_image_editor_html + + + language + + + + + + portal_type + Web Page + + + short_title + + + + + + title + Image Editor Gadget + + + version + 001 + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478190070.48 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.17995.46417.23432 + + + state + current + + + time + + + + + + + + + + + 1479134142.77 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1478187623.4 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.js b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.js new file mode 100644 index 00000000000..7389acb61c6 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.js @@ -0,0 +1,55 @@ +/*global window, rJS, CKEDITOR*/ +/*jslint nomen: true, maxlen:80, indent:2*/ +(function (rJS, RSVP) { + "use strict"; + + rJS(window) + .ready(function (g) { + g.props = {}; + }) + .ready(function (g) { + return g.getElement() + .push(function (element) { + var textarea = element.querySelector('textarea'); + g.props.element = element; + g.props.blob_defer = RSVP.defer(); + }); + }) + .declareAcquiredMethod("submitContent", "triggerSubmit") + .declareMethod('render', function (options) { + this.props.key = options.key || "text_content"; + return new RSVP.Queue() + .push(function() { + if (options.value.split('data:')[1] === '') { + return ''; + } + return jIO.util.dataURItoBlob(options.value); + }) + .push(function(blob) { + if (!blob) { + return {}; + blob = new Blob([''], {type: 'image/png'}); + } + blob.name = options.name; + FILE.open_handler({target:{files:[blob]}}); + return {}; + }) + }) + + .declareMethod('getContent', function () { + var result = {}, + gadget = this; + + return new RSVP.Queue() + .push(function() { + return FILE.save({name: gadget.props.key, type:'BLOB'}); + }) + .push(function(blob) { + return jIO.util.readBlobAsDataURL(blob); + }) + .push(function(datauri) { + return datauri.target.result; + }); + }); + +}(rJS, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.xml new file mode 100644 index 00000000000..f3b6f67d56f --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_image_editor_js.xml @@ -0,0 +1,320 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + content_md5 + + + + + + default_reference + gadget_image_editor.js + + + description + + + + + + id + gadget_image_editor_js + + + language + en + + + portal_type + Web Script + + + short_title + + + + + + title + Image Editor Gadget JS + + + version + 001 + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478192007.47 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.9067.17808.36590 + + + state + current + + + time + + + + + + + + + + + 1478598436.82 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1478191519.17 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.html b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.html new file mode 100644 index 00000000000..9db2f6407a6 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.html @@ -0,0 +1,23 @@ + + + + + + OfficeJS Router Gadget + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.xml new file mode 100644 index 00000000000..bf460d77093 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_image_editor_router_html.xml @@ -0,0 +1,359 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + categories + + + contributor/person_module/1 + + + + + content_md5 + + + + + + content_type + text/html + + + creators + + + cedric.le.ninivin + + + + + default_reference + gadget_officejs_image_editor_router.html + + + description + + + + + + id + gadget_officejs_image_editor_router_html + + + language + en + + + modification_date + + + + + + + + + + + 1455284352.21 + UTC + + + + + + + portal_type + Web Page + + + short_title + + + + + + title + OfficeJS Image Editor router Gadget + + + version + 001 + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478181344.58 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.2110.8737.31897 + + + state + current + + + time + + + + + + + + + + + 1478181274.8 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1478179009.02 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.html b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.html new file mode 100644 index 00000000000..1415217961a --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.html @@ -0,0 +1,58 @@ + + + + + + + OfficeJS Jio Web Page View + + + + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.xml new file mode 100644 index 00000000000..6c2a1dc3130 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_html.xml @@ -0,0 +1,363 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + categories + + + contributor/person_module/1 + + + + + content_md5 + + + + + + content_type + text/html + + + creators + + + cedric.le.ninivin + + + + + default_reference + gadget_officejs_jio_image_view.html + + + description + + + + + + id + gadget_officejs_jio_image_view_html + + + language + + + + + + modification_date + + + + + + + + + + + 1455284351.31 + UTC + + + + + + + portal_type + Web Page + + + short_title + + + + + + title + OfficeJS Jio Image View + + + version + + + + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478183369.05 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.9413.14205.29422 + + + state + current + + + time + + + + + + + + + + + 1478619238.52 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1478182718.57 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.js b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.js new file mode 100644 index 00000000000..b2aa976d738 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.js @@ -0,0 +1,233 @@ +/*globals window, rJS, Handlebars, RSVP, loopEventListener, console, URL*/ +/*jslint indent: 2, nomen: true, maxlen: 80*/ +(function (window, RSVP, rJS, Handlebars, loopEventListener, URL) { + "use strict"; + + function saveContent(gadget, submit_event) { + var i, + doc = gadget.options.doc, + now = new Date(), + blob; + doc.parent_relative_url = "image_module"; + doc.portal_type = "Image"; + doc.modification_date = now.toISOString(); + for (i = 0; i < submit_event.target.length; i += 1) { + // XXX Should check input type instead + if (submit_event.target[i].name) { + doc[submit_event.target[i].name] = submit_event.target[i].value; + } + } + + return RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget("my_text_content"); + }) + .push(function (text_content_gadget) { + return text_content_gadget.getContent(); + }) + .push(function (dataURI) { + return jIO.util.dataURItoBlob(dataURI); + }) + .push(function(blob) { + console.log(gadget.options.jio_key); + return RSVP.all([ + gadget.put(gadget.options.jio_key, doc), + gadget.putAttachment(gadget.options.jio_key, "data", blob) + ]); + }); + } + + function maximize(gadget) { + var iframe = gadget.props.element.querySelector('iframe'), + iframe_class_string = iframe.getAttribute('class') || "", + class_name = "ui-content-maximize", + class_index = iframe_class_string.indexOf(class_name); + if (class_index === -1) { + iframe_class_string += ' ' + class_name; + iframe.setAttribute('style', ''); + iframe.setAttribute('class', iframe_class_string); + return; + } + iframe_class_string = iframe_class_string.substring(0, class_index) + + iframe_class_string.substring(class_index + class_name.length); + iframe.setAttribute('style', 'width:100%; border: 0 none; height: 600px'); + iframe.setAttribute('class', iframe_class_string); + return; + } + + var gadget_klass = rJS(window), + source = gadget_klass.__template_element + .querySelector(".view-web-page-template") + .innerHTML, + template = Handlebars.compile(source); + + + gadget_klass + .ready(function (g) { + g.props = {}; + g.options = null; + return g.getElement() + .push(function (element) { + g.props.element = element; + g.props.deferred = RSVP.defer(); + }); + }) + + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("get", "jio_get") + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("put", "jio_put") + .declareAcquiredMethod("putAttachment", "jio_putAttachment") + .declareAcquiredMethod("getAttachment", "jio_getAttachment") + .declareAcquiredMethod("redirect", "redirect") + + .allowPublicAcquisition('triggerMaximize', function () { + var gadget = this; + return RSVP.Queue() + .push(function () { + return maximize(gadget); + }) + .fail(function (e) { + console.log(e); + }); + }) + + .allowPublicAcquisition('triggerSubmit', function (option) { + if (option[0] === "maximize" || option === "maximize") { + var gadget = this; + return RSVP.Queue() + .push(function () { + return maximize(gadget); + }); + } + return this.props.element.querySelector('button').click(); + }) + + .declareMethod('triggerSubmit', function (option) { + if (option[0] === "maximize" || option === "maximize") { + var gadget = this; + return RSVP.Queue() + .push(function () { + return maximize(gadget); + }); + } + return this.props.element.querySelector('button').click(); + }) + + .declareMethod("render", function (options) { + var gadget = this; + gadget.options = options; + gadget.options.doc.title = gadget.options.doc.title || ""; + return new RSVP.Queue() + .push(function () { + return gadget.translateHtml(template(options.doc)); + }) + .push(function (html) { + gadget.props.element.innerHTML = html; + return gadget.updateHeader({ + title: options.doc.title + " | Image", + save_action: true, + maximize_action: true, + maximized: gadget.options.doc.title !== "" + }); + }) + .push(function() { + return gadget.getAttachment(gadget.options.jio_key, "data"); + }) + .push( + function (blob_result) { + gadget.props.blob = blob_result; + return gadget.props.deferred.resolve(); + }, function (error) { + if (error.status_code === 404) { + gadget.props.blob = new Blob([''], {type: 'image/png'}); + return gadget.props.deferred.resolve(); + } + throw new Error(error); + }); + }) + + ///////////////////////////////////////// + // Render text content gadget + ///////////////////////////////////////// + .declareService(function () { + var gadget = this, + image_content_gadget; + + return new RSVP.Queue() + .push(function () { + return gadget.props.deferred.promise; + }) + .push(function () { + return gadget.declareGadget( + "rjsunsafe/gadget_image_editor.html", + { + scope: "my_text_content", + sandbox: "iframe", + element: gadget.props.element.querySelector(".document-content") + } + ); + }) + .push(function (image_gadget) { + image_content_gadget = image_gadget; + var iframe = gadget.props.element.querySelector('iframe'); + iframe.setAttribute( + 'style', + 'width:100%; border: 0 none; height: 600px' + ); + return jIO.util.readBlobAsDataURL(gadget.props.blob); + }) + .push(function (f) { + return image_content_gadget.render({ + "key": 'text_content', + "value": f.target.result, + "name": gadget.options.jio_key + }); + }) + .push(function () { + if (gadget.options.doc.title !== "") { + return gadget.triggerSubmit("maximize"); + } + }) + .push(undefined, function (error) { + var display_error_element; + if (error === "Timed out after 5000 ms") { + display_error_element = + gadget.props.element.querySelector( + "form div.ui-field-contain fieldset" + ); + display_error_element.innerHTML = + '



'; + display_error_element.querySelector('p').textContent = + "TIMEOUT: The editor gadget is taking too long to load but is" + + " currently being cached, please wait for the page to load" + + " (check your browser loading icon) and then refresh."; + } else { + throw error; + } + }); + }) + + ///////////////////////////////////////// + // Form submit + ///////////////////////////////////////// + .declareService(function () { + var gadget = this; + + return new RSVP.Queue() + .push(function () { + return gadget.props.deferred.promise; + }) + .push(function () { + return loopEventListener( + gadget.props.element.querySelector('form'), + 'submit', + true, + function (event) { + return saveContent(gadget, event); + } + ); + }); + }); + +}(window, RSVP, rJS, Handlebars, loopEventListener, URL)); \ No newline at end of file diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.xml new file mode 100644 index 00000000000..c4a6c52a392 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_jio_image_view_js.xml @@ -0,0 +1,359 @@ + + + + + + + + + + _Access_contents_information_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + _Add_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _Change_local_roles_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + + + + + _View_Permission + + + Anonymous + Assignee + Assignor + Associate + Auditor + Manager + Owner + + + + + categories + + + contributor/person_module/1 + + + + + content_md5 + + + + + + creators + + + cedric.le.ninivin + + + + + default_reference + gadget_officejs_jio_image_view.js + + + description + + + + + + id + gadget_officejs_jio_image_view_js + + + language + + + + + + modification_date + + + + + + + + + + + 1455284351.35 + UTC + + + + + + + portal_type + Web Script + + + short_title + + + + + + title + OfficeJS Jio Image View JS + + + version + + + + + + workflow_history + + AAAAAAAAAAI= + + + + + + + + + + + + + data + + + + document_publication_workflow + + AAAAAAAAAAM= + + + + edit_workflow + + AAAAAAAAAAQ= + + + + processing_status_workflow + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + action + publish_alive + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478182661.35 + UTC + + + + + + + validation_state + published_alive + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.7635.24631.25992 + + + state + current + + + time + + + + + + + + + + + 1478598415.13 + UTC + + + + + + + + + + + + + + + + + + + + + action + detect_converted_file + + + actor + zope + + + comment + + + + error_message + + + + external_processing_state + converted + + + serial + 0.0.0.0 + + + time + + + + + + + + + + + 1478182534.38 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor.xml b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor.xml new file mode 100644 index 00000000000..b178eaa317a --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor.xml @@ -0,0 +1,630 @@ + + + + + + + + + + _Add_portal_content_Permission + + + Assignor + Manager + + + + + _Add_portal_folders_Permission + + + Assignor + Manager + + + + + _Copy_or_Move_Permission + + + Assignor + Manager + + + + + _Delete_objects_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + Owner + + + + + __before_publishing_traverse__ + + + + + + + + + + _defined_in_class + 1 + + + _hookname + __before_publishing_traverse__ + + + _list + + + AAAAAAAAAAI= + + + + + _prior + + + + + + + + + + + __before_traverse__ + + + + + + 99 + ERP5 Web Site/officejs_image_editor + + + + AAAAAAAAAAI= + + + + + + + _count + + AAAAAAAAAAM= + + + + _identity_criterion + + AAAAAAAAAAQ= + + + + _local_properties + + + + + id + frontpage_gadget_url + + + type + string + + + + + id + configuration_frontpage_gadget_url + + + type + string + + + + + id + configuration_application_title + + + type + string + + + + + id + configuration_hateoas_url + + + type + string + + + + + id + configuration_view_action_category + + + type + string + + + + + id + configuration_default_view_action_reference + + + type + string + + + + + id + configuration_panel_gadget_url + + + type + string + + + + + id + configuration_router_gadget_url + + + type + string + + + + + id + configuration_jio_gadget_url + + + type + string + + + + + id + configuration_translation_gadget_url + + + type + string + + + + + id + configuration_manifest_url + + + type + string + + + + + id + configuration_header_gadget_url + + + type + string + + + + + id + configuration_content_security_policy + + + type + string + + + + + id + configuration_x_frame_options + + + type + string + + + + + + + _mt_index + + AAAAAAAAAAU= + + + + _range_criterion + + AAAAAAAAAAY= + + + + _tree + + AAAAAAAAAAc= + + + + available_language + + + en + + + + + categories + + + aggregate/web_page_module/rjs_gadget_erp5_html + caching_policy/must-revalidate + + + + + configuration_application_title + Image Editor + + + configuration_content_security_policy + default-src \'none\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' https://localhost:5000 mail.tiolive.com data: *.host.vifib.net *.node.vifib.com *.erp5.net; script-src \'self\' \'unsafe-eval\'; font-src netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data: *.app.officejs.com + + + configuration_default_view_action_reference + + + + + + configuration_frontpage_gadget_url + + + + + + configuration_hateoas_url + hateoas/ + + + configuration_header_gadget_url + gadget_officejs_header.html + + + configuration_jio_gadget_url + gadget_officejs_jio.html + + + configuration_manifest_url + gadget_officejs.appcache + + + configuration_panel_gadget_url + gadget_officejs_application_panel.html + + + configuration_router_gadget_url + gadget_officejs_image_editor_router.html + + + configuration_translation_gadget_url + gadget_translation.html + + + configuration_view_action_category + + + + + + configuration_x_frame_options + SAMEORIGIN + + + container_layout + WebSection_renderDefaultPageAsGadget + + + content_layout + WebSection_renderDefaultPageAsGadget + + + custom_render_method_id + WebSection_renderDefaultPageAsGadget + + + description + + + + + + frontpage_gadget_url + gadget_woelfel_pt_frontpage.html + + + id + officejs_image_editor + + + layout_configuration_form_id + WebSection_viewRenderJSPreference + + + portal_type + Web Site + + + short_title + + + + + + skin_selection_name + RJS + + + static_language_selection + 0 + + + title + Office JS Image Editor + + + visible + 1 + + + workflow_history + + AAAAAAAAAAg= + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + data + + + + category_publication_workflow + + AAAAAAAAAAk= + + + + edit_workflow + + AAAAAAAAAAo= + + + + + + + + + + + + + + + + + + + action + + + + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478178617.7 + UTC + + + + + + + validation_state + embedded + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.2071.12987.25651 + + + state + current + + + time + + + + + + + + + + + 1478178954.77 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/hateoas.xml b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/hateoas.xml new file mode 100644 index 00000000000..55199c53dcc --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/hateoas.xml @@ -0,0 +1,491 @@ + + + + + + + + + + _Add_portal_content_Permission + + + Assignor + Manager + + + + + _Add_portal_folders_Permission + + + Assignor + Manager + + + + + _Copy_or_Move_Permission + + + Assignor + Manager + + + + + _Delete_objects_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + Owner + + + + + __before_publishing_traverse__ + + + + + + + + + + _defined_in_class + 1 + + + _hookname + __before_publishing_traverse__ + + + _list + + + AAAAAAAAAAI= + + + + + _prior + + + + + + + + + + + __before_traverse__ + + + + + + 99 + ERP5 Web Section/hateoas + + + + AAAAAAAAAAI= + + + + + + + __translation_dict + + + + + + _identity_criterion + + AAAAAAAAAAM= + + + + _local_properties + + + + + id + default_view_action_reference + + + type + string + + + + + id + view_action_category + + + type + string + + + + + id + frontpage_gadget + + + type + string + + + + + id + frontpage_gadget_url + + + type + string + + + + + id + configuration_frontpage_gadget_url + + + type + string + + + + + id + configuration_application_title + + + type + string + + + + + id + configuration_content_security_policy + + + type + string + + + + + + + _range_criterion + + AAAAAAAAAAQ= + + + + categories + + + caching_policy/hateoas + + + + + configuration_application_title + + + + + + configuration_content_security_policy + + + + + + configuration_frontpage_gadget_url + + + + + + container_layout + ERP5Document_getHateoas + + + content_layout + ERP5Document_getHateoas + + + custom_render_method_id + ERP5Document_getHateoas + + + default_view_action_reference + view + + + description + + + + + + empty_criterion_valid + 0 + + + frontpage_gadget + gadget_woelfel_pt_frontpage.html + + + frontpage_gadget_url + gadget_woelfel_pt_frontpage.html + + + id + hateoas + + + layout_configuration_form_id + + + + + + portal_type + Web Section + + + short_title + + + + + + skin_selection_name + HalRestricted + + + title + Restricted Hateoas + + + view_action_category + object_view + + + visible + 1 + + + workflow_history + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + category_publication_workflow + + AAAAAAAAAAY= + + + + edit_workflow + + AAAAAAAAAAc= + + + + + + + + + + + + + + + + + + + action + + + + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478178617.73 + UTC + + + + + + + validation_state + embedded + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.2070.19535.2099 + + + state + current + + + time + + + + + + + + + + + 1478178649.5 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/rjsunsafe.xml b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/rjsunsafe.xml new file mode 100644 index 00000000000..8289d921fb7 --- /dev/null +++ b/bt5/erp5_officejs/PathTemplateItem/web_site_module/officejs_image_editor/rjsunsafe.xml @@ -0,0 +1,362 @@ + + + + + + + + + + _Add_portal_content_Permission + + + Assignor + Manager + + + + + _Add_portal_folders_Permission + + + Assignor + Manager + + + + + _Copy_or_Move_Permission + + + Assignor + Manager + + + + + _Delete_objects_Permission + + + Assignor + Manager + + + + + _Modify_portal_content_Permission + + + Assignee + Assignor + Manager + Owner + + + + + __before_publishing_traverse__ + + + + + + + + + + _defined_in_class + 1 + + + _hookname + __before_publishing_traverse__ + + + _list + + + AAAAAAAAAAI= + + + + + _prior + + + + + + + + + + + __before_traverse__ + + + + + + 99 + ERP5 Web Section/rjsunsafe + + + + AAAAAAAAAAI= + + + + + + + __translation_dict + + + + + + _identity_criterion + + AAAAAAAAAAM= + + + + _range_criterion + + AAAAAAAAAAQ= + + + + categories + + + caching_policy/must-revalidate + + + + + description + + + + + + empty_criterion_valid + 0 + + + id + rjsunsafe + + + portal_type + Web Section + + + short_title + + + + + + skin_selection_name + RJSUnsafe + + + title + RJS Unsafe + + + visible + 0 + + + workflow_history + + AAAAAAAAAAU= + + + + + + + + + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + + + + + + + + + + + + data + + + + category_publication_workflow + + AAAAAAAAAAY= + + + + edit_workflow + + AAAAAAAAAAc= + + + + + + + + + + + + + + + + + + + action + + + + + + actor + zope + + + comment + + + + error_message + + + + time + + + + + + + + + + + 1478178617.74 + UTC + + + + + + + validation_state + embedded + + + + + + + + + + + + + + + + + action + edit + + + actor + zope + + + comment + + + + + + error_message + + + + serial + 955.2070.19535.2099 + + + state + current + + + time + + + + + + + + + + + 1478178649.5 + UTC + + + + + + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint.xml new file mode 100644 index 00000000000..8e9e53802f6 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint.xml @@ -0,0 +1,26 @@ + + + + + + + + + + _objects + + + + + + id + miniPaint + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.js new file mode 100644 index 00000000000..c279784f1c5 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.js @@ -0,0 +1,42 @@ +/** + * main config file + * + * @author ViliusL + */ + +//canvas layers +var canvas_back = document.getElementById("canvas_back").getContext("2d"); //layer for grid/transparency +var canvas_front = document.getElementById("canvas_front").getContext("2d"); //tmp layer +var canvas_grid = document.getElementById("canvas_grid").getContext("2d"); //grid layer +var canvas_preview = document.getElementById("canvas_preview").getContext("2d"); //mini preview + +//global settings +var VERSION = '3.2'; +var WIDTH; //canvas midth +var HEIGHT; //canvas height +var COLOR = '#0000ff'; //active color +var ALPHA = 255; //active color alpha +var LANG = 'en'; //active language + +var DRAW_TOOLS_CONFIG = [ + {name: 'select_tool', title: 'Select object tool', icon: ['sprites.png', 0+7, 2], attributes: {} }, + {name: 'select_square', title: 'Select area tool', icon: ['sprites.png', -50+4, 5], attributes: {} }, + {name: 'magic_wand', title: 'Magic Wand Tool', icon: ['sprites.png', -150+1, -50+2], attributes: {power: 40, anti_aliasing: true} }, + {name: 'erase', title: 'Erase', icon: ['sprites.png', -100+3, 4], attributes: {size: 30, circle: true, strict: true} }, + {name: 'fill', title: 'Fill', icon: ['sprites.png', -150+3, 3], attributes: {power: 0, anti_aliasing: false} }, + {name: 'pick_color', title: 'Pick Color', icon: ['sprites.png', -200+3, 3], attributes: {} }, + {name: 'pencil', title: 'Pencil', icon: ['sprites.png', -250+3, 3], attributes: {} }, + {name: 'line', title: 'Draw line', icon: ['sprites.png', -300+3, 3], attributes: {size: 1, type_values: ['Simple', 'Multi-line', 'Arrow', 'Curve'] } }, + {name: 'letters', title: 'Draw letters', icon: ['sprites.png', -350+3, 4], attributes: {} }, + {name: 'draw_square', title: 'Draw rectangle', icon: ['sprites.png', -400+3, 5], attributes: {fill: false, square: false} }, + {name: 'draw_circle', title: 'Draw circle', icon: ['sprites.png', -450+3, 5], attributes: {fill: false, circle: false} }, + {name: 'brush', title: 'Brush', icon: ['sprites.png', -500+6, 3], attributes: {type: 'Brush', type_values: ['Brush', 'BezierCurve', 'Chrome', 'Fur', 'Grouped', 'Shaded', 'Sketchy'], size: 10, anti_aliasing: false }, on_update: 'update_brush', }, + {name: 'blur_tool', title: 'Blur tool', icon: ['sprites.png', -250+5, -50+2], attributes: {size: 30, power: 1} }, + {name: 'sharpen_tool', title: 'Sharpen tool', icon: ['sprites.png', -300+5, -50+2], attributes: {size: 30 } }, + {name: 'burn_dodge_tool', title: 'Burn/Dodge tool', icon: ['sprites.png', -500+3, -50+4], attributes: {burn: true, size: 30, power: 50} }, + {name: 'desaturate_tool', title: 'Desaturate', icon: ['sprites.png', -550+3, -00+4], attributes: {size: 50, anti_aliasing: true} }, + {name: 'bulge_pinch_tool',title: 'Bulge/Pinch tool', icon: ['sprites.png', -450+3, -100+3], attributes: {size: 50, radius: 80, bulge:true} }, + {name: 'clone_tool', title: 'Clone tool', icon: ['sprites.png', -350+4, -50+3], attributes: {size: 30, anti_aliasing: true} }, + {name: 'gradient_tool', title: 'Gradient', icon: ['sprites.png', -400+3, -50+4], attributes: {radial: false, power: 50} }, + {name: 'crop_tool', title: 'Crop', icon: ['sprites.png', -450+2, -50+2], attributes: { } }, +]; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.xml new file mode 100644 index 00000000000..f6b51ce9bf7 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/config.js.xml @@ -0,0 +1,28 @@ + + + + + + + + + + __name__ + config.js + + + content_type + application/javascript + + + precondition + + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img.xml new file mode 100644 index 00000000000..92bd6db7cd4 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img.xml @@ -0,0 +1,26 @@ + + + + + + + + + + _objects + + + + + + id + img + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.png b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4acd2315e28a1e72116fdc925554dde4dd60eb GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4kn<;H+e}VASGGi8c`CQpH@n-|Nd+J{LcJ;6*aG;@BjPx_A$fC=R5y#DmV!!f^fhGE3Rn*E*u?D%rZyg zfKU?$qaXw~HVCsuK$R*u-FQ+eqNCU$AOOW27J&__EP_l*P|T>#wV_49$pMTvoP4c; z&?=xPP_T%>n?s4k1&W#cL=re1TN*e(IC1jzK!jEWCxr(tj5wWjNNxRMgjUBEhXb8V zIGxqv8|Quyr;pH`HG5BA6HXtYJIkz6mKCRu(4Cd@X*8gb;va87Z+NMDfPsArYy7+4 SGn0V%fx*+&&t;ucLK6ULHQMt4 literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.xml new file mode 100644 index 00000000000..96215877483 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/colorwheel.png.xml @@ -0,0 +1,28 @@ + + + + + + + + + + __name__ + colorwheel.png + + + content_type + image/png + + + precondition + + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.png b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.png new file mode 100644 index 0000000000000000000000000000000000000000..1cdf1958ec31c8ae582bb177daffc6d66e90d204 GIT binary patch literal 385 zcmV-{0e=38P)7e?bJnMbS}o5fQp+C4)bp)Vf9r1*OnIi(tjtAP5dcp{CfHmQX`7 z6wyHte=Uj)HGjZ;9YU(tB$9S`+&%8z=ic2Bhy=edQMhpE7BIN(i<11bSbgW0$NmqW0k|M4nqX1)Q)XPqB)Ilm&MSw9VizBE>E70?41a|Oko%nXp`aBAE zg{SgH=M9w0a|hE14;NxMpuWG2$I_~EB4haa$lES^SLP4!nvq^4qQxb8XPI!<&z%QDT2s07kke&b+$ke-2Vq%Xil4(7)C f2S6kku?749fn%L1_=$gt00000NkvXXu0mjf>xrp9 literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.xml new file mode 100644 index 00000000000..0e15ff09231 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/favicon.png.xml @@ -0,0 +1,28 @@ + + + + + + + + + + __name__ + favicon.png + + + content_type + image/png + + + precondition + + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.png b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.png new file mode 100644 index 0000000000000000000000000000000000000000..c93d189d38e8e853ed6548408279994b7d88f845 GIT binary patch literal 1388 zcmV-y1(W)TP)JC&7{YHey-Tv`|q5R;XYR#Q_bC@38t9S|50u(Gh2o0yfGl^Yuyz{J3~ zw789pjevcCWMyP9G%(oY*r=$eb$E3+I5>UI9UA}u00eYWPE!CgX1n^Tn|1&I1YJo) zK~z}7?U&hNnm`nW1I)@6#0A9~ty@fL?Y_6~|62Xe3}Gx8(xmNW|C<=}`O8A#N8J<228hpgg6F!j#Es&*@vN1&74~AjH`U3v)(hA-&#M4hh_X`Fe zFUbJDr;d<47y+CN@7TCCM33bKMJdIHRdsd6W7ZnN4j%=+7Pf*4J&1Fj`=-PF*P+2f zFoys<31ZHZr5nTfDhc`)kC@Mw;zcE7MS|D~92EMewyFP`^MOQ?L=ZHtMKv z03^t{6(k4=7WtVVaxL&IED{{^tra9D2MD$~36>BbzZK-$EqEs7(g?sWwlF+<|K1A1 zenB89L(cV7$~S46a$bv7uGC_&m`SD966qHN0mJ({5`fq0CQZjRW)lG~AW*ee;N}m4 z`A*LG47^q_pm*E|@ItO3_$*~l5119qNidUBO#%hM*a!p(=Y-YW530aR|WchQFd_9(5dxj|0KlM1DaL#~+-)@La-+W1M9WOd$xIz%_9695nF|*fEd*Jj;1m-X3pna}t- zKX?d;w*oSd06cbfzPUv<$dm*@D{%D>QS576;m9N}%NHIXMu zY|mzR0e+%jkn5=gpMifR>UzAtFL3pPmu$ah*at)K69t1rsBZADIF0bWz|{|4et*5k zO=fa4fdB@4ew`uU75Lgyf~~)%VaHguS{Er}Uo>J4B4j?Ff5NGNTwC^6L0f+fo)ZWG zvx0+Q12TMK=X^(SSAQ+yoRgqnFbEPH=wv1X+nE#A?jetW>K_Y%WzQ`S0Sw@ihTGv} zyRm#nV7hGQZ^%ht_dIgKVK$lI()cBU$uS8%0^&E|GZF|AG)Z$3jK$~CX!M%d1os8` z7JLaFg1l@6CkQ4GjO}vXyHlhq*lxj>;4|=L)d)_f6H9L<6Yw1TOGAfI*cBk=_+E3Q zJ{$gOrO>pZkX4o?i5tC7FpyFy!?%Kht#I1{uVhtK2gmya14d^(HH*^lMXnGMAg=vB z0iqD_CJnEZ8Npf&hm~9VJ%Y7H#%Iq(s~fFp0nyjn*R^YZk3cE#Q`QQWVucIf&C0ra zBYapOWh;O|BjB&W&zfhj;Nn4nJQFOJ?@7QcFWu;S1@k#J3cJg0r&N}W(i97P(en%! zbOekMZyg1A)$n}T_YCNU6`Gq`)(R8?J_Dcj@sYXi1TJ>|Kc?vj`@+-}bZHB@H@dv0 zlUZP6eL!RTdAF{*yhh_^Z?f!-M8JE;e_mPGw(pBQNbzLD!3z@jZr|b2&`t<+Utv8V u-Wi^ru=C68iFg$Hesw*b4le%ZU*;!YK4E4L`l2iV0000im literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.xml new file mode 100644 index 00000000000..fe018ae308d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/logo.png.xml @@ -0,0 +1,28 @@ + + + + + + + + + + __name__ + logo.png + + + content_type + image/png + + + precondition + + + + title + + + + + + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.jpg b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2eed2af3b5b785b29dec7fa0f97dae07340ee454 GIT binary patch literal 194842 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 CAo2hJ literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.xml new file mode 100644 index 00000000000..f069b77e785 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/preview.jpg.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>preview.jpg</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/jpeg</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.png b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.png new file mode 100644 index 0000000000000000000000000000000000000000..59c3766a73932feef0ca3b9fc6f3dd036805e97f GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^96-#?!3HFqW}i_7QdyoZjv*3LOD`C5u_*F5T%2=K zxF^#^;O&vw)g0Wr8?MgJO1#;d`I+NSN5_fJHcO^VxV=Ivt;~HDSHsLeub=Mn3>&U3 zx^_x*#|v?WGnSl+51RIxTc-bSivApXG3vASIm<8i{@NdrkWAijTD<jb7vm4*o!LNJ O89ZJ6T-G@yGywo!D?e-i literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.xml new file mode 100644 index 00000000000..e8be7a32714 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/right.png.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>right.png</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.png b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef360db06d47503fe846ce885cf08262d263596 GIT binary patch literal 9275 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 HY{LEzg_}S; literal 0 HcmV?d00001 diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.xml new file mode 100644 index 00000000000..15d70320c21 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/img/sprites.png.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>sprites.png</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/png</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js.xml new file mode 100644 index 00000000000..2b3798ee4af --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>js</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.js new file mode 100644 index 00000000000..567ca7a7273 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.js @@ -0,0 +1,1674 @@ +/* global MAIN, HELPER, LAYER, EDIT, POP, GUI, EVENTS, IMAGE, EL, fx, ImageFilters, sketchy_brush, shaded_brush, chrome_brush, BezierCurveBrush */ +/* global WIDTH, HEIGHT, COLOR, canvas_active, canvas_front */ + +var DRAW = new DRAW_TOOLS_CLASS(); + +/** + * manages draw tools + * + * @author ViliusL + */ +function DRAW_TOOLS_CLASS() { + + /** + * user action for selected area + */ + this.select_square_action = ''; + + /** + * previous line coordinates [x, y] + */ + this.last_line = []; + + /** + * user selected area config - array(x, y, width, height) + */ + this.select_data = false; + + /** + * currently used tool + */ + this.active_tool = 'select_tool'; + + /** + * line points data for curved line + */ + var curve_points = []; + + /** + * image data for cloning tool + */ + var clone_data = false; + + /** + * fx library object + */ + var fx_filter = false; + + //credits to Victor Haydin + this.toolFiller = function (context, W, H, x, y, color_to, sensitivity, anti_aliasing) { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + var img_tmp = canvas_front.getImageData(0, 0, W, H); + var imgData_tmp = img_tmp.data; + + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var k = ((y * (img.width * 4)) + (x * 4)); + var dx = [0, -1, +1, 0]; + var dy = [-1, 0, 0, +1]; + var color_from = { + r: imgData[k + 0], + g: imgData[k + 1], + b: imgData[k + 2], + a: imgData[k + 3] + }; + if (color_from.r == color_to.r && color_from.g == color_to.g && color_from.b == color_to.b && color_from.a == color_to.a) { + return false; + } + var stack = []; + stack.push([x, y]); + while (stack.length > 0) { + var curPoint = stack.pop(); + for (var i = 0; i < 4; i++) { + var nextPointX = curPoint[0] + dx[i]; + var nextPointY = curPoint[1] + dy[i]; + if (nextPointX < 0 || nextPointY < 0 || nextPointX >= W || nextPointY >= H) + continue; + var k = (nextPointY * W + nextPointX) * 4; + if (imgData_tmp[k + 3] != 0) + continue; //already parsed + + //check + if (Math.abs(imgData[k + 0] - color_from.r) <= sensitivity && + Math.abs(imgData[k + 1] - color_from.g) <= sensitivity && + Math.abs(imgData[k + 2] - color_from.b) <= sensitivity && + Math.abs(imgData[k + 3] - color_from.a) <= sensitivity) { + + //fill pixel + imgData_tmp[k] = color_to.r; //r + imgData_tmp[k + 1] = color_to.g; //g + imgData_tmp[k + 2] = color_to.b; //b + imgData_tmp[k + 3] = color_to.a; //a + + stack.push([nextPointX, nextPointY]); + } + } + } + canvas_front.putImageData(img_tmp, 0, 0); + if (anti_aliasing == true) { + context.shadowColor = "rgba(" + color_to.r + ", " + color_to.g + ", " + color_to.b + ", " + color_to.a / 255 + ")"; + context.shadowBlur = 5; + } + context.drawImage(document.getElementById("canvas_front"), 0, 0); + //reset + context.shadowBlur = 0; + }; + + this.tool_magic_wand = function (context, W, H, x, y, sensitivity, anti_aliasing) { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + + canvas_front.rect(0, 0, WIDTH, HEIGHT); + canvas_front.fillStyle = "rgba(255, 255, 255, 0)"; + canvas_front.fill(); + + var img_tmp = canvas_front.getImageData(0, 0, W, H); + var imgData_tmp = img_tmp.data; + + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var k = ((y * (img.width * 4)) + (x * 4)); + var dx = [0, -1, +1, 0]; + var dy = [-1, 0, 0, +1]; + var color_to = { + r: 255, + g: 255, + b: 255, + a: 255 + }; + var color_from = { + r: imgData[k + 0], + g: imgData[k + 1], + b: imgData[k + 2], + a: imgData[k + 3] + }; + if (color_from.r == color_to.r && + color_from.g == color_to.g && + color_from.b == color_to.b && + color_from.a == 0) { + return false; + } + var stack = []; + stack.push([x, y]); + while (stack.length > 0) { + var curPoint = stack.pop(); + for (var i = 0; i < 4; i++) { + var nextPointX = curPoint[0] + dx[i]; + var nextPointY = curPoint[1] + dy[i]; + if (nextPointX < 0 || nextPointY < 0 || nextPointX >= W || nextPointY >= H) + continue; + var k = (nextPointY * W + nextPointX) * 4; + if (imgData_tmp[k + 3] != 0) + continue; //already parsed + + if (Math.abs(imgData[k] - color_from.r) <= sensitivity + && Math.abs(imgData[k + 1] - color_from.g) <= sensitivity + && Math.abs(imgData[k + 2] - color_from.b) <= sensitivity + && Math.abs(imgData[k + 3] - color_from.a) <= sensitivity) { + imgData_tmp[k] = color_to.r; //r + imgData_tmp[k + 1] = color_to.g; //g + imgData_tmp[k + 2] = color_to.b; //b + imgData_tmp[k + 3] = color_to.a; //a + + stack.push([nextPointX, nextPointY]); + } + } + } + //destination-out + blur = anti-aliasing + if (anti_aliasing == true) + img_tmp = ImageFilters.StackBlur(img_tmp, 2); + canvas_front.putImageData(img_tmp, 0, 0); + context.globalCompositeOperation = "destination-out"; + context.drawImage(document.getElementById("canvas_front"), 0, 0); + //reset + context.shadowBlur = 0; + context.globalCompositeOperation = 'source-over'; + }; + + //type = click, right_click, drag, move, release + this.select_tool = function (type, mouse, event) { + if (mouse == undefined) + return false; + if (mouse.valid == false) + return true; + if (mouse.click_valid == false) + return true; + if (event != undefined && event.target.id == "canvas_preview") + return true; + var active_layer_obj = document.getElementById(LAYER.layers[LAYER.layer_active].name); + + if (type == 'drag') { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + + if(active_layer_obj.style.visibility != 'hidden'){ + //hide active layer + active_layer_obj.style.visibility = 'hidden'; + } + + if(EVENTS.ctrl_pressed == true){ + //ctrl is pressed + var xx = mouse.x; + var yy = mouse.y; + if (Math.abs(mouse.click_x - mouse.x) < Math.abs(mouse.click_y - mouse.y)) + xx = mouse.click_x; + else + yy = mouse.click_y; + canvas_front.drawImage(canvas_active(true), xx - mouse.click_x, yy - mouse.click_y); + } + else{ + canvas_front.drawImage(canvas_active(true), mouse.x - mouse.click_x, mouse.y - mouse.click_y); + } + } + else if (type == 'release') { + //show active layer + active_layer_obj.style.visibility = 'visible'; + + if (mouse.valid == false || mouse.click_x === false){ + return false; + } + if (mouse.x - mouse.click_x == 0 && mouse.y - mouse.click_y == 0){ + return false; + } + EDIT.save_state(); + var tmp = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + if(EVENTS.ctrl_pressed == true){ + //ctrl is pressed + var xx = mouse.x; + var yy = mouse.y; + if (Math.abs(mouse.click_x - mouse.x) < Math.abs(mouse.click_y - mouse.y)) + xx = mouse.click_x; + else + yy = mouse.click_y; + canvas_active().putImageData(tmp, xx - mouse.click_x, yy - mouse.click_y); + } + else{ + canvas_active().putImageData(tmp, mouse.x - mouse.click_x, mouse.y - mouse.click_y); + } + } + }; + this.magic_wand = function (type, mouse, event) { + if (mouse.valid == false) + return true; + if (type == 'click') { + EDIT.save_state(); + this.tool_magic_wand(canvas_active(), WIDTH, HEIGHT, mouse.x, mouse.y, GUI.action_data().attributes.power, GUI.action_data().attributes.anti_aliasing); + } + }; + this.erase = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var strict = GUI.action_data().attributes.strict; + var size = GUI.action_data().attributes.size; + var is_circle = GUI.action_data().attributes.circle; + + var strict_element = document.getElementById('strict'); + if(is_circle == false){ + //hide strict controlls + if(strict_element != undefined) + strict_element.style.display = 'none'; + } + else{ + //show strict controlls + if(strict_element != undefined) + strict_element.style.display = 'block'; + } + + if (type == 'click') { + EDIT.save_state(); + + canvas_active().beginPath(); + canvas_active().lineWidth = size; + canvas_active().lineCap = 'round'; + canvas_active().lineJoin = 'round'; + if (ALPHA < 255) + canvas_active().strokeStyle = "rgba(255, 255, 255, " + ALPHA / 255 / 10 + ")"; + else + canvas_active().strokeStyle = "rgba(255, 255, 255, 1)"; + + if (is_circle == false) { + //rectangle + canvas_active().save(); + canvas_active().globalCompositeOperation = 'destination-out'; + canvas_active().fillStyle = "rgba(255, 255, 255, " + ALPHA / 255 + ")"; + canvas_active().fillRect(mouse.x - Math.ceil(size / 2) + 1, mouse.y - Math.ceil(size / 2) + 1, size, size); + canvas_active().restore(); + } + else { + //circle + canvas_active().save(); + + if (strict == false) { + var radgrad = canvas_active().createRadialGradient( + mouse.x, mouse.y, size / 8, + mouse.x, mouse.y, size / 2); + radgrad.addColorStop(0, "rgba(255, 255, 255, " + ALPHA / 255 + ")"); + radgrad.addColorStop(1, "rgba(255, 255, 255, 0)"); + } + + //set Composite + canvas_active().globalCompositeOperation = 'destination-out'; + if (strict == true) + canvas_active().fillStyle = "rgba(255, 255, 255, " + ALPHA / 255 + ")"; + else + canvas_active().fillStyle = radgrad; + canvas_active().beginPath(); + canvas_active().arc(mouse.x, mouse.y, size / 2, 0, Math.PI * 2, true); + canvas_active().fill(); + canvas_active().restore(); + } + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + canvas_active().save(); + + if (strict == false && is_circle == true) { + var radgrad = canvas_active().createRadialGradient( + mouse.x, mouse.y, size / 10, + mouse.x, mouse.y, size / 2); + if (ALPHA < 255) + radgrad.addColorStop(0, "rgba(255, 255, 255, " + ALPHA / 255 / 10 + ")"); + else + radgrad.addColorStop(0, "rgba(255, 255, 255, 1)"); + radgrad.addColorStop(1, "rgba(255, 255, 255, 0)"); + canvas_active().strokeStyle = radgrad; + } + + canvas_active().save(); + canvas_active().globalCompositeOperation = 'destination-out'; + + canvas_active().beginPath(); + canvas_active().moveTo(mouse.last_x, mouse.last_y); + canvas_active().lineTo(mouse.x, mouse.y); + canvas_active().stroke(); + + canvas_active().restore(); + + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + if (is_circle == false) { + canvas_front.lineWidth = 1; + EL.rectangle_dashed(canvas_front, mouse.x - Math.ceil(size / 2) + 1, mouse.y - Math.ceil(size / 2) + 1, mouse.x + Math.floor(size / 2), mouse.y + Math.floor(size / 2), 1, '#000000'); + } + else { + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + } + else if (type == 'move') { + var size1 = Math.floor((size) / 2); + var size2 = Math.floor((size) / 2); + if (size % 2 == 0) + size2--; + else { + size1--; + } + + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + if (is_circle == false) { + canvas_front.lineWidth = 1; + EL.rectangle_dashed(canvas_front, mouse.x - Math.ceil(size / 2) + 1, mouse.y - Math.ceil(size / 2) + 1, mouse.x + Math.floor(size / 2), mouse.y + Math.floor(size / 2), 1, '#000000'); + } + else { + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + } + }; + this.fill = function (type, mouse, event) { + if (mouse.valid == false) + return true; + if (type == 'click') { + EDIT.save_state(); + var color_to = HELPER.hex2rgb(COLOR); + color_to.a = ALPHA; + DRAW.toolFiller(canvas_active(), WIDTH, HEIGHT, mouse.x, mouse.y, color_to, GUI.action_data().attributes.power, GUI.action_data().attributes.anti_aliasing); + } + }; + this.pick_color = function (type, mouse, event) { + if (mouse.valid == false) + return true; + if (type == 'click') { + var c = canvas_active().getImageData(mouse.x, mouse.y, 1, 1).data; + COLOR = "#" + ("000000" + HELPER.rgbToHex(c[0], c[1], c[2])).slice(-6); + + //set alpha + ALPHA = c[3]; + document.getElementById("rgb_a").value = ALPHA; + + GUI.sync_colors(); + } + }; + this.pencil = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var color_rgb = HELPER.hex2rgb(COLOR); + if (type == 'click') { + EDIT.save_state(); + } + else if (type == 'drag') { + //why no simple lines? this way turns off aliasing + if (mouse.last_x != false && mouse.last_y != false) { + //saving + dist_x = mouse.last_x - mouse.x; + dist_y = mouse.last_y - mouse.y; + distance = Math.sqrt((dist_x * dist_x) + (dist_y * dist_y)); + radiance = Math.atan2(dist_y, dist_x); + for (var i = 0; i < distance; i++) { + x_tmp = mouse.x + Math.cos(radiance) * i; + y_tmp = mouse.y + Math.sin(radiance) * i; + + x_tmp = Math.round(x_tmp); + y_tmp = Math.round(y_tmp); + var my_color = HELPER.hex2rgb(COLOR); + canvas_active().fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().fillRect(x_tmp, y_tmp, 1, 1); + } + } + } + else if (type == 'release') { + canvas_active().fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().fillRect(mouse.x, mouse.y, 1, 1); + } + }; + this.line = function (type, mouse, event) { + if (mouse.click_valid == false) + return false; + var color_rgb = HELPER.hex2rgb(COLOR); + + //horizontal/vertical only + var xx = mouse.x; + var yy = mouse.y; + var from_x = mouse.click_x; + var from_y = mouse.click_y; + var attribute_type = GUI.action_data().attributes.type; + + if (type == 'move') { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.lineWidth = GUI.action_data().attributes.size; + + if (attribute_type == 'Curve') { + //curve + if (curve_points.length == 2) { + canvas_front.beginPath(); + canvas_front.moveTo(curve_points[0][0] + 0.5, curve_points[0][1] + 0.5); + canvas_front.quadraticCurveTo(mouse.x + 0.5, mouse.y + 0.5, curve_points[1][0], curve_points[1][1]); + canvas_front.stroke(); + } + } + } + else if (type == 'drag') { + document.body.style.cursor = "crosshair"; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.beginPath(); + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.lineWidth = GUI.action_data().attributes.size; + if (attribute_type == 'Multi-line' && this.last_line[0] != undefined) { + from_x = this.last_line[0]; + from_y = this.last_line[1]; + } + if (EVENTS.ctrl_pressed == true) { + if (Math.abs(from_x - mouse.x) < Math.abs(from_y - mouse.y)) + xx = from_x; + else + yy = from_y; + } + + //arrow + if (attribute_type == 'Arrow') { + var headlen = GUI.action_data().attributes.size * 5; + if (headlen < 15) + headlen = 15; + EL.arrow(canvas_front, from_x + 0.5, from_y + 0.5, xx + 0.5, yy + 0.5, headlen); + } + //line + else { + canvas_front.moveTo(from_x + 0.5, from_y + 0.5); + canvas_front.lineTo(xx + 0.5, yy + 0.5); + canvas_front.stroke(); + } + } + else if (type == 'click') { + //curve + if (attribute_type == 'Curve') { + EDIT.save_state(); + + canvas_active().beginPath(); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = GUI.action_data().attributes.size; + if (EVENTS.ctrl_pressed == true) { + if (Math.abs(from_x - mouse.x) < Math.abs(from_y - mouse.y)) + xx = from_x; + else + yy = from_y; + } + if (curve_points.length == 2) { + canvas_active().beginPath(); + canvas_active().moveTo(curve_points[0][0] + 0.5, curve_points[0][1] + 0.5); + canvas_active().quadraticCurveTo(xx + 0.5, yy + 0.5, curve_points[1][0], curve_points[1][1]); + canvas_active().stroke(); + curve_points = []; + } + } + } + else if (type == 'release') { + document.body.style.cursor = "auto"; + if (mouse.x - mouse.click_x == 0 && mouse.y - mouse.click_y == 0 && attribute_type != 'Multi-line') + return false; + + EDIT.save_state(); + + canvas_active().beginPath(); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = GUI.action_data().attributes.size; + if (attribute_type == 'Multi-line' && this.last_line[0] != undefined) { + from_x = DRAW.last_line[0]; + from_y = DRAW.last_line[1]; + } + if (EVENTS.ctrl_pressed == true) { + if (Math.abs(from_x - mouse.x) < Math.abs(from_y - mouse.y)) + xx = from_x; + else + yy = from_y; + } + //arrow + if (attribute_type == 'Arrow') { + var headlen = GUI.action_data().attributes.size * 5; + if (headlen < 15) + headlen = 15; + EL.arrow(canvas_active(), from_x + 0.5, from_y + 0.5, xx + 0.5, yy + 0.5, headlen); + this.last_line[0] = xx; + this.last_line[1] = yy; + } + //curve + else if (attribute_type == 'Curve') { + if (curve_points.length == 0 && (mouse.click_x != mouse.x || mouse.click_y != mouse.y)) { + curve_points.push([mouse.click_x, mouse.click_y]); + curve_points.push([xx, yy]); + } + else if (curve_points.length == 2) + curve_points = []; + } + //line + else { + EL.line(canvas_active(), from_x, from_y, xx, yy); + this.last_line[0] = xx; + this.last_line[1] = yy; + } + } + }; + this.letters = function (type, mouse, event) { + var _this = this; + if (mouse.valid == false) + return true; + var xx = mouse.x; + var yy = mouse.y; + if (type == 'click') { + POP.add({name: "text", title: "Text:", value: "", type: 'textarea'}); + POP.add({name: "size", title: "Size:", value: 20, range: [2, 1000], step: 2}); + POP.add({name: "color", title: "Color:", value: "#000000", type: "color"}); + POP.add({name: "style", title: "Font style:", values: ["Normal", "Italic", "Bold", "Bold Italic"], type: 'select'}); + POP.add({name: "family", title: "Font family:", values: ["Arial", "Courier", "Impact", "Helvetica", "monospace", "Times New Roman", "Verdana"], type: 'select'}); + POP.add({name: "size_3d", title: "3D size:", value: 0, range: [0, 200]}); + POP.add({name: "pos_3d", title: "3D position:", values: ["Top-left", "Top-right", "Bottom-left", "Bottom-right"], type: 'select'}); + POP.add({name: "shadow", title: "Shadow:", values: ["No", "Yes"]}); + POP.add({name: "shadow_blur", title: "Shadow blur:", value: 6, range: [1, 20]}); + POP.add({name: "shadow_color", title: "Shadow color:", value: "#000000", type: "color"}); + POP.add({name: "fill_style", title: "Fill style:", values: ["Fill", "Stroke", "Both"], type: 'select'}); + POP.add({name: "stroke_size", title: "Stroke size:", value: 1, range: [1, 100]}); + POP.preview_in_main = true; + POP.show( + 'Text', + function (user_response) { + EDIT.save_state(); + var trim_details = IMAGE.trim_info(canvas_active(true)); + if (trim_details.empty == false) { + LAYER.layer_add(); + } + text = user_response.text.split("\n"); + for (var i in text) { + user_response.text = text[i]; + var yyy = yy + i * (parseInt(user_response.size) + 2); + _this.letters_render(canvas_active(), xx, yyy, user_response); + } + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + }, + function (user_response) { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + text = user_response.text.split("\n"); + for (var i in text) { + user_response.text = text[i]; + var yyy = yy + i * (parseInt(user_response.size) + 2); + _this.letters_render(canvas_front, xx, yyy, user_response); + } + } + ); + } + }; + this.letters_render = function (canvas, xx, yy, user_response) { + var text = user_response.text; + var size = parseInt(user_response.size); + var color = user_response.color; + var dpth = parseInt(user_response.size_3d); + var pos_3d = user_response.pos_3d; + var shadow = user_response.shadow; + var shadow_blur = parseInt(user_response.shadow_blur); + var shadow_color = user_response.shadow_color; + var font = user_response.family; + var font_style = user_response.style; + var fill_style = user_response.fill_style; + var stroke_size = user_response.stroke_size; + var dx; + var dy; + if (pos_3d == "Top-left") { + dx = -1; + dy = -1; + } + else if (pos_3d == "Top-right") { + dx = 1; + dy = -1; + } + else if (pos_3d == "Bottom-left") { + dx = -1; + dy = 1; + } + else if (pos_3d == "Bottom-right") { + dx = 1; + dy = 1; + } + + var color_rgb = HELPER.hex2rgb(color); + canvas.fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas.font = font_style + " " + size + "px " + font; + var letters_height = HELPER.font_pixel_to_height(size); + + //shadow + if (shadow == 'Yes') { + canvas.save(); + canvas.shadowColor = shadow_color; + canvas.shadowBlur = shadow_blur; + canvas.shadowOffsetX = dx; + canvas.shadowOffsetY = dy; + canvas.fillText(text, xx + dx * (dpth - 1), yy + letters_height + dy * (dpth - 1)); + canvas.restore(); + } + + //3d + if (dpth > 0) { + canvas.fillStyle = HELPER.darkenColor(COLOR, -30); + //canvas.fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + for (cnt = 0; cnt < dpth; cnt++) + canvas.fillText(text, xx + dx * cnt, yy + letters_height + dy * cnt); + //color_rgb = HELPER.hex2rgb(COLOR); + } + + //main text + canvas.fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas.lineWidth = stroke_size; + if (fill_style == 'Fill' || fill_style == 'Both') + canvas.fillText(text, xx, yy + letters_height); + if (fill_style == 'Stroke' || fill_style == 'Both') + canvas.strokeText(text, xx, yy + letters_height); + + GUI.zoom(); + }; + this.draw_square = function (type, mouse, event) { + if (mouse.click_valid == false) + return true; + var color_rgb = HELPER.hex2rgb(COLOR); + var fill = GUI.action_data().attributes.fill; + var width = mouse.x - mouse.click_x; + var height = mouse.y - mouse.click_y; + + if (type == 'drag') { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.lineWidth = 1; + + if (GUI.action_data().attributes.square == true) + EL.square(canvas_front, mouse.click_x, mouse.click_y, width, height, fill); + else + EL.rectangle(canvas_front, mouse.click_x, mouse.click_y, width, height, fill); + } + else if (type == 'release') { + if(mouse.x == mouse.click_x && mouse.y == mouse.click_y) + return false; + EDIT.save_state(); + + canvas_active().fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 1; + + if (GUI.action_data().attributes.square == true) + EL.square(canvas_active(), mouse.click_x, mouse.click_y, width, height, fill); + else + EL.rectangle(canvas_active(), mouse.click_x, mouse.click_y, width, height, fill); + } + }; + this.draw_circle = function (type, mouse, event) { + if (mouse.click_valid == false) + return true; + var color_rgb = HELPER.hex2rgb(COLOR); + if (type == 'drag') { + dist_x = mouse.x - mouse.click_x; + dist_y = mouse.y - mouse.click_y; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + if (GUI.action_data().attributes.circle == true) + dist_x = dist_y = Math.min(dist_x, dist_y); + if (GUI.action_data().attributes.fill == true) + EL.ellipse_by_center(canvas_front, mouse.click_x, mouse.click_y, dist_x * 2, dist_y * 2, "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")", true); + else + EL.ellipse_by_center(canvas_front, mouse.click_x, mouse.click_y, dist_x * 2, dist_y * 2, "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"); + } + else if (type == 'release') { + dist_x = mouse.x - mouse.click_x; + dist_y = mouse.y - mouse.click_y; + if(dist_x == 0 && dist_y == 0) + return false; + EDIT.save_state(); + if (GUI.action_data().attributes.circle == true) + dist_x = dist_y = Math.min(dist_x, dist_y); + canvas_active().lineWidth = 1; + if (GUI.action_data().attributes.fill == true) + EL.ellipse_by_center(canvas_active(), mouse.click_x, mouse.click_y, dist_x * 2, dist_y * 2, "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")", true); + else + EL.ellipse_by_center(canvas_active(), mouse.click_x, mouse.click_y, dist_x * 2, dist_y * 2, "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"); + } + }; + this.update_brush = function () { + document.getElementById('anti_aliasing').style.display = ''; + if (GUI.action_data().attributes.type != 'Brush') + document.getElementById('anti_aliasing').style.display = 'none'; + }; + this.desaturate_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var size = GUI.action_data().attributes.size; + var xx = mouse.x - size / 2; + var yy = mouse.y - size / 2; + if (xx < 0) + xx = 0; + if (yy < 0) + yy = 0; + + if (type == 'click') { + EDIT.save_state(); + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.GrayScale(imageData); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front"), GUI.action_data().attributes.anti_aliasing); + } + else if (type == 'drag') { + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.GrayScale(imageData); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front"), GUI.action_data().attributes.anti_aliasing); + } + if (type == 'move' || type == 'drag') { + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + }; + this.brush = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var brush_type = GUI.action_data().attributes.type; + var color_rgb = HELPER.hex2rgb(COLOR); + var size = GUI.action_data().attributes.size; + var original_size = GUI.action_data().attributes.size; + + if (type == 'click') + EDIT.save_state(); + + if (brush_type == 'Brush') { + if (type == 'click') { + //init settings + canvas_active().beginPath(); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = GUI.action_data().attributes.size; + canvas_active().lineCap = 'round'; + canvas_active().lineJoin = 'round'; + + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + if (ALPHA < 255) { + canvas_front.beginPath(); + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.lineWidth = GUI.action_data().attributes.size; + canvas_front.lineCap = 'round'; + canvas_front.lineJoin = 'round'; + } + + /*canvas_front.beginPath(); + canvas_front.arc(mouse.x, mouse.y, GUI.action_data().attributes.size / 2, 0, 2 * Math.PI, false); + canvas_front.fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.fill();*/ + + //blur + canvas_active().shadowBlur = 0; + if (GUI.action_data().attributes.anti_aliasing == true) { + canvas_active().shadowColor = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().shadowBlur = Math.round(GUI.action_data().attributes.size); + } + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + + //detect line size + var max_speed = 20; + var power = 0.7; //max 1, how much speed reduce size, 1 means reduce to 0 + + var new_size = original_size - original_size / max_speed * mouse.speed_average * power; + new_size = Math.max(new_size, original_size/4); + new_size = Math.round(new_size); + canvas_front.lineWidth = new_size; + canvas_active().lineWidth = new_size; + + if (ALPHA == 255) + canvas_active().beginPath(); + canvas_active().moveTo(mouse.last_x, mouse.last_y); + canvas_active().lineTo(mouse.x, mouse.y); + if (ALPHA == 255) + canvas_active().stroke(); + + //now draw preview + if (ALPHA < 255) { + canvas_front.beginPath(); + //clean from last line + canvas_front.globalCompositeOperation = "destination-out"; + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", 1)"; + canvas_front.moveTo(mouse.last_x, mouse.last_y); + canvas_front.lineTo(mouse.x, mouse.y); + canvas_front.stroke(); + //reset + canvas_front.strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_front.globalCompositeOperation = "source-over"; + //draw new line segment + canvas_front.moveTo(mouse.last_x, mouse.last_y); + canvas_front.lineTo(mouse.x, mouse.y); + canvas_front.stroke(); + } + } + else if (type == 'release') { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + //paint everything + canvas_active().stroke(); + + //if mouse was not moved + if (mouse.click_x == mouse.x && mouse.click_y == mouse.y) { + canvas_active().beginPath(); + canvas_active().arc(mouse.x, mouse.y, GUI.action_data().attributes.size / 2, 0, 2 * Math.PI, false); + canvas_active().fillStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().fill(); + } + canvas_active().shadowBlur = 0; + } + else if (type == 'move') { + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + } + else if (brush_type == 'BezierCurve') { + if (type == 'click') + BezierCurveBrush.startCurve(mouse.x, mouse.y); + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + var color_rgb = HELPER.hex2rgb(COLOR); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 0.5; + + BezierCurveBrush.draw(canvas_active(), color_rgb, mouse.x, mouse.y, GUI.action_data().attributes.size); + } + } + else if (brush_type == 'Chrome') { + if (type == 'click') { + chrome_brush.init(canvas_active()); + chrome_brush.strokeStart(mouse.x, mouse.y); + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + var color_rgb = HELPER.hex2rgb(COLOR); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 1; + + chrome_brush.stroke(color_rgb, mouse.x, mouse.y, GUI.action_data().attributes.size); + } + } + else if (brush_type == 'Fur') { + if (type == 'click') { + points = new Array(); + prevMouseX = mouse.x; + prevMouseY = mouse.y; + count = 0; + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + var color_rgb = HELPER.hex2rgb(COLOR); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", 0.1)"; + canvas_active().lineWidth = 1; + + f = mouse.x; + c = mouse.y; + var e, b, a, g; + points.push([f, c]); + canvas_active().beginPath(); + canvas_active().moveTo(prevMouseX, prevMouseY); + canvas_active().lineTo(f, c); + canvas_active().stroke(); + for (e = 0; e < points.length; e++) { + b = points[e][0] - points[count][0]; + a = points[e][1] - points[count][1]; + g = b * b + a * a; + var g_size = Math.round(400 * GUI.action_data().attributes.size); + if (g < g_size && Math.random() > g / g_size) { + canvas_active().beginPath(); + canvas_active().moveTo(f + (b * 0.5), c + (a * 0.5)); + canvas_active().lineTo(f - (b * 0.5), c - (a * 0.5)); + canvas_active().stroke(); + } + } + prevMouseX = f; + prevMouseY = c; + count++; + } + } + else if (brush_type == 'Grouped') { + groups_n = GUI.action_data().attributes.size; + gsize = 10; + random_power = 5; + + if (type == 'click') { + chrome_brush.init(canvas_active()); + chrome_brush.strokeStart(mouse.x, mouse.y); + groups = []; + + for (var g = 0; g < groups_n; g++) { + groups[g] = {}; + groups[g].x = HELPER.getRandomInt(-gsize, gsize); + groups[g].y = HELPER.getRandomInt(-gsize, gsize); + } + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 0.5; + + for (var g in groups) { + canvas_active().beginPath(); + canvas_active().moveTo(mouse.last_x + groups[g].x, mouse.last_y + groups[g].y); + + //randomize here + groups[g].x += HELPER.getRandomInt(-random_power, random_power); + groups[g].y += HELPER.getRandomInt(-random_power, random_power); + if (groups[g].x < -gsize) + groups[g].x = -gsize + random_power; + if (groups[g].y < -gsize) + groups[g].y = -gsize + random_power; + if (groups[g].x > gsize) + groups[g].x = gsize - random_power; + if (groups[g].y > gsize) + groups[g].y = gsize - random_power; + + canvas_active().lineTo(mouse.x + groups[g].x, mouse.y + groups[g].y); + canvas_active().stroke(); + } + } + } + else if (brush_type == 'Shaded') { + if (type == 'click') { + shaded_brush.init(canvas_active()); + shaded_brush.strokeStart(mouse.x, mouse.y); + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + var color_rgb = HELPER.hex2rgb(COLOR); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 1; + + shaded_brush.stroke(color_rgb, mouse.x, mouse.y, GUI.action_data().attributes.size); + } + } + else if (brush_type == 'Sketchy') { + if (type == 'click') { + sketchy_brush.init(canvas_active()); + sketchy_brush.strokeStart(mouse.x, mouse.y); + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + var color_rgb = HELPER.hex2rgb(COLOR); + canvas_active().strokeStyle = "rgba(" + color_rgb.r + ", " + color_rgb.g + ", " + color_rgb.b + ", " + ALPHA / 255 + ")"; + canvas_active().lineWidth = 1; + + sketchy_brush.stroke(color_rgb, mouse.x, mouse.y, GUI.action_data().attributes.size); + } + } + }; + this.gradient_tool = function (type, mouse, event) { + if (mouse != undefined && mouse.valid == false && type != 'init') + return true; + var power = GUI.action_data().attributes.power; + if (power > 99) + power = 99; + + if (type == 'init') { + POP.add({name: "param1", title: "Color #1:", value: '#000000', type: 'color'}); + POP.add({name: "param2", title: "Transparency #1:", value: '255', range: [0, 255]}); + POP.add({name: "param3", title: "Color #2:", value: '#ffffff', type: 'color'}); + POP.add({name: "param4", title: "Transparency #2:", value: '255', range: [0, 255]}); + POP.show( + 'Text', + function (user_response) { + color1 = HELPER.hex2rgb(user_response.param1); + color1.a = parseInt(user_response.param2); + + color2 = HELPER.hex2rgb(user_response.param3); + color2.a = parseInt(user_response.param4); + } + ); + } + else if (type == 'drag') { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + + if (GUI.action_data().attributes.radial == false) { + //linear + canvas_front.rect(0, 0, WIDTH, HEIGHT); + + var grd = canvas_front.createLinearGradient( + mouse.click_x, mouse.click_y, + mouse.x, mouse.y); + + grd.addColorStop(0, "rgba(" + color1.r + ", " + color1.g + ", " + color1.b + ", " + color1.a / 255 + ")"); + grd.addColorStop(1, "rgba(" + color2.r + ", " + color2.g + ", " + color2.b + ", " + color2.a / 255 + ")"); + canvas_front.fillStyle = grd; + canvas_front.fill(); + } + else { + //radial + var dist_x = mouse.click_x - mouse.x; + var dist_y = mouse.click_y - mouse.y; + var distance = Math.sqrt((dist_x * dist_x) + (dist_y * dist_y)); + var radgrad = canvas_front.createRadialGradient( + mouse.click_x, mouse.click_y, distance * power / 100, + mouse.click_x, mouse.click_y, distance); + radgrad.addColorStop(0, "rgba(" + color1.r + ", " + color1.g + ", " + color1.b + ", " + color1.a / 255 + ")"); + radgrad.addColorStop(1, "rgba(" + color2.r + ", " + color2.g + ", " + color2.b + ", " + color2.a / 255 + ")"); + + canvas_front.fillStyle = radgrad; + canvas_front.fillRect(0, 0, WIDTH, HEIGHT); + } + //draw line + canvas_front.beginPath(); + canvas_front.strokeStyle = "#ff0000"; + canvas_front.lineWidth = 1; + var xx = mouse.x; + var yy = mouse.y; + canvas_front.moveTo(mouse.click_x + 0.5, mouse.click_y + 0.5); + canvas_front.lineTo(xx + 0.5, yy + 0.5); + canvas_front.stroke(); + } + else if (type == 'release') { + EDIT.save_state(); + if (GUI.action_data().attributes.radial == false) { + //linear + canvas_active().rect(0, 0, WIDTH, HEIGHT); + var grd = canvas_active().createLinearGradient( + mouse.click_x, mouse.click_y, + mouse.x, mouse.y); + + grd.addColorStop(0, "rgba(" + color1.r + ", " + color1.g + ", " + color1.b + ", " + color1.a / 255 + ")"); + grd.addColorStop(1, "rgba(" + color2.r + ", " + color2.g + ", " + color2.b + ", " + color2.a / 255 + ")"); + canvas_active().fillStyle = grd; + canvas_active().fill(); + } + else { + //radial + var dist_x = mouse.click_x - mouse.x; + var dist_y = mouse.click_y - mouse.y; + var distance = Math.sqrt((dist_x * dist_x) + (dist_y * dist_y)); + var radgrad = canvas_active().createRadialGradient( + mouse.click_x, mouse.click_y, distance * power / 100, + mouse.click_x, mouse.click_y, distance); + radgrad.addColorStop(0, "rgba(" + color1.r + ", " + color1.g + ", " + color1.b + ", " + color1.a / 255 + ")"); + radgrad.addColorStop(1, "rgba(" + color2.r + ", " + color2.g + ", " + color2.b + ", " + color2.a / 255 + ")"); + + canvas_active().fillStyle = radgrad; + canvas_active().fillRect(0, 0, WIDTH, HEIGHT); + } + } + }; + this.blur_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var size = GUI.action_data().attributes.size; + var size_half = Math.round(size / 2); + var xx = mouse.x - size / 2; + var yy = mouse.y - size / 2; + if (xx < 0) + xx = 0; + if (yy < 0) + yy = 0; + if (type == 'click') { + EDIT.save_state(); + var param1 = GUI.action_data().attributes.power; + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.StackBlur(imageData, param1); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front")); + + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + else if (type == 'drag') { + var param1 = GUI.action_data().attributes.power; + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.StackBlur(imageData, param1); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front")); + + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + else if (type == 'move') { + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + }; + this.sharpen_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var size = GUI.action_data().attributes.size; + var param1 = 0.5; + var xx = mouse.x - size / 2; + var yy = mouse.y - size / 2; + if (xx < 0) + xx = 0; + if (yy < 0) + yy = 0; + + if (type == 'click') { + EDIT.save_state(); + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.Sharpen(imageData, param1); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front")); + + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + else if (type == 'drag') { + var imageData = canvas_active().getImageData(xx, yy, size, size); + var filtered = ImageFilters.Sharpen(imageData, param1); //add effect + EL.image_round(canvas_active(), mouse.x, mouse.y, size, filtered, document.getElementById("canvas_front")); + + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + else if (type == 'move') { + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + }; + this.burn_dodge_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var size = GUI.action_data().attributes.size; + var power = GUI.action_data().attributes.power * 2.5; + + canvas_active().save(); + if (type == 'click') { + EDIT.save_state(); + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.save(); + EVENTS.clear_front_on_release = false; + + //init settings + canvas_active().beginPath(); + canvas_active().lineWidth = GUI.action_data().attributes.size; + canvas_active().lineCap = 'round'; + canvas_active().lineJoin = 'round'; + + canvas_front.beginPath(); + if (GUI.action_data().attributes.burn == true) + canvas_front.strokeStyle = "rgba(0, 0, 0, " + power / 255 + ")"; + else + canvas_front.strokeStyle = "rgba(255, 255, 255, " + power / 255 + ")"; + canvas_front.lineWidth = GUI.action_data().attributes.size; + canvas_front.lineCap = 'round'; + canvas_front.lineJoin = 'round'; + } + else if (type == 'drag' && mouse.last_x != false && mouse.last_y != false) { + //now draw preview + canvas_front.beginPath(); + //clean from last line + canvas_front.globalCompositeOperation = "destination-out"; + canvas_front.moveTo(mouse.last_x, mouse.last_y); + canvas_front.lineTo(mouse.x, mouse.y); + canvas_front.stroke(); + //reset + canvas_front.globalCompositeOperation = "source-over"; + //draw new line segment + canvas_front.moveTo(mouse.last_x, mouse.last_y); + canvas_front.lineTo(mouse.x, mouse.y); + canvas_front.stroke(); + } + else if (type == 'release') { + canvas_active().globalCompositeOperation = "soft-light"; + canvas_active().drawImage(document.getElementById("canvas_front"), 0, 0); + canvas_active().globalCompositeOperation = "source-over"; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EVENTS.clear_front_on_release = true; + + //if mouse was not moved + if (mouse.click_x == mouse.x && mouse.click_y == mouse.y) { + canvas_active().globalCompositeOperation = "soft-light"; + canvas_active().beginPath(); + canvas_active().arc(mouse.x, mouse.y, GUI.action_data().attributes.size / 2, 0, 2 * Math.PI, false); + if (GUI.action_data().attributes.burn == true) { + canvas_active().fillStyle = "rgba(0, 0, 0, " + power / 255 + ")"; + } + else { + canvas_active().fillStyle = "rgba(255, 255, 255, " + power / 255 + ")"; + } + canvas_active().fill(); + canvas_active().globalCompositeOperation = "source-over"; + } + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.restore(); + } + else if (type == 'move' && EVENTS.isDrag == false) { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + canvas_active().restore(); + }; + this.crop_tool = function (type, mouse, event) { + if (mouse.click_valid == false) + return true; + + if (type == 'drag') { + if (mouse.x < 0) + mouse.x = 0; + if (mouse.y < 0) + mouse.y = 0; + if (mouse.x >= WIDTH) + mouse.x = WIDTH; + if (mouse.y >= HEIGHT) + mouse.y = HEIGHT; + if (mouse.click_x >= WIDTH) + mouse.click_x = WIDTH; + if (mouse.click_y >= HEIGHT) + mouse.click_y = HEIGHT; + if (this.select_square_action == '') { + document.body.style.cursor = "crosshair"; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.fillStyle = "rgba(0, 255, 0, 0.3)"; + canvas_front.fillRect(mouse.click_x, mouse.click_y, mouse.x - mouse.click_x, mouse.y - mouse.click_y); + } + } + else if (type == 'move' && this.select_data != false) { + if (EVENTS.isDrag == true) + return true; + canvas_front.lineWidth = 1; + border_size = 5; + this.select_square_action = ''; + + if (this.select_square_action == '' + && mouse.x > this.select_data.x && mouse.y > this.select_data.y + && mouse.x < this.select_data.x + this.select_data.w && mouse.y < this.select_data.y + this.select_data.h) { + this.select_square_action = 'move'; + document.body.style.cursor = 'pointer'; + } + if (this.select_square_action == '' && mouse.valid == true) + document.body.style.cursor = "auto"; + } + else if (type == 'release') { + if (mouse.x < 0) + mouse.x = 0; + if (mouse.y < 0) + mouse.y = 0; + if (mouse.x >= WIDTH) + mouse.x = WIDTH; + if (mouse.y >= HEIGHT) + mouse.y = HEIGHT; + if (mouse.click_x >= WIDTH) + mouse.click_x = WIDTH; + if (mouse.click_y >= HEIGHT) + mouse.click_y = HEIGHT; + + if (this.select_square_action == '') { + if (mouse.x != mouse.click_x && mouse.y != mouse.click_y) { + this.select_data = { + x: Math.min(mouse.x, mouse.click_x), + y: Math.min(mouse.y, mouse.click_y), + w: Math.abs(mouse.x - mouse.click_x), + h: Math.abs(mouse.y - mouse.click_y) + }; + } + } + GUI.draw_selected_area(true); + + LAYER.update_info_block(); + } + else if (type == 'click' && this.select_data != false) { + document.body.style.cursor = "auto"; + if (mouse.x > this.select_data.x && mouse.y > this.select_data.y + && mouse.x < this.select_data.x + this.select_data.w && mouse.y < this.select_data.y + this.select_data.h) { + EDIT.save_state(); + for (var i in LAYER.layers) { + var layer = document.getElementById(LAYER.layers[i].name).getContext("2d"); + + var tmp = layer.getImageData(this.select_data.x, this.select_data.y, this.select_data.w, this.select_data.h); + layer.clearRect(0, 0, WIDTH, HEIGHT); + layer.putImageData(tmp, 0, 0); + } + + //resize + EDIT.save_state(); + WIDTH = this.select_data.w; + HEIGHT = this.select_data.h; + LAYER.set_canvas_size(); + + EDIT.edit_clear(); + } + } + }; + this.clone_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + var size = GUI.action_data().attributes.size; + var size_half = Math.round(size / 2); + + if (type == 'click') { + EDIT.save_state(); + + if (clone_data === false) { + POP.add({html: 'Source is empty, right click on image first.'}); + POP.show('Error', ''); + } + else { + //draw rounded image + EL.image_round(canvas_active(), mouse.x, mouse.y, size, clone_data, document.getElementById("canvas_front"), GUI.action_data().attributes.anti_aliasing); + } + } + else if (type == 'right_click') { + //save clone source + clone_data = document.createElement("canvas"); + clone_data.width = size; + clone_data.height = size; + var xx = mouse.x - size_half; + var yy = mouse.y - size_half; + if (xx < 0) + xx = 0; + if (yy < 0) + yy = 0; + clone_data.getContext("2d").drawImage(canvas_active(true), xx, yy, size, size, 0, 0, size, size); + return false; + } + else if (type == 'drag') { + if (event.which == 3) + return true; + if (clone_data === false) + return false; //no source + + //draw rounded image + EL.image_round(canvas_active(), mouse.x, mouse.y, size, clone_data, document.getElementById("canvas_front"), GUI.action_data().attributes.anti_aliasing); + } + else if (type == 'move') { + //show size + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EL.circle(canvas_front, mouse.x, mouse.y, size); + } + }; + this.select_square = function (type, mouse, event) { + if (mouse.click_valid == false) + return true; + if (type == 'drag') { + if (mouse.x < 0) + mouse.x = 0; + if (mouse.y < 0) + mouse.y = 0; + if (mouse.x >= WIDTH) + mouse.x = WIDTH; + if (mouse.y >= HEIGHT) + mouse.y = HEIGHT; + if (mouse.click_x >= WIDTH) + mouse.click_x = WIDTH; + if (mouse.click_y >= HEIGHT) + mouse.click_y = HEIGHT; + if (this.select_square_action == '') { + //user still selecting area + document.body.style.cursor = "crosshair"; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.fillStyle = "rgba(0, 255, 0, 0.3)"; + canvas_front.fillRect(mouse.click_x, mouse.click_y, mouse.x - mouse.click_x, mouse.y - mouse.click_y); + } + else { + //drag + if (this.select_square_action == 'move') { + //move + try { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.drawImage(canvas_active(true), + this.select_data.x, this.select_data.y, this.select_data.w, this.select_data.h, + mouse.x - mouse.click_x + this.select_data.x, + mouse.y - mouse.click_y + this.select_data.y, + this.select_data.w, + this.select_data.h); + canvas_front.restore(); + } + catch (err) { + console.log("Error: " + err.message); + } + } + else { + //resize + var s_x = this.select_data.x; + var s_y = this.select_data.y; + var d_x = this.select_data.w; + var d_y = this.select_data.h; + if (this.select_square_action == 'resize-left') { + s_x += mouse.x - mouse.click_x; + d_x -= mouse.x - mouse.click_x; + } + else if (this.select_square_action == 'resize-right') + d_x += mouse.x - mouse.click_x; + else if (this.select_square_action == 'resize-top') { + s_y += mouse.y - mouse.click_y; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-bottom') + d_y += mouse.y - mouse.click_y; + else if (this.select_square_action == 'resize-1') { + s_x += mouse.x - mouse.click_x; + s_y += mouse.y - mouse.click_y; + d_x -= mouse.x - mouse.click_x; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-2') { + d_x += mouse.x - mouse.click_x; + s_y += mouse.y - mouse.click_y; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-3') { + d_x += mouse.x - mouse.click_x; + d_y += mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-4') { + s_x += mouse.x - mouse.click_x; + d_x -= mouse.x - mouse.click_x; + d_y += mouse.y - mouse.click_y; + } + var s_x = Math.max(s_x, 0); + var s_y = Math.max(s_y, 0); + var d_x = Math.max(d_x, 0); + var d_y = Math.max(d_y, 0); + + canvas_front.save(); + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + + canvas_front.mozImageSmoothingEnabled = false; + canvas_front.webkitImageSmoothingEnabled = false; + canvas_front.msImageSmoothingEnabled = false; + canvas_front.ImageSmoothingEnabled = false; + + canvas_front.drawImage(canvas_active(true), + this.select_data.x, this.select_data.y, this.select_data.w, this.select_data.h, + s_x, s_y, d_x, d_y); + canvas_front.restore(); + } + } + } + else if (type == 'move' && this.select_data != false) { + if (EVENTS.isDrag == true) + return true; + canvas_front.lineWidth = 1; + border_size = 5; + this.select_square_action = ''; + var sr_size = Math.ceil(EVENTS.sr_size / GUI.ZOOM * 100); + + //left + if (this.check_mouse_pos(this.select_data.x, this.select_data.y + this.select_data.h / 2, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "w-resize"; + this.select_square_action = 'resize-left'; + } + //top + else if (this.check_mouse_pos(this.select_data.x + this.select_data.w / 2, this.select_data.y, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "n-resize"; + this.select_square_action = 'resize-top'; + } + //right + else if (this.check_mouse_pos(this.select_data.x + this.select_data.w - sr_size, this.select_data.y + this.select_data.h / 2, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "w-resize"; + this.select_square_action = 'resize-right'; + } + //bottom + else if (this.check_mouse_pos(this.select_data.x + this.select_data.w / 2, this.select_data.y + this.select_data.h - sr_size, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "n-resize"; + this.select_square_action = 'resize-bottom'; + } + + //corner 1 + if (this.check_mouse_pos(this.select_data.x, this.select_data.y, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "nw-resize"; + this.select_square_action = 'resize-1'; + } + //corner 2 + else if (this.check_mouse_pos(this.select_data.x + this.select_data.w - sr_size, this.select_data.y, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "ne-resize"; + this.select_square_action = 'resize-2'; + } + //corner 3 + else if (this.check_mouse_pos(this.select_data.x + this.select_data.w - sr_size, this.select_data.y + this.select_data.h - sr_size, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "nw-resize"; + this.select_square_action = 'resize-3'; + } + //corner 4 + else if (this.check_mouse_pos(this.select_data.x, this.select_data.y + this.select_data.h - sr_size, sr_size, mouse.x, mouse.y) == true) { + document.body.style.cursor = "ne-resize"; + this.select_square_action = 'resize-4'; + } + + if (this.select_square_action == '' + && mouse.x > this.select_data.x && mouse.y > this.select_data.y + && mouse.x < this.select_data.x + this.select_data.w && mouse.y < this.select_data.y + this.select_data.h) { + this.select_square_action = 'move'; + document.body.style.cursor = "move"; + } + if (this.select_square_action == '' && mouse.valid == true) + document.body.style.cursor = "auto"; + } + else if (type == 'release') { + if (mouse.x < 0) + mouse.x = 0; + if (mouse.y < 0) + mouse.y = 0; + if (mouse.x >= WIDTH) + mouse.x = WIDTH; + if (mouse.y >= HEIGHT) + mouse.y = HEIGHT; + if (mouse.click_x >= WIDTH) + mouse.click_x = WIDTH; + if (mouse.click_y >= HEIGHT) + mouse.click_y = HEIGHT; + + if (this.select_square_action == '') { + if (mouse.x != mouse.click_x && mouse.y != mouse.click_y) { + this.select_data = { + x: Math.min(mouse.x, mouse.click_x), + y: Math.min(mouse.y, mouse.click_y), + w: Math.abs(mouse.x - mouse.click_x), + h: Math.abs(mouse.y - mouse.click_y) + }; + } + } + else { + if (mouse.x - mouse.click_x == 0 && mouse.y - mouse.click_y == 0) + return false; + EDIT.save_state(); + + if (this.select_square_action == 'move') { + //move selected area + if (this.select_data != false) { + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.drawImage(canvas_active(true), 0, 0); + canvas_active().clearRect(this.select_data.x, this.select_data.y, this.select_data.w, this.select_data.h); + canvas_active().drawImage( + document.getElementById("canvas_front"), + this.select_data.x, this.select_data.y, + this.select_data.w, this.select_data.h, + mouse.x - mouse.click_x + this.select_data.x, mouse.y - mouse.click_y + this.select_data.y, + this.select_data.w, this.select_data.h); + + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + this.select_data.x += mouse.x - mouse.click_x; + this.select_data.y += mouse.y - mouse.click_y; + } + else { + //resize selected area + var s_x = this.select_data.x; + var s_y = this.select_data.y; + var d_x = this.select_data.w; + var d_y = this.select_data.h; + + if (this.select_square_action == 'resize-left') { + s_x += mouse.x - mouse.click_x; + d_x -= mouse.x - mouse.click_x; + } + else if (this.select_square_action == 'resize-right') + d_x += mouse.x - mouse.click_x; + else if (this.select_square_action == 'resize-top') { + s_y += mouse.y - mouse.click_y; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-bottom') + d_y += mouse.y - mouse.click_y; + else if (this.select_square_action == 'resize-1') { + s_x += mouse.x - mouse.click_x; + s_y += mouse.y - mouse.click_y; + d_x -= mouse.x - mouse.click_x; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-2') { + d_x += mouse.x - mouse.click_x; + s_y += mouse.y - mouse.click_y; + d_y -= mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-3') { + d_x += mouse.x - mouse.click_x; + d_y += mouse.y - mouse.click_y; + } + else if (this.select_square_action == 'resize-4') { + s_x += mouse.x - mouse.click_x; + d_x -= mouse.x - mouse.click_x; + d_y += mouse.y - mouse.click_y; + } + var s_x = Math.max(s_x, 0); + var s_y = Math.max(s_y, 0); + var d_x = Math.max(d_x, 0); + var d_y = Math.max(d_y, 0); + + var tempCanvas = document.createElement("canvas"); + var tempCtx = tempCanvas.getContext("2d"); + tempCanvas.width = Math.max(d_x, this.select_data.w); + tempCanvas.height = Math.max(d_y, this.select_data.h); + tempCtx.drawImage(canvas_active(true), this.select_data.x, this.select_data.y, this.select_data.w, this.select_data.h, 0, 0, this.select_data.w, this.select_data.h); + + canvas_active().clearRect(s_x, s_y, d_x, d_y); + canvas_active().drawImage(tempCanvas, 0, 0, this.select_data.w, this.select_data.h, s_x, s_y, d_x, d_y); + + this.select_data.x = s_x; + this.select_data.y = s_y; + this.select_data.w = d_x; + this.select_data.h = d_y; + } + } + GUI.draw_selected_area(); + LAYER.update_info_block(); + } + }; + + this.check_mouse_pos = function (x, y, size, mouse_x, mouse_y) { + if (mouse_x > x - Math.round(size) && mouse_x < x + Math.round(size)) + if (mouse_y > y - Math.round(size) && mouse_y < y + Math.round(size)) + return true; + return false; + }; + + this.bulge_pinch_tool = function (type, mouse, event) { + if (mouse.valid == false) + return true; + + //make sure FX lib loaded + if(fx_filter == false){ + fx_filter = fx.canvas(); + } + + var strength = GUI.action_data().attributes.size / 100; + if(strength > 1) + strength = 1; + var radius = GUI.action_data().attributes.radius; + var bulge = GUI.action_data().attributes.bulge; + if(bulge == false) + strength = -1 * strength; + + if (type == 'click') { + EDIT.save_state(); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).bulgePinch(mouse.x, mouse.y, radius, strength).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + } + if (type == 'move') { + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).bulgePinch(mouse.x, mouse.y, radius, strength).update(); //effect + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.drawImage(fx_filter, 0, 0); + } + }; +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.xml new file mode 100644 index 00000000000..efd90760387 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/draw_tools.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>draw_tools.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.js new file mode 100644 index 00000000000..c5be41ace21 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.js @@ -0,0 +1,187 @@ +/* global MAIN, POP, LAYER, DRAW, GUI */ +/* global WIDTH, HEIGHT, canvas_active, canvas_front */ + +var EDIT = new EDIT_CLASS(); + +/** + * manages edit actions + * + * @author ViliusL + */ +function EDIT_CLASS() { + + /** + * used to store internal copied objects data + */ + var PASTE_DATA = false; + + /** + * latest 3 saved states of all layers for undo + */ + var layers_archive = [{}, {}, {}]; + + /** + * on undo, current data index in layers_archive array + */ + var undo_level = 0; + + //undo + this.edit_undo = function () { + this.undo(); + }; + + //cut + this.edit_cut = function () { + this.save_state(); + if (DRAW.select_data != false) { + this.copy_to_clipboard(); + canvas_active().clearRect(DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h); + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + }; + + //copy + this.edit_copy = function () { + if (DRAW.select_data != false) { + this.copy_to_clipboard(); + } + }; + + //paste + this.edit_paste = function () { + this.save_state(); + this.paste('menu'); + }; + + //select all + this.edit_select = function () { + DRAW.select_data = { + x: 0, + y: 0, + w: WIDTH, + h: HEIGHT + }; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + GUI.draw_selected_area(); + }; + + //clear selection + this.edit_clear = function () { + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + DRAW.select_square_action = ''; + }; + + this.copy_to_clipboard = function () { + PASTE_DATA = false; + PASTE_DATA = document.createElement("canvas"); + PASTE_DATA.width = DRAW.select_data.w; + PASTE_DATA.height = DRAW.select_data.h; + PASTE_DATA.getContext("2d").drawImage(canvas_active(true), DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h, 0, 0, DRAW.select_data.w, DRAW.select_data.h); + }; + + this.paste = function (type) { + if (PASTE_DATA == false) { + if (type == 'menu') { + POP.add({title: "Error:", value: 'Empty data'}); + POP.add({title: "Notice:", value: 'To paste from clipboard, use Ctrl-V.'}); + POP.show('Notice', ''); + } + return false; + } + + tmp = new Array(); + var new_name = LAYER.generate_layer_name(); + LAYER.create_canvas(new_name); + LAYER.layers.unshift({name: new_name, title: new_name, visible: true}); + LAYER.layer_active = 0; + canvas_active().drawImage(PASTE_DATA, 0, 0); + LAYER.layer_renew(); + EDIT.edit_clear(); + }; + + this.save_state = function () { + undo_level = 0; + j = 0; + + //move previous + layers_archive[2] = layers_archive[1]; + layers_archive[1] = layers_archive[0]; + + //save last state + layers_archive[j] = {}; + layers_archive[j].width = WIDTH; + layers_archive[j].height = HEIGHT; + + //layers + layers_archive[j].layers = []; + for(var i = LAYER.layers.length-1; i >=0; i--){ + var layer = { + name: LAYER.layers[i].name, + title: LAYER.layers[i].title, + visible: 1, + opacity: LAYER.layers[i].opacity, + }; + if (LAYER.layers[i].visible == false) + layer.visible = 0; + layers_archive[j].layers.push(layer); + } + + + layers_archive[j].data = {}; + for (var i in LAYER.layers) { + layers_archive[j].data[LAYER.layers[i].name] = document.createElement('canvas'); + layers_archive[j].data[LAYER.layers[i].name].width = WIDTH; + layers_archive[j].data[LAYER.layers[i].name].height = HEIGHT; + layers_archive[j].data[LAYER.layers[i].name].getContext('2d').drawImage(document.getElementById(LAYER.layers[i].name), 0, 0); + } + }; + //supports 3 levels undo system - more levels requires more memory + this.undo = function () { + if (layers_archive.length == 0){ + //not saved yet + return false; + } + j = undo_level; + undo_level++; + if (layers_archive[j] == undefined || layers_archive[j].width == undefined){ + //no such data + return false; + } + + LAYER.remove_all_layers(); + + if (WIDTH != layers_archive[j].width || HEIGHT != layers_archive[j].height) { + WIDTH = layers_archive[j].width; + HEIGHT = layers_archive[j].height; + LAYER.set_canvas_size(true); + } + + //add layers + for(var i in layers_archive[j].layers){ + var layer = layers_archive[j].layers[i]; + var name = layer.name; + var title = layer.title; + var visible = parseInt(layer.visible); + var opacity = parseInt(layer.opacity); + + LAYER.layer_add(name); + //update attributes + LAYER.layers[LAYER.layer_active].title = title; + if (visible == 0) + LAYER.layer_visibility(LAYER.layer_active); + LAYER.layers[LAYER.layer_active].opacity = opacity; + } + LAYER.layer_renew(); + + //undo + for (var i = LAYER.layers.length-1; i >= 0; i--) { + //restore data + document.getElementById(LAYER.layers[i].name).getContext("2d").clearRect(0, 0, WIDTH, HEIGHT); + document.getElementById(LAYER.layers[i].name).getContext("2d").drawImage(layers_archive[j].data[LAYER.layers[i].name], 0, 0); + } + + GUI.zoom(); + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.xml new file mode 100644 index 00000000000..3e23735b480 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/edit.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>edit.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.js new file mode 100644 index 00000000000..729bdeef67d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.js @@ -0,0 +1,1125 @@ +/* global POP, MAIN, VINTAGE, ImageFilters, fx_filter, VINTAGE, fx, HELPER, EVENTS, EDIT, GUI */ +/* global WIDTH, HEIGHT, canvas_active, canvas_front */ + +var EFFECTS = new EFFECTS_CLASS(); + +/** + * manages effects + * + * @author ViliusL + */ +function EFFECTS_CLASS() { + + this.FILTERS_LIST = [ + {title: 'Black and White', name: 'effects_bw' }, + {title: 'Blur-Box', name: 'effects_BoxBlur' }, + {title: 'Blur-Gaussian', name: 'effects_GaussianBlur' }, + {title: 'Blur-Stack', name: 'effects_StackBlur' }, + {title: 'Blur-Zoom', name: 'effects_zoomblur' }, + {title: 'Bulge/Pinch', name: 'effects_bulge_pinch' }, + {title: 'Colorize', name: 'effects_colorize' }, + {title: 'Denoise', name: 'effects_denoise' }, + {title: 'Desaturate', name: 'effects_Desaturate' }, + {title: 'Dither', name: 'effects_Dither' }, + {title: 'Dot Screen', name: 'effects_dot_screen' }, + {title: 'Edge', name: 'effects_Edge' }, + {title: 'Emboss', name: 'effects_Emboss' }, + {title: 'Enrich', name: 'effects_Enrich' }, + {title: 'Grains', name: 'effects_Grains' }, + {title: 'Heatmap', name: 'effects_heatmap' }, + {title: 'JPG Compression', name: 'effects_jpg_vintage' }, + {title: 'Mosaic', name: 'effects_Mosaic' }, + {title: 'Oil', name: 'effects_Oil' }, + {title: 'Sepia', name: 'effects_Sepia' }, + {title: 'Sharpen', name: 'effects_Sharpen' }, + {title: 'Solarize', name: 'effects_Solarize' }, + {title: 'Tilt Shift', name: 'effects_tilt_shift' }, + {title: 'Vignette', name: 'effects_vignette' }, + {title: 'Vibrance', name: 'effects_vibrance' }, + {title: 'Vintage', name: 'effects_vintage' }, + ]; + + var fx_filter = false; + + this.load_fx = function (){ + //load FX lib + if(fx_filter == false){ + fx_filter = fx.canvas(); + } + }; + + this.effects_bw = function () { + var default_level = this.thresholding('otsu', canvas_active(), WIDTH, HEIGHT, true); + POP.add({name: "param1", title: "Level:", value: default_level, range: [0, 255]}); + POP.add({name: "param2", title: "Dithering:", values: ['No', 'Yes'], onchange: "EFFECTS.effects_bw_onchange()"}); + POP.effects = true; + POP.show('Black and White', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = false; + if (user_response.param2 == 'Yes') + param2 = true; + + EFFECTS.effect_bw(canvas_active(), WIDTH, HEIGHT, param1, param2); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = false; + if (user_response.param2 == 'Yes') + param2 = true; + + EFFECTS.effect_bw(canvas_preview, w, h, param1, param2); + } + ); + }; + + this.effects_bw_onchange = function () { + var levels = document.getElementById("pop_data_param1"); + var dithering_no = document.getElementById("pop_data_param2_poptmp0"); + var dithering_yes = document.getElementById("pop_data_param2_poptmp1"); + + if (dithering_no.checked == true) + levels.disabled = false; + else if (dithering_yes.checked == true) + levels.disabled = true; + + POP.view(); + }; + + this.effects_BoxBlur = function () { + POP.add({name: "param1", title: "H Radius:", value: "3", range: [1, 20]}); + POP.add({name: "param2", title: "V Radius:", value: "3", range: [1, 20]}); + POP.add({name: "param3", title: "Quality:", value: "2", range: [1, 10]}); + POP.effects = true; + POP.show('Blur-Box', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.BoxBlur(imageData, param1, param2, param3); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.BoxBlur(imageData, param1, param2, param3); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_GaussianBlur = function () { + POP.add({name: "param1", title: "Strength:", value: "2", range: [1, 4], step: 0.1}); + POP.effects = true; + POP.show('Blur-Gaussian', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.GaussianBlur(imageData, param1); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.GaussianBlur(imageData, param1); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_StackBlur = function () { + POP.add({name: "param1", title: "Radius:", value: "6", range: [1, 40]}); + POP.effects = true; + POP.show('Blur-Stack', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.StackBlur(imageData, param1); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.StackBlur(imageData, param1); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_zoomblur = function () { + this.load_fx(); + + POP.add({name: "param1", title: "Strength:", value: "0.3", range: [0, 1], step: 0.01}); + POP.add({name: "param2", title: "Center x:", value: Math.round(WIDTH / 2), range: [0, WIDTH]}); + POP.add({name: "param3", title: "Center y:", value: Math.round(HEIGHT / 2), range: [0, HEIGHT]}); + POP.effects = true; + POP.show('Blur-Zoom', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).zoomBlur(param2, param3, param1).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + + //recalc param by size + param2 = param2 / WIDTH * w; + param3 = param3 / HEIGHT * h; + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).zoomBlur(param2, param3, param1).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + + //draw circle + canvas_preview.beginPath(); + canvas_preview.strokeStyle = "#ff0000"; + canvas_preview.lineWidth = 1; + canvas_preview.beginPath(); + canvas_preview.arc(param2, param3, 5, 0, Math.PI * 2, true); + canvas_preview.stroke(); + } + ); + }; + + this.effects_bulge_pinch = function () { + this.load_fx(); + + POP.add({name: "param1", title: "Strength:", value: 1, range: [-1, 1], step: 0.1}); + var default_value = Math.min(WIDTH, HEIGHT); + default_value = Math.round(default_value / 2); + POP.add({name: "param2", title: "Radius:", value: default_value, range: [0, 600]}); + POP.effects = true; + POP.show('Bulge/Pinch', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + var param2 = parseInt(user_response.param2); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).bulgePinch(Math.round(WIDTH / 2), Math.round(HEIGHT / 2), param2, param1).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + var param2 = parseInt(user_response.param2); + + //recalc param by size + param2 = param2 / Math.min(WIDTH, HEIGHT) * Math.min(w, h); + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).bulgePinch(Math.round(w / 2), Math.round(h / 2), param2, param1).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + } + ); + }; + + this.effects_colorize = function () { + var _this = this; + var colorize_data; + + POP.add({name: "param1", title: "Power:", value: "3", range: [1, 10]}); + POP.add({name: "param2", title: "Limit:", value: "30", range: [10, 200]}); + POP.preview_in_main = true; + POP.effects = true; + POP.show('Auto colorize', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + + _this.colorize(canvas_active(), WIDTH, HEIGHT, param1, param2, colorize_data); + GUI.zoom(); + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + }, + function (user_response) { + POP.preview_in_main = true; + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + + colorize_data = _this.colorize(false, WIDTH, HEIGHT, param1, param2, true); + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.drawImage(canvas_active(true), 0, 0); + _this.colorize(canvas_front, WIDTH, HEIGHT, param1, param2, colorize_data); + } + ); + }; + + this.effects_denoise = function () { + this.load_fx(); + + POP.add({name: "param1", title: "Exponent:", value: "20", range: [0, 50]}); + POP.effects = true; + POP.show('Denoise', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).denoise(param1).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).denoise(param1).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + } + ); + }; + + this.effects_Desaturate = function () { + POP.effects = true; + POP.show('Desaturate', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Desaturate(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Desaturate(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Dither = function () { + POP.add({name: "param1", title: "Levels:", value: "8", range: [2, 32]}); + POP.effects = true; + POP.show('Dither', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Dither(imageData, param1); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Dither(imageData, param1); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_dot_screen = function () { + this.load_fx(); + + POP.add({name: "param2", title: "Size:", value: "3", range: [1, 20]}); + POP.effects = true; + POP.show('Dot Screen', + function (user_response) { + EDIT.save_state(); + var param2 = parseInt(user_response.param2); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).dotScreen(Math.round(WIDTH / 2), Math.round(HEIGHT / 2), 0, param2).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param2 = parseInt(user_response.param2); + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).dotScreen(Math.round(w / 2), Math.round(h / 2), 0, param2).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + } + ); + }; + + this.effects_Edge = function () { + POP.effects = true; + POP.show('Edge', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Edge(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Edge(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Emboss = function () { + POP.effects = true; + POP.show('Emboss', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Emboss(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Emboss(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Enrich = function () { + POP.effects = true; + POP.show('Enrich', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Enrich(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Enrich(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Grains = function () { + var _this = this; + POP.effects = true; + POP.add({name: "param1", title: "Level:", value: "30", range: [0, 50]}); + POP.show('Grains', + function (user_response) { + var param1 = parseInt(user_response.param1); + EDIT.save_state(); + _this.grains_effect(canvas_active(), WIDTH, HEIGHT, param1); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + _this.grains_effect(canvas_preview, w, h, param1); + } + ); + }; + + this.effects_heatmap = function () { + var _this = this; + POP.effects = true; + POP.show('Heatmap', + function (user_response) { + EDIT.save_state(); + _this.heatmap_effect(canvas_active(), WIDTH, HEIGHT); + }, + function (user_response, canvas_preview, w, h) { + _this.heatmap_effect(canvas_preview, w, h); + } + ); + }; + + //ages photo saving it to jpg many times + this.effects_jpg_vintage = function () { + POP.add({name: "param1", title: "Quality:", value: 80, range: [1, 100]}); + POP.effects = true; + POP.show('JPG Compression', + function (user_response) { + EDIT.save_state(); + var quality = parseInt(user_response.param1); + if (quality > 100 || quality < 1 || isNaN(quality) == true) + quality = 80; + quality = quality / 100; + var data = canvas_active(true).toDataURL('image/jpeg', quality); + var img = new Image; + img.onload = function () { + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(img, 0, 0); + }; + img.src = data; + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var quality = parseInt(user_response.param1); + if (quality > 100 || quality < 1 || isNaN(quality) == true) + quality = 80; + quality = quality / 100; + var element = document.getElementById("pop_post"); + var data = element.toDataURL('image/jpeg', quality); + var img = new Image; + img.onload = function () { + canvas_preview.clearRect(0, 0, w, h); + canvas_preview.drawImage(img, 0, 0); + }; + img.src = data; + } + ); + }; + + this.effects_Mosaic = function () { + POP.add({name: "param1", title: "Size:", value: "10", range: [1, 100]}); + POP.effects = true; + POP.show('Mosaic', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Mosaic(imageData, param1); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Mosaic(imageData, param1); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Oil = function () { + POP.add({name: "param1", title: "Range:", value: "2", range: [1, 5]}); + POP.add({name: "param2", title: "Levels:", value: "32", range: [1, 256]}); + POP.effects = true; + POP.show('Oil', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Oil(imageData, param1, param2); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Oil(imageData, param1, param2); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_perspective = function () { + this.load_fx(); + + POP.add({name: "param1", title: "X1:", value: WIDTH / 4, range: [0, WIDTH]}); + POP.add({name: "param2", title: "Y1:", value: HEIGHT / 4, range: [0, HEIGHT]}); + POP.add({name: "param3", title: "X2:", value: WIDTH * 3 / 4, range: [0, WIDTH]}); + POP.add({name: "param4", title: "Y2:", value: HEIGHT / 4, range: [0, HEIGHT]}); + POP.add({name: "param5", title: "X3:", value: WIDTH * 3 / 4, range: [0, WIDTH]}); + POP.add({name: "param6", title: "Y3:", value: HEIGHT * 3 / 4, range: [0, HEIGHT]}); + POP.add({name: "param7", title: "X4:", value: WIDTH / 4, range: [0, WIDTH]}); + POP.add({name: "param8", title: "Y4:", value: HEIGHT * 3 / 4, range: [0, HEIGHT]}); + POP.preview_in_main = true; + POP.effects = true; + POP.show('Perspective', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + var param4 = parseInt(user_response.param4); + var param5 = parseInt(user_response.param5); + var param6 = parseInt(user_response.param6); + var param7 = parseInt(user_response.param7); + var param8 = parseInt(user_response.param8); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).perspective([WIDTH / 4, HEIGHT / 4, WIDTH * 3 / 4, HEIGHT / 4, WIDTH * 3 / 4, HEIGHT * 3 / 4, WIDTH / 4, HEIGHT * 3 / 4], [param1, param2, param3, param4, param5, param6, param7, param8]).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + var param4 = parseInt(user_response.param4); + var param5 = parseInt(user_response.param5); + var param6 = parseInt(user_response.param6); + var param7 = parseInt(user_response.param7); + var param8 = parseInt(user_response.param8); + + canvas_front.rect(0, 0, WIDTH, HEIGHT); + canvas_front.fillStyle = "#ffffff"; + canvas_front.fill(); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).perspective([WIDTH / 4, HEIGHT / 4, WIDTH * 3 / 4, HEIGHT / 4, WIDTH * 3 / 4, HEIGHT * 3 / 4, WIDTH / 4, HEIGHT * 3 / 4], [param1, param2, param3, param4, param5, param6, param7, param8]).update(); //effect + canvas_front.drawImage(fx_filter, 0, 0); + + pers_square(param1, param2); + pers_square(param3, param4); + pers_square(param5, param6); + pers_square(param7, param8); + } + ); + + function pers_square(x, y) { + canvas_front.beginPath(); + canvas_front.rect(x - round(EVENTS.sr_size / 2), y - round(EVENTS.sr_size / 2), EVENTS.sr_size, EVENTS.sr_size); + canvas_front.fillStyle = "#0000c8"; + canvas_front.fill(); + } + }; + + this.effects_Sepia = function () { + POP.effects = true; + POP.show('Sepia', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Sepia(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Sepia(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Sharpen = function () { + POP.add({name: "param1", title: "Factor:", value: "3", range: [1, 10], step: 0.1}); + POP.effects = true; + POP.show('Sharpen', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Sharpen(imageData, param1); //add effect + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Sharpen(imageData, param1); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_Solarize = function () { + POP.effects = true; + POP.show('Solarize', + function (user_response) { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Solarize(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + }, + function (user_response, canvas_preview, w, h) { + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Solarize(imageData); //add effect + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + this.effects_tilt_shift = function () { + this.load_fx(); + + //extra + POP.add({name: "param7", title: "Saturation:", value: "3", range: [0, 100]}); + POP.add({name: "param8", title: "Sharpen:", value: "1", range: [1, 10]}); + //main + POP.add({name: "param1", title: "Blur Radius:", value: "15", range: [0, 50]}); + POP.add({name: "param2", title: "Gradient Radius:", value: "200", range: [0, 400]}); + //startX, startY, endX, endY + POP.add({name: "param3", title: "X start:", value: "0", range: [0, WIDTH]}); + POP.add({name: "param4", title: "Y start:", value: Math.round(HEIGHT / 2), range: [0, HEIGHT]}); + POP.add({name: "param5", title: "X end:", value: WIDTH, range: [0, WIDTH]}); + POP.add({name: "param6", title: "Y end:", value: Math.round(HEIGHT / 2), range: [0, HEIGHT]}); + POP.effects = true; + POP.show('Tilt Shift', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + var param4 = parseInt(user_response.param4); + var param5 = parseInt(user_response.param5); + var param6 = parseInt(user_response.param6); + var param7 = parseInt(user_response.param7); + var param8 = parseInt(user_response.param8); + + //main effect + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).tiltShift(param3, param4, param5, param6, param1, param2).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + + //saturation + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.HSLAdjustment(imageData, 0, param7, 0); + canvas_active().putImageData(filtered, 0, 0); + + //sharpen + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Sharpen(imageData, param8); + canvas_active().putImageData(filtered, 0, 0); + + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param3 = parseInt(user_response.param3); + var param4 = parseInt(user_response.param4); + var param5 = parseInt(user_response.param5); + var param6 = parseInt(user_response.param6); + var param7 = parseInt(user_response.param7); + var param8 = parseInt(user_response.param8); + + //recalc param by size + var param3 = param3 / WIDTH * w; + var param4 = param4 / HEIGHT * h; + var param5 = param5 / WIDTH * w; + var param6 = param6 / HEIGHT * h; + + //main effect + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).tiltShift(param3, param4, param5, param6, param1, param2).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + + //saturation + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.HSLAdjustment(imageData, 0, param7, 0); + canvas_preview.putImageData(filtered, 0, 0); + + //sharpen + var imageData = canvas_preview.getImageData(0, 0, w, h); + var filtered = ImageFilters.Sharpen(imageData, param8); + canvas_preview.putImageData(filtered, 0, 0); + + //draw line + canvas_preview.beginPath(); + canvas_preview.strokeStyle = "#ff0000"; + canvas_preview.lineWidth = 1; + canvas_preview.moveTo(param3 + 0.5, param4 + 0.5); + canvas_preview.lineTo(param5 + 0.5, param6 + 0.5); + canvas_preview.stroke(); + } + ); + }; + + this.effects_vignette = function () { + this.load_fx(); + + POP.add({name: "param1", title: "Size:", value: "0.5", range: [0, 1], step: 0.01}); + POP.add({name: "param2", title: "Amount:", value: "0.5", range: [0, 1], step: 0.01}); + POP.effects = true; + POP.show('Vignette', + function (user_response) { + EDIT.save_state(); + var param1 = parseFloat(user_response.param1); + var param2 = parseFloat(user_response.param2); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).vignette(param1, param2).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseFloat(user_response.param1); + var param2 = parseFloat(user_response.param2); + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).vignette(param1, param2).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + } + ); + }; + this.effects_vibrance = function () { + this.load_fx(); + + POP.add({name: "level", title: "Level:", value: "0.5", range: [-1, 1], step: 0.01}); + POP.effects = true; + POP.show('Vignette', + function (user_response) { + EDIT.save_state(); + var level = parseFloat(user_response.level); + + var texture = fx_filter.texture(canvas_active(true)); + fx_filter.draw(texture).vibrance(level).update(); //effect + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().drawImage(fx_filter, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var level = parseFloat(user_response.level); + + var texture = fx_filter.texture(canvas_preview.getImageData(0, 0, w, h)); + fx_filter.draw(texture).vibrance(level).update(); //effect + canvas_preview.drawImage(fx_filter, 0, 0); + } + ); + }; + + this.effects_vintage = function () { + POP.add({name: "red_offset", title: "Color adjust:", value: "70", range: [0, 200]}); + POP.add({name: "contrast", title: "Contrast:", value: "15", range: [0, 50]}); + POP.add({name: "blur", title: "Blur:", value: "0", range: [0, 2], step: 0.1}); + POP.add({name: "light_leak", title: "Light leak:", value: "90", range: [0, 150]}); + POP.add({name: "de_saturation", title: "Desaturation:", value: "40", range: [0, 100]}); + POP.add({name: "exposure", title: "Exposure level:", value: "80", range: [0, 150]}); + POP.add({name: "grains", title: "Grains level:", value: "20", range: [0, 50]}); + POP.add({name: "big_grains", title: "Big grains level:", value: "20", range: [0, 50]}); + POP.add({name: "vignette1", title: "Vignette size:", value: "0.3", range: [0, 0.5], step: 0.01}); + POP.add({name: "vignette2", title: "Vignette amount:", value: "0.5", range: [0, 0.7], step: 0.01}); + POP.add({name: "dust_level", title: "Dusts level:", value: "70", range: [0, 100]}); + POP.effects = true; + POP.show('Vintage', + function (user_response) { + EDIT.save_state(); + var red_offset = parseInt(user_response.red_offset); + var contrast = parseInt(user_response.contrast); + var blur = parseFloat(user_response.blur); + var light_leak = parseInt(user_response.light_leak); + var de_saturation = parseInt(user_response.de_saturation); + var exposure = parseInt(user_response.exposure); + var grains = parseInt(user_response.grains); + var big_grains = parseInt(user_response.big_grains); + var vignette1 = parseFloat(user_response.vignette1); + var vignette2 = parseFloat(user_response.vignette2); + var dust_level = parseInt(user_response.dust_level); + + VINTAGE.adjust_color(canvas_active(), WIDTH, HEIGHT, red_offset); + VINTAGE.lower_contrast(canvas_active(), WIDTH, HEIGHT, contrast); + VINTAGE.blur(canvas_active(), WIDTH, HEIGHT, blur); + VINTAGE.light_leak(canvas_active(), WIDTH, HEIGHT, light_leak); + VINTAGE.chemicals(canvas_active(), WIDTH, HEIGHT, de_saturation); + VINTAGE.exposure(canvas_active(), WIDTH, HEIGHT, exposure); + VINTAGE.grains(canvas_active(), WIDTH, HEIGHT, grains); + VINTAGE.grains_big(canvas_active(), WIDTH, HEIGHT, big_grains); + VINTAGE.optics(canvas_active(), WIDTH, HEIGHT, vignette1, vignette2); + VINTAGE.dusts(canvas_active(), WIDTH, HEIGHT, dust_level); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var red_offset = parseInt(user_response.red_offset); + var contrast = parseInt(user_response.contrast); + var blur = parseFloat(user_response.blur); + var light_leak = parseInt(user_response.light_leak); + var de_saturation = parseInt(user_response.de_saturation); + var exposure = parseInt(user_response.exposure); + var grains = parseInt(user_response.grains); + var big_grains = parseInt(user_response.big_grains); + var vignette1 = parseFloat(user_response.vignette1); + var vignette2 = parseFloat(user_response.vignette2); + var dust_level = parseInt(user_response.dust_level); + + VINTAGE.adjust_color(canvas_preview, w, h, red_offset); + VINTAGE.lower_contrast(canvas_preview, w, h, contrast); + VINTAGE.blur(canvas_preview, w, h, blur); + VINTAGE.light_leak(canvas_preview, w, h, light_leak); + VINTAGE.chemicals(canvas_preview, w, h, de_saturation); + VINTAGE.exposure(canvas_preview, w, h, exposure); + VINTAGE.grains(canvas_preview, w, h, grains); + VINTAGE.grains_big(canvas_preview, w, h, big_grains); + VINTAGE.optics(canvas_preview, w, h, vignette1, vignette2); + VINTAGE.dusts(canvas_preview, w, h, dust_level); + } + ); + }; + + this.effect_bw = function (context, W, H, level, dithering) { + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var grey, c, quant_error, m; + if (dithering !== true) { + //no differing + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + grey = Math.round(0.2126 * imgData[i] + 0.7152 * imgData[i + 1] + 0.0722 * imgData[i + 2]); + if (grey <= level) + c = 0; + else + c = 255; + imgData[i] = c; + imgData[i + 1] = c; + imgData[i + 2] = c; + } + } + else { + //Floyd–Steinberg dithering + canvas_front.clearRect(0, 0, W, H); //temp canvas for storing pixel data shifts + var img2 = canvas_front.getImageData(0, 0, W, H); + var imgData2 = img2.data; + for (var j = 0; j < H; j++) { + for (var i = 0; i < W; i++) { + var k = ((j * (W * 4)) + (i * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + + grey = Math.round(0.2126 * imgData[k] + 0.7152 * imgData[k + 1] + 0.0722 * imgData[k + 2]); + grey = grey + imgData2[k]; //add data shft from previous iterations + c = Math.floor(grey / 256); + if (c == 1) + c = 255; + imgData[k] = c; + imgData[k + 1] = c; + imgData[k + 2] = c; + quant_error = grey - c; + if (i + 1 < W) { + m = k + 4; + imgData2[m] += Math.round(quant_error * 7 / 16); + } + if (i - 1 > 0 && j + 1 < H) { + m = k - 4 + W * 4; + imgData2[m] += Math.round(quant_error * 3 / 16); + } + if (j + 1 < H) { + m = k + W * 4; + imgData2[m] += Math.round(quant_error * 5 / 16); + } + if (i + 1 < W && j + 1 < H) { + m = k + 4 + W * 4; + imgData2[m] += Math.round(quant_error * 1 / 16); + } + } + } + } + context.putImageData(img, 0, 0); + }; + + //converts greyscale images to colored + this.colorize = function (context, W, H, rand_power, max_gap, manual_colors) { + if (manual_colors == undefined || manual_colors === true) { + var colors = []; + for (var x = 0; x < 3; x++) { + colors[x] = []; + var pre = HELPER.getRandomInt(-1 * rand_power, rand_power); + for (var i = 0; i <= 255; i++) { + colors[x][i] = HELPER.getRandomInt(pre - rand_power, pre + rand_power); + + if (colors[x][i] < -1 * max_gap) + colors[x][i] += 10; + else if (colors[x][i] > max_gap) + colors[x][i] -= 10; + + pre = colors[x][i]; + } + } + if (manual_colors === true) + return colors; + } + else { + var colors = manual_colors; + } + + var img = context.getImageData(0, 0, W, H); + + //colorize + var imgData = img.data; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + for (var c = 0; c < 3; c++) { + var x = i + c; + imgData[x] += colors[c][imgData[x]]; + if (imgData[x] > 255) + imgData[x] = 255; + if (imgData[x] < 0) + imgData[x] = 0; + } + } + context.putImageData(img, 0, 0); + return false; + }; + + this.heatmap_effect = function (context, W, H) { + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var grey, RGB; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + grey = Math.round(0.2126 * imgData[i] + 0.7152 * imgData[i + 1] + 0.0722 * imgData[i + 2]); + RGB = this.color2heat(grey); + imgData[i] = RGB.R; + imgData[i + 1] = RGB.G; + imgData[i + 2] = RGB.B; + } + context.putImageData(img, 0, 0); + }; + + this.color2heat = function (value) { + var RGB = {R: 0, G: 0, B: 0}; + value = value / 255; + if (0 <= value && value <= 1 / 8) { + RGB.R = 0; + RGB.G = 0; + RGB.B = 4 * value + .5; // .5 - 1 // b = 1/2 + } + else if (1 / 8 < value && value <= 3 / 8) { + RGB.R = 0; + RGB.G = 4 * value - .5; // 0 - 1 // b = - 1/2 + RGB.B = 1; // small fix + } + else if (3 / 8 < value && value <= 5 / 8) { + RGB.R = 4 * value - 1.5; // 0 - 1 // b = - 3/2 + RGB.G = 1; + RGB.B = -4 * value + 2.5; // 1 - 0 // b = 5/2 + } + else if (5 / 8 < value && value <= 7 / 8) { + RGB.R = 1; + RGB.G = -4 * value + 3.5; // 1 - 0 // b = 7/2 + RGB.B = 0; + } + else if (7 / 8 < value && value <= 1) { + RGB.R = -4 * value + 4.5; // 1 - .5 // b = 9/2 + RGB.G = 0; + RGB.B = 0; + } + else { + // should never happen - value > 1 + RGB.R = .5; + RGB.G = 0; + RGB.B = 0; + } + // scale for hex conversion + RGB.R *= 255; + RGB.G *= 255; + RGB.B *= 255; + + RGB.R = Math.round(RGB.R); + RGB.G = Math.round(RGB.G); + RGB.B = Math.round(RGB.B); + + return RGB; + }; + + //method = otsu + this.thresholding = function (method, ctx, W, H, only_level) { + var img = ctx.getImageData(0, 0, W, H); + var imgData = img.data; + var hist_data = []; + var grey; + for (var i = 0; i <= 255; i++) + hist_data[i] = 0; + for (var i = 0; i < imgData.length; i += 4) { + grey = Math.round(0.2126 * imgData[i] + 0.7152 * imgData[i + 1] + 0.0722 * imgData[i + 2]); + hist_data[grey]++; + } + var level; + if (method == 'otsu') + level = this.otsu(hist_data, W * H); + else + alert('ERROR: unknown method in EFFECTS.thresholding().'); + if (only_level === true) + return level; + var c; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + grey = Math.round(0.2126 * imgData[i] + 0.7152 * imgData[i + 1] + 0.0722 * imgData[i + 2]); + if (grey < level) + c = 0; + else + c = 255; + imgData[i] = c; + imgData[i + 1] = c; + imgData[i + 2] = c; + } + ctx.putImageData(img, 0, 0); + }; + + //http://en.wikipedia.org/wiki/Otsu%27s_Method + this.otsu = function (histogram, total) { + var sum = 0; + for (var i = 1; i < 256; ++i) + sum += i * histogram[i]; + var mB, mF, between; + var sumB = 0; + var wB = 0; + var wF = 0; + var max = 0; + var threshold = 0; + for (var i = 0; i < 256; ++i) { + wB += histogram[i]; + if (wB == 0) + continue; + wF = total - wB; + if (wF == 0) + break; + sumB += i * histogram[i]; + mB = sumB / wB; + mF = (sum - sumB) / wF; + between = wB * wF * Math.pow(mB - mF, 2); + if (between > max) { + max = between; + threshold = i; + } + } + return threshold; + }; + + this.grains_effect = function (context, W, H, level) { + if (level == 0) + return context; + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + for (var j = 0; j < H; j++) { + for (var i = 0; i < W; i++) { + var x = (i + j * W) * 4; + if (imgData[x + 3] == 0) + continue; //transparent + //increase it's lightness + var delta = HELPER.getRandomInt(0, level); + if (delta == 0) + continue; + + if (imgData[x] - delta < 0) + imgData[x] = -(imgData[x] - delta); + else + imgData[x] = imgData[x] - delta; + if (imgData[x + 1] - delta < 0) + imgData[x + 1] = -(imgData[x + 1] - delta); + else + imgData[x + 1] = imgData[x + 1] - delta; + if (imgData[x + 2] - delta < 0) + imgData[x + 2] = -(imgData[x + 2] - delta); + else + imgData[x + 2] = imgData[x + 2] - delta; + } + } + context.putImageData(img, 0, 0); + }; +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.xml new file mode 100644 index 00000000000..253caf94e36 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/effects.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>effects.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.js new file mode 100644 index 00000000000..f503acdd446 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.js @@ -0,0 +1,289 @@ +/* global WIDTH, HEIGHT */ + +var EL = new ELEMENTS_CLASS(); + +/** + * class that draw simple elements + * + * @author ViliusL + */ +function ELEMENTS_CLASS() { + + //draw lines + this.line = function(ctx, from_x, from_y, to_x, to_y, size){ + ctx.beginPath(); + if(size != undefined) + ctx.lineWidth = size; + ctx.moveTo(from_x + 0.5, from_y + 0.5); + ctx.lineTo(to_x + 0.5, to_y + 0.5); + ctx.stroke(); + }; + + //draws rectangle + this.rectangle = function (ctx, x, y, width, height, fill, stroke) { + x = x + 0.5; + y = y + 0.5; + if (typeof stroke == "undefined") + stroke = true; + if(fill == false && stroke == undefined) + stroke = true; + + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.quadraticCurveTo(x + width, y, x + width, y); + ctx.lineTo(x + width, y + height); + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height); + ctx.lineTo(x, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height); + ctx.lineTo(x, y); + ctx.quadraticCurveTo(x, y, x, y); + ctx.closePath(); + if (stroke) { + ctx.stroke(); + } + if (fill) { + ctx.fill(); + } + }; + + //draws square + this.square = function (ctx, x, y, width, height, fill, stroke) { + x = x + 0.5; + y = y + 0.5; + if (typeof stroke == "undefined") + stroke = true; + if(fill == false && stroke == undefined) + stroke = true; + + if (Math.abs(width) < Math.abs(height)){ + if(width > 0) + width = Math.abs(height); + else + width = -Math.abs(height); + } + else{ + if(height > 0) + height = Math.abs(width); + else + height = -Math.abs(width); + } + + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(x + width, y); + ctx.quadraticCurveTo(x + width, y, x + width, y); + ctx.lineTo(x + width, y + height); + ctx.quadraticCurveTo(x + width, y + height, x + width, y + height); + ctx.lineTo(x, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height); + ctx.lineTo(x, y); + ctx.quadraticCurveTo(x, y, x, y); + ctx.closePath(); + if (stroke) { + ctx.stroke(); + } + if (fill) { + ctx.fill(); + } + }; + + this.circle = function (ctx, x, y, size, color) { + ctx.lineWidth = 1; + if(color != undefined) + ctx.strokeStyle = color; + else + ctx.strokeStyle = "#000000"; + + ctx.beginPath(); + ctx.arc(x, y, size / 2, 0, Math.PI * 2, true); + ctx.stroke(); + }; + + this.ellipse_by_center = function (ctx, cx, cy, w, h, color, fill) { + this.ellipse(ctx, cx - w / 2.0, cy - h / 2.0, w, h, color, fill); + }; + + this.ellipse = function (ctx, x, y, w, h, color, fill) { + var kappa = .5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + ctx.beginPath(); + ctx.moveTo(x, ym); + ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + ctx.closePath(); + ctx.fillStyle = color; + ctx.strokeStyle = color; + if (fill == undefined) + ctx.stroke(); + else + ctx.fill(); + }; + + this.arrow = function (context, fromx, fromy, tox, toy, headlen) { + if (headlen == undefined) + headlen = 10; // length of head in pixels + var dx = tox - fromx; + var dy = toy - fromy; + var angle = Math.atan2(dy, dx); + context.beginPath(); + context.moveTo(fromx, fromy); + context.lineTo(tox, toy); + context.stroke(); + context.beginPath(); + context.moveTo(tox - headlen * Math.cos(angle - Math.PI / 6), toy - headlen * Math.sin(angle - Math.PI / 6)); + context.lineTo(tox, toy); + context.lineTo(tox - headlen * Math.cos(angle + Math.PI / 6), toy - headlen * Math.sin(angle + Math.PI / 6)); + context.stroke(); + }; + + //dashed objects + this.rectangle_dashed = function (canvas, x1, y1, x2, y2, dashLen, color) { + this.line_dashed(canvas, x1, y1, x2, y1, dashLen, color); + this.line_dashed(canvas, x2, y1, x2, y2, dashLen, color); + this.line_dashed(canvas, x2, y2, x1, y2, dashLen, color); + this.line_dashed(canvas, x1, y2, x1, y1, dashLen, color); + }; + + this.line_dashed = function (canvas, x1, y1, x2, y2, dashLen, color) { + x1 = x1 + 0.5; + y1 = y1 + 0.5; + x2 = x2 + 0.5; + y2 = y2 + 0.5; + if (color != undefined) + canvas.strokeStyle = color; + else + canvas.strokeStyle = "#000000"; + if (dashLen == undefined) + dashLen = 4; + canvas.beginPath(); + canvas.moveTo(x1, y1); + var dX = x2 - x1; + var dY = y2 - y1; + var dashes = Math.floor(Math.sqrt(dX * dX + dY * dY) / dashLen); + var dashX = dX / dashes; + var dashY = dY / dashes; + var q = 0; + while (q++ < dashes) { + x1 += dashX; + y1 += dashY; + canvas[q % 2 == 0 ? 'moveTo' : 'lineTo'](x1, y1); + } + canvas[q % 2 == 0 ? 'moveTo' : 'lineTo'](x2, y2); + canvas.stroke(); + canvas.closePath(); + }; + + this.image_round = function (canvas, mouse_x, mouse_y, size, img_data, canvas_tmp, anti_aliasing) { + var size_half = Math.round(size / 2); + var ctx_tmp = canvas_tmp.getContext("2d"); + var xx = mouse_x - size_half; + var yy = mouse_y - size_half; + if (xx < 0) + xx = 0; + if (yy < 0) + yy = 0; + + ctx_tmp.clearRect(0, 0, WIDTH, HEIGHT); + ctx_tmp.save(); + //draw main data + try { + ctx_tmp.drawImage(img_data, mouse_x - size_half, mouse_y - size_half, size, size); + } + catch (err) { + try { + ctx_tmp.putImageData(img_data, xx, yy); + } + catch (err) { + console.log("Error: " + err.message); + } + } + ctx_tmp.globalCompositeOperation = 'destination-in'; + + //create form + ctx_tmp.fillStyle = '#ffffff'; + if (anti_aliasing == true) { + var gradient = ctx_tmp.createRadialGradient(mouse_x, mouse_y, 0, mouse_x, mouse_y, size_half); + gradient.addColorStop(0, '#ffffff'); + gradient.addColorStop(0.8, '#ffffff'); + gradient.addColorStop(1, 'rgba(255,255,255,0'); + ctx_tmp.fillStyle = gradient; + } + ctx_tmp.beginPath(); + ctx_tmp.arc(mouse_x, mouse_y, size_half, 0, 2 * Math.PI, true); + ctx_tmp.fill(); + //draw final data + if (xx + size > WIDTH) + size = WIDTH - xx; + if (yy + size > HEIGHT) + size = HEIGHT - yy; + canvas.drawImage(canvas_tmp, xx, yy, size, size, xx, yy, size, size); + //reset + ctx_tmp.restore(); + ctx_tmp.clearRect(0, 0, WIDTH, HEIGHT); + }; +} + +//http://www.script-tutorials.com/html5-canvas-custom-brush1/ +var BezierCurveBrush = { + // inner variables + iPrevX: 0, + iPrevY: 0, + points: null, + // initialization function + init: function () { + }, + startCurve: function (x, y) { + this.iPrevX = x; + this.iPrevY = y; + this.points = new Array(); + }, + getPoint: function (iLength, a) { + var index = a.length - iLength, i; + for (i = index; i < a.length; i++) { + if (a[i]) { + return a[i]; + } + } + }, + draw: function (ctx, color_rgb, x, y, size) { + if (Math.abs(this.iPrevX - x) > 5 || Math.abs(this.iPrevY - y) > 5) { + this.points.push([x, y]); + + // draw main path stroke + ctx.beginPath(); + ctx.moveTo(this.iPrevX, this.iPrevY); + ctx.lineTo(x, y); + + ctx.lineWidth = size; + ctx.lineCap = 'round'; + ctx.lineJoin = 'round'; + ctx.strokeStyle = 'rgba(' + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ', 0.9)'; + ctx.stroke(); + ctx.closePath(); + + // draw extra strokes + ctx.lineWidth = 1; + ctx.strokeStyle = 'rgba(' + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ', 0.2)'; + ctx.beginPath(); + var iStartPoint = this.getPoint(25, this.points); + var iFirstPoint = this.getPoint(1, this.points); + var iSecondPoint = this.getPoint(5, this.points); + ctx.moveTo(iStartPoint[0], iStartPoint[1]); + ctx.bezierCurveTo(iFirstPoint[0], iFirstPoint[1], iSecondPoint[0], iSecondPoint[1], x, y); + ctx.stroke(); + ctx.closePath(); + + this.iPrevX = x; + this.iPrevY = y; + } + } +}; \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.xml new file mode 100644 index 00000000000..e326431b186 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/elements.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>elements.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.js new file mode 100644 index 00000000000..eca317d9a2e --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.js @@ -0,0 +1,809 @@ +/* global FILE, EDIT, HELPER, POP, MAIN, EVENTS, LAYER, IMAGE, GUI, DRAW, EL */ +/* global canvas_active, canvas_front, WIDTH, HEIGHT, EXIF */ + +var EVENTS = new EVENTS_CLASS(); + +//keyboard handlers +document.onkeydown = function(e) { return EVENTS.on_keyboard_action(e); }; +document.onkeyup = function(e) {return EVENTS.on_keyboardup_action(e); }; +//mouse +window.ondrop = function(e) { EVENTS.upload_drop(e); }; //drop +window.ondragover = function(e) { e.preventDefault(); }; +window.onresize = function(e){ EVENTS.on_resize(); }; //window resize +document.onmousedown = EVENTS.mouse_click; //mouse click +document.onmousemove = EVENTS.mouse_move; //mouse move +document.onmouseup = EVENTS.mouse_release; //mouse resease +document.addEventListener("mousewheel", EVENTS.mouse_wheel_handler, false); //mouse scroll +document.addEventListener("DOMMouseScroll", EVENTS.mouse_wheel_handler, false); //mouse scroll +document.oncontextmenu = function (e) { return EVENTS.mouse_right_click(e); }; //mouse right click +document.getElementById('color_hex').onkeyup = function (e) { GUI.set_color_manual(e); }; //on main color type +document.getElementById('color_hex').onpaste = function (e) { GUI.set_color_manual(e); }; // on paste in main color input + +//windows touch +document.addEventListener('MSPointerDown', EVENTS.mouse_click, false); +document.addEventListener('MSPointerMove', EVENTS.mouse_move, false); +document.addEventListener('MSPointerUp', EVENTS.mouse_release, false); + +//touch and drag +document.addEventListener("touchstart", EVENTS.mouse_click, false); +document.addEventListener("touchend", EVENTS.mouse_release, false); +document.addEventListener("touchmove", EVENTS.mouse_move, false); +//document.addEventListener("touchcancel", handleCancel, false); + +/** + * all events handling + * + * @author ViliusL + */ +function EVENTS_CLASS() { + + /** + * mouse data, like positions, clicks + */ + this.mouse = {}; + + /** + * if user is holding ctrl + */ + this.ctrl_pressed = false; + + /** + * if user is holding command key + */ + this.command_pressed = false; + + /** + * if use is holding shift + */ + this.shift_pressed = false; //16 + + /** + * if use is draging + */ + this.isDrag = false; + + /** + * selected area resize rect. size (controlls, where you can resize area) + */ + this.sr_size = 8; + + /** + * if false, font canvas is not cleared on mouse release + */ + this.clear_front_on_release = true; + + /** + * if canvas size was not changed - autosize possible + */ + var autosize = true; + + /** + * mouse click positions + */ + var mouse_click_pos = [false, false]; + + /** + * last mouse move position + */ + var mouse_move_last = [false, false]; + + /** + * main canvas resize action + */ + var resize_all = false; + + /** + * if mouse was click on canvas + */ + var mouse_click_valid = false; + + /** + * mouse click position of popup drag start + */ + var last_pop_click = [0, 0]; + + /** + * popup position for dragable ability + */ + var popup_pos = [0, 0]; + + /** + * if popup is dragged + */ + var popup_dragable = false; + + var mouse_average_speed = 0; + + //keyboard actions + this.on_keyboard_action = function (event) { + k = event.keyCode; //console.log(k); + + if (k != 27) { + //we can not touch these events! + if (POP != undefined && POP.active == true){ + //dialog active + return true; + } + if (document.activeElement.type == 'text' || document.activeElement.type == 'number'){ + //text input selected + return true; + } + } + + //ctrl + if (event.ctrlKey == true) { + EVENTS.ctrl_pressed = true; + } + //command + if(event.metaKey == true){ + EVENTS.command_pressed = true; + EVENTS.ctrl_pressed = true; + } + + //F9 + if (k == 120) { + FILE.file_quicksave(); + } + + //F10 + if (k == 121) { + FILE.file_quickload(); + } + + //up + if (k == 38) { + if (DRAW.active_tool == 'select_tool') { + EDIT.save_state(); + LAYER.layer_move_active(0, -1); + GUI.zoom(); + return false; + } + } + //down + else if (k == 40) { + if (DRAW.active_tool == 'select_tool') { + EDIT.save_state(); + LAYER.layer_move_active(0, 1); + GUI.zoom(); + return false; + } + } + //right + else if (k == 39) { + if (DRAW.active_tool == 'select_tool') { + EDIT.save_state(); + LAYER.layer_move_active(1, 0); + GUI.zoom(); + return false; + } + } + //left + else if (k == 37) { + if (DRAW.active_tool == 'select_tool') { + EDIT.save_state(); + LAYER.layer_move_active(-1, 0); + GUI.zoom(); + return false; + } + } + //esc + else if (k == 27) { + if (POP != undefined && POP.active == true) + POP.hide(); + DRAW.last_line = []; + + DRAW.curve_points = []; + if (DRAW.select_data != false) { + EDIT.edit_clear(); + } + } + //z - undo + else if (k == 90) { + //undo + if (EVENTS.ctrl_pressed == true){ + EDIT.undo(); + } + } + //t - trim + else if (k == 84) { + EDIT.save_state(); + IMAGE.trim(); + } + //s - save + else if (k == 83) { + if (POP != undefined) + FILE.save_dialog(event); + } + //l - rotate left + else if (k == 76) { + EDIT.save_state(); + IMAGE.rotate_resize_doc(270, WIDTH, HEIGHT); + IMAGE.rotate_layer({angle: 270}, canvas_active(), WIDTH, HEIGHT); + } + //r - resize + else if (k == 82) + IMAGE.resize_box(); + //grid + else if (k == 71) { + if (GUI.grid == false) + GUI.grid = true; + else + GUI.grid = false; + GUI.draw_grid(); + } + //del + else if (k == 46) { + if (DRAW.select_data != false) { + EDIT.save_state(); + canvas_active().clearRect(DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h); + DRAW.select_data = false; + DRAW.select_square_action = ''; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + } + //shift + else if (k == 16){ + EVENTS.shift_pressed = true; + } + //d + else if (k == 68) { + call_menu(LAYER, 'layer_duplicate'); + } + //a + else if (k == 65) { + if (EVENTS.ctrl_pressed == true) { + DRAW.select_data = { + x: 0, + y: 0, + w: WIDTH, + h: HEIGHT + }; + GUI.draw_selected_area(); + return false; + } + } + //v + else if (k == 86) { + EDIT.save_state(); + if (EVENTS.ctrl_pressed == true) + EDIT.paste(); + } + //f - fix images + else if (k == 70) { + EDIT.save_state(); + IMAGE.auto_adjust(canvas_active(), WIDTH, HEIGHT); + } + //h - histogram + else if (k == 72) { + IMAGE.histogram(); + } + //minus + else if (k == 109){ + GUI.zoom(-1); + } + //plus + else if (k == 107){ + GUI.zoom(+1); + } + //n - new layer + else if (k == 78){ + EDIT.save_state(); + LAYER.layer_add(); + } + + GUI.zoom(); + return true; + }; + //keyboard release + this.on_keyboardup_action = function (event) { + k = event.keyCode; + //shift + if (k == 16) + EVENTS.shift_pressed = false; + //ctrl + else if (event.ctrlKey == false && EVENTS.ctrl_pressed == true) { + EVENTS.ctrl_pressed = false; + } + //command + else if(event.metaKey == false && EVENTS.command_pressed == true){ + EVENTS.command_pressed = false; + EVENTS.ctrl_pressed = false; + } + }; + // mouse_x, mouse_y, event.pageX, event.pageY + this.get_mouse_position = function (event) { + if(event.changedTouches){ + //using touch events + event = event.changedTouches[0]; + } + var valid = true; + var abs_x = event.pageX; + var abs_y = event.pageY; + + var bodyRect = document.body.getBoundingClientRect(); + var canvas_el = document.getElementById('canvas_front').getBoundingClientRect(); + var canvas_offset_x = canvas_el.left - bodyRect.left; + var canvas_offset_y = canvas_el.top - bodyRect.top; + + var mouse_x = event.pageX - canvas_offset_x; + var mouse_y = event.pageY - canvas_offset_y; + + if (event.target.id != "canvas_front") { + //outside canvas + valid = false; + } + + if (event.target.id == "canvas_preview") { + //in preview area - relative pos + var canvas_preview_el = document.getElementById('canvas_preview').getBoundingClientRect(); + var canvas_preview_el_x = canvas_preview_el.left - bodyRect.left; + var canvas_preview_el_y = canvas_preview_el.top - bodyRect.top; + + mouse_x = event.pageX - canvas_preview_el_x; + mouse_y = event.pageY - canvas_preview_el_y; + } + + if (event.target.id != "canvas_preview" && GUI.ZOOM != 100) { + //we are in zoom mode - recalculate + mouse_x = Math.floor(mouse_x / GUI.ZOOM * 100); + mouse_y = Math.floor(mouse_y / GUI.ZOOM * 100); + } + + //save + EVENTS.mouse = { + x: mouse_x, + y: mouse_y, + click_x: mouse_click_pos[0], + click_y: mouse_click_pos[1], + last_x: mouse_move_last[0], + last_y: mouse_move_last[1], + valid: valid, + click_valid: mouse_click_valid, + abs_x: abs_x, + abs_y: abs_y, + }; + }; + //mouse right click + this.mouse_right_click = function (event) { + if (POP != undefined && POP.active == true) + return true; + + EVENTS.get_mouse_position(event); + + if(EVENTS.mouse.x != EVENTS.mouse.click_x && EVENTS.mouse.y != EVENTS.mouse.click_y){ + //disable long click on mobile + event.preventDefault(); + event.stopPropagation(); + return false; + } + + mouse_click_pos[0] = EVENTS.mouse.x; + mouse_click_pos[1] = EVENTS.mouse.y; + + for (var i in DRAW) { + if (i == DRAW.active_tool) { + return DRAW[i]('right_click', EVENTS.mouse, event); + break; + } + } + }; + //mouse click + this.mouse_click = function (event) { + EVENTS.isDrag = true; + if (POP != undefined && POP.active == true) { + EVENTS.get_mouse_position(event); + last_pop_click[0] = EVENTS.mouse.abs_x; + last_pop_click[1] = EVENTS.mouse.abs_y; + popup = document.getElementById('popup'); + popup_pos[0] = parseInt(popup.style.top); + popup_pos[1] = parseInt(popup.style.left); + + if (event.target.id == "popup_drag") + popup_dragable = true; + else + popup_dragable = false; + return true; + } + + //reset avg speed + mouse_average_speed = 0; + + EVENTS.get_mouse_position(event); + mouse_click_pos[0] = EVENTS.mouse.x; + mouse_click_pos[1] = EVENTS.mouse.y; + if (event.which == 3){ + return true; + } + if (EVENTS.mouse.valid == false) + mouse_click_valid = false; + else + mouse_click_valid = true; + + //check tools functions + for (var i in DRAW) { + if (i == DRAW.active_tool) { + DRAW[i]('click', EVENTS.mouse, event); + break; + } + } + + if (event.target.id == "canvas_preview") + EVENTS.calc_preview_by_mouse(EVENTS.mouse.x, EVENTS.mouse.y); + + //main window resize + resize_all = false; + if (GUI.ZOOM == 100) { + if (event.target.id == "resize-w") + resize_all = "w"; + else if (event.target.id == "resize-h") + resize_all = "h"; + else if (event.target.id == "resize-wh") + resize_all = "wh"; + } + }; + //mouse move + this.mouse_move = function (event) { + if (POP != undefined && POP.active == true) { + //drag popup + if (EVENTS.isDrag == true && popup_dragable == true) { + EVENTS.get_mouse_position(event); + popup = document.getElementById('popup'); + popup.style.top = (popup_pos[0] + EVENTS.mouse.abs_y - last_pop_click[1]) + 'px'; + popup.style.left = (popup_pos[1] + EVENTS.mouse.abs_x - last_pop_click[0]) + 'px'; + } + return true; + } + EVENTS.get_mouse_position(event); + if (event.target.id == "canvas_preview" && EVENTS.isDrag == true) + EVENTS.calc_preview_by_mouse(EVENTS.mouse.x, EVENTS.mouse.y); + LAYER.update_info_block(); + + //main window resize + if (GUI.ZOOM == 100) { + if (event.target.id == "resize-w") + document.body.style.cursor = "w-resize"; + else if (event.target.id == "resize-h") + document.body.style.cursor = "n-resize"; + else if (event.target.id == "resize-wh") + document.body.style.cursor = "nw-resize"; + else + document.body.style.cursor = "auto"; + if (resize_all != false && EVENTS.isDrag == true) { + document.body.style.cursor = "auto"; + if (resize_all == "w") { + new_w = EVENTS.mouse.x; + new_h = HEIGHT; + } + else if (resize_all == "h") { + new_w = WIDTH; + new_h = EVENTS.mouse.y; + } + else if (resize_all == "wh") { + new_w = EVENTS.mouse.x; + new_h = EVENTS.mouse.y; + } + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + canvas_front.lineWidth = 1; + canvas_front.fillStyle = "#ff0000"; + EL.rectangle_dashed(canvas_front, 0, 0, new_w - 1, new_h - 1); + event.preventDefault(); + HELPER.remove_selection(); + return false; + } + } + + //calc average speed + var avg_speed_max = 20; + var avg_speed_changing_power = 2; + + var dx = Math.abs(EVENTS.mouse.x - EVENTS.mouse.last_x); + var dy = Math.abs(EVENTS.mouse.y - EVENTS.mouse.last_y); + var delta = Math.sqrt(dx*dx + dy*dy); + if(delta > avg_speed_max/2) + mouse_average_speed += avg_speed_changing_power; + else + mouse_average_speed -= avg_speed_changing_power; + mouse_average_speed = Math.max(0, mouse_average_speed); //min 0 + mouse_average_speed = Math.min(avg_speed_max, mouse_average_speed); //max 30 + EVENTS.mouse.speed_average = mouse_average_speed; + + //check tools functions + if (EVENTS.isDrag === false) { + for (i in DRAW) { + if (i == DRAW.active_tool) { + DRAW[i]('move', EVENTS.mouse, event); + break; + } + } + } + + if (EVENTS.isDrag === false) + return false; //only drag now + + //check tools functions + for (var i in DRAW) { + if (i == DRAW.active_tool) { + DRAW[i]('drag', EVENTS.mouse, event); + break; + } + } + + if (DRAW.active_tool != 'select_square') + DRAW.select_square_action = ''; + + mouse_move_last[0] = EVENTS.mouse.x; + mouse_move_last[1] = EVENTS.mouse.y; + }; + //release mouse click + this.mouse_release = function (event) { + EVENTS.isDrag = false; + if (POP != undefined && POP.active == true) + return true; + EVENTS.get_mouse_position(event); + mouse_move_last[0] = false; + mouse_move_last[1] = false; + + if (DRAW.select_square_action == '' && EVENTS.mouse.valid == true) + DRAW.select_data = false; + + //check tools functions + if (EVENTS.clear_front_on_release == true) + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + GUI.draw_selected_area(); + for (var i in DRAW) { + if (i == DRAW.active_tool) { + DRAW[i]('release', EVENTS.mouse, event); + break; + } + } + + //main window resize + if (resize_all != false && GUI.ZOOM == 100 && EVENTS.mouse.x > 0 && EVENTS.mouse.y > 0) { + EDIT.save_state(); + EVENTS.autosize = false; + document.body.style.cursor = "auto"; + if (resize_all == "w") + WIDTH = EVENTS.mouse.x; + else if (resize_all == "h") + HEIGHT = EVENTS.mouse.y; + else if (resize_all == "wh") { + WIDTH = EVENTS.mouse.x; + HEIGHT = EVENTS.mouse.y; + } + LAYER.set_canvas_size(); + GUI.zoom(); + } + resize_all = false; + GUI.zoom(); + }; + //upload drop zone + this.upload_drop = function (e) { + e.preventDefault(); + + EDIT.save_state(); + FILE.open_handler(e); + }; + this.mouse_wheel_handler = function (e) { //return true; + e.preventDefault(); + //zoom + if (EVENTS.ctrl_pressed == true) { + var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); + if(delta > 0) + GUI.zoom(+1, true); + else + GUI.zoom(-1, true); + + return false; + } + }; + this.scroll_window = function() { + var canvas_wrapper = document.querySelector('#canvas_wrapper'); + var visible_w = canvas_wrapper.clientWidth / GUI.ZOOM * 100; + var visible_h = canvas_wrapper.clientHeight / GUI.ZOOM * 100; + + if(this.mouse.valid == true){ + GUI.zoom_center = [this.mouse.x/WIDTH*100, this.mouse.y/HEIGHT*100]; + } + + //scroll to - convert center % coordinates to top/left px, and translate to current zoom + if(this.mouse.valid == true){ + //using exact position + xx = (GUI.zoom_center[0] * WIDTH / 100 - visible_w * GUI.zoom_center[0]/100) * GUI.ZOOM / 100; + yy = (GUI.zoom_center[1] * HEIGHT / 100 - visible_h * GUI.zoom_center[1]/100) * GUI.ZOOM / 100; + } + else{ + //using center + xx = (GUI.zoom_center[0] * WIDTH / 100 - visible_w / 2) * GUI.ZOOM / 100; + yy = (GUI.zoom_center[1] * HEIGHT / 100 - visible_h / 2) * GUI.ZOOM / 100; + } + + canvas_wrapper.scrollLeft = xx; + canvas_wrapper.scrollTop = yy; + + }; + this.calc_preview_by_mouse = function (mouse_x, mouse_y) { + GUI.zoom_center[0] = mouse_x / GUI.PREVIEW_SIZE.w * 100; + GUI.zoom_center[1] = mouse_y / GUI.PREVIEW_SIZE.h * 100; + + GUI.zoom(undefined, true); + return true; + }; + this.on_resize = function(){ + GUI.redraw_preview(); + + //recalc popup position + var dim = HELPER.get_dimensions(); + popup = document.getElementById('popup'); + popup.style.top = 150 + 'px'; + popup.style.left = Math.round(dim[0] / 2) + 'px'; + + document.querySelector('#sidebar_left').classList.remove("active"); + document.querySelector('#sidebar_right').classList.remove("active"); + }; +} + +function call_menu(class_name, function_name, parameter) { + //close menu + var menu = document.querySelector('#main_menu .selected'); + if(menu != undefined){ + menu.click(); + } + GUI.last_menu = function_name; + + //exec + class_name[function_name](parameter); + + GUI.zoom(); +} + +//=== Clipboard ================================================================ + +var CLIPBOARD = new CLIPBOARD_CLASS('', false); + +/** + * image pasting into canvas + * + * @param {string} canvas_id - canvas id + * @param {boolean} autoresize - if canvas will be resized + */ +function CLIPBOARD_CLASS(canvas_id, autoresize) { + var _self = this; + if (canvas_id != ''){ + var canvas = document.getElementById(canvas_id); + var ctx = document.getElementById(canvas_id).getContext("2d"); + } + var ctrl_pressed = false; + var command_pressed = false; + var reading_dom = false; + var text_top = 15; + var pasteCatcher; + var paste_mode; + + //handlers + document.addEventListener('keydown', function (e) { + _self.on_keyboard_action(e); + }, false); //firefox fix + document.addEventListener('keyup', function (e) { + _self.on_keyboardup_action(e); + }, false); //firefox fix + document.addEventListener('paste', function (e) { + _self.paste_auto(e); + }, false); //official paste handler + + //constructor - prepare + this.init = function () { + //if using auto + if (window.Clipboard) + return true; + + pasteCatcher = document.createElement("div"); + pasteCatcher.setAttribute("id", "paste_ff"); + pasteCatcher.setAttribute("contenteditable", ""); + pasteCatcher.style.cssText = 'opacity:0;position:fixed;top:0px;left:0px;'; + pasteCatcher.style.marginLeft = "-20px"; + pasteCatcher.style.width = "10px"; + document.body.appendChild(pasteCatcher); + + // create an observer instance + var observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (paste_mode == 'auto' || ctrl_pressed == false || mutation.type != 'childList') + return true; + + //if paste handle failed - capture pasted object manually + if(mutation.addedNodes.length == 1) { + if (mutation.addedNodes[0].src != undefined) { + //image + _self.paste_createImage(mutation.addedNodes[0].src); + } + //register cleanup after some time. + setTimeout(function () { + pasteCatcher.innerHTML = ''; + }, 20); + } + }); + }); + var target = document.getElementById('paste_ff'); + var config = { attributes: true, childList: true, characterData: true }; + observer.observe(target, config); + }(); + //default paste action + this.paste_auto = function (e) { + paste_mode = ''; + pasteCatcher.innerHTML = ''; + var plain_text_used = false; + if (e.clipboardData) { + var items = e.clipboardData.items; + if (items) { + paste_mode = 'auto'; + //access data directly + for (var i = 0; i < items.length; i++) { + if (items[i].type.indexOf("image") !== -1) { + //image + var blob = items[i].getAsFile(); + var URLObj = window.URL || window.webkitURL; + var source = URLObj.createObjectURL(blob); + this.paste_createImage(source); + } + } + e.preventDefault(); + } + else { + //wait for DOMSubtreeModified event + //https://bugzilla.mozilla.org/show_bug.cgi?id=891247 + } + } + }; + //on keyboard press + this.on_keyboard_action = function (event) { + if (POP.active == true) + return true; + k = event.keyCode; + //ctrl + if (k == 17 || event.metaKey || event.ctrlKey) { + if (ctrl_pressed == false) + ctrl_pressed = true; + } + //v + if (k == 86) { + if (document.activeElement != undefined && document.activeElement.type == 'text') { + //let user paste into some input + return false; + } + + if (ctrl_pressed == true && !window.Clipboard) + pasteCatcher.focus(); + } + }; + //on kaybord release + this.on_keyboardup_action = function (event) { + //ctrl + if (event.ctrlKey == false && ctrl_pressed == true) { + ctrl_pressed = false; + } + //command + else if(event.metaKey == false && command_pressed == true){ + command_pressed = false; + ctrl_pressed = false; + } + }; + //draw image + this.paste_createImage = function (source) { + var pastedImage = new Image(); + pastedImage.onload = function () { + if(canvas_id != ''){ + if(autoresize == true){ + //resize + canvas.width = pastedImage.width; + canvas.height = pastedImage.height; + } + else{ + //clear canvas + ctx.clearRect(0, 0, canvas.width, canvas.height); + } + } + LAYER.layer_add('Paste', source); + }; + pastedImage.src = source; + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.xml new file mode 100644 index 00000000000..9c155a97ebd --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/events.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>events.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.js new file mode 100644 index 00000000000..04f335beda2 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.js @@ -0,0 +1,495 @@ +/* global MAIN, POP, LAYER, EXIF, HELPER, IMAGE, GUI, EDIT, DRAW */ +/* global SAVE_TYPES */ + +var FILE = new FILE_CLASS(); + +/** + * manages files actions + * + * @author ViliusL + */ +function FILE_CLASS() { + + /** + * file info: exif, general data + */ + this.file_info = { + general: [], + exif: [], + }; + + /** + * default name used for saving file + */ + this.SAVE_NAME = 'example'; //default save name + + /** + * save types config + */ + this.SAVE_TYPES = [ + "PNG - Portable Network Graphics", //default + "JPG - JPG/JPEG Format", //autodetect on photos where png useless? + "JSON - Full layers data", //aka PSD + "BMP - Windows Bitmap", //firefox only, useless? + "WEBP - Weppy File Format", //chrome only + ]; + //new + this.file_new = function () { + var w = WIDTH; + var h = HEIGHT; + var resolutions = ['Custom']; + for(var i in GUI.common_dimensions){ + resolutions.push(GUI.common_dimensions[i][0]+'x'+GUI.common_dimensions[i][1]+' - '+GUI.common_dimensions[i][2]); + } + + var save_resolution_cookie = HELPER.getCookie('save_resolution'); + if(save_resolution_cookie == '') + save_resolution = 'No'; + else{ + save_resolution = 'Yes'; + var last_resolution = JSON.parse(save_resolution_cookie); + w = parseInt(last_resolution[0]); + h = parseInt(last_resolution[1]); + } + + POP.add({name: "width", title: "Width:", value: w}); + POP.add({name: "height", title: "Height:", value: h}); + POP.add({name: "resolution", title: "Resolution:", values: resolutions}); + POP.add({name: "transparency", title: "Transparent:", values: ['Yes', 'No']}); + POP.add({name: "save_resolution", title: "Save resolution:", value: save_resolution, values: ['Yes', 'No']}); + POP.show( + 'New file...', + function (response) { + var width = parseInt(response.width); + var height = parseInt(response.height); + var resolution = response.resolution; + var save_resolution = response.save_resolution; + + if(resolution != 'Custom'){ + var dim = resolution.split(" "); + dim = dim[0].split("x"); + width = dim[0]; + height = dim[1]; + } + if (response.transparency == 'Yes') + GUI.TRANSPARENCY = true; + else + GUI.TRANSPARENCY = false; + + GUI.ZOOM = 100; + WIDTH = width; + HEIGHT = height; + MAIN.init(); + + if(save_resolution == 'No') + save_resolution = ''; + else { + save_resolution = JSON.stringify([WIDTH, HEIGHT]); + } + HELPER.setCookie('save_resolution', save_resolution); + } + ); + }; + + //open + this.file_open = function () { + EDIT.save_state(); + this.open(); + }; + + //save + this.file_save = function () { + this.save_dialog(); + }; + + //print + this.file_print = function () { + window.print(); + }; + + this.open = function () { + var self = this; + + document.getElementById("tmp").innerHTML = ''; + var a = document.createElement('input'); + a.setAttribute("id", "file_open"); + a.type = 'file'; + a.multiple = 'multiple '; + document.getElementById("tmp").appendChild(a); + document.getElementById('file_open').addEventListener('change', function (e) { + self.open_handler(e); + }, false); + + //force click + document.querySelector('#file_open').click(); + }; + + this.open_handler = function (e) { + var files = e.target.files; + var self = this; + if(files == undefined){ + //drag and drop + files = e.dataTransfer.files; + } + + for (var i = 0, f; i < files.length; i++) { + f = files[i]; + if (!f.type.match('image.*') && !f.name.match('.json')){ + console.log('Wrong file type, must be image or json.'); + continue; + } + if (files.length == 1) + this.SAVE_NAME = f.name.split('.')[f.name.split('.').length - 2]; + + var FR = new FileReader(); + FR.file = files[i]; + + FR.onload = function (event) { + if (this.file.type.match('image.*')) { + //image + LAYER.layer_add(this.file.name, event.target.result, this.file.type); + self.save_file_info(this.file); + } + else { + //json + var responce = self.load_json(event.target.result); + if (responce === true) + return false; + } + }; + if (f.type == "text/plain") + FR.readAsText(f); + else if (f.name.match('.json')) + FR.readAsText(f); + else + FR.readAsDataURL(f); + } + }; + + this.save_dialog = function (e) { + //find default format + var save_default = this.SAVE_TYPES[0]; //png + if (HELPER.getCookie('save_default') == 'jpg') + save_default = this.SAVE_TYPES[1]; //jpg + + POP.add({name: "name", title: "File name:", value: this.SAVE_NAME}); + POP.add({name: "type", title: "Save as type:", values: this.SAVE_TYPES, value: save_default}); + POP.add({name: "quality", title: "Quality (jpeg):", value: 90, range: [1, 100]}); + POP.add({name: "layers", title: "Save layers:", values: ['All', 'Selected']}); + POP.add({name: "trim", title: "Trim:", values: ['No', 'Yes']}); + POP.show('Save as', [FILE, 'save']); + document.getElementById("pop_data_name").select(); + if (e != undefined) + e.preventDefault(); + }; + + this.save = function (user_response) { + fname = user_response.name; + var tempCanvas = document.createElement("canvas"); + var tempCtx = tempCanvas.getContext("2d"); + tempCanvas.width = WIDTH; + tempCanvas.height = HEIGHT; + + //save choosen type + var save_default = this.SAVE_TYPES[0]; //png + if (HELPER.getCookie('save_default') == 'jpg') + save_default = this.SAVE_TYPES[1]; //jpg + if (user_response.type != save_default && user_response.type == this.SAVE_TYPES[0]) + HELPER.setCookie('save_default', 'png'); + else if (user_response.type != save_default && user_response.type == this.SAVE_TYPES[1]) + HELPER.setCookie('save_default', 'jpg'); + + //detect type + var parts = user_response.type.split(" "); + user_response.type = parts[0]; + + if (HELPER.strpos(fname, '.png') !== false) + user_response.type = 'PNG'; + else if (HELPER.strpos(fname, '.jpg') !== false) + user_response.type = 'JPG'; + else if (HELPER.strpos(fname, '.json') !== false) + user_response.type = 'JSON'; + else if (HELPER.strpos(fname, '.bmp') !== false) + user_response.type = 'BMP'; + else if (HELPER.strpos(fname, '.webp') !== false) + user_response.type = 'WEBP'; + + //handle transparency + if (GUI.TRANSPARENCY == false || user_response.type == 'JPG') { + tempCtx.beginPath(); + tempCtx.rect(0, 0, WIDTH, HEIGHT); + tempCtx.fillStyle = "#ffffff"; + tempCtx.fill(); + } + + //take data + for(var i = LAYER.layers.length-1; i >=0; i--){ + if (LAYER.layers[i].visible == false) + continue; + if (user_response.layers == 'Selected' && user_response.type != 'JSON' && i != LAYER.layer_active) + continue; + tempCtx.drawImage(document.getElementById(LAYER.layers[i].name), 0, 0, WIDTH, HEIGHT); + } + + if (user_response.trim == 'Yes' && user_response.type != 'JSON') { + //trim + var trim_info = IMAGE.trim_info(tempCanvas); + tmp_data = tempCtx.getImageData(0, 0, WIDTH, HEIGHT); + tempCtx.clearRect(0, 0, WIDTH, HEIGHT); + tempCanvas.width = WIDTH - trim_info.right - trim_info.left; + tempCanvas.height = HEIGHT - trim_info.bottom - trim_info.top; + tempCtx.putImageData(tmp_data, -trim_info.left, -trim_info.top); + } + + if (user_response.type == 'PNG') { + //png - default format + if (HELPER.strpos(fname, '.png') == false) + fname = fname + ".png"; + + tempCanvas.toBlob(function(blob) { + saveAs(blob, fname); + }); + } + else if (user_response.type == 'JPG') { + //jpg + if (HELPER.strpos(fname, '.jpg') == false) + fname = fname + ".jpg"; + + var quality = parseInt(user_response.quality); + if (quality > 100 || quality < 1 || isNaN(quality) == true) + quality = 90; + quality = quality / 100; + + tempCanvas.toBlob(function (blob) { + saveAs(blob, fname); + }, "image/jpeg", quality); + } + else if (user_response.type == 'WEBP') { + //WEBP - new format for chrome only + if (HELPER.strpos(fname, '.webp') == false) + fname = fname + ".webp"; + var data_header = "image/webp"; + + //check support + if(this.check_format_support(tempCanvas, data_header) == false) + return false; + + tempCanvas.toBlob(function (blob) { + saveAs(blob, fname); + }, data_header); + } + else if (user_response.type == 'BMP') { + //bmp + if (HELPER.strpos(fname, '.webp') == false) + fname = fname + ".webp"; + var data_header = "image/bmp"; + + //check support + if(this.check_format_support(tempCanvas, data_header) == false) + return false; + + tempCanvas.toBlob(function (blob) { + saveAs(blob, fname); + }, data_header); + } + else if (user_response.type == 'JSON') { + //json - full data with layers + if (HELPER.strpos(fname, '.json') == false) + fname = fname + ".json"; + + var data_json = this.export_as_json(); + + var blob = new Blob([data_json], {type: "text/plain"}); + //var data = window.URL.createObjectURL(blob); //html5 + saveAs(blob, fname); + } else if (user_response.type == 'BLOB') { + var deferred = RSVP.defer(); + + tempCanvas.toBlob(function(blob) { + return deferred.resolve(blob); + }); + + return deferred.promise; + } + }; + + this.check_format_support = function(canvas, data_header){ + var data = canvas.toDataURL(data_header); + var actualType = data.replace(/^data:([^;]*).*/, '$1'); + + if (data_header != actualType && data_header != "text/plain") { + //error - no support + POP.add({title: "Error:", value: 'Your browser does not support this format.'}); + POP.show('Sorry', ''); + delete data; + return false; + } + delete data; + return true; + }; + + this.save_cleanup = function (a) { + a.textContent = 'Downloaded'; + setTimeout(function () { + a.href = ''; + var element = document.getElementById("save_data"); + element.parentNode.removeChild(element); + }, 1500); + }; + + this.save_file_info = function (object) { + this.file_info = { + general: [], + exif: [], + }; + //exif data + EXIF.getData(object, function() { + FILE.file_info.exif = this.exifdata; + }); + + //general + if(object.name != undefined) + FILE.file_info.general.Name = object.name; + if(object.size != undefined) + FILE.file_info.general.Size = HELPER.number_format(object.size/1000, 2)+' KB'; + if(object.type != undefined) + FILE.file_info.general.Type = object.type; + if(object.lastModified != undefined) + FILE.file_info.general['Last modified'] = '___'+new Date(object.lastModified); + }; + + this.export_as_json = function(){ + var export_data = {}; + + //basic info + export_data.info = { + width: WIDTH, + height: HEIGHT, + }; + + //layers + export_data.layers = []; + for(var i = LAYER.layers.length-1; i >=0; i--){ + var layer = { + name:LAYER.layers[i].name, + title:LAYER.layers[i].title, + visible: 1, + opacity: LAYER.layers[i].opacity, + }; + if (LAYER.layers[i].visible == false) + layer.visible = 0; + export_data.layers.push(layer); + } + + //image data + export_data.image_data = []; + for(var i = LAYER.layers.length-1; i >=0; i--){ + var data_tmp = document.getElementById(LAYER.layers[i].name).toDataURL("image/png"); + export_data.image_data.push({name: LAYER.layers[i].name, data: data_tmp}); + } + + var data_json = JSON.stringify(export_data, null, 6); + delete export_data; + + return data_json; + }; + + this.load_json = function (data) { + var json = JSON.parse(data); + + //init new file + GUI.ZOOM = 100; + MAIN.init(); + + LAYER.remove_all_layers(); + + //set attributes + WIDTH = parseInt(json.info.width); + HEIGHT = parseInt(json.info.height); + LAYER.set_canvas_size(); + + //add layers + for(var i in json.layers){ + var layer = json.layers[i]; + var name = layer.name.replace(/[^0-9a-zA-Z-_\. ]/g, ""); + var title = layer.title; + var visible = parseInt(layer.visible); + var opacity = parseInt(layer.opacity); + + LAYER.layer_add(name); + //update attributes + LAYER.layers[LAYER.layer_active].title = title; + if (visible == 0) + LAYER.layer_visibility(LAYER.layer_active); + LAYER.layers[LAYER.layer_active].opacity = opacity; + } + LAYER.layer_renew(); + + for(var i in json.image_data){ + var layer = json.image_data[i]; + var name = layer.name.replace(/[^0-9a-zA-Z-_\. ]/g, ""); + var data = layer.data; + + var img = new Image(); + img.onload = (function(name, value){ + return function(){ + document.getElementById(name).getContext('2d').drawImage(value, 0, 0); + + LAYER.layer_renew(); + GUI.zoom(); + }; + })(name, img); + img.src = data; + } + }; + + this.file_quicksave = function(){ + //save image data + var data_json = this.export_as_json(); + if(data_json.length > 5000000){ + POP.add({html: 'Sorry, image is too big, max 5 MB.'}); + POP.show('Error', ''); + return false; + } + localStorage.setItem('quicksave_data', data_json); + + //save settings + settings = { + color: COLOR, + active_tool: DRAW.active_tool, + zoom: GUI.ZOOM, + }; + settings = JSON.stringify(settings); + localStorage.setItem('quicksave_settings', settings); + }; + + this.file_quickload = function(){ + //load image data + var json = localStorage.getItem('quicksave_data'); + if(json == '' || json == null){ + //nothing was found + return false; + } + this.load_json(json); + GUI.zoom_auto(true); + + //load settings + var settings = localStorage.getItem('quicksave_settings'); + if(settings == '' || settings == null){ + //nothing was found + return false; + } + settings = JSON.parse(settings); + + //load color + COLOR = settings.color; + GUI.sync_colors(); + + //load active tool + GUI.action(settings.active_tool); + + //load zoom + GUI.zoom(settings.zoom, false); + }; + +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.xml new file mode 100644 index 00000000000..100b4fc3ed6 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/file.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>file.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.js new file mode 100644 index 00000000000..18f9295b1ce --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.js @@ -0,0 +1,739 @@ +/* global EVENTS, HELPER, POP, DRAW, LAYER, EL, HELP, LANG */ +/* global WIDTH, HEIGHT, canvas_front, DRAW_TOOLS_CONFIG, canvas_grid, canvas_preview */ + +var GUI = new GUI_CLASS(); + +/** + * manages grapchic interface functionality: left/right sidebar actions + * + * @author ViliusL + */ +function GUI_CLASS() { + + /** + * preview mini window size on right sidebar + */ + this.PREVIEW_SIZE = {w: 148, h: 100}; + + /** + * last used menu id + */ + this.last_menu = ''; + + /** + * grid dimnesions config + */ + this.grid_size = [50, 50]; + + /** + * if grid is visible + */ + this.grid = false; + + /** + * true if using transparecy, false if using white background + */ + this.TRANSPARENCY = true; + + /** + * zoom level, original - 100%, can vary from 10% to 1000% + */ + this.ZOOM = 100; + + /** + * visible part center coordinates, when zoomed in + */ + this.zoom_center = [50, 50]; + + /** + * common image dimensions + */ + this.common_dimensions = [ + [640,480, '480p'], + [800,600, 'SVGA'], + [1024,768, 'XGA'], + [1280,720, 'hdtv, 720p'], + [1600,1200, 'UXGA'], + [1920,1080, 'Full HD, 1080p'], + [3840,2160, '4K UHD'], + [7680,4320, '8K UHD'], + ]; + + /** + * last color copy + */ + var COLOR_copy; + + this.draw_helpers = function () { + //left menu + var html = ''; + for (var i in DRAW_TOOLS_CONFIG) { + html += '<a title="' + DRAW_TOOLS_CONFIG[i].title + '"'; + html += ' style="background: #989898 url(\'../miniPaint/img/' + DRAW_TOOLS_CONFIG[i].icon[0] + '\') no-repeat ' + DRAW_TOOLS_CONFIG[i].icon[1] + 'px ' + DRAW_TOOLS_CONFIG[i].icon[2] + 'px;"'; + if (DRAW_TOOLS_CONFIG[i].name == DRAW.active_tool) + html += ' class="active trn"'; + else + html += ' class="trn"'; + html += ' onclick="return GUI.action(\'' + DRAW_TOOLS_CONFIG[i].name + '\');"'; + html += ' id="' + DRAW_TOOLS_CONFIG[i].name + '"'; + html += ' href="#"></a>' + "\n"; + } + document.getElementById("menu_left_container").innerHTML = html; + + //draw colors + var html = ''; + var colors_data = [ + ['#ff0000', '#ff5b31', '#ffa500', '#ff007f', '#ff00ff'], //red + ['#00ff00', '#008000', '#7fff00', '#00ff7f', '#8ac273'], //green + ['#0000ff', '#007fff', '#37629c', '#000080', '#8000ff'], //blue + ['#ffff00', '#ffff80', '#ddd06a', '#808000', '#bcb88a'], //yellow + ['#ffffff', '#c0c0c0', '#808080', '#404040', '#000000'], //grey + ]; + for (var i in colors_data) { + for (var j in colors_data[i]) { + html += '<div style="background-color:' + colors_data[i][j] + ';" class="mini-color" onclick="GUI.set_color(this);"></div>' + "\n"; + } + html += '<div style="clear:both;"></div>' + "\n"; + } + document.getElementById("all_colors").innerHTML = html; + }; + + this.autodetect_dimensions = function(){ + var canvas_wrapper = document.querySelector('#canvas_wrapper'); + var page_w = canvas_wrapper.clientWidth; + var page_h = canvas_wrapper.clientHeight; + var auto_size = false; + + var save_resolution_cookie = HELPER.getCookie('save_resolution'); + if(save_resolution_cookie != ''){ + //load last saved resolution + save_resolution = 'Yes'; + var last_resolution = JSON.parse(save_resolution_cookie); + WIDTH = parseInt(last_resolution[0]); + HEIGHT = parseInt(last_resolution[1]); + } + else{ + //use largest possible + for(var i = this.common_dimensions.length-1; i >= 0; i--){ + if(this.common_dimensions[i][0] >page_w || this.common_dimensions[i][1] > page_h){ + //browser size is too small + continue; + } + WIDTH = this.common_dimensions[i][0]; + HEIGHT = this.common_dimensions[i][1]; + auto_size = true; + break; + } + + if(auto_size == false) { + //screen size is smaller then 400x300 + WIDTH = page_w - 5; + HEIGHT = page_h - 10; + if(page_w < 585){ + HEIGHT = HEIGHT - 15; + } + } + } + }; + + this.draw_background = function (canvas, W, H, gap, force) { + if (this.TRANSPARENCY == false && force == undefined) { + canvas.beginPath(); + canvas.rect(0, 0, W, H); + canvas.fillStyle = "#ffffff"; + canvas.fill(); + return false; + } + if (gap == undefined) + gap = 10; + var fill = true; + for (var i = 0; i < W; i = i + gap) { + if (i % (gap * 2) == 0) + fill = true; + else + fill = false; + for (var j = 0; j < H; j = j + gap) { + if (fill == true) { + canvas.fillStyle = '#eeeeee'; + canvas.fillRect(i, j, gap, gap); + fill = false; + } + else + fill = true; + } + } + }; + + this.draw_grid = function (gap_x, gap_y) { + if (this.grid == false) { + document.getElementById("canvas_grid").style.display = 'none'; + return false; + } + else { + document.getElementById("canvas_grid").style.display = ''; + canvas_grid.clearRect(0, 0, WIDTH, HEIGHT); + } + + //size + if (gap_x != undefined && gap_y != undefined) + this.grid_size = [gap_x, gap_y]; + else { + gap_x = this.grid_size[0]; + gap_y = this.grid_size[1]; + } + gap_x = parseInt(gap_x); + gap_y = parseInt(gap_y); + if (gap_x < 2) + gap_x = 2; + if (gap_y < 2) + gap_y = 2; + for (var i = gap_x; i < WIDTH; i = i + gap_x) { + if (gap_x == 0) + break; + if (i % (gap_x * 5) == 0) //main lines + canvas_grid.strokeStyle = '#222222'; + else { + EL.line_dashed(canvas_grid, i, 0, i, HEIGHT, 3, '#888888'); + continue; + } + canvas_grid.beginPath(); + canvas_grid.moveTo(0.5 + i, 0); + canvas_grid.lineTo(0.5 + i, HEIGHT); + canvas_grid.stroke(); + } + for (var i = gap_y; i < HEIGHT; i = i + gap_y) { + if (gap_y == 0) + break; + if (i % (gap_y * 5) == 0) //main lines + canvas_grid.strokeStyle = '#222222'; + else { + EL.line_dashed(canvas_grid, 0, i, WIDTH, i, 3, '#888888'); + continue; + } + canvas_grid.beginPath(); + canvas_grid.moveTo(0, 0.5 + i); + canvas_grid.lineTo(WIDTH, 0.5 + i); + canvas_grid.stroke(); + } + }; + this.redraw_preview = function () { + canvas_preview.beginPath(); + canvas_preview.rect(0, 0, GUI.PREVIEW_SIZE.w, GUI.PREVIEW_SIZE.h); + canvas_preview.fillStyle = "#ffffff"; + canvas_preview.fill(); + this.draw_background(canvas_preview, GUI.PREVIEW_SIZE.w, GUI.PREVIEW_SIZE.h, 5); + + //redraw preview area + canvas_preview.save(); + canvas_preview.scale(GUI.PREVIEW_SIZE.w / WIDTH, GUI.PREVIEW_SIZE.h / HEIGHT); + for(var i = LAYER.layers.length-1; i >=0; i--){ + if (LAYER.layers[i].visible == false) + continue; + canvas_preview.drawImage(document.getElementById(LAYER.layers[i].name), 0, 0, WIDTH, HEIGHT); + } + canvas_preview.restore(); + + //active zone + var canvas_wrapper = document.querySelector('#canvas_wrapper'); + var visible_w = canvas_wrapper.clientWidth / GUI.ZOOM * 100; + var visible_h = canvas_wrapper.clientHeight / GUI.ZOOM * 100; + + var mini_rect_w = GUI.PREVIEW_SIZE.w * visible_w / WIDTH; + var mini_rect_h = GUI.PREVIEW_SIZE.h * visible_h / HEIGHT; + + //xx = (GUI.zoom_center[0] * WIDTH / 100 - visible_w*GUI.zoom_center[0]/100) * GUI.ZOOM / 100; + if(EVENTS.mouse.valid == true){ + //using exact position + mini_rect_x = GUI.zoom_center[0] * GUI.PREVIEW_SIZE.w / 100 - mini_rect_w * GUI.zoom_center[0] / 100; + mini_rect_y = GUI.zoom_center[1] * GUI.PREVIEW_SIZE.h / 100 - mini_rect_h * GUI.zoom_center[1] / 100; + } + else{ + //using center + mini_rect_x = GUI.zoom_center[0] * GUI.PREVIEW_SIZE.w / 100 - mini_rect_w / 2; + mini_rect_y = GUI.zoom_center[1] * GUI.PREVIEW_SIZE.h / 100 - mini_rect_h / 2; + } + + //validate + mini_rect_x = Math.max(0, mini_rect_x); + mini_rect_y = Math.max(0, mini_rect_y); + mini_rect_w = Math.min(GUI.PREVIEW_SIZE.w-1, mini_rect_w); + mini_rect_h = Math.min(GUI.PREVIEW_SIZE.h-1, mini_rect_h); + if (mini_rect_x + mini_rect_w > GUI.PREVIEW_SIZE.w) + mini_rect_x = GUI.PREVIEW_SIZE.w - mini_rect_w ; + if (mini_rect_y + mini_rect_h > GUI.PREVIEW_SIZE.h) + mini_rect_y = GUI.PREVIEW_SIZE.h - mini_rect_h; + + if(mini_rect_x == 0 && mini_rect_y == 0 && mini_rect_w == GUI.PREVIEW_SIZE.w -1 && mini_rect_h == GUI.PREVIEW_SIZE.h -1){ + //everything is visible + return false; + } + + //draw selected area in preview canvas + canvas_preview.lineWidth = 1; + canvas_preview.beginPath(); + canvas_preview.rect(Math.round(mini_rect_x) + 0.5, Math.round(mini_rect_y) + 0.5, mini_rect_w, mini_rect_h); + canvas_preview.fillStyle = "rgba(0, 255, 0, 0.3)"; + canvas_preview.strokeStyle = "#00ff00"; + canvas_preview.fill(); + canvas_preview.stroke(); + return true; + }; + this.zoom = function (recalc, scroll) { + if (recalc != undefined) { + //zoom-in or zoom-out + if (recalc == 1 || recalc == -1) { + var step = 100; + if (this.ZOOM <= 110 && recalc < 0){ + step = 10; + } + if (this.ZOOM <= 90 && recalc > 0){ + step = 10; + } + this.ZOOM = this.ZOOM + recalc * step; + if (this.ZOOM > 100 && this.ZOOM < 200){ + this.ZOOM = 100; + } + } + else { + //zoom using exact value + this.ZOOM = parseInt(recalc); + } + this.ZOOM = Math.max(this.ZOOM, 10); + GUI.redraw_preview(); + } + document.getElementById("zoom_nr").value = this.ZOOM+'%'; + document.getElementById("zoom_range").value = this.ZOOM; + + //change scale and repaint + document.getElementById('canvas_back').style.width = Math.round(WIDTH * this.ZOOM / 100) + "px"; + document.getElementById('canvas_back').style.height = Math.round(HEIGHT * this.ZOOM / 100) + "px"; + for (var i in LAYER.layers) { + document.getElementById(LAYER.layers[i].name).style.width = Math.round(WIDTH * this.ZOOM / 100) + "px"; + document.getElementById(LAYER.layers[i].name).style.height = Math.round(HEIGHT * this.ZOOM / 100) + "px"; + } + document.getElementById('canvas_front').style.width = Math.round(WIDTH * this.ZOOM / 100) + "px"; + document.getElementById('canvas_front').style.height = Math.round(HEIGHT * this.ZOOM / 100) + "px"; + + document.getElementById('canvas_grid').style.width = Math.round(WIDTH * this.ZOOM / 100) + "px"; + document.getElementById('canvas_grid').style.height = Math.round(HEIGHT * this.ZOOM / 100) + "px"; + + //check main resize corners + if (this.ZOOM != 100) { + document.getElementById('resize-w').style.display = "none"; + document.getElementById('resize-h').style.display = "none"; + document.getElementById('resize-wh').style.display = "none"; + } + else { + document.getElementById('resize-w').style.display = "block"; + document.getElementById('resize-h').style.display = "block"; + document.getElementById('resize-wh').style.display = "block"; + } + + if (scroll != undefined){ + EVENTS.scroll_window(); + } + this.redraw_preview(); + return true; + }; + + this.zoom_auto = function(only_increase){ + var canvas_wrapper = document.querySelector('#canvas_wrapper'); + var page_w = canvas_wrapper.clientWidth; + var page_h = canvas_wrapper.clientHeight; + + var best_width = page_w / WIDTH * 100; + var best_height = page_h / HEIGHT * 100; + var best_zoom = Math.floor(Math.min(best_width, best_height)); + if(only_increase != undefined && best_zoom > 100){ + return false; + } + this.zoom(Math.min(best_width, best_height), true); + }; + + this.update_attribute = function (object, next_value) { + var max_value = 500; + for (var k in this.action_data().attributes) { + if (k != object.id) + continue; + if (this.action_data().attributes[k] === true || this.action_data().attributes[k] === false) { + //true / false + var value; + if (next_value == 0) + value = true; + else + value = false; + //save + this.action_data().attributes[k] = value; + this.show_action_attributes(); + } + else if (typeof this.action_data().attributes[k] == 'object') { + //select + + var selected = object.options[object.selectedIndex]; + var value = selected.getAttribute('data-value'); + + var key = k.replace("_values", ""); + this.action_data().attributes[key] = value; + } + else if (this.action_data().attributes[k][0] == '#') { + //color + var key = k.replace("_values", ""); + this.action_data().attributes[key] = object.value; + } + else { + //numbers + if (next_value != undefined) { + if (next_value > 0) { + if (parseInt(this.action_data().attributes[k]) == 0) + object.value = 1; + else if (parseInt(this.action_data().attributes[k]) == 1) + object.value = 5; + else if (parseInt(this.action_data().attributes[k]) == 5) + object.value = 10; + else + object.value = parseInt(this.action_data().attributes[k]) + next_value; + } + else if (next_value < 0) { + if (parseInt(this.action_data().attributes[k]) == 1) + object.value = 0; + else if (parseInt(this.action_data().attributes[k]) <= 5) + object.value = 1; + else if (parseInt(this.action_data().attributes[k]) <= 10) + object.value = 5; + else if (parseInt(this.action_data().attributes[k]) <= 20) + object.value = 10; + else + object.value = parseInt(this.action_data().attributes[k]) + next_value; + } + + if (object.value < 0) + object.value = 0; + if (object.value > max_value) + object.value = max_value; + } + else { + if (object.value.length == 0) + return false; + object.value = parseInt(object.value); + object.value = Math.abs(object.value); + if (object.value == 0 || isNaN(object.value) || value > max_value) + object.value = this.action_data().attributes[k]; + } + if (k == 'power' && object.value > 100) + object.value = 100; + + //save + this.action_data().attributes[k] = object.value; + + document.getElementById(k).value = object.value; + } + if (this.action_data().on_update != undefined){ + DRAW[this.action_data().on_update](object.value); + } + } + + //custom + if(DRAW.active_tool == 'erase'){ + var strict = this.action_data().attributes.strict; + var is_circle = GUI.action_data().attributes.circle; + + if(is_circle == false){ + //hide strict controlls + document.getElementById('strict').style.display = 'none'; + } + else{ + //show strict controlls + document.getElementById('strict').style.display = 'block'; + } + } + }; + + this.action = function (key) { + DRAW[key]('init', {valid: true}); + if (DRAW.active_tool == key) + return false; + + //change + if (DRAW.active_tool != '') + document.getElementById(DRAW.active_tool).className = ""; + DRAW.active_tool = key; + document.getElementById(key).className = "active trn"; + this.show_action_attributes(); + + return false; + }; + + this.action_data = function () { + for (var i in DRAW_TOOLS_CONFIG) { + if (DRAW_TOOLS_CONFIG[i].name == DRAW.active_tool) + return DRAW_TOOLS_CONFIG[i]; + } + }; + + /** + * used strings: + * "Fill", "Square", "Circle", "Radial", "Anti aliasing", "Circle", "Strict", "Burn" + */ + this.show_action_attributes = function () { + html = ''; + var step = 10; + for (var k in this.action_data().attributes) { + var title = k[0].toUpperCase() + k.slice(1); + title = title.replace("_", " "); + if (this.action_data().attributes[k + "_values"] != undefined) + continue; + if (this.action_data().attributes[k] === true || this.action_data().attributes[k] === false) { + //true / false + if (this.action_data().attributes[k] == true) + html += '<div onclick="GUI.update_attribute(this, 1)" style="background-color:#5680c1;" class="attribute-area trn" id="' + k + '">' + title + '</div>'; + else + html += '<div onclick="GUI.update_attribute(this, 0)" class="attribute-area trn" id="' + k + '">' + title + '</div>'; + } + else if (typeof GUI.action_data().attributes[k] == 'object') { + //drop down select + html += '<select style="font-size:11px;margin-bottom:10px;" onchange="GUI.update_attribute(this);" id="' + k + '">'; + for (var j in GUI.action_data().attributes[k]) { + var sel = ''; + var key = k.replace("_values", ""); + if (GUI.action_data().attributes[key] == GUI.action_data().attributes[k][j]) + sel = 'selected="selected"'; + html += '<option class="trn" ' + sel + ' name="' + GUI.action_data().attributes[k][j] + '" data-value="'+GUI.action_data().attributes[k][j]+'">' + GUI.action_data().attributes[k][j] + '</option>'; + } + html += '</select>'; + } + else if (GUI.action_data().attributes[k][0] == '#') { + //color + html += '<table style="width:100%;">'; //table for 100% width + html += '<tr>'; + html += '<td style="font-weight:bold;width:45px;">' + title + ':</td>'; + html += '<td><input onchange="GUI.update_attribute(this);" type="color" id="' + k + '" value="' + GUI.action_data().attributes[k] + '" /></td>'; + html += '</tr>'; + html += '</table>'; + } + else { + //numbers + html += '<div id="' + k + '_container">'; + html += '<table style="width:100%;">'; //table for 100% width + html += '<tr>'; + html += '<td style="font-weight:bold;padding-right:2px;white-space:nowrap;" class="trn">' + title + ':</td>'; + html += '<td><input onKeyUp="GUI.update_attribute(this);" type="number" id="' + k + '" value="' + GUI.action_data().attributes[k] + '" /></td>'; + html += '</tr>'; + html += '</table>'; + html += '<div style="float:left;width:32px;" onclick="GUI.update_attribute(this, ' + (step) + ')" class="attribute-area" id="' + k + '">+</div>'; + html += '<div style="margin-left:48px;margin-bottom:15px;" onclick="GUI.update_attribute(this, ' + (-step) + ')" class="attribute-area" id="' + k + '">-</div>'; + html += '</div>'; + } + } + document.getElementById("action_attributes").innerHTML = html; + + //retranslate + HELP.help_translate(LANG); + }; + + this.set_color = function (object) { + if (HELPER.chech_input_color_support('main_color') == true && object.id == 'main_color') + COLOR = object.value; + else + COLOR = HELPER.rgb2hex_all(object.style.backgroundColor); + COLOR_copy = COLOR; + + if (HELPER.chech_input_color_support('main_color') == true) + document.getElementById("main_color").value = COLOR; //supported + else + document.getElementById("main_color_alt").style.backgroundColor = COLOR; //not supported + + document.getElementById("color_hex").value = COLOR; + var colors = HELPER.hex2rgb(COLOR); + document.getElementById("rgb_r").value = colors.r; + document.getElementById("rgb_g").value = colors.g; + document.getElementById("rgb_b").value = colors.b; + }; + + this.set_color_manual = function (event) { + var object = event.target; + if (object.value.length == 6 && object.value[0] != '#') { + COLOR = '#' + object.value; + this.sync_colors(); + } + if (object.value.length == 7) { + COLOR = object.value; + this.sync_colors(); + } + else if (object.value.length > 7) + object.value = COLOR; + }; + + this.set_color_rgb = function (object, c) { + var colors = HELPER.hex2rgb(COLOR); + if (object.value.length > 3) { + object.value = colors[c]; + } + else if (object.value.length > 0) { + value = object.value; + value = parseInt(value); + if (isNaN(value) || value != object.value || value > 255 || value < 0) { + object.value = colors[c]; + return false; + } + COLOR = "#" + ("000000" + HELPER.rgbToHex(document.getElementById("rgb_r").value, document.getElementById("rgb_g").value, document.getElementById("rgb_b").value)).slice(-6); + ALPHA = document.getElementById("rgb_a").value; + document.getElementById("rgb_a").value = ALPHA; + this.sync_colors(); + } + }; + + this.sync_colors = function () { + document.getElementById("color_hex").value = COLOR; + + if (HELPER.chech_input_color_support('main_color') == true) + document.getElementById("main_color").value = COLOR; //supported + else + document.getElementById("main_color_alt").style.backgroundColor = COLOR; //not supported + + var colors = HELPER.hex2rgb(COLOR); + document.getElementById("rgb_r").value = colors.r; + document.getElementById("rgb_g").value = colors.g; + document.getElementById("rgb_b").value = colors.b; + }; + + this.toggle_color_select = function () { + if (POP.active == false) { + POP.add({ + title: 'Color:', + function: function () { + COLOR_copy = COLOR; + var html = '<canvas style="position:relative;margin-bottom:5px;" id="c_all" width="300" height="300"></canvas>'; + html += '<table>'; + html += '<tr>'; + html += ' <td><b>Luminosity:</b></td>'; + html += ' <td><input id="lum_ranger" oninput="GUI.change_lum(this.value);document.getElementById(\'lum_preview\').innerHTML=this.value;" type="range" value="0" min="-255" max="255" step="1"></td>'; + html += ' <td style="padding-left:10px;width:30px;" id="lum_preview">0</td>'; + html += '</tr>'; + html += '<tr>'; + html += ' <td><b>Alpha:</b></td>'; + html += ' <td><input oninput="GUI.change_alpha(this.value);document.getElementById(\'alpha_preview\').innerHTML=this.value;" type="range" value="' + ALPHA + '" min="0" max="255" step="1"></td>'; + html += ' <td style="padding-left:10px;" id="alpha_preview">' + ALPHA + '</td></tr>'; + html += '</tr>'; + html += '</table>'; + return html; + } + }); + POP.show( + 'Select color', + undefined, + undefined, + this.toggle_color_select_onload + ); + } + else{ + POP.hide(); + } + }; + + this.change_lum = function (lumi) { + lumi = parseInt(lumi); + var c3 = HELPER.hex2rgb(COLOR_copy); + c3.r += lumi; + c3.g += lumi; + c3.b += lumi; + + if (c3.r < 0) + c3.r = 0; + if (c3.g < 0) + c3.g = 0; + if (c3.b < 0) + c3.b = 0; + if (c3.r > 255) + c3.r = 255; + if (c3.g > 255) + c3.g = 255; + if (c3.b > 255) + c3.b = 255; + + COLOR = "#" + ("000000" + HELPER.rgbToHex(c3.r, c3.g, c3.b)).slice(-6); + this.sync_colors(); + }; + + this.change_alpha = function (value) { + ALPHA = parseInt(value); + document.getElementById("rgb_a").value = ALPHA; + }; + + this.toggle_color_select_onload = function () { + var img = new Image(); + img.onload = function () { + document.getElementById("c_all").getContext("2d").drawImage(img, 0, 0); + document.getElementById("c_all").onmousedown = function (event) { + if (event.offsetX) { + mouse_x = event.offsetX; + mouse_y = event.offsetY; + } + else if (event.layerX) { + mouse_x = event.layerX; + mouse_y = event.layerY; + } + var c = document.getElementById("c_all").getContext("2d").getImageData(mouse_x, mouse_y, 1, 1).data; + COLOR = "#" + ("000000" + HELPER.rgbToHex(c[0], c[1], c[2])).slice(-6); + this.sync_colors(); + COLOR_copy = COLOR; + document.getElementById("lum_ranger").value = 0; + }; + }; + img.src = 'img/colorwheel.png'; + }; + + this.draw_selected_area = function (no_resize) { + if (DRAW.select_data == false) + return false; + //draw area + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + var x = DRAW.select_data.x; + var y = DRAW.select_data.y; + var w = DRAW.select_data.w; + var h = DRAW.select_data.h; + if (this.ZOOM != 100) { + x = Math.round(x); + y = Math.round(y); + w = Math.round(w); + h = Math.round(h); + } + + //fill + canvas_front.fillStyle = "rgba(0, 255, 0, 0.3)"; + canvas_front.fillRect(x, y, w, h); + if (this.ZOOM <= 100) { + //borders + canvas_front.strokeStyle = "rgba(0, 255, 0, 1)"; + canvas_front.lineWidth = 1; + canvas_front.strokeRect(x + 0.5, y + 0.5, w, h); + } + if (no_resize == true) + return true; + + //draw carners + square(x, y, 0, 0); + square(x + w, y, -1, 0); + square(x, y + h, 0, -1); + square(x + w, y + h, -1, -1); + + //draw centers + square(x + w / 2, y, 0, 0); + square(x, y + h / 2, 0, 0); + square(x + w / 2, y + h, 0, -1); + square(x + w, y + h / 2, -1, 0); + + function square(x, y, mx, my) { + var sr_size = Math.ceil(EVENTS.sr_size / GUI.ZOOM * 100); + x = Math.round(x); + y = Math.round(y); + canvas_front.beginPath(); + canvas_front.rect(x + mx * Math.round(sr_size), y + my * Math.round(sr_size), sr_size, sr_size); + canvas_front.fillStyle = "#0000ff"; + canvas_front.fill(); + } + }; + + this.toggle = function(query){ + document.querySelector(query).classList.toggle("active"); + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.xml new file mode 100644 index 00000000000..73810cc0a52 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/gui.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>gui.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.js new file mode 100644 index 00000000000..b4ce42026be --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.js @@ -0,0 +1,66 @@ +/* global POP, HELPER */ +/* global VERSION */ + +var HELP = new HELP_CLASS(); + +/** + * manages help actions + * + * @author ViliusL + */ +function HELP_CLASS() { + + //shortcuts + this.help_shortcuts = function () { + POP.add({title: "F9", value: 'Quick save'}); + POP.add({title: "F10", value: 'Quick load'}); + POP.add({title: "S", value: 'Save'}); + POP.add({title: "T", value: 'Trim'}); + POP.add({title: "D", value: 'Duplicate layer'}); + POP.add({title: "Del", value: 'Delete selection'}); + POP.add({title: "F", value: 'Auto adjust colors'}); + POP.add({title: "G", value: 'Grid on/off'}); + POP.add({title: "L", value: 'Rotate left'}); + POP.add({title: "N", value: 'New layer'}); + POP.add({title: "R", value: 'Resize'}); + POP.add({title: "-", value: 'Zoom out'}); + POP.add({title: "+", value: 'Zoom in'}); + POP.add({title: "CTRL + Z", value: 'Undo'}); + POP.add({title: "CTRL + A", value: 'Select all'}); + POP.add({title: "CTRL + V", value: 'Paste'}); + POP.add({title: "Arrow keys", value: 'Move active layer'}); + POP.show('Keyboard Shortcuts', ''); + }; + //about + this.help_about = function () { + var email = 'www.viliusl@gmail.com'; + POP.add({title: "Name:", value: "miniPaint " + VERSION}); + POP.add({title: "Description:", value: 'Online image editor'}); + POP.add({title: "Author:", value: 'ViliusL'}); + POP.add({title: "Email:", html: '<a href="mailto:' + email + '">' + email + '</a>'}); + POP.add({title: "GitHub:", html: '<a href="https://github.com/viliusle/miniPaint">github.com/viliusle/miniPaint</a>'}); + POP.show('About', ''); + }; + + //change language + this.help_translate = function (lang_code) { + + //default English emty translator + var dict_en = {}; + + //save cookie + if(lang_code != undefined && lang_code != LANG){ + HELPER.setCookie('language', lang_code); + } + + var dictionary_data = "dict_"+lang_code; + if(window[dictionary_data] != undefined || lang_code == 'en'){ + //translate + $('body').translate({lang: lang_code, t: window[dictionary_data]}); + LANG = lang_code; + } + else{ + console.log('Translate error, can not find dictionary: '+dictionary_data); + } + }; +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.xml new file mode 100644 index 00000000000..6a7cd295b36 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/help.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>help.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.js new file mode 100644 index 00000000000..9b2ee2d3a18 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.js @@ -0,0 +1,1073 @@ +/* global MAIN, EVENTS, LAYER, POP, HELPER, TOOLS, DRAW, GUI, EDIT, FILE */ +/* global canvas_active, ImageFilters, WIDTH, HEIGHT, canvas_active, canvas_front */ + +var IMAGE = new IMAGE_CLASS(); + +/** + * manages image actions + * + * @author ViliusL + */ +function IMAGE_CLASS() { + + //information + this.image_information = function () { + var colors = this.unique_colors_count(canvas_active(true)); + colors = HELPER.number_format(colors, 0); + var pixels = WIDTH*HEIGHT; + pixels = HELPER.number_format(pixels, 0); + + POP.add({title: "Width:", value: WIDTH}); + POP.add({title: "Height:", value: HEIGHT}); + POP.add({title: "Pixels:", value: pixels}); + POP.add({title: "Unique colors:", value: colors}); + + //show general data + for (var i in FILE.file_info.general){ + POP.add({title: i + ":", value: FILE.file_info.general[i]}); + } + + //show exif data + var n = 0; + for (var i in FILE.file_info.exif){ + if(i == 'undefined') + continue; + if(n == 0) + POP.add({title: "==== EXIF ====", value: ''}); + POP.add({title: i + ":", value: FILE.file_info.exif[i]}); + n++; + } + + POP.show('Information', ''); + }; + + //size + this.image_size = function () { + POP.add({name: "width", title: "Width:", value: WIDTH, placeholder: WIDTH}); + POP.add({name: "height", title: "Height:", value: HEIGHT, placeholder: HEIGHT}); + POP.show('Attributes', [IMAGE, 'resize_custom']); + }; + + //trim + this.image_trim = function () { + EDIT.save_state(); + this.trim(); + }; + + //crop + this.image_crop = function () { + EDIT.save_state(); + if (DRAW.select_data == false) { + POP.add({html: 'Select area first'}); + POP.show('Error', ''); + } + else { + for (var i in LAYER.layers) { + var layer = document.getElementById(LAYER.layers[i].name).getContext("2d"); + + var tmp = layer.getImageData(DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h); + layer.clearRect(0, 0, WIDTH, HEIGHT); + layer.putImageData(tmp, 0, 0); + } + + //resize + EDIT.save_state(); + WIDTH = DRAW.select_data.w; + HEIGHT = DRAW.select_data.h; + LAYER.set_canvas_size(); + + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + }; + + //resize + this.image_resize = function () { + this.resize_box(); + }; + + //rotate left + this.image_rotate_left = function () { + EDIT.save_state(); + this.rotate_resize_doc(270, WIDTH, HEIGHT); + this.rotate_layer({angle: 270}, canvas_active(), WIDTH, HEIGHT); + }; + + //rotate right + this.image_rotate_right = function () { + EDIT.save_state(); + this.rotate_resize_doc(90, WIDTH, HEIGHT); + this.rotate_layer({angle: 90}, canvas_active(), WIDTH, HEIGHT); + }; + + //rotate + this.image_rotate = function () { + POP.add({name: "angle", title: "Enter angle (0-360):", value: 0, range: [0, 360]}); + POP.add({name: "mode", title: "Area:", values: ['All', 'Visible']}); + POP.show( + 'Rotate', + function (response) { + EDIT.save_state(); + if(response.mode == 'All') + IMAGE.rotate_resize_doc(response.angle, WIDTH, HEIGHT); + IMAGE.rotate_layer(response, canvas_active(), WIDTH, HEIGHT); + }, + function (response, canvas_preview, w, h) { + IMAGE.rotate_layer(response, canvas_preview, w, h); + } + ); + }; + + //vertical flip + this.image_vflip = function () { + EDIT.save_state(); + var tempCanvas = document.createElement("canvas"); + var tempCtx = tempCanvas.getContext("2d"); + tempCanvas.width = WIDTH; + tempCanvas.height = HEIGHT; + tempCtx.drawImage(canvas_active(true), 0, 0, WIDTH, HEIGHT); + //flip + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().save(); + canvas_active().scale(-1, 1); + canvas_active().drawImage(tempCanvas, -WIDTH, 0); + canvas_active().restore(); + }; + + //horizontal flip + this.image_hflip = function () { + EDIT.save_state(); + var tempCanvas = document.createElement("canvas"); + var tempCtx = tempCanvas.getContext("2d"); + tempCanvas.width = WIDTH; + tempCanvas.height = HEIGHT; + tempCtx.drawImage(canvas_active(true), 0, 0, WIDTH, HEIGHT); + //flip + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().save(); + canvas_active().scale(1, -1); + canvas_active().drawImage(tempCanvas, 0, -HEIGHT); + canvas_active().restore(); + }; + + //color corrections + this.image_colors = function () { + POP.add({name: "param1", title: "Brightness:", value: "0", range: [-100, 100]}); + POP.add({name: "param2", title: "Contrast:", value: "0", range: [-100, 100]}); + POP.add({}); + POP.add({name: "param_red", title: "Red channel:", value: "0", range: [-255, 255]}); + POP.add({name: "param_green", title: "Green channel:", value: "0", range: [-255, 255]}); + POP.add({name: "param_blue", title: "Blue channel:", value: "0", range: [-255, 255]}); + POP.add({}); + POP.add({name: "param_h", title: "Hue:", value: "0", range: [-180, 180]}); + POP.add({name: "param_s", title: "Saturation:", value: "0", range: [-100, 100]}); + POP.add({name: "param_l", title: "Luminance:", value: "0", range: [-100, 100]}); + + POP.show( + 'Color corrections', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param_red = parseInt(user_response.param_red); + var param_green = parseInt(user_response.param_green); + var param_blue = parseInt(user_response.param_blue); + var param_h = parseInt(user_response.param_h); + var param_s = parseInt(user_response.param_s); + var param_l = parseInt(user_response.param_l); + + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + //Brightness/Contrast + var filtered = ImageFilters.BrightnessContrastPhotoshop(imageData, param1, param2); + //RGB corrections + var filtered = ImageFilters.ColorTransformFilter(filtered, 1, 1, 1, 1, param_red, param_green, param_blue, 1); + //hue/saturation/luminance + var filtered = ImageFilters.HSLAdjustment(filtered, param_h, param_s, param_l); + canvas_active().putImageData(filtered, 0, 0); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + var param_red = parseInt(user_response.param_red); + var param_green = parseInt(user_response.param_green); + var param_blue = parseInt(user_response.param_blue); + var param_h = parseInt(user_response.param_h); + var param_s = parseInt(user_response.param_s); + var param_l = parseInt(user_response.param_l); + + var imageData = canvas_preview.getImageData(0, 0, w, h); + //Brightness/Contrast + var filtered = ImageFilters.BrightnessContrastPhotoshop(imageData, param1, param2); //add effect + //RGB corrections + var filtered = ImageFilters.ColorTransformFilter(filtered, 1, 1, 1, 1, param_red, param_green, param_blue, 1); + //hue/saturation/luminance + var filtered = ImageFilters.HSLAdjustment(filtered, param_h, param_s, param_l); + canvas_preview.putImageData(filtered, 0, 0); + } + ); + }; + + //auto adjust colors + this.image_auto_adjust = function () { + EDIT.save_state(); + this.auto_adjust(canvas_active(), WIDTH, HEIGHT); + }; + + //convert to grayscale + this.image_GrayScale = function () { + EDIT.save_state(); + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.GrayScale(imageData); //add effect + canvas_active().putImageData(filtered, 0, 0); + }; + + //enchance colors + this.image_decrease_colors = function () { + POP.add({name: "param1", title: "Colors:", value: "10", range: [1, 256]}); + POP.add({name: "param3", title: "Greyscale:", values: ["No", "Yes"], }); + POP.show( + 'Decrease colors', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + if (user_response.param3 == 'Yes') + param3 = true; + else + param3 = false; + + IMAGE.decrease_colors(canvas_active(true), canvas_active(true), WIDTH, HEIGHT, param1, param3); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + if (user_response.param3 == 'Yes') + param3 = true; + else + param3 = false; + + IMAGE.decrease_colors(canvas_active(true), document.getElementById("pop_post"), w, h, param1, param3); + } + ); + }; + + //negative + this.image_negative = function () { + EDIT.save_state(); + if (DRAW.select_data == false) + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + else + var imageData = canvas_active().getImageData(DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h); + var pixels = imageData.data; + for (var i = 0; i < pixels.length; i += 4) { + pixels[i] = 255 - pixels[i]; // red + pixels[i + 1] = 255 - pixels[i + 1]; // green + pixels[i + 2] = 255 - pixels[i + 2]; // blue + } + //save + if (DRAW.select_data == false) + canvas_active().putImageData(imageData, 0, 0); + else + canvas_active().putImageData(imageData, DRAW.select_data.x, DRAW.select_data.y); + }; + + //grid + this.image_grid = function () { + POP.add({name: "visible", title: "Visible:", value: "Yes", values: ["Yes", "No"]}); + POP.add({name: "gap_x", title: "Horizontal gap:", value: GUI.grid_size[0]}); + POP.add({name: "gap_y", title: "Vertical gap:", value: GUI.grid_size[1]}); + POP.show( + 'Grid', + function (response) { + if (response.visible == "Yes") { + GUI.grid = true; + gap_x = response.gap_x; + gap_y = response.gap_y; + GUI.draw_grid(gap_x, gap_y); + } + else { + GUI.grid = false; + GUI.draw_grid(); + } + } + ); + }; + + //histogram + this.image_histogram = function () { + this.histogram(); + }; + + this.resize_custom = function (user_response) { + EDIT.save_state(); + EVENTS.autosize = false; + if (user_response.width != WIDTH || user_response.height != HEIGHT) { + WIDTH = user_response.width; + HEIGHT = user_response.height; + LAYER.set_canvas_size(); + } + }; + + //prepare rotation - increase doc dimensions if needed + this.rotate_resize_doc = function (angle, w, h) { + var o = angle * Math.PI / 180; + var new_x = w * Math.abs(Math.cos(o)) + h * Math.abs(Math.sin(o)); + var new_y = w * Math.abs(Math.sin(o)) + h * Math.abs(Math.cos(o)); + new_x = Math.ceil(Math.round(new_x * 1000) / 1000); + new_y = Math.ceil(Math.round(new_y * 1000) / 1000); + + if (WIDTH != new_x || HEIGHT != new_y) { + EDIT.save_state(); + var dx = 0; + var dy = 0; + if (new_x > WIDTH) { + dx = Math.ceil(new_x - WIDTH) / 2; + WIDTH = new_x; + } + if (new_y > HEIGHT) { + dy = Math.ceil(new_y - HEIGHT) / 2; + HEIGHT = new_y; + } + LAYER.set_canvas_size(); + + var tmp = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().putImageData(tmp, dx, dy); + } + }; + + //rotate layer + this.rotate_layer = function (user_response, canvas, w, h) { + var TO_RADIANS = Math.PI / 180; + angle = user_response.angle; + mode = user_response.mode; + + var area_x = 0; + var area_y = 0; + var area_w = w; + var area_h = h; + + var dx = 0; + var dy = 0; + + if(mode == 'Visible'){ + //rotate only visible part + + var trim_info = this.trim_info(canvas.canvas); + area_x = trim_info.left; + area_y = trim_info.top; + area_w = w - trim_info.left - trim_info.right; + area_h = h - trim_info.top - trim_info.bottom; + + //calc how much dimensions will increase + var o = angle * Math.PI / 180; + var new_x = area_w * Math.abs(Math.cos(o)) + area_h * Math.abs(Math.sin(o)); + var new_y = area_w * Math.abs(Math.sin(o)) + area_h * Math.abs(Math.cos(o)); + new_x = Math.ceil(Math.round(new_x * 1000) / 1000); + new_y = Math.ceil(Math.round(new_y * 1000) / 1000); + if(new_x > area_w || new_y > area_h){ + if (new_x > area_w) { + dx = Math.ceil(new_x - area_w) / 2; + if(area_x > dx) + dx = 0; + } + if (new_y > area_h) { + dy = Math.ceil(new_y - area_h) / 2; + if(area_y > dy) + dy = 0; + } + if (w == WIDTH && h == HEIGHT){ + var tmp = canvas.getImageData(0, 0, w, h); + canvas.clearRect(0, 0, w, h); + canvas.putImageData(tmp, dx, dy); + } + } + + //recalc + var trim_info = this.trim_info(canvas.canvas); + area_x = trim_info.left; + area_y = trim_info.top; + area_w = w - trim_info.left - trim_info.right; + area_h = h - trim_info.top - trim_info.bottom; + } + + var tempCanvas = document.createElement("canvas"); + var tempCtx = tempCanvas.getContext("2d"); + tempCanvas.width = area_w; + tempCanvas.height = area_h; + var imageData = canvas.getImageData(area_x, area_y, area_w, area_h); + tempCtx.putImageData(imageData, 0, 0); + + //rotate + canvas.clearRect(area_x, area_y, area_w, area_h); + canvas.save(); + canvas.translate(area_x + Math.round(area_w / 2), area_y + Math.round(area_h / 2)); + canvas.rotate(angle * TO_RADIANS); + canvas.drawImage(tempCanvas, -Math.round(area_w / 2), -Math.round(area_h / 2)); + canvas.restore(); + if (w == WIDTH && h == HEIGHT){ + //if main canvas + GUI.zoom(); + } + }; + + this.resize_box = function () { + POP.add({name: "width", title: "Width (pixels):", value: '', placeholder: WIDTH}); + POP.add({name: "height", title: "Height (pixels):", value: '', placeholder: HEIGHT}); + POP.add({name: "width_percent", title: "Width (%):", value: '', placeholder: 100}); + POP.add({name: "height_percent", title: "Height (%):", value: '', placeholder: 100}); + POP.add({name: "mode", title: "Mode:", values: ["Resample - Hermite", "Basic", "HQX"]}); + POP.add({name: "preblur", title: "Pre-Blur:", values: ["Yes", "No"], value: "No"}); + POP.add({name: "sharpen", title: "Sharpen:", values: ["Yes", "No"], value: "No"}); + POP.show('Resize', [IMAGE, "resize_layer"]); + }; + + this.resize_layer = function (user_response) { + EDIT.save_state(); + var width = parseInt(user_response.width); + var height = parseInt(user_response.height); + var width_100 = parseInt(user_response.width_percent); + var height_100 = parseInt(user_response.height_percent); + var preblur = user_response.preblur; + var sharpen = user_response.sharpen; + if (isNaN(width) && isNaN(height) && isNaN(width_100) && isNaN(height_100)) + return false; + if (width == WIDTH && height == HEIGHT) + return false; + + //if dimension with percent provided + if (isNaN(width) && isNaN(height)) { + if (isNaN(width_100) == false) { + width = Math.round(WIDTH * width_100 / 100); + } + if (isNaN(height_100) == false) { + height = Math.round(HEIGHT * height_100 / 100); + } + } + + //if only 1 dimension was provided + if (isNaN(width) || isNaN(height)) { + var ratio = WIDTH/HEIGHT; + if (isNaN(width)) + width = Math.round(height * ratio); + if (isNaN(height)) + height = Math.round(width / ratio); + } + + //anti-artifacting? + if (preblur == 'Yes') { + var ratio_w = WIDTH / width; + var ratio_h = HEIGHT / height; + var ratio_avg = Math.max(ratio_w, ratio_h); + var power = ratio_avg * 0.3; + if (power > 0.6) { + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.GaussianBlur(imageData, power); //add effect + canvas_active().putImageData(filtered, 0, 0); + } + } + + //validate + if (user_response.mode == "Resample - Hermite" && (width > WIDTH || height > HEIGHT)){ + //scalling up - Hermite not supported + user_response.mode = "Resize"; + } + if (user_response.mode == "HQX" && (width < WIDTH && height < HEIGHT)){ + //scalling down - HQX not supported + user_response.mode = "Resample - Hermite"; + } + + var resize_type; + if (user_response.mode == "Resample - Hermite") { + //Hermite resample - max quality + resize_type = 'Hermite'; + + var HERMITE = new Hermite_class(); + HERMITE.resample_single(canvas_active(true), width, height); + + if (GUI.last_menu != 'layer_resize') { + WIDTH = width; + HEIGHT = height; + if (WIDTH < 1) + WIDTH = 1; + if (HEIGHT < 1) + HEIGHT = 1; + LAYER.set_canvas_size(); + } + GUI.zoom(); + } + else if(user_response.mode == "HQX") { + //HQX - 2, 3, 4 scale only, but amazing quality if there are only few colors + resize_type = 'HQX'; + + //find correct dimensions + var multiply = Math.max(width/WIDTH, height/HEIGHT); + multiply = Math.round(multiply); + if(multiply < 2) + multiply = 2; + if(multiply > 4) + multiply = 4; + + var image_data_resized = hqx(canvas_active(true), multiply); + + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + WIDTH = WIDTH * multiply; + HEIGHT = HEIGHT * multiply; + LAYER.set_canvas_size(); + canvas_active().putImageData(image_data_resized, 0, 0 ); + GUI.zoom(); + } + else { + //simple resize - max speed + resize_type = 'Default'; + tmp_data = document.createElement("canvas"); + tmp_data.width = WIDTH; + tmp_data.height = HEIGHT; + tmp_data.getContext("2d").drawImage(canvas_active(true), 0, 0); + + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + WIDTH = width; + HEIGHT = height; + LAYER.set_canvas_size(); + canvas_active().drawImage(tmp_data, 0, 0, width, height); + GUI.zoom(); + } + + //sharpen after? + if (sharpen == 'Yes') { + var imageData = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var filtered = ImageFilters.Sharpen(imageData, 1); //add effect + canvas_active().putImageData(filtered, 0, 0); + } + }; + + /** + * get canvas painted are coords + * + * @param {HtmlElement} canvas + * @param {boolean} trim_white + */ + this.trim_info = function (canvas, trim_white) { + var top = 0; + var left = 0; + var bottom = 0; + var right = 0; + var img = canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height); + var imgData = img.data; + var empty = false; + if(trim_white == undefined) + trim_white = true; + //check top + main1: + for (var y = 0; y < img.height; y++) { + for (var x = 0; x < img.width; x++) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main1; + } + top++; + } + //check left + main2: + for (var x = 0; x < img.width; x++) { + for (var y = 0; y < img.height; y++) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main2; + } + left++; + } + //check bottom + main3: + for (var y = img.height - 1; y >= 0; y--) { + for (var x = img.width - 1; x >= 0; x--) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main3; + } + bottom++; + } + //check right + main4: + for (var x = img.width - 1; x >= 0; x--) { + for (var y = img.height - 1; y >= 0; y--) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main4; + } + right++; + } + + if(top == canvas.height && left == canvas.width){ + //canvas is empty + empty = true; + } + + return { + top: top, + left: left, + bottom: bottom, + right: right, + empty: empty, + }; + }; + + this.trim = function (layer, no_resize, include_white) { + var all_top = HEIGHT; + var all_left = WIDTH; + var all_bottom = HEIGHT; + var all_right = WIDTH; + for (var i in LAYER.layers) { + if (layer != undefined && LAYER.layers[i].name != layer) + continue; + + var top = 0; + var left = 0; + var bottom = 0; + var right = 0; + var img = document.getElementById(LAYER.layers[i].name).getContext("2d").getImageData(0, 0, WIDTH, HEIGHT); + var imgData = img.data; + //check top + main1: + for (var y = 0; y < img.height; y++) { + for (var x = 0; x < img.width; x++) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (include_white !== true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main1; + } + top++; + } + //check left + main2: + for (var x = 0; x < img.width; x++) { + for (var y = 0; y < img.height; y++) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (include_white !== true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main2; + } + left++; + } + //check bottom + main3: + for (var y = img.height - 1; y >= 0; y--) { + for (var x = img.width - 1; x >= 0; x--) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (include_white !== true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main3; + } + bottom++; + } + //check right + main4: + for (var x = img.width - 1; x >= 0; x--) { + for (var y = img.height - 1; y >= 0; y--) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + if (include_white !== true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255) + continue; //white + break main4; + } + right++; + } + all_top = Math.min(all_top, top); + all_left = Math.min(all_left, left); + all_bottom = Math.min(all_bottom, bottom); + all_right = Math.min(all_right, right); + } + //move to top-left corner + for (var i in LAYER.layers) { + if (layer != undefined && LAYER.layers[i].name != layer) + continue; + + tmp_data = document.getElementById(LAYER.layers[i].name).getContext("2d").getImageData(0, 0, WIDTH, HEIGHT); + document.getElementById(LAYER.layers[i].name).getContext("2d").clearRect(0, 0, WIDTH, HEIGHT); + document.getElementById(LAYER.layers[i].name).getContext("2d").putImageData(tmp_data, -all_left, -all_top); + var canvas_name = LAYER.layers[i].name; + } + //resize + if (no_resize != undefined) + return false; + if (layer != undefined) { + var W = Math.round(WIDTH - all_left - all_right); + var H = Math.round(HEIGHT - all_top - all_bottom); + + var imageData = document.getElementById(layer).getContext("2d").getImageData(0, 0, W, H); + document.getElementById(layer).width = W; + document.getElementById(layer).height = H; + document.getElementById(layer).getContext("2d").clearRect(0, 0, W, H); + document.getElementById(layer).getContext("2d").putImageData(imageData, 0, 0); + + return { + top: all_top, + left: all_left, + bottom: all_bottom, + right: all_right + }; + } + else { + WIDTH = WIDTH - all_left - all_right; + HEIGHT = HEIGHT - all_top - all_bottom; + if (WIDTH < 1) + WIDTH = 1; + if (HEIGHT < 1) + HEIGHT = 1; + LAYER.set_canvas_size(); + } + LAYER.update_info_block(); + }; + + this.decrease_colors = function (canvas_source, canvas_destination, W, H, colors, greyscale) { + var context = canvas_destination.getContext("2d"); + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var palette = []; + + //collect top colors + var block_size = 10; + var ctx = canvas_front; //use temp canvas + ctx.clearRect(0, 0, W, H); + ctx.drawImage(canvas_source, 0, 0, Math.ceil(canvas_source.width / block_size), Math.ceil(canvas_source.height / block_size)); //simple resize + var img_p = ctx.getImageData(0, 0, Math.ceil(canvas_source.width / block_size), Math.ceil(canvas_source.height / block_size)); + var imgData_p = img_p.data; + ctx.clearRect(0, 0, W, H); + + for (var i = 0; i < imgData_p.length; i += 4) { + if (imgData_p[i + 3] == 0) + continue; //transparent + var grey = Math.round(0.2126 * imgData_p[i] + 0.7152 * imgData_p[i + 1] + 0.0722 * imgData_p[i + 2]); + palette.push([imgData_p[i], imgData_p[i + 1], imgData_p[i + 2], grey]); + } + + //calculate weights + var grey_palette = []; + for (var i = 0; i < 256; i++) + grey_palette[i] = 0; + for (var i = 0; i < palette.length; i++) + grey_palette[palette[i][3]]++; + + //remove similar colors + for (var max = 10 * 3; max < 100 * 3; max = max + 10 * 3) { + if (palette.length <= colors) + break; + for (var i = 0; i < palette.length; i++) { + if (palette.length <= colors) + break; + var valid = true; + for (var j = 0; j < palette.length; j++) { + if (palette.length <= colors) + break; + if (i == j) + continue; + if (Math.abs(palette[i][0] - palette[j][0]) + Math.abs(palette[i][1] - palette[j][1]) + Math.abs(palette[i][2] - palette[j][2]) < max) { + if (grey_palette[palette[i][3]] > grey_palette[palette[j][3]]) { + //remove color + palette.splice(j, 1); + j--; + } + else { + valid = false; + break; + } + } + } + //remove color + if (valid == false) { + palette.splice(i, 1); + i--; + } + } + } + palette = palette.slice(0, colors); + + //change + var p_n = palette.length; + for (var j = 0; j < H; j++) { + for (var i = 0; i < W; i++) { + var k = ((j * (W * 4)) + (i * 4)); + if (imgData[k + 3] == 0) + continue; //transparent + + //find closest color + var index1 = 0; + var min = 999999; + var diff1; + for (var m = 0; m < p_n; m++) { + var diff = Math.abs(palette[m][0] - imgData[k]) + Math.abs(palette[m][1] - imgData[k + 1]) + Math.abs(palette[m][2] - imgData[k + 2]); + if (diff < min) { + min = diff; + index1 = m; + diff1 = diff; + } + } + + imgData[k] = palette[index1][0]; + imgData[k + 1] = palette[index1][1]; + imgData[k + 2] = palette[index1][2]; + + if (greyscale == true) { + var mid = Math.round(0.2126 * imgData[k] + 0.7152 * imgData[k + 1] + 0.0722 * imgData[k + 2]); + imgData[k] = mid; + imgData[k + 1] = mid; + imgData[k + 2] = mid; + } + } + } + canvas_destination.getContext("2d").putImageData(img, 0, 0); + }; + + //fixing white and black color balance + this.auto_adjust = function (context, W, H) { + //settings + var white = 240; //white color min + var black = 30; //black color max + var target_white = 1; //how much % white colors should take + var target_black = 0.5; //how much % black colors should take + var modify = 1.1; //color modify strength + var cycles_count = 10; //how much iteration to change colors + + document.body.style.cursor = "wait"; + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var n = 0; //pixels count without transparent + + //make sure we have white + var n_valid = 0; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + if ((imgData[i] + imgData[i + 1] + imgData[i + 2]) / 3 > white) + n_valid++; + n++; + } + target = target_white; + var n_fix_white = 0; + var done = false; + for (var j = 0; j < cycles_count; j++) { + if (n_valid * 100 / n >= target) + done = true; + if (done == true) + break; + n_fix_white++; + + //adjust + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + for (var c = 0; c < 3; c++) { + var x = i + c; + if (imgData[x] < 10) + continue; + //increase white + imgData[x] *= modify; + imgData[x] = Math.round(imgData[x]); + if (imgData[x] > 255) + imgData[x] = 255; + } + } + + //recheck + n_valid = 0; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + if ((imgData[i] + imgData[i + 1] + imgData[i + 2]) / 3 > white) + n_valid++; + } + } + + //make sure we have black + n_valid = 0; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + if ((imgData[i] + imgData[i + 1] + imgData[i + 2]) / 3 < black) + n_valid++; + } + target = target_black; + var n_fix_black = 0; + var done = false; + for (var j = 0; j < cycles_count; j++) { + if (n_valid * 100 / n >= target) + done = true; + if (done == true) + break; + n_fix_black++; + + //adjust + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + for (var c = 0; c < 3; c++) { + var x = i + c; + if (imgData[x] > 240) + continue; + //increase black + imgData[x] -= (255 - imgData[x]) * modify - (255 - imgData[x]); + imgData[x] = Math.round(imgData[x]); + } + } + + //recheck + n_valid = 0; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + if ((imgData[i] + imgData[i + 1] + imgData[i + 2]) / 3 < black) + n_valid++; + } + } + + //save + context.putImageData(img, 0, 0); + document.body.style.cursor = "auto"; + //log('Iterations: brighten='+n_fix_white+", darken="+n_fix_black); + }; + + this.histogram = function () { + POP.add({name: "param1", title: "Channel:", values: ["Gray", "Red", "Green", "Blue"], onchange: "IMAGE.histogram_onload()"}); + POP.add({title: 'Histogram:', function: function () { + var html = '<canvas style="position:relative;" id="c_h" width="256" height="100"></canvas>'; + return html; + }}); + POP.add({title: "Total pixels:", value: ""}); + POP.add({title: "Average:", value: ""}); + POP.show( + 'Histogram', + undefined, + undefined, + this.histogram_onload + ); + }; + + this.histogram_onload = function () { + var img = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var imgData = img.data; + var channel_grey = document.getElementById("pop_data_param1_poptmp0"); + var channel_r = document.getElementById("pop_data_param1_poptmp1"); + var channel_g = document.getElementById("pop_data_param1_poptmp2"); + var channel_b = document.getElementById("pop_data_param1_poptmp3"); + + if (channel_grey.checked == true) + channel = 0; + else if (channel_r.checked == true) + channel = 1; + else if (channel_g.checked == true) + channel = 2; + else if (channel_b.checked == true) + channel = 3; + + var hist_data = [ [], [], [], [] ]; //grey, red, green, blue + var total = imgData.length / 4; + var sum = 0; + var grey; + + for (var i = 0; i < imgData.length; i += 4) { + //collect grey + grey = Math.round((imgData[i] + imgData[i + 1] + imgData[i + 2]) / 3); + sum = sum + imgData[i] + imgData[i + 1] + imgData[i + 2]; + if(hist_data[0][grey] == undefined) + hist_data[0][grey] = 1; + else + hist_data[0][grey]++; + + //collect colors + for(var c = 0; c < 3; c++) { + if(c+1 != channel) + continue; + if(hist_data[c+1][imgData[i+c]] == undefined) + hist_data[c+1][imgData[i+c]] = 1; + else + hist_data[c+1][imgData[i+c]]++; + } + } + + var c = document.getElementById("c_h").getContext("2d"); + c.rect(0, 0, 256, 100); + c.fillStyle = "#ffffff"; + c.fill(); + var opacity = 1; + + //draw histogram + for(var h in hist_data) { + for (var i = 0; i <= 255; i++) { + if(h != channel) + continue; + if (hist_data[h][i] == 0) + continue; + c.beginPath(); + + if(h == 0) + c.strokeStyle = "rgba(64, 64, 64, "+opacity*2+")"; + else if(h == 1) + c.strokeStyle = "rgba(255, 0, 0, "+opacity+")"; + else if(h == 2) + c.strokeStyle = "rgba(0, 255, 0, "+opacity+")"; + else if(h == 3) + c.strokeStyle = "rgba(0, 0, 255, "+opacity+")"; + + c.lineWidth = 1; + c.moveTo(i + 0.5, 100 + 0.5); + c.lineTo(i + 0.5, 100 - Math.round(hist_data[h][i] * 255 * 100 / total / 6) + 0.5); + c.stroke(); + } + } + + document.getElementById("pop_data_totalpixel").innerHTML = HELPER.number_format(total, 0); + if (total > 0) + average = Math.round(sum * 10 / total / 3) / 10; + else + average = '-'; + document.getElementById("pop_data_average").innerHTML = average; + }; + + this.unique_colors_count = function (canvas) { + var img = canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height); + var imgData = img.data; + var colors = []; + var n = 0; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + var key = imgData[i] + "." + imgData[i + 1] + "." + imgData[i + 2]; + if (colors[key] == undefined) { + colors[key] = 1; + n++; + } + } + return n; + }; + this.zoom_in = function() { + GUI.zoom(+1, true); + }; + this.zoom_out = function() { + GUI.zoom(-1, true); + }; + this.zoom_original = function() { + GUI.zoom(100, true); + }; + this.zoom_auto = function() { + GUI.zoom_auto(); + }; +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.xml new file mode 100644 index 00000000000..8ba8c17a098 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/image.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>image.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.js new file mode 100644 index 00000000000..1c5989b617b --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.js @@ -0,0 +1,729 @@ +/* global HELPER, POP, MAIN, EVENTS, LAYER, IMAGE, DRAW, EDIT, GUI */ +/* global WIDTH, HEIGHT, canvas_front, canvas_back */ + +var LAYER = new LAYER_CLASS(); + +/** + * layers class - manages layers + * + * @author ViliusL + */ +function LAYER_CLASS() { + + /** + * active layer index + */ + this.layer_active = 0; + + /** + * data layers array + */ + this.layers = []; + + /** + * latest layer index + */ + var layer_max_index = 0; + + //new layer + this.layer_new = function () { + EDIT.save_state(); + this.layer_add(); + }; + + //removes all layers + this.remove_all_layers = function(){ + //delete old layers + for (var i = LAYER.layers.length-1; i >= 0; i--) { + LAYER.layer_remove(i, true); + } + layer_max_index = 0; + this.layer_renew(); + }; + + //generate name for new layer + this.generate_layer_name = function(prefix){ + if(prefix == undefined) + prefix = 'Layer'; + + return prefix + ' #' + (layer_max_index); + }; + + //create layer + this.layer_add = function (name, data) { + layer_max_index++; + + //save selected area + var copy = false; + var last_layer = LAYER.layer_active; + if (DRAW.select_data != false && data == undefined) { + copy = document.createElement("canvas"); + copy.width = DRAW.select_data.w; + copy.height = DRAW.select_data.h; + copy.getContext("2d").drawImage(canvas_active(true), DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h, 0, 0, DRAW.select_data.w, DRAW.select_data.h); + } + + if (data == undefined) { + //empty layer + if (name == undefined) { + name = this.generate_layer_name(); + } + var new_layer = []; + new_layer.name = name; + new_layer.title = name; + new_layer.visible = true; + new_layer.opacity = 1; + LAYER.create_canvas(name); + this.layers.unshift(new_layer); + + //add selected data + if (DRAW.select_data != false) { + //copy user selected data to new layer + canvas_active().drawImage(copy, 0, 0); + + //clear selection + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + + //switch back to old layer + LAYER.layer_active = last_layer; + } + } + else { + var img = new Image(); + if (data.substring(0, 4) == 'http') + img.crossOrigin = "Anonymous"; //data from other domain - turn on CORS + var _this = this; + + img.onload = function () { + //check size + var need_resize = false; + if (img.width > WIDTH || img.height > HEIGHT) { + if (img.width > WIDTH) + WIDTH = img.width; + if (img.height > HEIGHT) + HEIGHT = img.height; + LAYER.set_canvas_size(); + need_resize = true; + } + //remove initial empty layer + if (_this.layers.length == 1 && EVENTS.autosize == true) { + var trim_info = IMAGE.trim_info(document.getElementById(_this.layers[0].name)); + if (trim_info.empty == true) { + _this.layer_remove(0, true); + WIDTH = img.width; + HEIGHT = img.height; + LAYER.set_canvas_size(false); + } + } + + for (var i in _this.layers) { + if (_this.layers[i].name == name) { + name = _this.generate_layer_name(name); + } + } + LAYER.create_canvas(name); + _this.layers.unshift({ + name: name, + title: name, + visible: true, + opacity: 1 + }); + LAYER.layer_active = 0; + + document.getElementById(name).getContext("2d").globalAlpha = 1; + document.getElementById(name).getContext('2d').drawImage(img, 0, 0); + LAYER.layer_renew(); + if(_this.layers.length == 1 || need_resize == true) { + GUI.zoom_auto(true); + } + GUI.redraw_preview(); + }; + img.onerror = function (ex) { + POP.add({html: '<b>The image could not be loaded.<br /><br /></b>'}); + if (data.substring(0, 4) == 'http') + POP.add({title: "Reason:", value: 'Cross-origin resource sharing (CORS) not supported. Try to save image first.'}); + POP.show('Error', '.'); + }; + img.src = data; + } + LAYER.layer_active = 0; + document.getElementById(this.layers[LAYER.layer_active].name).getContext("2d").globalAlpha = 1; + this.layer_renew(); + }; + + this.layer_remove = function (i, force) { + if (this.layers.length == 1 && force == undefined){ + //only 1 layer left + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + return false; + } + element = document.getElementById(this.layers[i].name); + element.getContext("2d").clearRect(0, 0, WIDTH, HEIGHT); + element.parentNode.removeChild(element); + + this.layers.splice(i, 1); + if (LAYER.layer_active == i) + LAYER.layer_active = Math.max(0, LAYER.layer_active-1); + this.layer_renew(); + GUI.redraw_preview(); + }; + + //duplicate + this.layer_duplicate = function () { + EDIT.save_state(); + if (DRAW.select_data != false) { + //selection + EDIT.copy_to_clipboard(); + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + EDIT.paste('menu'); + LAYER.layer_active = 0; + LAYER.layer_renew(); + } + else { + layer_max_index++; + //copy all layer + tmp_data = document.createElement("canvas"); + tmp_data.width = WIDTH; + tmp_data.height = HEIGHT; + tmp_data.getContext("2d").drawImage(canvas_active(true), 0, 0); + + //create + var new_name = this.generate_layer_name(); + LAYER.create_canvas(new_name); + this.layers.unshift({name: new_name, title: new_name, visible: true}); + this.layer_active = 0; + canvas_active().drawImage(tmp_data, 0, 0); + LAYER.layer_renew(); + } + }; + + //show / hide + this.layer_show_hide = function () { + LAYER.layer_visibility(LAYER.layer_active); + }; + + //crop + this.layer_crop = function () { + EDIT.save_state(); + if (DRAW.select_data == false) { + POP.add({html: 'Select area first'}); + POP.show('Error', ''); + } + else { + var layer = LAYER.canvas_active(); + + var tmp = layer.getImageData(DRAW.select_data.x, DRAW.select_data.y, DRAW.select_data.w, DRAW.select_data.h); + layer.clearRect(0, 0, WIDTH, HEIGHT); + layer.putImageData(tmp, 0, 0); + + DRAW.select_data = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + }; + + //delete + this.layer_delete = function () { + EDIT.save_state(); + LAYER.layer_remove(LAYER.layer_active); + }; + + //move up + this.layer_move_up = function () { + EDIT.save_state(); + LAYER.move_layer('up'); + }; + + //move down + this.layer_move_down = function () { + EDIT.save_state(); + LAYER.move_layer('down'); + }; + + //opacity + this.layer_opacity = function () { + LAYER.set_alpha(); + }; + + //rename + this.layer_rename = function () { + var _this = this; + POP.add({name: "param1", title: "Name:", value: this.layers[LAYER.layer_active].title}); + POP.show('Rename layer', + function (user_response) { + EDIT.save_state(); + var param1 = user_response.param1; + + _this.layers[LAYER.layer_active].title = param1; + LAYER.layer_renew(); + } + ); + }; + + //trim + this.layer_trim = function () { + EDIT.save_state(); + IMAGE.trim(this.layers[LAYER.layer_active].name, true); + }; + + //resize + this.layer_resize = function () { + IMAGE.resize_box(); + }; + + //clear + this.layer_clear = function () { + EDIT.save_state(); + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + }; + + //show differences + this.layer_differences = function () { + if (parseInt(LAYER.layer_active) + 1 >= this.layers.length) { + POP.add({html: 'This can not be last layer'}); + POP.show('Error', ''); + return false; + } + + POP.add({name: "param1", title: "Sensitivity:", value: "0", range: [0, 255]}); + POP.show( + 'Differences', + function (response) { + var param1 = parseInt(response.param1); + LAYER.calc_differences(param1); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + LAYER.calc_differences(param1, canvas_preview, w, h); + } + ); + }; + + //merge + this.layer_merge_down = function () { + var compositions = ["source-over", "source-in", "source-out", "source-atop", + "destination-over", "destination-in", "destination-out", "destination-atop", + "lighter", "darker", "copy", "xor"]; + + var blend_modes = ["normal", "multiply", "screen", "overlay", "darken", "lighten", + "color-dodge", "color-burn", "hard-light", "soft-light", "difference", + "exclusion", "hue", "saturation", "color", "luminosity"]; + + if (LAYER.layer_active + 1 >= this.layers.length) { + POP.add({html: 'This can not be last layer.'}); + POP.show('Error', ''); + return false; + } + POP.add({name: "param1", title: "Composition:", values: compositions}); + POP.add({name: "param2", title: "Blend:", values: blend_modes}); + POP.add({name: "param3", title: "Mode:", values: ["Composite", "Blend"]}); + POP.show( + 'Merge', + function (response) { + var param1 = response.param1; + var param2 = response.param2; + var param3 = response.param3; + + EDIT.save_state(); + + //copy + var tmp_data = document.createElement("canvas"); + tmp_data.width = WIDTH; + tmp_data.height = HEIGHT; + tmp_data.getContext("2d").drawImage(LAYER.canvas_active(true), 0, 0); + + //paste + LAYER.canvas_active().save(); + LAYER.canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + LAYER.canvas_active().drawImage(document.getElementById(LAYER.layers[LAYER.layer_active + 1].name), 0, 0); + + if (param3 == "Composite") + LAYER.canvas_active().globalCompositeOperation = param1; + else + LAYER.canvas_active().globalCompositeOperation = param2; + LAYER.canvas_active().drawImage(tmp_data, 0, 0); + LAYER.canvas_active().restore(); + + //remove next layer + LAYER.layer_remove(LAYER.layer_active + 1); + LAYER.layer_renew(); + }, + function (response, canvas_preview, w, h) { + var param1 = response.param1; + var param2 = response.param2; + var param3 = response.param3; + + //paste + canvas_preview.save(); + canvas_preview.clearRect(0, 0, w, h); + LAYER.layer_active++; + canvas_preview.drawImage(LAYER.canvas_active(true), 0, 0, WIDTH, HEIGHT, 0, 0, w, h); + LAYER.layer_active--; + + if (param3 == "Composite") + canvas_preview.globalCompositeOperation = param1; + else + canvas_preview.globalCompositeOperation = param2; + canvas_preview.drawImage(LAYER.canvas_active(true), 0, 0, WIDTH, HEIGHT, 0, 0, w, h); + canvas_preview.restore(); + } + ); + }; + + //flatten all + this.layer_flatten = function () { + EDIT.save_state(); + if (this.layers.length == 1) + return false; + LAYER.layer_active = 0; + tmp_data = document.createElement("canvas"); + tmp_data.width = WIDTH; + tmp_data.height = HEIGHT; + for (var i = this.layers.length-2; i >= 0; i--) { + //copy + LAYER.layer_active = i; + tmp_data.getContext("2d").clearRect(0, 0, WIDTH, HEIGHT); + tmp_data.getContext("2d").drawImage(canvas_active(true), 0, 0); + + //paste + LAYER.layer_active = this.layers.length-1; + canvas_active().drawImage(tmp_data, 0, 0); + } + + //delete layers + for (var i = this.layers.length-2; i >= 0; i--) { + LAYER.layer_active = i; + LAYER.layer_remove(LAYER.layer_active); + } + LAYER.layer_renew(); + }; + + this.create_canvas = function (canvas_id) { + var new_canvas = document.createElement('canvas'); + new_canvas.setAttribute('id', canvas_id); + + document.getElementById('canvas_more').appendChild(new_canvas); + new_canvas.width = WIDTH; + new_canvas.height = HEIGHT; + + new_canvas.getContext("2d").mozImageSmoothingEnabled = false; + new_canvas.getContext("2d").webkitImageSmoothingEnabled = false; + new_canvas.getContext("2d").msImageSmoothingEnabled = false; + new_canvas.getContext("2d").imageSmoothingEnabled = false; + + //sync zoom + new_canvas.style.width = Math.round(WIDTH * GUI.ZOOM / 100) + "px"; + new_canvas.style.height = Math.round(HEIGHT * GUI.ZOOM / 100) + "px"; + }; + this.move_layer = function (direction) { + if (this.layers.length < 2) + return false; + + var layer_from = this.layers[this.layer_active]; + var parent = document.getElementById('canvas_more'); + var content = document.getElementById(this.layers[this.layer_active].name); + + if (direction == 'up') { + if (this.layer_active == 0) + return false; + var layer_to = this.layers[this.layer_active - 1]; + + if(this.layer_active != 1) + parent.insertBefore(content, document.getElementById(this.layers[this.layer_active-2].name)); + else + parent.insertBefore(content, null); + + this.layer_active--; + } + else if(direction == 'down') { + if (this.layer_active == this.layers.length-1) + return false; + + parent.insertBefore(content, document.getElementById(this.layers[this.layer_active+1].name)); + + this.layer_active++; + } + //switch attribures + var layer_to = this.layers[this.layer_active]; + for(var i in layer_to){ + var tmp = layer_to[i]; + layer_to[i] = layer_from[i]; + layer_from[i] = tmp; + } + + this.layer_renew(); + GUI.zoom(); + return true; + }; + this.layer_visibility = function (i) { + if (this.layers[i].visible == true) { + this.layers[i].visible = false; + document.getElementById(this.layers[i].name).style.visibility = 'hidden'; + document.getElementById('layer_' + i).src = "img/yes-grey.png"; + } + else { + this.layers[i].visible = true; + document.getElementById(this.layers[i].name).style.visibility = 'visible'; + document.getElementById('layer_' + i).src = "img/yes.png"; + } + this.layer_renew(); + GUI.redraw_preview(); + }; + + this.layer_move_active = function (x, y) { + var distance = 10; + if (EVENTS.ctrl_pressed == true) + distance = 50; + if (EVENTS.shift_pressed == true) + distance = 1; + + //move + dx = x * distance; + dy = y * distance; + var tmp = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + canvas_active().putImageData(tmp, dx, dy); + }; + this.select_layer = function (i) { + if (LAYER.layer_active != i) { + LAYER.layer_active = parseInt(i); //select + this.layer_renew(); + } + LAYER.shake(i); + }; + this.layer_renew = function () { + var html = ''; + for (var i in this.layers) { + //create + if (LAYER.layer_active == i) + html += '<div class="layer active">'; + else + html += '<div class="layer">'; + var title = this.layers[i].title; + html += '<span class="layer_title" ondblclick="LAYER.layer_rename();" onclick="LAYER.select_layer(\'' + i + '\')">' + HELPER.escapeHtml(title) + '</span>'; + html += '<a class="layer_visible" onclick="EDIT.save_state();LAYER.layer_remove(\'' + i + '\');return false;" title="delete" href="#"></a>'; + //hide + if (this.layers[i].visible == true) + html += '<a class="layer_delete" id="layer_' + i + '" onclick="LAYER.layer_visibility(\'' + i + '\');return false;" title="hide" href="#"></a>'; + else + html += '<a class="layer_delete layer_unvisible" id="layer_' + i + '" onclick="LAYER.layer_visibility(\'' + i + '\');return false;" title="show" href="#"></a>'; + + html += '</div>'; + //show + document.getElementById('layers').innerHTML = html; + } + if(this.layers.length == 0) + document.getElementById('layers').innerHTML = ''; + }; + this.shake = function (i, nr) { + var step = 3; + var n = 10; + + if (nr == undefined) { + //begin + nr = 0; + canvas_front.drawImage(canvas_active(true), 0, 0); + } + var dx = step * (nr % 2); + if (dx == 0) + dx = -step; + + var element = document.getElementById('canvas_front'); + element.style.marginLeft = dx + "px"; + if (nr < n) + setTimeout(function () { + LAYER.shake(i, nr + 1); + }, 15); + else { + //finish shaking + element.style.marginLeft = "0px"; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + } + }; + this.update_info_block = function () { + //show size + document.getElementById('mouse_info_size').innerHTML = WIDTH + "x" + HEIGHT; + + //show mouse position + var x = 0; + var y = 0; + if (EVENTS.mouse != undefined) { + x = EVENTS.mouse.x; + y = EVENTS.mouse.y; + } + if(EVENTS.mouse.valid == true){ + document.getElementById('mouse_info_mouse').innerHTML = x + "x" + y; + } + else{ + //mouse is not inside canvas + document.getElementById('mouse_info_mouse').innerHTML = ''; + } + + //show selected area info + if (DRAW.select_data != false) { + document.getElementById('mouse_info_xy').innerHTML = DRAW.select_data.x + ", " + DRAW.select_data.y; + document.getElementById('mouse_info_area').innerHTML = DRAW.select_data.w + ", " + DRAW.select_data.h; + + document.getElementById('mouse_info_selected').style.display = 'block'; + } + else{ + document.getElementById('mouse_info_xy').innerHTML = ''; + document.getElementById('mouse_info_area').innerHTML = ''; + document.getElementById('mouse_info_selected').style.display = 'none'; + } + }; + this.set_canvas_size = function (repaint) { + var ratio = WIDTH/HEIGHT; + var W = Math.round(WIDTH); + var H = Math.round(W / ratio); + + this.resize_canvas("canvas_back"); + GUI.draw_background(canvas_back, WIDTH, HEIGHT); + this.resize_canvas("canvas_front", false); + this.resize_canvas("canvas_grid", true); + for (var i in this.layers) { + if (repaint === false) + this.resize_canvas(this.layers[i].name, false); + else + this.resize_canvas(this.layers[i].name, true); + } + + GUI.draw_grid(); + + document.getElementById('resize-w').style.marginLeft = W + "px"; + document.getElementById('resize-w').style.marginTop = Math.round(H / 2) + "px"; + document.getElementById('resize-h').style.marginLeft = Math.round(W / 2) + "px"; + document.getElementById('resize-h').style.marginTop = H + "px"; + document.getElementById('resize-wh').style.marginLeft = W + "px"; + document.getElementById('resize-wh').style.marginTop = H + "px"; + + this.update_info_block(); + GUI.redraw_preview(); + GUI.zoom(); + }; + this.resize_canvas = function (canvas_name, repaint) { + var ratio = WIDTH/HEIGHT; + var W = Math.round(WIDTH); + var H = Math.round(W / ratio); + var canvas = document.getElementById(canvas_name); + var ctx = canvas.getContext("2d"); + + if (repaint == false) { + canvas.width = W; + canvas.height = H; + } + else { + //save + var buffer = document.createElement('canvas'); + buffer.width = WIDTH; + buffer.height = HEIGHT; + buffer.getContext('2d').drawImage(canvas, 0, 0); + + canvas.width = W; + canvas.height = H; + + //restore + ctx.drawImage(buffer, 0, 0); + } + }; + this.set_alpha = function () { + var _this = this; + if (this.layers[LAYER.layer_active].opacity == undefined) + this.layers[LAYER.layer_active].opacity = 1; + POP.add({name: "param1", title: "Alpha:", value: this.layers[LAYER.layer_active].opacity, range: [0, 1], step: 0.01}); + POP.show( + 'Opacity', + function (user_response) { + var param1 = parseFloat(user_response.param1); + _this.layers[LAYER.layer_active].opacity = param1; + canvas_active().globalAlpha = param1; + + var img = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var imgData = img.data; + var new_alpha = 255 * param1; + if (new_alpha < 10) + new_alpha = 10; + canvas_active().clearRect(0, 0, WIDTH, HEIGHT); + for (var y = 0; y < img.height; y++) { + for (var x = 0; x < img.width; x++) { + var k = ((y * (img.width * 4)) + (x * 4)); + if (imgData[k + 3] > 0) + imgData[k + 3] = new_alpha; + } + } + canvas_active().putImageData(img, 0, 0); + + GUI.zoom(); + } + ); + }; + this.canvas_active = function (base) { + if (base == undefined) + return document.getElementById(LAYER.layers[LAYER.layer_active].name).getContext("2d"); + else + return document.getElementById(LAYER.layers[LAYER.layer_active].name); + }; + + this.calc_differences = function (sensitivity, canvas_preview, w, h) { + vlayer_active = parseInt(LAYER.layer_active); + //first layer + var img1 = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + var imgData1 = img1.data; + + //second layer + var context2 = document.getElementById(this.layers[vlayer_active + 1].name).getContext("2d"); + var img2 = context2.getImageData(0, 0, WIDTH, HEIGHT); + var imgData2 = img2.data; + + //result layer + if (canvas_preview == undefined) { + //add differences layer + LAYER.layer_add(); + canvas_active().rect(0, 0, WIDTH, HEIGHT); + canvas_active().fillStyle = "#ffffff"; + canvas_active().fill(); + var img3 = canvas_active().getImageData(0, 0, WIDTH, HEIGHT); + } + else { + //work on preview layer + var canvas_tmp = document.createElement("canvas"); + canvas_tmp.width = WIDTH; + canvas_tmp.height = HEIGHT; + var img3 = canvas_tmp.getContext("2d").getImageData(0, 0, WIDTH, HEIGHT); + } + var imgData3 = img3.data; + for (var xx = 0; xx < WIDTH; xx++) { + for (var yy = 0; yy < HEIGHT; yy++) { + var x = (xx + yy * WIDTH) * 4; + if (Math.abs(imgData1[x] - imgData2[x]) > sensitivity + || Math.abs(imgData1[x + 1] - imgData2[x + 1]) > sensitivity + || Math.abs(imgData1[x + 2] - imgData2[x + 2]) > sensitivity + || Math.abs(imgData1[x + 3] - imgData2[x + 3]) > sensitivity) { + imgData3[x] = 255; + imgData3[x + 1] = 0; + imgData3[x + 2] = 0; + imgData3[x + 3] = 255; + } + } + } + if (canvas_preview == undefined) + canvas_active().putImageData(img3, 0, 0); + else { + canvas_tmp.getContext("2d").rect(0, 0, WIDTH, HEIGHT); + canvas_tmp.getContext("2d").fillStyle = "#ffffff"; + canvas_tmp.getContext("2d").fill(); + canvas_tmp.getContext("2d").putImageData(img3, 0, 0); + canvas_preview.clearRect(0, 0, w, h); + + canvas_preview.save(); + canvas_preview.scale(w / WIDTH, h / HEIGHT); + canvas_preview.drawImage(canvas_tmp, 0, 0); + canvas_preview.restore(); + } + }; +} + +function canvas_active(base) { + return LAYER.canvas_active(base); +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.xml new file mode 100644 index 00000000000..2c21e33cf8b --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/layers.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>layers.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.js new file mode 100644 index 00000000000..b135e4c6585 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.js @@ -0,0 +1,57 @@ +/* global HELPER, EVENTS, LAYER, POP, FILE, GUI, HELP, DRAW */ +/* global WIDTH, HEIGHT, canvas_back, canvas_grid, COLOR, ALPHA */ + +var MAIN = new MAIN_CLASS(); +document.onload = MAIN.init(true); + +/** + * main class - initialize app + * + * @author ViliusL + */ +function MAIN_CLASS() { + this.init = function (first_load) { + if (first_load === true) { + GUI.draw_helpers(); + GUI.autodetect_dimensions(); + POP.height_mini = Math.round(POP.width_mini * HEIGHT / WIDTH); + } + EVENTS.autosize = true; + FILE.file_info = { + general: [], + exif: [], + }; + DRAW.select_data = false; + + LAYER.remove_all_layers(); + LAYER.layers = []; + LAYER.layer_add(); + LAYER.set_canvas_size(); + GUI.draw_background(canvas_back, WIDTH, HEIGHT); + document.getElementById("canvas_preview").width = GUI.PREVIEW_SIZE.w; + document.getElementById("canvas_preview").height = GUI.PREVIEW_SIZE.h; + var color_rgb = HELPER.hex2rgb(COLOR); + document.getElementById("rgb_r").value = color_rgb.r; + document.getElementById("rgb_g").value = color_rgb.g; + document.getElementById("rgb_b").value = color_rgb.b; + document.getElementById("rgb_a").value = ALPHA; + GUI.redraw_preview(); + + //detect color support + if (HELPER.chech_input_color_support('main_color') == true) + document.getElementById("main_color").value = COLOR; //supported + else { + //not supported + document.getElementById("main_color").style.display = 'none'; + document.getElementById("main_color_alt").style.display = ''; + document.getElementById("main_color_alt").style.backgroundColor = COLOR; + } + canvas_grid.globalAlpha = 0.8; + + //init translation + var lang_cookie = HELPER.getCookie('language'); + if(lang_cookie != '') + LANG = lang_cookie.replace(/([^a-z]+)/gi, ''); + HELP.help_translate(LANG); + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.xml new file mode 100644 index 00000000000..2f5e2c2fe57 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/main.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>main.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.js new file mode 100644 index 00000000000..10eda1dc75a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.js @@ -0,0 +1,366 @@ +/* global POP, MAIN, SIFT, LAYER, IMAGE, EVENTS, HELPER, EDIT, GUI, EL */ +/* global WIDTH, HEIGHT, COLOR, canvas_active */ + +var TOOLS = new TOOLS_CLASS(); + +/** + * manages various tools + * + * @author ViliusL + */ +function TOOLS_CLASS() { + + //sprites + this.tools_sprites = function () { + POP.add({name: "param1", title: "Gap:", value: "50", values: ["0", "10", "50", "100"]}); + POP.add({name: "param2", title: "Width:", value: WIDTH}); + POP.show('Sprites', function (response) { + EDIT.save_state(); + var param1 = parseInt(response.param1); + var sprite_width = parseInt(response.param2); + TOOLS.generate_sprites(param1, sprite_width); + }); + }; + + //show keypoints + this.tools_keypoints = function () { + SIFT.generate_keypoints(canvas_active(true), true); + }; + + //create panorama + this.tools_panorama = function () { + SIFT.panorama(); + }; + + //extract alpha channel + this.tools_color2alpha = function () { + POP.add({name: "param1", title: "Color:", value: COLOR, type: 'color'}); + POP.show( + 'Color to alpha', + function (user_response) { + EDIT.save_state(); + var param1 = user_response.param1; + TOOLS.convert_color_to_alpha(canvas_active(), WIDTH, HEIGHT, param1); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = user_response.param1; + TOOLS.convert_color_to_alpha(canvas_preview, w, h, param1); + } + ); + }; + + //expands colors + this.tools_color_zoom = function () { + POP.add({name: "param1", title: "Zoom:", value: "2", range: [2, 20], }); + POP.add({name: "param2", title: "Center:", value: "128", range: [0, 255]}); + POP.show( + 'Color Zoom', + function (user_response) { + EDIT.save_state(); + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + + TOOLS.color_zoom(canvas_active(), WIDTH, HEIGHT, param1, param2); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param1 = parseInt(user_response.param1); + var param2 = parseInt(user_response.param2); + + TOOLS.color_zoom(canvas_preview, w, h, param1, param2); + } + ); + }; + + //recover alpha channel values + this.tools_restore_alpha = function () { + POP.add({name: "param", title: "Level:", value: "128", range: [0, 255]}); + POP.show( + 'Recover alpha', + function (user_response) { + EDIT.save_state(); + var param = parseInt(user_response.param); + + TOOLS.recover_alpha(canvas_active(), WIDTH, HEIGHT, param); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var param = parseInt(user_response.param); + + TOOLS.recover_alpha(canvas_preview, w, h, param); + } + ); + }; + + //adds borders + this.tools_borders = function () { + POP.add({name: "color", title: "Color:", value: COLOR, type: 'color'}); + POP.add({name: "shadow", title: "Shadow:", values: ["No", "Yes"]}); + POP.add({name: "size", title: "Size:", value: "5", range: [1, 100]}); + POP.show( + 'Borders', + function (user_response) { + EDIT.save_state(); + var color = user_response.color; + var size = Math.round(WIDTH / 100 * user_response.size); + var shadow = false; + if(user_response.shadow == 'Yes') + shadow = true; + + TOOLS.add_borders(canvas_active(), WIDTH, HEIGHT, color, size, shadow); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var color = user_response.color; + var size = Math.round(w / 100 * user_response.size); + var shadow = false; + if(user_response.shadow == 'Yes') + shadow = true; + + TOOLS.add_borders(canvas_preview, w, h, color, size, shadow); + } + ); + }; + + this.generate_sprites = function (gap, sprite_width) { + if (LAYER.layers.length == 1) + return false; + EDIT.save_state(); + LAYER.layer_add(); + var xx = 0; + var yy = 0; + var max_height = 0; + var tmp = document.createElement("canvas"); + tmp.setAttribute('id', "tmp_canvas"); + tmp.width = sprite_width; + tmp.height = HEIGHT; + var W = sprite_width; + var H = HEIGHT; + + //prepare width + WIDTH = sprite_width; + LAYER.set_canvas_size(); + + for(var i = LAYER.layers.length-1; i >=0; i--){ + if (i == LAYER.layer_active) + continue; //end + if (LAYER.layers[i].visible == false) + continue; + + tmp.getContext("2d").clearRect(0, 0, W, H); + tmp.getContext("2d").drawImage(document.getElementById(LAYER.layers[i].name), 0, 0); + + var trim_details = IMAGE.trim_info(tmp, false); //trim + if (WIDTH == trim_details.left) + continue; //empty layer + var width = W - trim_details.left - trim_details.right; + var height = H - trim_details.top - trim_details.bottom; + + if (xx + width > sprite_width) { + xx = 0; + yy += max_height; + max_height = 0; + } + if (yy % gap > 0 && gap > 0) + yy = yy - yy % gap + gap; + if (yy + height > HEIGHT) { + EVENTS.autosize = false; + HEIGHT = yy + height; + LAYER.set_canvas_size(); + } + + canvas_active().drawImage(tmp, trim_details.left, trim_details.top, width, height, xx, yy, width, height); + xx += width; + if (gap > 0) + xx = xx - xx % gap + gap; + + if (height > max_height) + max_height = height; + if (xx > sprite_width) { + xx = 0; + yy += max_height; + max_height = 0; + } + } + + //remove other layers + for(var i = LAYER.layers.length-1; i >= 0; i--) { + if (i == LAYER.layer_active) + continue; + LAYER.layer_remove(i, true); + } + LAYER.layer_renew(); + }; + + this.convert_color_to_alpha = function (context, W, H, color) { + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var back_color = HELPER.hex2rgb(color); + + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + + //calculate difference from requested color, and change alpha + var diff = Math.abs(imgData[i] - back_color.r) + Math.abs(imgData[i + 1] - back_color.g) + Math.abs(imgData[i + 2] - back_color.b) / 3; + imgData[i + 3] = Math.round(diff); + + //combining 2 layers in future will change colors, so make changes to get same colors in final image + //color_result = color_1 * (alpha_1 / 255) * (1 - A2 / 255) + color_2 * (alpha_2 / 255) + //color_2 = (color_result - color_1 * (alpha_1 / 255) * (1 - A2 / 255)) / (alpha_2 / 255) + imgData[i] = Math.ceil((imgData[i] - back_color.r * (1 - imgData[i + 3] / 255)) / (imgData[i + 3] / 255)); + imgData[i + 1] = Math.ceil((imgData[i + 1] - back_color.g * (1 - imgData[i + 3] / 255)) / (imgData[i + 3] / 255)); + imgData[i + 2] = Math.ceil((imgData[i + 2] - back_color.b * (1 - imgData[i + 3] / 255)) / (imgData[i + 3] / 255)); + } + context.putImageData(img, 0, 0); + }; + + this.color_zoom = function (context, W, H, zoom, center) { + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var grey; + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + + grey = Math.round(0.2126 * imgData[i] + 0.7152 * imgData[i + 1] + 0.0722 * imgData[i + 2]); + + for (var j = 0; j < 3; j++) { + var k = i + j; + if (grey > center) + imgData[k] += (imgData[k] - center) * zoom; + else if (grey < center) + imgData[k] -= (center - imgData[k]) * zoom; + if (imgData[k] < 0) + imgData[k] = 0; + if (imgData[k] > 255) + imgData[k] = 255; + } + } + context.putImageData(img, 0, 0); + }; + + this.recover_alpha = function (context, W, H, level) { + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var tmp; + level = parseInt(level); + for (var i = 0; i < imgData.length; i += 4) { + tmp = imgData[i + 3] + level; + if (tmp > 255) + tmp = 255; + imgData[i + 3] = tmp; + } + context.putImageData(img, 0, 0); + }; + + this.add_borders = function (context, W, H, color, size, shadow) { + context.save(); + if(shadow == true){ + //with shadow + context.beginPath(); + context.lineWidth = size; + context.strokeStyle = 'green'; + context.shadowColor = color; + context.shadowBlur = size/2; + context.rect(-size/2, -size/2, W+size, H+size); + context.stroke(); + context.stroke(); + context.stroke(); + context.stroke(); + context.stroke(); + } + else{ + context.strokeStyle = color; + context.lineWidth = size; + EL.rectangle(context, 0, 0, W-1, H-1, false, true); + } + context.restore(); + }; + + this.tools_replace_color = function(){ + POP.add({name: "target", title: "Target:", value: COLOR, type: 'color'}); + POP.add({name: "repalcement", title: "Replacement:", value: '#ff0000', type: 'color'}); + POP.add({name: "power", title: "Power:", value: "20", range: [0, 255]}); + POP.add({name: "alpha", title: "Alpha:", value: "255", range: [0, 255]}); + POP.add({name: "mode", title: "Mode:", values: ['Advanced', 'Simple']}); + POP.show( + 'Replace color', + function (user_response) { + EDIT.save_state(); + var target = user_response.target; + var repalcement = user_response.repalcement; + var power = user_response.power; + var alpha = user_response.alpha; + var advanced_mode = true; + if(user_response.mode == 'Simple') + advanced_mode = false; + + TOOLS.replace_color_process(canvas_active(), WIDTH, HEIGHT, target, repalcement, power, alpha, advanced_mode); + GUI.zoom(); + }, + function (user_response, canvas_preview, w, h) { + var target = user_response.target; + var repalcement = user_response.repalcement; + var power = user_response.power; + var alpha = user_response.alpha; + var advanced_mode = true; + if(user_response.mode == 'Simple') + advanced_mode = false; + + TOOLS.replace_color_process(canvas_preview, w, h, target, repalcement, power, alpha, advanced_mode); + } + ); + }; + + this.replace_color_process = function(context, W, H, target, replacement, power, alpha, advanced_mode){ + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + var target_rgb = HELPER.hex2rgb(target); + var target_hsl = HELPER.rgbToHsl(target_rgb.r, target_rgb.g, target_rgb.b); + var target_normalized = HELPER.hslToRgb(target_hsl[0], target_hsl[1], 0.5); + + var replacement_rgb = HELPER.hex2rgb(replacement); + var replacement_hsl = HELPER.rgbToHsl(replacement_rgb.r, replacement_rgb.g, replacement_rgb.b); + + for (var i = 0; i < imgData.length; i += 4) { + if (imgData[i + 3] == 0) + continue; //transparent + + if(advanced_mode == false){ + //simple replace + + //calculate difference from requested color, and change alpha + var diff = (Math.abs(imgData[i] - target_rgb.r) + Math.abs(imgData[i + 1] - target_rgb.g) + Math.abs(imgData[i + 2] - target_rgb.b) ) / 3; + if(diff > power) + continue; + + imgData[i] = replacement_rgb.r; + imgData[i + 1] = replacement_rgb.g; + imgData[i + 2] = replacement_rgb.b; + if(alpha < 255) + imgData[i + 3] = alpha; + } + else{ + //advanced replace using HSL + + var hsl = HELPER.rgbToHsl(imgData[i], imgData[i+1], imgData[i+2]); + var normalized = HELPER.hslToRgb(hsl[0], hsl[1], 0.5); + var diff = (Math.abs(normalized[0] - target_normalized[0]) + Math.abs(normalized[1] - target_normalized[1]) + Math.abs(normalized[2] - target_normalized[2]) ) / 3; + if(diff > power) + continue; + + //change to new color with exiting luminance + var replacement_normalized = HELPER.hslToRgb(replacement_hsl[0], replacement_hsl[1], hsl[2] * (replacement_hsl[2]*255) / 120); + + imgData[i] = replacement_normalized[0]; + imgData[i + 1] = replacement_normalized[1]; + imgData[i + 2] = replacement_normalized[2]; + if(alpha < 255) + imgData[i + 3] = alpha; + } + } + context.putImageData(img, 0, 0); + }; +} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.xml new file mode 100644 index 00000000000..802ea097107 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/js/tools.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>tools.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages.xml new file mode 100644 index 00000000000..1871e5792dc --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>languages</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.js new file mode 100644 index 00000000000..869a5e6ae41 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.js @@ -0,0 +1,342 @@ +var dict_de = { + "2d": {"de": "2d"}, + "3D position:": {"de": "3d-position:"}, + "3D size:": {"de": "3d größe:"}, + "480p": {"de": "480p"}, + "About": {"de": "Etwa"}, + "Add new layer": {"de": "In neue ebene"}, + "Advanced": {"de": "Fortgeschritten"}, + "All": {"de": "Alle"}, + "Alpha": {"de": "Alpha"}, + "Alpha:": {"de": "Alpha:"}, + "Amount:": {"de": "Menge:"}, + "Anonymous": {"de": "Anonym"}, + "Anti aliasing": {"de": "Kantenglättung"}, + "Area:": {"de": "Bereich:"}, + "Arial": {"de": "Arial"}, + "Arrow": {"de": "Pfeil"}, + "Arrow keys": {"de": "Pfeiltasten"}, + "Attributes": {"de": "Attribute"}, + "Author:": {"de": "Autor:"}, + "Auto adjust colors": {"de": "Auto passen sie farben"}, + "Auto colorize": {"de": "Auto kolorieren"}, + "Average:": {"de": "Durchschnittlich:"}, + "BMP - Windows Bitmap": {"de": "Bmp - windows bitmap"}, + "Basic": {"de": "Basic"}, + "BezierCurve": {"de": "Bézierkurve"}, + "Big grains level:": {"de": "Große körner level:"}, + "Black and White": {"de": "Schwarz und weiß"}, + "Blend": {"de": "Mischung"}, + "Blend:": {"de": "Mischung:"}, + "Blue": {"de": "Blau"}, + "Blue channel:": {"de": "Blau-kanal:"}, + "Blur": {"de": "Verwischen"}, + "Blur Radius:": {"de": "Blur radius:"}, + "Blur tool": {"de": "Blur-werkzeug"}, + "Blur-Box": {"de": "Blur-box"}, + "Blur-Gaussian": {"de": "Blur-gaußsche"}, + "Blur-Stack": {"de": "Blur-stapel"}, + "Blur-Zoom": {"de": "Blur-zoom"}, + "Blur:": {"de": "Verwischen:"}, + "Bold": {"de": "Fett gedruckt"}, + "Bold Italic": {"de": "Fett kursiv"}, + "Borders": {"de": "Borders"}, + "Both": {"de": "Beide"}, + "Bottom-left": {"de": "Unten links"}, + "Bottom-right": {"de": "Rechts unten"}, + "Brightness:": {"de": "Helligkeit:"}, + "Brush": {"de": "Bürste"}, + "Bulge/Pinch": {"de": "Bulge / pinch"}, + "Bulge/Pinch tool": {"de": "Bulge / quetschwerkzeug"}, + "Burn": {"de": "Brennen"}, + "Burn/Dodge tool": {"de": "Brennen / abwedlers"}, + "Cancel": {"de": "Stornieren"}, + "Center x:": {"de": "Zentrum x:"}, + "Center y:": {"de": "Zentrum y:"}, + "Center:": {"de": "Center:"}, + "Channel:": {"de": "Kanal:"}, + "Chrome": {"de": "Chrom"}, + "Circle": {"de": "Kreis"}, + "Clear": {"de": "Klar"}, + "Clear selection": {"de": "Auswahl löschen"}, + "Clone tool": {"de": "Klonwerkzeug"}, + "Color #1:": {"de": "Farbe # 1:"}, + "Color #2:": {"de": "Farbe # 2:"}, + "Color Zoom": {"de": "Farbe zoom"}, + "Color adjust:": {"de": "Farbe anpassen:"}, + "Color corrections": {"de": "Farbkorrekturen"}, + "Color to Alpha": {"de": "Farbe zu alpha"}, + "Color to alpha": {"de": "Farbe zu alpha"}, + "Color:": {"de": "Farbe:"}, + "Colorize": {"de": "Kolorieren"}, + "Colors:": {"de": "Farben:"}, + "Composite": {"de": "Zusammengesetzt"}, + "Composition:": {"de": "Zusammensetzung:"}, + "Contrast:": {"de": "Kontrast:"}, + "Copy selection": {"de": "Kopieren auswahl"}, + "Courier": {"de": "Kurier"}, + "Crop": {"de": "Ernte"}, + "Crop Selection": {"de": "Crop auswahl"}, + "Curve": {"de": "Kurve"}, + "Custom": {"de": "Brauch"}, + "Cut selection": {"de": "Cut auswahl"}, + "Decrease color depth": {"de": "Farbtiefe verringern"}, + "Decrease colors": {"de": "Abnahme farben"}, + "Default": {"de": "Standard"}, + "Del": {"de": "Del"}, + "Delete": {"de": "Löschen"}, + "Delete selection": {"de": "Auswahl löschen"}, + "Denoise": {"de": "Denoise"}, + "Desaturate": {"de": "Desaturate"}, + "Desaturation:": {"de": "Entsättigung:"}, + "Description:": {"de": "Beschreibung:"}, + "Differences": {"de": "Unterschiede"}, + "Differences Down": {"de": "Unterschiede nach unten"}, + "Dither": {"de": "Aufregung"}, + "Dithering:": {"de": "Dithering:"}, + "Dot Screen": {"de": "Dot-bildschirm"}, + "Down": {"de": "Nach unten"}, + "Downloaded": {"de": "Heruntergeladene"}, + "Draw circle": {"de": "Zeichnen kreis"}, + "Draw letters": {"de": "Zeichnen sie buchstaben"}, + "Draw line": {"de": "Draw line"}, + "Draw rectangle": {"de": "Rechteck zeichnen"}, + "Duplicate": {"de": "Duplikat"}, + "Duplicate layer": {"de": "Ebene duplizieren"}, + "Dusts level:": {"de": "Dusts level:"}, + "Edge": {"de": "Rand"}, + "Edit": {"de": "Bearbeiten"}, + "Effects": {"de": "Auswirkungen"}, + "Email:": {"de": "Email:"}, + "Emboss": {"de": "Prägen"}, + "Empty data": {"de": "Leere daten"}, + "English": {"de": "Englisch"}, + "Enrich": {"de": "Bereichern"}, + "Enter angle (0-360):": {"de": "Geben sie winkel (0-360):"}, + "Erase": {"de": "Löschen"}, + "Error": {"de": "Fehler"}, + "Error:": {"de": "Fehler:"}, + "Español": {"de": "Español"}, + "Exponent:": {"de": "Exponent:"}, + "Exposure level:": {"de": "Belichtungsstufe:"}, + "Factor:": {"de": "Faktor:"}, + "File": {"de": "Datei"}, + "File name:": {"de": "Dateiname:"}, + "Fill": {"de": "Füllen"}, + "Fill style:": {"de": "Füllen sie stil:"}, + "Fit": {"de": "Passen"}, + "Fit window": {"de": "Fit fenster"}, + "Flatten Image": {"de": "Flatten bild"}, + "Flip": {"de": "Flip"}, + "Font family:": {"de": "Schriftfamilie:"}, + "Font style:": {"de": "Schriftstil:"}, + "French": {"de": "Französisch"}, + "Full HD, 1080p": {"de": "Full hd 1080p"}, + "Fur": {"de": "Pelz"}, + "Gap:": {"de": "Spalt:"}, + "German": {"de": "Deutsche"}, + "GitHub:": {"de": "Github:"}, + "Gradient": {"de": "Gradient"}, + "Gradient Radius:": {"de": "Gradient radius:"}, + "Grains": {"de": "Grains"}, + "Grains level:": {"de": "Grains level:"}, + "Gray": {"de": "Grau"}, + "GrayScale": {"de": "Graustufen"}, + "Green": {"de": "Grün"}, + "Green channel:": {"de": "Grün-kanal:"}, + "Greyscale:": {"de": "Graustufen:"}, + "Grid": {"de": "Gitter"}, + "Grid on/off": {"de": "Raster ein / aus"}, + "Grouped": {"de": "Gruppiert"}, + "H Radius:": {"de": "H radius:"}, + "Heatmap": {"de": "Heatmap"}, + "Height (%):": {"de": "Höhe (%):"}, + "Height (pixels):": {"de": "Höhe (pixel):"}, + "Height:": {"de": "Höhe:"}, + "Help": {"de": "Hilfe"}, + "Helvetica": {"de": "Helvetica"}, + "Hermite": {"de": "Hermite"}, + "Histogram": {"de": "Histogramm"}, + "Histogram:": {"de": "Histogramm:"}, + "Horizontal": {"de": "Horizontal"}, + "Horizontal gap:": {"de": "Horizontale lücke:"}, + "Hue:": {"de": "Farbton:"}, + "Image": {"de": "Image"}, + "Impact": {"de": "Einfluss"}, + "Information": {"de": "Information"}, + "Italiano": {"de": "Italiano"}, + "Italic": {"de": "Kursiv"}, + "JPG - JPG/JPEG Format": {"de": "Jpg - jpg / jpeg-format"}, + "JPG Compression": {"de": "Jpg kompression"}, + "JSON - Full layers data": {"de": "Json - volle schichten daten"}, + "Japanese": {"de": "Japanisch"}, + "Key-points": {"de": "Key-punkte"}, + "Keyboard Shortcuts": {"de": "Tastatürkürzel"}, + "Korean": {"de": "Koreanisch"}, + "Language": {"de": "Sprache"}, + "Last modified": {"de": "Zuletzt bearbeitet"}, + "Layer": {"de": "Schicht"}, + "Layers": {"de": "Lagen"}, + "Left": {"de": "Links"}, + "Level:": {"de": "Ebene:"}, + "Levels:": {"de": "Stufen:"}, + "Lietuvių": {"de": "Lietuvių"}, + "Light leak:": {"de": "Licht leck:"}, + "Limit:": {"de": "Grenze:"}, + "Luminance:": {"de": "Luminanz:"}, + "Luminosity:": {"de": "Helligkeit:"}, + "Magic Wand Tool": {"de": "Zauberstab werkzeug"}, + "Merge": {"de": "Verschmelzen"}, + "Merge Down": {"de": "Nach unten zusammenfassen"}, + "Mode:": {"de": "Modus:"}, + "Mosaic": {"de": "Mosaik"}, + "Mouse:": {"de": "Maus:"}, + "Move": {"de": "Bewegung"}, + "Move active layer": {"de": "Bewegen aktive schicht"}, + "Move down": {"de": "Sich abwärts bewegen"}, + "Move up": {"de": "Aufrücken"}, + "Multi-line": {"de": "Multi-line"}, + "Name:": {"de": "Name:"}, + "Negative": {"de": "Negativ"}, + "New": {"de": "Neu"}, + "New file...": {"de": "Neue datei ..."}, + "New layer": {"de": "Neue schicht"}, + "No": {"de": "Nein"}, + "Normal": {"de": "Normal"}, + "Notice": {"de": "Beachten"}, + "Notice:": {"de": "Beachten:"}, + "Oil": {"de": "öl"}, + "Ok": {"de": "Ok"}, + "Online image editor": {"de": "Online bildeditor"}, + "Opacity": {"de": "Opazität"}, + "Open": {"de": "öffnen"}, + "Original size": {"de": "Originalgröße"}, + "PNG - Portable Network Graphics": {"de": "Png - portable network graphics"}, + "Paste": {"de": "Paste"}, + "Paste selection": {"de": "Paste auswahl"}, + "Pencil": {"de": "Bleistift"}, + "Perspective": {"de": "Perspektive"}, + "Pick Color": {"de": "Wählen sie farbe"}, + "Pixels:": {"de": "Pixel:"}, + "Portuguese": {"de": "Portugiesisch"}, + "Power:": {"de": "Power:"}, + "Pre-Blur:": {"de": "Pre-unschärfe:"}, + "Preview": {"de": "Vorschau"}, + "Print": {"de": "Drucken"}, + "Quality (jpeg):": {"de": "Qualität (jpeg):"}, + "Quality:": {"de": "Qualität:"}, + "Quick load": {"de": "Schnell laden"}, + "Quick save": {"de": "Schnellspeichern"}, + "Radial": {"de": "Radial"}, + "Radius:": {"de": "Radius:"}, + "Range:": {"de": "Angebot:"}, + "Reason:": {"de": "Grund:"}, + "Recover alpha": {"de": "Recover alpha"}, + "Red": {"de": "Rot"}, + "Red channel:": {"de": "Red-kanal:"}, + "Rename": {"de": "Umbenennen"}, + "Rename layer": {"de": "Umbenennen schicht"}, + "Replace Color": {"de": "Farbe ersetzen"}, + "Replace color": {"de": "Farbe ersetzen"}, + "Replacement:": {"de": "Ersatz:"}, + "Resample - Hermite": {"de": "Resampling - hermite"}, + "Reset zoom level": {"de": "Reset-zoomstufe"}, + "Resize": {"de": "ändern sie die größe"}, + "Resolution:": {"de": "Lösung:"}, + "Restore alpha": {"de": "Wiederherstellen alpha"}, + "Right": {"de": "Recht"}, + "Rotate": {"de": "Drehen"}, + "Rotate left": {"de": "Nach links drehen"}, + "Rotation": {"de": "Drehung"}, + "Russian": {"de": "Russisch"}, + "Saturation:": {"de": "Sättigung:"}, + "Save": {"de": "Sparen"}, + "Save as": {"de": "Speichern als"}, + "Save as type:": {"de": "Speichern unter:"}, + "Save layers:": {"de": "Speichern sie schichten:"}, + "Save resolution:": {"de": "Speichern auflösung:"}, + "Select all": {"de": "Alles auswählen"}, + "Select area first": {"de": "Wählen sie einen bereich zuerst"}, + "Select area tool": {"de": "Wählen sie einen bereich werkzeug"}, + "Select color": {"de": "Wählen sie die farbe"}, + "Select object tool": {"de": "Objektauswahl-werkzeug"}, + "Selected": {"de": "Ausgewählt"}, + "Sensitivity:": {"de": "Empfindlichkeit:"}, + "Sepia": {"de": "Sepia"}, + "Shaded": {"de": "Beschattet"}, + "Shadow blur:": {"de": "Schatten verschwimmen:"}, + "Shadow color:": {"de": "Schattenfarbe:"}, + "Shadow:": {"de": "Schatten:"}, + "Sharpen": {"de": "Schärfen"}, + "Sharpen tool": {"de": "Schärfen werkzeug"}, + "Sharpen:": {"de": "Schärfen:"}, + "Show / Hide": {"de": "Anzeigen ausblenden"}, + "Simple": {"de": "Einfach"}, + "Size": {"de": "Größe"}, + "Size:": {"de": "Größe:"}, + "Sketchy": {"de": "Skizzenhaft"}, + "Solarize": {"de": "Solarisation"}, + "Sorry": {"de": "Es tut uns leid"}, + "Sorry, image is too big, max 5 MB.": {"de": "Sorry, bild ist zu groß, max 5 mb."}, + "Source is empty, right click on image first.": {"de": "Quelle leer ist, nach rechts auf das bild klicken zuerst."}, + "Sprites": {"de": "Sprites"}, + "Square": {"de": "Platz"}, + "Strength:": {"de": "Stärke:"}, + "Strict": {"de": "Streng"}, + "Stroke": {"de": "Schlaganfall"}, + "Stroke size:": {"de": "Stroke größe:"}, + "Target:": {"de": "Ziel:"}, + "Text": {"de": "Text"}, + "Text:": {"de": "Text:"}, + "The image could not be loaded.": {"de": "Das bild konnte nicht geladen werden."}, + "This can not be last layer": {"de": "Dies kann nicht letzte schicht sein"}, + "This can not be last layer.": {"de": "Dies kann nicht letzte schicht sein."}, + "Tilt Shift": {"de": "Tilt-shift"}, + "Times New Roman": {"de": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"de": "Zum einfügen aus der zwischenablage, verwenden sie strg-v."}, + "Tools": {"de": "Werkzeuge"}, + "Top-left": {"de": "Oben links"}, + "Top-right": {"de": "Oben rechts"}, + "Total pixels:": {"de": "Gesamtpixelanzahl:"}, + "Translate error, can not find dictionary:": {"de": "übersetzen fehler kann nicht wörterbuch zu finden:"}, + "Transparency #1:": {"de": "Transparenz # 1:"}, + "Transparency #2:": {"de": "Transparenz # 2:"}, + "Transparent:": {"de": "Transparent:"}, + "Trim": {"de": "Trimmen"}, + "Trim:": {"de": "Trimmen:"}, + "Turkish": {"de": "Türkisch"}, + "Undo": {"de": "Rückgängig machen"}, + "Unique colors:": {"de": "Einzigartige farben:"}, + "Up": {"de": "Oben"}, + "V Radius:": {"de": "V radius:"}, + "Verdana": {"de": "Verdana"}, + "Vertical": {"de": "Vertikal"}, + "Vertical gap:": {"de": "Vertikale lücke:"}, + "Vibrance": {"de": "Vibrance"}, + "Vignette": {"de": "Vignette"}, + "Vignette amount:": {"de": "Vignette betrag:"}, + "Vignette size:": {"de": "Vignette größe:"}, + "ViliusL": {"de": "Viliusl"}, + "Vintage": {"de": "Jahrgang"}, + "Visible": {"de": "Sichtbar"}, + "Visible:": {"de": "Sichtbar:"}, + "WEBP - Weppy File Format": {"de": "Webp - weppy dateiformat"}, + "Website": {"de": "Webseite"}, + "Width (%):": {"de": "Breite (%):"}, + "Width (pixels):": {"de": "Breite (pixel):"}, + "Width:": {"de": "Breite:"}, + "Wrong file type, must be image or json.": {"de": "Falsche dateityp, muss das bild oder json sein."}, + "X end:": {"de": "X-ende:"}, + "X start:": {"de": "X start:"}, + "Y end:": {"de": "Y ende:"}, + "Y start:": {"de": "Y start:"}, + "Yes": {"de": "Ja"}, + "Your browser does not support this format.": {"de": "Ihr browser unterstützt dieses format nicht."}, + "Your browser doesn't support canvas.": {"de": "Ihr browser unterstützt keine leinwand."}, + "Zoom": {"de": "Zoom"}, + "Zoom In": {"de": "Hineinzoomen"}, + "Zoom Out": {"de": "Rauszoomen"}, + "Zoom in": {"de": "Hineinzoomen"}, + "Zoom out": {"de": "Rauszoomen"}, + "Zoom:": {"de": "Zoom:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.xml new file mode 100644 index 00000000000..7bde64d3228 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/de.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>de.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.js new file mode 100644 index 00000000000..a22934cb6d2 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.js @@ -0,0 +1,335 @@ +var dict_lt = { + "2d": {"lt": ""}, + "3D position:": {"lt": ""}, + "3D size:": {"lt": ""}, + "480p": {"lt": ""}, + "About": {"lt": ""}, + "Add new layer": {"lt": ""}, + "Advanced": {"lt": ""}, + "All": {"lt": ""}, + "Alpha": {"lt": ""}, + "Alpha:": {"lt": ""}, + "Amount:": {"lt": ""}, + "Anonymous": {"lt": ""}, + "Anti aliasing": {"lt": ""}, + "Area:": {"lt": ""}, + "Arial": {"lt": ""}, + "Arrow": {"lt": ""}, + "Arrow keys": {"lt": ""}, + "Attributes": {"lt": ""}, + "Author:": {"lt": ""}, + "Auto adjust colors": {"lt": ""}, + "Auto colorize": {"lt": ""}, + "Average:": {"lt": ""}, + "BMP - Windows Bitmap": {"lt": ""}, + "Basic": {"lt": ""}, + "BezierCurve": {"lt": ""}, + "Big grains level:": {"lt": ""}, + "Black and White": {"lt": ""}, + "Blend": {"lt": ""}, + "Blend:": {"lt": ""}, + "Blue": {"lt": ""}, + "Blue channel:": {"lt": ""}, + "Blur": {"lt": ""}, + "Blur Radius:": {"lt": ""}, + "Blur tool": {"lt": ""}, + "Blur-Box": {"lt": ""}, + "Blur-Gaussian": {"lt": ""}, + "Blur-Stack": {"lt": ""}, + "Blur-Zoom": {"lt": ""}, + "Blur:": {"lt": ""}, + "Bold": {"lt": ""}, + "Bold Italic": {"lt": ""}, + "Borders": {"lt": ""}, + "Both": {"lt": ""}, + "Bottom-left": {"lt": ""}, + "Bottom-right": {"lt": ""}, + "Brightness:": {"lt": ""}, + "Brush": {"lt": ""}, + "Bulge/Pinch": {"lt": ""}, + "Bulge/Pinch tool": {"lt": ""}, + "Burn": {"lt": ""}, + "Burn/Dodge tool": {"lt": ""}, + "Cancel": {"lt": ""}, + "Center x:": {"lt": ""}, + "Center y:": {"lt": ""}, + "Center:": {"lt": ""}, + "Channel:": {"lt": ""}, + "Chrome": {"lt": ""}, + "Circle": {"lt": ""}, + "Clear": {"lt": ""}, + "Clear selection": {"lt": ""}, + "Clone tool": {"lt": ""}, + "Color #1:": {"lt": ""}, + "Color #2:": {"lt": ""}, + "Color Zoom": {"lt": ""}, + "Color adjust:": {"lt": ""}, + "Color corrections": {"lt": ""}, + "Color to Alpha": {"lt": ""}, + "Color to alpha": {"lt": ""}, + "Color:": {"lt": ""}, + "Colorize": {"lt": ""}, + "Colors:": {"lt": ""}, + "Composite": {"lt": ""}, + "Composition:": {"lt": ""}, + "Contrast:": {"lt": ""}, + "Copy selection": {"lt": ""}, + "Courier": {"lt": ""}, + "Crop": {"lt": ""}, + "Crop Selection": {"lt": ""}, + "Curve": {"lt": ""}, + "Custom": {"lt": ""}, + "Cut selection": {"lt": ""}, + "Decrease color depth": {"lt": ""}, + "Decrease colors": {"lt": ""}, + "Default": {"lt": ""}, + "Del": {"lt": ""}, + "Delete": {"lt": ""}, + "Delete selection": {"lt": ""}, + "Denoise": {"lt": ""}, + "Desaturate": {"lt": ""}, + "Desaturation:": {"lt": ""}, + "Description:": {"lt": ""}, + "Differences": {"lt": ""}, + "Differences Down": {"lt": ""}, + "Dither": {"lt": ""}, + "Dithering:": {"lt": ""}, + "Dot Screen": {"lt": ""}, + "Down": {"lt": ""}, + "Downloaded": {"lt": ""}, + "Draw circle": {"lt": ""}, + "Draw letters": {"lt": ""}, + "Draw line": {"lt": ""}, + "Draw rectangle": {"lt": ""}, + "Duplicate": {"lt": ""}, + "Duplicate layer": {"lt": ""}, + "Dusts level:": {"lt": ""}, + "Edge": {"lt": ""}, + "Edit": {"lt": ""}, + "Effects": {"lt": ""}, + "Email:": {"lt": ""}, + "Emboss": {"lt": ""}, + "Empty data": {"lt": ""}, + "English": {"lt": ""}, + "Enrich": {"lt": ""}, + "Enter angle (0-360):": {"lt": ""}, + "Erase": {"lt": ""}, + "Error": {"lt": ""}, + "Error:": {"lt": ""}, + "Español": {"lt": ""}, + "Exponent:": {"lt": ""}, + "Exposure level:": {"lt": ""}, + "Factor:": {"lt": ""}, + "File": {"lt": ""}, + "File name:": {"lt": ""}, + "Fill": {"lt": ""}, + "Fill style:": {"lt": ""}, + "Fit": {"lt": ""}, + "Fit window": {"lt": ""}, + "Flatten Image": {"lt": ""}, + "Flip": {"lt": ""}, + "Font family:": {"lt": ""}, + "Font style:": {"lt": ""}, + "Full HD, 1080p": {"lt": ""}, + "Fur": {"lt": ""}, + "Gap:": {"lt": ""}, + "GitHub:": {"lt": ""}, + "Gradient": {"lt": ""}, + "Gradient Radius:": {"lt": ""}, + "Grains": {"lt": ""}, + "Grains level:": {"lt": ""}, + "Gray": {"lt": ""}, + "GrayScale": {"lt": ""}, + "Green": {"lt": ""}, + "Green channel:": {"lt": ""}, + "Greyscale:": {"lt": ""}, + "Grid": {"lt": ""}, + "Grid on/off": {"lt": ""}, + "Grouped": {"lt": ""}, + "H Radius:": {"lt": ""}, + "Heatmap": {"lt": ""}, + "Height (%):": {"lt": ""}, + "Height (pixels):": {"lt": ""}, + "Height:": {"lt": ""}, + "Help": {"lt": ""}, + "Helvetica": {"lt": ""}, + "Hermite": {"lt": ""}, + "Histogram": {"lt": ""}, + "Histogram:": {"lt": ""}, + "Horizontal": {"lt": ""}, + "Horizontal gap:": {"lt": ""}, + "Hue:": {"lt": ""}, + "Image": {"lt": ""}, + "Impact": {"lt": ""}, + "Information": {"lt": ""}, + "Italiano": {"lt": ""}, + "Italic": {"lt": ""}, + "JPG - JPG/JPEG Format": {"lt": ""}, + "JPG Compression": {"lt": ""}, + "JSON - Full layers data": {"lt": ""}, + "Key-points": {"lt": ""}, + "Keyboard Shortcuts": {"lt": ""}, + "Language": {"lt": ""}, + "Last modified": {"lt": ""}, + "Layer": {"lt": ""}, + "Layers": {"lt": ""}, + "Left": {"lt": ""}, + "Level:": {"lt": ""}, + "Levels:": {"lt": ""}, + "Lietuvių": {"lt": ""}, + "Light leak:": {"lt": ""}, + "Limit:": {"lt": ""}, + "Luminance:": {"lt": ""}, + "Luminosity:": {"lt": ""}, + "Magic Wand Tool": {"lt": ""}, + "Merge": {"lt": ""}, + "Merge Down": {"lt": ""}, + "Mode:": {"lt": ""}, + "Mosaic": {"lt": ""}, + "Mouse:": {"lt": ""}, + "Move": {"lt": ""}, + "Move active layer": {"lt": ""}, + "Move down": {"lt": ""}, + "Move up": {"lt": ""}, + "Multi-line": {"lt": ""}, + "Name:": {"lt": ""}, + "Negative": {"lt": ""}, + "New": {"lt": ""}, + "New file...": {"lt": ""}, + "New layer": {"lt": ""}, + "No": {"lt": ""}, + "Normal": {"lt": ""}, + "Notice": {"lt": ""}, + "Notice:": {"lt": ""}, + "Oil": {"lt": ""}, + "Ok": {"lt": ""}, + "Online image editor": {"lt": ""}, + "Opacity": {"lt": ""}, + "Open": {"lt": ""}, + "Original size": {"lt": ""}, + "PNG - Portable Network Graphics": {"lt": ""}, + "Paste": {"lt": ""}, + "Paste selection": {"lt": ""}, + "Pencil": {"lt": ""}, + "Perspective": {"lt": ""}, + "Pick Color": {"lt": ""}, + "Pixels:": {"lt": ""}, + "Power:": {"lt": ""}, + "Pre-Blur:": {"lt": ""}, + "Preview": {"lt": ""}, + "Print": {"lt": ""}, + "Quality (jpeg):": {"lt": ""}, + "Quality:": {"lt": ""}, + "Quick load": {"lt": ""}, + "Quick save": {"lt": ""}, + "Radial": {"lt": ""}, + "Radius:": {"lt": ""}, + "Range:": {"lt": ""}, + "Reason:": {"lt": ""}, + "Recover alpha": {"lt": ""}, + "Red": {"lt": ""}, + "Red channel:": {"lt": ""}, + "Rename": {"lt": ""}, + "Rename layer": {"lt": ""}, + "Replace Color": {"lt": ""}, + "Replace color": {"lt": ""}, + "Replacement:": {"lt": ""}, + "Resample - Hermite": {"lt": ""}, + "Reset zoom level": {"lt": ""}, + "Resize": {"lt": ""}, + "Resolution:": {"lt": ""}, + "Restore alpha": {"lt": ""}, + "Right": {"lt": ""}, + "Rotate": {"lt": ""}, + "Rotate left": {"lt": ""}, + "Rotation": {"lt": ""}, + "Saturation:": {"lt": ""}, + "Save": {"lt": ""}, + "Save as": {"lt": ""}, + "Save as type:": {"lt": ""}, + "Save layers:": {"lt": ""}, + "Save resolution:": {"lt": ""}, + "Select all": {"lt": ""}, + "Select area first": {"lt": ""}, + "Select area tool": {"lt": ""}, + "Select color": {"lt": ""}, + "Select object tool": {"lt": ""}, + "Selected": {"lt": ""}, + "Sensitivity:": {"lt": ""}, + "Sepia": {"lt": ""}, + "Shaded": {"lt": ""}, + "Shadow blur:": {"lt": ""}, + "Shadow color:": {"lt": ""}, + "Shadow:": {"lt": ""}, + "Sharpen": {"lt": ""}, + "Sharpen tool": {"lt": ""}, + "Sharpen:": {"lt": ""}, + "Show / Hide": {"lt": ""}, + "Simple": {"lt": ""}, + "Size": {"lt": ""}, + "Size:": {"lt": ""}, + "Sketchy": {"lt": ""}, + "Solarize": {"lt": ""}, + "Sorry": {"lt": ""}, + "Sorry, image is too big, max 5 MB.": {"lt": ""}, + "Source is empty, right click on image first.": {"lt": ""}, + "Sprites": {"lt": ""}, + "Square": {"lt": ""}, + "Strength:": {"lt": ""}, + "Strict": {"lt": ""}, + "Stroke": {"lt": ""}, + "Stroke size:": {"lt": ""}, + "Target:": {"lt": ""}, + "Text": {"lt": ""}, + "Text:": {"lt": ""}, + "The image could not be loaded.": {"lt": ""}, + "This can not be last layer": {"lt": ""}, + "This can not be last layer.": {"lt": ""}, + "Tilt Shift": {"lt": ""}, + "Times New Roman": {"lt": ""}, + "To paste from clipboard, use Ctrl-V.": {"lt": ""}, + "Tools": {"lt": ""}, + "Top-left": {"lt": ""}, + "Top-right": {"lt": ""}, + "Total pixels:": {"lt": ""}, + "Translate error, can not find dictionary:": {"lt": ""}, + "Transparency #1:": {"lt": ""}, + "Transparency #2:": {"lt": ""}, + "Transparent:": {"lt": ""}, + "Trim": {"lt": ""}, + "Trim:": {"lt": ""}, + "Undo": {"lt": ""}, + "Unique colors:": {"lt": ""}, + "Up": {"lt": ""}, + "V Radius:": {"lt": ""}, + "Verdana": {"lt": ""}, + "Vertical": {"lt": ""}, + "Vertical gap:": {"lt": ""}, + "Vibrance": {"lt": ""}, + "Vignette": {"lt": ""}, + "Vignette amount:": {"lt": ""}, + "Vignette size:": {"lt": ""}, + "ViliusL": {"lt": ""}, + "Vintage": {"lt": ""}, + "Visible": {"lt": ""}, + "Visible:": {"lt": ""}, + "WEBP - Weppy File Format": {"lt": ""}, + "Website": {"lt": ""}, + "Width (%):": {"lt": ""}, + "Width (pixels):": {"lt": ""}, + "Width:": {"lt": ""}, + "Wrong file type, must be image or json.": {"lt": ""}, + "X end:": {"lt": ""}, + "X start:": {"lt": ""}, + "Y end:": {"lt": ""}, + "Y start:": {"lt": ""}, + "Yes": {"lt": ""}, + "Your browser does not support this format.": {"lt": ""}, + "Your browser doesn't support canvas.": {"lt": ""}, + "Zoom": {"lt": ""}, + "Zoom In": {"lt": ""}, + "Zoom Out": {"lt": ""}, + "Zoom in": {"lt": ""}, + "Zoom out": {"lt": ""}, + "Zoom:": {"lt": ""}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.xml new file mode 100644 index 00000000000..2afc808ddfd --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/empty.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>empty.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.js new file mode 100644 index 00000000000..cbcaee31d9e --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.js @@ -0,0 +1,342 @@ +var dict_es = { + "2d": {"es": "2d"}, + "3D position:": {"es": "Posición 3d:"}, + "3D size:": {"es": "3d tamaño:"}, + "480p": {"es": "480p"}, + "About": {"es": "Acerca de"}, + "Add new layer": {"es": "Añadir nueva capa"}, + "Advanced": {"es": "Avanzado"}, + "All": {"es": "Todas"}, + "Alpha": {"es": "Alfa"}, + "Alpha:": {"es": "Alfa:"}, + "Amount:": {"es": "Cantidad:"}, + "Anonymous": {"es": "Anónimo"}, + "Anti aliasing": {"es": "Submuestreo"}, + "Area:": {"es": "Zona:"}, + "Arial": {"es": "Arial"}, + "Arrow": {"es": "Flecha"}, + "Arrow keys": {"es": "Teclas de flecha"}, + "Attributes": {"es": "Atributos"}, + "Author:": {"es": "Autor:"}, + "Auto adjust colors": {"es": "Ajuste automático de colores"}, + "Auto colorize": {"es": "Colorear auto"}, + "Average:": {"es": "Promedio:"}, + "BMP - Windows Bitmap": {"es": "Bmp - ventanas de mapa de bits"}, + "Basic": {"es": "Basic"}, + "BezierCurve": {"es": "Curva de bézier"}, + "Big grains level:": {"es": "Granos grandes de nivel:"}, + "Black and White": {"es": "En blanco y negro"}, + "Blend": {"es": "Mezcla"}, + "Blend:": {"es": "Mezcla:"}, + "Blue": {"es": "Azul"}, + "Blue channel:": {"es": "Canal azul:"}, + "Blur": {"es": "Difuminar"}, + "Blur Radius:": {"es": "Radio de desenfoque:"}, + "Blur tool": {"es": "Herramienta de desenfoque"}, + "Blur-Box": {"es": "Falta de definición de la caja"}, + "Blur-Gaussian": {"es": "Desenfoque gaussiano"}, + "Blur-Stack": {"es": "Blur-pila"}, + "Blur-Zoom": {"es": "Blur-zoom"}, + "Blur:": {"es": "Difuminar:"}, + "Bold": {"es": "Negrita"}, + "Bold Italic": {"es": "Negrita cursiva"}, + "Borders": {"es": "Fronteras"}, + "Both": {"es": "Ambos"}, + "Bottom-left": {"es": "Abajo a la izquierda"}, + "Bottom-right": {"es": "Abajo a la derecha"}, + "Brightness:": {"es": "Brillo:"}, + "Brush": {"es": "Cepillo"}, + "Bulge/Pinch": {"es": "Abultamiento / pizca"}, + "Bulge/Pinch tool": {"es": "Abultamiento herramienta / pizca"}, + "Burn": {"es": "Quemar"}, + "Burn/Dodge tool": {"es": "Burn herramienta / esquivar"}, + "Cancel": {"es": "Cancelar"}, + "Center x:": {"es": "Centro de x:"}, + "Center y:": {"es": "Centro y:"}, + "Center:": {"es": "Centrar:"}, + "Channel:": {"es": "Canal:"}, + "Chrome": {"es": "Cromo"}, + "Circle": {"es": "Circulo"}, + "Clear": {"es": "Claro"}, + "Clear selection": {"es": "Selección clara"}, + "Clone tool": {"es": "Herramienta de clonación"}, + "Color #1:": {"es": "Color # 1:"}, + "Color #2:": {"es": "Color # 2:"}, + "Color Zoom": {"es": "Zoom de color"}, + "Color adjust:": {"es": "Ajuste de color:"}, + "Color corrections": {"es": "Correcciones de color"}, + "Color to Alpha": {"es": "Color a alfa"}, + "Color to alpha": {"es": "Color a alfa"}, + "Color:": {"es": "Color:"}, + "Colorize": {"es": "Colorear"}, + "Colors:": {"es": "Colores:"}, + "Composite": {"es": "Compuesto"}, + "Composition:": {"es": "Composición:"}, + "Contrast:": {"es": "Contraste:"}, + "Copy selection": {"es": "Selección de copia"}, + "Courier": {"es": "Mensajero"}, + "Crop": {"es": "Cultivo"}, + "Crop Selection": {"es": "Selección de cultivos"}, + "Curve": {"es": "Curva"}, + "Custom": {"es": "Personalizado"}, + "Cut selection": {"es": "Cortar la selección"}, + "Decrease color depth": {"es": "Disminuir la profundidad de color"}, + "Decrease colors": {"es": "Disminuir los colores"}, + "Default": {"es": "Defecto"}, + "Del": {"es": "Del"}, + "Delete": {"es": "Borrar"}, + "Delete selection": {"es": "Eliminar la selección"}, + "Denoise": {"es": "Eliminación de ruido"}, + "Desaturate": {"es": "Desaturar"}, + "Desaturation:": {"es": "Desaturación:"}, + "Description:": {"es": "Descripción:"}, + "Differences": {"es": "Diferencias"}, + "Differences Down": {"es": "Diferencias abajo"}, + "Dither": {"es": "Vacilar"}, + "Dithering:": {"es": "Difuminado:"}, + "Dot Screen": {"es": "Trama de puntos"}, + "Down": {"es": "Abajo"}, + "Downloaded": {"es": "Descargado"}, + "Draw circle": {"es": "Dibujar círculo"}, + "Draw letters": {"es": "Dibujar letras"}, + "Draw line": {"es": "Dibujar linea"}, + "Draw rectangle": {"es": "Dibujar rectángulo"}, + "Duplicate": {"es": "Duplicar"}, + "Duplicate layer": {"es": "Duplicar capa"}, + "Dusts level:": {"es": "Los polvos nivel:"}, + "Edge": {"es": "Borde"}, + "Edit": {"es": "Editar"}, + "Effects": {"es": "Efectos"}, + "Email:": {"es": "Email:"}, + "Emboss": {"es": "Realzar"}, + "Empty data": {"es": "De datos vacía"}, + "English": {"es": "Inglés"}, + "Enrich": {"es": "Enriquecer"}, + "Enter angle (0-360):": {"es": "Introduzca el ángulo (0-360):"}, + "Erase": {"es": "Borrar"}, + "Error": {"es": "Error"}, + "Error:": {"es": "Error:"}, + "Español": {"es": "Español"}, + "Exponent:": {"es": "Exponente:"}, + "Exposure level:": {"es": "Nivel de exposición:"}, + "Factor:": {"es": "Factor:"}, + "File": {"es": "Archivo"}, + "File name:": {"es": "Nombre del archivo:"}, + "Fill": {"es": "Llenar"}, + "Fill style:": {"es": "Estilo de relleno:"}, + "Fit": {"es": "Ajuste"}, + "Fit window": {"es": "Ajustar ventana"}, + "Flatten Image": {"es": "Imagen aplanada"}, + "Flip": {"es": "Dar la vuelta"}, + "Font family:": {"es": "Familia tipográfica:"}, + "Font style:": {"es": "Estilo de fuente:"}, + "French": {"es": "Francés"}, + "Full HD, 1080p": {"es": "Full hd, 1080p"}, + "Fur": {"es": "Pelaje"}, + "Gap:": {"es": "Brecha:"}, + "German": {"es": "Alemán"}, + "GitHub:": {"es": "Github:"}, + "Gradient": {"es": "Gradiente"}, + "Gradient Radius:": {"es": "Radio de gradiente:"}, + "Grains": {"es": "Granos"}, + "Grains level:": {"es": "Granos nivel:"}, + "Gray": {"es": "Gris"}, + "GrayScale": {"es": "Escala de grises"}, + "Green": {"es": "Verde"}, + "Green channel:": {"es": "Canal verde:"}, + "Greyscale:": {"es": "Escala de grises:"}, + "Grid": {"es": "Cuadrícula"}, + "Grid on/off": {"es": "Rejilla de encendido / apagado"}, + "Grouped": {"es": "Agrupados"}, + "H Radius:": {"es": "Radio h:"}, + "Heatmap": {"es": "Mapa de calor"}, + "Height (%):": {"es": "Altura (%):"}, + "Height (pixels):": {"es": "Altura (píxeles):"}, + "Height:": {"es": "Altura:"}, + "Help": {"es": "Ayuda"}, + "Helvetica": {"es": "Helvetica"}, + "Hermite": {"es": "Hermite"}, + "Histogram": {"es": "Histograma"}, + "Histogram:": {"es": "Histograma:"}, + "Horizontal": {"es": "Horizontal"}, + "Horizontal gap:": {"es": "Brecha horizontal:"}, + "Hue:": {"es": "Matiz:"}, + "Image": {"es": "Imagen"}, + "Impact": {"es": "Impacto"}, + "Information": {"es": "Información"}, + "Italiano": {"es": "Italiano"}, + "Italic": {"es": "Itálico"}, + "JPG - JPG/JPEG Format": {"es": "Jpg - formato jpg / jpeg"}, + "JPG Compression": {"es": "Compresión jpg"}, + "JSON - Full layers data": {"es": "Json - capas de datos completos"}, + "Japanese": {"es": "Japonés"}, + "Key-points": {"es": "Puntos clave"}, + "Keyboard Shortcuts": {"es": "Atajos de teclado"}, + "Korean": {"es": "Coreano"}, + "Language": {"es": "Idioma"}, + "Last modified": {"es": "última modificación"}, + "Layer": {"es": "Capa"}, + "Layers": {"es": "Capas"}, + "Left": {"es": "Izquierda"}, + "Level:": {"es": "Nivel:"}, + "Levels:": {"es": "Niveles:"}, + "Lietuvių": {"es": "Lietuvių"}, + "Light leak:": {"es": "Fuga de luz:"}, + "Limit:": {"es": "Límite:"}, + "Luminance:": {"es": "Luminancia:"}, + "Luminosity:": {"es": "Luminosidad:"}, + "Magic Wand Tool": {"es": "Varita mágica"}, + "Merge": {"es": "Unir"}, + "Merge Down": {"es": "Fusionar"}, + "Mode:": {"es": "Modo:"}, + "Mosaic": {"es": "Mosaico"}, + "Mouse:": {"es": "Ratón:"}, + "Move": {"es": "Movimiento"}, + "Move active layer": {"es": "Mover la capa activa"}, + "Move down": {"es": "Mover hacia abajo"}, + "Move up": {"es": "Ascender"}, + "Multi-line": {"es": "Multilínea"}, + "Name:": {"es": "Nombre:"}, + "Negative": {"es": "Negativo"}, + "New": {"es": "Nuevo"}, + "New file...": {"es": "Archivo nuevo..."}, + "New layer": {"es": "Nueva capa"}, + "No": {"es": "No"}, + "Normal": {"es": "Normal"}, + "Notice": {"es": "Darse cuenta"}, + "Notice:": {"es": "Darse cuenta:"}, + "Oil": {"es": "Petróleo"}, + "Ok": {"es": "De acuerdo"}, + "Online image editor": {"es": "Editor de imágenes en línea"}, + "Opacity": {"es": "Opacidad"}, + "Open": {"es": "Abierto"}, + "Original size": {"es": "Tamaño original"}, + "PNG - Portable Network Graphics": {"es": "Png - portable network graphics"}, + "Paste": {"es": "Pegar"}, + "Paste selection": {"es": "La selección de pasta"}, + "Pencil": {"es": "Lápiz"}, + "Perspective": {"es": "Perspectiva"}, + "Pick Color": {"es": "Color de la selección"}, + "Pixels:": {"es": "Píxeles:"}, + "Portuguese": {"es": "Portugués"}, + "Power:": {"es": "Poder:"}, + "Pre-Blur:": {"es": "Pre-desenfoque:"}, + "Preview": {"es": "Avance"}, + "Print": {"es": "Impresión"}, + "Quality (jpeg):": {"es": "Calidad (jpeg):"}, + "Quality:": {"es": "Calidad:"}, + "Quick load": {"es": "Carga rápida"}, + "Quick save": {"es": "Guardado rapido"}, + "Radial": {"es": "Radial"}, + "Radius:": {"es": "Radio:"}, + "Range:": {"es": "Distancia:"}, + "Reason:": {"es": "Razón:"}, + "Recover alpha": {"es": "Recuperar alfa"}, + "Red": {"es": "Rojo"}, + "Red channel:": {"es": "Canal rojo:"}, + "Rename": {"es": "Rebautizar"}, + "Rename layer": {"es": "Cambiar el nombre de capa"}, + "Replace Color": {"es": "Reemplazar color"}, + "Replace color": {"es": "Reemplazar color"}, + "Replacement:": {"es": "Reemplazo:"}, + "Resample - Hermite": {"es": "Volver a muestrear - hermite"}, + "Reset zoom level": {"es": "Restablecer el nivel de zoom"}, + "Resize": {"es": "Cambiar el tamaño"}, + "Resolution:": {"es": "Resolución:"}, + "Restore alpha": {"es": "Restaurar alfa"}, + "Right": {"es": "Derecha"}, + "Rotate": {"es": "Girar"}, + "Rotate left": {"es": "Girar a la izquierda"}, + "Rotation": {"es": "Rotación"}, + "Russian": {"es": "Ruso"}, + "Saturation:": {"es": "Saturación:"}, + "Save": {"es": "Salvar"}, + "Save as": {"es": "Guardar como"}, + "Save as type:": {"es": "Guardar como tipo:"}, + "Save layers:": {"es": "Guardar capas:"}, + "Save resolution:": {"es": "Guarde resolución:"}, + "Select all": {"es": "Seleccionar todo"}, + "Select area first": {"es": "Elija un área de primera"}, + "Select area tool": {"es": "Seleccionar herramienta de área"}, + "Select color": {"es": "Seleccionar el color"}, + "Select object tool": {"es": "Herramienta de selección de objetos"}, + "Selected": {"es": "Seleccionado"}, + "Sensitivity:": {"es": "Sensibilidad:"}, + "Sepia": {"es": "Sepia"}, + "Shaded": {"es": "Sombreada"}, + "Shadow blur:": {"es": "Sombra desenfoque:"}, + "Shadow color:": {"es": "Color de la sombra:"}, + "Shadow:": {"es": "Sombra:"}, + "Sharpen": {"es": "Afilar"}, + "Sharpen tool": {"es": "Afilar herramientas"}, + "Sharpen:": {"es": "Afilar:"}, + "Show / Hide": {"es": "Mostrar ocultar"}, + "Simple": {"es": "Sencillo"}, + "Size": {"es": "Tamaño"}, + "Size:": {"es": "Tamaño:"}, + "Sketchy": {"es": "Incompleto"}, + "Solarize": {"es": "Solarize"}, + "Sorry": {"es": "Lo siento"}, + "Sorry, image is too big, max 5 MB.": {"es": "Lo sentimos, la imagen es demasiado grande, un máximo de 5 mb."}, + "Source is empty, right click on image first.": {"es": "Fuente está vacía, haga clic derecho en la imagen primero."}, + "Sprites": {"es": "Sprites"}, + "Square": {"es": "Cuadrado"}, + "Strength:": {"es": "Fuerza:"}, + "Strict": {"es": "Estricto"}, + "Stroke": {"es": "Carrera"}, + "Stroke size:": {"es": "El tamaño del trazo:"}, + "Target:": {"es": "Objetivo:"}, + "Text": {"es": "Texto"}, + "Text:": {"es": "Texto:"}, + "The image could not be loaded.": {"es": "La imagen no se pudo cargar."}, + "This can not be last layer": {"es": "Esto no puede ser la última capa"}, + "This can not be last layer.": {"es": "Esto no puede ser la última capa."}, + "Tilt Shift": {"es": "Cambio de inclinación"}, + "Times New Roman": {"es": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"es": "Para pegar desde el portapapeles, use ctrl-v."}, + "Tools": {"es": "Herramientas"}, + "Top-left": {"es": "Arriba a la izquierda"}, + "Top-right": {"es": "Parte superior derecha"}, + "Total pixels:": {"es": "Píxeles en total:"}, + "Translate error, can not find dictionary:": {"es": "Traducir el error, no puede encontrar el diccionario:"}, + "Transparency #1:": {"es": "Transparencia # 1:"}, + "Transparency #2:": {"es": "Transparencia # 2:"}, + "Transparent:": {"es": "Transparente:"}, + "Trim": {"es": "Recortar"}, + "Trim:": {"es": "Recortar:"}, + "Turkish": {"es": "Turco"}, + "Undo": {"es": "Deshacer"}, + "Unique colors:": {"es": "Colores únicas:"}, + "Up": {"es": "Arriba"}, + "V Radius:": {"es": "Radio de v:"}, + "Verdana": {"es": "Verdana"}, + "Vertical": {"es": "Vertical"}, + "Vertical gap:": {"es": "Espacio vertical:"}, + "Vibrance": {"es": "La viveza"}, + "Vignette": {"es": "Viñeta"}, + "Vignette amount:": {"es": "Cantidad viñeta:"}, + "Vignette size:": {"es": "Tamaño de viñeta:"}, + "ViliusL": {"es": "Viliusl"}, + "Vintage": {"es": "Vendimia"}, + "Visible": {"es": "Visible"}, + "Visible:": {"es": "Visible:"}, + "WEBP - Weppy File Format": {"es": "Webp - formato de archivo weppy"}, + "Website": {"es": "Sitio web"}, + "Width (%):": {"es": "Anchura (%):"}, + "Width (pixels):": {"es": "Ancho (píxeles):"}, + "Width:": {"es": "Anchura:"}, + "Wrong file type, must be image or json.": {"es": "Tipo de archivo incorrecto, debe ser una imagen o json."}, + "X end:": {"es": "X final:"}, + "X start:": {"es": "Inicio x:"}, + "Y end:": {"es": "Y final:"}, + "Y start:": {"es": "Y de inicio:"}, + "Yes": {"es": "Sí"}, + "Your browser does not support this format.": {"es": "Su navegador no es compatible con este formato."}, + "Your browser doesn't support canvas.": {"es": "Su navegador no soporta lienzo."}, + "Zoom": {"es": "Enfocar"}, + "Zoom In": {"es": "Acercarse"}, + "Zoom Out": {"es": "Disminuir el zoom"}, + "Zoom in": {"es": "Acercarse"}, + "Zoom out": {"es": "Disminuir el zoom"}, + "Zoom:": {"es": "Enfocar:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.xml new file mode 100644 index 00000000000..69ce503e7aa --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/es.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>es.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.js new file mode 100644 index 00000000000..44a0130fd90 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.js @@ -0,0 +1,342 @@ +var dict_fr = { + "2d": {"fr": "2d"}, + "3D position:": {"fr": "3d position:"}, + "3D size:": {"fr": "Taille 3d:"}, + "480p": {"fr": "480p"}, + "About": {"fr": "Sur"}, + "Add new layer": {"fr": "Ajouter une nouvelle couche"}, + "Advanced": {"fr": "Avancée"}, + "All": {"fr": "Tout"}, + "Alpha": {"fr": "Alpha"}, + "Alpha:": {"fr": "Alpha:"}, + "Amount:": {"fr": "Montant:"}, + "Anonymous": {"fr": "Anonyme"}, + "Anti aliasing": {"fr": "Anti crénelage"}, + "Area:": {"fr": "Région:"}, + "Arial": {"fr": "Arial"}, + "Arrow": {"fr": "Flèche"}, + "Arrow keys": {"fr": "Touches directionnelles"}, + "Attributes": {"fr": "Les attributs"}, + "Author:": {"fr": "Auteur:"}, + "Auto adjust colors": {"fr": "Auto ajuster les couleurs"}, + "Auto colorize": {"fr": "Colorize auto"}, + "Average:": {"fr": "Moyenne:"}, + "BMP - Windows Bitmap": {"fr": "Bmp - fenêtres bitmap"}, + "Basic": {"fr": "De base"}, + "BezierCurve": {"fr": "Courbe de bézier"}, + "Big grains level:": {"fr": "Big grains niveau:"}, + "Black and White": {"fr": "Noir et blanc"}, + "Blend": {"fr": "Mélange"}, + "Blend:": {"fr": "Mélange:"}, + "Blue": {"fr": "Bleu"}, + "Blue channel:": {"fr": "Bleu canal:"}, + "Blur": {"fr": "Flou"}, + "Blur Radius:": {"fr": "Rayon blur:"}, + "Blur tool": {"fr": "Outil de floutage"}, + "Blur-Box": {"fr": "Flou-box"}, + "Blur-Gaussian": {"fr": "Flou gaussien"}, + "Blur-Stack": {"fr": "Flou-pile"}, + "Blur-Zoom": {"fr": "Flou-zoom"}, + "Blur:": {"fr": "Flou:"}, + "Bold": {"fr": "Audacieux"}, + "Bold Italic": {"fr": "Gras italique"}, + "Borders": {"fr": "Les frontières"}, + "Both": {"fr": "Tous les deux"}, + "Bottom-left": {"fr": "En bas à gauche"}, + "Bottom-right": {"fr": "En bas à droite"}, + "Brightness:": {"fr": "Luminosité:"}, + "Brush": {"fr": "Brosse"}, + "Bulge/Pinch": {"fr": "Ardennes / pincement"}, + "Bulge/Pinch tool": {"fr": "Ardennes / outil de pincement"}, + "Burn": {"fr": "Brûler"}, + "Burn/Dodge tool": {"fr": "Graver / outil dodge"}, + "Cancel": {"fr": "Annuler"}, + "Center x:": {"fr": "Centre x:"}, + "Center y:": {"fr": "Centre y:"}, + "Center:": {"fr": "Centre:"}, + "Channel:": {"fr": "Canal:"}, + "Chrome": {"fr": "Chrome"}, + "Circle": {"fr": "Cercle"}, + "Clear": {"fr": "Clair"}, + "Clear selection": {"fr": "Effacer la sélection"}, + "Clone tool": {"fr": "Outil clone"}, + "Color #1:": {"fr": "Couleur # 1:"}, + "Color #2:": {"fr": "Couleur # 2:"}, + "Color Zoom": {"fr": "Zoom couleur"}, + "Color adjust:": {"fr": "Couleur régler:"}, + "Color corrections": {"fr": "Correction des couleurs"}, + "Color to Alpha": {"fr": "Couleur à l'alpha"}, + "Color to alpha": {"fr": "Couleur à l'alpha"}, + "Color:": {"fr": "Couleur:"}, + "Colorize": {"fr": "Colorier"}, + "Colors:": {"fr": "Les couleurs:"}, + "Composite": {"fr": "Composite"}, + "Composition:": {"fr": "Composition:"}, + "Contrast:": {"fr": "Contraste:"}, + "Copy selection": {"fr": "Copier la sélection"}, + "Courier": {"fr": "Courrier"}, + "Crop": {"fr": "Surgir"}, + "Crop Selection": {"fr": "La sélection des cultures"}, + "Curve": {"fr": "Courbe"}, + "Custom": {"fr": "Coutume"}, + "Cut selection": {"fr": "Couper la sélection"}, + "Decrease color depth": {"fr": "Diminuer la profondeur de couleur"}, + "Decrease colors": {"fr": "Couleurs diminution"}, + "Default": {"fr": "Défaut"}, + "Del": {"fr": "Del"}, + "Delete": {"fr": "Effacer"}, + "Delete selection": {"fr": "Supprimer la sélection"}, + "Denoise": {"fr": "Denoise"}, + "Desaturate": {"fr": "Désaturer"}, + "Desaturation:": {"fr": "Désaturation:"}, + "Description:": {"fr": "La description:"}, + "Differences": {"fr": "Différences"}, + "Differences Down": {"fr": "Différences vers le bas"}, + "Dither": {"fr": "Tremblement"}, + "Dithering:": {"fr": "Trame:"}, + "Dot Screen": {"fr": "écran dot"}, + "Down": {"fr": "Vers le bas"}, + "Downloaded": {"fr": "Téléchargé"}, + "Draw circle": {"fr": "Dessinez cercle"}, + "Draw letters": {"fr": "Dessinez lettres"}, + "Draw line": {"fr": "Dessiner une ligne"}, + "Draw rectangle": {"fr": "Dessinez rectangle"}, + "Duplicate": {"fr": "Dupliquer"}, + "Duplicate layer": {"fr": "Dupliquer le calque"}, + "Dusts level:": {"fr": "Poussières niveau:"}, + "Edge": {"fr": "Bord"}, + "Edit": {"fr": "Modifier"}, + "Effects": {"fr": "Effets"}, + "Email:": {"fr": "Email:"}, + "Emboss": {"fr": "Gaufrer"}, + "Empty data": {"fr": "Données vide"}, + "English": {"fr": "Anglais"}, + "Enrich": {"fr": "Enrichir"}, + "Enter angle (0-360):": {"fr": "Entrez angle (0-360):"}, + "Erase": {"fr": "Effacer"}, + "Error": {"fr": "Erreur"}, + "Error:": {"fr": "Erreur:"}, + "Español": {"fr": "Español"}, + "Exponent:": {"fr": "Exposant:"}, + "Exposure level:": {"fr": "Niveau d'exposition:"}, + "Factor:": {"fr": "Facteur:"}, + "File": {"fr": "Fichier"}, + "File name:": {"fr": "Nom de fichier:"}, + "Fill": {"fr": "Remplir"}, + "Fill style:": {"fr": "Remplissez style:"}, + "Fit": {"fr": "Fit"}, + "Fit window": {"fr": "Fenêtre fit"}, + "Flatten Image": {"fr": "Une image aplatie"}, + "Flip": {"fr": "Retourner"}, + "Font family:": {"fr": "Famille de polices:"}, + "Font style:": {"fr": "Le style de police:"}, + "French": {"fr": "Français"}, + "Full HD, 1080p": {"fr": "Full hd, 1080p"}, + "Fur": {"fr": "Fourrure"}, + "Gap:": {"fr": "écart:"}, + "German": {"fr": "Allemand"}, + "GitHub:": {"fr": "Github:"}, + "Gradient": {"fr": "Pente"}, + "Gradient Radius:": {"fr": "Rayon gradient:"}, + "Grains": {"fr": "Céréales"}, + "Grains level:": {"fr": "Grains niveau:"}, + "Gray": {"fr": "Gris"}, + "GrayScale": {"fr": "Grayscale"}, + "Green": {"fr": "Vert"}, + "Green channel:": {"fr": "Circuit vert:"}, + "Greyscale:": {"fr": "Greyscale:"}, + "Grid": {"fr": "La grille"}, + "Grid on/off": {"fr": "Grille on / off"}, + "Grouped": {"fr": "Regroupées"}, + "H Radius:": {"fr": "H rayon:"}, + "Heatmap": {"fr": "Carte de chaleur"}, + "Height (%):": {"fr": "La taille (%):"}, + "Height (pixels):": {"fr": "Hauteur (pixels):"}, + "Height:": {"fr": "La taille:"}, + "Help": {"fr": "Aidez-moi"}, + "Helvetica": {"fr": "Helvetica"}, + "Hermite": {"fr": "Hermite"}, + "Histogram": {"fr": "Histogramme"}, + "Histogram:": {"fr": "Histogramme:"}, + "Horizontal": {"fr": "Horizontal"}, + "Horizontal gap:": {"fr": "écart horizontal:"}, + "Hue:": {"fr": "Teinte:"}, + "Image": {"fr": "Image"}, + "Impact": {"fr": "Impact"}, + "Information": {"fr": "Information"}, + "Italiano": {"fr": "Italiano"}, + "Italic": {"fr": "Italique"}, + "JPG - JPG/JPEG Format": {"fr": "Jpg - format jpg / jpeg"}, + "JPG Compression": {"fr": "Compression jpg"}, + "JSON - Full layers data": {"fr": "Json - couches pleines données"}, + "Japanese": {"fr": "Japonais"}, + "Key-points": {"fr": "Points clés"}, + "Keyboard Shortcuts": {"fr": "Raccourcis clavier"}, + "Korean": {"fr": "Coréen"}, + "Language": {"fr": "La langue"}, + "Last modified": {"fr": "Dernière mise à jour"}, + "Layer": {"fr": "Couche"}, + "Layers": {"fr": "Couches"}, + "Left": {"fr": "à gauche"}, + "Level:": {"fr": "Niveau:"}, + "Levels:": {"fr": "Les niveaux:"}, + "Lietuvių": {"fr": "Lietuvių"}, + "Light leak:": {"fr": "Fuite de lumière:"}, + "Limit:": {"fr": "Limite:"}, + "Luminance:": {"fr": "Luminance:"}, + "Luminosity:": {"fr": "Luminosité:"}, + "Magic Wand Tool": {"fr": "Un outil baguette magique"}, + "Merge": {"fr": "Fusionner"}, + "Merge Down": {"fr": "Fusionner vers le bas"}, + "Mode:": {"fr": "Mode:"}, + "Mosaic": {"fr": "Mosaïque"}, + "Mouse:": {"fr": "Souris:"}, + "Move": {"fr": "Déplacer"}, + "Move active layer": {"fr": "Déplacer la couche active"}, + "Move down": {"fr": "Descendre"}, + "Move up": {"fr": "Déplacer vers le haut"}, + "Multi-line": {"fr": "Multi-line"}, + "Name:": {"fr": "Prénom:"}, + "Negative": {"fr": "Négatif"}, + "New": {"fr": "Nouveau"}, + "New file...": {"fr": "Nouveau fichier..."}, + "New layer": {"fr": "Nouvelle couche"}, + "No": {"fr": "Non"}, + "Normal": {"fr": "Ordinaire"}, + "Notice": {"fr": "Avis"}, + "Notice:": {"fr": "Avis:"}, + "Oil": {"fr": "Pétrole"}, + "Ok": {"fr": "D'accord"}, + "Online image editor": {"fr": "éditeur d'images en ligne"}, + "Opacity": {"fr": "Opacité"}, + "Open": {"fr": "Ouvert"}, + "Original size": {"fr": "Format original"}, + "PNG - Portable Network Graphics": {"fr": "Png - portable network graphics"}, + "Paste": {"fr": "Pâte"}, + "Paste selection": {"fr": "Coller la sélection"}, + "Pencil": {"fr": "Crayon"}, + "Perspective": {"fr": "La perspective"}, + "Pick Color": {"fr": "Choisissez la couleur"}, + "Pixels:": {"fr": "Pixels:"}, + "Portuguese": {"fr": "Portugais"}, + "Power:": {"fr": "Puissance:"}, + "Pre-Blur:": {"fr": "Pré-flou:"}, + "Preview": {"fr": "Aperçu"}, + "Print": {"fr": "Impression"}, + "Quality (jpeg):": {"fr": "Qualité (jpeg):"}, + "Quality:": {"fr": "Qualité:"}, + "Quick load": {"fr": "Charge rapide"}, + "Quick save": {"fr": "Sauvegarde rapide"}, + "Radial": {"fr": "Radial"}, + "Radius:": {"fr": "Rayon:"}, + "Range:": {"fr": "Gamme:"}, + "Reason:": {"fr": "Raison:"}, + "Recover alpha": {"fr": "Récupérer alpha"}, + "Red": {"fr": "Rouge"}, + "Red channel:": {"fr": "Circuit rouge:"}, + "Rename": {"fr": "Rebaptiser"}, + "Rename layer": {"fr": "Renommez couche"}, + "Replace Color": {"fr": "Remplacer la couleur"}, + "Replace color": {"fr": "Remplacer la couleur"}, + "Replacement:": {"fr": "Remplacement:"}, + "Resample - Hermite": {"fr": "Resample - hermite"}, + "Reset zoom level": {"fr": "Niveau de zoom réinitialiser"}, + "Resize": {"fr": "Redimensionner"}, + "Resolution:": {"fr": "Résolution:"}, + "Restore alpha": {"fr": "Restaurer alpha"}, + "Right": {"fr": "Droite"}, + "Rotate": {"fr": "Faire tourner"}, + "Rotate left": {"fr": "Tourne à gauche"}, + "Rotation": {"fr": "Rotation"}, + "Russian": {"fr": "Russe"}, + "Saturation:": {"fr": "Saturation:"}, + "Save": {"fr": "Sauvegarder"}, + "Save as": {"fr": "Enregistrer sous"}, + "Save as type:": {"fr": "Sauvegarder comme type:"}, + "Save layers:": {"fr": "Enregistrer couches:"}, + "Save resolution:": {"fr": "Enregistrer résolution:"}, + "Select all": {"fr": "Sélectionner tout"}, + "Select area first": {"fr": "Sélectionnez la première zone"}, + "Select area tool": {"fr": "Outil de sélection de la zone"}, + "Select color": {"fr": "Choisissez la couleur"}, + "Select object tool": {"fr": "Outil de sélection d'objet"}, + "Selected": {"fr": "Choisi"}, + "Sensitivity:": {"fr": "Sensibilité:"}, + "Sepia": {"fr": "Sépia"}, + "Shaded": {"fr": "Shaded"}, + "Shadow blur:": {"fr": "Le flou de l'ombre:"}, + "Shadow color:": {"fr": "Couleur de l'ombre:"}, + "Shadow:": {"fr": "Ombre:"}, + "Sharpen": {"fr": "Affiler"}, + "Sharpen tool": {"fr": "Aiguisez outil"}, + "Sharpen:": {"fr": "Aiguisez:"}, + "Show / Hide": {"fr": "Show / hide"}, + "Simple": {"fr": "Simple"}, + "Size": {"fr": "Taille"}, + "Size:": {"fr": "Taille:"}, + "Sketchy": {"fr": "Vague"}, + "Solarize": {"fr": "Solariser"}, + "Sorry": {"fr": "Pardon"}, + "Sorry, image is too big, max 5 MB.": {"fr": "Désolé, l'image est trop grande, max 5 mb."}, + "Source is empty, right click on image first.": {"fr": "Source est vide, cliquez à droite sur l'image première."}, + "Sprites": {"fr": "Sprites"}, + "Square": {"fr": "Carré"}, + "Strength:": {"fr": "Force:"}, + "Strict": {"fr": "Strict"}, + "Stroke": {"fr": "Accident vasculaire cérébral"}, + "Stroke size:": {"fr": "Taille de l'avc:"}, + "Target:": {"fr": "Cible:"}, + "Text": {"fr": "Texte"}, + "Text:": {"fr": "Texte:"}, + "The image could not be loaded.": {"fr": "L'image n'a pas pu être chargé."}, + "This can not be last layer": {"fr": "Cela ne peut pas être la dernière couche"}, + "This can not be last layer.": {"fr": "Cela ne peut pas être la dernière couche."}, + "Tilt Shift": {"fr": "Tilt shift"}, + "Times New Roman": {"fr": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"fr": "Pour coller du presse-papiers, utilisez ctrl-v."}, + "Tools": {"fr": "Outils"}, + "Top-left": {"fr": "En haut à gauche"}, + "Top-right": {"fr": "En haut à droite"}, + "Total pixels:": {"fr": "Nombre de pixels:"}, + "Translate error, can not find dictionary:": {"fr": "Traduire l'erreur, ne peut pas trouver le dictionnaire:"}, + "Transparency #1:": {"fr": "Transparence # 1:"}, + "Transparency #2:": {"fr": "Transparence # 2:"}, + "Transparent:": {"fr": "Transparent:"}, + "Trim": {"fr": "Réduire"}, + "Trim:": {"fr": "Réduire:"}, + "Turkish": {"fr": "Turc"}, + "Undo": {"fr": "Annuler"}, + "Unique colors:": {"fr": "Couleurs uniques:"}, + "Up": {"fr": "En haut"}, + "V Radius:": {"fr": "Rayon v:"}, + "Verdana": {"fr": "Verdana"}, + "Vertical": {"fr": "Verticale"}, + "Vertical gap:": {"fr": "écart vertical:"}, + "Vibrance": {"fr": "Vibrance"}, + "Vignette": {"fr": "Vignette"}, + "Vignette amount:": {"fr": "Montant de la vignette:"}, + "Vignette size:": {"fr": "Taille de vignette:"}, + "ViliusL": {"fr": "Viliusl"}, + "Vintage": {"fr": "Cru"}, + "Visible": {"fr": "Visible"}, + "Visible:": {"fr": "Visible:"}, + "WEBP - Weppy File Format": {"fr": "Webp - format de fichier weppy"}, + "Website": {"fr": "Site internet"}, + "Width (%):": {"fr": "Largeur (%):"}, + "Width (pixels):": {"fr": "Largeur (pixels):"}, + "Width:": {"fr": "Largeur:"}, + "Wrong file type, must be image or json.": {"fr": "Mauvais type de fichier, doit être l'image ou json."}, + "X end:": {"fr": "X fin:"}, + "X start:": {"fr": "X début:"}, + "Y end:": {"fr": "Y fin:"}, + "Y start:": {"fr": "Y début:"}, + "Yes": {"fr": "Oui"}, + "Your browser does not support this format.": {"fr": "Votre navigateur ne supporte pas ce format."}, + "Your browser doesn't support canvas.": {"fr": "Votre navigateur ne supporte pas la toile."}, + "Zoom": {"fr": "Zoom"}, + "Zoom In": {"fr": "Agrandir"}, + "Zoom Out": {"fr": "Dézoomer"}, + "Zoom in": {"fr": "Agrandir"}, + "Zoom out": {"fr": "Dézoomer"}, + "Zoom:": {"fr": "Zoom:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.xml new file mode 100644 index 00000000000..c745a784547 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/fr.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>fr.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.js new file mode 100644 index 00000000000..eddbb851bd3 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.js @@ -0,0 +1,342 @@ +var dict_it = { + "2d": {"it": "2d"}, + "3D position:": {"it": "Posizione 3d:"}, + "3D size:": {"it": "Formato 3d:"}, + "480p": {"it": "480p"}, + "About": {"it": "Di"}, + "Add new layer": {"it": "Aggiungere nuovo livello"}, + "Advanced": {"it": "Avanzate"}, + "All": {"it": "Tutti"}, + "Alpha": {"it": "Alfa"}, + "Alpha:": {"it": "Alfa:"}, + "Amount:": {"it": "Quantità:"}, + "Anonymous": {"it": "Anonimo"}, + "Anti aliasing": {"it": "Anti aliasing"}, + "Area:": {"it": "La zona:"}, + "Arial": {"it": "Arial"}, + "Arrow": {"it": "Freccia"}, + "Arrow keys": {"it": "Tasti freccia"}, + "Attributes": {"it": "Attributi"}, + "Author:": {"it": "Autore:"}, + "Auto adjust colors": {"it": "Regolazione automatica colori"}, + "Auto colorize": {"it": "Colorare auto"}, + "Average:": {"it": "Media:"}, + "BMP - Windows Bitmap": {"it": "Bmp - windows bitmap"}, + "Basic": {"it": "Di base"}, + "BezierCurve": {"it": "Curva di bézier"}, + "Big grains level:": {"it": "Di livello grani grossi:"}, + "Black and White": {"it": "Bianco e nero"}, + "Blend": {"it": "Miscela"}, + "Blend:": {"it": "Miscela:"}, + "Blue": {"it": "Blu"}, + "Blue channel:": {"it": "Blue channel:"}, + "Blur": {"it": "Blur"}, + "Blur Radius:": {"it": "Raggio di sfocatura:"}, + "Blur tool": {"it": "Strumento blur"}, + "Blur-Box": {"it": "Blur-box"}, + "Blur-Gaussian": {"it": "Blur-gaussiano"}, + "Blur-Stack": {"it": "Blur-stack"}, + "Blur-Zoom": {"it": "Blur-zoom"}, + "Blur:": {"it": "Blur:"}, + "Bold": {"it": "Grassetto"}, + "Bold Italic": {"it": "Italico grassetto"}, + "Borders": {"it": "Frontiere"}, + "Both": {"it": "Entrambi"}, + "Bottom-left": {"it": "In basso a sinistra"}, + "Bottom-right": {"it": "In basso a destra"}, + "Brightness:": {"it": "Luminosità:"}, + "Brush": {"it": "Pennello"}, + "Bulge/Pinch": {"it": "Bulge / pinch"}, + "Bulge/Pinch tool": {"it": "Bulge / strumento pinch"}, + "Burn": {"it": "Bruciare"}, + "Burn/Dodge tool": {"it": "Masterizzare strumento / dodge"}, + "Cancel": {"it": "Annulla"}, + "Center x:": {"it": "Centro x:"}, + "Center y:": {"it": "Centro y:"}, + "Center:": {"it": "Centro:"}, + "Channel:": {"it": "Canale:"}, + "Chrome": {"it": "Cromo"}, + "Circle": {"it": "Cerchio"}, + "Clear": {"it": "Pulire"}, + "Clear selection": {"it": "Cancella selezione"}, + "Clone tool": {"it": "Strumento clone"}, + "Color #1:": {"it": "Colore # 1:"}, + "Color #2:": {"it": "Colore # 2:"}, + "Color Zoom": {"it": "Zoom colore"}, + "Color adjust:": {"it": "Regola colore:"}, + "Color corrections": {"it": "Correzioni di colore"}, + "Color to Alpha": {"it": "Colore ad alfa"}, + "Color to alpha": {"it": "Colore ad alfa"}, + "Color:": {"it": "Colore:"}, + "Colorize": {"it": "Colorize"}, + "Colors:": {"it": "Colori:"}, + "Composite": {"it": "Composito"}, + "Composition:": {"it": "Composizione:"}, + "Contrast:": {"it": "Contrasto:"}, + "Copy selection": {"it": "Selezione copy"}, + "Courier": {"it": "Corriere"}, + "Crop": {"it": "Raccolto"}, + "Crop Selection": {"it": "Selezione di ritaglio"}, + "Curve": {"it": "Curva"}, + "Custom": {"it": "Costume"}, + "Cut selection": {"it": "Selezione cut"}, + "Decrease color depth": {"it": "Diminuire la profondità di colore"}, + "Decrease colors": {"it": "Diminuzione colori"}, + "Default": {"it": "Predefinito"}, + "Del": {"it": "Del"}, + "Delete": {"it": "Cancellare"}, + "Delete selection": {"it": "Elimina la selezione"}, + "Denoise": {"it": "Denoise"}, + "Desaturate": {"it": "Desatura"}, + "Desaturation:": {"it": "Desaturazione:"}, + "Description:": {"it": "Descrizione:"}, + "Differences": {"it": "Differenze"}, + "Differences Down": {"it": "Differenze giù"}, + "Dither": {"it": "Agitarsi"}, + "Dithering:": {"it": "Dithering:"}, + "Dot Screen": {"it": "Schermo dot"}, + "Down": {"it": "Giù"}, + "Downloaded": {"it": "Scaricati"}, + "Draw circle": {"it": "Disegna cerchio"}, + "Draw letters": {"it": "Disegnare le lettere"}, + "Draw line": {"it": "Draw line"}, + "Draw rectangle": {"it": "Disegna rettangolo"}, + "Duplicate": {"it": "Duplicare"}, + "Duplicate layer": {"it": "Livello duplicato"}, + "Dusts level:": {"it": "Polveri di livello:"}, + "Edge": {"it": "Bordo"}, + "Edit": {"it": "Modifica"}, + "Effects": {"it": "Effetti"}, + "Email:": {"it": "E-mail:"}, + "Emboss": {"it": "Rilievo"}, + "Empty data": {"it": "Dati vuota"}, + "English": {"it": "Inglese"}, + "Enrich": {"it": "Arricchire"}, + "Enter angle (0-360):": {"it": "Digitare l'angolo (0-360):"}, + "Erase": {"it": "Cancellare"}, + "Error": {"it": "Errore"}, + "Error:": {"it": "Errore:"}, + "Español": {"it": "Español"}, + "Exponent:": {"it": "Esponente:"}, + "Exposure level:": {"it": "Livello di esposizione:"}, + "Factor:": {"it": "Fattore:"}, + "File": {"it": "File"}, + "File name:": {"it": "Nome del file:"}, + "Fill": {"it": "Riempire"}, + "Fill style:": {"it": "Fill stile:"}, + "Fit": {"it": "In forma"}, + "Fit window": {"it": "Fit finestra"}, + "Flatten Image": {"it": "Immagine piatta"}, + "Flip": {"it": "Capovolgere"}, + "Font family:": {"it": "Famiglia di font:"}, + "Font style:": {"it": "Stile carattere:"}, + "French": {"it": "Francese"}, + "Full HD, 1080p": {"it": "Full hd, 1080p"}, + "Fur": {"it": "Pelliccia"}, + "Gap:": {"it": "Gap:"}, + "German": {"it": "Tedesco"}, + "GitHub:": {"it": "Github:"}, + "Gradient": {"it": "Pendenza"}, + "Gradient Radius:": {"it": "Raggio gradiente:"}, + "Grains": {"it": "Grani"}, + "Grains level:": {"it": "Di livello grains:"}, + "Gray": {"it": "Grigio"}, + "GrayScale": {"it": "Scala di grigi"}, + "Green": {"it": "Verde"}, + "Green channel:": {"it": "Canale verde:"}, + "Greyscale:": {"it": "Scala di grigi:"}, + "Grid": {"it": "Griglia"}, + "Grid on/off": {"it": "Griglia on / off"}, + "Grouped": {"it": "Raggruppate"}, + "H Radius:": {"it": "Raggio h:"}, + "Heatmap": {"it": "Mappa di calore"}, + "Height (%):": {"it": "Altezza (%):"}, + "Height (pixels):": {"it": "Altezza (pixel):"}, + "Height:": {"it": "Altezza:"}, + "Help": {"it": "Aiuto"}, + "Helvetica": {"it": "Helvetica"}, + "Hermite": {"it": "Hermite"}, + "Histogram": {"it": "Istogramma"}, + "Histogram:": {"it": "Istogramma:"}, + "Horizontal": {"it": "Orizzontale"}, + "Horizontal gap:": {"it": "Gap orizzontale:"}, + "Hue:": {"it": "Hue:"}, + "Image": {"it": "Immagine"}, + "Impact": {"it": "Urto"}, + "Information": {"it": "Informazioni"}, + "Italiano": {"it": "Italiano"}, + "Italic": {"it": "Corsivo"}, + "JPG - JPG/JPEG Format": {"it": "Jpg - jpg / jpeg"}, + "JPG Compression": {"it": "Compressione jpg"}, + "JSON - Full layers data": {"it": "Json - strati pieni di dati"}, + "Japanese": {"it": "Giapponese"}, + "Key-points": {"it": "Punti chiave"}, + "Keyboard Shortcuts": {"it": "Tasti rapidi"}, + "Korean": {"it": "Coreano"}, + "Language": {"it": "Lingua"}, + "Last modified": {"it": "Ultima modifica"}, + "Layer": {"it": "Strato"}, + "Layers": {"it": "Livelli"}, + "Left": {"it": "Sinistra"}, + "Level:": {"it": "Livello:"}, + "Levels:": {"it": "Livelli:"}, + "Lietuvių": {"it": "Lietuvių"}, + "Light leak:": {"it": "Perdita di luce:"}, + "Limit:": {"it": "Limite:"}, + "Luminance:": {"it": "Luminance:"}, + "Luminosity:": {"it": "Luminosità:"}, + "Magic Wand Tool": {"it": "Strumento bacchetta magica"}, + "Merge": {"it": "Fondere"}, + "Merge Down": {"it": "Fondere"}, + "Mode:": {"it": "Modalità:"}, + "Mosaic": {"it": "Mosaico"}, + "Mouse:": {"it": "Topo:"}, + "Move": {"it": "Mossa"}, + "Move active layer": {"it": "Spostare strato attivo"}, + "Move down": {"it": "Abbassati"}, + "Move up": {"it": "Rimontare"}, + "Multi-line": {"it": "Multi-line"}, + "Name:": {"it": "Nome:"}, + "Negative": {"it": "Negativo"}, + "New": {"it": "Nuovo"}, + "New file...": {"it": "Nuovo file..."}, + "New layer": {"it": "Nuovo livello"}, + "No": {"it": "No"}, + "Normal": {"it": "Normale"}, + "Notice": {"it": "Avviso"}, + "Notice:": {"it": "Avviso:"}, + "Oil": {"it": "Olio"}, + "Ok": {"it": "Ok"}, + "Online image editor": {"it": "Editor di immagini online"}, + "Opacity": {"it": "Opacità"}, + "Open": {"it": "Aperto"}, + "Original size": {"it": "Misura originale"}, + "PNG - Portable Network Graphics": {"it": "Png - portable network graphics"}, + "Paste": {"it": "Incolla"}, + "Paste selection": {"it": "Selezione incolla"}, + "Pencil": {"it": "Matita"}, + "Perspective": {"it": "Prospettiva"}, + "Pick Color": {"it": "Scegli il colore"}, + "Pixels:": {"it": "Pixel:"}, + "Portuguese": {"it": "Portoghese"}, + "Power:": {"it": "Energia:"}, + "Pre-Blur:": {"it": "Pre-sfocatura:"}, + "Preview": {"it": "Anteprima"}, + "Print": {"it": "Stampare"}, + "Quality (jpeg):": {"it": "Qualità (jpeg):"}, + "Quality:": {"it": "Qualità:"}, + "Quick load": {"it": "Carico rapida"}, + "Quick save": {"it": "Salvataggio veloce"}, + "Radial": {"it": "Radiale"}, + "Radius:": {"it": "Raggio:"}, + "Range:": {"it": "Gamma:"}, + "Reason:": {"it": "Ragionare:"}, + "Recover alpha": {"it": "Recuperare alpha"}, + "Red": {"it": "Rosso"}, + "Red channel:": {"it": "Canale rosso:"}, + "Rename": {"it": "Rinominare"}, + "Rename layer": {"it": "Rinomina strato"}, + "Replace Color": {"it": "Sostituire colore"}, + "Replace color": {"it": "Sostituire colore"}, + "Replacement:": {"it": "Sostituzione:"}, + "Resample - Hermite": {"it": "Resample - hermite"}, + "Reset zoom level": {"it": "Livello di zoom reset"}, + "Resize": {"it": "Ridimensiona"}, + "Resolution:": {"it": "Risoluzione:"}, + "Restore alpha": {"it": "Ripristinare alpha"}, + "Right": {"it": "Destra"}, + "Rotate": {"it": "Ruotare"}, + "Rotate left": {"it": "Gira a sinistra"}, + "Rotation": {"it": "Rotazione"}, + "Russian": {"it": "Russo"}, + "Saturation:": {"it": "Saturazione:"}, + "Save": {"it": "Salvare"}, + "Save as": {"it": "Salva come"}, + "Save as type:": {"it": "Salva come tipo:"}, + "Save layers:": {"it": "Salva strati:"}, + "Save resolution:": {"it": "Salva risoluzione:"}, + "Select all": {"it": "Seleziona tutto"}, + "Select area first": {"it": "Seleziona l'area prima"}, + "Select area tool": {"it": "Selezionare lo strumento zona"}, + "Select color": {"it": "Scegli il colore"}, + "Select object tool": {"it": "Selezionare lo strumento oggetto"}, + "Selected": {"it": "Selezionato"}, + "Sensitivity:": {"it": "Sensibilità:"}, + "Sepia": {"it": "Nero di seppia"}, + "Shaded": {"it": "Ombroso"}, + "Shadow blur:": {"it": "Ombra sfocatura:"}, + "Shadow color:": {"it": "Colore dell'ombra:"}, + "Shadow:": {"it": "Ombra:"}, + "Sharpen": {"it": "Affilare"}, + "Sharpen tool": {"it": "Contrasta strumento"}, + "Sharpen:": {"it": "Affilare:"}, + "Show / Hide": {"it": "Mostra nascondi"}, + "Simple": {"it": "Semplice"}, + "Size": {"it": "Dimensione"}, + "Size:": {"it": "Dimensione:"}, + "Sketchy": {"it": "Abbozzato"}, + "Solarize": {"it": "Solarizzare"}, + "Sorry": {"it": "Scusate"}, + "Sorry, image is too big, max 5 MB.": {"it": "Siamo spiacenti, l'immagine è troppo grande, max 5 mb."}, + "Source is empty, right click on image first.": {"it": "Source è vuoto, fate clic destro sull'immagine prima."}, + "Sprites": {"it": "Sprites"}, + "Square": {"it": "Piazza"}, + "Strength:": {"it": "Forza:"}, + "Strict": {"it": "Rigoroso"}, + "Stroke": {"it": "Ictus"}, + "Stroke size:": {"it": "Dimensioni corsa:"}, + "Target:": {"it": "Bersaglio:"}, + "Text": {"it": "Testo"}, + "Text:": {"it": "Testo:"}, + "The image could not be loaded.": {"it": "L'immagine non può essere caricato."}, + "This can not be last layer": {"it": "Questo non può essere ultimo strato"}, + "This can not be last layer.": {"it": "Questo non può essere ultimo strato."}, + "Tilt Shift": {"it": "Tilt shift"}, + "Times New Roman": {"it": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"it": "Per incollare dagli appunti, utilizzare ctrl-v."}, + "Tools": {"it": "Utensili"}, + "Top-left": {"it": "A sinistra in alto"}, + "Top-right": {"it": "In alto a destra"}, + "Total pixels:": {"it": "Pixel totali:"}, + "Translate error, can not find dictionary:": {"it": "Tradurre errore, non riesce a trovare dizionario:"}, + "Transparency #1:": {"it": "Trasparenza # 1:"}, + "Transparency #2:": {"it": "Trasparenza # 2:"}, + "Transparent:": {"it": "Trasparente:"}, + "Trim": {"it": "Tagliare"}, + "Trim:": {"it": "Trim:"}, + "Turkish": {"it": "Turco"}, + "Undo": {"it": "Disfare"}, + "Unique colors:": {"it": "Colori unici:"}, + "Up": {"it": "Su"}, + "V Radius:": {"it": "Raggio v:"}, + "Verdana": {"it": "Verdana"}, + "Vertical": {"it": "Verticale"}, + "Vertical gap:": {"it": "Gap verticale:"}, + "Vibrance": {"it": "Vibrance"}, + "Vignette": {"it": "Vignette"}, + "Vignette amount:": {"it": "Importo vignette:"}, + "Vignette size:": {"it": "Dimensioni vignette:"}, + "ViliusL": {"it": "Viliusl"}, + "Vintage": {"it": "Annata"}, + "Visible": {"it": "Visibile"}, + "Visible:": {"it": "Visibile:"}, + "WEBP - Weppy File Format": {"it": "Webp - formato di file weppy"}, + "Website": {"it": "Sito web"}, + "Width (%):": {"it": "Larghezza (%):"}, + "Width (pixels):": {"it": "Larghezza (pixel):"}, + "Width:": {"it": "Larghezza:"}, + "Wrong file type, must be image or json.": {"it": "Tipo di file sbagliato, deve essere immagine o json."}, + "X end:": {"it": "X fine:"}, + "X start:": {"it": "X inizio:"}, + "Y end:": {"it": "Fine y:"}, + "Y start:": {"it": "Y inizio:"}, + "Yes": {"it": "Sì"}, + "Your browser does not support this format.": {"it": "Il tuo browser non supporta questo formato."}, + "Your browser doesn't support canvas.": {"it": "Il tuo browser non supporta tela."}, + "Zoom": {"it": "Ingrandimento"}, + "Zoom In": {"it": "Ingrandire"}, + "Zoom Out": {"it": "Zoom indietro"}, + "Zoom in": {"it": "Ingrandire"}, + "Zoom out": {"it": "Zoom indietro"}, + "Zoom:": {"it": "Ingrandimento:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.xml new file mode 100644 index 00000000000..26c32e75187 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/it.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>it.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.js new file mode 100644 index 00000000000..35d23aa133a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.js @@ -0,0 +1,342 @@ +var dict_ja = { + "2d": {"ja": "図2d"}, + "3D position:": {"ja": "3d位置:"}, + "3D size:": {"ja": "3dサイズ:"}, + "480p": {"ja": "480p"}, + "About": {"ja": "約"}, + "Add new layer": {"ja": "新しいレイヤーを追加します。"}, + "Advanced": {"ja": "高度な"}, + "All": {"ja": "すべて"}, + "Alpha": {"ja": "アルファ"}, + "Alpha:": {"ja": "アルファ:"}, + "Amount:": {"ja": "量:"}, + "Anonymous": {"ja": "匿名の"}, + "Anti aliasing": {"ja": "アンチエイリアシング"}, + "Area:": {"ja": "エリア:"}, + "Arial": {"ja": "Arialの"}, + "Arrow": {"ja": "矢印"}, + "Arrow keys": {"ja": "矢印キー"}, + "Attributes": {"ja": "属性"}, + "Author:": {"ja": "著者:"}, + "Auto adjust colors": {"ja": "自動色を調整します"}, + "Auto colorize": {"ja": "自動色付け"}, + "Average:": {"ja": "平均:"}, + "BMP - Windows Bitmap": {"ja": "Bmp - windowsビットマップ"}, + "Basic": {"ja": "基本"}, + "BezierCurve": {"ja": "ベジェ曲線"}, + "Big grains level:": {"ja": "ビッグ粒レベル:"}, + "Black and White": {"ja": "白黒"}, + "Blend": {"ja": "ブレンド"}, + "Blend:": {"ja": "ブレンド:"}, + "Blue": {"ja": "青"}, + "Blue channel:": {"ja": "ブルーチャンネル:"}, + "Blur": {"ja": "ブラー"}, + "Blur Radius:": {"ja": "ぼかし半径:"}, + "Blur tool": {"ja": "ぼかしツール"}, + "Blur-Box": {"ja": "ぼかしボックス"}, + "Blur-Gaussian": {"ja": "ぼかし、ガウス"}, + "Blur-Stack": {"ja": "ブラースタック"}, + "Blur-Zoom": {"ja": "ぼかしズーム"}, + "Blur:": {"ja": "ぼかし:"}, + "Bold": {"ja": "大胆な"}, + "Bold Italic": {"ja": "太字イタリック"}, + "Borders": {"ja": "ボーダーズ"}, + "Both": {"ja": "どちらも"}, + "Bottom-left": {"ja": "左下"}, + "Bottom-right": {"ja": "右下"}, + "Brightness:": {"ja": "輝度:"}, + "Brush": {"ja": "みがきます"}, + "Bulge/Pinch": {"ja": "バルジ/ピンチ"}, + "Bulge/Pinch tool": {"ja": "バルジ/ピンチツール"}, + "Burn": {"ja": "燃やす"}, + "Burn/Dodge tool": {"ja": "バーン/覆い焼きツール"}, + "Cancel": {"ja": "キャンセル"}, + "Center x:": {"ja": "中央のx:"}, + "Center y:": {"ja": "センターy:"}, + "Center:": {"ja": "センター:"}, + "Channel:": {"ja": "チャネル:"}, + "Chrome": {"ja": "クロム"}, + "Circle": {"ja": "サークル"}, + "Clear": {"ja": "クリア"}, + "Clear selection": {"ja": "クリア選択"}, + "Clone tool": {"ja": "クローンツール"}, + "Color #1:": {"ja": "カラー#1:"}, + "Color #2:": {"ja": "カラー#2:"}, + "Color Zoom": {"ja": "カラーズーム"}, + "Color adjust:": {"ja": "カラー調整します:"}, + "Color corrections": {"ja": "色補正"}, + "Color to Alpha": {"ja": "アルファの色"}, + "Color to alpha": {"ja": "アルファの色"}, + "Color:": {"ja": "色:"}, + "Colorize": {"ja": "カラー化します"}, + "Colors:": {"ja": "色:"}, + "Composite": {"ja": "複合"}, + "Composition:": {"ja": "組成:"}, + "Contrast:": {"ja": "コントラスト:"}, + "Copy selection": {"ja": "コピー選択"}, + "Courier": {"ja": "クーリエ"}, + "Crop": {"ja": "作物"}, + "Crop Selection": {"ja": "作物の選択"}, + "Curve": {"ja": "曲線"}, + "Custom": {"ja": "カスタム"}, + "Cut selection": {"ja": "カット選択"}, + "Decrease color depth": {"ja": "色深度を減らします"}, + "Decrease colors": {"ja": "色を減少させます"}, + "Default": {"ja": "デフォルト"}, + "Del": {"ja": "デル"}, + "Delete": {"ja": "削除"}, + "Delete selection": {"ja": "選択範囲を削除"}, + "Denoise": {"ja": "ノイズ除去"}, + "Desaturate": {"ja": "彩度を減じます"}, + "Desaturation:": {"ja": "不飽和化:"}, + "Description:": {"ja": "説明:"}, + "Differences": {"ja": "違い"}, + "Differences Down": {"ja": "ダウン違い"}, + "Dither": {"ja": "ディザー"}, + "Dithering:": {"ja": "ディザリング:"}, + "Dot Screen": {"ja": "ドットスクリーン"}, + "Down": {"ja": "ダウン"}, + "Downloaded": {"ja": "ダウンロード"}, + "Draw circle": {"ja": "円を描きます"}, + "Draw letters": {"ja": "文字を描きます"}, + "Draw line": {"ja": "ドローライン"}, + "Draw rectangle": {"ja": "四角形を描画"}, + "Duplicate": {"ja": "複製"}, + "Duplicate layer": {"ja": "レイヤーの複製"}, + "Dusts level:": {"ja": "粉剤はレベル:"}, + "Edge": {"ja": "エッジ"}, + "Edit": {"ja": "編集"}, + "Effects": {"ja": "エフェクト"}, + "Email:": {"ja": "Eメール:"}, + "Emboss": {"ja": "エンボス"}, + "Empty data": {"ja": "空のデータ"}, + "English": {"ja": "英語"}, + "Enrich": {"ja": "強化します"}, + "Enter angle (0-360):": {"ja": "角度(0から360)を入力します。"}, + "Erase": {"ja": "消します"}, + "Error": {"ja": "エラー"}, + "Error:": {"ja": "エラー:"}, + "Español": {"ja": "スペイン語"}, + "Exponent:": {"ja": "指数:"}, + "Exposure level:": {"ja": "露出レベル:"}, + "Factor:": {"ja": "因子:"}, + "File": {"ja": "ファイル"}, + "File name:": {"ja": "ファイル名:"}, + "Fill": {"ja": "埋めます"}, + "Fill style:": {"ja": "スタイルを入力します。"}, + "Fit": {"ja": "フィット"}, + "Fit window": {"ja": "フィット窓"}, + "Flatten Image": {"ja": "画像をフラット化"}, + "Flip": {"ja": "フリップ"}, + "Font family:": {"ja": "フォントファミリー:"}, + "Font style:": {"ja": "フォントスタイル:"}, + "French": {"ja": "フランス語"}, + "Full HD, 1080p": {"ja": "フルhd、1080"}, + "Fur": {"ja": "毛皮"}, + "Gap:": {"ja": "ギャップ:"}, + "German": {"ja": "ドイツ人"}, + "GitHub:": {"ja": "Githubの:"}, + "Gradient": {"ja": "勾配"}, + "Gradient Radius:": {"ja": "グラデーションの半径:"}, + "Grains": {"ja": "穀類"}, + "Grains level:": {"ja": "穀物レベル:"}, + "Gray": {"ja": "グレー"}, + "GrayScale": {"ja": "グレースケール"}, + "Green": {"ja": "緑"}, + "Green channel:": {"ja": "グリーンチャンネル:"}, + "Greyscale:": {"ja": "グレースケール:"}, + "Grid": {"ja": "グリッド"}, + "Grid on/off": {"ja": "オン/オフグリッド"}, + "Grouped": {"ja": "グループ化されました"}, + "H Radius:": {"ja": "H半径:"}, + "Heatmap": {"ja": "ヒートマップ"}, + "Height (%):": {"ja": "高さ (%):"}, + "Height (pixels):": {"ja": "高さ(ピクセル):"}, + "Height:": {"ja": "高さ:"}, + "Help": {"ja": "助けて"}, + "Helvetica": {"ja": "ヘルベチカ"}, + "Hermite": {"ja": "エルミート"}, + "Histogram": {"ja": "ヒストグラム"}, + "Histogram:": {"ja": "ヒストグラム:"}, + "Horizontal": {"ja": "水平の"}, + "Horizontal gap:": {"ja": "水平方向のギャップ:"}, + "Hue:": {"ja": "フエ:"}, + "Image": {"ja": "画像"}, + "Impact": {"ja": "影響"}, + "Information": {"ja": "情報"}, + "Italiano": {"ja": "イタリアーノ"}, + "Italic": {"ja": "イタリック"}, + "JPG - JPG/JPEG Format": {"ja": "Jpg - jpg / jpeg形式"}, + "JPG Compression": {"ja": "Jpg圧縮"}, + "JSON - Full layers data": {"ja": "Json - フルレイヤーデータ"}, + "Japanese": {"ja": "日本語"}, + "Key-points": {"ja": "キーポイント"}, + "Keyboard Shortcuts": {"ja": "キーボードショートカット"}, + "Korean": {"ja": "韓国語"}, + "Language": {"ja": "言語"}, + "Last modified": {"ja": "最終更新日"}, + "Layer": {"ja": "層"}, + "Layers": {"ja": "層"}, + "Left": {"ja": "左"}, + "Level:": {"ja": "レベル:"}, + "Levels:": {"ja": "レベル:"}, + "Lietuvių": {"ja": "Lietuvių"}, + "Light leak:": {"ja": "光漏れ:"}, + "Limit:": {"ja": "リミット:"}, + "Luminance:": {"ja": "輝度:"}, + "Luminosity:": {"ja": "光度:"}, + "Magic Wand Tool": {"ja": "マジックワンドツール"}, + "Merge": {"ja": "マージ"}, + "Merge Down": {"ja": "ダウンマージ"}, + "Mode:": {"ja": "モード:"}, + "Mosaic": {"ja": "モザイク"}, + "Mouse:": {"ja": "マウス:"}, + "Move": {"ja": "移動"}, + "Move active layer": {"ja": "活性層を移動します"}, + "Move down": {"ja": "下に移動"}, + "Move up": {"ja": "上がります"}, + "Multi-line": {"ja": "マルチライン"}, + "Name:": {"ja": "名:"}, + "Negative": {"ja": "負"}, + "New": {"ja": "新しい"}, + "New file...": {"ja": "新規ファイル..."}, + "New layer": {"ja": "新しい層"}, + "No": {"ja": "いいえ"}, + "Normal": {"ja": "ノーマル"}, + "Notice": {"ja": "通知"}, + "Notice:": {"ja": "通知:"}, + "Oil": {"ja": "油"}, + "Ok": {"ja": "Ok"}, + "Online image editor": {"ja": "オンライン画像エディタ"}, + "Opacity": {"ja": "不透明度"}, + "Open": {"ja": "開いた"}, + "Original size": {"ja": "オリジナルサイズ"}, + "PNG - Portable Network Graphics": {"ja": "Png形式 - ポータブルネットワークグラフィックス"}, + "Paste": {"ja": "ペースト"}, + "Paste selection": {"ja": "貼り付け選択"}, + "Pencil": {"ja": "鉛筆"}, + "Perspective": {"ja": "視点"}, + "Pick Color": {"ja": "色を選択"}, + "Pixels:": {"ja": "画素数:"}, + "Portuguese": {"ja": "ポルトガル語"}, + "Power:": {"ja": "力:"}, + "Pre-Blur:": {"ja": "前ぼかし:"}, + "Preview": {"ja": "プレビュー"}, + "Print": {"ja": "印刷"}, + "Quality (jpeg):": {"ja": "品質(jpeg):"}, + "Quality:": {"ja": "品質:"}, + "Quick load": {"ja": "クイックロード"}, + "Quick save": {"ja": "クイックセーブ"}, + "Radial": {"ja": "ラジアル"}, + "Radius:": {"ja": "半径:"}, + "Range:": {"ja": "範囲:"}, + "Reason:": {"ja": "理由:"}, + "Recover alpha": {"ja": "アルファを回復"}, + "Red": {"ja": "赤"}, + "Red channel:": {"ja": "レッドチャンネル:"}, + "Rename": {"ja": "リネーム"}, + "Rename layer": {"ja": "層の名前を変更"}, + "Replace Color": {"ja": "色を交換してください"}, + "Replace color": {"ja": "色を交換してください"}, + "Replacement:": {"ja": "置換:"}, + "Resample - Hermite": {"ja": "リサンプル - エルミート"}, + "Reset zoom level": {"ja": "ズームレベルをリセット"}, + "Resize": {"ja": "リサイズ"}, + "Resolution:": {"ja": "解決:"}, + "Restore alpha": {"ja": "アルファを復元"}, + "Right": {"ja": "右"}, + "Rotate": {"ja": "ローテート"}, + "Rotate left": {"ja": "左を回転させます"}, + "Rotation": {"ja": "回転"}, + "Russian": {"ja": "ロシア"}, + "Saturation:": {"ja": "飽和:"}, + "Save": {"ja": "セーブ"}, + "Save as": {"ja": "名前を付けて保存"}, + "Save as type:": {"ja": "タイプとして保存:"}, + "Save layers:": {"ja": "レイヤを保存します。"}, + "Save resolution:": {"ja": "解像度を保存します。"}, + "Select all": {"ja": "すべて選択"}, + "Select area first": {"ja": "最初のエリアを選択"}, + "Select area tool": {"ja": "エリアツールを選択します"}, + "Select color": {"ja": "色を選択"}, + "Select object tool": {"ja": "オブジェクトツールを選択します"}, + "Selected": {"ja": "選択しました"}, + "Sensitivity:": {"ja": "感度:"}, + "Sepia": {"ja": "セピア"}, + "Shaded": {"ja": "影付きの"}, + "Shadow blur:": {"ja": "シャドウぼかし:"}, + "Shadow color:": {"ja": "影の色:"}, + "Shadow:": {"ja": "シャドウ:"}, + "Sharpen": {"ja": "研ぎます"}, + "Sharpen tool": {"ja": "ツールシャープ"}, + "Sharpen:": {"ja": "シャープ:"}, + "Show / Hide": {"ja": "表示/非表示"}, + "Simple": {"ja": "シンプル"}, + "Size": {"ja": "サイズ"}, + "Size:": {"ja": "サイズ:"}, + "Sketchy": {"ja": "大雑把"}, + "Solarize": {"ja": "太陽光線にさらします"}, + "Sorry": {"ja": "ごめんなさい"}, + "Sorry, image is too big, max 5 MB.": {"ja": "申し訳ありませんが、画像が大きすぎ、最大5メガバイトです。"}, + "Source is empty, right click on image first.": {"ja": "ソースが空で、右側の最初の画像をクリックしてください。"}, + "Sprites": {"ja": "スプライト"}, + "Square": {"ja": "平方"}, + "Strength:": {"ja": "力:"}, + "Strict": {"ja": "厳格な"}, + "Stroke": {"ja": "ストローク"}, + "Stroke size:": {"ja": "ストロークサイズ:"}, + "Target:": {"ja": "ターゲット:"}, + "Text": {"ja": "テキスト"}, + "Text:": {"ja": "テキスト:"}, + "The image could not be loaded.": {"ja": "イメージがロードできませんでした。"}, + "This can not be last layer": {"ja": "これが最後の層にすることはできません"}, + "This can not be last layer.": {"ja": "これが最後の層にすることはできません。"}, + "Tilt Shift": {"ja": "ティルトシフト"}, + "Times New Roman": {"ja": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"ja": "クリップボードから貼り付けるには、ctrl-vを使用します。"}, + "Tools": {"ja": "ツール"}, + "Top-left": {"ja": "左上"}, + "Top-right": {"ja": "右上"}, + "Total pixels:": {"ja": "総画素数:"}, + "Translate error, can not find dictionary:": {"ja": "エラーを翻訳、辞書を見つけることができません。"}, + "Transparency #1:": {"ja": "透明度#1:"}, + "Transparency #2:": {"ja": "透明性#2:"}, + "Transparent:": {"ja": "トランスペアレント:"}, + "Trim": {"ja": "トリム"}, + "Trim:": {"ja": "トリム:"}, + "Turkish": {"ja": "トルコ語"}, + "Undo": {"ja": "アンドゥ"}, + "Unique colors:": {"ja": "ユニークな色:"}, + "Up": {"ja": "アップ"}, + "V Radius:": {"ja": "V半径:"}, + "Verdana": {"ja": "Ms pゴシック"}, + "Vertical": {"ja": "垂直"}, + "Vertical gap:": {"ja": "垂直方向のギャップ:"}, + "Vibrance": {"ja": "自然な彩度"}, + "Vignette": {"ja": "寸描"}, + "Vignette amount:": {"ja": "ビネット量:"}, + "Vignette size:": {"ja": "ビネットサイズ:"}, + "ViliusL": {"ja": "Viliusl"}, + "Vintage": {"ja": "ビンテージ"}, + "Visible": {"ja": "目に見えます"}, + "Visible:": {"ja": "可視:"}, + "WEBP - Weppy File Format": {"ja": "Webp - weppyファイル形式"}, + "Website": {"ja": "ウェブサイト"}, + "Width (%):": {"ja": "幅(%):"}, + "Width (pixels):": {"ja": "幅(ピクセル):"}, + "Width:": {"ja": "幅:"}, + "Wrong file type, must be image or json.": {"ja": "間違ったファイルの種類、画像またはjsonでなければなりません。"}, + "X end:": {"ja": "Xのエンド:"}, + "X start:": {"ja": "Xが起動します。"}, + "Y end:": {"ja": "Y端:"}, + "Y start:": {"ja": "Y開始:"}, + "Yes": {"ja": "はい"}, + "Your browser does not support this format.": {"ja": "あなたのブラウザはこの形式をサポートしていません。"}, + "Your browser doesn't support canvas.": {"ja": "お使いのブラウザはキャンバスをサポートしていません。"}, + "Zoom": {"ja": "ズーム"}, + "Zoom In": {"ja": "ズームイン"}, + "Zoom Out": {"ja": "ズームアウトする"}, + "Zoom in": {"ja": "ズームイン"}, + "Zoom out": {"ja": "ズームアウトする"}, + "Zoom:": {"ja": "ズーム:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.xml new file mode 100644 index 00000000000..309633867a1 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ja.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>ja.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.js new file mode 100644 index 00000000000..2bc1ebd1cd4 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.js @@ -0,0 +1,342 @@ +var dict_ko = { + "2d": {"ko": "2 차원"}, + "3D position:": {"ko": "3 차원 위치 :"}, + "3D size:": {"ko": "3 차원 크기 :"}, + "480p": {"ko": "480p"}, + "About": {"ko": "약"}, + "Add new layer": {"ko": "새 레이어를 추가"}, + "Advanced": {"ko": "많은"}, + "All": {"ko": "모든"}, + "Alpha": {"ko": "알파"}, + "Alpha:": {"ko": "알파 :"}, + "Amount:": {"ko": "양:"}, + "Anonymous": {"ko": "익명"}, + "Anti aliasing": {"ko": "안티 앨리어싱"}, + "Area:": {"ko": "지역:"}, + "Arial": {"ko": "굴림"}, + "Arrow": {"ko": "화살"}, + "Arrow keys": {"ko": "화살표 키"}, + "Attributes": {"ko": "속성"}, + "Author:": {"ko": "저자:"}, + "Auto adjust colors": {"ko": "자동 색상 조정"}, + "Auto colorize": {"ko": "자동 색상 화"}, + "Average:": {"ko": "평균:"}, + "BMP - Windows Bitmap": {"ko": "Bmp - 윈도우 비트 맵"}, + "Basic": {"ko": "기본"}, + "BezierCurve": {"ko": "베지에 곡선"}, + "Big grains level:": {"ko": "큰 입자 수준 :"}, + "Black and White": {"ko": "검정색과 흰색"}, + "Blend": {"ko": "혼합"}, + "Blend:": {"ko": "혼합:"}, + "Blue": {"ko": "푸른"}, + "Blue channel:": {"ko": "블루 채널 :"}, + "Blur": {"ko": "흐림"}, + "Blur Radius:": {"ko": "흐림 반경 :"}, + "Blur tool": {"ko": "흐림 도구"}, + "Blur-Box": {"ko": "흐림 박스"}, + "Blur-Gaussian": {"ko": "블러 - 가우스"}, + "Blur-Stack": {"ko": "흐림 스택"}, + "Blur-Zoom": {"ko": "흐림 줌"}, + "Blur:": {"ko": "흐림:"}, + "Bold": {"ko": "대담한"}, + "Bold Italic": {"ko": "굵은 기울임 꼴"}, + "Borders": {"ko": "테두리"}, + "Both": {"ko": "양자 모두"}, + "Bottom-left": {"ko": "왼쪽 아래"}, + "Bottom-right": {"ko": "오른쪽 아래"}, + "Brightness:": {"ko": "명도:"}, + "Brush": {"ko": "붓"}, + "Bulge/Pinch": {"ko": "벌지 / 핀치"}, + "Bulge/Pinch tool": {"ko": "벌지 / 핀치 도구"}, + "Burn": {"ko": "화상"}, + "Burn/Dodge tool": {"ko": "/ 닷지 도구를 굽기"}, + "Cancel": {"ko": "취소하다"}, + "Center x:": {"ko": "센터 x :"}, + "Center y:": {"ko": "센터 y :"}, + "Center:": {"ko": "센터:"}, + "Channel:": {"ko": "채널:"}, + "Chrome": {"ko": "크롬"}, + "Circle": {"ko": "원"}, + "Clear": {"ko": "명확한"}, + "Clear selection": {"ko": "지우기 선택"}, + "Clone tool": {"ko": "복제 도구"}, + "Color #1:": {"ko": "색상 # 1 :"}, + "Color #2:": {"ko": "색상 # 2 :"}, + "Color Zoom": {"ko": "색상 줌"}, + "Color adjust:": {"ko": "색상 조정 :"}, + "Color corrections": {"ko": "색상 보정"}, + "Color to Alpha": {"ko": "알파에 색상"}, + "Color to alpha": {"ko": "알파에 색상"}, + "Color:": {"ko": "색:"}, + "Colorize": {"ko": "색상 화"}, + "Colors:": {"ko": "그림 물감:"}, + "Composite": {"ko": "합성물"}, + "Composition:": {"ko": "구성:"}, + "Contrast:": {"ko": "대조:"}, + "Copy selection": {"ko": "복사 선택"}, + "Courier": {"ko": "급사"}, + "Crop": {"ko": "수확고"}, + "Crop Selection": {"ko": "작물 선택"}, + "Curve": {"ko": "곡선"}, + "Custom": {"ko": "관습"}, + "Cut selection": {"ko": "컷 선택"}, + "Decrease color depth": {"ko": "색 농도를 감소"}, + "Decrease colors": {"ko": "감소 색상"}, + "Default": {"ko": "태만"}, + "Del": {"ko": "델"}, + "Delete": {"ko": "지우다"}, + "Delete selection": {"ko": "선택 삭제"}, + "Denoise": {"ko": "노이즈 제거"}, + "Desaturate": {"ko": "채도"}, + "Desaturation:": {"ko": "불포화 :"}, + "Description:": {"ko": "기술:"}, + "Differences": {"ko": "차이점"}, + "Differences Down": {"ko": "아래의 차이점"}, + "Dither": {"ko": "떨림"}, + "Dithering:": {"ko": "디더링 :"}, + "Dot Screen": {"ko": "도트 화면"}, + "Down": {"ko": "하위"}, + "Downloaded": {"ko": "다운로드"}, + "Draw circle": {"ko": "원 그리기"}, + "Draw letters": {"ko": "편지를 그리기"}, + "Draw line": {"ko": "그리기 라인"}, + "Draw rectangle": {"ko": "사각형을 그립니다"}, + "Duplicate": {"ko": "복제"}, + "Duplicate layer": {"ko": "중복 층"}, + "Dusts level:": {"ko": "먼지는 수준 :"}, + "Edge": {"ko": "가장자리"}, + "Edit": {"ko": "편집하다"}, + "Effects": {"ko": "효과"}, + "Email:": {"ko": "이메일:"}, + "Emboss": {"ko": "엠 보스"}, + "Empty data": {"ko": "빈 데이터"}, + "English": {"ko": "영어"}, + "Enrich": {"ko": "높이다"}, + "Enter angle (0-360):": {"ko": "각도 (0-360)를 입력합니다 :"}, + "Erase": {"ko": "삭제"}, + "Error": {"ko": "오류"}, + "Error:": {"ko": "오류:"}, + "Español": {"ko": "스페인어"}, + "Exponent:": {"ko": "멱지수:"}, + "Exposure level:": {"ko": "노출 수준 :"}, + "Factor:": {"ko": "인자:"}, + "File": {"ko": "파일"}, + "File name:": {"ko": "파일 이름:"}, + "Fill": {"ko": "가득 따르다"}, + "Fill style:": {"ko": "스타일 채우기 :"}, + "Fit": {"ko": "적당한"}, + "Fit window": {"ko": "맞춤 창"}, + "Flatten Image": {"ko": "이미지를 평평"}, + "Flip": {"ko": "튀기다"}, + "Font family:": {"ko": "글꼴 가족 :"}, + "Font style:": {"ko": "글꼴 스타일 :"}, + "French": {"ko": "프랑스 국민"}, + "Full HD, 1080p": {"ko": "풀 hd 1080p의"}, + "Fur": {"ko": "모피"}, + "Gap:": {"ko": "갭:"}, + "German": {"ko": "독일 사람"}, + "GitHub:": {"ko": "Github의 :"}, + "Gradient": {"ko": "구배"}, + "Gradient Radius:": {"ko": "그라데이션 반경 :"}, + "Grains": {"ko": "작살"}, + "Grains level:": {"ko": "곡물은 레벨 :"}, + "Gray": {"ko": "회색"}, + "GrayScale": {"ko": "그레이 스케일"}, + "Green": {"ko": "녹색"}, + "Green channel:": {"ko": "녹색 통로:"}, + "Greyscale:": {"ko": "그레이 스케일 :"}, + "Grid": {"ko": "그리드"}, + "Grid on/off": {"ko": "온 / 오프 그리드"}, + "Grouped": {"ko": "그룹화"}, + "H Radius:": {"ko": "H 반경 :"}, + "Heatmap": {"ko": "히트 맵"}, + "Height (%):": {"ko": "신장 (%) :"}, + "Height (pixels):": {"ko": "높이 (픽셀) :"}, + "Height:": {"ko": "신장:"}, + "Help": {"ko": "도움"}, + "Helvetica": {"ko": "헬 베티"}, + "Hermite": {"ko": "에르 미트"}, + "Histogram": {"ko": "히스토그램"}, + "Histogram:": {"ko": "히스토그램 :"}, + "Horizontal": {"ko": "수평"}, + "Horizontal gap:": {"ko": "수평 방향의 간격 :"}, + "Hue:": {"ko": "색조:"}, + "Image": {"ko": "영상"}, + "Impact": {"ko": "충격"}, + "Information": {"ko": "정보"}, + "Italiano": {"ko": "이탈리아어"}, + "Italic": {"ko": "이탤릭체"}, + "JPG - JPG/JPEG Format": {"ko": "도트 jpg - jpg / jpeg 형식"}, + "JPG Compression": {"ko": "도트 jpg 압축"}, + "JSON - Full layers data": {"ko": "Json - 전체 계층 데이터"}, + "Japanese": {"ko": "일본어"}, + "Key-points": {"ko": "키 포인트"}, + "Keyboard Shortcuts": {"ko": "키보드 바로 가기"}, + "Korean": {"ko": "한국어"}, + "Language": {"ko": "언어"}, + "Last modified": {"ko": "마지막으로 수정"}, + "Layer": {"ko": "층"}, + "Layers": {"ko": "레이어"}, + "Left": {"ko": "왼쪽"}, + "Level:": {"ko": "수평:"}, + "Levels:": {"ko": "레벨 :"}, + "Lietuvių": {"ko": "Lietuvių"}, + "Light leak:": {"ko": "빛 누출 :"}, + "Limit:": {"ko": "한도:"}, + "Luminance:": {"ko": "휘도 :"}, + "Luminosity:": {"ko": "밝기:"}, + "Magic Wand Tool": {"ko": "마법 지팡이 도구"}, + "Merge": {"ko": "병합"}, + "Merge Down": {"ko": "아래로 병합"}, + "Mode:": {"ko": "방법:"}, + "Mosaic": {"ko": "모자이크"}, + "Mouse:": {"ko": "쥐:"}, + "Move": {"ko": "움직임"}, + "Move active layer": {"ko": "활성층 이동"}, + "Move down": {"ko": "아래로 이동"}, + "Move up": {"ko": "위로 이동"}, + "Multi-line": {"ko": "멀티 라인"}, + "Name:": {"ko": "이름:"}, + "Negative": {"ko": "부정"}, + "New": {"ko": "새로운"}, + "New file...": {"ko": "새 파일 ..."}, + "New layer": {"ko": "새 레이어"}, + "No": {"ko": "아니"}, + "Normal": {"ko": "표준"}, + "Notice": {"ko": "주의"}, + "Notice:": {"ko": "주의:"}, + "Oil": {"ko": "기름"}, + "Ok": {"ko": "승인"}, + "Online image editor": {"ko": "온라인 이미지 편집기"}, + "Opacity": {"ko": "불투명"}, + "Open": {"ko": "열다"}, + "Original size": {"ko": "원본 크기"}, + "PNG - Portable Network Graphics": {"ko": "Png - 휴대용 네트워크 그래픽"}, + "Paste": {"ko": "풀"}, + "Paste selection": {"ko": "붙여 넣기 선택"}, + "Pencil": {"ko": "연필"}, + "Perspective": {"ko": "원근법"}, + "Pick Color": {"ko": "색상을 선택"}, + "Pixels:": {"ko": "픽셀 :"}, + "Portuguese": {"ko": "포르투갈 인"}, + "Power:": {"ko": "힘:"}, + "Pre-Blur:": {"ko": "사전 흐림 :"}, + "Preview": {"ko": "시사"}, + "Print": {"ko": "인쇄"}, + "Quality (jpeg):": {"ko": "품질 (jpeg) :"}, + "Quality:": {"ko": "품질:"}, + "Quick load": {"ko": "빠른로드"}, + "Quick save": {"ko": "저장 빠른"}, + "Radial": {"ko": "레이디 얼"}, + "Radius:": {"ko": "반지름:"}, + "Range:": {"ko": "범위:"}, + "Reason:": {"ko": "이유:"}, + "Recover alpha": {"ko": "알파 복구"}, + "Red": {"ko": "빨간"}, + "Red channel:": {"ko": "적색 통로:"}, + "Rename": {"ko": "이름 바꾸기"}, + "Rename layer": {"ko": "레이어의 이름을 바꿉니다"}, + "Replace Color": {"ko": "색상을 교체"}, + "Replace color": {"ko": "색상을 교체"}, + "Replacement:": {"ko": "바꿔 놓음:"}, + "Resample - Hermite": {"ko": "리 샘플 - 에르 미트"}, + "Reset zoom level": {"ko": "리셋 줌 레벨"}, + "Resize": {"ko": "크기 조정"}, + "Resolution:": {"ko": "해결:"}, + "Restore alpha": {"ko": "알파 복원"}, + "Right": {"ko": "권리"}, + "Rotate": {"ko": "회전"}, + "Rotate left": {"ko": "왼쪽으로 회전"}, + "Rotation": {"ko": "회전"}, + "Russian": {"ko": "러시아인"}, + "Saturation:": {"ko": "포화:"}, + "Save": {"ko": "구하다"}, + "Save as": {"ko": "다른 이름으로 저장"}, + "Save as type:": {"ko": "형식으로 저장 :"}, + "Save layers:": {"ko": "레이어를 저장 :"}, + "Save resolution:": {"ko": "해상도를 저장 :"}, + "Select all": {"ko": "모든 선택"}, + "Select area first": {"ko": "선택 영역 처음"}, + "Select area tool": {"ko": "선택 영역 도구"}, + "Select color": {"ko": "색상을 선택"}, + "Select object tool": {"ko": "개체 선택 도구"}, + "Selected": {"ko": "선택된"}, + "Sensitivity:": {"ko": "감광도:"}, + "Sepia": {"ko": "세피아"}, + "Shaded": {"ko": "음영"}, + "Shadow blur:": {"ko": "그림자 흐림 :"}, + "Shadow color:": {"ko": "그림자 색상 :"}, + "Shadow:": {"ko": "그림자:"}, + "Sharpen": {"ko": "갈다"}, + "Sharpen tool": {"ko": "도구를 선명하게"}, + "Sharpen:": {"ko": "갈다:"}, + "Show / Hide": {"ko": "표시 / 숨기기"}, + "Simple": {"ko": "단순한"}, + "Size": {"ko": "크기"}, + "Size:": {"ko": "크기:"}, + "Sketchy": {"ko": "스케치의"}, + "Solarize": {"ko": "지나치게 노출되다"}, + "Sorry": {"ko": "죄송합니다"}, + "Sorry, image is too big, max 5 MB.": {"ko": "죄송합니다, 이미지가 너무 큰, 최대 5메가바이트입니다."}, + "Source is empty, right click on image first.": {"ko": "소스가 비어있는 오른쪽 첫 번째 이미지를 클릭하십시오."}, + "Sprites": {"ko": "스프라이트"}, + "Square": {"ko": "광장"}, + "Strength:": {"ko": "힘:"}, + "Strict": {"ko": "엄격한"}, + "Stroke": {"ko": "행정"}, + "Stroke size:": {"ko": "스트로크의 크기 :"}, + "Target:": {"ko": "목표:"}, + "Text": {"ko": "본문"}, + "Text:": {"ko": "본문:"}, + "The image could not be loaded.": {"ko": "이미지를로드 할 수 없습니다."}, + "This can not be last layer": {"ko": "이 마지막 층이 될 수 없습니다"}, + "This can not be last layer.": {"ko": "이 마지막 층이 될 수 없습니다."}, + "Tilt Shift": {"ko": "틸트 시프트"}, + "Times New Roman": {"ko": "타임즈 새로운 로마"}, + "To paste from clipboard, use Ctrl-V.": {"ko": "클립 보드에서 붙여 넣으려면 ctrl 키-v를 사용합니다."}, + "Tools": {"ko": "도구"}, + "Top-left": {"ko": "왼쪽 위"}, + "Top-right": {"ko": "오른쪽 상단"}, + "Total pixels:": {"ko": "총 픽셀 :"}, + "Translate error, can not find dictionary:": {"ko": "사전을 찾을 수 없습니다, 오류를 번역 :"}, + "Transparency #1:": {"ko": "투명 # 1 :"}, + "Transparency #2:": {"ko": "투명 # 2 :"}, + "Transparent:": {"ko": "투명한:"}, + "Trim": {"ko": "손질"}, + "Trim:": {"ko": "손질:"}, + "Turkish": {"ko": "터키의"}, + "Undo": {"ko": "끄르다"}, + "Unique colors:": {"ko": "고유 색상 :"}, + "Up": {"ko": "쪽으로"}, + "V Radius:": {"ko": "V 반경 :"}, + "Verdana": {"ko": "굴림"}, + "Vertical": {"ko": "수직선"}, + "Vertical gap:": {"ko": "수직 방향의 간격 :"}, + "Vibrance": {"ko": "활기"}, + "Vignette": {"ko": "삽화"}, + "Vignette amount:": {"ko": "네트 금액 :"}, + "Vignette size:": {"ko": "네트의 크기 :"}, + "ViliusL": {"ko": "Viliusl"}, + "Vintage": {"ko": "포도 수확"}, + "Visible": {"ko": "명백한"}, + "Visible:": {"ko": "명백한:"}, + "WEBP - Weppy File Format": {"ko": "Webp 형식 - weppy 파일 형식"}, + "Website": {"ko": "웹 사이트"}, + "Width (%):": {"ko": "폭 (%) :"}, + "Width (pixels):": {"ko": "폭 (픽셀) :"}, + "Width:": {"ko": "폭:"}, + "Wrong file type, must be image or json.": {"ko": "잘못된 파일 형식, 이미지 또는 json해야합니다."}, + "X end:": {"ko": "X의 말 :"}, + "X start:": {"ko": "X 시작 :"}, + "Y end:": {"ko": "Y 끝 :"}, + "Y start:": {"ko": "Y 시작 :"}, + "Yes": {"ko": "예"}, + "Your browser does not support this format.": {"ko": "브라우저가이 형식을 지원하지 않습니다."}, + "Your browser doesn't support canvas.": {"ko": "브라우저가 캔버스를 지원하지 않습니다."}, + "Zoom": {"ko": "줌"}, + "Zoom In": {"ko": "확대"}, + "Zoom Out": {"ko": "축소"}, + "Zoom in": {"ko": "확대"}, + "Zoom out": {"ko": "축소"}, + "Zoom:": {"ko": "줌:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.xml new file mode 100644 index 00000000000..f854814ceed --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ko.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>ko.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.js new file mode 100644 index 00000000000..66f9262c97a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.js @@ -0,0 +1,342 @@ +var dict_lt = { + "2d": {"lt": "2d"}, + "3D position:": {"lt": "3d vieta:"}, + "3D size:": {"lt": "3d dydis:"}, + "480p": {"lt": "480p"}, + "About": {"lt": "Apie"}, + "Add new layer": {"lt": "Įdėti naują sluoksnį"}, + "Advanced": {"lt": "Pažangus"}, + "All": {"lt": "Visi"}, + "Alpha": {"lt": "Alfa"}, + "Alpha:": {"lt": "Alfa:"}, + "Amount:": {"lt": "Kiekis:"}, + "Anonymous": {"lt": "Anoniminis"}, + "Anti aliasing": {"lt": "Sulieti"}, + "Area:": {"lt": "Plotas:"}, + "Arial": {"lt": "Arial"}, + "Arrow": {"lt": "Rodyklė"}, + "Arrow keys": {"lt": "Rodyklių klavišai"}, + "Attributes": {"lt": "Atributai"}, + "Author:": {"lt": "Autorius:"}, + "Auto adjust colors": {"lt": "Sureguliuoti spalvas"}, + "Auto colorize": {"lt": "Auto dažymas"}, + "Average:": {"lt": "Vidurkis:"}, + "BMP - Windows Bitmap": {"lt": "BMP - Windows Bitmap"}, + "Basic": {"lt": "Paprastas"}, + "BezierCurve": {"lt": "Bezjė kreivė"}, + "Big grains level:": {"lt": "Didelis grūdėtumo lygis:"}, + "Black and White": {"lt": "Juoda ir balta"}, + "Blend": {"lt": "Mišinys"}, + "Blend:": {"lt": "Mišinys:"}, + "Blue": {"lt": "Mėlynas"}, + "Blue channel:": {"lt": "Mėlyna kanalas:"}, + "Blur": {"lt": "Migla"}, + "Blur Radius:": {"lt": "Migla spindulys:"}, + "Blur tool": {"lt": "Migla įrankis"}, + "Blur-Box": {"lt": "Migla dėžė"}, + "Blur-Gaussian": {"lt": "Migla gauso"}, + "Blur-Stack": {"lt": "Migla stack"}, + "Blur-Zoom": {"lt": "Migla stekas"}, + "Blur:": {"lt": "Migla:"}, + "Bold": {"lt": "Drąsus"}, + "Bold Italic": {"lt": "Bold italic"}, + "Borders": {"lt": "Ribojasi"}, + "Both": {"lt": "Abu"}, + "Bottom-left": {"lt": "Apatiniame kairiajame"}, + "Bottom-right": {"lt": "Apačioje dešinėje"}, + "Brightness:": {"lt": "Ryškumas:"}, + "Brush": {"lt": "Šepetys"}, + "Bulge/Pinch": {"lt": "Bumbulas/Žiupsnelis"}, + "Bulge/Pinch tool": {"lt": "Bumbulas/Žiupsnelis"}, + "Burn": {"lt": "Deginti"}, + "Burn/Dodge tool": {"lt": "Burn / dodge nuorodą"}, + "Cancel": {"lt": "Atšaukti"}, + "Center x:": {"lt": "Centras x:"}, + "Center y:": {"lt": "Centras y:"}, + "Center:": {"lt": "Centras:"}, + "Channel:": {"lt": "Kanalas:"}, + "Chrome": {"lt": "Chromas"}, + "Circle": {"lt": "Ratas"}, + "Clear": {"lt": "Išvalyti"}, + "Clear selection": {"lt": "Išvalyti žymėjimą"}, + "Clone tool": {"lt": "Klonas įrankis"}, + "Color #1:": {"lt": "Spalva # 1:"}, + "Color #2:": {"lt": "Spalva # 2:"}, + "Color Zoom": {"lt": "Spalvų priartinimas"}, + "Color adjust:": {"lt": "Spalva reguliuoti:"}, + "Color corrections": {"lt": "Spalvų korekcijos"}, + "Color to Alpha": {"lt": "Spalva alfa"}, + "Color to alpha": {"lt": "Spalva alfa"}, + "Color:": {"lt": "Spalva:"}, + "Colorize": {"lt": "Dažymas"}, + "Colors:": {"lt": "Spalvos:"}, + "Composite": {"lt": "Sudėtinis"}, + "Composition:": {"lt": "Sudėtis:"}, + "Contrast:": {"lt": "Kontrastas:"}, + "Copy selection": {"lt": "Kopijuoti pasirinkimas"}, + "Courier": {"lt": "Kurjeris"}, + "Crop": {"lt": "Iškirpti"}, + "Crop Selection": {"lt": "Iškirpti parinkimą"}, + "Curve": {"lt": "Kreivė"}, + "Custom": {"lt": "Kitas"}, + "Cut selection": {"lt": "Iškirpti pasirinkimas"}, + "Decrease color depth": {"lt": "Sumažinti spalvų gylį"}, + "Decrease colors": {"lt": "Sumažinti spalvos"}, + "Default": {"lt": "Numatytas"}, + "Del": {"lt": "Del"}, + "Delete": {"lt": "Panaikinti"}, + "Delete selection": {"lt": "Ištrinti pasirinkimą"}, + "Denoise": {"lt": "Sumažinti triukšmą"}, + "Desaturate": {"lt": "Sumažinti ryškumą"}, + "Desaturation:": {"lt": "Sumažėjimas ryškumo:"}, + "Description:": {"lt": "Aprašymas:"}, + "Differences": {"lt": "Skirtumai"}, + "Differences Down": {"lt": "Skirtumai žemyn"}, + "Dither": {"lt": "Papildymas"}, + "Dithering:": {"lt": "Papildymu:"}, + "Dot Screen": {"lt": "Taškų ekranas"}, + "Down": {"lt": "žemyn"}, + "Downloaded": {"lt": "Siuntėsi"}, + "Draw circle": {"lt": "Piešti apskritimą"}, + "Draw letters": {"lt": "Piešti raides"}, + "Draw line": {"lt": "Piešti liniją"}, + "Draw rectangle": {"lt": "Piešti stačiakampį"}, + "Duplicate": {"lt": "Dauginti"}, + "Duplicate layer": {"lt": "Duplicate layer"}, + "Dusts level:": {"lt": "Dulkių lygis:"}, + "Edge": {"lt": "Kraštas"}, + "Edit": {"lt": "Redaguoti"}, + "Effects": {"lt": "Efektai"}, + "Email:": {"lt": "El. paštas:"}, + "Emboss": {"lt": "Įspausti"}, + "Empty data": {"lt": "Tušti duomenys"}, + "English": {"lt": "Anglų"}, + "Enrich": {"lt": "Praturtinti"}, + "Enter angle (0-360):": {"lt": "įveskite kampą (0-360):"}, + "Erase": {"lt": "Ištrinti"}, + "Error": {"lt": "Klaida"}, + "Error:": {"lt": "Klaida:"}, + "Español": {"lt": "Ispanų"}, + "Exponent:": {"lt": "Eksponentė:"}, + "Exposure level:": {"lt": "Ekspozicijos lygis:"}, + "Factor:": {"lt": "Veiksnys:"}, + "File": {"lt": "Byla"}, + "File name:": {"lt": "Failo pavadinimas:"}, + "Fill": {"lt": "Pildyti"}, + "Fill style:": {"lt": "Užpildykite stilius:"}, + "Fit": {"lt": "Talpinti"}, + "Fit window": {"lt": "Talpinti į langą"}, + "Flatten Image": {"lt": "Priploti vaizdą"}, + "Flip": {"lt": "Apversti"}, + "Font family:": {"lt": "Šrifto šeima:"}, + "Font style:": {"lt": "Šrifto stilius:"}, + "French": {"lt": "Prancūzų kalba"}, + "Full HD, 1080p": {"lt": "Full HD, 1080p"}, + "Fur": {"lt": "Kailis"}, + "Gap:": {"lt": "Atotrūkis:"}, + "German": {"lt": "Vokiečių"}, + "GitHub:": {"lt": "Github:"}, + "Gradient": {"lt": "Gradientas"}, + "Gradient Radius:": {"lt": "Gradientas spindulys:"}, + "Grains": {"lt": "Grūdėtumas"}, + "Grains level:": {"lt": "Grūdėtumo lygis:"}, + "Gray": {"lt": "Pilkas"}, + "GrayScale": {"lt": "Pilkai"}, + "Green": {"lt": "Žalias"}, + "Green channel:": {"lt": "Žalias kanalas:"}, + "Greyscale:": {"lt": "Pilkieji pustoniai:"}, + "Grid": {"lt": "Tinklelis"}, + "Grid on/off": {"lt": "Tinklelis"}, + "Grouped": {"lt": "Grupuoti"}, + "H Radius:": {"lt": "H spindulys:"}, + "Heatmap": {"lt": "Spalvinė diagrama"}, + "Height (%):": {"lt": "Aukštis (%):"}, + "Height (pixels):": {"lt": "Aukštis (pikselių):"}, + "Height:": {"lt": "Aukštis:"}, + "Help": {"lt": "Pagalba"}, + "Helvetica": {"lt": "Helvetica"}, + "Hermite": {"lt": "Hermite"}, + "Histogram": {"lt": "Histograma"}, + "Histogram:": {"lt": "Histograma:"}, + "Horizontal": {"lt": "Horizontalus"}, + "Horizontal gap:": {"lt": "Horizontalus tarpas:"}, + "Hue:": {"lt": "Atspalvis:"}, + "Image": {"lt": "Vaizdas"}, + "Impact": {"lt": "Poveikis"}, + "Information": {"lt": "Informacija"}, + "Italiano": {"lt": "Italų"}, + "Italic": {"lt": "Kursyvinis"}, + "JPG - JPG/JPEG Format": {"lt": "JPG - JPG/JPEG formatas"}, + "JPG Compression": {"lt": "JPG suspaudimo"}, + "JSON - Full layers data": {"lt": "JSON - sluoksnių duomenys"}, + "Japanese": {"lt": "Japonijos"}, + "Key-points": {"lt": "Pagrindiniai taškai"}, + "Keyboard Shortcuts": {"lt": "Klaviatūros nuorodos"}, + "Korean": {"lt": "Korėjiečių"}, + "Language": {"lt": "Kalba"}, + "Last modified": {"lt": "Paskutinį kartą keistas"}, + "Layer": {"lt": "Sluoksnis"}, + "Layers": {"lt": "Sluoksniai"}, + "Left": {"lt": "Į kairę"}, + "Level:": {"lt": "Lygis:"}, + "Levels:": {"lt": "Lygiais:"}, + "Lietuvių": {"lt": "Lietuvių"}, + "Light leak:": {"lt": "šviesos nuotėkio:"}, + "Limit:": {"lt": "Riba:"}, + "Luminance:": {"lt": "Skaisčio:"}, + "Luminosity:": {"lt": "Ryškumas:"}, + "Magic Wand Tool": {"lt": "Stebuklinga lazdelė"}, + "Merge": {"lt": "Susijungti"}, + "Merge Down": {"lt": "Sujungti žemyn"}, + "Mode:": {"lt": "Režimas:"}, + "Mosaic": {"lt": "Mozaika"}, + "Mouse:": {"lt": "Pelė:"}, + "Move": {"lt": "Judėti"}, + "Move active layer": {"lt": "Perkelti aktyvų sluoksnį"}, + "Move down": {"lt": "Judėti žemyn"}, + "Move up": {"lt": "Perkelti"}, + "Multi-line": {"lt": "Kelių eilučių"}, + "Name:": {"lt": "Vardas:"}, + "Negative": {"lt": "Neigiamas"}, + "New": {"lt": "Naujas"}, + "New file...": {"lt": "Naujas failas ..."}, + "New layer": {"lt": "Nauja sluoksnis"}, + "No": {"lt": "Ne"}, + "Normal": {"lt": "Normalus"}, + "Notice": {"lt": "Pastebėti"}, + "Notice:": {"lt": "Pastebėti:"}, + "Oil": {"lt": "Aliejus"}, + "Ok": {"lt": "Gerai"}, + "Online image editor": {"lt": "Prisijungę grafinis redaktorius"}, + "Opacity": {"lt": "Nepermatomumas"}, + "Open": {"lt": "Atidaryti"}, + "Original size": {"lt": "Originalus dydis"}, + "PNG - Portable Network Graphics": {"lt": "PNG - portable network graphics"}, + "Paste": {"lt": "Įkelti"}, + "Paste selection": {"lt": "Nukopijuokite pasirinkimas"}, + "Pencil": {"lt": "Pieštukas"}, + "Perspective": {"lt": "Perspektyva"}, + "Pick Color": {"lt": "Pasirinkite spalvą"}, + "Pixels:": {"lt": "Taškai:"}, + "Portuguese": {"lt": "Portugalų"}, + "Power:": {"lt": "Galia:"}, + "Pre-Blur:": {"lt": "Migla:"}, + "Preview": {"lt": "Peržiūrėti"}, + "Print": {"lt": "Spausdinti"}, + "Quality (jpeg):": {"lt": "Kokybė (jpeg):"}, + "Quality:": {"lt": "Kokybė:"}, + "Quick load": {"lt": "Greitas įkrovimas"}, + "Quick save": {"lt": "Greitas išsaugojimas"}, + "Radial": {"lt": "Radialinis"}, + "Radius:": {"lt": "Spindulys:"}, + "Range:": {"lt": "Kategorijos:"}, + "Reason:": {"lt": "Priežastis:"}, + "Recover alpha": {"lt": "Atkurti permatomumą"}, + "Red": {"lt": "Raudonas"}, + "Red channel:": {"lt": "Raudonasis kanalas:"}, + "Rename": {"lt": "Pervadinti"}, + "Rename layer": {"lt": "Pervadinti sluoksnį"}, + "Replace Color": {"lt": "Pakeiskite spalvą"}, + "Replace color": {"lt": "Pakeiskite spalvą"}, + "Replacement:": {"lt": "Pakeitimas:"}, + "Resample - Hermite": {"lt": "Resample - hermite"}, + "Reset zoom level": {"lt": "Atstatyti mastelį"}, + "Resize": {"lt": "Keisti dydį"}, + "Resolution:": {"lt": "Rezoliucija:"}, + "Restore alpha": {"lt": "Atkurti alfa"}, + "Right": {"lt": "Dešinė"}, + "Rotate": {"lt": "Sukti"}, + "Rotate left": {"lt": "Pasukti į kairę"}, + "Rotation": {"lt": "Rotacija"}, + "Russian": {"lt": "Rusijos"}, + "Saturation:": {"lt": "Spalvingumas:"}, + "Save": {"lt": "Išsaugoti"}, + "Save as": {"lt": "Išsaugoti kaip"}, + "Save as type:": {"lt": "Išsaugoti kaip:"}, + "Save layers:": {"lt": "Išsaugoti sluoksnius:"}, + "Save resolution:": {"lt": "Išsaugoti rezoliuciją:"}, + "Select all": {"lt": "Pasirinkti viską"}, + "Select area first": {"lt": "Pasirinkite plotas pirmas"}, + "Select area tool": {"lt": "Pasirinkite plotas įrankis"}, + "Select color": {"lt": "Pasirinkite spalvą"}, + "Select object tool": {"lt": "Pasirinkite objektas įrankis"}, + "Selected": {"lt": "Pasirinkti"}, + "Sensitivity:": {"lt": "Jautrumas:"}, + "Sepia": {"lt": "Sepija"}, + "Shaded": {"lt": "Tamsioje"}, + "Shadow blur:": {"lt": "Šešėlių migla:"}, + "Shadow color:": {"lt": "Šešėlių spalva:"}, + "Shadow:": {"lt": "Šešėlis:"}, + "Sharpen": {"lt": "Pagaląsti"}, + "Sharpen tool": {"lt": "Paryškinti nuorodą"}, + "Sharpen:": {"lt": "Paryškinti:"}, + "Show / Hide": {"lt": "Rodyti / slėpti"}, + "Simple": {"lt": "Paprastas"}, + "Size": {"lt": "Dydis"}, + "Size:": {"lt": "Dydis:"}, + "Sketchy": {"lt": "Paviršutiniškas"}, + "Solarize": {"lt": "Soliarizacija"}, + "Sorry": {"lt": "Atsiprašau"}, + "Sorry, image is too big, max 5 MB.": {"lt": "Atsiprašome, vaizdas yra per didelis, daugiausiai 5 MB."}, + "Source is empty, right click on image first.": {"lt": "šaltinis yra tuščias, dešiniuoju pelės mygtuku spustelėkite ant nuotraukos pirmą kartą."}, + "Sprites": {"lt": "Sprites"}, + "Square": {"lt": "Langelis"}, + "Strength:": {"lt": "Jėga:"}, + "Strict": {"lt": "Griežtas"}, + "Stroke": {"lt": "Brūkšnys"}, + "Stroke size:": {"lt": "Brūkšnio dydis:"}, + "Target:": {"lt": "Tikslas:"}, + "Text": {"lt": "Tekstas"}, + "Text:": {"lt": "Tekstas:"}, + "The image could not be loaded.": {"lt": "Vaizdas negali būti įkeltas."}, + "This can not be last layer": {"lt": "Tai gali būti ne paskutinis sluoksnis"}, + "This can not be last layer.": {"lt": "Tai gali būti ne paskutinis sluoksnis."}, + "Tilt Shift": {"lt": "Tento perkelimas"}, + "Times New Roman": {"lt": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"lt": "Norėdami įklijuoti iš mainų srities, naudokite ctrl-v."}, + "Tools": {"lt": "Įrankiai"}, + "Top-left": {"lt": "Viršuje kairėje"}, + "Top-right": {"lt": "Viršutiniame dešiniajame"}, + "Total pixels:": {"lt": "Iš viso taškų:"}, + "Translate error, can not find dictionary:": {"lt": "Versti klaidą, negali rasti žodyną:"}, + "Transparency #1:": {"lt": "Skaidrumas # 1:"}, + "Transparency #2:": {"lt": "Skaidrumas # 2:"}, + "Transparent:": {"lt": "Skaidri:"}, + "Trim": {"lt": "Apkarpyti"}, + "Trim:": {"lt": "Apkarpyti:"}, + "Turkish": {"lt": "Turkų"}, + "Undo": {"lt": "Anuliuoti"}, + "Unique colors:": {"lt": "Unikalios spalvos:"}, + "Up": {"lt": "Aukštyn"}, + "V Radius:": {"lt": "V spindulys:"}, + "Verdana": {"lt": "Verdana"}, + "Vertical": {"lt": "Vertikalus"}, + "Vertical gap:": {"lt": "Vertikali atotrūkis:"}, + "Vibrance": {"lt": "Rezonansas"}, + "Vignette": {"lt": "Vinjetė"}, + "Vignette amount:": {"lt": "Vinjetė suma:"}, + "Vignette size:": {"lt": "Vinjetė dydis:"}, + "ViliusL": {"lt": "Viliusl"}, + "Vintage": {"lt": "Senoviškas"}, + "Visible": {"lt": "Matomas"}, + "Visible:": {"lt": "Matomas:"}, + "WEBP - Weppy File Format": {"lt": "WEBP - weppy failo formatas"}, + "Website": {"lt": "Interneto svetainė"}, + "Width (%):": {"lt": "Plotis (%):"}, + "Width (pixels):": {"lt": "Plotis (taškų):"}, + "Width:": {"lt": "Plotis:"}, + "Wrong file type, must be image or json.": {"lt": "Neteisingas failo tipas, turi būti paveikslėlis arba json."}, + "X end:": {"lt": "X pabaiga:"}, + "X start:": {"lt": "X pradžia::"}, + "Y end:": {"lt": "Y pabaiga:"}, + "Y start:": {"lt": "Y pradžia:"}, + "Yes": {"lt": "Taip"}, + "Your browser does not support this format.": {"lt": "Jūsų naršyklė nepalaiko šio formato."}, + "Your browser doesn't support canvas.": {"lt": "Jūsų naršyklė nepalaiko drobės."}, + "Zoom": {"lt": "Padidinti"}, + "Zoom In": {"lt": "Priartinti"}, + "Zoom Out": {"lt": "Nutolinti"}, + "Zoom in": {"lt": "Priartinti"}, + "Zoom out": {"lt": "Nutolinti"}, + "Zoom:": {"lt": "Priartinimas:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.xml new file mode 100644 index 00000000000..d5c9caf3c79 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/lt.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>lt.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.js new file mode 100644 index 00000000000..90cf0f06147 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.js @@ -0,0 +1,342 @@ +var dict_pt = { + "2d": {"pt": "2d"}, + "3D position:": {"pt": "Posição 3d:"}, + "3D size:": {"pt": "Tamanho 3d:"}, + "480p": {"pt": "480p"}, + "About": {"pt": "Sobre"}, + "Add new layer": {"pt": "Adicionar nova camada"}, + "Advanced": {"pt": "Avançado"}, + "All": {"pt": "Todos"}, + "Alpha": {"pt": "Alfa"}, + "Alpha:": {"pt": "Alfa:"}, + "Amount:": {"pt": "Quantidade:"}, + "Anonymous": {"pt": "Anônimo"}, + "Anti aliasing": {"pt": "Aliasing anti"}, + "Area:": {"pt": "área:"}, + "Arial": {"pt": "Arial"}, + "Arrow": {"pt": "Flecha"}, + "Arrow keys": {"pt": "Teclas de seta"}, + "Attributes": {"pt": "Atributos"}, + "Author:": {"pt": "Autor:"}, + "Auto adjust colors": {"pt": "Auto ajustar cores"}, + "Auto colorize": {"pt": "Colorize auto"}, + "Average:": {"pt": "Média:"}, + "BMP - Windows Bitmap": {"pt": "Bmp - janelas bitmap"}, + "Basic": {"pt": "Básico"}, + "BezierCurve": {"pt": "Curva de bézier"}, + "Big grains level:": {"pt": "Big grãos nível:"}, + "Black and White": {"pt": "Preto e branco"}, + "Blend": {"pt": "Mistura"}, + "Blend:": {"pt": "Mistura:"}, + "Blue": {"pt": "Azul"}, + "Blue channel:": {"pt": "Canal de azul:"}, + "Blur": {"pt": "Borrão"}, + "Blur Radius:": {"pt": "Raio de desfoque:"}, + "Blur tool": {"pt": "Ferramenta de desfoque"}, + "Blur-Box": {"pt": "Borrão-box"}, + "Blur-Gaussian": {"pt": "Borrão-gaussian"}, + "Blur-Stack": {"pt": "Borrão-stack"}, + "Blur-Zoom": {"pt": "Borrão-zoom"}, + "Blur:": {"pt": "Borrão:"}, + "Bold": {"pt": "Negrito"}, + "Bold Italic": {"pt": "Negrito itálico"}, + "Borders": {"pt": "Fronteiras"}, + "Both": {"pt": "Ambos"}, + "Bottom-left": {"pt": "Inferior esquerdo"}, + "Bottom-right": {"pt": "Canto inferior direito"}, + "Brightness:": {"pt": "Brilho:"}, + "Brush": {"pt": "Escova"}, + "Bulge/Pinch": {"pt": "Bulge / pitada"}, + "Bulge/Pinch tool": {"pt": "Bulge / ferramenta pitada"}, + "Burn": {"pt": "Queimar"}, + "Burn/Dodge tool": {"pt": "Queimadura / ferramenta dodge"}, + "Cancel": {"pt": "Cancelar"}, + "Center x:": {"pt": "Centro x:"}, + "Center y:": {"pt": "Centro y:"}, + "Center:": {"pt": "Centro:"}, + "Channel:": {"pt": "Canal:"}, + "Chrome": {"pt": "Cromada"}, + "Circle": {"pt": "Círculo"}, + "Clear": {"pt": "Claro"}, + "Clear selection": {"pt": "Seleção clara"}, + "Clone tool": {"pt": "Ferramenta clone"}, + "Color #1:": {"pt": "Cor # 1:"}, + "Color #2:": {"pt": "Color # 2:"}, + "Color Zoom": {"pt": "Zoom cor"}, + "Color adjust:": {"pt": "Cor ajustar:"}, + "Color corrections": {"pt": "Correções de cores"}, + "Color to Alpha": {"pt": "Cor para alpha"}, + "Color to alpha": {"pt": "Cor para alpha"}, + "Color:": {"pt": "Cor:"}, + "Colorize": {"pt": "Colorir"}, + "Colors:": {"pt": "Colors:"}, + "Composite": {"pt": "Composto"}, + "Composition:": {"pt": "Composição:"}, + "Contrast:": {"pt": "Contraste:"}, + "Copy selection": {"pt": "Copiar seleção"}, + "Courier": {"pt": "Correio"}, + "Crop": {"pt": "Colheita"}, + "Crop Selection": {"pt": "Seleção de culturas"}, + "Curve": {"pt": "Curva"}, + "Custom": {"pt": "Personalizadas"}, + "Cut selection": {"pt": "Seleção cut"}, + "Decrease color depth": {"pt": "Diminuir a profundidade de cor"}, + "Decrease colors": {"pt": "Cores diminuir"}, + "Default": {"pt": "Padrão"}, + "Del": {"pt": "Del"}, + "Delete": {"pt": "Excluir"}, + "Delete selection": {"pt": "Excluir seleção"}, + "Denoise": {"pt": "Denoise"}, + "Desaturate": {"pt": "Desaturate"}, + "Desaturation:": {"pt": "Dessaturação:"}, + "Description:": {"pt": "Descrição:"}, + "Differences": {"pt": "Diferenças"}, + "Differences Down": {"pt": "Diferenças para baixo"}, + "Dither": {"pt": "Tremor"}, + "Dithering:": {"pt": "Composição de cores:"}, + "Dot Screen": {"pt": "Tela de ponto"}, + "Down": {"pt": "Baixa"}, + "Downloaded": {"pt": "Transferido"}, + "Draw circle": {"pt": "Desenhar círculo"}, + "Draw letters": {"pt": "Desenhar as letras"}, + "Draw line": {"pt": "Desenhar linha"}, + "Draw rectangle": {"pt": "Desenhar rectângulo"}, + "Duplicate": {"pt": "Duplicado"}, + "Duplicate layer": {"pt": "Duplicar camada"}, + "Dusts level:": {"pt": "Poeiras nível:"}, + "Edge": {"pt": "Beira"}, + "Edit": {"pt": "Editar"}, + "Effects": {"pt": "Efeito"}, + "Email:": {"pt": "O email:"}, + "Emboss": {"pt": "Emboss"}, + "Empty data": {"pt": "De dados vazio"}, + "English": {"pt": "Inglês"}, + "Enrich": {"pt": "Enriquecer"}, + "Enter angle (0-360):": {"pt": "Digite o ângulo (0-360):"}, + "Erase": {"pt": "Apagar"}, + "Error": {"pt": "Erro"}, + "Error:": {"pt": "Erro:"}, + "Español": {"pt": "Español"}, + "Exponent:": {"pt": "Expoente:"}, + "Exposure level:": {"pt": "Nível de exposição:"}, + "Factor:": {"pt": "Fator:"}, + "File": {"pt": "Arquivo"}, + "File name:": {"pt": "Nome do arquivo:"}, + "Fill": {"pt": "Preencher"}, + "Fill style:": {"pt": "Estilo de preenchimento:"}, + "Fit": {"pt": "Caber"}, + "Fit window": {"pt": "Janela de ajuste"}, + "Flatten Image": {"pt": "Achatar imagem"}, + "Flip": {"pt": "Giro"}, + "Font family:": {"pt": "Família de fontes:"}, + "Font style:": {"pt": "Estilo de fonte:"}, + "French": {"pt": "Francês"}, + "Full HD, 1080p": {"pt": "Full hd, 1080p"}, + "Fur": {"pt": "Pele"}, + "Gap:": {"pt": "Gap:"}, + "German": {"pt": "Alemão"}, + "GitHub:": {"pt": "Github:"}, + "Gradient": {"pt": "Gradiente"}, + "Gradient Radius:": {"pt": "Raio gradiente:"}, + "Grains": {"pt": "Grãos"}, + "Grains level:": {"pt": "Grãos nível:"}, + "Gray": {"pt": "Cinzento"}, + "GrayScale": {"pt": "Tons de cinza"}, + "Green": {"pt": "Verde"}, + "Green channel:": {"pt": "Canal verde:"}, + "Greyscale:": {"pt": "Escala de cinzentos:"}, + "Grid": {"pt": "Grade"}, + "Grid on/off": {"pt": "Grade on / off"}, + "Grouped": {"pt": "Agrupados"}, + "H Radius:": {"pt": "Raio h:"}, + "Heatmap": {"pt": "Mapa de calor"}, + "Height (%):": {"pt": "Altura (%):"}, + "Height (pixels):": {"pt": "Altura (pixels):"}, + "Height:": {"pt": "Altura:"}, + "Help": {"pt": "Socorro"}, + "Helvetica": {"pt": "Helvética"}, + "Hermite": {"pt": "Hermite"}, + "Histogram": {"pt": "Histograma"}, + "Histogram:": {"pt": "Histograma:"}, + "Horizontal": {"pt": "Horizontal"}, + "Horizontal gap:": {"pt": "Lacuna horizontal:"}, + "Hue:": {"pt": "Matiz:"}, + "Image": {"pt": "Imagem"}, + "Impact": {"pt": "Impacto"}, + "Information": {"pt": "Em formação"}, + "Italiano": {"pt": "Italiano"}, + "Italic": {"pt": "Itálico"}, + "JPG - JPG/JPEG Format": {"pt": "Jpg - jpg / jpeg"}, + "JPG Compression": {"pt": "Compressão jpg"}, + "JSON - Full layers data": {"pt": "Json - camadas completas de dados"}, + "Japanese": {"pt": "Japonês"}, + "Key-points": {"pt": "Pontos chave"}, + "Keyboard Shortcuts": {"pt": "Atalhos do teclado"}, + "Korean": {"pt": "Coreano"}, + "Language": {"pt": "Língua"}, + "Last modified": {"pt": "última modificação"}, + "Layer": {"pt": "Camada"}, + "Layers": {"pt": "Camadas"}, + "Left": {"pt": "Esquerda"}, + "Level:": {"pt": "Nível:"}, + "Levels:": {"pt": "Níveis:"}, + "Lietuvių": {"pt": "Lietuvių"}, + "Light leak:": {"pt": "Vazamento de luz:"}, + "Limit:": {"pt": "Limite:"}, + "Luminance:": {"pt": "Luminância:"}, + "Luminosity:": {"pt": "Luminosidade:"}, + "Magic Wand Tool": {"pt": "Varinha mágica"}, + "Merge": {"pt": "Fundir"}, + "Merge Down": {"pt": "Unir"}, + "Mode:": {"pt": "Modo:"}, + "Mosaic": {"pt": "Mosaico"}, + "Mouse:": {"pt": "Rato:"}, + "Move": {"pt": "Mover"}, + "Move active layer": {"pt": "Mover camada ativa"}, + "Move down": {"pt": "Mover para baixo"}, + "Move up": {"pt": "Subir"}, + "Multi-line": {"pt": "Multi-linha"}, + "Name:": {"pt": "Nome:"}, + "Negative": {"pt": "Negativo"}, + "New": {"pt": "Novo"}, + "New file...": {"pt": "Novo arquivo..."}, + "New layer": {"pt": "Nova camada"}, + "No": {"pt": "Não"}, + "Normal": {"pt": "Normal"}, + "Notice": {"pt": "Aviso prévio"}, + "Notice:": {"pt": "Aviso prévio:"}, + "Oil": {"pt": "Oleo"}, + "Ok": {"pt": "Está bem"}, + "Online image editor": {"pt": "Editor de imagens online"}, + "Opacity": {"pt": "Opacidade"}, + "Open": {"pt": "Aberto"}, + "Original size": {"pt": "Tamanho original"}, + "PNG - Portable Network Graphics": {"pt": "Png - portable network gráficos"}, + "Paste": {"pt": "Colar"}, + "Paste selection": {"pt": "Seleção paste"}, + "Pencil": {"pt": "Lápis"}, + "Perspective": {"pt": "Perspectiva"}, + "Pick Color": {"pt": "Escolher a cor"}, + "Pixels:": {"pt": "Píxeis:"}, + "Portuguese": {"pt": "Português"}, + "Power:": {"pt": "Poder:"}, + "Pre-Blur:": {"pt": "Pré-borrão:"}, + "Preview": {"pt": "Visualização"}, + "Print": {"pt": "Impressão"}, + "Quality (jpeg):": {"pt": "Qualidade (jpeg):"}, + "Quality:": {"pt": "Qualidade:"}, + "Quick load": {"pt": "Carga rápida"}, + "Quick save": {"pt": "Salvamento rapido"}, + "Radial": {"pt": "Radial"}, + "Radius:": {"pt": "Raio:"}, + "Range:": {"pt": "Alcance:"}, + "Reason:": {"pt": "Razão:"}, + "Recover alpha": {"pt": "Recuperar alpha"}, + "Red": {"pt": "Vermelho"}, + "Red channel:": {"pt": "Canal vermelho:"}, + "Rename": {"pt": "Rebatizar"}, + "Rename layer": {"pt": "Renomeie camada"}, + "Replace Color": {"pt": "Substituir cor"}, + "Replace color": {"pt": "Substituir cor"}, + "Replacement:": {"pt": "Substituição:"}, + "Resample - Hermite": {"pt": "Resample - hermite"}, + "Reset zoom level": {"pt": "Nível de zoom de reset"}, + "Resize": {"pt": "Redimensionar"}, + "Resolution:": {"pt": "Resolução:"}, + "Restore alpha": {"pt": "Restaurar alpha"}, + "Right": {"pt": "Certo"}, + "Rotate": {"pt": "Rodar"}, + "Rotate left": {"pt": "Vire à esquerda"}, + "Rotation": {"pt": "Rotação"}, + "Russian": {"pt": "Russo"}, + "Saturation:": {"pt": "Saturação:"}, + "Save": {"pt": "Salvar"}, + "Save as": {"pt": "Salvar como"}, + "Save as type:": {"pt": "Salvar como tipo:"}, + "Save layers:": {"pt": "Salve camadas:"}, + "Save resolution:": {"pt": "Salve resolução:"}, + "Select all": {"pt": "Selecionar tudo"}, + "Select area first": {"pt": "Selecionar área primeira"}, + "Select area tool": {"pt": "Ferramenta selecionar área"}, + "Select color": {"pt": "Selecione a cor"}, + "Select object tool": {"pt": "Ferramenta selecionar objeto"}, + "Selected": {"pt": "Selecionado"}, + "Sensitivity:": {"pt": "Sensibilidade:"}, + "Sepia": {"pt": "Sépia"}, + "Shaded": {"pt": "Sombreado"}, + "Shadow blur:": {"pt": "Borrão da sombra:"}, + "Shadow color:": {"pt": "Cor da sombra:"}, + "Shadow:": {"pt": "Sombra:"}, + "Sharpen": {"pt": "Aguçar"}, + "Sharpen tool": {"pt": "Afiar ferramenta"}, + "Sharpen:": {"pt": "Aguçar:"}, + "Show / Hide": {"pt": "Aparecer esconder"}, + "Simple": {"pt": "Simples"}, + "Size": {"pt": "Tamanho"}, + "Size:": {"pt": "Tamanho:"}, + "Sketchy": {"pt": "Esboçado"}, + "Solarize": {"pt": "Solarizar"}, + "Sorry": {"pt": "Desculpa"}, + "Sorry, image is too big, max 5 MB.": {"pt": "Desculpe, imagem é muito grande, max 5 mb."}, + "Source is empty, right click on image first.": {"pt": "Fonte está vazio, clique direito na imagem em primeiro lugar."}, + "Sprites": {"pt": "Sprites"}, + "Square": {"pt": "Quadrado"}, + "Strength:": {"pt": "Força:"}, + "Strict": {"pt": "Rigoroso"}, + "Stroke": {"pt": "Acidente vascular encefálico"}, + "Stroke size:": {"pt": "Tamanho do traço:"}, + "Target:": {"pt": "Alvo:"}, + "Text": {"pt": "Texto"}, + "Text:": {"pt": "Texto:"}, + "The image could not be loaded.": {"pt": "A imagem não pôde ser carregado."}, + "This can not be last layer": {"pt": "Esta não pode ser a última camada"}, + "This can not be last layer.": {"pt": "Esta não pode ser a última camada."}, + "Tilt Shift": {"pt": "Tilt shift"}, + "Times New Roman": {"pt": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"pt": "Para colar da área de transferência, use ctrl-v."}, + "Tools": {"pt": "Ferramentas"}, + "Top-left": {"pt": "Superior esquerdo"}, + "Top-right": {"pt": "Canto superior direito"}, + "Total pixels:": {"pt": "Total de pixels:"}, + "Translate error, can not find dictionary:": {"pt": "Traduzir de erro, não consegue encontrar dicionário:"}, + "Transparency #1:": {"pt": "Transparência # 1:"}, + "Transparency #2:": {"pt": "Transparência # 2:"}, + "Transparent:": {"pt": "Transparente:"}, + "Trim": {"pt": "Aparar"}, + "Trim:": {"pt": "Apare:"}, + "Turkish": {"pt": "Turco"}, + "Undo": {"pt": "Desfazer"}, + "Unique colors:": {"pt": "Cores exclusivas:"}, + "Up": {"pt": "Acima"}, + "V Radius:": {"pt": "V raio:"}, + "Verdana": {"pt": "Verdana"}, + "Vertical": {"pt": "Vertical"}, + "Vertical gap:": {"pt": "Gap vertical:"}, + "Vibrance": {"pt": "Vibração"}, + "Vignette": {"pt": "Vinheta"}, + "Vignette amount:": {"pt": "Montante vinheta:"}, + "Vignette size:": {"pt": "Tamanho vinheta:"}, + "ViliusL": {"pt": "Viliusl"}, + "Vintage": {"pt": "Vintage"}, + "Visible": {"pt": "Visível"}, + "Visible:": {"pt": "Visível:"}, + "WEBP - Weppy File Format": {"pt": "Webp - formato de arquivo weppy"}, + "Website": {"pt": "Site"}, + "Width (%):": {"pt": "Largura (%):"}, + "Width (pixels):": {"pt": "Largura (pixels):"}, + "Width:": {"pt": "Largura:"}, + "Wrong file type, must be image or json.": {"pt": "Tipo de arquivo errado, deve ser imagem ou json."}, + "X end:": {"pt": "X final:"}, + "X start:": {"pt": "X início:"}, + "Y end:": {"pt": "Y final:"}, + "Y start:": {"pt": "Y início:"}, + "Yes": {"pt": "Sim"}, + "Your browser does not support this format.": {"pt": "Seu navegador não suporta este formato."}, + "Your browser doesn't support canvas.": {"pt": "Seu navegador não suporta tela."}, + "Zoom": {"pt": "Zoom"}, + "Zoom In": {"pt": "Mais zoom"}, + "Zoom Out": {"pt": "Zoom out"}, + "Zoom in": {"pt": "Mais zoom"}, + "Zoom out": {"pt": "Zoom out"}, + "Zoom:": {"pt": "Zoom:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.xml new file mode 100644 index 00000000000..f7a9f02de53 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/pt.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>pt.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.js new file mode 100644 index 00000000000..7d8803c17b3 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.js @@ -0,0 +1,342 @@ +var dict_ru = { + "2d": {"ru": "2d"}, + "3D position:": {"ru": "3d позиция:"}, + "3D size:": {"ru": "3d размер:"}, + "480p": {"ru": "480p"}, + "About": {"ru": "около"}, + "Add new layer": {"ru": "добавить новый слой"}, + "Advanced": {"ru": "продвинутый"}, + "All": {"ru": "все"}, + "Alpha": {"ru": "альфа"}, + "Alpha:": {"ru": "альфа:"}, + "Amount:": {"ru": "количество:"}, + "Anonymous": {"ru": "анонимный"}, + "Anti aliasing": {"ru": "сглаживание"}, + "Area:": {"ru": "площадь:"}, + "Arial": {"ru": "Arial"}, + "Arrow": {"ru": "стрела"}, + "Arrow keys": {"ru": "клавиши со стрелками"}, + "Attributes": {"ru": "атрибуты"}, + "Author:": {"ru": "автор:"}, + "Auto adjust colors": {"ru": "автоматическая настройка цвета"}, + "Auto colorize": {"ru": "авто раскрасить"}, + "Average:": {"ru": "в среднем:"}, + "BMP - Windows Bitmap": {"ru": "Bmp - окна растровый"}, + "Basic": {"ru": "базовый"}, + "BezierCurve": {"ru": "кривая безье"}, + "Big grains level:": {"ru": "большие зерна уровня:"}, + "Black and White": {"ru": "черное и белое"}, + "Blend": {"ru": "смесь"}, + "Blend:": {"ru": "смешать:"}, + "Blue": {"ru": "синий"}, + "Blue channel:": {"ru": "синий канал:"}, + "Blur": {"ru": "пятно"}, + "Blur Radius:": {"ru": "размытие радиус:"}, + "Blur tool": {"ru": "инструмент размытия"}, + "Blur-Box": {"ru": "размытие-бокс"}, + "Blur-Gaussian": {"ru": "размытие-gaussian"}, + "Blur-Stack": {"ru": "размытие-стек"}, + "Blur-Zoom": {"ru": "размытие-зум"}, + "Blur:": {"ru": "размытие:"}, + "Bold": {"ru": "жирный"}, + "Bold Italic": {"ru": "жирный курсив"}, + "Borders": {"ru": "границы"}, + "Both": {"ru": "и то и другое"}, + "Bottom-left": {"ru": "нижняя левая"}, + "Bottom-right": {"ru": "внизу справа"}, + "Brightness:": {"ru": "яркость:"}, + "Brush": {"ru": "щетка"}, + "Bulge/Pinch": {"ru": "выпуклость / пинч"}, + "Bulge/Pinch tool": {"ru": "выпуклость / инструмент щепотка"}, + "Burn": {"ru": "жечь"}, + "Burn/Dodge tool": {"ru": "запись / инструмент уворачивания"}, + "Cancel": {"ru": "отмена"}, + "Center x:": {"ru": "центр х:"}, + "Center y:": {"ru": "центр у:"}, + "Center:": {"ru": "центр:"}, + "Channel:": {"ru": "источник:"}, + "Chrome": {"ru": "хром"}, + "Circle": {"ru": "круг"}, + "Clear": {"ru": "очистить"}, + "Clear selection": {"ru": "очистить выбор"}, + "Clone tool": {"ru": "клон инструмент"}, + "Color #1:": {"ru": "цвет # 1:"}, + "Color #2:": {"ru": "цвет # 2:"}, + "Color Zoom": {"ru": "цвет зум"}, + "Color adjust:": {"ru": "настройка цвета:"}, + "Color corrections": {"ru": "цветовая коррекция"}, + "Color to Alpha": {"ru": "цвет в альфа"}, + "Color to alpha": {"ru": "цвет в альфа"}, + "Color:": {"ru": "цвет:"}, + "Colorize": {"ru": "раскрасить"}, + "Colors:": {"ru": "цвета:"}, + "Composite": {"ru": "композитный"}, + "Composition:": {"ru": "состав:"}, + "Contrast:": {"ru": "контраст:"}, + "Copy selection": {"ru": "выбор копирования"}, + "Courier": {"ru": "курьер"}, + "Crop": {"ru": "урожай"}, + "Crop Selection": {"ru": "выбор crop"}, + "Curve": {"ru": "кривая"}, + "Custom": {"ru": "изготовленный на заказ"}, + "Cut selection": {"ru": "выбор cut"}, + "Decrease color depth": {"ru": "уменьшение глубины цвета"}, + "Decrease colors": {"ru": "уменьшение цветов"}, + "Default": {"ru": "по умолчанию"}, + "Del": {"ru": "Del"}, + "Delete": {"ru": "удалить"}, + "Delete selection": {"ru": "удалить выбор"}, + "Denoise": {"ru": "Denoise"}, + "Desaturate": {"ru": "обесцветьте"}, + "Desaturation:": {"ru": "Desaturation:"}, + "Description:": {"ru": "описание:"}, + "Differences": {"ru": "различия"}, + "Differences Down": {"ru": "различия вниз"}, + "Dither": {"ru": "трястись"}, + "Dithering:": {"ru": "смешение:"}, + "Dot Screen": {"ru": "экран dot"}, + "Down": {"ru": "вниз"}, + "Downloaded": {"ru": "загруженный"}, + "Draw circle": {"ru": "нарисуйте круг"}, + "Draw letters": {"ru": "Draw буквы"}, + "Draw line": {"ru": "розыгрыш линия"}, + "Draw rectangle": {"ru": "нарисуйте прямоугольник"}, + "Duplicate": {"ru": "дублировать"}, + "Duplicate layer": {"ru": "дублировать слой"}, + "Dusts level:": {"ru": "уровень пыли:"}, + "Edge": {"ru": "край"}, + "Edit": {"ru": "редактировать"}, + "Effects": {"ru": "последствия"}, + "Email:": {"ru": "эл. адрес:"}, + "Emboss": {"ru": "выбивать"}, + "Empty data": {"ru": "пустые данные"}, + "English": {"ru": "английский"}, + "Enrich": {"ru": "обогащать"}, + "Enter angle (0-360):": {"ru": "введите угол (0-360):"}, + "Erase": {"ru": "стирать"}, + "Error": {"ru": "ошибка"}, + "Error:": {"ru": "ошибка:"}, + "Español": {"ru": "Español"}, + "Exponent:": {"ru": "экспонент:"}, + "Exposure level:": {"ru": "уровень экспозиции:"}, + "Factor:": {"ru": "фактор:"}, + "File": {"ru": "файл"}, + "File name:": {"ru": "имя файла:"}, + "Fill": {"ru": "заполнить"}, + "Fill style:": {"ru": "стиль заполнения:"}, + "Fit": {"ru": "поместиться"}, + "Fit window": {"ru": "по размеру окна"}, + "Flatten Image": {"ru": "свести изображение"}, + "Flip": {"ru": "кувырок"}, + "Font family:": {"ru": "семейство шрифтов:"}, + "Font style:": {"ru": "стиль шрифта:"}, + "French": {"ru": "французский"}, + "Full HD, 1080p": {"ru": "Full hd, 1080p"}, + "Fur": {"ru": "мех"}, + "Gap:": {"ru": "Gap:"}, + "German": {"ru": "немецкий"}, + "GitHub:": {"ru": "Github:"}, + "Gradient": {"ru": "градиент"}, + "Gradient Radius:": {"ru": "градиент радиус:"}, + "Grains": {"ru": "зерна"}, + "Grains level:": {"ru": "зерна уровень:"}, + "Gray": {"ru": "серый"}, + "GrayScale": {"ru": "оттенки серого"}, + "Green": {"ru": "зеленый"}, + "Green channel:": {"ru": "зеленый коридор:"}, + "Greyscale:": {"ru": "оттенки серого:"}, + "Grid": {"ru": "сетка"}, + "Grid on/off": {"ru": "сетка вкл / выкл"}, + "Grouped": {"ru": "сгруппированные"}, + "H Radius:": {"ru": "радиус h:"}, + "Heatmap": {"ru": "тепловая карта"}, + "Height (%):": {"ru": "высота (%):"}, + "Height (pixels):": {"ru": "высота (в пикселях):"}, + "Height:": {"ru": "высота:"}, + "Help": {"ru": "помогите"}, + "Helvetica": {"ru": "Helvetica"}, + "Hermite": {"ru": "эрмита"}, + "Histogram": {"ru": "гистограмма"}, + "Histogram:": {"ru": "гистограмма:"}, + "Horizontal": {"ru": "горизонтальный"}, + "Horizontal gap:": {"ru": "горизонтальный разрыв:"}, + "Hue:": {"ru": "оттенок:"}, + "Image": {"ru": "образ"}, + "Impact": {"ru": "влияние"}, + "Information": {"ru": "информация"}, + "Italiano": {"ru": "Italiano"}, + "Italic": {"ru": "курсив"}, + "JPG - JPG/JPEG Format": {"ru": "Jpg - формате jpg / jpeg"}, + "JPG Compression": {"ru": "сжатия jpg"}, + "JSON - Full layers data": {"ru": "Json - полные слои данных"}, + "Japanese": {"ru": "японский"}, + "Key-points": {"ru": "ключевые пункты"}, + "Keyboard Shortcuts": {"ru": "горячие клавиши"}, + "Korean": {"ru": "корейский"}, + "Language": {"ru": "язык"}, + "Last modified": {"ru": "последнее изменение"}, + "Layer": {"ru": "слой"}, + "Layers": {"ru": "слои"}, + "Left": {"ru": "оставил"}, + "Level:": {"ru": "уровень:"}, + "Levels:": {"ru": "уровни:"}, + "Lietuvių": {"ru": "Lietuvių"}, + "Light leak:": {"ru": "свет утечки:"}, + "Limit:": {"ru": "лимит:"}, + "Luminance:": {"ru": "светимость:"}, + "Luminosity:": {"ru": "светимость:"}, + "Magic Wand Tool": {"ru": "волшебный инструмент палочки"}, + "Merge": {"ru": "сливаться"}, + "Merge Down": {"ru": "слить"}, + "Mode:": {"ru": "режим:"}, + "Mosaic": {"ru": "мозаика"}, + "Mouse:": {"ru": "мышь:"}, + "Move": {"ru": "переехать"}, + "Move active layer": {"ru": "переместить активный слой"}, + "Move down": {"ru": "переместить вниз"}, + "Move up": {"ru": "переместить вверх"}, + "Multi-line": {"ru": "многоканальный"}, + "Name:": {"ru": "имя:"}, + "Negative": {"ru": "отрицательный"}, + "New": {"ru": "новый"}, + "New file...": {"ru": "новый файл..."}, + "New layer": {"ru": "новый слой"}, + "No": {"ru": "нет"}, + "Normal": {"ru": "нормальный"}, + "Notice": {"ru": "уведомление"}, + "Notice:": {"ru": "обратите внимание:"}, + "Oil": {"ru": "масло"}, + "Ok": {"ru": "ок"}, + "Online image editor": {"ru": "интернет редактор изображений"}, + "Opacity": {"ru": "помутнение"}, + "Open": {"ru": "открыто"}, + "Original size": {"ru": "оригинальный размер"}, + "PNG - Portable Network Graphics": {"ru": "Png - переносимая сетевая графика"}, + "Paste": {"ru": "вставить"}, + "Paste selection": {"ru": "выбор пасты"}, + "Pencil": {"ru": "карандаш"}, + "Perspective": {"ru": "перспективы"}, + "Pick Color": {"ru": "выберите цвет"}, + "Pixels:": {"ru": "разрешение:"}, + "Portuguese": {"ru": "португальский"}, + "Power:": {"ru": "мощность:"}, + "Pre-Blur:": {"ru": "Pre-размытости:"}, + "Preview": {"ru": "предварительный просмотр"}, + "Print": {"ru": "распечатать"}, + "Quality (jpeg):": {"ru": "качество (jpeg):"}, + "Quality:": {"ru": "качественный:"}, + "Quick load": {"ru": "быстрая загрузка"}, + "Quick save": {"ru": "быстрое сохранение"}, + "Radial": {"ru": "радиальный"}, + "Radius:": {"ru": "радиус:"}, + "Range:": {"ru": "ассортимент:"}, + "Reason:": {"ru": "причина:"}, + "Recover alpha": {"ru": "восстановление альфа"}, + "Red": {"ru": "красный"}, + "Red channel:": {"ru": "красный канал:"}, + "Rename": {"ru": "переименовывать"}, + "Rename layer": {"ru": "переименовать слой"}, + "Replace Color": {"ru": "заменить цвет"}, + "Replace color": {"ru": "заменить цвет"}, + "Replacement:": {"ru": "замена:"}, + "Resample - Hermite": {"ru": "Resample - эрмита"}, + "Reset zoom level": {"ru": "сброс уровня масштабирования"}, + "Resize": {"ru": "изменение размера"}, + "Resolution:": {"ru": "разрешение:"}, + "Restore alpha": {"ru": "восстановление альфа"}, + "Right": {"ru": "правильно"}, + "Rotate": {"ru": "поворот"}, + "Rotate left": {"ru": "поверните влево"}, + "Rotation": {"ru": "вращение"}, + "Russian": {"ru": "русский"}, + "Saturation:": {"ru": "насыщенность:"}, + "Save": {"ru": "сохранить"}, + "Save as": {"ru": "сохранить как"}, + "Save as type:": {"ru": "сохранить как тип:"}, + "Save layers:": {"ru": "сохранить слои:"}, + "Save resolution:": {"ru": "сохранить разрешение:"}, + "Select all": {"ru": "выбрать все"}, + "Select area first": {"ru": "выберите область первой"}, + "Select area tool": {"ru": "выберите инструмент область"}, + "Select color": {"ru": "выбрать цвет"}, + "Select object tool": {"ru": "выберите инструмент объекта"}, + "Selected": {"ru": "выбранный"}, + "Sensitivity:": {"ru": "чувствительность:"}, + "Sepia": {"ru": "сепия"}, + "Shaded": {"ru": "заштрихованное"}, + "Shadow blur:": {"ru": "тень размытия:"}, + "Shadow color:": {"ru": "цвет тени:"}, + "Shadow:": {"ru": "тень:"}, + "Sharpen": {"ru": "точить"}, + "Sharpen tool": {"ru": "резкость инструмент"}, + "Sharpen:": {"ru": "резкость:"}, + "Show / Hide": {"ru": "показать спрятать"}, + "Simple": {"ru": "просто"}, + "Size": {"ru": "размер"}, + "Size:": {"ru": "размер:"}, + "Sketchy": {"ru": "отрывочный"}, + "Solarize": {"ru": "передержать"}, + "Sorry": {"ru": "сожалею"}, + "Sorry, image is too big, max 5 MB.": {"ru": "к сожалению, изображение слишком большие, не более 5 мб."}, + "Source is empty, right click on image first.": {"ru": "источник пуст, щелкните правой кнопкой мыши на изображение в первую очередь."}, + "Sprites": {"ru": "спрайты"}, + "Square": {"ru": "квадрат"}, + "Strength:": {"ru": "прочность:"}, + "Strict": {"ru": "строгий"}, + "Stroke": {"ru": "инсульт"}, + "Stroke size:": {"ru": "размер инсульт:"}, + "Target:": {"ru": "цель:"}, + "Text": {"ru": "текст"}, + "Text:": {"ru": "текст:"}, + "The image could not be loaded.": {"ru": "изображение не может быть загружен."}, + "This can not be last layer": {"ru": "это не может быть последний слой"}, + "This can not be last layer.": {"ru": "это не может быть последним слоем."}, + "Tilt Shift": {"ru": "Tilt сдвиг"}, + "Times New Roman": {"ru": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"ru": "чтобы вставить из буфера обмена, используйте ctrl-v."}, + "Tools": {"ru": "инструменты"}, + "Top-left": {"ru": "верхний левый"}, + "Top-right": {"ru": "в правом верхнем углу"}, + "Total pixels:": {"ru": "общее число пикселей:"}, + "Translate error, can not find dictionary:": {"ru": "перевести ошибку, не может найти словарь:"}, + "Transparency #1:": {"ru": "прозрачность № 1:"}, + "Transparency #2:": {"ru": "прозрачность № 2:"}, + "Transparent:": {"ru": "прозрачный:"}, + "Trim": {"ru": "отделка"}, + "Trim:": {"ru": "отделка:"}, + "Turkish": {"ru": "турецкий"}, + "Undo": {"ru": "расстегивать"}, + "Unique colors:": {"ru": "уникальные цвета:"}, + "Up": {"ru": "вверх"}, + "V Radius:": {"ru": "радиус v:"}, + "Verdana": {"ru": "Verdana"}, + "Vertical": {"ru": "вертикальный"}, + "Vertical gap:": {"ru": "вертикальный зазор:"}, + "Vibrance": {"ru": "вибрация"}, + "Vignette": {"ru": "виньетка"}, + "Vignette amount:": {"ru": "количество виньетирования:"}, + "Vignette size:": {"ru": "размер виньетирования:"}, + "ViliusL": {"ru": "Viliusl"}, + "Vintage": {"ru": "марочный"}, + "Visible": {"ru": "видимый"}, + "Visible:": {"ru": "видимых:"}, + "WEBP - Weppy File Format": {"ru": "Webp - формат файла weppy"}, + "Website": {"ru": "веб-сайт"}, + "Width (%):": {"ru": "ширина (%):"}, + "Width (pixels):": {"ru": "ширина (в пикселях):"}, + "Width:": {"ru": "ширина:"}, + "Wrong file type, must be image or json.": {"ru": "неправильный тип файла, должен быть изображение или json."}, + "X end:": {"ru": "X конец:"}, + "X start:": {"ru": "начало x:"}, + "Y end:": {"ru": "Y конец:"}, + "Y start:": {"ru": "Y старт:"}, + "Yes": {"ru": "да"}, + "Your browser does not support this format.": {"ru": "ваш браузер не поддерживает этот формат."}, + "Your browser doesn't support canvas.": {"ru": "ваш браузер не поддерживает холст."}, + "Zoom": {"ru": "увеличить"}, + "Zoom In": {"ru": "приблизить"}, + "Zoom Out": {"ru": "уменьшить"}, + "Zoom in": {"ru": "приблизить"}, + "Zoom out": {"ru": "уменьшить"}, + "Zoom:": {"ru": "Zoom:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.xml new file mode 100644 index 00000000000..e413f9681d8 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/ru.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>ru.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.js new file mode 100644 index 00000000000..e6892ef2aec --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.js @@ -0,0 +1,342 @@ +var dict_tr = { + "2d": {"tr": "2d"}, + "3D position:": {"tr": "3d pozisyonlar:"}, + "3D size:": {"tr": "3d boyutu:"}, + "480p": {"tr": "480p"}, + "About": {"tr": "Hakkında"}, + "Add new layer": {"tr": "Yeni bir katman ekleyin"}, + "Advanced": {"tr": "Ileri"}, + "All": {"tr": "Herşey"}, + "Alpha": {"tr": "Alfa"}, + "Alpha:": {"tr": "Alfa:"}, + "Amount:": {"tr": "Tutar:"}, + "Anonymous": {"tr": "Anonim"}, + "Anti aliasing": {"tr": "Anti-aliasing"}, + "Area:": {"tr": "Bölge:"}, + "Arial": {"tr": "Arial"}, + "Arrow": {"tr": "Ok"}, + "Arrow keys": {"tr": "Ok tuşları"}, + "Attributes": {"tr": "Nitelikler"}, + "Author:": {"tr": "Yazar:"}, + "Auto adjust colors": {"tr": "Oto renkleri ayarlamak"}, + "Auto colorize": {"tr": "Otomatik colorize"}, + "Average:": {"tr": "Ortalama:"}, + "BMP - Windows Bitmap": {"tr": "Bmp - pencere bitmap"}, + "Basic": {"tr": "Temel"}, + "BezierCurve": {"tr": "Bézier eğrisi"}, + "Big grains level:": {"tr": "Büyük taneler seviye:"}, + "Black and White": {"tr": "Siyah ve beyaz"}, + "Blend": {"tr": "Harman"}, + "Blend:": {"tr": "Harman:"}, + "Blue": {"tr": "Mavi"}, + "Blue channel:": {"tr": "Mavi kanal:"}, + "Blur": {"tr": "Bulanıklık"}, + "Blur Radius:": {"tr": "Bulanıklık yarıçapı:"}, + "Blur tool": {"tr": "Bulanıklık aracı"}, + "Blur-Box": {"tr": "Bulanıklık-box"}, + "Blur-Gaussian": {"tr": "Bulanıklık-gauss"}, + "Blur-Stack": {"tr": "Bulanıklık-yığını"}, + "Blur-Zoom": {"tr": "Bulanıklık-zoom"}, + "Blur:": {"tr": "Bulanıklık:"}, + "Bold": {"tr": "Cesur"}, + "Bold Italic": {"tr": "Kalın italik"}, + "Borders": {"tr": "Sınırlar"}, + "Both": {"tr": "Her ikisi de"}, + "Bottom-left": {"tr": "Sol alt"}, + "Bottom-right": {"tr": "Sağ alt"}, + "Brightness:": {"tr": "Parlaklık:"}, + "Brush": {"tr": "Fırça"}, + "Bulge/Pinch": {"tr": "Bulge / tutam"}, + "Bulge/Pinch tool": {"tr": "Bulge / çimdik aracı"}, + "Burn": {"tr": "Yanmak"}, + "Burn/Dodge tool": {"tr": "/ dodge aracını yakmak"}, + "Cancel": {"tr": "Iptal etmek"}, + "Center x:": {"tr": "Merkez x:"}, + "Center y:": {"tr": "Merkez y:"}, + "Center:": {"tr": "Merkezi:"}, + "Channel:": {"tr": "Kanal:"}, + "Chrome": {"tr": "Krom"}, + "Circle": {"tr": "Daire"}, + "Clear": {"tr": "Açık"}, + "Clear selection": {"tr": "Seçimi temizle"}, + "Clone tool": {"tr": "Klon aracı"}, + "Color #1:": {"tr": "Renk # 1:"}, + "Color #2:": {"tr": "Renk # 2:"}, + "Color Zoom": {"tr": "Renk yakınlaştırma"}, + "Color adjust:": {"tr": "Renk ayarı:"}, + "Color corrections": {"tr": "Renk düzeltmeleri"}, + "Color to Alpha": {"tr": "Alfa renk"}, + "Color to alpha": {"tr": "Alfa renk"}, + "Color:": {"tr": "Renk:"}, + "Colorize": {"tr": "Renklendirme"}, + "Colors:": {"tr": "Renkler:"}, + "Composite": {"tr": "Bileşik"}, + "Composition:": {"tr": "Bileşim:"}, + "Contrast:": {"tr": "Kontrast:"}, + "Copy selection": {"tr": "Kopya seçimi"}, + "Courier": {"tr": "Kurye"}, + "Crop": {"tr": "Ekin"}, + "Crop Selection": {"tr": "Kırpma seçimi"}, + "Curve": {"tr": "Eğri"}, + "Custom": {"tr": "Görenek"}, + "Cut selection": {"tr": "Kesme seçimi"}, + "Decrease color depth": {"tr": "Renk derinliğini azaltmak"}, + "Decrease colors": {"tr": "Azalış renkleri"}, + "Default": {"tr": "Varsayılan"}, + "Del": {"tr": "Del"}, + "Delete": {"tr": "Silmek"}, + "Delete selection": {"tr": "Seçimi sil"}, + "Denoise": {"tr": "Denoise"}, + "Desaturate": {"tr": "Desaturate"}, + "Desaturation:": {"tr": "Desatürasyon:"}, + "Description:": {"tr": "Açıklama:"}, + "Differences": {"tr": "Farklılıklar"}, + "Differences Down": {"tr": "Aşağı farklar"}, + "Dither": {"tr": "Titreme"}, + "Dithering:": {"tr": "Taklidi:"}, + "Dot Screen": {"tr": "Nokta ekranı"}, + "Down": {"tr": "Aşağı"}, + "Downloaded": {"tr": "Indirilen"}, + "Draw circle": {"tr": "Daire çizin"}, + "Draw letters": {"tr": "Harfleri çizin"}, + "Draw line": {"tr": "çekme hattı"}, + "Draw rectangle": {"tr": "Dikdörtgen çizer"}, + "Duplicate": {"tr": "çift"}, + "Duplicate layer": {"tr": "Yinelenen katman"}, + "Dusts level:": {"tr": "Tozlar seviye:"}, + "Edge": {"tr": "Kenar"}, + "Edit": {"tr": "Düzenleme"}, + "Effects": {"tr": "Etkileri"}, + "Email:": {"tr": "E-posta:"}, + "Emboss": {"tr": "Kabartma yapmak"}, + "Empty data": {"tr": "Boş veri"}, + "English": {"tr": "Ingilizce"}, + "Enrich": {"tr": "Zenginleştirmek"}, + "Enter angle (0-360):": {"tr": "Açı (0-360) girin:"}, + "Erase": {"tr": "Silmek"}, + "Error": {"tr": "Hata"}, + "Error:": {"tr": "Hata:"}, + "Español": {"tr": "Español"}, + "Exponent:": {"tr": "üstel:"}, + "Exposure level:": {"tr": "Pozlama seviyesi:"}, + "Factor:": {"tr": "Faktörü:"}, + "File": {"tr": "Dosya"}, + "File name:": {"tr": "Dosya adı:"}, + "Fill": {"tr": "Doldurmak"}, + "Fill style:": {"tr": "Fill style:"}, + "Fit": {"tr": "Fit"}, + "Fit window": {"tr": "Fit pencere"}, + "Flatten Image": {"tr": "Görüntüyü düzleştirmek"}, + "Flip": {"tr": "çevirmek"}, + "Font family:": {"tr": "Font ailesi:"}, + "Font style:": {"tr": "Yazı stili:"}, + "French": {"tr": "Fransızca"}, + "Full HD, 1080p": {"tr": "Full hd, 1080p"}, + "Fur": {"tr": "Kürk"}, + "Gap:": {"tr": "Boşluk:"}, + "German": {"tr": "Almanca"}, + "GitHub:": {"tr": "Github:"}, + "Gradient": {"tr": "Eğim"}, + "Gradient Radius:": {"tr": "Gradyan yarıçapı:"}, + "Grains": {"tr": "Taneler"}, + "Grains level:": {"tr": "Taneleri seviye:"}, + "Gray": {"tr": "Gri"}, + "GrayScale": {"tr": "Gri tonlama"}, + "Green": {"tr": "Yeşil"}, + "Green channel:": {"tr": "Yeşil kanal:"}, + "Greyscale:": {"tr": "Gri tonlama:"}, + "Grid": {"tr": "ızgara"}, + "Grid on/off": {"tr": "Açma / kapama izgara"}, + "Grouped": {"tr": "Grouped"}, + "H Radius:": {"tr": "H yarıçapı:"}, + "Heatmap": {"tr": "Sıcaklık haritası"}, + "Height (%):": {"tr": "Yükseklik (%):"}, + "Height (pixels):": {"tr": "Yükseklik (piksel):"}, + "Height:": {"tr": "Yükseklik:"}, + "Help": {"tr": "Yardım et"}, + "Helvetica": {"tr": "Helvetica"}, + "Hermite": {"tr": "Hermite"}, + "Histogram": {"tr": "Histogram"}, + "Histogram:": {"tr": "Histogram:"}, + "Horizontal": {"tr": "Yatay"}, + "Horizontal gap:": {"tr": "Yatay boşluk:"}, + "Hue:": {"tr": "Hue:"}, + "Image": {"tr": "Görüntü"}, + "Impact": {"tr": "Darbe"}, + "Information": {"tr": "Bilgi"}, + "Italiano": {"tr": "Italiano"}, + "Italic": {"tr": "Italik"}, + "JPG - JPG/JPEG Format": {"tr": "Jpg - jpg / jpeg formatında"}, + "JPG Compression": {"tr": "Jpg sıkıştırma"}, + "JSON - Full layers data": {"tr": "Json - tam katmanları verileri"}, + "Japanese": {"tr": "Japonca"}, + "Key-points": {"tr": "Kilit noktaları"}, + "Keyboard Shortcuts": {"tr": "Klavye kısayolları"}, + "Korean": {"tr": "Koreli"}, + "Language": {"tr": "Dil"}, + "Last modified": {"tr": "Son düzenleme"}, + "Layer": {"tr": "Tabaka"}, + "Layers": {"tr": "Katmanlar"}, + "Left": {"tr": "Sol"}, + "Level:": {"tr": "Seviye:"}, + "Levels:": {"tr": "Seviyeleri:"}, + "Lietuvių": {"tr": "Litvanya"}, + "Light leak:": {"tr": "Işık sızıntısı:"}, + "Limit:": {"tr": "Limit:"}, + "Luminance:": {"tr": "Parlaklık:"}, + "Luminosity:": {"tr": "Parlaklığı:"}, + "Magic Wand Tool": {"tr": "Sihirli değnek aracı"}, + "Merge": {"tr": "Birleşmek"}, + "Merge Down": {"tr": "Aşağı birleştirme"}, + "Mode:": {"tr": "Modu:"}, + "Mosaic": {"tr": "Mozaik"}, + "Mouse:": {"tr": "Fare:"}, + "Move": {"tr": "Hareket"}, + "Move active layer": {"tr": "Aktif katman hareket"}, + "Move down": {"tr": "Aşağı inmek"}, + "Move up": {"tr": "Yukarı çıkmak"}, + "Multi-line": {"tr": "çok satırlı"}, + "Name:": {"tr": "Adı:"}, + "Negative": {"tr": "Negatif"}, + "New": {"tr": "Yeni"}, + "New file...": {"tr": "Yeni dosya..."}, + "New layer": {"tr": "Yeni katman"}, + "No": {"tr": "Yok hayır"}, + "Normal": {"tr": "Normal"}, + "Notice": {"tr": "Ihbar"}, + "Notice:": {"tr": "Uyarı:"}, + "Oil": {"tr": "Sıvı yağ"}, + "Ok": {"tr": "Tamam"}, + "Online image editor": {"tr": "çevrimiçi resim editörü"}, + "Opacity": {"tr": "Saydamlık"}, + "Open": {"tr": "Açık"}, + "Original size": {"tr": "Orijinal boyut"}, + "PNG - Portable Network Graphics": {"tr": "Png - taşınabilir ağ grafik"}, + "Paste": {"tr": "Yapıştırmak"}, + "Paste selection": {"tr": "Yapıştır seçimi"}, + "Pencil": {"tr": "Kalem"}, + "Perspective": {"tr": "Perspektif"}, + "Pick Color": {"tr": "Rengi seçin"}, + "Pixels:": {"tr": "Piksel:"}, + "Portuguese": {"tr": "Portekizce"}, + "Power:": {"tr": "Güç:"}, + "Pre-Blur:": {"tr": "ön bulanıklık:"}, + "Preview": {"tr": "önizleme"}, + "Print": {"tr": "Baskı"}, + "Quality (jpeg):": {"tr": "Kalitesi (jpeg):"}, + "Quality:": {"tr": "Kalite:"}, + "Quick load": {"tr": "Hızlı yük"}, + "Quick save": {"tr": "Hızlı kaydet"}, + "Radial": {"tr": "Radyal"}, + "Radius:": {"tr": "Radius:"}, + "Range:": {"tr": "Menzil:"}, + "Reason:": {"tr": "Sebep:"}, + "Recover alpha": {"tr": "Alfa kurtarmak"}, + "Red": {"tr": "Kırmızı"}, + "Red channel:": {"tr": "Kırmızı kanal:"}, + "Rename": {"tr": "Adını değiştirmek"}, + "Rename layer": {"tr": "Katmanı yeniden adlandırmak"}, + "Replace Color": {"tr": "Rengini değiştirme"}, + "Replace color": {"tr": "Rengini değiştirme"}, + "Replacement:": {"tr": "Değiştirme:"}, + "Resample - Hermite": {"tr": "Yeniden örnekle - hermite"}, + "Reset zoom level": {"tr": "Sıfırlama yakınlaştırma düzeyi"}, + "Resize": {"tr": "Yeniden boyutlandırma"}, + "Resolution:": {"tr": "çözüm:"}, + "Restore alpha": {"tr": "Alfa restore"}, + "Right": {"tr": "Sağ"}, + "Rotate": {"tr": "Döndür"}, + "Rotate left": {"tr": "Sola dön"}, + "Rotation": {"tr": "Rotasyon"}, + "Russian": {"tr": "Rusça"}, + "Saturation:": {"tr": "Doyma:"}, + "Save": {"tr": "Kayıt etmek"}, + "Save as": {"tr": "Farklı kaydet"}, + "Save as type:": {"tr": "Kayıt türü:"}, + "Save layers:": {"tr": "Katmanları kaydet:"}, + "Save resolution:": {"tr": "çözünürlüğü kaydet:"}, + "Select all": {"tr": "Hepsini seç"}, + "Select area first": {"tr": "Alan seçin ilk"}, + "Select area tool": {"tr": "Alan seçin aracı"}, + "Select color": {"tr": "Renk seç"}, + "Select object tool": {"tr": "Seç nesne aracı"}, + "Selected": {"tr": "Seçilmiş"}, + "Sensitivity:": {"tr": "Duyarlılık:"}, + "Sepia": {"tr": "Sepya"}, + "Shaded": {"tr": "Gölgeli"}, + "Shadow blur:": {"tr": "Gölge bulanıklık:"}, + "Shadow color:": {"tr": "Gölge rengi:"}, + "Shadow:": {"tr": "Gölge:"}, + "Sharpen": {"tr": "Keskinleştirmek"}, + "Sharpen tool": {"tr": "Aracı keskinleştirmek"}, + "Sharpen:": {"tr": "Sharpen:"}, + "Show / Hide": {"tr": "Göster / gizle"}, + "Simple": {"tr": "Basit"}, + "Size": {"tr": "Boyut"}, + "Size:": {"tr": "Boyut:"}, + "Sketchy": {"tr": "Kabataslak"}, + "Solarize": {"tr": "Güneşte bırakmak"}, + "Sorry": {"tr": "üzgünüm"}, + "Sorry, image is too big, max 5 MB.": {"tr": "Maalesef resim çok büyük, en fazla 5 mb."}, + "Source is empty, right click on image first.": {"tr": "Kaynak boş, doğru ilk resmin üzerine tıklayın."}, + "Sprites": {"tr": "Sprite"}, + "Square": {"tr": "Kare"}, + "Strength:": {"tr": "Güç:"}, + "Strict": {"tr": "Sıkı"}, + "Stroke": {"tr": "Inme"}, + "Stroke size:": {"tr": "Inme boyutu:"}, + "Target:": {"tr": "Hedef:"}, + "Text": {"tr": "Metin"}, + "Text:": {"tr": "Metin:"}, + "The image could not be loaded.": {"tr": "Görüntü yüklenemedi."}, + "This can not be last layer": {"tr": "Bu son tabaka olamaz"}, + "This can not be last layer.": {"tr": "Bu son tabaka olamaz."}, + "Tilt Shift": {"tr": "Tilt shift"}, + "Times New Roman": {"tr": "Times new roman"}, + "To paste from clipboard, use Ctrl-V.": {"tr": "Panodan yapıştırmak için, ctrl-v kullanın."}, + "Tools": {"tr": "Araçlar"}, + "Top-left": {"tr": "Sol üst"}, + "Top-right": {"tr": "Sağ üst"}, + "Total pixels:": {"tr": "Toplam piksel:"}, + "Translate error, can not find dictionary:": {"tr": "Sözlüğü bulamıyorum, hata çevir:"}, + "Transparency #1:": {"tr": "şeffaflık # 1:"}, + "Transparency #2:": {"tr": "şeffaflık # 2:"}, + "Transparent:": {"tr": "şeffaf:"}, + "Trim": {"tr": "Süs"}, + "Trim:": {"tr": "Trim:"}, + "Turkish": {"tr": "Türk"}, + "Undo": {"tr": "Geri alma"}, + "Unique colors:": {"tr": "Benzersiz renkler:"}, + "Up": {"tr": "Yukarı"}, + "V Radius:": {"tr": "V yarıçapı:"}, + "Verdana": {"tr": "Verdana"}, + "Vertical": {"tr": "Dikey"}, + "Vertical gap:": {"tr": "Dikey boşluk:"}, + "Vibrance": {"tr": "Titreşim"}, + "Vignette": {"tr": "Skeç"}, + "Vignette amount:": {"tr": "Vignette miktarı:"}, + "Vignette size:": {"tr": "Vignette boyutu:"}, + "ViliusL": {"tr": "Viliusl"}, + "Vintage": {"tr": "Bağbozumu"}, + "Visible": {"tr": "Gözle görülür"}, + "Visible:": {"tr": "Gözle görülür:"}, + "WEBP - Weppy File Format": {"tr": "Webp - weppy dosya biçimi"}, + "Website": {"tr": "Web sitesi"}, + "Width (%):": {"tr": "Genişlik (%):"}, + "Width (pixels):": {"tr": "Genişlik (piksel):"}, + "Width:": {"tr": "Genişlik:"}, + "Wrong file type, must be image or json.": {"tr": "Yanlış dosya türü, görüntü veya json olmalıdır."}, + "X end:": {"tr": "X bitiş:"}, + "X start:": {"tr": "X başlangıcı:"}, + "Y end:": {"tr": "Y bitiş:"}, + "Y start:": {"tr": "Y başlangıcı:"}, + "Yes": {"tr": "Evet"}, + "Your browser does not support this format.": {"tr": "Tarayıcınız bu biçimi desteklemiyor."}, + "Your browser doesn't support canvas.": {"tr": "Tarayıcınız tuval desteklemiyor."}, + "Zoom": {"tr": "Yakınlaştırma"}, + "Zoom In": {"tr": "Yakınlaştır"}, + "Zoom Out": {"tr": "Uzaklaştır"}, + "Zoom in": {"tr": "Yakınlaştır"}, + "Zoom out": {"tr": "Uzaklaştır"}, + "Zoom:": {"tr": "Zoom:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.xml new file mode 100644 index 00000000000..84ed59f271d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/tr.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>tr.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.js new file mode 100644 index 00000000000..7b5347618a1 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.js @@ -0,0 +1,342 @@ +var dict_zh = { + "2d": {"zh": "2d"}, + "3D position:": {"zh": "三维位置:"}, + "3D size:": {"zh": "三维尺寸:"}, + "480p": {"zh": "480p"}, + "About": {"zh": "关于"}, + "Add new layer": {"zh": "添加新图层"}, + "Advanced": {"zh": "高级"}, + "All": {"zh": "所有"}, + "Alpha": {"zh": "Α"}, + "Alpha:": {"zh": "Α:"}, + "Amount:": {"zh": "量:"}, + "Anonymous": {"zh": "匿名"}, + "Anti aliasing": {"zh": "反走样"}, + "Area:": {"zh": "区:"}, + "Arial": {"zh": "宋体"}, + "Arrow": {"zh": "箭头"}, + "Arrow keys": {"zh": "方向键"}, + "Attributes": {"zh": "属性"}, + "Author:": {"zh": "作者:"}, + "Auto adjust colors": {"zh": "自动调整颜色"}, + "Auto colorize": {"zh": "汽车着色"}, + "Average:": {"zh": "平均:"}, + "BMP - Windows Bitmap": {"zh": "Bmp - windows位图"}, + "Basic": {"zh": "基本"}, + "BezierCurve": {"zh": "贝兹曲线"}, + "Big grains level:": {"zh": "大粒级:"}, + "Black and White": {"zh": "黑与白"}, + "Blend": {"zh": "混合"}, + "Blend:": {"zh": "混合:"}, + "Blue": {"zh": "蓝色"}, + "Blue channel:": {"zh": "蓝色通道:"}, + "Blur": {"zh": "模糊"}, + "Blur Radius:": {"zh": "模糊半径:"}, + "Blur tool": {"zh": "模糊工具"}, + "Blur-Box": {"zh": "模糊箱"}, + "Blur-Gaussian": {"zh": "模糊 - 高斯"}, + "Blur-Stack": {"zh": "模糊堆栈"}, + "Blur-Zoom": {"zh": "模糊变焦"}, + "Blur:": {"zh": "模糊:"}, + "Bold": {"zh": "胆大"}, + "Bold Italic": {"zh": "加粗斜体"}, + "Borders": {"zh": "国界"}, + "Both": {"zh": "都"}, + "Bottom-left": {"zh": "左下方"}, + "Bottom-right": {"zh": "右下角"}, + "Brightness:": {"zh": "亮度:"}, + "Brush": {"zh": "刷"}, + "Bulge/Pinch": {"zh": "隆起/捏"}, + "Bulge/Pinch tool": {"zh": "隆起/捏工具"}, + "Burn": {"zh": "烧伤"}, + "Burn/Dodge tool": {"zh": "刻录/减淡工具"}, + "Cancel": {"zh": "取消"}, + "Center x:": {"zh": "中心x:"}, + "Center y:": {"zh": "中心y:"}, + "Center:": {"zh": "中央:"}, + "Channel:": {"zh": "渠道:"}, + "Chrome": {"zh": "铬"}, + "Circle": {"zh": "圈"}, + "Clear": {"zh": "明确"}, + "Clear selection": {"zh": "清除选择"}, + "Clone tool": {"zh": "克隆工具"}, + "Color #1:": {"zh": "颜色#1:"}, + "Color #2:": {"zh": "颜色#2:"}, + "Color Zoom": {"zh": "彩色变焦"}, + "Color adjust:": {"zh": "颜色调整:"}, + "Color corrections": {"zh": "色彩校正"}, + "Color to Alpha": {"zh": "颜色阿尔法"}, + "Color to alpha": {"zh": "颜色阿尔法"}, + "Color:": {"zh": "颜色:"}, + "Colorize": {"zh": "上色"}, + "Colors:": {"zh": "颜色:"}, + "Composite": {"zh": "综合"}, + "Composition:": {"zh": "组成:"}, + "Contrast:": {"zh": "对比:"}, + "Copy selection": {"zh": "选择复制"}, + "Courier": {"zh": "信使"}, + "Crop": {"zh": "作物"}, + "Crop Selection": {"zh": "作物选择"}, + "Curve": {"zh": "曲线"}, + "Custom": {"zh": "习俗"}, + "Cut selection": {"zh": "剪切选择"}, + "Decrease color depth": {"zh": "减小色深"}, + "Decrease colors": {"zh": "减少颜色"}, + "Default": {"zh": "默认"}, + "Del": {"zh": "德尔"}, + "Delete": {"zh": "删除"}, + "Delete selection": {"zh": "删除选择"}, + "Denoise": {"zh": "降噪"}, + "Desaturate": {"zh": "去色"}, + "Desaturation:": {"zh": "饱和度:"}, + "Description:": {"zh": "描述:"}, + "Differences": {"zh": "差异"}, + "Differences Down": {"zh": "差异下跌"}, + "Dither": {"zh": "抖动"}, + "Dithering:": {"zh": "抖动:"}, + "Dot Screen": {"zh": "点屏幕"}, + "Down": {"zh": "下"}, + "Downloaded": {"zh": "下载"}, + "Draw circle": {"zh": "绘制圆"}, + "Draw letters": {"zh": "绘制文字"}, + "Draw line": {"zh": "绘制线"}, + "Draw rectangle": {"zh": "绘制矩形"}, + "Duplicate": {"zh": "重复"}, + "Duplicate layer": {"zh": "复制层"}, + "Dusts level:": {"zh": "粉尘等级:"}, + "Edge": {"zh": "边缘"}, + "Edit": {"zh": "编辑"}, + "Effects": {"zh": "效果"}, + "Email:": {"zh": "电子邮件:"}, + "Emboss": {"zh": "拷花"}, + "Empty data": {"zh": "空数据"}, + "English": {"zh": "英语"}, + "Enrich": {"zh": "丰富"}, + "Enter angle (0-360):": {"zh": "输入角度(0-360):"}, + "Erase": {"zh": "抹去"}, + "Error": {"zh": "错误"}, + "Error:": {"zh": "错误:"}, + "Español": {"zh": "西班牙语"}, + "Exponent:": {"zh": "指数:"}, + "Exposure level:": {"zh": "曝光量:"}, + "Factor:": {"zh": "因子:"}, + "File": {"zh": "文件"}, + "File name:": {"zh": "文件名:"}, + "Fill": {"zh": "填"}, + "Fill style:": {"zh": "填充样式:"}, + "Fit": {"zh": "适合"}, + "Fit window": {"zh": "适合窗口"}, + "Flatten Image": {"zh": "拼合图像"}, + "Flip": {"zh": "翻动"}, + "Font family:": {"zh": "字体系列:"}, + "Font style:": {"zh": "字体样式:"}, + "French": {"zh": "法国"}, + "Full HD, 1080p": {"zh": "全高清1080p"}, + "Fur": {"zh": "毛皮"}, + "Gap:": {"zh": "间隙:"}, + "German": {"zh": "德语"}, + "GitHub:": {"zh": "Github上:"}, + "Gradient": {"zh": "梯度"}, + "Gradient Radius:": {"zh": "渐变半径:"}, + "Grains": {"zh": "谷物"}, + "Grains level:": {"zh": "谷物等级:"}, + "Gray": {"zh": "灰色"}, + "GrayScale": {"zh": "灰度"}, + "Green": {"zh": "绿色"}, + "Green channel:": {"zh": "绿色通道:"}, + "Greyscale:": {"zh": "灰度:"}, + "Grid": {"zh": "格"}, + "Grid on/off": {"zh": "格的开/关"}, + "Grouped": {"zh": "分组"}, + "H Radius:": {"zh": "^ h半径:"}, + "Heatmap": {"zh": "热图"}, + "Height (%):": {"zh": "高度(%):"}, + "Height (pixels):": {"zh": "高度(像素):"}, + "Height:": {"zh": "高度:"}, + "Help": {"zh": "帮帮我"}, + "Helvetica": {"zh": "黑体"}, + "Hermite": {"zh": "埃尔米特"}, + "Histogram": {"zh": "柱状图"}, + "Histogram:": {"zh": "柱状图:"}, + "Horizontal": {"zh": "横"}, + "Horizontal gap:": {"zh": "水平的差距:"}, + "Hue:": {"zh": "色调:"}, + "Image": {"zh": "图片"}, + "Impact": {"zh": "碰撞"}, + "Information": {"zh": "信息"}, + "Italiano": {"zh": "意大利语"}, + "Italic": {"zh": "斜体"}, + "JPG - JPG/JPEG Format": {"zh": "Jpg - jpg / jpeg格式"}, + "JPG Compression": {"zh": "Jpg压缩"}, + "JSON - Full layers data": {"zh": "Json - 全层的数据"}, + "Japanese": {"zh": "日本"}, + "Key-points": {"zh": "关键点"}, + "Keyboard Shortcuts": {"zh": "键盘快捷键"}, + "Korean": {"zh": "朝鲜的"}, + "Language": {"zh": "语言"}, + "Last modified": {"zh": "上一次更改"}, + "Layer": {"zh": "层"}, + "Layers": {"zh": "层"}, + "Left": {"zh": "剩下"}, + "Level:": {"zh": "水平:"}, + "Levels:": {"zh": "级别:"}, + "Lietuvių": {"zh": "立陶宛ų"}, + "Light leak:": {"zh": "漏光:"}, + "Limit:": {"zh": "限制:"}, + "Luminance:": {"zh": "亮度:"}, + "Luminosity:": {"zh": "亮度:"}, + "Magic Wand Tool": {"zh": "魔术棒工具"}, + "Merge": {"zh": "合并"}, + "Merge Down": {"zh": "向下合并"}, + "Mode:": {"zh": "模式:"}, + "Mosaic": {"zh": "镶嵌"}, + "Mouse:": {"zh": "老鼠:"}, + "Move": {"zh": "移动"}, + "Move active layer": {"zh": "移动有源层"}, + "Move down": {"zh": "下移"}, + "Move up": {"zh": "提升"}, + "Multi-line": {"zh": "多线"}, + "Name:": {"zh": "名称:"}, + "Negative": {"zh": "负"}, + "New": {"zh": "新"}, + "New file...": {"zh": "新的文件..."}, + "New layer": {"zh": "新建图层"}, + "No": {"zh": "没有"}, + "Normal": {"zh": "正常"}, + "Notice": {"zh": "注意"}, + "Notice:": {"zh": "注意:"}, + "Oil": {"zh": "油"}, + "Ok": {"zh": "好"}, + "Online image editor": {"zh": "在线图像编辑器"}, + "Opacity": {"zh": "不透明度"}, + "Open": {"zh": "打开"}, + "Original size": {"zh": "原始尺寸"}, + "PNG - Portable Network Graphics": {"zh": "Png - 便携式网络图形"}, + "Paste": {"zh": "糊"}, + "Paste selection": {"zh": "粘贴选择"}, + "Pencil": {"zh": "铅笔"}, + "Perspective": {"zh": "透视"}, + "Pick Color": {"zh": "挑选颜色"}, + "Pixels:": {"zh": "像素:"}, + "Portuguese": {"zh": "葡萄牙语"}, + "Power:": {"zh": "功率:"}, + "Pre-Blur:": {"zh": "预模糊:"}, + "Preview": {"zh": "预习"}, + "Print": {"zh": "打印"}, + "Quality (jpeg):": {"zh": "质量(jpeg):"}, + "Quality:": {"zh": "质量:"}, + "Quick load": {"zh": "快速负载"}, + "Quick save": {"zh": "快速保存"}, + "Radial": {"zh": "径向"}, + "Radius:": {"zh": "半径:"}, + "Range:": {"zh": "范围:"}, + "Reason:": {"zh": "原因:"}, + "Recover alpha": {"zh": "阿尔法恢复"}, + "Red": {"zh": "红"}, + "Red channel:": {"zh": "红色通道:"}, + "Rename": {"zh": "改名"}, + "Rename layer": {"zh": "重命名层"}, + "Replace Color": {"zh": "更换颜色"}, + "Replace color": {"zh": "更换颜色"}, + "Replacement:": {"zh": "替代:"}, + "Resample - Hermite": {"zh": "重新取样 - 埃尔米特"}, + "Reset zoom level": {"zh": "复位缩放级别"}, + "Resize": {"zh": "调整"}, + "Resolution:": {"zh": "解析度:"}, + "Restore alpha": {"zh": "恢复阿尔法"}, + "Right": {"zh": "对"}, + "Rotate": {"zh": "旋转"}, + "Rotate left": {"zh": "向左旋转"}, + "Rotation": {"zh": "回转"}, + "Russian": {"zh": "俄语"}, + "Saturation:": {"zh": "饱和:"}, + "Save": {"zh": "保存"}, + "Save as": {"zh": "另存为"}, + "Save as type:": {"zh": "保存类型:"}, + "Save layers:": {"zh": "保存层:"}, + "Save resolution:": {"zh": "保存分辨率:"}, + "Select all": {"zh": "全选"}, + "Select area first": {"zh": "选择区第一"}, + "Select area tool": {"zh": "选择区域工具"}, + "Select color": {"zh": "选择颜色"}, + "Select object tool": {"zh": "对象选择工具"}, + "Selected": {"zh": "选"}, + "Sensitivity:": {"zh": "灵敏度:"}, + "Sepia": {"zh": "乌贼"}, + "Shaded": {"zh": "阴影"}, + "Shadow blur:": {"zh": "阴影模糊:"}, + "Shadow color:": {"zh": "阴影颜色:"}, + "Shadow:": {"zh": "阴影:"}, + "Sharpen": {"zh": "磨"}, + "Sharpen tool": {"zh": "锐化工具"}, + "Sharpen:": {"zh": "锐化:"}, + "Show / Hide": {"zh": "显示隐藏"}, + "Simple": {"zh": "简单"}, + "Size": {"zh": "尺寸"}, + "Size:": {"zh": "尺寸:"}, + "Sketchy": {"zh": "略"}, + "Solarize": {"zh": "曝光过度"}, + "Sorry": {"zh": "抱歉"}, + "Sorry, image is too big, max 5 MB.": {"zh": "对不起,图片太大,最大为5 mb。"}, + "Source is empty, right click on image first.": {"zh": "资料来源是空的,用鼠标右键点击图片第一。"}, + "Sprites": {"zh": "精灵"}, + "Square": {"zh": "广场"}, + "Strength:": {"zh": "强度:"}, + "Strict": {"zh": "严格"}, + "Stroke": {"zh": "行程"}, + "Stroke size:": {"zh": "笔触大小:"}, + "Target:": {"zh": "目标:"}, + "Text": {"zh": "文本"}, + "Text:": {"zh": "文本:"}, + "The image could not be loaded.": {"zh": "图像无法加载。"}, + "This can not be last layer": {"zh": "这不可能是最后一层"}, + "This can not be last layer.": {"zh": "这不可能是最后一层。"}, + "Tilt Shift": {"zh": "倾斜移位"}, + "Times New Roman": {"zh": "英语字体格式一种"}, + "To paste from clipboard, use Ctrl-V.": {"zh": "若要从剪贴板粘贴使用ctrl-v。"}, + "Tools": {"zh": "工具"}, + "Top-left": {"zh": "左上角"}, + "Top-right": {"zh": "右上"}, + "Total pixels:": {"zh": "总像素:"}, + "Translate error, can not find dictionary:": {"zh": "翻译错误,找不到词典:"}, + "Transparency #1:": {"zh": "透明#1:"}, + "Transparency #2:": {"zh": "透明#2:"}, + "Transparent:": {"zh": "透明:"}, + "Trim": {"zh": "修剪"}, + "Trim:": {"zh": "修剪:"}, + "Turkish": {"zh": "土耳其"}, + "Undo": {"zh": "解开"}, + "Unique colors:": {"zh": "独特的颜色:"}, + "Up": {"zh": "向上"}, + "V Radius:": {"zh": "V半径:"}, + "Verdana": {"zh": "宋体"}, + "Vertical": {"zh": "垂直"}, + "Vertical gap:": {"zh": "垂直间隙:"}, + "Vibrance": {"zh": "鲜艳"}, + "Vignette": {"zh": "小插图"}, + "Vignette amount:": {"zh": "晕影量:"}, + "Vignette size:": {"zh": "晕影大小:"}, + "ViliusL": {"zh": "Viliusl"}, + "Vintage": {"zh": "酿酒"}, + "Visible": {"zh": "可见"}, + "Visible:": {"zh": "可见:"}, + "WEBP - Weppy File Format": {"zh": "Webp - weppy文件格式"}, + "Website": {"zh": "网站"}, + "Width (%):": {"zh": "宽度(%):"}, + "Width (pixels):": {"zh": "宽度(像素):"}, + "Width:": {"zh": "宽度:"}, + "Wrong file type, must be image or json.": {"zh": "错误的文件类型,必须是图像或json。"}, + "X end:": {"zh": "X最终:"}, + "X start:": {"zh": "X起动:"}, + "Y end:": {"zh": "Y结尾:"}, + "Y start:": {"zh": "是开始:"}, + "Yes": {"zh": "是"}, + "Your browser does not support this format.": {"zh": "你的浏览器不支持此格式。"}, + "Your browser doesn't support canvas.": {"zh": "您的浏览器不支持画布。"}, + "Zoom": {"zh": "放大"}, + "Zoom In": {"zh": "放大"}, + "Zoom Out": {"zh": "缩小"}, + "Zoom in": {"zh": "放大"}, + "Zoom out": {"zh": "缩小"}, + "Zoom:": {"zh": "放大:"}, +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.xml new file mode 100644 index 00000000000..4dd33fbd727 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/languages/zh.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>zh.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs.xml new file mode 100644 index 00000000000..566d9b5e7ed --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>libs</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.js new file mode 100644 index 00000000000..9906cf4679d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.js @@ -0,0 +1,294 @@ +/* global WIDTH, HEIGHT, parseInt */ + +var HELPER = new HELPER_CLASS(); + +/** + * various helpers + * + * @author ViliusL + */ +function HELPER_CLASS() { + var time; + + this.timer_init = function () { + time = Date.now(); + }; + + this.timer = function (s, echo) { + var str = "time(" + s + ") = " + (Math.round(Date.now() - time) / 1000) + " s"; + if (echo === true) + return str; + else + console.log(str); + }; + + this.strpos = function (haystack, needle, offset) { + var i = (haystack + '').indexOf(needle, (offset || 0)); + return i === -1 ? false : i; + }; + + this.getCookie = function (NameOfCookie) { + if (document.cookie.length > 0){ + begin = document.cookie.indexOf(NameOfCookie + "="); + if (begin != -1){ + begin += NameOfCookie.length + 1; + end = document.cookie.indexOf(";", begin); + if (end == -1) + end = document.cookie.length; + return unescape(document.cookie.substring(begin, end)); + } + } + return ''; + }; + + this.setCookie = function (NameOfCookie, value, expiredays) { + if(expiredays == undefined) + expiredays = 180; + var ExpireDate = new Date(); + ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000)); + document.cookie = NameOfCookie + "=" + escape(value) + + ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString()); + }; + + this.delCookie = function (NameOfCookie) { + if (HELPER.getCookie(NameOfCookie)) { + document.cookie = NameOfCookie + "=" + + "; expires=Thu, 01-Jan-70 00:00:01 GMT"; + } + }; + + this.getRandomInt = function (min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + }; + + this.font_pixel_to_height = function (px) { + return Math.round(px * 0.75); + }; + + this.rgbToHex = function (r, g, b) { + if (r > 255 || g > 255 || b > 255) + throw "Invalid color component"; + return ((r << 16) | (g << 8) | b).toString(16); + }; + + this.rgb2hex_all = function (rgb) { + rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); + return "#" + HELPER.hex(rgb[1]) + HELPER.hex(rgb[2]) + HELPER.hex(rgb[3]); + }; + + this.hex = function (x) { + return ("0" + parseInt(x).toString(16)).slice(-2); + }; + + this.hex2rgb = function (hex) { + if (hex[0] == "#") + hex = hex.substr(1); + if (hex.length == 3) { + var temp = hex; + hex = ''; + temp = /^([a-f0-9])([a-f0-9])([a-f0-9])$/i.exec(temp).slice(1); + for (var i = 0; i < 3; i++) + hex += temp[i] + temp[i]; + } + var triplets = /^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i.exec(hex).slice(1); + return { + r: parseInt(triplets[0], 16), + g: parseInt(triplets[1], 16), + b: parseInt(triplets[2], 16), + a: 255 + }; + }; + + this.remove_selection = function () { + if (window.getSelection) { + if (window.getSelection().empty) // Chrome + window.getSelection().empty(); + else if (window.getSelection().removeAllRanges) // Firefox + window.getSelection().removeAllRanges(); + } + else if (document.selection) // IE? + document.selection.empty(); + }; + + this.get_dimensions = function () { + var theWidth, theHeight; + if (window.innerWidth) { + theWidth = window.innerWidth; + } + else if (document.documentElement && document.documentElement.clientWidth) { + theWidth = document.documentElement.clientWidth; + } + else if (document.body) { + theWidth = document.body.clientWidth; + } + if (window.innerHeight) { + theHeight = window.innerHeight; + } + else if (document.documentElement && document.documentElement.clientHeight) { + theHeight = document.documentElement.clientHeight; + } + else if (document.body) { + theHeight = document.body.clientHeight; + } + return [theWidth, theHeight]; + }; + + //credits: richard maloney 2006 + this.darkenColor = function (color, v) { + if (color.length > 6) { + color = color.substring(1, color.length); + } + var rgb = parseInt(color, 16); + var r = Math.abs(((rgb >> 16) & 0xFF) + v); + if (r > 255) + r = r - (r - 255); + var g = Math.abs(((rgb >> 8) & 0xFF) + v); + if (g > 255) + g = g - (g - 255); + var b = Math.abs((rgb & 0xFF) + v); + if (b > 255) + b = b - (b - 255); + r = Number(r < 0 || isNaN(r)) ? 0 : ((r > 255) ? 255 : r).toString(16); + if (r.length == 1) + r = '0' + r; + g = Number(g < 0 || isNaN(g)) ? 0 : ((g > 255) ? 255 : g).toString(16); + if (g.length == 1) + g = '0' + g; + b = Number(b < 0 || isNaN(b)) ? 0 : ((b > 255) ? 255 : b).toString(16); + if (b.length == 1) + b = '0' + b; + return "#" + r + g + b; + }; + + //IntegraXor Web SCADA - JavaScript Number Formatter, author: KPL, KHL + this.number_format = function (n, decPlaces, thouSeparator, decSeparator) { + var decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces; + var decSeparator = decSeparator == undefined ? "." : decSeparator; + var thouSeparator = thouSeparator == undefined ? "," : thouSeparator; + var sign = n < 0 ? "-" : ""; + var i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + ""; + var j = (j = i.length) > 3 ? j % 3 : 0; + return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : ""); + }; + + this.chech_input_color_support = function (id) { + if (document.getElementById(id).value != undefined && document.getElementById(id).value[0] == '#') + return true; + return false; + }; + + this.b64toBlob = function(b64Data, contentType, sliceSize) { + contentType = contentType || ''; + sliceSize = sliceSize || 512; + + var byteCharacters = atob(b64Data); + var byteArrays = []; + + for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) { + var slice = byteCharacters.slice(offset, offset + sliceSize); + + var byteNumbers = new Array(slice.length); + for (var i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + + var byteArray = new Uint8Array(byteNumbers); + + byteArrays.push(byteArray); + } + + var blob = new Blob(byteArrays, {type: contentType}); + return blob; + }; + this.escapeHtml = function(text){ + return text + .replace(/&/g, "&amp;") + .replace(/</g, "&lt;") + .replace(/>/g, "&gt;") + .replace(/"/g, "&quot;") + .replace(/'/g, "&#039;"); + }; + this.isNumeric = function(n){ + return !isNaN(parseFloat(n)) && isFinite(n); + }; + /** + * Converts an HSL color value to RGB. Conversion formula + * adapted from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes h, s, and l are contained in the set [0, 1] and + * returns r, g, and b in the set [0, 255]. + * + * @param {number} h The hue + * @param {number} s The saturation + * @param {number} l The lightness + * @return {Array} The RGB representation + */ + this.hslToRgb = function (h, s, l) { + var r, g, b; + + if (s == 0) { + r = g = b = l; // achromatic + } + else { + var hue2rgb = function hue2rgb(p, q, t) { + if (t < 0) + t += 1; + if (t > 1) + t -= 1; + if (t < 1 / 6) + return p + (q - p) * 6 * t; + if (t < 1 / 2) + return q; + if (t < 2 / 3) + return p + (q - p) * (2 / 3 - t) * 6; + return p; + }; + + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1 / 3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1 / 3); + } + + return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; + }; + + /** + * Converts an RGB color value to HSL. Conversion formula + * adapted from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes r, g, and b are contained in the set [0, 255] and + * returns h, s, and l in the set [0, 1]. + * + * @param {number} r red color value + * @param {number} g green color value + * @param {number} b blue color value + * @return {Array} The HSL representation + */ + this.rgbToHsl = function (r, g, b) { + r /= 255, g /= 255, b /= 255; + var max = Math.max(r, g, b), min = Math.min(r, g, b); + var h, s, l = (max + min) / 2; + + if (max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + + return [h, s, l]; + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.xml new file mode 100644 index 00000000000..aaf7cb741d4 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/helpers.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>helpers.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.js new file mode 100644 index 00000000000..c74cf34bf7d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.js @@ -0,0 +1,470 @@ +/* global MAIN, HELPER, POP, LAYER, EFFECTS, GUI, HELP */ +/* global canvas_front, WIDTH, HEIGHT, LANG */ + +var POP = new popup(); + +/** + * user dialogs library + * + * @author ViliusL + * + * Usage: + * var POP = new popup(); + * POP.add({name: "param1", title: "value1:" }); + * POP.add(...); + * POP.show('title', main_handler, preview_handler, onload_handler); + * + * POP.add() parameters: + * - name type example + * - --------------------------------------------------------------- + * - name string 'parameter1' + * - title string 'enter value:' + * - type string 'select', 'textarea', 'color' + * - value string '314' + * - values array fo strings ['one', 'two', 'three'] + * - range numbers interval [0, 255] + * - step int/float 1 + * - placeholder text 'enter number here' + * - html html text '<b>bold</b>' + * - function function 'cutom_function' + * - onchange function 'class.onchange_function()' + */ +function popup() { + this.active = false; + this.handler = ''; + this.preview = false; + this.onload = false; + this.width_mini = 184; + this.height_mini = 195; + this.preview_in_main = false; + this.effects = false; + this.id = 0; + var parameters = []; + var layer_active_small = document.createElement("canvas"); + var layer_active_small_ctx = layer_active_small.getContext("2d"); + + //add parameter + this.add = function (object) { + parameters.push(object); + }; + + /** + * show popup window. + * used strings: "Ok", "Cancel", "Preview" + * + * @param {string} title + * @param {function} handler + * @param {function} preview_handler + * @param {function} onload_handler + */ + this.show = function (title, handler, preview_handler, onload_handler) { + POP.id = HELPER.getRandomInt(0, 999999999); + if (this.active == true) { + this.hide(); + return false; + } + this.active = true; + this.handler = handler; + if (preview_handler != undefined) + this.preview = preview_handler; + if (onload_handler != undefined) + this.onload = onload_handler; + var html = ''; + + var dim = HELPER.get_dimensions(); + popup = document.getElementById('popup'); + popup.style.top = 150 + 'px'; + popup.style.left = Math.round(dim[0] / 2) + 'px'; + + if (this.effects == true) { + var index; + for (var i = 0; i < EFFECTS.FILTERS_LIST.length; i++) { + if (EFFECTS.FILTERS_LIST[i].name == GUI.last_menu) { + index = i; + break; + } + } + var prev_index = index - 1; + if (prev_index < 0) { + prev_index = 0; + } + var next_index = index + 1; + if (next_index > EFFECTS.FILTERS_LIST.length - 1) { + next_index = EFFECTS.FILTERS_LIST.length - 1; + } + html += '<span style="float:right;">'; + html += '<input id="previous_filter" type="button" value="&lt;"> '; + html += '<select id="effect_browser">'; + html += '<option class="trn" value="">--- Select effect ---</option>'; + for (var i = 0; i < EFFECTS.FILTERS_LIST.length; i++) { + var selected = ''; + if (EFFECTS.FILTERS_LIST[i].name == GUI.last_menu) + var selected = 'selected'; + html += ' <option ' + selected + ' value="' + i + '">' + EFFECTS.FILTERS_LIST[i].title + '</option>'; + } + html += '</select>'; + html += ' <input id="next_filter" onclick="" type="button" value="&gt;"> '; + html += '</span>'; + } + html += '<h2 id="popup_drag" class="trn">' + title + '</h2>'; + + //preview area + if (this.preview !== false && this.preview_in_main == false) { + html += '<div style="margin-top:15px;margin-bottom:15px;">'; + html += '<canvas style="position:relative;float:left;margin-right:5px;border:1px solid #393939;" width="' + POP.width_mini + '" height="' + POP.height_mini + '" id="pop_pre"></canvas>'; + html += '<canvas style="position:relative;border:1px solid #393939;background-color:#ffffff;" width="' + POP.width_mini + '" height="' + POP.height_mini + '" id="pop_post"></canvas>'; + html += '</div>'; + } + + //settings + html += '<table style="width:99%;">'; + for (var i in parameters) { + var parameter = parameters[i]; + + html += '<tr id="popup-tr-'+parameters[i].name+'">'; + if (title != 'Error' && parameter.title != undefined) + html += '<td style="font-weight:bold;padding-right:3px;width:130px;" class="trn">' + parameter.title + '</td>'; + if (parameter.name != undefined) { + if (parameter.values != undefined) { + var onchange = ''; + if (parameter.onchange != undefined) + onchange = ' onchange="' + parameter.onchange + ';" '; + if (parameter.values.length > 10 || parameter.type == 'select') { + //drop down + if (onchange == '' && preview_handler != undefined) + onchange = ' onchange="POP.view();" '; + html += '<td colspan="2"><select ' + onchange + ' style="font-size:12px;" id="pop_data_' + parameter.name + '">'; + var k = 0; + for (var j in parameter.values) { + var sel = ''; + if (parameter.value == parameter.values[j]) + sel = 'selected="selected"'; + if (parameter.value == undefined && k == 0) + sel = 'selected="selected"'; + html += '<option ' + sel + ' name="' + parameter.values[j] + '">' + parameter.values[j] + '</option>'; + k++; + } + html += '</select></td>'; + } + else { + //radio + html += '<td colspan="2">'; + if (parameter.values.length > 2) + html += '<div class="group">'; + var k = 0; + for (var j in parameter.values) { + var ch = ''; + if (parameter.value == parameter.values[j]) + ch = 'checked="checked"'; + if (parameter.value == undefined && k == 0) + ch = 'checked="checked"'; + if (onchange == '' && preview_handler != undefined) + onchange = ' onchange="POP.view();" '; + + var title = parameter.values[j]; + var parts = parameter.values[j].split(" - "); + if(parts.length > 1){ + title = parts[0] + ' - <span class="trn">'+parts[1]+'</span>'; + } + + html += '<input type="radio" ' + onchange + ' ' + ch + ' name="' + parameter.name + '" id="pop_data_' + parameter.name + "_poptmp" + j + '" value="' + parameter.values[j] + '">'; + html += '<label style="margin-right:20px;" class="trn" for="pop_data_' + parameter.name + "_poptmp" + j + '">' + title + '</label>'; + if (parameter.values.length > 2) + html += '<br />'; + k++; + } + if (parameter.values.length > 2) + html += '</div>'; + html += '</td>'; + } + } + else if (parameter.value != undefined) { + //input, range, textarea, color + var step = 1; + if (parameter.step != undefined) + step = parameter.step; + if (parameter.range != undefined) { + //range + var preview_code = ''; + if (this.preview !== false) + preview_code = 'POP.view();'; + html += '<td><input type="range" id="pop_data_' + parameter.name + '" value="' + parameter.value + '" min="' + parameter.range[0] + '" max="' + parameter.range[1] + '" step="' + step + '" " oninput="document.getElementById(\'pv' + i + '\').innerHTML=Math.round(this.value*100)/100;' + preview_code + '" /></td>'; + html += '<td style="padding-left:10px;width:50px;" id="pv' + i + '">' + parameter.value + '</td>'; + } + else if (parameter.type == 'color') { + //color + var preview_code = ''; + if (this.preview !== false) + preview_code = 'POP.view();'; + html += '<td><input type="color" id="pop_data_' + parameter.name + '" value="' + parameter.value + '" onchange="'+preview_code+'" /></td>'; + } + else { + //input or textarea + if (parameter.placeholder == undefined) + parameter.placeholder = ''; + if (parameter.type == 'textarea'){ + html += '<td><textarea style="height:80px;" id="pop_data_' + parameter.name + '" placeholder="' + parameter.placeholder + '">' + parameter.value + '</textarea></td>'; + } + else{ + var input_type="text"; + if(parameter.placeholder != undefined && parameter.placeholder != '' && !isNaN(parameter.placeholder)) + input_type = 'number'; + if(parameter.value != undefined && typeof parameter.value == 'number') + input_type = 'number'; + + html += '<td colspan="2"><input type="'+input_type+'" id="pop_data_' + parameter.name + '" value="' + parameter.value + '" placeholder="' + parameter.placeholder + '" onkeyup="POP.validate(this);" /></td>'; + } + } + } + } + else if (parameter.function != undefined) { + //custom function + var result; + if (typeof parameter.function == 'string') + result = window[parameter.function](); + else + result = parameter.function(); + html += '<td colspan="3">' + result + '</td>'; + } + else if (parameter.html != undefined) { + //html + html += '<td style="padding-bottom:3px;padding-top:3px;" colspan="2">' + parameter.html + '</td>'; + } + else if (parameter.title == undefined) { + //gap + html += '<td style="padding-bottom:3px;padding-top:3px;" colspan="2"></td>'; + } + else { + //locked fields without name + str = "" + parameter.value; + var id_tmp = parameter.title.toLowerCase().replace(/[^\w]+/g, '').replace(/ +/g, '-'); + id_tmp = id_tmp.substring(0, 10); + if (str.length < 40) + html += '<td colspan="2"><div class="trn" id="pop_data_'+id_tmp+'" style="padding: 2px 0px;">' + parameter.value + '</div></td>'; + else + html += '<td style="font-size:11px;" colspan="2"><textarea disabled="disabled">' + parameter.value + '</textarea></td>'; + } + html += '</tr>'; + } + html += '</table>'; + + //action buttons + html += '<div style="text-align:center;margin-top:20px;margin-bottom:15px;">'; + html += '<button onclick="POP.save();" class="button trn">Ok</button>'; + html += '<button onclick="POP.hide();" class="button trn">Cancel</button>'; + if (this.preview_in_main !== false) + html += '<button onclick="POP.view();" class="button trn">Preview</button>'; + html += '</div>'; + + document.getElementById("popup").innerHTML = html; + document.getElementById("popup").style.display = "block"; + if (parameters.length > 15) + document.getElementById("popup").style.overflowY = "scroll"; + else + document.getElementById("popup").style.overflowY = 'hidden'; + + //onload + if (this.onload != '') { + if (typeof this.onload == "string") + window[this.onload](); + else + this.onload(); + } + + //some events for effects browser + if (this.effects == true) { + document.getElementById('previous_filter').disabled = false; + document.getElementById('next_filter').disabled = false; + if (index == 0) { + document.getElementById('previous_filter').disabled = true; + } + if (index == EFFECTS.FILTERS_LIST.length - 1) { + document.getElementById('next_filter').disabled = true; + } + //previous + document.getElementById('previous_filter').addEventListener('click', function (event) { + POP.hide(); + GUI.last_menu = EFFECTS.FILTERS_LIST[prev_index].name; + call_menu(EFFECTS, EFFECTS.FILTERS_LIST[prev_index].name); + }); + //next + document.getElementById('next_filter').addEventListener('click', function (event) { + POP.hide(); + GUI.last_menu = EFFECTS.FILTERS_LIST[next_index].name; + call_menu(EFFECTS, EFFECTS.FILTERS_LIST[next_index].name); + }); + //onchange + var effect_browser = document.getElementById('effect_browser'); + effect_browser.addEventListener('change', function (event) { + var value = effect_browser.options[effect_browser.selectedIndex].value; + POP.hide(); + GUI.last_menu = EFFECTS.FILTERS_LIST[value].name; + call_menu(EFFECTS, EFFECTS.FILTERS_LIST[value].name); + }); + } + + //load preview? + if (this.preview !== false && this.preview_in_main == false) { + //original + var pop_pre = document.getElementById("pop_pre").getContext("2d"); + pop_pre.rect(0, 0, POP.width_mini, POP.height_mini); + pop_pre.fillStyle = "#ffffff"; + pop_pre.fill(); + GUI.draw_background(pop_pre, POP.width_mini, POP.height_mini, 5); + pop_pre.drawImage(document.getElementById(LAYER.layers[LAYER.layer_active].name), 0, 0, POP.width_mini, POP.height_mini); + + //copy + pop_post = document.getElementById("pop_post").getContext("2d"); + pop_post.rect(0, 0, POP.width_mini, POP.height_mini); + pop_post.fillStyle = "#ffffff"; + pop_post.fill(); + GUI.draw_background(pop_post, POP.width_mini, POP.height_mini, 5); + pop_post.drawImage(document.getElementById(LAYER.layers[LAYER.layer_active].name), 0, 0, POP.width_mini, POP.height_mini); + + //prepare temp canvas + layer_active_small.width = POP.width_mini; + layer_active_small.height = POP.height_mini; + layer_active_small_ctx.drawImage(document.getElementById(LAYER.layers[LAYER.layer_active].name), 0, 0, POP.width_mini, POP.height_mini); + POP.view(); + } + + //call translation again to translate popup + HELP.help_translate(LANG); + }; + + //hide popup + this.hide = function () { + document.getElementById('popup').style.display = 'none'; + parameters = []; + this.handler = ''; + this.active = false; + this.preview = false; + this.onload = false; + this.preview_in_main = false; + this.effects = false; + canvas_front.clearRect(0, 0, WIDTH, HEIGHT); + }; + + //renders preview. If input=range supported, is called on every param update - must be fast... + this.view = function () { + if (this.preview !== false) { + if (this.preview_in_main == false) { + //reset mini view + pop_post.clearRect(0, 0, POP.width_mini, POP.height_mini); + pop_post.drawImage(layer_active_small, 0, 0); + } + + //prepare + var response = {}; + inputs = document.getElementsByTagName('input'); + for (i = 0; i < inputs.length; i++) { + if (inputs[i].id.substr(0, 9) == 'pop_data_') { + var key = inputs[i].id.substr(9); + if (HELPER.strpos(key, "_poptmp") != false) + key = key.substring(0, HELPER.strpos(key, "_poptmp")); + var value = inputs[i].value; + if (inputs[i].type == 'radio') { + if (inputs[i].checked == true) + response[key] = value; + } + else + response[key] = value; + } + } + selects = document.getElementsByTagName('select'); + for (i = 0; i < selects.length; i++) { + if (selects[i].id.substr(0, 9) == 'pop_data_') { + var key = selects[i].id.substr(9); + var value = selects[i].value; + response[key] = value; + } + } + textareas = document.getElementsByTagName('textarea'); + for (i = 0; i < textareas.length; i++) { + if (textareas[i].id.substr(0, 9) == 'pop_data_') { + var key = textareas[i].id.substr(9); + var value = textareas[i].value; + response[key] = value; + } + } + + //call handler + if (this.preview_in_main == false) + this.preview(response, pop_post, POP.width_mini, POP.height_mini); + else + this.preview(response); + } + }; + + //OK pressed - prepare data and call handlers + this.save = function () { + this.active = false; + document.getElementById("popup").style.display = "none"; + var response = {}; + inputs = document.getElementsByTagName('input'); + for (i = 0; i < inputs.length; i++) { + if (inputs[i].id.substr(0, 9) == 'pop_data_') { + var key = inputs[i].id.substr(9); + if (HELPER.strpos(key, "_poptmp") != false) + key = key.substring(0, HELPER.strpos(key, "_poptmp")); + var value = inputs[i].value; + if (inputs[i].type == 'radio') { + if (inputs[i].checked == true) + response[key] = value; + } + else + response[key] = value; + + } + } + selects = document.getElementsByTagName('select'); + for (i = 0; i < selects.length; i++) { + if (selects[i].id.substr(0, 9) == 'pop_data_') { + var key = selects[i].id.substr(9); + var value = selects[i].value; + response[key] = value; + } + } + textareas = document.getElementsByTagName('textarea'); + for (i = 0; i < textareas.length; i++) { + if (textareas[i].id.substr(0, 9) == 'pop_data_') { + var key = textareas[i].id.substr(9); + var value = textareas[i].value; + response[key] = value; + } + } + parameters = []; + this.preview = false; + this.onload = false; + this.preview_in_main = false; + this.effects = false; + if (this.handler != '') { + if (typeof this.handler == "object") + this.handler[0][this.handler[1]](response); + else if (typeof this.handler == "function") + this.handler(response); + else + console.log('error: wrong function type: ' + this.handler); + } + this.handler = ''; + }; + + //validate input field, unless browser supports input=range + this.validate = function (field) { + for (var i in parameters) { + var parameter = parameters[i]; + if ("pop_data_" + parameter.name == field.id && parameter.range != undefined) { + if (field.value == '-' || field.value == '') + return true; + + var value = parseFloat(field.value); + if (isNaN(value) || value != field.value) + field.value = parameter.value; //not number + if (value < parameter.range[0]) + field.value = parameter.range[0]; //less then min + else if (value > parameter.range[1]) + field.value = parameter.range[1]; //more then max + } + } + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.xml new file mode 100644 index 00000000000..67568d1e319 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/popup.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>popup.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.js new file mode 100644 index 00000000000..be381dd4ef7 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.js @@ -0,0 +1,183 @@ +/** + * SIFT: scale-invariant-feature-transform, keypoints + * + * @author ViliusL + */ + +/* global HELPER, IMAGE, ImageFilters, LAYER, canvas_active */ + +var SIFT = new SIFT_CLASS(); + +function SIFT_CLASS() { + /** + * contrast check, smaller - more points, better accuracy, but slower + */ + var avg_offset = 50; + + /** + * how much pixels to check for each side to get average + */ + var avg_step = 4; + + //generate key points for image + this.generate_keypoints = function (canvas, show_points) { + var W = canvas.width; + var H = canvas.height; + HELPER.timer_init(); + + //check whitespace + var trim_details = IMAGE.trim_info(canvas); + W = W - trim_details.left - trim_details.right; + H = H - trim_details.top - trim_details.bottom; + //make copy + var clone = document.createElement("canvas"); + clone.width = W; + clone.height = H; + var ctx = clone.getContext("2d"); + ctx.drawImage(canvas, -trim_details.left, -trim_details.top, canvas.width, canvas.height); + + //greyscale + var imageData = ctx.getImageData(0, 0, W, H); + var filtered = ImageFilters.GrayScale(imageData); //add effect + ctx.putImageData(filtered, 0, 0); + + //make few copies and blur each + var n = 5; + var copies = []; + for (var i = 0; i < n; i++) { + var tmp_canvas = document.createElement("canvas"); + tmp_canvas.width = W; + tmp_canvas.height = H; + var ctx_i = tmp_canvas.getContext("2d"); + ctx_i.drawImage(clone, 0, 0); + + //gausian blur + var imageData = ctx_i.getImageData(0, 0, W, H); + var filtered = ImageFilters.GaussianBlur(imageData, i + 0.5); //add effect + ctx_i.putImageData(filtered, 0, 0); + + copies.push(tmp_canvas); + } + + //find extreme points + var points = []; + var n0 = avg_step * 2 + 1; + for (var c = 1; c < copies.length - 1; c++) { + var imageData = copies[c].getContext("2d").getImageData(0, 0, W, H).data; + var imageData0 = copies[c - 1].getContext("2d").getImageData(0, 0, W, H).data; + var imageData2 = copies[c + 1].getContext("2d").getImageData(0, 0, W, H).data; + for (var j = avg_step; j < H - avg_step; j++) { + for (var i = avg_step; i < W - avg_step; i++) { + var x = (i + j * W) * 4; + if (imageData[x + 3] == 0) + continue; //transparent + if (imageData[x] < imageData[x - 4] || imageData[x] < imageData[x + 4] || imageData[x] > imageData[x - 4] || imageData[x] > imageData[x + 4]) { + var x_pre = (i + (j - 1) * W) * 4; + var x_post = (i + (j + 1) * W) * 4; + //calc average + var area_average = 0; + for (var l = -avg_step; l <= avg_step; l++) { + var avgi = (i + (j - l) * W) * 4; + for (var a = -avg_step; a <= avg_step; a++) { + area_average += imageData[avgi + 4 * a]; + } + } + area_average = area_average / (n0 * n0); + //max + if (imageData[x] + avg_offset < area_average) { + var min = Math.min(imageData[x_pre - 4], imageData[x_pre], imageData[x_pre + 4], imageData[x - 4], imageData[x + 4], imageData[x_post - 4], imageData[x_post], imageData[x_post + 4]); + if (imageData[x] <= min) { + var min0 = Math.min(imageData0[x_pre - 4], imageData0[x_pre], imageData0[x_pre + 4], imageData0[x - 4], imageData0[x + 4], imageData0[x_post - 4], imageData0[x_post], imageData0[x_post + 4]); + if (imageData[x] <= min0) { + var min2 = Math.min(imageData2[x_pre - 4], imageData2[x_pre], imageData2[x_pre + 4], imageData2[x - 4], imageData2[x + 4], imageData2[x_post - 4], imageData2[x_post], imageData2[x_post + 4]); + if (imageData[x] <= min2) + points.push({ + x: i + trim_details.left, + y: j + trim_details.top, + w: Math.round(area_average - imageData[x] - avg_offset) + }); + } + } + continue; + } + //min + if (imageData[x] - avg_offset > area_average) { + var max = Math.max(imageData[x_pre - 4], imageData[x_pre], imageData[x_pre + 4], imageData[x - 4], imageData[x + 4], imageData[x_post - 4], imageData[x_post], imageData[x_post + 4]); + if (imageData[x] >= max) { + var max0 = Math.max(imageData0[x_pre - 4], imageData0[x_pre], imageData0[x_pre + 4], imageData0[x - 4], imageData0[x + 4], imageData0[x_post - 4], imageData0[x_post], imageData0[x_post + 4]); + if (imageData[x] >= max0) { + var max2 = Math.max(imageData2[x_pre - 4], imageData2[x_pre], imageData2[x_pre + 4], imageData2[x - 4], imageData2[x + 4], imageData2[x_post - 4], imageData2[x_post], imageData2[x_post + 4]); + if (imageData[x] >= max2){ + points.push({ + x: i + trim_details.left, + y: j + trim_details.top, + w: Math.round(imageData[x] - area_average - avg_offset) + }); + } + } + } + } + } + } + } + } + //make unique + for (var i = 0; i < points.length; i++) { + for (var j = 0; j < points.length; j++) { + if (i != j && points[i].x == points[j].x && points[i].y == points[j].y) { + points.splice(i, 1); + i--; + break; + } + } + } + + //show points? + if (show_points === true) { + var time = HELPER.timer('', true); + console.log('key points: ' + points.length + ", " + time); + LAYER.layer_add(); + + var size = 3; + canvas_active().fillStyle = "#ff0000"; + for (var i in points) { + var point = points[i]; + canvas_active().beginPath(); + canvas_active().rect(point.x - Math.floor(size / 2) + 1, point.y - Math.floor(size / 2) + 1, size, size); + canvas_active().fill(); + } + } + else { + //sort by weights + points.sort(function (a, b) { + return parseFloat(b.w) - parseFloat(a.w); + }); + return { + points: points, + trim_details: trim_details + }; + } + }; + + //returns average value of requested area from greyscale image + //area = {x, y, w, h} + this.get_area_average = function (area, imageData, i, j, size) { + var imgData = imageData.data; + var sum = 0; + var n = 0; + size = size / 100; //prepare to use 1-100% values + var stop_x = i + Math.round(size * area.x) + Math.round(size * area.w); + var stop_y = j + Math.round(size * area.y) + Math.round(size * area.h); + var img_width4 = imageData.width * 4; + var k0, k; + for (var y = j + Math.round(size * area.y); y < stop_y; y++) { + k0 = y * img_width4; + for (var x = i + Math.round(size * area.x); x < stop_x; x++) { + k = k0 + (x * 4); + sum = sum + imgData[k]; + n++; + } + } + return Math.round(sum / n); + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.xml new file mode 100644 index 00000000000..563ff2da62a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/sift.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>sift.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.js new file mode 100644 index 00000000000..23fee195303 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.js @@ -0,0 +1,200 @@ +/* global fx, ImageFilters, canvas_active */ + +var VINTAGE = new VINTAGE_CLASS(); + +/** + * adds vintage effect + * + * @author ViliusL + * + * Functions: + * - adjust_color + * - lower_contrast + * - blur + * - light_leak + * - chemicals + * - exposure + * - grains + * - grains_big + * - optics + * - dusts + * + * Usage: VINTAGE.___function___(canvas_ctx, width, height, param1, param2, ...); + * + * libs: + * - imagefilters.js, url: https://github.com/arahaya/ImageFilters.js + * - glfx.js url: http://evanw.github.com/glfx.js/ + */ +function VINTAGE_CLASS() { + var fx_filter = false; + + //increasing red color + this.adjust_color = function (context, W, H, level_red) { //level = [0, 200], default 70 + var param_green = 0; + var param_blue = 0; + var imageData = context.getImageData(0, 0, W, H); + var filtered = ImageFilters.ColorTransformFilter(imageData, 1, 1, 1, 1, level_red, param_green, param_blue, 1); + context.putImageData(filtered, 0, 0); + }; + + //decreasing contrast + this.lower_contrast = function (context, W, H, level) { //level = [0, 50], default 15 + var imageData = context.getImageData(0, 0, W, H); + var filtered = ImageFilters.BrightnessContrastPhotoshop(imageData, 0, -level); + context.putImageData(filtered, 0, 0); + }; + + //adding blur + this.blur = function (context, W, H, level) { //level = [0, 2], default 0 + if (level < 1) + return context; + var imageData = context.getImageData(0, 0, W, H); + var filtered = ImageFilters.GaussianBlur(imageData, level); + context.putImageData(filtered, 0, 0); + }; + + //creating transparent #ffa500 radial gradients + this.light_leak = function (context, W, H, level) { //level = [0, 150], default 90 + var click_x = this.getRandomInt(0, W); + var click_y = this.getRandomInt(0, H); + var distance = Math.min(W, H) * 0.6; + var radgrad = canvas_active().createRadialGradient( + click_x, click_y, distance * level / 255, + click_x, click_y, distance); + radgrad.addColorStop(0, "rgba(255, 165, 0, " + level / 255 + ")"); + radgrad.addColorStop(1, "rgba(255, 255, 255, 0)"); + + context.fillStyle = radgrad; + context.fillRect(0, 0, W, H); + }; + + //de-saturate + this.chemicals = function (context, W, H, level) { //level = [0, 100], default 40 + var imageData = context.getImageData(0, 0, W, H); + var filtered = ImageFilters.HSLAdjustment(imageData, 0, -level, 0); + context.putImageData(filtered, 0, 0); + }; + + //creating transparent vertical black-to-white gradients + this.exposure = function (context, W, H, level) { //level = [0, 150], default 80 + context.rect(0, 0, W, H); + var grd = canvas_active().createLinearGradient(0, 0, 0, H); + if (this.getRandomInt(1, 10) < 5) { + //dark at top + grd.addColorStop(0, "rgba(0, 0, 0, " + level / 255 + ")"); + grd.addColorStop(1, "rgba(255, 255, 255, " + level / 255 + ")"); + } + else { + //bright at top + grd.addColorStop(0, "rgba(255, 255, 255, " + level / 255 + ")"); + grd.addColorStop(1, "rgba(0, 0, 0, " + level / 255 + ")"); + } + context.fillStyle = grd; + context.fill(); + }; + + //add grains, noise + this.grains = function (context, W, H, level) { //level = [0, 50], default 10 + if (level == 0) + return context; + var img = context.getImageData(0, 0, W, H); + var imgData = img.data; + for (var j = 0; j < H; j++) { + for (var i = 0; i < W; i++) { + var x = (i + j * W) * 4; + if (imgData[x + 3] == 0) + continue; //transparent + //increase it's lightness + var delta = this.getRandomInt(0, level); + if (delta == 0) + continue; + + if (imgData[x] - delta < 0) + imgData[x] = -(imgData[x] - delta); + else + imgData[x] = imgData[x] - delta; + if (imgData[x + 1] - delta < 0) + imgData[x + 1] = -(imgData[x + 1] - delta); + else + imgData[x + 1] = imgData[x + 1] - delta; + if (imgData[x + 2] - delta < 0) + imgData[x + 2] = -(imgData[x + 2] - delta); + else + imgData[x + 2] = imgData[x + 2] - delta; + } + } + context.putImageData(img, 0, 0); + }; + + //add big grains, noise + this.grains_big = function (context, W, H, level) { //level = [0, 50], default 20 + if (level == 0) + return context; + var n = W * H / 100 * level; //density + var color = 200; + for (var i = 0; i < n; i++) { + var power = this.getRandomInt(5, 10 + level); + var size = 2; + var x = this.getRandomInt(0, W); + var y = this.getRandomInt(0, H); + context.fillStyle = "rgba(" + color + ", " + color + ", " + color + ", " + power / 255 + ")"; + context.fillRect(x, y, size, size); + } + }; + + //adding vignette effect - blured dark borders + this.optics = function (context, W, H, param1, param2) { //param1 [0, 0.5], param2 [0, 0.7], default 0.3, 0.5 + //make sure FX lib loaded + if(fx_filter == false){ + fx_filter = fx.canvas(); + } + + var texture = fx_filter.texture(context.getImageData(0, 0, W, H)); + fx_filter.draw(texture).vignette(param1, param2).update(); + context.drawImage(fx_filter, 0, 0); + }; + + //add dust and hairs + this.dusts = function (context, W, H, level) { //level = [0, 100], default 70 + var n = level / 100 * (W * H) / 1000; + //add dust + context.fillStyle = "rgba(200, 200, 200, 0.3)"; + for (var i = 0; i < n; i++) { + var x = this.getRandomInt(0, W); + var y = this.getRandomInt(0, H); + var mode = this.getRandomInt(1, 2); + if (mode == 1) { + var w = 1; + var h = this.getRandomInt(1, 3); + } + else if (mode == 2) { + var w = this.getRandomInt(1, 3); + var h = 1; + } + context.beginPath(); + context.rect(x, y, w, h); + context.fill(); + } + + //add hairs + context.strokeStyle = "rgba(200, 200, 200, 0.2)"; + for (var i = 0; i < n / 3; i++) { + var x = this.getRandomInt(0, W); + var y = this.getRandomInt(0, H); + var radius = this.getRandomInt(5, 15); + var start_nr = this.getRandomInt(0, 20) / 10; + var start_angle = Math.PI * start_nr; + var end_angle = Math.PI * (start_nr + this.getRandomInt(7, 15) / 10); + context.beginPath(); + context.arc(x, y, radius, start_angle, end_angle); + context.stroke(); + } + + return context; + }; + + //random number generator + this.getRandomInt = function (min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + }; +} diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.xml new file mode 100644 index 00000000000..b4edabe4b83 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/libs/vintage.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>vintage.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles.xml new file mode 100644 index 00000000000..9dcd1221e3d --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>styles</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.css b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.css new file mode 100644 index 00000000000..0096cbbc617 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.css @@ -0,0 +1,711 @@ +/* +Table of Contents: + 1. General + 2. Header + 2.1 Navigation + 3. Footer + 4. Sidebar + 5. Print + 6. Content +*/ + +/* ========== 1. General ==================================================== */ + +*{ + box-sizing: border-box; +} +body{ + font-size: 75%; /* Resets to 12px */ + font-family: Arial, Helvetica, sans-serif; + color: #000000; + margin: 0px; + padding: 0px; + padding-top: 30px; + background-color:#727272; + font-weight: normal; + overflow: hidden; +} +canvas{ + position: absolute; + outline: none; + /* disable select canvas */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + /* disable antialiasing */ + image-rendering: optimizeSpeed; + image-rendering: -moz-crisp-edges; + image-rendering: -webkit-optimize-contrast; + image-rendering: -o-crisp-edges; + image-rendering: pixelated; + -ms-interpolation-mode: nearest-neighbor; +} +img{ + border: none; +} +td, th{ + vertical-align:top; +} +table{ + border: 0; + margin: 0; + padding: 0; + vertical-align: baseline; + border-collapse: collapse; + border-spacing: 0; + width:100%; +} +input[type="text"], input[type="button"], select, input[type="number"]{ + border:1px solid #393939; + padding:1px 3px; +} +input[type="range"]{ + margin-left:0px; + width:100%; +} +input[type="button"]:disabled{ + visibility:hidden; +} +input[type="button"]{ + background: #dddddd; +} + +/* ========== 2. Header ===================================================== */ + +#logo{ + display: block; + height: 30px; + padding: 5px 5px 5px 36px; + margin: 5px 0 10px 0; + background: url("../miniPaint/img/logo.png") no-repeat 3px 0px; + background-size: auto 30px; + text-decoration: none; + font-weight: bold; + color: #ffffff; + font-size: 13px; +} +#logo:hover{ + animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both; +} +@keyframes shake{ + 10%, 90%{ + background-position: 2px 0px; + } + 20%, 80%{ + background-position: 5px 0px; + } + 30%, 50%, 70%{ + background-position: 0px 0px; + } + 40%, 60%{ + background-position: 6px 0px; + } +} + +/* ========== 2.1 Navigation ================================================ */ + +#mobile_menu{ + display:none; + position: absolute; + width:100%; + top: 0; +} +.left_mobile_menu, .right_mobile_menu{ + position:absolute; + background: url('../miniPaint/img/sprites.png') no-repeat -50px -100px; + width:50px; + height:50px; + display:block; + top:0; + z-index:200; +} +.left_mobile_menu{left:0;} +.right_mobile_menu{right:0;} + +.ddsmoothmenu{ + position:fixed; + top:0; + left:0; + width:100%; + font:12px Arial,sans-serif; + background: #2D2D2D; + width: 100%; + padding-left:10px; + z-index:100; +} +.ddsmoothmenu ul{ + z-index:100; + margin: 0; + padding: 0; + list-style-type: none; + height:30px; +} +.ddsmoothmenu ul li{ + position: relative; + display: inline-block; + float: left; + color: #2d2b2b; + height:100%; +} +.ddsmoothmenu ul ul li a{ + width:100%; +} +.ddsmoothmenu .rightarrowclass{ + display:none !important; +} +.ddsmoothmenu ul li a{ + display: inline-block; + color: #2D2D2D; + text-decoration: none; + color: #cccccc; + text-align:center; + padding: 7px 10px 8px 10px !important; +} +.ddsmoothmenu ul li a.selected{ + background-color: #FFFFFF !important; + color: #2d2b2b; +} +.ddsmoothmenu ul li ul li a.selected{ + background-color:#E4EBF8 !important; +} +.ddsmoothmenu ul li a:hover{ + background-color: #E4EBF8; + color: #2D2D2D; +} +.ddsmoothmenu .hide_ul{ + position: absolute; + left: -3000px; + display: none; + visibility: hidden; + border:1px solid #5680C1; + border-top:0px; +} +.ddsmoothmenu ul li ul{ + position: absolute; + left: -3000px; + display: none; + visibility: hidden; + border:1px solid #5680C1; + border-top:0px; + margin-left: -1px; + height:auto; + min-width:140px; + width:auto !important; + top:30px !important; +} +.ddsmoothmenu ul li ul li{ + display: list-item; + background: #ffffff; + float: none; + height:auto; + width:100%; +} +.ddsmoothmenu ul li ul li a{ + text-align:left; +} +.ddsmoothmenu ul li ul li ul{ + top: 0; + border-top:1px solid #5680C1; +} +.ddsmoothmenu ul li ul li a{ + padding-left: 5px; + padding-right:5px; + margin: 0; + color: #2D2D2D; + white-space: nowrap; +} +.ddsmoothmenu ul li ul li ul{ + top:0 !important; +} +* html .ddsmoothmenu{height: 1%;} /*Hack for IE7 and below*/ +.ddsmoothmenu .downarrowclass{ + position: absolute; + top: 12px; + right: 7px; +} + .ddsmoothmenu .ddshadow{ + position: absolute; + left: 0; + top: 0; + width: 0; + height: 0; + background-color: #ccc; +} +.ddsmoothmenu .mid-line{ + background-color:#ff0000; + border-top:1px solid #e5e5e5; + font-size:0; + padding:0 8px 0 8px; +} +.ddsmoothmenu ul li ul li.more > a{ + background-image: url('../miniPaint/img/right.png'); + background-repeat: no-repeat; + background-position: 97% 30%; +} +.ddsmoothmenu ul li ul li ul{ + left: calc(100% + 1px) !important; +} +.ddsmoothmenu .dots::after{ + content: "..."; +} +@media screen and (max-width:700px){ + #mobile_menu{ + display:block; + } + .left_mobile_menu{ + display:none; + } + .ddsmoothmenu{ + height:50px; + } + .ddsmoothmenu ul{ + width: calc(100% - 50px); + height:50px; + } + .ddsmoothmenu > ul > li > a{ + height:50px; + padding-top: 15px !important; + } + .ddsmoothmenu ul li ul{ + top:50px !important; + } + .ddsmoothmenu ul li ul li{ + height:auto; + } + .ddsmoothmenu ul li ul li a{ + height:30px; + } +} +@media screen and (max-width:550px){ + .ddsmoothmenu{ + padding-left:0; + } + .ddsmoothmenu ul{ + width: calc(100% - 100px); + margin-left:50px; + } + .ddsmoothmenu > ul > li{ + width: calc(100% / 7); + } + .ddsmoothmenu > ul > li > a{ + width:100%; + padding-left: 3px !important; + padding-right: 3px !important; + overflow: hidden; + } + .left_mobile_menu{ + display:block; + } +} +@media screen and (max-width:400px){ + .ddsmoothmenu{ + background: #666666; + } + .ddsmoothmenu > ul > li{ + width: calc(100% / 7); + } + .ddsmoothmenu .icon{ + width:100%; + max-width:50px; + background-image: url('../miniPaint/img/sprites.png'); + background-position: -91px -88px; + color: transparent !important; + } + .ddsmoothmenu .icon:hover{ + background-color:#727272 !important; + } + .ddsmoothmenu .file{ background-position: -91px -88px; } + .ddsmoothmenu .edit{ background-position: -141px -88px; } + .ddsmoothmenu .image{ background-position: -191px -88px; } + .ddsmoothmenu .layer{ background-position: -241px -88px; } + .ddsmoothmenu .effects{ background-position: -291px -88px; } + .ddsmoothmenu .tools{ background-position: -341px -88px; } + .ddsmoothmenu .help{ background-position: -391px -88px; } +} +@media screen and (max-width:350px){ + .ddsmoothmenu .file{ background-position: -95px -88px; } + .ddsmoothmenu .edit{ background-position: -145px -88px; } + .ddsmoothmenu .image{ background-position: -195px -88px; } + .ddsmoothmenu .layer{ background-position: -245px -88px; } + .ddsmoothmenu .effects{ background-position: -295px -88px; } + .ddsmoothmenu .tools{ background-position: -345px -88px; } + .ddsmoothmenu .help{ background-position: -398px -88px; } +} + +/* ========== 3. Footer ===================================================== */ + +/* ========== 4. Sidebar ==================================================== */ + +#sidebar_left{ + position: absolute; + width: 105px; + z-index: 100; + left:0px; + padding:0 5px 5px 0; + transition: 0.2s; + -webkit-transition: 0.2s; +} +#sidebar_right{ + position: absolute; + width: 152px; + right:0; + top:0; + z-index: 100; + transition: 0.2s; + background-color:#727272; + -webkit-transition: 0.2s; +} +#sidebar_left.active{ + left:0 !important; + background-color: #727272; + box-shadow: 5px 0px 10px 0px rgba(0,0,0,0.75); +} +#sidebar_right.active{ + right:0 !important; + box-shadow: -5px 0px 10px 0px rgba(0,0,0,0.75); +} +#main_color{ + border:1px solid #393939; + background-color:#727272; + margin-top:10px; + width:100%; + height:40px; + margin:0px; + padding:0px; +} +#main_color_alt{ + border:1px solid #393939; + margin-top:10px; + width:100%; + height:40px; +} +#main_color_rgb{ + margin-top:5px; + width:100%; + color:#000000; + text-align:right; +} +#main_color_rgb input{ + width:55px; +} +#main_color_rgb a{ + display: inline-block; + width: 14px; + height: 14px; + border-radius: 7px; + color: transparent; + margin-right: 5px; +} +#main_color_rgb a.red{ background-color:#ff0000; } +#main_color_rgb a.green{ background-color:#00ff00; } +#main_color_rgb a.blue{ background-color:#0000ff; } +#main_color_rgb a.alpha{ background: url('../miniPaint/img/sprites.png') no-repeat -550px -50px; } + +#preview{ + width:150px; + background-color:#989898; + border:1px solid #393939; + margin-bottom: 5px; +} +#preview canvas{ + cursor: pointer; +} +#menu_left_container .active{ + background-color: #5680c1 !important; +} +#menu_left_container a{ + float:left; + border: 1px solid #393939; + background: #989898 url('../img/sprites.png') no-repeat 0px 0px; + width:24px; + height:24px; + margin:0px 1px 1px 0px; + overflow:hidden; + display:block; +} +#action_attributes{ + min-height:20px; + font-size:11px; +} +#mouse_info{ + padding:5px 3px 5px 2px; + font-size:11px; +} +#action_attributes input{ + font-size:12px; + width:100%; +} +#color_hex{ + width: 100%; + border:1px solid #393939; +} +#all_colors{ + margin-top:10px; + padding:3px 0px 3px 3px; +} +#sidebar_right .layer{ + margin-bottom:2px; + border:1px solid #393939; + background-color:#989898; + padding:1px 5px 3px 5px; + border-radius:3px; + font-size:11px; + height:19px; + overflow:hidden; + color:#333333; +} +#layers_base .active{ + background-color:#5680c1; +} +.layers_arrow{ + text-decoration:none; + color:#000000; + display:block; + float:right; + margin-left:5px; + background-color:#727272; + padding:0px 5px 0px 5px; + border:1px solid #393939; + font-size:11px; +} +.layer_title{ + display:block; + float:left; + cursor:pointer; + min-width:85px; + width:10px; + overflow:hidden; +} + +.layer_delete{ + float:right; + cursor:pointer; + padding:0px 3px 0px 3px; + width:12px; + height:12px; + background: url('../img/sprites.png') no-repeat 0px -50px; +} +.layer_visible{ + float:right; + cursor:pointer; + padding:0px 3px 0px 3px; + width:12px; + height:12px; + background: url('../img/sprites.png') no-repeat -100px -50px; +} +.layer_unvisible{ + background: url('../img/sprites.png') no-repeat -50px -50px; +} +.layer_add{ + border:1px solid #393939; + padding:0px 4px 0px 4px; + text-decoration:none; + background-color:#5680c1; + cursor:pointer; +} +.mini-color{ + width:16px; + height:16px; + margin:0px 3px 3px 0px; + float:left; + border:1px solid #393939; +} +.mini-color:hover{ + cursor:pointer; +} +.attribute-area{ + border:1px solid #393939; + background-color:#989898; + margin:5px 5px 5px 5px; + text-align:center; + padding:5px 0px 5px 0px; + cursor:pointer; + /* disable select */ + -webkit-user-select:none; + -moz-user-select:none; +} +.mouse_info_title{ + font-weight:bold; + min-width:38px; + display:block; + float:left; +} +@media screen and (max-width:700px){ + #sidebar_right{ + right: -160px; + } +} +@media screen and (max-width:550px){ + #sidebar_left{ + left: -110px; + } +} + +/* ========== 5. Print ====================================================== */ + +@media print{ + body{ + background:none !important; + background: #fff; + background-color: #fff; + font-family: Arial,Helvetica,Verdana; + width:auto !important; + padding:5px !important; + font-size: 12px; + } + progress, + .menu, + #resize-w,#resize-h, #resize-wh, + #sidebar_left, + #sidebar_right, + #canvas_back, + .ddsmoothmenu{ + display: none; + height: 0; + width: 0; + } + #canvas_wrapper{ + margin:0px; + padding:0px; + } + canvas{ + border:0px; + position: absolute; + top:0px; + left:0px; + } +} + +/* ========== 6. Content ==================================================== */ + +#wrapper{ + margin: 5px; + position:relative; + min-height: 500px; + overflow: hidden; +} +#canvas_wrapper{ + position:relative; + margin: 0 157px 0 105px; + overflow: hidden; + height: calc(100vh - 35px); +} +#canvas_wrapper canvas{ + border: 1px solid #393939; + box-sizing: content-box; +} +#canvas_back{ + position: absolute; + background-color:#ffffff; + outline: none; +} +#layers_base{ + background-color: #989898; + border: 1px solid #393939; + padding: 5px; + margin-bottom: 5px; +} +#resize-w, #resize-h, #resize-wh{ + background-color:#393939; + width:5px; + height:5px; + margin-left:105px; + position:absolute; + top:0; +} +#canvas_grid{ + pointer-events:none; +} +.trn{} +.block{ + border:1px solid #393939; + padding:5px; + margin-top:5px; + background-color:#818181; +} +.error{ + padding:20px; + margin:10px; + border:1px solid #ff0000; + background-color:#ffffff; + width:400px; + font-weight:bold; +} +.group{ + border:1px solid #888888; + margin:5px 0px 5px 0px; + padding:5px; +} +@media screen and (max-width:700px){ + body{ + padding-top:50px; + } + #canvas_wrapper{ + margin-right: 0; + } +} +@media screen and (max-width:550px){ + #canvas_wrapper{ + margin-left: 0px; + } +} + +/* ========== 6.1 Popup ===================================================== */ + +#popup{ + position:fixed; + border:1px solid #000000; + background-color: #bbb; + width:500px; + max-height:550px; + overflow-y:scroll; + margin:0px auto 0px auto; + top:150px; + left: 50%; + margin-left:-250px; + display:none; + padding:10px; + font-size:12px; + color: #333; + z-index: 100; +} +#popup h2{ + margin-top:0px; + cursor:move; +} +#popup td{ + height:20px; +} +#popup textarea{ + color:#000000; + width:100%; + border:1px solid #393939; + padding-left:5px; +} +#popup .button{ + margin-right:5px; + background-color:#5680c1; + min-width:60px; + border:1px solid #000000; + padding: 2px 6px; +} +#popup input[type="text"], #popup input[type="number"], #popup textarea{ + width:100%; +} +label span{ + color:#777777; +} +@media screen and (max-width:400px){ + #popup{ + top: 100px !important; + left: 0 !important; + right: 0 !important; + margin-left: 0; + width: auto; + } +} +/* ========================================================================== */ diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.xml new file mode 100644 index 00000000000..1312f6ba812 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/styles/styles.css.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>styles.css</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/css</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor.xml new file mode 100644 index 00000000000..380974aea99 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>vendor</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif.xml new file mode 100644 index 00000000000..96b8d2d8bbe --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>exif</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.js new file mode 100644 index 00000000000..642d065ed83 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.js @@ -0,0 +1,806 @@ +//https://github.com/exif-js/exif-js - v2.1.1 +(function() { + + var debug = false; + + var root = this; + + var EXIF = function(obj) { + if (obj instanceof EXIF) return obj; + if (!(this instanceof EXIF)) return new EXIF(obj); + this.EXIFwrapped = obj; + }; + + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = EXIF; + } + exports.EXIF = EXIF; + } else { + root.EXIF = EXIF; + } + + var ExifTags = EXIF.Tags = { + + // version tags + 0x9000 : "ExifVersion", // EXIF version + 0xA000 : "FlashpixVersion", // Flashpix format version + + // colorspace tags + 0xA001 : "ColorSpace", // Color space information tag + + // image configuration + 0xA002 : "PixelXDimension", // Valid width of meaningful image + 0xA003 : "PixelYDimension", // Valid height of meaningful image + 0x9101 : "ComponentsConfiguration", // Information about channels + 0x9102 : "CompressedBitsPerPixel", // Compressed bits per pixel + + // user information + 0x927C : "MakerNote", // Any desired information written by the manufacturer + 0x9286 : "UserComment", // Comments by user + + // related file + 0xA004 : "RelatedSoundFile", // Name of related sound file + + // date and time + 0x9003 : "DateTimeOriginal", // Date and time when the original image was generated + 0x9004 : "DateTimeDigitized", // Date and time when the image was stored digitally + 0x9290 : "SubsecTime", // Fractions of seconds for DateTime + 0x9291 : "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal + 0x9292 : "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized + + // picture-taking conditions + 0x829A : "ExposureTime", // Exposure time (in seconds) + 0x829D : "FNumber", // F number + 0x8822 : "ExposureProgram", // Exposure program + 0x8824 : "SpectralSensitivity", // Spectral sensitivity + 0x8827 : "ISOSpeedRatings", // ISO speed rating + 0x8828 : "OECF", // Optoelectric conversion factor + 0x9201 : "ShutterSpeedValue", // Shutter speed + 0x9202 : "ApertureValue", // Lens aperture + 0x9203 : "BrightnessValue", // Value of brightness + 0x9204 : "ExposureBias", // Exposure bias + 0x9205 : "MaxApertureValue", // Smallest F number of lens + 0x9206 : "SubjectDistance", // Distance to subject in meters + 0x9207 : "MeteringMode", // Metering mode + 0x9208 : "LightSource", // Kind of light source + 0x9209 : "Flash", // Flash status + 0x9214 : "SubjectArea", // Location and area of main subject + 0x920A : "FocalLength", // Focal length of the lens in mm + 0xA20B : "FlashEnergy", // Strobe energy in BCPS + 0xA20C : "SpatialFrequencyResponse", // + 0xA20E : "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit + 0xA20F : "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit + 0xA210 : "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution + 0xA214 : "SubjectLocation", // Location of subject in image + 0xA215 : "ExposureIndex", // Exposure index selected on camera + 0xA217 : "SensingMethod", // Image sensor type + 0xA300 : "FileSource", // Image source (3 == DSC) + 0xA301 : "SceneType", // Scene type (1 == directly photographed) + 0xA302 : "CFAPattern", // Color filter array geometric pattern + 0xA401 : "CustomRendered", // Special processing + 0xA402 : "ExposureMode", // Exposure mode + 0xA403 : "WhiteBalance", // 1 = auto white balance, 2 = manual + 0xA404 : "DigitalZoomRation", // Digital zoom ratio + 0xA405 : "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) + 0xA406 : "SceneCaptureType", // Type of scene + 0xA407 : "GainControl", // Degree of overall image gain adjustment + 0xA408 : "Contrast", // Direction of contrast processing applied by camera + 0xA409 : "Saturation", // Direction of saturation processing applied by camera + 0xA40A : "Sharpness", // Direction of sharpness processing applied by camera + 0xA40B : "DeviceSettingDescription", // + 0xA40C : "SubjectDistanceRange", // Distance to subject + + // other tags + 0xA005 : "InteroperabilityIFDPointer", + 0xA420 : "ImageUniqueID" // Identifier assigned uniquely to each image + }; + + var TiffTags = EXIF.TiffTags = { + 0x0100 : "ImageWidth", + 0x0101 : "ImageHeight", + 0x8769 : "ExifIFDPointer", + 0x8825 : "GPSInfoIFDPointer", + 0xA005 : "InteroperabilityIFDPointer", + 0x0102 : "BitsPerSample", + 0x0103 : "Compression", + 0x0106 : "PhotometricInterpretation", + 0x0112 : "Orientation", + 0x0115 : "SamplesPerPixel", + 0x011C : "PlanarConfiguration", + 0x0212 : "YCbCrSubSampling", + 0x0213 : "YCbCrPositioning", + 0x011A : "XResolution", + 0x011B : "YResolution", + 0x0128 : "ResolutionUnit", + 0x0111 : "StripOffsets", + 0x0116 : "RowsPerStrip", + 0x0117 : "StripByteCounts", + 0x0201 : "JPEGInterchangeFormat", + 0x0202 : "JPEGInterchangeFormatLength", + 0x012D : "TransferFunction", + 0x013E : "WhitePoint", + 0x013F : "PrimaryChromaticities", + 0x0211 : "YCbCrCoefficients", + 0x0214 : "ReferenceBlackWhite", + 0x0132 : "DateTime", + 0x010E : "ImageDescription", + 0x010F : "Make", + 0x0110 : "Model", + 0x0131 : "Software", + 0x013B : "Artist", + 0x8298 : "Copyright" + }; + + var GPSTags = EXIF.GPSTags = { + 0x0000 : "GPSVersionID", + 0x0001 : "GPSLatitudeRef", + 0x0002 : "GPSLatitude", + 0x0003 : "GPSLongitudeRef", + 0x0004 : "GPSLongitude", + 0x0005 : "GPSAltitudeRef", + 0x0006 : "GPSAltitude", + 0x0007 : "GPSTimeStamp", + 0x0008 : "GPSSatellites", + 0x0009 : "GPSStatus", + 0x000A : "GPSMeasureMode", + 0x000B : "GPSDOP", + 0x000C : "GPSSpeedRef", + 0x000D : "GPSSpeed", + 0x000E : "GPSTrackRef", + 0x000F : "GPSTrack", + 0x0010 : "GPSImgDirectionRef", + 0x0011 : "GPSImgDirection", + 0x0012 : "GPSMapDatum", + 0x0013 : "GPSDestLatitudeRef", + 0x0014 : "GPSDestLatitude", + 0x0015 : "GPSDestLongitudeRef", + 0x0016 : "GPSDestLongitude", + 0x0017 : "GPSDestBearingRef", + 0x0018 : "GPSDestBearing", + 0x0019 : "GPSDestDistanceRef", + 0x001A : "GPSDestDistance", + 0x001B : "GPSProcessingMethod", + 0x001C : "GPSAreaInformation", + 0x001D : "GPSDateStamp", + 0x001E : "GPSDifferential" + }; + + var StringValues = EXIF.StringValues = { + ExposureProgram : { + 0 : "Not defined", + 1 : "Manual", + 2 : "Normal program", + 3 : "Aperture priority", + 4 : "Shutter priority", + 5 : "Creative program", + 6 : "Action program", + 7 : "Portrait mode", + 8 : "Landscape mode" + }, + MeteringMode : { + 0 : "Unknown", + 1 : "Average", + 2 : "CenterWeightedAverage", + 3 : "Spot", + 4 : "MultiSpot", + 5 : "Pattern", + 6 : "Partial", + 255 : "Other" + }, + LightSource : { + 0 : "Unknown", + 1 : "Daylight", + 2 : "Fluorescent", + 3 : "Tungsten (incandescent light)", + 4 : "Flash", + 9 : "Fine weather", + 10 : "Cloudy weather", + 11 : "Shade", + 12 : "Daylight fluorescent (D 5700 - 7100K)", + 13 : "Day white fluorescent (N 4600 - 5400K)", + 14 : "Cool white fluorescent (W 3900 - 4500K)", + 15 : "White fluorescent (WW 3200 - 3700K)", + 17 : "Standard light A", + 18 : "Standard light B", + 19 : "Standard light C", + 20 : "D55", + 21 : "D65", + 22 : "D75", + 23 : "D50", + 24 : "ISO studio tungsten", + 255 : "Other" + }, + Flash : { + 0x0000 : "Flash did not fire", + 0x0001 : "Flash fired", + 0x0005 : "Strobe return light not detected", + 0x0007 : "Strobe return light detected", + 0x0009 : "Flash fired, compulsory flash mode", + 0x000D : "Flash fired, compulsory flash mode, return light not detected", + 0x000F : "Flash fired, compulsory flash mode, return light detected", + 0x0010 : "Flash did not fire, compulsory flash mode", + 0x0018 : "Flash did not fire, auto mode", + 0x0019 : "Flash fired, auto mode", + 0x001D : "Flash fired, auto mode, return light not detected", + 0x001F : "Flash fired, auto mode, return light detected", + 0x0020 : "No flash function", + 0x0041 : "Flash fired, red-eye reduction mode", + 0x0045 : "Flash fired, red-eye reduction mode, return light not detected", + 0x0047 : "Flash fired, red-eye reduction mode, return light detected", + 0x0049 : "Flash fired, compulsory flash mode, red-eye reduction mode", + 0x004D : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", + 0x004F : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", + 0x0059 : "Flash fired, auto mode, red-eye reduction mode", + 0x005D : "Flash fired, auto mode, return light not detected, red-eye reduction mode", + 0x005F : "Flash fired, auto mode, return light detected, red-eye reduction mode" + }, + SensingMethod : { + 1 : "Not defined", + 2 : "One-chip color area sensor", + 3 : "Two-chip color area sensor", + 4 : "Three-chip color area sensor", + 5 : "Color sequential area sensor", + 7 : "Trilinear sensor", + 8 : "Color sequential linear sensor" + }, + SceneCaptureType : { + 0 : "Standard", + 1 : "Landscape", + 2 : "Portrait", + 3 : "Night scene" + }, + SceneType : { + 1 : "Directly photographed" + }, + CustomRendered : { + 0 : "Normal process", + 1 : "Custom process" + }, + WhiteBalance : { + 0 : "Auto white balance", + 1 : "Manual white balance" + }, + GainControl : { + 0 : "None", + 1 : "Low gain up", + 2 : "High gain up", + 3 : "Low gain down", + 4 : "High gain down" + }, + Contrast : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + Saturation : { + 0 : "Normal", + 1 : "Low saturation", + 2 : "High saturation" + }, + Sharpness : { + 0 : "Normal", + 1 : "Soft", + 2 : "Hard" + }, + SubjectDistanceRange : { + 0 : "Unknown", + 1 : "Macro", + 2 : "Close view", + 3 : "Distant view" + }, + FileSource : { + 3 : "DSC" + }, + + Components : { + 0 : "", + 1 : "Y", + 2 : "Cb", + 3 : "Cr", + 4 : "R", + 5 : "G", + 6 : "B" + } + }; + + function addEvent(element, event, handler) { + if (element.addEventListener) { + element.addEventListener(event, handler, false); + } else if (element.attachEvent) { + element.attachEvent("on" + event, handler); + } + } + + function imageHasData(img) { + return !!(img.exifdata); + } + + + function base64ToArrayBuffer(base64, contentType) { + contentType = contentType || base64.match(/^data\:([^\;]+)\;base64,/mi)[1] || ''; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg' + base64 = base64.replace(/^data\:([^\;]+)\;base64,/gmi, ''); + var binary = atob(base64); + var len = binary.length; + var buffer = new ArrayBuffer(len); + var view = new Uint8Array(buffer); + for (var i = 0; i < len; i++) { + view[i] = binary.charCodeAt(i); + } + return buffer; + } + + function objectURLToBlob(url, callback) { + var http = new XMLHttpRequest(); + http.open("GET", url, true); + http.responseType = "blob"; + http.onload = function(e) { + if (this.status == 200 || this.status === 0) { + callback(this.response); + } + }; + http.send(); + } + + function getImageData(img, callback) { + function handleBinaryFile(binFile) { + var data = findEXIFinJPEG(binFile); + var iptcdata = findIPTCinJPEG(binFile); + img.exifdata = data || {}; + img.iptcdata = iptcdata || {}; + if (callback) { + callback.call(img); + } + } + + if (img.src) { + if (/^data\:/i.test(img.src)) { // Data URI + var arrayBuffer = base64ToArrayBuffer(img.src); + handleBinaryFile(arrayBuffer); + + } else if (/^blob\:/i.test(img.src)) { // Object URL + var fileReader = new FileReader(); + fileReader.onload = function(e) { + handleBinaryFile(e.target.result); + }; + objectURLToBlob(img.src, function (blob) { + fileReader.readAsArrayBuffer(blob); + }); + } else { + var http = new XMLHttpRequest(); + http.onload = function() { + if (this.status == 200 || this.status === 0) { + handleBinaryFile(http.response); + } else { + throw "Could not load image"; + } + http = null; + }; + http.open("GET", img.src, true); + http.responseType = "arraybuffer"; + http.send(null); + } + } else if (window.FileReader && (img instanceof window.Blob || img instanceof window.File)) { + var fileReader = new FileReader(); + fileReader.onload = function(e) { + if (debug) console.log("Got file of length " + e.target.result.byteLength); + handleBinaryFile(e.target.result); + }; + + fileReader.readAsArrayBuffer(img); + } + } + + function findEXIFinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength, + marker; + + while (offset < length) { + if (dataView.getUint8(offset) != 0xFF) { + if (debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset)); + return false; // not a valid marker, something is wrong + } + + marker = dataView.getUint8(offset + 1); + if (debug) console.log(marker); + + // we could implement handling for other markers here, + // but we're only looking for 0xFFE1 for EXIF data + + if (marker == 225) { + if (debug) console.log("Found 0xFFE1 marker"); + + return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2); + + // offset += 2 + file.getShortAt(offset+2, true); + + } else { + offset += 2 + dataView.getUint16(offset+2); + } + + } + + } + + function findIPTCinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength; + + + var isFieldSegmentStart = function(dataView, offset){ + return ( + dataView.getUint8(offset) === 0x38 && + dataView.getUint8(offset+1) === 0x42 && + dataView.getUint8(offset+2) === 0x49 && + dataView.getUint8(offset+3) === 0x4D && + dataView.getUint8(offset+4) === 0x04 && + dataView.getUint8(offset+5) === 0x04 + ); + }; + + while (offset < length) { + + if ( isFieldSegmentStart(dataView, offset )){ + + // Get the length of the name header (which is padded to an even number of bytes) + var nameHeaderLength = dataView.getUint8(offset+7); + if(nameHeaderLength % 2 !== 0) nameHeaderLength += 1; + // Check for pre photoshop 6 format + if(nameHeaderLength === 0) { + // Always 4 + nameHeaderLength = 4; + } + + var startOffset = offset + 8 + nameHeaderLength; + var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); + + return readIPTCData(file, startOffset, sectionLength); + + break; + + } + + + // Not the marker, continue searching + offset++; + + } + + } + var IptcFieldMap = { + 0x78 : 'caption', + 0x6E : 'credit', + 0x19 : 'keywords', + 0x37 : 'dateCreated', + 0x50 : 'byline', + 0x55 : 'bylineTitle', + 0x7A : 'captionWriter', + 0x69 : 'headline', + 0x74 : 'copyright', + 0x0F : 'category' + }; + function readIPTCData(file, startOffset, sectionLength){ + var dataView = new DataView(file); + var data = {}; + var fieldValue, fieldName, dataSize, segmentType, segmentSize; + var segmentStartPos = startOffset; + while(segmentStartPos < startOffset+sectionLength) { + if(dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos+1) === 0x02){ + segmentType = dataView.getUint8(segmentStartPos+2); + if(segmentType in IptcFieldMap) { + dataSize = dataView.getInt16(segmentStartPos+3); + segmentSize = dataSize + 5; + fieldName = IptcFieldMap[segmentType]; + fieldValue = getStringFromDB(dataView, segmentStartPos+5, dataSize); + // Check if we already stored a value with this name + if(data.hasOwnProperty(fieldName)) { + // Value already stored with this name, create multivalue field + if(data[fieldName] instanceof Array) { + data[fieldName].push(fieldValue); + } + else { + data[fieldName] = [data[fieldName], fieldValue]; + } + } + else { + data[fieldName] = fieldValue; + } + } + + } + segmentStartPos++; + } + return data; + } + + + + function readTags(file, tiffStart, dirStart, strings, bigEnd) { + var entries = file.getUint16(dirStart, !bigEnd), + tags = {}, + entryOffset, tag, + i; + + for (i=0;i<entries;i++) { + entryOffset = dirStart + i*12 + 2; + tag = strings[file.getUint16(entryOffset, !bigEnd)]; + if (!tag && debug) console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd)); + tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); + } + return tags; + } + + + function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) { + var type = file.getUint16(entryOffset+2, !bigEnd), + numValues = file.getUint32(entryOffset+4, !bigEnd), + valueOffset = file.getUint32(entryOffset+8, !bigEnd) + tiffStart, + offset, + vals, val, n, + numerator, denominator; + + switch (type) { + case 1: // byte, 8-bit unsigned int + case 7: // undefined, 8-bit byte, value depending on field + if (numValues == 1) { + return file.getUint8(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 4 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n<numValues;n++) { + vals[n] = file.getUint8(offset + n); + } + return vals; + } + + case 2: // ascii, 8-bit byte + offset = numValues > 4 ? valueOffset : (entryOffset + 8); + return getStringFromDB(file, offset, numValues-1); + + case 3: // short, 16 bit int + if (numValues == 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 2 ? valueOffset : (entryOffset + 8); + vals = []; + for (n=0;n<numValues;n++) { + vals[n] = file.getUint16(offset + 2*n, !bigEnd); + } + return vals; + } + + case 4: // long, 32 bit int + if (numValues == 1) { + return file.getUint32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n=0;n<numValues;n++) { + vals[n] = file.getUint32(valueOffset + 4*n, !bigEnd); + } + return vals; + } + + case 5: // rational = two long values, first is numerator, second is denominator + if (numValues == 1) { + numerator = file.getUint32(valueOffset, !bigEnd); + denominator = file.getUint32(valueOffset+4, !bigEnd); + val = new Number(numerator / denominator); + val.numerator = numerator; + val.denominator = denominator; + return val; + } else { + vals = []; + for (n=0;n<numValues;n++) { + numerator = file.getUint32(valueOffset + 8*n, !bigEnd); + denominator = file.getUint32(valueOffset+4 + 8*n, !bigEnd); + vals[n] = new Number(numerator / denominator); + vals[n].numerator = numerator; + vals[n].denominator = denominator; + } + return vals; + } + + case 9: // slong, 32 bit signed int + if (numValues == 1) { + return file.getInt32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n=0;n<numValues;n++) { + vals[n] = file.getInt32(valueOffset + 4*n, !bigEnd); + } + return vals; + } + + case 10: // signed rational, two slongs, first is numerator, second is denominator + if (numValues == 1) { + return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset+4, !bigEnd); + } else { + vals = []; + for (n=0;n<numValues;n++) { + vals[n] = file.getInt32(valueOffset + 8*n, !bigEnd) / file.getInt32(valueOffset+4 + 8*n, !bigEnd); + } + return vals; + } + } + } + + function getStringFromDB(buffer, start, length) { + var outstr = ""; + for (n = start; n < start+length; n++) { + outstr += String.fromCharCode(buffer.getUint8(n)); + } + return outstr; + } + + function readEXIFData(file, start) { + if (getStringFromDB(file, start, 4) != "Exif") { + if (debug) console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4)); + return false; + } + + var bigEnd, + tags, tag, + exifData, gpsData, + tiffOffset = start + 6; + + // test for TIFF validity and endianness + if (file.getUint16(tiffOffset) == 0x4949) { + bigEnd = false; + } else if (file.getUint16(tiffOffset) == 0x4D4D) { + bigEnd = true; + } else { + if (debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"); + return false; + } + + if (file.getUint16(tiffOffset+2, !bigEnd) != 0x002A) { + if (debug) console.log("Not valid TIFF data! (no 0x002A)"); + return false; + } + + var firstIFDOffset = file.getUint32(tiffOffset+4, !bigEnd); + + if (firstIFDOffset < 0x00000008) { + if (debug) console.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset+4, !bigEnd)); + return false; + } + + tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd); + + if (tags.ExifIFDPointer) { + exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd); + for (tag in exifData) { + switch (tag) { + case "LightSource" : + case "Flash" : + case "MeteringMode" : + case "ExposureProgram" : + case "SensingMethod" : + case "SceneCaptureType" : + case "SceneType" : + case "CustomRendered" : + case "WhiteBalance" : + case "GainControl" : + case "Contrast" : + case "Saturation" : + case "Sharpness" : + case "SubjectDistanceRange" : + case "FileSource" : + exifData[tag] = StringValues[tag][exifData[tag]]; + break; + + case "ExifVersion" : + case "FlashpixVersion" : + exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]); + break; + + case "ComponentsConfiguration" : + exifData[tag] = + StringValues.Components[exifData[tag][0]] + + StringValues.Components[exifData[tag][1]] + + StringValues.Components[exifData[tag][2]] + + StringValues.Components[exifData[tag][3]]; + break; + } + tags[tag] = exifData[tag]; + } + } + + if (tags.GPSInfoIFDPointer) { + gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd); + for (tag in gpsData) { + switch (tag) { + case "GPSVersionID" : + gpsData[tag] = gpsData[tag][0] + + "." + gpsData[tag][1] + + "." + gpsData[tag][2] + + "." + gpsData[tag][3]; + break; + } + tags[tag] = gpsData[tag]; + } + } + + return tags; + } + + EXIF.getData = function(img, callback) { + if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) return false; + + if (!imageHasData(img)) { + getImageData(img, callback); + } else { + if (callback) { + callback.call(img); + } + } + return true; + } + + EXIF.getTag = function(img, tag) { + if (!imageHasData(img)) return; + return img.exifdata[tag]; + } + + EXIF.getAllTags = function(img) { + if (!imageHasData(img)) return {}; + var a, + data = img.exifdata, + tags = {}; + for (a in data) { + if (data.hasOwnProperty(a)) { + tags[a] = data[a]; + } + } + return tags; + } + + EXIF.pretty = function(img) { + if (!imageHasData(img)) return ""; + var a, + data = img.exifdata, + strPretty = ""; + for (a in data) { + if (data.hasOwnProperty(a)) { + if (typeof data[a] == "object") { + if (data[a] instanceof Number) { + strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a].denominator + "]\r\n"; + } else { + strPretty += a + " : [" + data[a].length + " values]\r\n"; + } + } else { + strPretty += a + " : " + data[a] + "\r\n"; + } + } + } + return strPretty; + } + + EXIF.readFromBinaryFile = function(file) { + return findEXIFinJPEG(file); + } + + if (typeof define === 'function' && define.amd) { + define('exif-js', [], function() { + return EXIF; + }); + } +}.call(this)); + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.xml new file mode 100644 index 00000000000..159997a8dc1 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>exif.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.js new file mode 100644 index 00000000000..4da2141d42c --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.js @@ -0,0 +1,2 @@ +//https://github.com/exif-js/exif-js - v2.1.1 +(function(){function e(e){return!!e.exifdata}function t(e,t){t=t||e.match(/^data\:([^\;]+)\;base64,/im)[1]||"",e=e.replace(/^data\:([^\;]+)\;base64,/gim,"");for(var n=atob(e),r=n.length,o=new ArrayBuffer(r),i=new Uint8Array(o),a=0;r>a;a++)i[a]=n.charCodeAt(a);return o}function r(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="blob",n.onload=function(e){(200==this.status||0===this.status)&&t(this.response)},n.send()}function o(e,n){function o(t){var r=i(t),o=a(t);e.exifdata=r||{},e.iptcdata=o||{},n&&n.call(e)}if(e.src)if(/^data\:/i.test(e.src)){var s=t(e.src);o(s)}else if(/^blob\:/i.test(e.src)){var l=new FileReader;l.onload=function(e){o(e.target.result)},r(e.src,function(e){l.readAsArrayBuffer(e)})}else{var u=new XMLHttpRequest;u.onload=function(){if(200!=this.status&&0!==this.status)throw"Could not load image";o(u.response),u=null},u.open("GET",e.src,!0),u.responseType="arraybuffer",u.send(null)}else if(window.FileReader&&(e instanceof window.Blob||e instanceof window.File)){var l=new FileReader;l.onload=function(e){f&&console.log("Got file of length "+e.target.result.byteLength),o(e.target.result)},l.readAsArrayBuffer(e)}}function i(e){var t=new DataView(e);if(f&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return f&&console.log("Not a valid JPEG"),!1;for(var n,r=2,o=e.byteLength;o>r;){if(255!=t.getUint8(r))return f&&console.log("Not a valid marker at offset "+r+", found: "+t.getUint8(r)),!1;if(n=t.getUint8(r+1),f&&console.log(n),225==n)return f&&console.log("Found 0xFFE1 marker"),c(t,r+4,t.getUint16(r+2)-2);r+=2+t.getUint16(r+2)}}function a(e){var t=new DataView(e);if(f&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return f&&console.log("Not a valid JPEG"),!1;for(var n=2,r=e.byteLength,o=function(e,t){return 56===e.getUint8(t)&&66===e.getUint8(t+1)&&73===e.getUint8(t+2)&&77===e.getUint8(t+3)&&4===e.getUint8(t+4)&&4===e.getUint8(t+5)};r>n;){if(o(t,n)){var i=t.getUint8(n+7);i%2!==0&&(i+=1),0===i&&(i=4);var a=n+8+i,l=t.getUint16(n+6+i);return s(e,a,l)}n++}}function s(e,t,n){for(var r,o,i,a,s,l=new DataView(e),u={},c=t;t+n>c;)28===l.getUint8(c)&&2===l.getUint8(c+1)&&(a=l.getUint8(c+2),a in F&&(i=l.getInt16(c+3),s=i+5,o=F[a],r=d(l,c+5,i),u.hasOwnProperty(o)?u[o]instanceof Array?u[o].push(r):u[o]=[u[o],r]:u[o]=r)),c++;return u}function l(e,t,n,r,o){var i,a,s,l=e.getUint16(n,!o),d={};for(s=0;l>s;s++)i=n+12*s+2,a=r[e.getUint16(i,!o)],!a&&f&&console.log("Unknown tag: "+e.getUint16(i,!o)),d[a]=u(e,i,t,n,o);return d}function u(e,t,n,r,o){var i,a,s,l,u,c,f=e.getUint16(t+2,!o),g=e.getUint32(t+4,!o),h=e.getUint32(t+8,!o)+n;switch(f){case 1:case 7:if(1==g)return e.getUint8(t+8,!o);for(i=g>4?h:t+8,a=[],l=0;g>l;l++)a[l]=e.getUint8(i+l);return a;case 2:return i=g>4?h:t+8,d(e,i,g-1);case 3:if(1==g)return e.getUint16(t+8,!o);for(i=g>2?h:t+8,a=[],l=0;g>l;l++)a[l]=e.getUint16(i+2*l,!o);return a;case 4:if(1==g)return e.getUint32(t+8,!o);for(a=[],l=0;g>l;l++)a[l]=e.getUint32(h+4*l,!o);return a;case 5:if(1==g)return u=e.getUint32(h,!o),c=e.getUint32(h+4,!o),s=new Number(u/c),s.numerator=u,s.denominator=c,s;for(a=[],l=0;g>l;l++)u=e.getUint32(h+8*l,!o),c=e.getUint32(h+4+8*l,!o),a[l]=new Number(u/c),a[l].numerator=u,a[l].denominator=c;return a;case 9:if(1==g)return e.getInt32(t+8,!o);for(a=[],l=0;g>l;l++)a[l]=e.getInt32(h+4*l,!o);return a;case 10:if(1==g)return e.getInt32(h,!o)/e.getInt32(h+4,!o);for(a=[],l=0;g>l;l++)a[l]=e.getInt32(h+8*l,!o)/e.getInt32(h+4+8*l,!o);return a}}function d(e,t,r){var o="";for(n=t;n<t+r;n++)o+=String.fromCharCode(e.getUint8(n));return o}function c(e,t){if("Exif"!=d(e,t,4))return f&&console.log("Not valid EXIF data! "+d(e,t,4)),!1;var n,r,o,i,a,s=t+6;if(18761==e.getUint16(s))n=!1;else{if(19789!=e.getUint16(s))return f&&console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"),!1;n=!0}if(42!=e.getUint16(s+2,!n))return f&&console.log("Not valid TIFF data! (no 0x002A)"),!1;var u=e.getUint32(s+4,!n);if(8>u)return f&&console.log("Not valid TIFF data! (First offset less than 8)",e.getUint32(s+4,!n)),!1;if(r=l(e,s,s+u,p,n),r.ExifIFDPointer){i=l(e,s,s+r.ExifIFDPointer,m,n);for(o in i){switch(o){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":i[o]=P[o][i[o]];break;case"ExifVersion":case"FlashpixVersion":i[o]=String.fromCharCode(i[o][0],i[o][1],i[o][2],i[o][3]);break;case"ComponentsConfiguration":i[o]=P.Components[i[o][0]]+P.Components[i[o][1]]+P.Components[i[o][2]]+P.Components[i[o][3]]}r[o]=i[o]}}if(r.GPSInfoIFDPointer){a=l(e,s,s+r.GPSInfoIFDPointer,S,n);for(o in a){switch(o){case"GPSVersionID":a[o]=a[o][0]+"."+a[o][1]+"."+a[o][2]+"."+a[o][3]}r[o]=a[o]}}return r}var f=!1,g=this,h=function(e){return e instanceof h?e:this instanceof h?void(this.EXIFwrapped=e):new h(e)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports.EXIF=h):g.EXIF=h;var m=h.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"},p=h.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},S=h.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},P=h.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}},F={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};h.getData=function(t,n){return(t instanceof Image||t instanceof HTMLImageElement)&&!t.complete?!1:(e(t)?n&&n.call(t):o(t,n),!0)},h.getTag=function(t,n){return e(t)?t.exifdata[n]:void 0},h.getAllTags=function(t){if(!e(t))return{};var n,r=t.exifdata,o={};for(n in r)r.hasOwnProperty(n)&&(o[n]=r[n]);return o},h.pretty=function(t){if(!e(t))return"";var n,r=t.exifdata,o="";for(n in r)r.hasOwnProperty(n)&&(o+="object"==typeof r[n]?r[n]instanceof Number?n+" : "+r[n]+" ["+r[n].numerator+"/"+r[n].denominator+"]\r\n":n+" : ["+r[n].length+" values]\r\n":n+" : "+r[n]+"\r\n");return o},h.readFromBinaryFile=function(e){return i(e)},"function"==typeof define&&define.amd&&define("exif-js",[],function(){return h})}).call(this); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.xml new file mode 100644 index 00000000000..7b8d2c0b622 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/exif/exif.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>exif.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver.xml new file mode 100644 index 00000000000..685ddd2f078 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>file-saver</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.js new file mode 100644 index 00000000000..e720d031657 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.js @@ -0,0 +1,2 @@ +// https://github.com/eligrey/FileSaver.js - 1.3.2 +var saveAs=saveAs||function(e){"use strict";if(typeof e==="undefined"||typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var t=e.document,n=function(){return e.URL||e.webkitURL||e},r=t.createElementNS("http://www.w3.org/1999/xhtml","a"),o="download"in r,i=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},a=/constructor/i.test(e.HTMLElement),f=/CriOS\/[\d]+/.test(navigator.userAgent),u=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},d="application/octet-stream",s=1e3*40,c=function(e){var t=function(){if(typeof e==="string"){n().revokeObjectURL(e)}else{e.remove()}};setTimeout(t,s)},l=function(e,t,n){t=[].concat(t);var r=t.length;while(r--){var o=e["on"+t[r]];if(typeof o==="function"){try{o.call(e,n||e)}catch(i){u(i)}}}},p=function(e){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)){return new Blob([String.fromCharCode(65279),e],{type:e.type})}return e},v=function(t,u,s){if(!s){t=p(t)}var v=this,w=t.type,m=w===d,y,h=function(){l(v,"writestart progress write writeend".split(" "))},S=function(){if((f||m&&a)&&e.FileReader){var r=new FileReader;r.onloadend=function(){var t=f?r.result:r.result.replace(/^data:[^;]*;/,"data:attachment/file;");var n=e.open(t,"_blank");if(!n)e.location.href=t;t=undefined;v.readyState=v.DONE;h()};r.readAsDataURL(t);v.readyState=v.INIT;return}if(!y){y=n().createObjectURL(t)}if(m){e.location.href=y}else{var o=e.open(y,"_blank");if(!o){e.location.href=y}}v.readyState=v.DONE;h();c(y)};v.readyState=v.INIT;if(o){y=n().createObjectURL(t);setTimeout(function(){r.href=y;r.download=u;i(r);h();c(y);v.readyState=v.DONE});return}S()},w=v.prototype,m=function(e,t,n){return new v(e,t||e.name||"download",n)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(e,t,n){t=t||e.name||"download";if(!n){e=p(e)}return navigator.msSaveOrOpenBlob(e,t)}}w.abort=function(){};w.readyState=w.INIT=0;w.WRITING=1;w.DONE=2;w.error=w.onwritestart=w.onprogress=w.onwrite=w.onabort=w.onerror=w.onwriteend=null;return m}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!==null){define([],function(){return saveAs})} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.xml new file mode 100644 index 00000000000..f0dacd6e7d8 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/FileSaver.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>FileSaver.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.js new file mode 100644 index 00000000000..2266eb156ab --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.js @@ -0,0 +1,2 @@ +//https://github.com/eligrey/canvas-toBlob.js - 2016-05-26 +!function(t){"use strict";var o,e=t.Uint8Array,n=t.HTMLCanvasElement,i=n&&n.prototype,s=/\s*;\s*base64\s*(?:;|$)/i,a="toDataURL",l=function(t){for(var n,i,s,a=t.length,l=new e(a/4*3|0),r=0,b=0,d=[0,0],f=0,B=0;a--;)i=t.charCodeAt(r++),n=o[i-43],255!==n&&n!==s&&(d[1]=d[0],d[0]=i,B=B<<6|n,f++,4===f&&(l[b++]=B>>>16,61!==d[1]&&(l[b++]=B>>>8),61!==d[0]&&(l[b++]=B),f=0));return l};e&&(o=new e([62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,0,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51])),!n||i.toBlob&&i.toBlobHD||(i.toBlob||(i.toBlob=function(t,o){if(o||(o="image/png"),this.mozGetAsFile)return void t(this.mozGetAsFile("canvas",o));if(this.msToBlob&&/^\s*image\/png\s*(?:$|;)/i.test(o))return void t(this.msToBlob());var n,i=Array.prototype.slice.call(arguments,1),r=this[a].apply(this,i),b=r.indexOf(","),d=r.substring(b+1),f=s.test(r.substring(0,b));Blob.fake?(n=new Blob,f?n.encoding="base64":n.encoding="URI",n.data=d,n.size=d.length):e&&(n=f?new Blob([l(d)],{type:o}):new Blob([decodeURIComponent(d)],{type:o})),t(n)}),!i.toBlobHD&&i.toDataURLHD?i.toBlobHD=function(){a="toDataURLHD";var t=this.toBlob();return a="toDataURL",t}:i.toBlobHD=i.toBlob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.xml new file mode 100644 index 00000000000..33985d3b3c2 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/file-saver/canvas-toBlob.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>canvas-toBlob.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx.xml new file mode 100644 index 00000000000..e791e59b7ec --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>glfx</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.js new file mode 100644 index 00000000000..8be2a0b8493 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.js @@ -0,0 +1,59 @@ +/* + * glfx.js + * http://evanw.github.com/glfx.js/ + * + * Copyright 2011 Evan Wallace + * Released under the MIT license + */ +var fx=function(){function q(a,d,c){return Math.max(a,Math.min(d,c))}function w(b){return{_:b,loadContentsOf:function(b){a=this._.gl;this._.loadContentsOf(b)},destroy:function(){a=this._.gl;this._.destroy()}}}function A(a){return w(r.fromElement(a))}function B(b,d){var c=a.UNSIGNED_BYTE;if(a.getExtension("OES_texture_float")&&a.getExtension("OES_texture_float_linear")){var e=new r(100,100,a.RGBA,a.FLOAT);try{e.drawTo(function(){c=a.FLOAT})}catch(g){}e.destroy()}this._.texture&&this._.texture.destroy(); +this._.spareTexture&&this._.spareTexture.destroy();this.width=b;this.height=d;this._.texture=new r(b,d,a.RGBA,c);this._.spareTexture=new r(b,d,a.RGBA,c);this._.extraTexture=this._.extraTexture||new r(0,0,a.RGBA,c);this._.flippedShader=this._.flippedShader||new h(null,"uniform sampler2D texture;varying vec2 texCoord;void main(){gl_FragColor=texture2D(texture,vec2(texCoord.x,1.0-texCoord.y));}");this._.isInitialized=!0}function C(a,d,c){this._.isInitialized&& +a._.width==this.width&&a._.height==this.height||B.call(this,d?d:a._.width,c?c:a._.height);a._.use();this._.texture.drawTo(function(){h.getDefaultShader().drawRect()});return this}function D(){this._.texture.use();this._.flippedShader.drawRect();return this}function f(a,d,c,e){(c||this._.texture).use();this._.spareTexture.drawTo(function(){a.uniforms(d).drawRect()});this._.spareTexture.swapWith(e||this._.texture)}function E(a){a.parentNode.insertBefore(this,a);a.parentNode.removeChild(a);return this} +function F(){var b=new r(this._.texture.width,this._.texture.height,a.RGBA,a.UNSIGNED_BYTE);this._.texture.use();b.drawTo(function(){h.getDefaultShader().drawRect()});return w(b)}function G(){var b=this._.texture.width,d=this._.texture.height,c=new Uint8Array(4*b*d);this._.texture.drawTo(function(){a.readPixels(0,0,b,d,a.RGBA,a.UNSIGNED_BYTE,c)});return c}function k(b){return function(){a=this._.gl;return b.apply(this,arguments)}}function x(a,d,c,e,g,l,n,p){var m=c-g,h=e-l,f=n-g,k=p-l;g=a-c+g-n;l= +d-e+l-p;var q=m*k-f*h,f=(g*k-f*l)/q,m=(m*l-g*h)/q;return[c-a+f*c,e-d+f*e,f,n-a+m*n,p-d+m*p,m,a,d,1]}function y(a){var d=a[0],c=a[1],e=a[2],g=a[3],l=a[4],n=a[5],p=a[6],m=a[7];a=a[8];var f=d*l*a-d*n*m-c*g*a+c*n*p+e*g*m-e*l*p;return[(l*a-n*m)/f,(e*m-c*a)/f,(c*n-e*l)/f,(n*p-g*a)/f,(d*a-e*p)/f,(e*g-d*n)/f,(g*m-l*p)/f,(c*p-d*m)/f,(d*l-c*g)/f]}function z(a){var d=a.length;this.xa=[];this.ya=[];this.u=[];this.y2=[];a.sort(function(a,b){return a[0]-b[0]});for(var c=0;c<d;c++)this.xa.push(a[c][0]),this.ya.push(a[c][1]); +this.u[0]=0;this.y2[0]=0;for(c=1;c<d-1;++c){a=this.xa[c+1]-this.xa[c-1];var e=(this.xa[c]-this.xa[c-1])/a,g=e*this.y2[c-1]+2;this.y2[c]=(e-1)/g;this.u[c]=(6*((this.ya[c+1]-this.ya[c])/(this.xa[c+1]-this.xa[c])-(this.ya[c]-this.ya[c-1])/(this.xa[c]-this.xa[c-1]))/a-e*this.u[c-1])/g}this.y2[d-1]=0;for(c=d-2;0<=c;--c)this.y2[c]=this.y2[c]*this.y2[c+1]+this.u[c]}function u(a,d){return new h(null,a+"uniform sampler2D texture;uniform vec2 texSize;varying vec2 texCoord;void main(){vec2 coord=texCoord*texSize;"+ +d+"gl_FragColor=texture2D(texture,coord/texSize);vec2 clampedCoord=clamp(coord,vec2(0.0),texSize);if(coord!=clampedCoord){gl_FragColor.a*=max(0.0,1.0-length(coord-clampedCoord));}}")}function H(b,d){a.brightnessContrast=a.brightnessContrast||new h(null,"uniform sampler2D texture;uniform float brightness;uniform float contrast;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color.rgb+=brightness;if(contrast>0.0){color.rgb=(color.rgb-0.5)/(1.0-contrast)+0.5;}else{color.rgb=(color.rgb-0.5)*(1.0+contrast)+0.5;}gl_FragColor=color;}"); +f.call(this,a.brightnessContrast,{brightness:q(-1,b,1),contrast:q(-1,d,1)});return this}function t(a){a=new z(a);for(var d=[],c=0;256>c;c++)d.push(q(0,Math.floor(256*a.interpolate(c/255)),255));return d}function I(b,d,c){b=t(b);1==arguments.length?d=c=b:(d=t(d),c=t(c));for(var e=[],g=0;256>g;g++)e.splice(e.length,0,b[g],d[g],c[g],255);this._.extraTexture.initFromBytes(256,1,e);this._.extraTexture.use(1);a.curves=a.curves||new h(null,"uniform sampler2D texture;uniform sampler2D map;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color.r=texture2D(map,vec2(color.r)).r;color.g=texture2D(map,vec2(color.g)).g;color.b=texture2D(map,vec2(color.b)).b;gl_FragColor=color;}"); +a.curves.textures({map:1});f.call(this,a.curves,{});return this}function J(b){a.denoise=a.denoise||new h(null,"uniform sampler2D texture;uniform float exponent;uniform float strength;uniform vec2 texSize;varying vec2 texCoord;void main(){vec4 center=texture2D(texture,texCoord);vec4 color=vec4(0.0);float total=0.0;for(float x=-4.0;x<=4.0;x+=1.0){for(float y=-4.0;y<=4.0;y+=1.0){vec4 sample=texture2D(texture,texCoord+vec2(x,y)/texSize);float weight=1.0-abs(dot(sample.rgb-center.rgb,vec3(0.25)));weight=pow(weight,exponent);color+=sample*weight;total+=weight;}}gl_FragColor=color/total;}"); +for(var d=0;2>d;d++)f.call(this,a.denoise,{exponent:Math.max(0,b),texSize:[this.width,this.height]});return this}function K(b,d){a.hueSaturation=a.hueSaturation||new h(null,"uniform sampler2D texture;uniform float hue;uniform float saturation;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float angle=hue*3.14159265;float s=sin(angle),c=cos(angle);vec3 weights=(vec3(2.0*c,-sqrt(3.0)*s-c,sqrt(3.0)*s-c)+1.0)/3.0;float len=length(color.rgb);color.rgb=vec3(dot(color.rgb,weights.xyz),dot(color.rgb,weights.zxy),dot(color.rgb,weights.yzx));float average=(color.r+color.g+color.b)/3.0;if(saturation>0.0){color.rgb+=(average-color.rgb)*(1.0-1.0/(1.001-saturation));}else{color.rgb+=(average-color.rgb)*(-saturation);}gl_FragColor=color;}"); +f.call(this,a.hueSaturation,{hue:q(-1,b,1),saturation:q(-1,d,1)});return this}function L(b){a.noise=a.noise||new h(null,"uniform sampler2D texture;uniform float amount;varying vec2 texCoord;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}void main(){vec4 color=texture2D(texture,texCoord);float diff=(rand(texCoord)-0.5)*amount;color.r+=diff;color.g+=diff;color.b+=diff;gl_FragColor=color;}"); +f.call(this,a.noise,{amount:q(0,b,1)});return this}function M(b){a.sepia=a.sepia||new h(null,"uniform sampler2D texture;uniform float amount;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float r=color.r;float g=color.g;float b=color.b;color.r=min(1.0,(r*(1.0-(0.607*amount)))+(g*(0.769*amount))+(b*(0.189*amount)));color.g=min(1.0,(r*0.349*amount)+(g*(1.0-(0.314*amount)))+(b*0.168*amount));color.b=min(1.0,(r*0.272*amount)+(g*0.534*amount)+(b*(1.0-(0.869*amount))));gl_FragColor=color;}"); +f.call(this,a.sepia,{amount:q(0,b,1)});return this}function N(b,d){a.unsharpMask=a.unsharpMask||new h(null,"uniform sampler2D blurredTexture;uniform sampler2D originalTexture;uniform float strength;uniform float threshold;varying vec2 texCoord;void main(){vec4 blurred=texture2D(blurredTexture,texCoord);vec4 original=texture2D(originalTexture,texCoord);gl_FragColor=mix(blurred,original,1.0+strength);}"); +this._.extraTexture.ensureFormat(this._.texture);this._.texture.use();this._.extraTexture.drawTo(function(){h.getDefaultShader().drawRect()});this._.extraTexture.use(1);this.triangleBlur(b);a.unsharpMask.textures({originalTexture:1});f.call(this,a.unsharpMask,{strength:d});this._.extraTexture.unuse(1);return this}function O(b){a.vibrance=a.vibrance||new h(null,"uniform sampler2D texture;uniform float amount;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float average=(color.r+color.g+color.b)/3.0;float mx=max(color.r,max(color.g,color.b));float amt=(mx-average)*(-amount*3.0);color.rgb=mix(color.rgb,vec3(mx),amt);gl_FragColor=color;}"); +f.call(this,a.vibrance,{amount:q(-1,b,1)});return this}function P(b,d){a.vignette=a.vignette||new h(null,"uniform sampler2D texture;uniform float size;uniform float amount;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float dist=distance(texCoord,vec2(0.5,0.5));color.rgb*=smoothstep(0.8,size*0.799,dist*(amount+size));gl_FragColor=color;}"); +f.call(this,a.vignette,{size:q(0,b,1),amount:q(0,d,1)});return this}function Q(b,d,c){a.lensBlurPrePass=a.lensBlurPrePass||new h(null,"uniform sampler2D texture;uniform float power;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color=pow(color,vec4(power));gl_FragColor=vec4(color);}");var e="uniform sampler2D texture0;uniform sampler2D texture1;uniform vec2 delta0;uniform vec2 delta1;uniform float power;varying vec2 texCoord;"+ +s+"vec4 sample(vec2 delta){float offset=random(vec3(delta,151.7182),0.0);vec4 color=vec4(0.0);float total=0.0;for(float t=0.0;t<=30.0;t++){float percent=(t+offset)/30.0;color+=texture2D(texture0,texCoord+delta*percent);total+=1.0;}return color/total;}"; +a.lensBlur0=a.lensBlur0||new h(null,e+"void main(){gl_FragColor=sample(delta0);}");a.lensBlur1=a.lensBlur1||new h(null,e+"void main(){gl_FragColor=(sample(delta0)+sample(delta1))*0.5;}");a.lensBlur2=a.lensBlur2||(new h(null,e+"void main(){vec4 color=(sample(delta0)+2.0*texture2D(texture1,texCoord))/3.0;gl_FragColor=pow(color,vec4(power));}")).textures({texture1:1});for(var e= +[],g=0;3>g;g++){var l=c+2*g*Math.PI/3;e.push([b*Math.sin(l)/this.width,b*Math.cos(l)/this.height])}b=Math.pow(10,q(-1,d,1));f.call(this,a.lensBlurPrePass,{power:b});this._.extraTexture.ensureFormat(this._.texture);f.call(this,a.lensBlur0,{delta0:e[0]},this._.texture,this._.extraTexture);f.call(this,a.lensBlur1,{delta0:e[1],delta1:e[2]},this._.extraTexture,this._.extraTexture);f.call(this,a.lensBlur0,{delta0:e[1]});this._.extraTexture.use(1);f.call(this,a.lensBlur2,{power:1/b,delta0:e[2]});return this} +function R(b,d,c,e,g,l){a.tiltShift=a.tiltShift||new h(null,"uniform sampler2D texture;uniform float blurRadius;uniform float gradientRadius;uniform vec2 start;uniform vec2 end;uniform vec2 delta;uniform vec2 texSize;varying vec2 texCoord;"+s+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);vec2 normal=normalize(vec2(start.y-end.y,end.x-start.x));float radius=smoothstep(0.0,1.0,abs(dot(texCoord*texSize-start,normal))/gradientRadius)*blurRadius;for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta/texSize*percent*radius);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"); +var n=c-b,p=e-d,m=Math.sqrt(n*n+p*p);f.call(this,a.tiltShift,{blurRadius:g,gradientRadius:l,start:[b,d],end:[c,e],delta:[n/m,p/m],texSize:[this.width,this.height]});f.call(this,a.tiltShift,{blurRadius:g,gradientRadius:l,start:[b,d],end:[c,e],delta:[-p/m,n/m],texSize:[this.width,this.height]});return this}function S(b){a.triangleBlur=a.triangleBlur||new h(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+s+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta*percent);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"); +f.call(this,a.triangleBlur,{delta:[b/this.width,0]});f.call(this,a.triangleBlur,{delta:[0,b/this.height]});return this}function T(b,d,c){a.zoomBlur=a.zoomBlur||new h(null,"uniform sampler2D texture;uniform vec2 center;uniform float strength;uniform vec2 texSize;varying vec2 texCoord;"+s+"void main(){vec4 color=vec4(0.0);float total=0.0;vec2 toCenter=center-texCoord*texSize;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=0.0;t<=40.0;t++){float percent=(t+offset)/40.0;float weight=4.0*(percent-percent*percent);vec4 sample=texture2D(texture,texCoord+toCenter*percent*strength/texSize);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"); +f.call(this,a.zoomBlur,{center:[b,d],strength:c,texSize:[this.width,this.height]});return this}function U(b,d,c,e){a.colorHalftone=a.colorHalftone||new h(null,"uniform sampler2D texture;uniform vec2 center;uniform float angle;uniform float scale;uniform vec2 texSize;varying vec2 texCoord;float pattern(float angle){float s=sin(angle),c=cos(angle);vec2 tex=texCoord*texSize-center;vec2 point=vec2(c*tex.x-s*tex.y,s*tex.x+c*tex.y)*scale;return(sin(point.x)*sin(point.y))*4.0;}void main(){vec4 color=texture2D(texture,texCoord);vec3 cmy=1.0-color.rgb;float k=min(cmy.x,min(cmy.y,cmy.z));cmy=(cmy-k)/(1.0-k);cmy=clamp(cmy*10.0-3.0+vec3(pattern(angle+0.26179),pattern(angle+1.30899),pattern(angle)),0.0,1.0);k=clamp(k*10.0-5.0+pattern(angle+0.78539),0.0,1.0);gl_FragColor=vec4(1.0-cmy-k,color.a);}"); +f.call(this,a.colorHalftone,{center:[b,d],angle:c,scale:Math.PI/e,texSize:[this.width,this.height]});return this}function V(b,d,c,e){a.dotScreen=a.dotScreen||new h(null,"uniform sampler2D texture;uniform vec2 center;uniform float angle;uniform float scale;uniform vec2 texSize;varying vec2 texCoord;float pattern(){float s=sin(angle),c=cos(angle);vec2 tex=texCoord*texSize-center;vec2 point=vec2(c*tex.x-s*tex.y,s*tex.x+c*tex.y)*scale;return(sin(point.x)*sin(point.y))*4.0;}void main(){vec4 color=texture2D(texture,texCoord);float average=(color.r+color.g+color.b)/3.0;gl_FragColor=vec4(vec3(average*10.0-5.0+pattern()),color.a);}"); +f.call(this,a.dotScreen,{center:[b,d],angle:c,scale:Math.PI/e,texSize:[this.width,this.height]});return this}function W(b){a.edgeWork1=a.edgeWork1||new h(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+s+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec3 sample=texture2D(texture,texCoord+delta*percent).rgb;float average=(sample.r+sample.g+sample.b)/3.0;color.x+=average*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=average*weight;total.y+=weight;}}gl_FragColor=vec4(color/total,0.0,1.0);}"); +a.edgeWork2=a.edgeWork2||new h(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+s+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec2 sample=texture2D(texture,texCoord+delta*percent).xy;color.x+=sample.x*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=sample.y*weight;total.y+=weight;}}float c=clamp(10000.0*(color.y/total.y-color.x/total.x)+0.5,0.0,1.0);gl_FragColor=vec4(c,c,c,1.0);}"); +f.call(this,a.edgeWork1,{delta:[b/this.width,0]});f.call(this,a.edgeWork2,{delta:[0,b/this.height]});return this}function X(b,d,c){a.hexagonalPixelate=a.hexagonalPixelate||new h(null,"uniform sampler2D texture;uniform vec2 center;uniform float scale;uniform vec2 texSize;varying vec2 texCoord;void main(){vec2 tex=(texCoord*texSize-center)/scale;tex.y/=0.866025404;tex.x-=tex.y*0.5;vec2 a;if(tex.x+tex.y-floor(tex.x)-floor(tex.y)<1.0)a=vec2(floor(tex.x),floor(tex.y));else a=vec2(ceil(tex.x),ceil(tex.y));vec2 b=vec2(ceil(tex.x),floor(tex.y));vec2 c=vec2(floor(tex.x),ceil(tex.y));vec3 TEX=vec3(tex.x,tex.y,1.0-tex.x-tex.y);vec3 A=vec3(a.x,a.y,1.0-a.x-a.y);vec3 B=vec3(b.x,b.y,1.0-b.x-b.y);vec3 C=vec3(c.x,c.y,1.0-c.x-c.y);float alen=length(TEX-A);float blen=length(TEX-B);float clen=length(TEX-C);vec2 choice;if(alen<blen){if(alen<clen)choice=a;else choice=c;}else{if(blen<clen)choice=b;else choice=c;}choice.x+=choice.y*0.5;choice.y*=0.866025404;choice*=scale/texSize;gl_FragColor=texture2D(texture,choice+center/texSize);}"); +f.call(this,a.hexagonalPixelate,{center:[b,d],scale:c,texSize:[this.width,this.height]});return this}function Y(b){a.ink=a.ink||new h(null,"uniform sampler2D texture;uniform float strength;uniform vec2 texSize;varying vec2 texCoord;void main(){vec2 dx=vec2(1.0/texSize.x,0.0);vec2 dy=vec2(0.0,1.0/texSize.y);vec4 color=texture2D(texture,texCoord);float bigTotal=0.0;float smallTotal=0.0;vec3 bigAverage=vec3(0.0);vec3 smallAverage=vec3(0.0);for(float x=-2.0;x<=2.0;x+=1.0){for(float y=-2.0;y<=2.0;y+=1.0){vec3 sample=texture2D(texture,texCoord+dx*x+dy*y).rgb;bigAverage+=sample;bigTotal+=1.0;if(abs(x)+abs(y)<2.0){smallAverage+=sample;smallTotal+=1.0;}}}vec3 edge=max(vec3(0.0),bigAverage/bigTotal-smallAverage/smallTotal);gl_FragColor=vec4(color.rgb-dot(edge,edge)*strength*100000.0,color.a);}"); +f.call(this,a.ink,{strength:b*b*b*b*b,texSize:[this.width,this.height]});return this}function Z(b,d,c,e){a.bulgePinch=a.bulgePinch||u("uniform float radius;uniform float strength;uniform vec2 center;","coord-=center;float distance=length(coord);if(distance<radius){float percent=distance/radius;if(strength>0.0){coord*=mix(1.0,smoothstep(0.0,radius/distance,percent),strength*0.75);}else{coord*=mix(1.0,pow(percent,1.0+strength*0.75)*radius/distance,1.0-percent);}}coord+=center;"); +f.call(this,a.bulgePinch,{radius:c,strength:q(-1,e,1),center:[b,d],texSize:[this.width,this.height]});return this}function $(b,d,c){a.matrixWarp=a.matrixWarp||u("uniform mat3 matrix;uniform bool useTextureSpace;","if(useTextureSpace)coord=coord/texSize*2.0-1.0;vec3 warp=matrix*vec3(coord,1.0);coord=warp.xy/warp.z;if(useTextureSpace)coord=(coord*0.5+0.5)*texSize;");b=Array.prototype.concat.apply([],b);if(4==b.length)b= +[b[0],b[1],0,b[2],b[3],0,0,0,1];else if(9!=b.length)throw"can only warp with 2x2 or 3x3 matrix";f.call(this,a.matrixWarp,{matrix:d?y(b):b,texSize:[this.width,this.height],useTextureSpace:c|0});return this}function aa(a,d){var c=x.apply(null,d),e=x.apply(null,a),c=y(c);return this.matrixWarp([c[0]*e[0]+c[1]*e[3]+c[2]*e[6],c[0]*e[1]+c[1]*e[4]+c[2]*e[7],c[0]*e[2]+c[1]*e[5]+c[2]*e[8],c[3]*e[0]+c[4]*e[3]+c[5]*e[6],c[3]*e[1]+c[4]*e[4]+c[5]*e[7],c[3]*e[2]+c[4]*e[5]+c[5]*e[8],c[6]*e[0]+c[7]*e[3]+c[8]*e[6], +c[6]*e[1]+c[7]*e[4]+c[8]*e[7],c[6]*e[2]+c[7]*e[5]+c[8]*e[8]])}function ba(b,d,c,e){a.swirl=a.swirl||u("uniform float radius;uniform float angle;uniform vec2 center;","coord-=center;float distance=length(coord);if(distance<radius){float percent=(radius-distance)/radius;float theta=percent*percent*angle;float s=sin(theta);float c=cos(theta);coord=vec2(coord.x*c-coord.y*s,coord.x*s+coord.y*c);}coord+=center;"); +f.call(this,a.swirl,{radius:c,center:[b,d],angle:e,texSize:[this.width,this.height]});return this}var v={};(function(){function a(b){if(!b.getExtension("OES_texture_float"))return!1;var c=b.createFramebuffer(),e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE); +b.texImage2D(b.TEXTURE_2D,0,b.RGBA,1,1,0,b.RGBA,b.UNSIGNED_BYTE,null);b.bindFramebuffer(b.FRAMEBUFFER,c);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,e,0);c=b.createTexture();b.bindTexture(b.TEXTURE_2D,c);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texImage2D(b.TEXTURE_2D, +0,b.RGBA,2,2,0,b.RGBA,b.FLOAT,new Float32Array([2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));var e=b.createProgram(),d=b.createShader(b.VERTEX_SHADER),g=b.createShader(b.FRAGMENT_SHADER);b.shaderSource(d,"attribute vec2 vertex;void main(){gl_Position=vec4(vertex,0.0,1.0);}");b.shaderSource(g,"uniform sampler2D texture;void main(){gl_FragColor=texture2D(texture,vec2(0.5));}");b.compileShader(d);b.compileShader(g);b.attachShader(e,d);b.attachShader(e, +g);b.linkProgram(e);d=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,d);b.bufferData(b.ARRAY_BUFFER,new Float32Array([0,0]),b.STREAM_DRAW);b.enableVertexAttribArray(0);b.vertexAttribPointer(0,2,b.FLOAT,!1,0,0);d=new Uint8Array(4);b.useProgram(e);b.viewport(0,0,1,1);b.bindTexture(b.TEXTURE_2D,c);b.drawArrays(b.POINTS,0,1);b.readPixels(0,0,1,1,b.RGBA,b.UNSIGNED_BYTE,d);return 127===d[0]||128===d[0]}function d(){}function c(a){"OES_texture_float_linear"===a?(void 0===this.$OES_texture_float_linear$&&Object.defineProperty(this, +"$OES_texture_float_linear$",{enumerable:!1,configurable:!1,writable:!1,value:new d}),a=this.$OES_texture_float_linear$):a=n.call(this,a);return a}function e(){var a=f.call(this);-1===a.indexOf("OES_texture_float_linear")&&a.push("OES_texture_float_linear");return a}try{var g=document.createElement("canvas").getContext("experimental-webgl")}catch(l){}if(g&&-1===g.getSupportedExtensions().indexOf("OES_texture_float_linear")&&a(g)){var n=WebGLRenderingContext.prototype.getExtension,f=WebGLRenderingContext.prototype.getSupportedExtensions; +WebGLRenderingContext.prototype.getExtension=c;WebGLRenderingContext.prototype.getSupportedExtensions=e}})();var a;v.canvas=function(){var b=document.createElement("canvas");try{a=b.getContext("experimental-webgl",{premultipliedAlpha:!1})}catch(d){a=null}if(!a)throw"This browser does not support WebGL";b._={gl:a,isInitialized:!1,texture:null,spareTexture:null,flippedShader:null};b.texture=k(A);b.draw=k(C);b.update=k(D);b.replace=k(E);b.contents=k(F);b.getPixelArray=k(G);b.brightnessContrast=k(H); +b.hexagonalPixelate=k(X);b.hueSaturation=k(K);b.colorHalftone=k(U);b.triangleBlur=k(S);b.unsharpMask=k(N);b.perspective=k(aa);b.matrixWarp=k($);b.bulgePinch=k(Z);b.tiltShift=k(R);b.dotScreen=k(V);b.edgeWork=k(W);b.lensBlur=k(Q);b.zoomBlur=k(T);b.noise=k(L);b.denoise=k(J);b.curves=k(I);b.swirl=k(ba);b.ink=k(Y);b.vignette=k(P);b.vibrance=k(O);b.sepia=k(M);return b};v.splineInterpolate=t;var h=function(){function b(b,c){var e=a.createShader(b);a.shaderSource(e,c);a.compileShader(e);if(!a.getShaderParameter(e, +a.COMPILE_STATUS))throw"compile error: "+a.getShaderInfoLog(e);return e}function d(d,l){this.texCoordAttribute=this.vertexAttribute=null;this.program=a.createProgram();d=d||c;l=l||e;l="precision highp float;"+l;a.attachShader(this.program,b(a.VERTEX_SHADER,d));a.attachShader(this.program,b(a.FRAGMENT_SHADER,l));a.linkProgram(this.program);if(!a.getProgramParameter(this.program,a.LINK_STATUS))throw"link error: "+a.getProgramInfoLog(this.program);}var c="attribute vec2 vertex;attribute vec2 _texCoord;varying vec2 texCoord;void main(){texCoord=_texCoord;gl_Position=vec4(vertex*2.0-1.0,0.0,1.0);}", +e="uniform sampler2D texture;varying vec2 texCoord;void main(){gl_FragColor=texture2D(texture,texCoord);}";d.prototype.destroy=function(){a.deleteProgram(this.program);this.program=null};d.prototype.uniforms=function(b){a.useProgram(this.program);for(var e in b)if(b.hasOwnProperty(e)){var c=a.getUniformLocation(this.program,e);if(null!==c){var d=b[e];if("[object Array]"==Object.prototype.toString.call(d))switch(d.length){case 1:a.uniform1fv(c,new Float32Array(d));break; +case 2:a.uniform2fv(c,new Float32Array(d));break;case 3:a.uniform3fv(c,new Float32Array(d));break;case 4:a.uniform4fv(c,new Float32Array(d));break;case 9:a.uniformMatrix3fv(c,!1,new Float32Array(d));break;case 16:a.uniformMatrix4fv(c,!1,new Float32Array(d));break;default:throw"dont't know how to load uniform \""+e+'" of length '+d.length;}else if("[object Number]"==Object.prototype.toString.call(d))a.uniform1f(c,d);else throw'attempted to set uniform "'+e+'" to invalid value '+(d||"undefined").toString(); +}}return this};d.prototype.textures=function(b){a.useProgram(this.program);for(var c in b)b.hasOwnProperty(c)&&a.uniform1i(a.getUniformLocation(this.program,c),b[c]);return this};d.prototype.drawRect=function(b,c,e,d){var f=a.getParameter(a.VIEWPORT);c=void 0!==c?(c-f[1])/f[3]:0;b=void 0!==b?(b-f[0])/f[2]:0;e=void 0!==e?(e-f[0])/f[2]:1;d=void 0!==d?(d-f[1])/f[3]:1;null==a.vertexBuffer&&(a.vertexBuffer=a.createBuffer());a.bindBuffer(a.ARRAY_BUFFER,a.vertexBuffer);a.bufferData(a.ARRAY_BUFFER,new Float32Array([b, +c,b,d,e,c,e,d]),a.STATIC_DRAW);null==a.texCoordBuffer&&(a.texCoordBuffer=a.createBuffer(),a.bindBuffer(a.ARRAY_BUFFER,a.texCoordBuffer),a.bufferData(a.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),a.STATIC_DRAW));null==this.vertexAttribute&&(this.vertexAttribute=a.getAttribLocation(this.program,"vertex"),a.enableVertexAttribArray(this.vertexAttribute));null==this.texCoordAttribute&&(this.texCoordAttribute=a.getAttribLocation(this.program,"_texCoord"),a.enableVertexAttribArray(this.texCoordAttribute)); +a.useProgram(this.program);a.bindBuffer(a.ARRAY_BUFFER,a.vertexBuffer);a.vertexAttribPointer(this.vertexAttribute,2,a.FLOAT,!1,0,0);a.bindBuffer(a.ARRAY_BUFFER,a.texCoordBuffer);a.vertexAttribPointer(this.texCoordAttribute,2,a.FLOAT,!1,0,0);a.drawArrays(a.TRIANGLE_STRIP,0,4)};d.getDefaultShader=function(){a.defaultShader=a.defaultShader||new d;return a.defaultShader};return d}();z.prototype.interpolate=function(a){for(var d=0,c=this.ya.length-1;1<c-d;){var e=c+d>>1;this.xa[e]>a?c=e:d=e}var e=this.xa[c]- +this.xa[d],g=(this.xa[c]-a)/e;a=(a-this.xa[d])/e;return g*this.ya[d]+a*this.ya[c]+((g*g*g-g)*this.y2[d]+(a*a*a-a)*this.y2[c])*e*e/6};var r=function(){function b(b,c,d,f){this.gl=a;this.id=a.createTexture();this.width=b;this.height=c;this.format=d;this.type=f;a.bindTexture(a.TEXTURE_2D,this.id);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);a.texParameteri(a.TEXTURE_2D, +a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE);b&&c&&a.texImage2D(a.TEXTURE_2D,0,this.format,b,c,0,this.format,this.type,null)}function d(a){null==c&&(c=document.createElement("canvas"));c.width=a.width;c.height=a.height;a=c.getContext("2d");a.clearRect(0,0,c.width,c.height);return a}b.fromElement=function(c){var d=new b(0,0,a.RGBA,a.UNSIGNED_BYTE);d.loadContentsOf(c);return d};b.prototype.loadContentsOf=function(b){this.width=b.width||b.videoWidth;this.height=b.height||b.videoHeight;a.bindTexture(a.TEXTURE_2D, +this.id);a.texImage2D(a.TEXTURE_2D,0,this.format,this.format,this.type,b)};b.prototype.initFromBytes=function(b,c,d){this.width=b;this.height=c;this.format=a.RGBA;this.type=a.UNSIGNED_BYTE;a.bindTexture(a.TEXTURE_2D,this.id);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,this.type,new Uint8Array(d))};b.prototype.destroy=function(){a.deleteTexture(this.id);this.id=null};b.prototype.use=function(b){a.activeTexture(a.TEXTURE0+(b||0));a.bindTexture(a.TEXTURE_2D,this.id)};b.prototype.unuse=function(b){a.activeTexture(a.TEXTURE0+ +(b||0));a.bindTexture(a.TEXTURE_2D,null)};b.prototype.ensureFormat=function(b,c,d,f){if(1==arguments.length){var h=arguments[0];b=h.width;c=h.height;d=h.format;f=h.type}if(b!=this.width||c!=this.height||d!=this.format||f!=this.type)this.width=b,this.height=c,this.format=d,this.type=f,a.bindTexture(a.TEXTURE_2D,this.id),a.texImage2D(a.TEXTURE_2D,0,this.format,b,c,0,this.format,this.type,null)};b.prototype.drawTo=function(b){a.framebuffer=a.framebuffer||a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER, +a.framebuffer);a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,this.id,0);if(a.checkFramebufferStatus(a.FRAMEBUFFER)!==a.FRAMEBUFFER_COMPLETE)throw Error("incomplete framebuffer");a.viewport(0,0,this.width,this.height);b();a.bindFramebuffer(a.FRAMEBUFFER,null)};var c=null;b.prototype.fillUsingCanvas=function(b){b(d(this));this.format=a.RGBA;this.type=a.UNSIGNED_BYTE;a.bindTexture(a.TEXTURE_2D,this.id);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,c);return this}; +b.prototype.toImage=function(b){this.use();h.getDefaultShader().drawRect();var f=4*this.width*this.height,k=new Uint8Array(f),n=d(this),p=n.createImageData(this.width,this.height);a.readPixels(0,0,this.width,this.height,a.RGBA,a.UNSIGNED_BYTE,k);for(var m=0;m<f;m++)p.data[m]=k[m];n.putImageData(p,0,0);b.src=c.toDataURL()};b.prototype.swapWith=function(a){var b;b=a.id;a.id=this.id;this.id=b;b=a.width;a.width=this.width;this.width=b;b=a.height;a.height=this.height;this.height=b;b=a.format;a.format= +this.format;this.format=b};return b}(),s="float random(vec3 scale,float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}";return v}(); diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.xml new file mode 100644 index 00000000000..e1b2e36391a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/glfx/glfx.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>glfx.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony.xml new file mode 100644 index 00000000000..3370d1f71ab --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>harmony</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.js new file mode 100644 index 00000000000..21b2a5bbac6 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.js @@ -0,0 +1,130 @@ +//http://ricardocabello.com/blog/post/689 +var sketchy_brush = { + context: null, + prevMouseX: null, + prevMouseY: null, + points: null, + count: null, + init: function (a) { + this.context = a; + this.context.globalCompositeOperation = "source-over"; + this.points = new Array(); + this.count = 0 + }, + destroy: function () { + }, + strokeStart: function (b, a) { + this.prevMouseX = b; + this.prevMouseY = a + }, + stroke: function (color_rgb, f, c, size) { + var e, b, a, g; + this.points.push([f, c]); + this.context.strokeStyle = "rgba(" + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ", 0.1)"; + this.context.beginPath(); + this.context.moveTo(this.prevMouseX, this.prevMouseY); + this.context.lineTo(f, c); + this.context.stroke(); + this.context.strokeStyle = "rgba(" + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ", 0.1 )"; + for (e = 0; e < this.points.length; e++) { + b = this.points[e][0] - this.points[this.count][0]; + a = this.points[e][1] - this.points[this.count][1]; + g = b * b + a * a; + if (g < 800 * size && Math.random() > g / (400 * size)) { + this.context.beginPath(); + this.context.moveTo(this.points[this.count][0] + (b * 0.3), this.points[this.count][1] + (a * 0.3)); + this.context.lineTo(this.points[e][0] - (b * 0.3), this.points[e][1] - (a * 0.3)); + this.context.stroke(); + } + } + this.prevMouseX = f; + this.prevMouseY = c; + this.count++ + }, + strokeEnd: function (b, a) { + } +}; +var shaded_brush = { + context: null, + prevMouseX: null, + prevMouseY: null, + points: null, + count: null, + init: function (a) { + this.context = a; + this.context.globalCompositeOperation = "source-over"; + this.points = new Array(); + this.count = 0 + }, + destroy: function () { + }, + strokeStart: function (b, a) { + this.prevMouseX = b; + this.prevMouseY = a + }, + stroke: function (color_rgb, f, c, size) { + var e, b, a, g; + this.points.push([f, c]); + for (e = 0; e < this.points.length; e++) { + b = this.points[e][0] - this.points[this.count][0]; + a = this.points[e][1] - this.points[this.count][1]; + g = b * b + a * a; + if (g < 200 * size) { + this.context.strokeStyle = "rgba(" + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ", " + ((1 - (g / (200 * size))) * 0.1) + " )"; + this.context.beginPath(); + this.context.moveTo(this.points[this.count][0], this.points[this.count][1]); + this.context.lineTo(this.points[e][0], this.points[e][1]); + this.context.stroke() + } + } + this.prevMouseX = f; + this.prevMouseY = c; + this.count++ + }, + strokeEnd: function (b, a) { + } +}; +var chrome_brush = { + context: null, + prevMouseX: null, + prevMouseY: null, + points: null, + count: null, + init: function (a) { + this.context = a; + this.points = new Array(); + this.count = 0 + }, + destroy: function () { + }, + strokeStart: function (b, a) { + this.prevMouseX = b; + this.prevMouseY = a + }, + stroke: function (color_rgb, f, c, size) { + var e, b, a, g; + this.points.push([f, c]); + this.context.strokeStyle = "rgba(" + color_rgb.r + ', ' + color_rgb.g + ', ' + color_rgb.b + ", 0.1)"; + this.context.beginPath(); + this.context.moveTo(this.prevMouseX, this.prevMouseY); + this.context.lineTo(f, c); + this.context.stroke(); + for (e = 0; e < this.points.length; e++) { + b = this.points[e][0] - this.points[this.count][0]; + a = this.points[e][1] - this.points[this.count][1]; + g = b * b + a * a; + if (g < 200 * size) { + this.context.strokeStyle = "rgba(" + Math.floor(Math.random() * 255) + ", " + Math.floor(Math.random() * 255) + ", " + Math.floor(Math.random() * 255) + ", 0.1 )"; + this.context.beginPath(); + this.context.moveTo(this.points[this.count][0] + (b * 0.2), this.points[this.count][1] + (a * 0.2)); + this.context.lineTo(this.points[e][0] - (b * 0.2), this.points[e][1] - (a * 0.2)); + this.context.stroke() + } + } + this.prevMouseX = f; + this.prevMouseY = c; + this.count++ + }, + strokeEnd: function (b, a) { + } +}; diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.xml new file mode 100644 index 00000000000..74916fc929e --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>harmony.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.js new file mode 100644 index 00000000000..56981ac3095 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.js @@ -0,0 +1,2 @@ +//http://ricardocabello.com/blog/post/689 +var sketchy_brush={context:null,prevMouseX:null,prevMouseY:null,points:null,count:null,init:function(a){this.context=a,this.context.globalCompositeOperation="source-over",this.points=new Array,this.count=0},destroy:function(){},strokeStart:function(a,b){this.prevMouseX=a,this.prevMouseY=b},stroke:function(a,b,c,d){var e,f,g,h;for(this.points.push([b,c]),this.context.strokeStyle="rgba("+a.r+", "+a.g+", "+a.b+", 0.1)",this.context.beginPath(),this.context.moveTo(this.prevMouseX,this.prevMouseY),this.context.lineTo(b,c),this.context.stroke(),this.context.strokeStyle="rgba("+a.r+", "+a.g+", "+a.b+", 0.1 )",e=0;e<this.points.length;e++)f=this.points[e][0]-this.points[this.count][0],g=this.points[e][1]-this.points[this.count][1],h=f*f+g*g,h<800*d&&Math.random()>h/(400*d)&&(this.context.beginPath(),this.context.moveTo(this.points[this.count][0]+.3*f,this.points[this.count][1]+.3*g),this.context.lineTo(this.points[e][0]-.3*f,this.points[e][1]-.3*g),this.context.stroke());this.prevMouseX=b,this.prevMouseY=c,this.count++},strokeEnd:function(a,b){}},shaded_brush={context:null,prevMouseX:null,prevMouseY:null,points:null,count:null,init:function(a){this.context=a,this.context.globalCompositeOperation="source-over",this.points=new Array,this.count=0},destroy:function(){},strokeStart:function(a,b){this.prevMouseX=a,this.prevMouseY=b},stroke:function(a,b,c,d){var e,f,g,h;for(this.points.push([b,c]),e=0;e<this.points.length;e++)f=this.points[e][0]-this.points[this.count][0],g=this.points[e][1]-this.points[this.count][1],h=f*f+g*g,h<200*d&&(this.context.strokeStyle="rgba("+a.r+", "+a.g+", "+a.b+", "+.1*(1-h/(200*d))+" )",this.context.beginPath(),this.context.moveTo(this.points[this.count][0],this.points[this.count][1]),this.context.lineTo(this.points[e][0],this.points[e][1]),this.context.stroke());this.prevMouseX=b,this.prevMouseY=c,this.count++},strokeEnd:function(a,b){}},chrome_brush={context:null,prevMouseX:null,prevMouseY:null,points:null,count:null,init:function(a){this.context=a,this.points=new Array,this.count=0},destroy:function(){},strokeStart:function(a,b){this.prevMouseX=a,this.prevMouseY=b},stroke:function(a,b,c,d){var e,f,g,h;for(this.points.push([b,c]),this.context.strokeStyle="rgba("+a.r+", "+a.g+", "+a.b+", 0.1)",this.context.beginPath(),this.context.moveTo(this.prevMouseX,this.prevMouseY),this.context.lineTo(b,c),this.context.stroke(),e=0;e<this.points.length;e++)f=this.points[e][0]-this.points[this.count][0],g=this.points[e][1]-this.points[this.count][1],h=f*f+g*g,h<200*d&&(this.context.strokeStyle="rgba("+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", 0.1 )",this.context.beginPath(),this.context.moveTo(this.points[this.count][0]+.2*f,this.points[this.count][1]+.2*g),this.context.lineTo(this.points[e][0]-.2*f,this.points[e][1]-.2*g),this.context.stroke());this.prevMouseX=b,this.prevMouseY=c,this.count++},strokeEnd:function(a,b){}}; \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.xml new file mode 100644 index 00000000000..45b79b629ee --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/harmony/harmony.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>harmony.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize.xml new file mode 100644 index 00000000000..bbfcbb25c0a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>hermite-resize</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.js new file mode 100644 index 00000000000..5b9d1befdf9 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.js @@ -0,0 +1,5 @@ +//Hermite resize - fast image resize/resample using Hermite filter. +//Author: ViliusL +//https://github.com/viliusle/Hermite-resize +//http://viliusle.github.io/miniPaint/ +function Hermite_class(){var a,c,b=[];this.init=function(){a=navigator.hardwareConcurrency||4}(),this.getCores=function(){return a},this.resample_auto=function(a,b,c,d,e){var f=this.getCores();window.Worker&&f>1?this.resample(a,b,c,d,e):(this.resample_single(a,b,c,!0),e())},this.resize_image=function(a,b,c,d,e){var f=document.getElementById(a),g=document.createElement("canvas");g.width=f.width,g.height=f.height;var h=g.getContext("2d");if(h.drawImage(f,0,0),void 0==b&&void 0==c&&void 0!=d&&(b=f.width/100*d,c=f.height/100*d),void 0==c){var i=f.width/b;c=f.height/i}b=Math.round(b),c=Math.round(c);var j=function(){var a=g.toDataURL();f.width=b,f.height=c,f.src=a,delete a,delete g};void 0==e||1==e?this.resample(g,b,c,!0,j):(this.resample_single(g,b,c,!0),j())},this.resample=function(d,e,f,g,h){var i=d.width,j=d.height;e=Math.round(e),f=Math.round(f);var k=Math.ceil(j/f/2);if(b.length>0)for(var l=0;l<a;l++)void 0!=b[l]&&(b[l].terminate(),delete b[l]);b=new Array(a);for(var m=d.getContext("2d"),n=new Array(a),o=new Array(a),l=0;l<a;l++){var p=Math.ceil(j/a)*l,q=Math.ceil(j/a)+k*a;p+q>j&&(q=j-p),q<1||(n[l]=m.getImageData(0,p,i,q),p=Math.ceil(f/a)*l,q=Math.ceil(f/a),p+q>f&&(q=f-p),q<1||(o[l]=!0))}g===!0?(d.width=e,d.height=f):m.clearRect(0,0,i,j);for(var r=0,l=0;l<a;l++)if(void 0!=o[l]){r++;var s=new Worker(c);b[l]=s,s.onmessage=function(c){r--;var d=c.data.core;delete b[d],o[d]=m.createImageData(e,Math.ceil(f/a)),o[d].data.set(c.data.target);var g=Math.ceil(f/a)*d;m.putImageData(o[d],0,g),r<=0&&h()};var t={width_source:i,height_source:j,width:e,height:f,core:l,cores:a,source:n[l].data.buffer};s.postMessage(t,[t.source])}},c=URL.createObjectURL(new Blob(["(",function(){onmessage=function(a){for(var b=a.data.core,c=a.data.cores,d=a.data.width_source,e=a.data.height_source,f=a.data.width,g=a.data.height,h=d/f,i=e/g,j=Math.ceil(h/2),k=Math.ceil(i/2),l=new Uint8ClampedArray(a.data.source),m=l.length/d/4,n=f*Math.ceil(g/c)*4,o=new ArrayBuffer(n),p=new Uint8ClampedArray(o,0,n),q=Math.ceil(e/c)*b,r=Math.ceil(g/c)*b,s=0;s<Math.ceil(g/c);s++)for(var t=0;t<f;t++){for(var u=4*(t+s*f),v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=(r+s+.5)*i-q,D=Math.floor(s*i),E=Math.ceil((r+s+1)*i-q),F=Math.floor(t*h),G=Math.ceil((t+1)*h),H=D;H<E;H++)if(!(H>=m||H<0))for(var I=Math.abs(C-(H+.5))/k,J=(t+.5)*h,K=I*I,L=F;L<G;L++){var M=Math.abs(J-(L+.5))/j,N=Math.sqrt(K+M*M);if(!(N>=1)){v=2*N*N*N-3*N*N+1;var O=4*(L+H*d);B+=v*l[O+3],x+=v,l[O+3]<255&&(v=v*l[O+3]/250),y+=v*l[O],z+=v*l[O+1],A+=v*l[O+2],w+=v}}p[u]=y/w,p[u+1]=z/w,p[u+2]=A/w,p[u+3]=B/x}var P={core:b,target:p};postMessage(P,[p.buffer])}}.toString(),")()"],{type:"application/javascript"})),this.resample_single=function(a,b,c,d){var e=a.width,f=a.height;b=Math.round(b),c=Math.round(c);for(var g=e/b,h=f/c,i=Math.ceil(g/2),j=Math.ceil(h/2),k=a.getContext("2d"),l=k.getImageData(0,0,e,f),m=k.createImageData(b,c),n=l.data,o=m.data,p=0;p<c;p++)for(var q=0;q<b;q++){for(var r=4*(q+p*b),s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=(p+.5)*h,A=Math.floor(p*h),B=Math.ceil((p+1)*h),C=A;C<B;C++)for(var D=Math.abs(z-(C+.5))/j,E=(q+.5)*g,F=D*D,G=Math.floor(q*g),H=Math.ceil((q+1)*g),I=G;I<H;I++){var J=Math.abs(E-(I+.5))/i,K=Math.sqrt(F+J*J);if(!(K>=1)){s=2*K*K*K-3*K*K+1;var L=4*(I+C*e);y+=s*n[L+3],u+=s,n[L+3]<255&&(s=s*n[L+3]/250),v+=s*n[L],w+=s*n[L+1],x+=s*n[L+2],t+=s}}o[r]=v/t,o[r+1]=w/t,o[r+2]=x/t,o[r+3]=y/u}d===!0?(a.width=b,a.height=c):k.clearRect(0,0,e,f),k.putImageData(m,0,0)}} \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.xml new file mode 100644 index 00000000000..90df55faff9 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hermite-resize/hermite.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>hermite.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx.xml new file mode 100644 index 00000000000..2ce1ba35157 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>hqx</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.js new file mode 100644 index 00000000000..dfe99277fee --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.js @@ -0,0 +1,11876 @@ +// ==ClosureCompiler== +// @compilation_level SIMPLE_OPTIMIZATIONS +// ==/ClosureCompiler== + +/* + * Copyright (C) 2003 Maxim Stepin ( maxst@hiend3d.com ) + * + * Copyright (C) 2010 Cameron Zemek ( grom@zeminvaders.net ) + * + * Copyright (C) 2010 Dominic Szablewski ( mail@phoboslab.org ) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +(function(window){ + +"use strict"; // strict will be optimized on engines (https://developer.mozilla.org/en/JavaScript/Strict_mode) + +var + _src = null, + _dest = null, + + _MASK_2 = 0x00FF00, + _MASK_13 = 0xFF00FF, + + _Ymask = 0x00FF0000, + _Umask = 0x0000FF00, + _Vmask = 0x000000FF, + + _trY = 0x00300000, + _trU = 0x00000700, + _trV = 0x00000006; + +var _Math = window.Math; // global to local. SHALL NOT cache abs directly (http://jsperf.com/math-vs-global/2) + +var _RGBtoYUV = function( c ) { + var r = (c & 0xFF0000) >> 16; + var g = (c & 0x00FF00) >> 8; + var b = c & 0x0000FF; + return ((/*y=*/(0.299*r + 0.587*g + 0.114*b) | 0) << 16) + + ((/*u=*/((-0.169*r - 0.331*g + 0.5*b) + 128) | 0) << 8) + + (/*v=*/((0.5*r - 0.419*g - 0.081*b) + 128) | 0); +}; + +var _Diff = function( w1, w2 ) { + // Mask against RGB_MASK to discard the alpha channel + var YUV1 = _RGBtoYUV(w1); + var YUV2 = _RGBtoYUV(w2); + return ((_Math.abs((YUV1 & _Ymask) - (YUV2 & _Ymask)) > _trY ) || + ( _Math.abs((YUV1 & _Umask) - (YUV2 & _Umask)) > _trU ) || + ( _Math.abs((YUV1 & _Vmask) - (YUV2 & _Vmask)) > _trV ) ); +}; + +/* Interpolate functions */ + +var _Interp1 = function( pc, c1, c2 ) { + //*pc = (c1*3+c2) >> 2; + if (c1 === c2) { + _dest[pc] = c1; + return; + } + _dest[pc] = ((((c1 & _MASK_2) * 3 + (c2 & _MASK_2)) >> 2) & _MASK_2) + + ((((c1 & _MASK_13) * 3 + (c2 & _MASK_13)) >> 2) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp2 = function( pc, c1, c2, c3 ) { + //*pc = (c1*2+c2+c3) >> 2; + _dest[pc] = (((((c1 & _MASK_2) << 1) + (c2 & _MASK_2) + (c3 & _MASK_2)) >> 2) & _MASK_2) + + (((((c1 & _MASK_13) << 1) + (c2 & _MASK_13) + (c3 & _MASK_13)) >> 2) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp3 = function( pc, c1, c2 ) { + //*pc = (c1*7+c2)/8; + if (c1 === c2) { + _dest[pc] = c1; + return; + } + _dest[pc] = ((((c1 & _MASK_2) * 7 + (c2 & _MASK_2)) >> 3) & _MASK_2) + + ((((c1 & _MASK_13) * 7 + (c2 & _MASK_13)) >> 3) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp4 = function( pc, c1, c2, c3 ) { + //*pc = (c1*2+(c2+c3)*7)/16; + _dest[pc] = (((((c1 & _MASK_2) << 1) + (c2 & _MASK_2) * 7 + (c3 & _MASK_2) * 7) >> 4) & _MASK_2) + + (((((c1 & _MASK_13) << 1) + (c2 & _MASK_13) * 7 + (c3 & _MASK_13) * 7) >> 4) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp5 = function( pc, c1, c2 ) { + //*pc = (c1+c2) >> 1; + if (c1 === c2) { + _dest[pc] = c1; + return; + } + _dest[pc] = ((((c1 & _MASK_2) + (c2 & _MASK_2)) >> 1) & _MASK_2) + + ((((c1 & _MASK_13) + (c2 & _MASK_13)) >> 1) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp6 = function( pc, c1, c2, c3 ) { + //*pc = (c1*5+c2*2+c3)/8; + _dest[pc] = ((((c1 & _MASK_2) * 5 + ((c2 & _MASK_2) << 1) + (c3 & _MASK_2)) >> 3) & _MASK_2) + + ((((c1 & _MASK_13) * 5 + ((c2 & _MASK_13) << 1) + (c3 & _MASK_13)) >> 3) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp7 = function( pc, c1, c2, c3 ) { + //*pc = (c1*6+c2+c3)/8; + _dest[pc] = ((((c1 & _MASK_2) * 6 + (c2 & _MASK_2) + (c3 & _MASK_2)) >> 3) & _MASK_2) + + ((((c1 & _MASK_13) * 6 + (c2 & _MASK_13) + (c3 & _MASK_13)) >> 3) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp8 = function( pc, c1, c2 ) { + //*pc = (c1*5+c2*3)/8; + if (c1 === c2) { + _dest[pc] = c1; + return; + } + _dest[pc] = ((((c1 & _MASK_2) * 5 + (c2 & _MASK_2) * 3) >> 3) & _MASK_2) + + ((((c1 & _MASK_13) * 5 + (c2 & _MASK_13) * 3) >> 3) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp9 = function( pc, c1, c2, c3 ) { + //*pc = (c1*2+(c2+c3)*3)/8; + _dest[pc] = (((((c1 & _MASK_2) << 1) + (c2 & _MASK_2) * 3 + (c3 & _MASK_2) * 3) >> 3) & _MASK_2) + + (((((c1 & _MASK_13) << 1) + (c2 & _MASK_13) * 3 + (c3 & _MASK_13) * 3) >> 3) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + +var _Interp10 = function( pc, c1, c2, c3 ) { + //*pc = (c1*14+c2+c3)/16; + _dest[pc] = ((((c1 & _MASK_2) * 14 + (c2 & _MASK_2) + (c3 & _MASK_2)) >> 4) & _MASK_2) + + ((((c1 & _MASK_13) * 14 + (c2 & _MASK_13) + (c3 & _MASK_13)) >> 4) & _MASK_13); + + _dest[pc] |= (c1 & 0xFF000000); +}; + + +var getVendorAttribute = function( el, attr ) { + var uc = attr.charAt(0).toUpperCase() + attr.substr(1); + return el[attr] || el['ms'+uc] || el['moz'+uc] || el['webkit'+uc] || el['o'+uc]; +}; + + +// This function normalizes getImageData to extract the real, actual +// pixels from an image. The naive method recently failed on retina +// devices with a backgingStoreRatio != 1 +var getImagePixels = function( image, x, y, width, height ) { + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + var ratio = getVendorAttribute( ctx, 'backingStorePixelRatio' ) || 1; + ctx.getImageDataHD = getVendorAttribute( ctx, 'getImageDataHD' ); + + var realWidth = image.width / ratio, + realHeight = image.height / ratio; + + canvas.width = Math.ceil( realWidth ); + canvas.height = Math.ceil( realHeight ); + + ctx.drawImage( image, 0, 0, realWidth, realHeight ); + + return (ratio === 1) + ? ctx.getImageData( x, y, width, height ) + : ctx.getImageDataHD( x, y, width, height ); +}; + + +window.hqx = function( img, scale ) { + // We can only scale with a factor of 2, 3 or 4 + if( [2,3,4].indexOf(scale) === -1 ) { + return img; + } + + var orig, origCtx, scaled, origPixels; + if (img instanceof HTMLCanvasElement){ + orig = img; + origCtx = orig.getContext('2d'); + scaled = orig; + origPixels = origCtx.getImageData(0, 0, orig.width, orig.height).data; + } else { + origPixels = getImagePixels( img, 0, 0, img.width, img.height ).data; + scaled = document.createElement('canvas'); + } + + + // pack RGBA colors into integers + var count = img.width * img.height; + var src = _src = new Array(count); + var dest = _dest = new Array(count*scale*scale); + var index; + for(var i = 0; i < count; i++) { + src[i] = (origPixels[(index = i << 2)+3] << 24) + + (origPixels[index+2] << 16) + + (origPixels[index+1] << 8) + + origPixels[index]; + } + + // This is where the magic happens + if( scale === 2 ) hq2x( img.width, img.height ); + else if( scale === 3 ) hq3x( img.width, img.height ); + else if( scale === 4 ) hq4x( img.width, img.height ); + // alternative: window['hq'+scale+'x']( img.width, img.height ); + + scaled.width = img.width * scale; + scaled.height = img.height * scale; + + var scaledCtx = scaled.getContext('2d'); + var scaledPixels = scaledCtx.getImageData( 0, 0, scaled.width, scaled.height ); + var scaledPixelsData = scaledPixels.data; + + // unpack integers to RGBA + var c, a, destLength = dest.length; + for( var j = 0; j < destLength; j++ ) { + a = ((c = dest[j]) & 0xFF000000) >> 24; + scaledPixelsData[(index = j << 2)+3] = a < 0 ? a + 256 : 0; // signed/unsigned :/ + scaledPixelsData[index+2] = (c & 0x00FF0000) >> 16; + scaledPixelsData[index+1] = (c & 0x0000FF00) >> 8; + scaledPixelsData[index] = c & 0x000000FF; + } + _src = src = null; + _dest = dest = null; + //scaledCtx.putImageData( scaledPixels, 0, 0 ); + //return scaled; + + return scaledPixels; +}; + + + + + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// hq 2x + +var hq2x = function( width, height ) { + var + i, j, k, + prevline, nextline, + w = [], + //dpL = width * 2, optimized + dpL = width << 1, + + dp = 0, + sp = 0; + + // internal to local optimization + var + Diff = _Diff, + Math = _Math, + RGBtoYUV = _RGBtoYUV, + Interp1 = _Interp1, + Interp2 = _Interp2, + Interp3 = _Interp3, + Interp4 = _Interp4, + Interp5 = _Interp5, + Interp6 = _Interp6, + Interp7 = _Interp7, + Interp8 = _Interp8, + Interp9 = _Interp9, + Interp10 = _Interp10, + src = _src, + dest = _dest, + MASK_2 = _MASK_2, + MASK_13 = _MASK_13, + Ymask = _Ymask, + Umask = _Umask, + Vmask = _Vmask, + trY = _trY, + trU = _trU, + trV = _trV, + YUV1, YUV2; + + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for (j=0; j<height; j++) + { + prevline = j>0 ? -width : 0; + nextline = j<height-1 ? width : 0; + + for (i=0; i<width; i++) + { + w[2] = src[sp + prevline]; + w[5] = src[sp]; + w[8] = src[sp + nextline]; + + if (i>0) + { + w[1] = src[sp + prevline - 1]; + w[4] = src[sp - 1]; + w[7] = src[sp + nextline - 1]; + } + else + { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if (i<width-1) + { + w[3] = src[sp + prevline + 1]; + w[6] = src[sp + 1]; + w[9] = src[sp + nextline + 1]; + } + else + { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + var pattern = 0; + var flag = 1; + + YUV1 = RGBtoYUV(w[5]); + + //for (k=1; k<=9; k++) optimized + for (k=1; k < 10; k++) // k<=9 + { + if (k===5) continue; + + if ( w[k] !== w[5] ) + { + YUV2 = RGBtoYUV(w[k]); + if ( ( Math.abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) || + ( Math.abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) || + ( Math.abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) ) + pattern |= flag; + } + flag <<= 1; + } + + switch (pattern) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 2: + case 34: + case 130: + case 162: + { + Interp2(dp, w[5], w[1], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 16: + case 17: + case 48: + case 49: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 64: + case 65: + case 68: + case 69: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 8: + case 12: + case 136: + case 140: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 3: + case 35: + case 131: + case 163: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 6: + case 38: + case 134: + case 166: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 20: + case 21: + case 52: + case 53: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 144: + case 145: + case 176: + case 177: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 192: + case 193: + case 196: + case 197: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 96: + case 97: + case 100: + case 101: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 40: + case 44: + case 168: + case 172: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 9: + case 13: + case 137: + case 141: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 18: + case 50: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 80: + case 81: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 72: + case 76: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 66: + { + Interp2(dp, w[5], w[1], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 24: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 7: + case 39: + case 135: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 148: + case 149: + case 180: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 224: + case 228: + case 225: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 41: + case 169: + case 45: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 22: + case 54: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 208: + case 209: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 104: + case 108: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp6(dp, w[5], w[2], w[4]); + Interp9(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 146: + case 178: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + Interp1(dp+dpL+1, w[5], w[8]); + } + else + { + Interp9(dp+1, w[5], w[2], w[6]); + Interp6(dp+dpL+1, w[5], w[6], w[8]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + break; + } + case 84: + case 85: + { + Interp2(dp, w[5], w[4], w[2]); + if (Diff(w[6], w[8])) + { + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp6(dp+1, w[5], w[6], w[2]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + break; + } + case 112: + case 113: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp6(dp+dpL, w[5], w[8], w[4]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 200: + case 204: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + Interp1(dp+dpL+1, w[5], w[6]); + } + else + { + Interp9(dp+dpL, w[5], w[8], w[4]); + Interp6(dp+dpL+1, w[5], w[8], w[6]); + } + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp6(dp, w[5], w[4], w[2]); + Interp9(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + Interp1(dp+dpL, w[5], w[8]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+dpL, w[5], w[4], w[8]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 67: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 70: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 28: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 152: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 194: + { + Interp2(dp, w[5], w[1], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 98: + { + Interp2(dp, w[5], w[1], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 56: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 25: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 82: + case 214: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 88: + case 248: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[3]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 86: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 216: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 106: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 30: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 210: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[3]); + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 120: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[7]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 29: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 198: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 184: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 99: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 57: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 71: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 156: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 226: + { + Interp2(dp, w[5], w[1], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 60: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 195: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 102: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 153: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 83: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 92: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 114: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 89: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + } + else + { + Interp6(dp, w[5], w[2], w[4]); + Interp9(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 182: + case 150: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + Interp1(dp+dpL+1, w[5], w[8]); + } + else + { + Interp9(dp+1, w[5], w[2], w[6]); + Interp6(dp+dpL+1, w[5], w[6], w[8]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + break; + } + case 213: + case 212: + { + Interp2(dp, w[5], w[4], w[2]); + if (Diff(w[6], w[8])) + { + Interp1(dp+1, w[5], w[2]); + dest[dp+dpL+1] = w[5]; + } + else + { + Interp6(dp+1, w[5], w[6], w[2]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + break; + } + case 241: + case 240: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + else + { + Interp6(dp+dpL, w[5], w[8], w[4]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 236: + case 232: + { + Interp2(dp, w[5], w[1], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + Interp1(dp+dpL+1, w[5], w[6]); + } + else + { + Interp9(dp+dpL, w[5], w[8], w[4]); + Interp6(dp+dpL+1, w[5], w[8], w[6]); + } + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + dest[dp+dpL] = w[5]; + } + else + { + Interp6(dp, w[5], w[4], w[2]); + Interp9(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+1, w[5], w[2], w[6]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + Interp1(dp+dpL, w[5], w[8]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+dpL, w[5], w[4], w[8]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + Interp1(dp+1, w[5], w[6]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 124: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[7]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 62: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 211: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[3]); + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 118: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 217: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 110: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[3]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 188: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 185: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 61: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 157: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 103: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 227: + { + Interp1(dp, w[5], w[4]); + Interp2(dp+1, w[5], w[3], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 230: + { + Interp2(dp, w[5], w[1], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 199: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[7], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 220: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 242: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 121: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 87: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 229: + { + Interp2(dp, w[5], w[4], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 167: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 173: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 181: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 115: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 93: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 205: + case 201: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+dpL, w[5], w[7]); + } + else + { + Interp7(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[4]); + } + else + { + Interp7(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 179: + case 147: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+1, w[5], w[3]); + } + else + { + Interp7(dp+1, w[5], w[2], w[6]); + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 117: + case 116: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL+1, w[5], w[9]); + } + else + { + Interp7(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 189: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 231: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 126: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[3]); + Interp1(dp+dpL, w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + dest[dp+dpL] = w[5]; + } + else + { + Interp6(dp, w[5], w[4], w[2]); + Interp9(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 221: + { + Interp1(dp, w[5], w[2]); + if (Diff(w[6], w[8])) + { + Interp1(dp+1, w[5], w[2]); + dest[dp+dpL+1] = w[5]; + } + else + { + Interp6(dp+1, w[5], w[6], w[2]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + Interp1(dp+dpL, w[5], w[7]); + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + Interp1(dp+1, w[5], w[6]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[7]); + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 238: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + Interp1(dp+dpL+1, w[5], w[6]); + } + else + { + Interp9(dp+dpL, w[5], w[8], w[4]); + Interp6(dp+dpL+1, w[5], w[8], w[6]); + } + break; + } + case 190: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + Interp1(dp+dpL+1, w[5], w[8]); + } + else + { + Interp9(dp+1, w[5], w[2], w[6]); + Interp6(dp+dpL+1, w[5], w[6], w[8]); + } + Interp1(dp+dpL, w[5], w[8]); + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + Interp1(dp+dpL, w[5], w[8]); + } + else + { + Interp9(dp, w[5], w[4], w[2]); + Interp6(dp+dpL, w[5], w[4], w[8]); + } + Interp1(dp+1, w[5], w[3]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 243: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[3]); + if (Diff(w[6], w[8])) + { + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + else + { + Interp6(dp+dpL, w[5], w[8], w[4]); + Interp9(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + } + else + { + Interp6(dp, w[5], w[2], w[4]); + Interp9(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 237: + case 233: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[2], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + Interp1(dp+1, w[5], w[6]); + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[6], w[8]); + break; + } + case 183: + case 151: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp2(dp+dpL, w[5], w[8], w[4]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 245: + case 244: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 250: + { + Interp1(dp, w[5], w[4]); + Interp1(dp+1, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[7]); + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 222: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 252: + { + Interp2(dp, w[5], w[1], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 249: + { + Interp1(dp, w[5], w[2]); + Interp2(dp+1, w[5], w[3], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp2(dp+1, w[5], w[3], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp2(dp+dpL+1, w[5], w[9], w[6]); + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[8]); + Interp2(dp+dpL+1, w[5], w[9], w[8]); + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp2(dp+dpL, w[5], w[7], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 215: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp2(dp+dpL, w[5], w[7], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 246: + { + Interp2(dp, w[5], w[1], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 254: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 253: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + Interp1(dp+1, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + Interp1(dp+1, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + Interp1(dp+dpL+1, w[5], w[6]); + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp2(dp+1, w[5], w[2], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp+dpL, w[5], w[8], w[4]); + } + Interp1(dp+dpL+1, w[5], w[9]); + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp1(dp+dpL, w[5], w[8]); + Interp1(dp+dpL+1, w[5], w[8]); + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp1(dp+dpL, w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp2(dp+dpL+1, w[5], w[6], w[8]); + } + break; + } + case 247: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + Interp1(dp+dpL, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]);0 + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + } + else + { + Interp1(dp+1, w[5], w[3]);0 + } + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + } + else + { + Interp1(dp+dpL, w[5], w[7]);0 + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+1] = w[5]; + } + else + { + Interp1(dp+dpL+1, w[5], w[9]);0 + } + break; + } + } + sp++; + dp += 2; + } + dp += dpL; + } +}; + + + + + + + + + + + + + + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// hq 3x + + +var hq3x = function( width, height ) { + var + i, j, k, + prevline, nextline, + w = [], + dpL = width * 3, + + dp = 0, + sp = 0; + + // internal to local optimization + var + Diff = _Diff, + Math = _Math, + RGBtoYUV = _RGBtoYUV, + Interp1 = _Interp1, + Interp2 = _Interp2, + Interp3 = _Interp3, + Interp4 = _Interp4, + Interp5 = _Interp5, + Interp6 = _Interp6, + Interp7 = _Interp7, + Interp8 = _Interp8, + Interp9 = _Interp9, + Interp10 = _Interp10, + src = _src, + dest = _dest, + MASK_2 = _MASK_2, + MASK_13 = _MASK_13, + Ymask = _Ymask, + Umask = _Umask, + Vmask = _Vmask, + trY = _trY, + trU = _trU, + trV = _trV, + YUV1, YUV2; + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for (j=0; j<height; j++) + { + prevline = j>0 ? -width : 0; + nextline = j<height-1 ? width : 0; + + for (i=0; i<width; i++) + { + w[2] = src[sp + prevline]; + w[5] = src[sp]; + w[8] = src[sp + nextline]; + + if (i>0) + { + w[1] = src[sp + prevline - 1]; + w[4] = src[sp - 1]; + w[7] = src[sp + nextline - 1]; + } + else + { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if (i<width-1) + { + w[3] = src[sp + prevline + 1]; + w[6] = src[sp + 1]; + w[9] = src[sp + nextline + 1]; + } + else + { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + var pattern = 0; + var flag = 1; + + YUV1 = RGBtoYUV(w[5]); + + //for (k=1; k<=9; k++) optimized + for (k=1; k< 10; k++) // k<=9 + { + if (k===5) continue; + + if ( w[k] !== w[5] ) + { + YUV2 = RGBtoYUV(w[k]); + if ( ( Math.abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) || + ( Math.abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) || + ( Math.abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) ) + pattern |= flag; + } + flag <<= 1; + } + + switch (pattern) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 2: + case 34: + case 130: + case 162: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 16: + case 17: + case 48: + case 49: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 64: + case 65: + case 68: + case 69: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 8: + case 12: + case 136: + case 140: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 3: + case 35: + case 131: + case 163: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 6: + case 38: + case 134: + case 166: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 20: + case 21: + case 52: + case 53: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 144: + case 145: + case 176: + case 177: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 192: + case 193: + case 196: + case 197: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 96: + case 97: + case 100: + case 101: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 40: + case 44: + case 168: + case 172: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 9: + case 13: + case 137: + case 141: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 18: + case 50: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 80: + case 81: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 72: + case 76: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 66: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 24: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 7: + case 39: + case 135: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 148: + case 149: + case 180: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 224: + case 228: + case 225: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 41: + case 169: + case 45: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 22: + case 54: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 208: + case 209: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 104: + case 108: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+2] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 146: + case 178: + { + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + } + else + { + Interp1(dp+1, w[5], w[2]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + break; + } + case 84: + case 85: + { + if (Diff(w[6], w[8])) + { + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + break; + } + case 112: + case 113: + { + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + break; + } + case 200: + case 204: + { + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + } + else + { + Interp1(dp+dpL, w[5], w[4]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 67: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 70: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 28: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 152: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 194: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 98: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 56: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 25: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 82: + case 214: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 88: + case 248: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 86: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 216: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 106: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 30: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 210: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 120: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 29: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 198: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 184: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 99: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 57: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 71: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 156: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 226: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 60: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 195: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 102: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 153: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 83: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 92: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 114: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 89: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 182: + case 150: + { + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + } + else + { + Interp1(dp+1, w[5], w[2]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + break; + } + case 213: + case 212: + { + if (Diff(w[6], w[8])) + { + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + break; + } + case 241: + case 240: + { + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + break; + } + case 236: + case 232: + { + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + } + else + { + Interp1(dp+dpL, w[5], w[4]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 124: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 62: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 211: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 118: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 217: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 110: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 188: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 185: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 61: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 157: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 103: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 227: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 230: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 199: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 220: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 242: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 121: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 87: + { + Interp1(dp, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 229: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 167: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 173: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 181: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 115: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 93: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 205: + case 201: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + Interp1(dp, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 179: + case 147: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 117: + case 116: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 189: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 231: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 126: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + Interp1(dp, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 221: + { + if (Diff(w[6], w[8])) + { + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[4]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 238: + { + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + } + else + { + Interp1(dp+dpL, w[5], w[4]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + break; + } + case 190: + { + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + } + else + { + Interp1(dp+1, w[5], w[2]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[6], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + Interp1(dp, w[5], w[1]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + } + else + { + Interp5(dp, w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[4], w[5]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 243: + { + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp1(dp+dpL+2, w[5], w[6]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[8], w[5]); + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+2, w[6], w[8]); + } + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp5(dp+2, w[2], w[6]); + Interp1(dp+dpL+2, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 237: + case 233: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + break; + } + case 183: + case 151: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 245: + case 244: + { + Interp2(dp, w[5], w[4], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 250: + { + Interp1(dp, w[5], w[1]); + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 222: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 252: + { + Interp1(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 249: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 215: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 246: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 254: + { + Interp1(dp, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp4(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 253: + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+2, w[5], w[2]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + } + Interp1(dp+2, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+dpL] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp3(dp+dpL, w[5], w[4]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + dest[dp+dpL+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+dpL+2, w[5], w[6]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + Interp1(dp+2, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp1(dp+dpL+2, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + Interp3(dp+1, w[5], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp4(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + } + else + { + Interp4(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp4(dp, w[5], w[4], w[2]); + Interp3(dp+dpL, w[5], w[4]); + } + if (Diff(w[2], w[6])) + { + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + dest[dp+dpL+2] = w[5]; + } + else + { + Interp3(dp+1, w[5], w[2]); + Interp2(dp+2, w[5], w[2], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp4(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 247: + { + Interp1(dp, w[5], w[4]); + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[4], w[2]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + } + else + { + Interp2(dp+2, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8], w[4]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + } + break; + } + } + sp++; + dp += 3; + } + //dp += (dpL * 2); optimized + dp += (dpL << 1); + } +}; + + + + + + + + + + + + + + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// hq 4x + +var hq4x = function( width, height ) { + var + i, j, k, + prevline, nextline, + w = [], + //dpL = width * 4, optimized + dpL = width << 2, + + dp = 0, + sp = 0; + + // internal to local optimization + var + Diff = _Diff, + Math = _Math, + RGBtoYUV = _RGBtoYUV, + Interp1 = _Interp1, + Interp2 = _Interp2, + Interp3 = _Interp3, + Interp4 = _Interp4, + Interp5 = _Interp5, + Interp6 = _Interp6, + Interp7 = _Interp7, + Interp8 = _Interp8, + Interp9 = _Interp9, + Interp10 = _Interp10, + src = _src, + dest = _dest, + MASK_2 = _MASK_2, + MASK_13 = _MASK_13, + Ymask = _Ymask, + Umask = _Umask, + Vmask = _Vmask, + trY = _trY, + trU = _trU, + trV = _trV, + YUV1, YUV2; + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for (j=0; j<height; j++) + { + prevline = j>0 ? -width : 0; + nextline = j<height-1 ? width : 0; + + for (i=0; i<width; i++) + { + w[2] = src[sp + prevline]; + w[5] = src[sp]; + w[8] = src[sp + nextline]; + + if (i>0) + { + w[1] = src[sp + prevline - 1]; + w[4] = src[sp - 1]; + w[7] = src[sp + nextline - 1]; + } + else + { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if (i<width-1) + { + w[3] = src[sp + prevline + 1]; + w[6] = src[sp + 1]; + w[9] = src[sp + nextline + 1]; + } + else + { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + var pattern = 0; + var flag = 1; + + YUV1 = RGBtoYUV(w[5]); + + //for (k=1; k<=9; k++) optimized + for (k=1; k < 10; k++) // k<=9 + { + if (k===5) continue; + + if ( w[k] !== w[5] ) + { + YUV2 = RGBtoYUV(w[k]); + if ( ( Math.abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) || + ( Math.abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) || + ( Math.abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) ) + pattern |= flag; + } + flag <<= 1; + } + + switch (pattern) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 2: + case 34: + case 130: + case 162: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 16: + case 17: + case 48: + case 49: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 64: + case 65: + case 68: + case 69: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 8: + case 12: + case 136: + case 140: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 3: + case 35: + case 131: + case 163: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 6: + case 38: + case 134: + case 166: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 20: + case 21: + case 52: + case 53: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 144: + case 145: + case 176: + case 177: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 192: + case 193: + case 196: + case 197: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 96: + case 97: + case 100: + case 101: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 40: + case 44: + case 168: + case 172: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 9: + case 13: + case 137: + case 141: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 18: + case 50: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 80: + case 81: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 72: + case 76: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + dest[dp+dpL+1] = w[5]; + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 66: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 24: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 7: + case 39: + case 135: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 148: + case 149: + case 180: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 224: + case 228: + case 225: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 41: + case 169: + case 45: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 22: + case 54: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 208: + case 209: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 104: + case 108: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp8(dp+2, w[2], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp2(dp+dpL+3, w[6], w[5], w[2]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 146: + case 178: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + } + else + { + Interp2(dp+2, w[2], w[5], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp8(dp+dpL+3, w[6], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + break; + } + case 84: + case 85: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + if (Diff(w[6], w[8])) + { + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + Interp1(dp+3, w[5], w[6]); + Interp1(dp+dpL+3, w[6], w[5]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[8]); + Interp2(dp+(dpL * 3)+2, w[8], w[5], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 112: + case 113: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5], w[8]); + Interp1(dp+(dpL * 3), w[5], w[8]); + Interp1(dp+(dpL * 3)+1, w[8], w[5]); + Interp8(dp+(dpL * 3)+2, w[8], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 200: + case 204: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp8(dp+(dpL * 3)+1, w[8], w[4]); + Interp1(dp+(dpL * 3)+2, w[8], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + Interp8(dp, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp, w[5], w[4]); + Interp1(dp+dpL, w[4], w[5]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp2(dp+(dpL * 3)+1, w[8], w[5], w[4]); + } + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + } + else + { + Interp5(dp, w[2], w[4]); + Interp2(dp+1, w[2], w[5], w[4]); + Interp8(dp+dpL, w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp1(dp+(dpL * 3), w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp5(dp, w[2], w[4]); + Interp8(dp+1, w[2], w[4]); + Interp1(dp+2, w[2], w[5]); + Interp1(dp+3, w[5], w[2]); + Interp2(dp+dpL, w[4], w[5], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + } + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 67: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 70: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 28: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 152: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 194: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 98: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 56: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 25: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 82: + case 214: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 88: + case 248: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 86: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 216: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 106: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 30: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 210: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 120: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 29: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 198: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 184: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 99: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 57: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 71: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 156: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 226: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 60: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 195: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 102: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 153: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 83: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 92: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 114: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + break; + } + case 89: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp8(dp+2, w[2], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp2(dp+dpL+3, w[6], w[5], w[2]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 182: + case 150: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + } + else + { + Interp2(dp+2, w[2], w[5], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp8(dp+dpL+3, w[6], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + break; + } + case 213: + case 212: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + if (Diff(w[6], w[8])) + { + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp1(dp+3, w[5], w[6]); + Interp1(dp+dpL+3, w[6], w[5]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[8]); + Interp2(dp+(dpL * 3)+2, w[8], w[5], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 241: + case 240: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5], w[8]); + Interp1(dp+(dpL * 3), w[5], w[8]); + Interp1(dp+(dpL * 3)+1, w[8], w[5]); + Interp8(dp+(dpL * 3)+2, w[8], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 236: + case 232: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp8(dp+(dpL * 3)+1, w[8], w[4]); + Interp1(dp+(dpL * 3)+2, w[8], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + Interp8(dp, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]); + Interp1(dp+dpL, w[4], w[5]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp2(dp+(dpL * 3)+1, w[8], w[5], w[4]); + } + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + } + else + { + Interp5(dp, w[2], w[4]); + Interp2(dp+1, w[2], w[5], w[4]); + Interp8(dp+dpL, w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp1(dp+(dpL * 3), w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp8(dp+1, w[2], w[4]); + Interp1(dp+2, w[2], w[5]); + Interp1(dp+3, w[5], w[2]); + Interp2(dp+dpL, w[4], w[5], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + } + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 124: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 62: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 211: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 118: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 217: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 110: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 188: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 185: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 61: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 157: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 103: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 227: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 230: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 199: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 220: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 242: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 121: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 87: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + dest[dp+dpL+2] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + dest[dp+dpL+1] = w[5]; + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 229: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 167: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 173: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 181: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 115: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + break; + } + case 93: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 205: + case 201: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + if (Diff(w[8], w[4])) + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + } + else + { + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp1(dp+(dpL * 3)+1, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + } + else + { + Interp2(dp, w[5], w[2], w[4]); + Interp1(dp+1, w[5], w[2]); + Interp1(dp+dpL, w[5], w[4]); + dest[dp+dpL+1] = w[5]; + } + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 179: + case 147: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + if (Diff(w[2], w[6])) + { + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + } + else + { + Interp1(dp+2, w[5], w[2]); + Interp2(dp+3, w[5], w[2], w[6]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+dpL+3, w[5], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 117: + case 116: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + } + else + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp1(dp+(dpL * 3)+2, w[5], w[8]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + break; + } + case 189: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 231: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 126: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + Interp8(dp, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp1(dp, w[5], w[4]); + Interp1(dp+dpL, w[4], w[5]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp2(dp+(dpL * 3)+1, w[8], w[5], w[4]); + } + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 221: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + if (Diff(w[6], w[8])) + { + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp1(dp+3, w[5], w[6]); + Interp1(dp+dpL+3, w[6], w[5]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[8]); + Interp2(dp+(dpL * 3)+2, w[8], w[5], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp8(dp+1, w[2], w[4]); + Interp1(dp+2, w[2], w[5]); + Interp1(dp+3, w[5], w[2]); + Interp2(dp+dpL, w[4], w[5], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + } + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 238: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + } + else + { + Interp2(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp8(dp+(dpL * 3)+1, w[8], w[4]); + Interp1(dp+(dpL * 3)+2, w[8], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[8]); + } + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + break; + } + case 190: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + } + else + { + Interp2(dp+2, w[2], w[5], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp8(dp+dpL+3, w[6], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp1(dp+(dpL * 3)+3, w[5], w[6]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + } + else + { + Interp5(dp, w[2], w[4]); + Interp2(dp+1, w[2], w[5], w[4]); + Interp8(dp+dpL, w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp1(dp+(dpL * 3), w[5], w[4]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 243: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp2(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5], w[8]); + Interp1(dp+(dpL * 3), w[5], w[8]); + Interp1(dp+(dpL * 3)+1, w[8], w[5]); + Interp8(dp+(dpL * 3)+2, w[8], w[6]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp1(dp, w[5], w[2]); + Interp1(dp+1, w[2], w[5]); + Interp8(dp+2, w[2], w[6]); + Interp5(dp+3, w[2], w[6]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp2(dp+dpL+3, w[6], w[5], w[2]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 237: + case 233: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[6]); + Interp2(dp+3, w[5], w[2], w[6]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp7(dp+dpL+2, w[5], w[6], w[2]); + Interp6(dp+dpL+3, w[5], w[6], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6], w[8]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[6]); + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + break; + } + case 183: + case 151: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[8]); + Interp7(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[4]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 245: + case 244: + { + Interp2(dp, w[5], w[2], w[4]); + Interp6(dp+1, w[5], w[2], w[4]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp6(dp+dpL, w[5], w[4], w[2]); + Interp7(dp+dpL+1, w[5], w[4], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 250: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 222: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 252: + { + Interp8(dp, w[5], w[1]); + Interp6(dp+1, w[5], w[2], w[1]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 249: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp6(dp+2, w[5], w[2], w[3]); + Interp8(dp+3, w[5], w[3]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp6(dp+dpL+3, w[5], w[6], w[3]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp6(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp6(dp+(dpL * 3)+2, w[5], w[8], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp6(dp+(dpL * 3)+1, w[5], w[8], w[7]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 215: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp6(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 246: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp6(dp+dpL, w[5], w[4], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 254: + { + Interp8(dp, w[5], w[1]); + Interp1(dp+1, w[5], w[1]); + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + Interp1(dp+dpL, w[5], w[1]); + Interp3(dp+dpL+1, w[5], w[1]); + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 253: + { + Interp8(dp, w[5], w[2]); + Interp8(dp+1, w[5], w[2]); + Interp8(dp+2, w[5], w[2]); + Interp8(dp+3, w[5], w[2]); + Interp3(dp+dpL, w[5], w[2]); + Interp3(dp+dpL+1, w[5], w[2]); + Interp3(dp+dpL+2, w[5], w[2]); + Interp3(dp+dpL+3, w[5], w[2]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + Interp1(dp+2, w[5], w[3]); + Interp8(dp+3, w[5], w[3]); + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[3]); + Interp1(dp+dpL+3, w[5], w[3]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + Interp3(dp+2, w[5], w[6]); + Interp8(dp+3, w[5], w[6]); + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + Interp3(dp+dpL+2, w[5], w[6]); + Interp8(dp+dpL+3, w[5], w[6]); + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[6]); + Interp8(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[6]); + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + Interp3(dp+(dpL * 3)+2, w[5], w[6]); + Interp8(dp+(dpL * 3)+3, w[5], w[6]); + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+2] = w[5]; + dest[dp+3] = w[5]; + dest[dp+dpL+3] = w[5]; + } + else + { + Interp5(dp+2, w[2], w[5]); + Interp5(dp+3, w[2], w[6]); + Interp5(dp+dpL+3, w[6], w[5]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL * 3)] = w[5]; + dest[dp+(dpL * 3)+1] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/), w[4], w[5]); + Interp5(dp+(dpL * 3), w[8], w[4]); + Interp5(dp+(dpL * 3)+1, w[8], w[5]); + } + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[9]); + Interp1(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[9]); + Interp1(dp+(dpL * 3)+2, w[5], w[9]); + Interp8(dp+(dpL * 3)+3, w[5], w[9]); + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp3(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+2, w[5], w[8]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+3, w[5], w[8]); + Interp8(dp+(dpL * 3), w[5], w[8]); + Interp8(dp+(dpL * 3)+1, w[5], w[8]); + Interp8(dp+(dpL * 3)+2, w[5], w[8]); + Interp8(dp+(dpL * 3)+3, w[5], w[8]); + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + dest[dp+1] = w[5]; + dest[dp+dpL] = w[5]; + } + else + { + Interp5(dp, w[2], w[4]); + Interp5(dp+1, w[2], w[5]); + Interp5(dp+dpL, w[4], w[5]); + } + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp1(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[7]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[7]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp5(dp+(dpL << 1 /*==dpL * 2*/)+3, w[6], w[5]); + Interp5(dp+(dpL * 3)+2, w[8], w[5]); + Interp5(dp+(dpL * 3)+3, w[8], w[6]); + } + Interp8(dp+(dpL * 3), w[5], w[7]); + Interp1(dp+(dpL * 3)+1, w[5], w[7]); + break; + } + case 247: + { + Interp8(dp, w[5], w[4]); + Interp3(dp+1, w[5], w[4]); + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + Interp8(dp+dpL, w[5], w[4]); + Interp3(dp+dpL+1, w[5], w[4]); + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + Interp8(dp+(dpL << 1 /*==dpL * 2*/), w[5], w[4]); + Interp3(dp+(dpL << 1 /*==dpL * 2*/)+1, w[5], w[4]); + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + Interp8(dp+(dpL * 3), w[5], w[4]); + Interp3(dp+(dpL * 3)+1, w[5], w[4]); + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + dest[dp] = w[5]; + } + else + { + Interp2(dp, w[5], w[2], w[4]); + } + dest[dp+1] = w[5]; + dest[dp+2] = w[5]; + if (Diff(w[2], w[6])) + { + dest[dp+3] = w[5]; + } + else + { + Interp2(dp+3, w[5], w[2], w[6]); + } + dest[dp+dpL] = w[5]; + dest[dp+dpL+1] = w[5]; + dest[dp+dpL+2] = w[5]; + dest[dp+dpL+3] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+1] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+2] = w[5]; + dest[dp+(dpL << 1 /*==dpL * 2*/)+3] = w[5]; + if (Diff(w[8], w[4])) + { + dest[dp+(dpL * 3)] = w[5]; + } + else + { + Interp2(dp+(dpL * 3), w[5], w[8], w[4]); + } + dest[dp+(dpL * 3)+1] = w[5]; + dest[dp+(dpL * 3)+2] = w[5]; + if (Diff(w[6], w[8])) + { + dest[dp+(dpL * 3)+3] = w[5]; + } + else + { + Interp2(dp+(dpL * 3)+3, w[5], w[8], w[6]); + } + break; + } + } + sp++; + dp += 4; + } + dp += (dpL * 3); + } +} + +})(this); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.xml new file mode 100644 index 00000000000..0bca8512af3 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>hqx.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.js new file mode 100644 index 00000000000..bbbb6288c79 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.js @@ -0,0 +1,12 @@ +/* Copyright: + * Maxim Stepin - maxst@hiend3d.com + * Cameron Zemek - grom@zeminvaders.net + * Dominic Szablewski - mail@phoboslab.org + * https://github.com/phoboslab/js-hqx + * GNU Lesser General Public License. + */ +!function(a){"use strict";var e=null,c=null,s=65280,r=16711935,b=16711680,k=65280,t=255,n=3145728,i=1792,o=6,h=a.Math,u=function(a){var e=(16711680&a)>>16,c=(65280&a)>>8,s=255&a;return((.299*e+.587*c+.114*s|0)<<16)+((-.169*e-.331*c+.5*s+128|0)<<8)+(.5*e-.419*c-.081*s+128|0)},f=function(a,e){var c=u(a),s=u(e);return h.abs((c&b)-(s&b))>n||h.abs((c&k)-(s&k))>i||h.abs((c&t)-(s&t))>o},d=function(a,e,b){return e===b?void(c[a]=e):(c[a]=(3*(e&s)+(b&s)>>2&s)+(3*(e&r)+(b&r)>>2&r),void(c[a]|=4278190080&e))},g=function(a,e,b,k){c[a]=(((e&s)<<1)+(b&s)+(k&s)>>2&s)+(((e&r)<<1)+(b&r)+(k&r)>>2&r),c[a]|=4278190080&e},v=function(a,e,b){return e===b?void(c[a]=e):(c[a]=(7*(e&s)+(b&s)>>3&s)+(7*(e&r)+(b&r)>>3&r),void(c[a]|=4278190080&e))},w=function(a,e,b,k){c[a]=(((e&s)<<1)+7*(b&s)+7*(k&s)>>4&s)+(((e&r)<<1)+7*(b&r)+7*(k&r)>>4&r),c[a]|=4278190080&e},l=function(a,e,b){return e===b?void(c[a]=e):(c[a]=((e&s)+(b&s)>>1&s)+((e&r)+(b&r)>>1&r),void(c[a]|=4278190080&e))},m=function(a,e,b,k){c[a]=(5*(e&s)+((b&s)<<1)+(k&s)>>3&s)+(5*(e&r)+((b&r)<<1)+(k&r)>>3&r),c[a]|=4278190080&e},D=function(a,e,b,k){c[a]=(6*(e&s)+(b&s)+(k&s)>>3&s)+(6*(e&r)+(b&r)+(k&r)>>3&r),c[a]|=4278190080&e},I=function(a,e,b){return e===b?void(c[a]=e):(c[a]=(5*(e&s)+3*(b&s)>>3&s)+(5*(e&r)+3*(b&r)>>3&r),void(c[a]|=4278190080&e))},x=function(a,e,b,k){c[a]=(((e&s)<<1)+3*(b&s)+3*(k&s)>>3&s)+(((e&r)<<1)+3*(b&r)+3*(k&r)>>3&r),c[a]|=4278190080&e},C=function(a,e){var c=e.charAt(0).toUpperCase()+e.substr(1);return a[e]||a["ms"+c]||a["moz"+c]||a["webkit"+c]||a["o"+c]},H=function(a,e,c,s,r){var b=document.createElement("canvas"),k=b.getContext("2d"),t=C(k,"backingStorePixelRatio")||1;k.getImageDataHD=C(k,"getImageDataHD");var n=a.width/t,i=a.height/t;return b.width=Math.ceil(n),b.height=Math.ceil(i),k.drawImage(a,0,0,n,i),1===t?k.getImageData(e,c,s,r):k.getImageDataHD(e,c,s,r)};a.hqx=function(a,s){if(-1===[2,3,4].indexOf(s))return a;var r,b,k,t;a instanceof HTMLCanvasElement?(r=a,b=r.getContext("2d"),k=r,t=b.getImageData(0,0,r.width,r.height).data):(t=H(a,0,0,a.width,a.height).data,k=document.createElement("canvas"));for(var n,i=a.width*a.height,o=e=new Array(i),h=c=new Array(i*s*s),u=0;i>u;u++)o[u]=(t[(n=u<<2)+3]<<24)+(t[n+2]<<16)+(t[n+1]<<8)+t[n];2===s?M(a.width,a.height):3===s?A(a.width,a.height):4===s&&E(a.width,a.height),k.width=a.width*s,k.height=a.height*s;for(var f,d,g=k.getContext("2d"),v=g.getImageData(0,0,k.width,k.height),w=v.data,l=h.length,m=0;l>m;m++)d=(4278190080&(f=h[m]))>>24,w[(n=m<<2)+3]=0>d?d+256:0,w[n+2]=(16711680&f)>>16,w[n+1]=(65280&f)>>8,w[n]=255&f;return e=o=null,c=h=null,v};var M=function(a,s){var r,v,w,l,I,C,H,M=[],A=a<<1,E=0,p=0,y=f,q=h,z=u,L=d,O=g,P=m,R=D,S=x,T=e,U=c,j=b,B=k,F=t,G=n,J=i,K=o;for(v=0;s>v;v++){for(l=v>0?-a:0,I=s-1>v?a:0,r=0;a>r;r++){M[2]=T[p+l],M[5]=T[p],M[8]=T[p+I],r>0?(M[1]=T[p+l-1],M[4]=T[p-1],M[7]=T[p+I-1]):(M[1]=M[2],M[4]=M[5],M[7]=M[8]),a-1>r?(M[3]=T[p+l+1],M[6]=T[p+1],M[9]=T[p+I+1]):(M[3]=M[2],M[6]=M[5],M[9]=M[8]);var N=0,Q=1;for(C=z(M[5]),w=1;10>w;w++)5!==w&&(M[w]!==M[5]&&(H=z(M[w]),(q.abs((C&j)-(H&j))>G||q.abs((C&B)-(H&B))>J||q.abs((C&F)-(H&F))>K)&&(N|=Q)),Q<<=1);switch(N){case 0:case 1:case 4:case 32:case 128:case 5:case 132:case 160:case 33:case 129:case 36:case 133:case 164:case 161:case 37:case 165:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 2:case 34:case 130:case 162:O(E,M[5],M[1],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 16:case 17:case 48:case 49:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 64:case 65:case 68:case 69:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 8:case 12:case 136:case 140:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 3:case 35:case 131:case 163:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 6:case 38:case 134:case 166:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 20:case 21:case 52:case 53:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 144:case 145:case 176:case 177:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[8]);break;case 192:case 193:case 196:case 197:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[6]);break;case 96:case 97:case 100:case 101:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 40:case 44:case 168:case 172:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 9:case 13:case 137:case 141:L(E,M[5],M[2]),O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 18:case 50:O(E,M[5],M[1],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 80:case 81:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):O(E+A+1,M[5],M[6],M[8]);break;case 72:case 76:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 10:case 138:y(M[4],M[2])?L(E,M[5],M[4]):O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 66:O(E,M[5],M[1],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 24:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 7:case 39:case 135:L(E,M[5],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 148:case 149:case 180:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[8]);break;case 224:case 228:case 225:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 41:case 169:case 45:L(E,M[5],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 22:case 54:O(E,M[5],M[1],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 208:case 209:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 104:case 108:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 11:case 139:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 19:case 51:y(M[2],M[6])?(L(E,M[5],M[4]),L(E+1,M[5],M[3])):(P(E,M[5],M[2],M[4]),S(E+1,M[5],M[2],M[6])),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 146:case 178:O(E,M[5],M[1],M[4]),y(M[2],M[6])?(L(E+1,M[5],M[3]),L(E+A+1,M[5],M[8])):(S(E+1,M[5],M[2],M[6]),P(E+A+1,M[5],M[6],M[8])),O(E+A,M[5],M[8],M[4]);break;case 84:case 85:O(E,M[5],M[4],M[2]),y(M[6],M[8])?(L(E+1,M[5],M[2]),L(E+A+1,M[5],M[9])):(P(E+1,M[5],M[6],M[2]),S(E+A+1,M[5],M[6],M[8])),O(E+A,M[5],M[7],M[4]);break;case 112:case 113:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),y(M[6],M[8])?(L(E+A,M[5],M[4]),L(E+A+1,M[5],M[9])):(P(E+A,M[5],M[8],M[4]),S(E+A+1,M[5],M[6],M[8]));break;case 200:case 204:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?(L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6])):(S(E+A,M[5],M[8],M[4]),P(E+A+1,M[5],M[8],M[6]));break;case 73:case 77:y(M[8],M[4])?(L(E,M[5],M[2]),L(E+A,M[5],M[7])):(P(E,M[5],M[4],M[2]),S(E+A,M[5],M[8],M[4])),O(E+1,M[5],M[2],M[6]),O(E+A+1,M[5],M[9],M[6]);break;case 42:case 170:y(M[4],M[2])?(L(E,M[5],M[4]),L(E+A,M[5],M[8])):(S(E,M[5],M[4],M[2]),P(E+A,M[5],M[4],M[8])),O(E+1,M[5],M[3],M[6]),O(E+A+1,M[5],M[6],M[8]);break;case 14:case 142:y(M[4],M[2])?(L(E,M[5],M[4]),L(E+1,M[5],M[6])):(S(E,M[5],M[4],M[2]),P(E+1,M[5],M[2],M[6])),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 67:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 70:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[7],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 28:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 152:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 194:O(E,M[5],M[1],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[6]);break;case 98:O(E,M[5],M[1],M[4]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 56:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 25:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 26:case 31:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 82:case 214:O(E,M[5],M[1],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 88:case 248:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 74:case 107:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 27:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 86:O(E,M[5],M[1],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[9]);break;case 216:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 106:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 30:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 210:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 120:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[9]);break;case 75:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[7]),O(E+A+1,M[5],M[9],M[6]);break;case 29:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 198:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[6]);break;case 184:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 99:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 57:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 71:L(E,M[5],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[7],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 156:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 226:O(E,M[5],M[1],M[4]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 60:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 195:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[6]);break;case 102:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[6]),L(E+A,M[5],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 153:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 58:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 83:L(E,M[5],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 92:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 202:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[6]);break;case 78:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),L(E+1,M[5],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 154:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 114:O(E,M[5],M[1],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 89:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 90:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 55:case 23:y(M[2],M[6])?(L(E,M[5],M[4]),U[E+1]=M[5]):(P(E,M[5],M[2],M[4]),S(E+1,M[5],M[2],M[6])),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[8]);break;case 182:case 150:O(E,M[5],M[1],M[4]),y(M[2],M[6])?(U[E+1]=M[5],L(E+A+1,M[5],M[8])):(S(E+1,M[5],M[2],M[6]),P(E+A+1,M[5],M[6],M[8])),O(E+A,M[5],M[8],M[4]);break;case 213:case 212:O(E,M[5],M[4],M[2]),y(M[6],M[8])?(L(E+1,M[5],M[2]),U[E+A+1]=M[5]):(P(E+1,M[5],M[6],M[2]),S(E+A+1,M[5],M[6],M[8])),O(E+A,M[5],M[7],M[4]);break;case 241:case 240:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[2]),y(M[6],M[8])?(L(E+A,M[5],M[4]),U[E+A+1]=M[5]):(P(E+A,M[5],M[8],M[4]),S(E+A+1,M[5],M[6],M[8]));break;case 236:case 232:O(E,M[5],M[1],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?(U[E+A]=M[5],L(E+A+1,M[5],M[6])):(S(E+A,M[5],M[8],M[4]),P(E+A+1,M[5],M[8],M[6]));break;case 109:case 105:y(M[8],M[4])?(L(E,M[5],M[2]),U[E+A]=M[5]):(P(E,M[5],M[4],M[2]),S(E+A,M[5],M[8],M[4])),O(E+1,M[5],M[2],M[6]),O(E+A+1,M[5],M[9],M[6]);break;case 171:case 43:y(M[4],M[2])?(U[E]=M[5],L(E+A,M[5],M[8])):(S(E,M[5],M[4],M[2]),P(E+A,M[5],M[4],M[8])),O(E+1,M[5],M[3],M[6]),O(E+A+1,M[5],M[6],M[8]);break;case 143:case 15:y(M[4],M[2])?(U[E]=M[5],L(E+1,M[5],M[6])):(S(E,M[5],M[4],M[2]),P(E+1,M[5],M[2],M[6])),O(E+A,M[5],M[7],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 124:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[9]);break;case 203:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6]);break;case 62:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 211:L(E,M[5],M[4]),L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 118:O(E,M[5],M[1],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[9]);break;case 217:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 110:L(E,M[5],M[4]),L(E+1,M[5],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 155:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 188:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 185:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 61:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 157:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 103:L(E,M[5],M[4]),L(E+1,M[5],M[6]),L(E+A,M[5],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 227:L(E,M[5],M[4]),O(E+1,M[5],M[3],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 230:O(E,M[5],M[1],M[4]),L(E+1,M[5],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 199:L(E,M[5],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[7],M[4]),L(E+A+1,M[5],M[6]);break;case 220:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 158:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 234:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[6]);break;case 242:O(E,M[5],M[1],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 59:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 121:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 87:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 79:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 122:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 94:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 218:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 91:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 229:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 167:L(E,M[5],M[4]),L(E+1,M[5],M[6]),O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[6],M[8]);break;case 173:L(E,M[5],M[2]),O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 181:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[8]);break;case 186:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 115:L(E,M[5],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 93:L(E,M[5],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 206:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),L(E+1,M[5],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[6]);break;case 205:case 201:L(E,M[5],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?L(E+A,M[5],M[7]):R(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[6]);break;case 174:case 46:y(M[4],M[2])?L(E,M[5],M[4]):R(E,M[5],M[4],M[2]),L(E+1,M[5],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 179:case 147:L(E,M[5],M[4]),y(M[2],M[6])?L(E+1,M[5],M[3]):R(E+1,M[5],M[2],M[6]),O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[8]);break;case 117:case 116:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[4]),y(M[6],M[8])?L(E+A+1,M[5],M[9]):R(E+A+1,M[5],M[6],M[8]);break;case 189:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 231:L(E,M[5],M[4]),L(E+1,M[5],M[6]),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[6]);break;case 126:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[9]);break;case 219:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[3]),L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 125:y(M[8],M[4])?(L(E,M[5],M[2]),U[E+A]=M[5]):(P(E,M[5],M[4],M[2]),S(E+A,M[5],M[8],M[4])),L(E+1,M[5],M[2]),L(E+A+1,M[5],M[9]);break;case 221:L(E,M[5],M[2]),y(M[6],M[8])?(L(E+1,M[5],M[2]),U[E+A+1]=M[5]):(P(E+1,M[5],M[6],M[2]),S(E+A+1,M[5],M[6],M[8])),L(E+A,M[5],M[7]);break;case 207:y(M[4],M[2])?(U[E]=M[5],L(E+1,M[5],M[6])):(S(E,M[5],M[4],M[2]),P(E+1,M[5],M[2],M[6])),L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6]);break;case 238:L(E,M[5],M[4]),L(E+1,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],L(E+A+1,M[5],M[6])):(S(E+A,M[5],M[8],M[4]),P(E+A+1,M[5],M[8],M[6]));break;case 190:L(E,M[5],M[4]),y(M[2],M[6])?(U[E+1]=M[5],L(E+A+1,M[5],M[8])):(S(E+1,M[5],M[2],M[6]),P(E+A+1,M[5],M[6],M[8])),L(E+A,M[5],M[8]);break;case 187:y(M[4],M[2])?(U[E]=M[5],L(E+A,M[5],M[8])):(S(E,M[5],M[4],M[2]),P(E+A,M[5],M[4],M[8])),L(E+1,M[5],M[3]),L(E+A+1,M[5],M[8]);break;case 243:L(E,M[5],M[4]),L(E+1,M[5],M[3]),y(M[6],M[8])?(L(E+A,M[5],M[4]),U[E+A+1]=M[5]):(P(E+A,M[5],M[8],M[4]),S(E+A+1,M[5],M[6],M[8]));break;case 119:y(M[2],M[6])?(L(E,M[5],M[4]),U[E+1]=M[5]):(P(E,M[5],M[2],M[4]),S(E+1,M[5],M[2],M[6])),L(E+A,M[5],M[4]),L(E+A+1,M[5],M[9]);break;case 237:case 233:L(E,M[5],M[2]),O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6]);break;case 175:case 47:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),L(E+1,M[5],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[6],M[8]);break;case 183:case 151:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[8]);break;case 245:case 244:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 250:L(E,M[5],M[4]),L(E+1,M[5],M[3]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 123:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[3]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[9]);break;case 95:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[7]),L(E+A+1,M[5],M[9]);break;case 222:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 252:O(E,M[5],M[1],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 249:L(E,M[5],M[2]),O(E+1,M[5],M[3],M[2]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 235:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),O(E+1,M[5],M[3],M[6]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6]);break;case 111:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),L(E+1,M[5],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),O(E+A+1,M[5],M[9],M[6]);break;case 63:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[8]),O(E+A+1,M[5],M[9],M[8]);break;case 159:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[8]),L(E+A+1,M[5],M[8]);break;case 215:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),O(E+A,M[5],M[7],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 246:O(E,M[5],M[1],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),L(E+A,M[5],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 254:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 253:L(E,M[5],M[2]),L(E+1,M[5],M[2]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 251:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[3]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 239:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),L(E+1,M[5],M[6]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),L(E+A+1,M[5],M[6]);break;case 127:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:O(E+1,M[5],M[2],M[6]),y(M[8],M[4])?U[E+A]=M[5]:O(E+A,M[5],M[8],M[4]),L(E+A+1,M[5],M[9]);break;case 191:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),L(E+A,M[5],M[8]),L(E+A+1,M[5],M[8]);break;case 223:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:O(E+A+1,M[5],M[6],M[8]);break;case 247:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),L(E+A,M[5],M[4]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9]);break;case 255:y(M[4],M[2])?U[E]=M[5]:L(E,M[5],M[4]),y(M[2],M[6])?U[E+1]=M[5]:L(E+1,M[5],M[3]),y(M[8],M[4])?U[E+A]=M[5]:L(E+A,M[5],M[7]),y(M[6],M[8])?U[E+A+1]=M[5]:L(E+A+1,M[5],M[9])}p++,E+=2}E+=A}},A=function(a,s){var r,m,D,I,x,C,H,M=[],A=3*a,E=0,p=0,y=f,q=h,z=u,L=d,O=g,P=v,R=w,S=l,T=e,U=c,j=b,B=k,F=t,G=n,J=i,K=o;for(m=0;s>m;m++){for(I=m>0?-a:0,x=s-1>m?a:0,r=0;a>r;r++){M[2]=T[p+I],M[5]=T[p],M[8]=T[p+x],r>0?(M[1]=T[p+I-1],M[4]=T[p-1],M[7]=T[p+x-1]):(M[1]=M[2],M[4]=M[5],M[7]=M[8]),a-1>r?(M[3]=T[p+I+1],M[6]=T[p+1],M[9]=T[p+x+1]):(M[3]=M[2],M[6]=M[5],M[9]=M[8]);var N=0,Q=1;for(C=z(M[5]),D=1;10>D;D++)5!==D&&(M[D]!==M[5]&&(H=z(M[D]),(q.abs((C&j)-(H&j))>G||q.abs((C&B)-(H&B))>J||q.abs((C&F)-(H&F))>K)&&(N|=Q)),Q<<=1);switch(N){case 0:case 1:case 4:case 32:case 128:case 5:case 132:case 160:case 33:case 129:case 36:case 133:case 164:case 161:case 37:case 165:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 2:case 34:case 130:case 162:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 16:case 17:case 48:case 49:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 64:case 65:case 68:case 69:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 8:case 12:case 136:case 140:L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 3:case 35:case 131:case 163:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 6:case 38:case 134:case 166:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 20:case 21:case 52:case 53:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 144:case 145:case 176:case 177:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 192:case 193:case 196:case 197:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 96:case 97:case 100:case 101:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 40:case 44:case 168:case 172:L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 9:case 13:case 137:case 141:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 18:case 50:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 80:case 81:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9])):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 72:case 76:L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 10:case 138:y(M[4],M[2])?(L(E,M[5],M[1]),U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 66:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 24:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 7:case 39:case 135:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 148:case 149:case 180:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 224:case 228:case 225:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 41:case 169:case 45:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 22:case 54:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 208:case 209:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 104:case 108:L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 11:case 139:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 19:case 51:y(M[2],M[6])?(L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+2]=M[5]):(O(E,M[5],M[4],M[2]),L(E+1,M[2],M[5]),S(E+2,M[2],M[6]),L(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 146:case 178:y(M[2],M[6])?(U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+2]=M[5],L(E+(A<<1)+2,M[5],M[8])):(L(E+1,M[5],M[2]),S(E+2,M[2],M[6]),L(E+A+2,M[6],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]);break;case 84:case 85:y(M[6],M[8])?(L(E+2,M[5],M[2]),U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9])):(O(E+2,M[5],M[2],M[6]),L(E+A+2,M[6],M[5]),L(E+(A<<1)+1,M[5],M[8]),S(E+(A<<1)+2,M[6],M[8])),O(E,M[5],M[4],M[2]), +L(E+1,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]);break;case 112:case 113:y(M[6],M[8])?(U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9])):(L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),S(E+(A<<1)+2,M[6],M[8])),O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5];break;case 200:case 204:y(M[8],M[4])?(U[E+A]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6])):(L(E+A,M[5],M[4]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]);break;case 73:case 77:y(M[8],M[4])?(L(E,M[5],M[2]),U[E+A]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5]):(O(E,M[5],M[4],M[2]),L(E+A,M[4],M[5]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[5],M[8])),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1)+2,M[5],M[9]);break;case 42:case 170:y(M[4],M[2])?(L(E,M[5],M[1]),U[E+1]=M[5],U[E+A]=M[5],L(E+(A<<1),M[5],M[8])):(S(E,M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[4],M[5]),O(E+(A<<1),M[5],M[8],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 14:case 142:y(M[4],M[2])?(L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5]):(S(E,M[4],M[2]),L(E+1,M[2],M[5]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4])),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 67:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 70:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 28:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 152:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 194:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 98:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 56:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 25:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 26:case 31:y(M[4],M[2])?(U[E]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+A,M[5],M[4])),U[E+1]=M[5],y(M[2],M[6])?(U[E+2]=M[5],U[E+A+2]=M[5]):(R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 82:case 214:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 88:case 248:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4])),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 74:case 107:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2])),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 27:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 86:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 216:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 106:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 30:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 210:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 120:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 75:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 29:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 198:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 184:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 99:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 57:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 71:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 156:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 226:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 60:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 195:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 102:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 153:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 58:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 83:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 92:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 202:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 78:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 154:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 114:L(E,M[5],M[1]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 89:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 90:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 55:case 23:y(M[2],M[6])?(L(E,M[5],M[4]),U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(O(E,M[5],M[4],M[2]),L(E+1,M[2],M[5]),S(E+2,M[2],M[6]),L(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 182:case 150:y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5],L(E+(A<<1)+2,M[5],M[8])):(L(E+1,M[5],M[2]),S(E+2,M[2],M[6]),L(E+A+2,M[6],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]);break;case 213:case 212:y(M[6],M[8])?(L(E+2,M[5],M[2]),U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(O(E+2,M[5],M[2],M[6]),L(E+A+2,M[6],M[5]),L(E+(A<<1)+1,M[5],M[8]),S(E+(A<<1)+2,M[6],M[8])),O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]);break;case 241:case 240:y(M[6],M[8])?(U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),S(E+(A<<1)+2,M[6],M[8])),O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5];break;case 236:case 232:y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6])):(L(E+A,M[5],M[4]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]);break;case 109:case 105:y(M[8],M[4])?(L(E,M[5],M[2]),U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(O(E,M[5],M[4],M[2]),L(E+A,M[4],M[5]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[5],M[8])),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1)+2,M[5],M[9]);break;case 171:case 43:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5],L(E+(A<<1),M[5],M[8])):(S(E,M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[4],M[5]),O(E+(A<<1),M[5],M[8],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 143:case 15:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5]):(S(E,M[4],M[2]),L(E+1,M[2],M[5]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4])),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 124:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 203:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 62:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 211:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 118:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 217:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 110:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 155:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 188:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 185:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 61:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 157:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 103:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 227:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 230:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 199:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 220:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 158:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 234:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[6]);break;case 242:L(E,M[5],M[1]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[4]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 59:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 121:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 87:L(E,M[5],M[4]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 79:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 122:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 94:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 218:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 91:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 229:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 167:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 173:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 181:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 186:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 115:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 93:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 206:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 205:case 201:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?L(E+(A<<1),M[5],M[7]):O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 174:case 46:y(M[4],M[2])?L(E,M[5],M[1]):O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 179:case 147:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?L(E+2,M[5],M[3]):O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 117:case 116:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?L(E+(A<<1)+2,M[5],M[9]):O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 189:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 231:L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 126:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 219:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 125:y(M[8],M[4])?(L(E,M[5],M[2]),U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(O(E,M[5],M[4],M[2]),L(E+A,M[4],M[5]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[5],M[8])),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 221:y(M[6],M[8])?(L(E+2,M[5],M[2]),U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(O(E+2,M[5],M[2],M[6]),L(E+A+2,M[6],M[5]),L(E+(A<<1)+1,M[5],M[8]),S(E+(A<<1)+2,M[6],M[8])),L(E,M[5],M[2]),L(E+1,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]);break;case 207:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5]):(S(E,M[4],M[2]),L(E+1,M[2],M[5]),O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4])),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 238:y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6])):(L(E+A,M[5],M[4]),S(E+(A<<1),M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A+1]=M[5],L(E+A+2,M[5],M[6]);break;case 190:y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5],L(E+(A<<1)+2,M[5],M[8])):(L(E+1,M[5],M[2]),S(E+2,M[2],M[6]),L(E+A+2,M[6],M[5]),O(E+(A<<1)+2,M[5],M[6],M[8])),L(E,M[5],M[1]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]);break;case 187:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5],L(E+(A<<1),M[5],M[8])):(S(E,M[4],M[2]),L(E+1,M[5],M[2]),L(E+A,M[4],M[5]),O(E+(A<<1),M[5],M[8],M[4])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 243:y(M[6],M[8])?(U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(L(E+A+2,M[5],M[6]),O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[8],M[5]),S(E+(A<<1)+2,M[6],M[8])),L(E,M[5],M[4]),U[E+1]=M[5],L(E+2,M[5],M[3]),L(E+A,M[5],M[4]),U[E+A+1]=M[5];break;case 119:y(M[2],M[6])?(L(E,M[5],M[4]),U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(O(E,M[5],M[4],M[2]),L(E+1,M[2],M[5]),S(E+2,M[2],M[6]),L(E+A+2,M[5],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 237:case 233:L(E,M[5],M[2]),L(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 175:case 47:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 183:case 151:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],O(E+(A<<1),M[5],M[8],M[4]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 245:case 244:O(E,M[5],M[4],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 250:L(E,M[5],M[1]),U[E+1]=M[5],L(E+2,M[5],M[3]),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4])),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 123:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2])),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 95:y(M[4],M[2])?(U[E]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+A,M[5],M[4])),U[E+1]=M[5],y(M[2],M[6])?(U[E+2]=M[5],U[E+A+2]=M[5]):(R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[9]);break;case 222:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 252:L(E,M[5],M[1]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4])),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 249:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 235:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2])),L(E+2,M[5],M[3]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 111:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?(U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 63:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?(U[E+2]=M[5],U[E+A+2]=M[5]):(R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A]=M[5],U[E+A+1]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[9]);break;case 159:y(M[4],M[2])?(U[E]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+A,M[5],M[4])),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 215:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 246:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6])),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 254:L(E,M[5],M[1]),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5]):(P(E+1,M[5],M[2]),R(E+2,M[5],M[2],M[6])),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5]):(P(E+A,M[5],M[4]),R(E+(A<<1),M[5],M[8],M[4])),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),P(E+(A<<1)+1,M[5],M[8]),O(E+(A<<1)+2,M[5],M[6],M[8]));break;case 253:L(E,M[5],M[2]),L(E+1,M[5],M[2]),L(E+2,M[5],M[2]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 251:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5]):(R(E,M[5],M[4],M[2]),P(E+1,M[5],M[2])),L(E+2,M[5],M[3]),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+A]=M[5],U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(P(E+A,M[5],M[4]),O(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),y(M[6],M[8])?(U[E+A+2]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+A+2,M[5],M[6]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 239:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],L(E+2,M[5],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],L(E+A+2,M[5],M[6]),y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],L(E+(A<<1)+2,M[5],M[6]);break;case 127:y(M[4],M[2])?(U[E]=M[5],U[E+1]=M[5],U[E+A]=M[5]):(O(E,M[5],M[4],M[2]),P(E+1,M[5],M[2]),P(E+A,M[5],M[4])),y(M[2],M[6])?(U[E+2]=M[5],U[E+A+2]=M[5]):(R(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A+1]=M[5],y(M[8],M[4])?(U[E+(A<<1)]=M[5],U[E+(A<<1)+1]=M[5]):(R(E+(A<<1),M[5],M[8],M[4]),P(E+(A<<1)+1,M[5],M[8])),L(E+(A<<1)+2,M[5],M[9]);break;case 191:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[8]),L(E+(A<<1)+1,M[5],M[8]),L(E+(A<<1)+2,M[5],M[8]);break;case 223:y(M[4],M[2])?(U[E]=M[5],U[E+A]=M[5]):(R(E,M[5],M[4],M[2]),P(E+A,M[5],M[4])),y(M[2],M[6])?(U[E+1]=M[5],U[E+2]=M[5],U[E+A+2]=M[5]):(P(E+1,M[5],M[2]),O(E+2,M[5],M[2],M[6]),P(E+A+2,M[5],M[6])),U[E+A+1]=M[5],L(E+(A<<1),M[5],M[7]),y(M[6],M[8])?(U[E+(A<<1)+1]=M[5],U[E+(A<<1)+2]=M[5]):(P(E+(A<<1)+1,M[5],M[8]),R(E+(A<<1)+2,M[5],M[6],M[8]));break;case 247:L(E,M[5],M[4]),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),L(E+A,M[5],M[4]),U[E+A+1]=M[5],U[E+A+2]=M[5],L(E+(A<<1),M[5],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8]);break;case 255:y(M[4],M[2])?U[E]=M[5]:O(E,M[5],M[4],M[2]),U[E+1]=M[5],y(M[2],M[6])?U[E+2]=M[5]:O(E+2,M[5],M[2],M[6]),U[E+A]=M[5],U[E+A+1]=M[5],U[E+A+2]=M[5],y(M[8],M[4])?U[E+(A<<1)]=M[5]:O(E+(A<<1),M[5],M[8],M[4]),U[E+(A<<1)+1]=M[5],y(M[6],M[8])?U[E+(A<<1)+2]=M[5]:O(E+(A<<1)+2,M[5],M[6],M[8])}p++,E+=3}E+=A<<1}},E=function(a,s){ +var r,w,x,C,H,M,A,E=[],p=a<<2,y=0,q=0,z=f,L=h,O=u,P=d,R=g,S=v,T=l,U=m,j=D,B=I,F=e,G=c,J=b,K=k,N=t,Q=n,V=i,W=o;for(w=0;s>w;w++){for(C=w>0?-a:0,H=s-1>w?a:0,r=0;a>r;r++){E[2]=F[q+C],E[5]=F[q],E[8]=F[q+H],r>0?(E[1]=F[q+C-1],E[4]=F[q-1],E[7]=F[q+H-1]):(E[1]=E[2],E[4]=E[5],E[7]=E[8]),a-1>r?(E[3]=F[q+C+1],E[6]=F[q+1],E[9]=F[q+H+1]):(E[3]=E[2],E[6]=E[5],E[9]=E[8]);var X=0,Y=1;for(M=O(E[5]),x=1;10>x;x++)5!==x&&(E[x]!==E[5]&&(A=O(E[x]),(L.abs((M&J)-(A&J))>Q||L.abs((M&K)-(A&K))>V||L.abs((M&N)-(A&N))>W)&&(X|=Y)),Y<<=1);switch(X){case 0:case 1:case 4:case 32:case 128:case 5:case 132:case 160:case 33:case 129:case 36:case 133:case 164:case 161:case 37:case 165:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 2:case 34:case 130:case 162:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 16:case 17:case 48:case 49:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 64:case 65:case 68:case 69:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 8:case 12:case 136:case 140:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 3:case 35:case 131:case 163:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 6:case 38:case 134:case 166:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 20:case 21:case 52:case 53:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 144:case 145:case 176:case 177:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 192:case 193:case 196:case 197:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 96:case 97:case 100:case 101:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 40:case 44:case 168:case 172:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 9:case 13:case 137:case 141:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 18:case 50:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),G[y+p+2]=E[5],T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 80:case 81:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 72:case 76:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(T(y+(p<<1),E[4],E[5]),G[y+(p<<1)+1]=E[5],T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 10:case 138:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5]),G[y+p+1]=E[5]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 66:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 24:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 7:case 39:case 135:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 148:case 149:case 180:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 224:case 228:case 225:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 41:case 169:case 45:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 22:case 54:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 208:case 209:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 104:case 108:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 11:case 139:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 19:case 51:z(E[2],E[6])?(B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y,E[5],E[2]),P(y+1,E[2],E[5]),B(y+2,E[2],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),R(y+p+3,E[6],E[5],E[2])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 146:case 178:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p+3,E[5],E[8])):(R(y+2,E[2],E[5],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),B(y+p+3,E[6],E[2]),P(y+(p<<1)+3,E[6],E[5]),P(y+3*p+3,E[5],E[6])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]);break;case 84:case 85:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),z(E[6],E[8])?(B(y+3,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(P(y+3,E[5],E[6]),P(y+p+3,E[6],E[5]),j(y+(p<<1)+2,E[5],E[6],E[8]),B(y+(p<<1)+3,E[6],E[8]),R(y+3*p+2,E[8],E[5],E[6]),T(y+3*p+3,E[8],E[6])),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 112:case 113:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(j(y+(p<<1)+2,E[5],E[6],E[8]),R(y+(p<<1)+3,E[6],E[5],E[8]),P(y+3*p,E[5],E[8]),P(y+3*p+1,E[8],E[5]),B(y+3*p+2,E[8],E[6]),T(y+3*p+3,E[8],E[6]));break;case 200:case 204:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6])):(R(y+(p<<1),E[4],E[5],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),B(y+3*p+1,E[8],E[4]),P(y+3*p+2,E[8],E[5]),P(y+3*p+3,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]);break;case 73:case 77:z(E[8],E[4])?(B(y,E[5],E[2]),S(y+p,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y,E[5],E[4]),P(y+p,E[4],E[5]),B(y+(p<<1),E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),R(y+3*p+1,E[8],E[5],E[4])),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 42:case 170:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+(p<<1),E[5],E[8]),B(y+3*p,E[5],E[8])):(T(y,E[2],E[4]),R(y+1,E[2],E[5],E[4]),B(y+p,E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),P(y+(p<<1),E[4],E[5]),P(y+3*p,E[5],E[4])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 14:case 142:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(T(y,E[2],E[4]),B(y+1,E[2],E[4]),P(y+2,E[2],E[5]),P(y+3,E[5],E[2]),R(y+p,E[4],E[5],E[2]),j(y+p+1,E[5],E[4],E[2])),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 67:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 70:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 28:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 152:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 194:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 98:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 56:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 25:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 26:case 31:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p+1]=E[5],G[y+p+2]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 82:case 214:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 88:case 248:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6]));break;case 74:case 107:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 27:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 86:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 216:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 106:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 30:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 210:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 120:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 75:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 29:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 198:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 184:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 99:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 57:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 71:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 156:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 226:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 60:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 195:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 102:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 153:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 58:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 83:B(y,E[5],E[4]),S(y+1,E[5],E[4]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 92:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 202:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 78:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 154:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 114:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6])),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]);break;case 89:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 90:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]), +P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 55:case 23:z(E[2],E[6])?(B(y,E[5],E[4]),S(y+1,E[5],E[4]),G[y+2]=E[5],G[y+3]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5]):(P(y,E[5],E[2]),P(y+1,E[2],E[5]),B(y+2,E[2],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),R(y+p+3,E[6],E[5],E[2])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 182:case 150:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],S(y+(p<<1)+3,E[5],E[8]),B(y+3*p+3,E[5],E[8])):(R(y+2,E[2],E[5],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),B(y+p+3,E[6],E[2]),P(y+(p<<1)+3,E[6],E[5]),P(y+3*p+3,E[5],E[6])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]);break;case 213:case 212:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),z(E[6],E[8])?(B(y+3,E[5],E[2]),S(y+p+3,E[5],E[2]),G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(P(y+3,E[5],E[6]),P(y+p+3,E[6],E[5]),j(y+(p<<1)+2,E[5],E[6],E[8]),B(y+(p<<1)+3,E[6],E[8]),R(y+3*p+2,E[8],E[5],E[6]),T(y+3*p+3,E[8],E[6])),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 241:case 240:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(j(y+(p<<1)+2,E[5],E[6],E[8]),R(y+(p<<1)+3,E[6],E[5],E[8]),P(y+3*p,E[5],E[8]),P(y+3*p+1,E[8],E[5]),B(y+3*p+2,E[8],E[6]),T(y+3*p+3,E[8],E[6]));break;case 236:case 232:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5],S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6])):(R(y+(p<<1),E[4],E[5],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),B(y+3*p+1,E[8],E[4]),P(y+3*p+2,E[8],E[5]),P(y+3*p+3,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]);break;case 109:case 105:z(E[8],E[4])?(B(y,E[5],E[2]),S(y+p,E[5],E[2]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(P(y,E[5],E[4]),P(y+p,E[4],E[5]),B(y+(p<<1),E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),R(y+3*p+1,E[8],E[5],E[4])),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 171:case 43:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5],G[y+p+1]=E[5],S(y+(p<<1),E[5],E[8]),B(y+3*p,E[5],E[8])):(T(y,E[2],E[4]),R(y+1,E[2],E[5],E[4]),B(y+p,E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),P(y+(p<<1),E[4],E[5]),P(y+3*p,E[5],E[4])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 143:case 15:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p]=E[5],G[y+p+1]=E[5]):(T(y,E[2],E[4]),B(y+1,E[2],E[4]),P(y+2,E[2],E[5]),P(y+3,E[5],E[2]),R(y+p,E[4],E[5],E[2]),j(y+p+1,E[5],E[4],E[2])),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 124:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 203:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 62:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 211:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 118:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 217:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 110:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 155:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 188:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 185:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 61:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 157:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 103:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 227:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 230:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 199:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 220:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6]));break;case 158:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p+2]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 234:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 242:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]);break;case 59:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),G[y+p+1]=E[5],S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 121:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 87:B(y,E[5],E[4]),S(y+1,E[5],E[4]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),G[y+p+2]=E[5],U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 79:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p+1]=E[5],S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 122:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 94:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p+2]=E[5],z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 218:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6]));break;case 91:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),G[y+p+1]=E[5],z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 229:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 167:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 173:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 181:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 186:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 115:B(y,E[5],E[4]),S(y+1,E[5],E[4]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6])),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]);break;case 93:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6]));break;case 206:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 205:case 201:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),z(E[8],E[4])?(P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7])):(P(y+(p<<1),E[5],E[4]),G[y+(p<<1)+1]=E[5],R(y+3*p,E[5],E[8],E[4]),P(y+3*p+1,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 174:case 46:z(E[4],E[2])?(B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1])):(R(y,E[5],E[2],E[4]),P(y+1,E[5],E[2]),P(y+p,E[5],E[4]),G[y+p+1]=E[5]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 179:case 147:B(y,E[5],E[4]),S(y+1,E[5],E[4]),z(E[2],E[6])?(P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3])):(P(y+2,E[5],E[2]),R(y+3,E[5],E[2],E[6]),G[y+p+2]=E[5],P(y+p+3,E[5],E[6])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 117:case 116:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9])):(G[y+(p<<1)+2]=E[5],P(y+(p<<1)+3,E[5],E[6]),P(y+3*p+2,E[5],E[8]),R(y+3*p+3,E[5],E[8],E[6])),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]);break;case 189:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 231:B(y,E[5],E[4]),S(y+1,E[5],E[4]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 126:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 219:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 125:z(E[8],E[4])?(B(y,E[5],E[2]),S(y+p,E[5],E[2]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(P(y,E[5],E[4]),P(y+p,E[4],E[5]),B(y+(p<<1),E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),R(y+3*p+1,E[8],E[5],E[4])),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 221:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),z(E[6],E[8])?(B(y+3,E[5],E[2]),S(y+p+3,E[5],E[2]),G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(P(y+3,E[5],E[6]),P(y+p+3,E[6],E[5]),j(y+(p<<1)+2,E[5],E[6],E[8]),B(y+(p<<1)+3,E[6],E[8]),R(y+3*p+2,E[8],E[5],E[6]),T(y+3*p+3,E[8],E[6])),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 207:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p]=E[5],G[y+p+1]=E[5]):(T(y,E[2],E[4]),B(y+1,E[2],E[4]),P(y+2,E[2],E[5]),P(y+3,E[5],E[2]),R(y+p,E[4],E[5],E[2]),j(y+p+1,E[5],E[4],E[2])),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 238:B(y,E[5],E[1]),P(y+1,E[5],E[1]),S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5],S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6])):(R(y+(p<<1),E[4],E[5],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),T(y+3*p,E[8],E[4]),B(y+3*p+1,E[8],E[4]),P(y+3*p+2,E[8],E[5]),P(y+3*p+3,E[5],E[8])),S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]);break;case 190:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],S(y+(p<<1)+3,E[5],E[8]),B(y+3*p+3,E[5],E[8])):(R(y+2,E[2],E[5],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),B(y+p+3,E[6],E[2]),P(y+(p<<1)+3,E[6],E[5]),P(y+3*p+3,E[5],E[6])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]);break;case 187:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5],G[y+p+1]=E[5],S(y+(p<<1),E[5],E[8]),B(y+3*p,E[5],E[8])):(T(y,E[2],E[4]),R(y+1,E[2],E[5],E[4]),B(y+p,E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),P(y+(p<<1),E[4],E[5]),P(y+3*p,E[5],E[4])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 243:B(y,E[5],E[4]),S(y+1,E[5],E[4]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),z(E[6],E[8])?(G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(j(y+(p<<1)+2,E[5],E[6],E[8]),R(y+(p<<1)+3,E[6],E[5],E[8]),P(y+3*p,E[5],E[8]),P(y+3*p+1,E[8],E[5]),B(y+3*p+2,E[8],E[6]),T(y+3*p+3,E[8],E[6]));break;case 119:z(E[2],E[6])?(B(y,E[5],E[4]),S(y+1,E[5],E[4]),G[y+2]=E[5],G[y+3]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5]):(P(y,E[5],E[2]),P(y+1,E[2],E[5]),B(y+2,E[2],E[6]),T(y+3,E[2],E[6]),j(y+p+2,E[5],E[6],E[2]),R(y+p+3,E[6],E[5],E[2])),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 237:case 233:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[6]),R(y+3,E[5],E[2],E[6]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),j(y+p+2,E[5],E[6],E[2]),U(y+p+3,E[5],E[6],E[2]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5],S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 175:case 47:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p]=E[5],G[y+p+1]=E[5],S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),j(y+(p<<1)+2,E[5],E[6],E[8]),U(y+(p<<1)+3,E[5],E[6],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[6]),R(y+3*p+3,E[5],E[8],E[6]);break;case 183:case 151:B(y,E[5],E[4]),S(y+1,E[5],E[4]),G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),G[y+p+2]=E[5],G[y+p+3]=E[5],U(y+(p<<1),E[5],E[4],E[8]),j(y+(p<<1)+1,E[5],E[4],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),R(y+3*p,E[5],E[8],E[4]),U(y+3*p+1,E[5],E[8],E[4]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 245:case 244:R(y,E[5],E[2],E[4]),U(y+1,E[5],E[2],E[4]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),U(y+p,E[5],E[4],E[2]),j(y+p+1,E[5],E[4],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 250:B(y,E[5],E[1]),P(y+1,E[5],E[1]),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6]));break;case 123:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 95:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p+1]=E[5],G[y+p+2]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 222:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 252:B(y,E[5],E[1]),U(y+1,E[5],E[2],E[1]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 249:B(y,E[5],E[2]),B(y+1,E[5],E[2]),U(y+2,E[5],E[2],E[3]),B(y+3,E[5],E[3]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5];break;case 235:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),U(y+p+3,E[5],E[6],E[3]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5],S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 111:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p]=E[5],G[y+p+1]=E[5],S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]), +z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),U(y+(p<<1)+3,E[5],E[6],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 63:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p]=E[5],G[y+p+1]=E[5],G[y+p+2]=E[5],S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),U(y+3*p+2,E[5],E[8],E[9]),B(y+3*p+3,E[5],E[9]);break;case 159:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),G[y+p+1]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[7]),U(y+3*p+1,E[5],E[8],E[7]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 215:B(y,E[5],E[4]),S(y+1,E[5],E[4]),G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),G[y+p+2]=E[5],G[y+p+3]=E[5],U(y+(p<<1),E[5],E[4],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 246:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),U(y+p,E[5],E[4],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 254:B(y,E[5],E[1]),P(y+1,E[5],E[1]),z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),P(y+p,E[5],E[1]),S(y+p+1,E[5],E[1]),G[y+p+2]=E[5],z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 253:B(y,E[5],E[2]),B(y+1,E[5],E[2]),B(y+2,E[5],E[2]),B(y+3,E[5],E[2]),S(y+p,E[5],E[2]),S(y+p+1,E[5],E[2]),S(y+p+2,E[5],E[2]),S(y+p+3,E[5],E[2]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5],G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 251:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),P(y+2,E[5],E[3]),B(y+3,E[5],E[3]),G[y+p+1]=E[5],S(y+p+2,E[5],E[3]),P(y+p+3,E[5],E[3]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5];break;case 239:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],S(y+2,E[5],E[6]),B(y+3,E[5],E[6]),G[y+p]=E[5],G[y+p+1]=E[5],S(y+p+2,E[5],E[6]),B(y+p+3,E[5],E[6]),G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[6]),B(y+(p<<1)+3,E[5],E[6]),z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5],S(y+3*p+2,E[5],E[6]),B(y+3*p+3,E[5],E[6]);break;case 127:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],z(E[2],E[6])?(G[y+2]=E[5],G[y+3]=E[5],G[y+p+3]=E[5]):(T(y+2,E[2],E[5]),T(y+3,E[2],E[6]),T(y+p+3,E[6],E[5])),G[y+p]=E[5],G[y+p+1]=E[5],G[y+p+2]=E[5],z(E[8],E[4])?(G[y+(p<<1)]=E[5],G[y+3*p]=E[5],G[y+3*p+1]=E[5]):(T(y+(p<<1),E[4],E[5]),T(y+3*p,E[8],E[4]),T(y+3*p+1,E[8],E[5])),G[y+(p<<1)+1]=E[5],S(y+(p<<1)+2,E[5],E[9]),P(y+(p<<1)+3,E[5],E[9]),P(y+3*p+2,E[5],E[9]),B(y+3*p+3,E[5],E[9]);break;case 191:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),G[y+p]=E[5],G[y+p+1]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],S(y+(p<<1),E[5],E[8]),S(y+(p<<1)+1,E[5],E[8]),S(y+(p<<1)+2,E[5],E[8]),S(y+(p<<1)+3,E[5],E[8]),B(y+3*p,E[5],E[8]),B(y+3*p+1,E[5],E[8]),B(y+3*p+2,E[5],E[8]),B(y+3*p+3,E[5],E[8]);break;case 223:z(E[4],E[2])?(G[y]=E[5],G[y+1]=E[5],G[y+p]=E[5]):(T(y,E[2],E[4]),T(y+1,E[2],E[5]),T(y+p,E[4],E[5])),G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),G[y+p+1]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],P(y+(p<<1),E[5],E[7]),S(y+(p<<1)+1,E[5],E[7]),G[y+(p<<1)+2]=E[5],z(E[6],E[8])?(G[y+(p<<1)+3]=E[5],G[y+3*p+2]=E[5],G[y+3*p+3]=E[5]):(T(y+(p<<1)+3,E[6],E[5]),T(y+3*p+2,E[8],E[5]),T(y+3*p+3,E[8],E[6])),B(y+3*p,E[5],E[7]),P(y+3*p+1,E[5],E[7]);break;case 247:B(y,E[5],E[4]),S(y+1,E[5],E[4]),G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),B(y+p,E[5],E[4]),S(y+p+1,E[5],E[4]),G[y+p+2]=E[5],G[y+p+3]=E[5],B(y+(p<<1),E[5],E[4]),S(y+(p<<1)+1,E[5],E[4]),G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],B(y+3*p,E[5],E[4]),S(y+3*p+1,E[5],E[4]),G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6]);break;case 255:z(E[4],E[2])?G[y]=E[5]:R(y,E[5],E[2],E[4]),G[y+1]=E[5],G[y+2]=E[5],z(E[2],E[6])?G[y+3]=E[5]:R(y+3,E[5],E[2],E[6]),G[y+p]=E[5],G[y+p+1]=E[5],G[y+p+2]=E[5],G[y+p+3]=E[5],G[y+(p<<1)]=E[5],G[y+(p<<1)+1]=E[5],G[y+(p<<1)+2]=E[5],G[y+(p<<1)+3]=E[5],z(E[8],E[4])?G[y+3*p]=E[5]:R(y+3*p,E[5],E[8],E[4]),G[y+3*p+1]=E[5],G[y+3*p+2]=E[5],z(E[6],E[8])?G[y+3*p+3]=E[5]:R(y+3*p+3,E[5],E[8],E[6])}q++,y+=4}y+=3*p}}}(this); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.xml new file mode 100644 index 00000000000..ebdeedca641 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/hqx/hqx.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>hqx.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters.xml new file mode 100644 index 00000000000..1f70c69e30e --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>imagefilters</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.js new file mode 100644 index 00000000000..7e7962d61c2 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.js @@ -0,0 +1,2005 @@ +//about - A Javascript Image filter library for the HTML5 Canvas tag. +//author - https://github.com/arahaya/ImageFilters.js +//demo - http://www.arahaya.com/imagefilters/ + +var ImageFilters = {}; +ImageFilters.utils = { + initSampleCanvas: function () { + var _canvas = document.createElement('canvas'), + _context = _canvas.getContext('2d'); + + _canvas.width = 0; + _canvas.height = 0; + + this.getSampleCanvas = function () { + return _canvas; + }; + this.getSampleContext = function () { + return _context; + }; + this.createImageData = (_context.createImageData) ? function (w, h) { + return _context.createImageData(w, h); + } : function (w, h) { + return new ImageData(w, h); + }; + }, + getSampleCanvas: function () { + this.initSampleCanvas(); + return this.getSampleCanvas(); + }, + getSampleContext: function () { + this.initSampleCanvas(); + return this.getSampleContext(); + }, + createImageData: function (w, h) { + this.initSampleCanvas(); + return this.createImageData(w, h); + }, + clamp: function (value) { + return value > 255 ? 255 : value < 0 ? 0 : value; + }, + buildMap: function (f) { + for (var m = [], k = 0, v; k < 256; k += 1) { + m[k] = (v = f(k)) > 255 ? 255 : v < 0 ? 0 : v | 0; + } + return m; + }, + applyMap: function (src, dst, map) { + for (var i = 0, l = src.length; i < l; i += 4) { + dst[i] = map[src[i]]; + dst[i + 1] = map[src[i + 1]]; + dst[i + 2] = map[src[i + 2]]; + dst[i + 3] = src[i + 3]; + } + }, + mapRGB: function (src, dst, func) { + this.applyMap(src, dst, this.buildMap(func)); + }, + getPixelIndex: function (x, y, width, height, edge) { + if (x < 0 || x >= width || y < 0 || y >= height) { + switch (edge) { + case 1: // clamp + x = x < 0 ? 0 : x >= width ? width - 1 : x; + y = y < 0 ? 0 : y >= height ? height - 1 : y; + break; + case 2: // wrap + x = (x %= width) < 0 ? x + width : x; + y = (y %= height) < 0 ? y + height : y; + break; + default: // transparent + return null; + } + } + return (y * width + x) << 2; + }, + getPixel: function (src, x, y, width, height, edge) { + if (x < 0 || x >= width || y < 0 || y >= height) { + switch (edge) { + case 1: // clamp + x = x < 0 ? 0 : x >= width ? width - 1 : x; + y = y < 0 ? 0 : y >= height ? height - 1 : y; + break; + case 2: // wrap + x = (x %= width) < 0 ? x + width : x; + y = (y %= height) < 0 ? y + height : y; + break; + default: // transparent + return 0; + } + } + + var i = (y * width + x) << 2; + + // ARGB + return src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + }, + getPixelByIndex: function (src, i) { + return src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + }, + /** + * one of the most important functions in this library. + * I want to make this as fast as possible. + */ + copyBilinear: function (src, x, y, width, height, dst, dstIndex, edge) { + var fx = x < 0 ? x - 1 | 0 : x | 0, // Math.floor(x) + fy = y < 0 ? y - 1 | 0 : y | 0, // Math.floor(y) + wx = x - fx, + wy = y - fy, + i, + nw = 0, ne = 0, sw = 0, se = 0, + cx, cy, + r, g, b, a; + + if (fx >= 0 && fx < (width - 1) && fy >= 0 && fy < (height - 1)) { + // in bounds, no edge actions required + i = (fy * width + fx) << 2; + + if (wx || wy) { + nw = src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + + i += 4; + ne = src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + + i = (i - 8) + (width << 2); + sw = src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + + i += 4; + se = src[i + 3] << 24 | src[i] << 16 | src[i + 1] << 8 | src[i + 2]; + } else { + // no interpolation required + dst[dstIndex] = src[i]; + dst[dstIndex + 1] = src[i + 1]; + dst[dstIndex + 2] = src[i + 2]; + dst[dstIndex + 3] = src[i + 3]; + return; + } + } else { + // edge actions required + nw = this.getPixel(src, fx, fy, width, height, edge); + + if (wx || wy) { + ne = this.getPixel(src, fx + 1, fy, width, height, edge); + sw = this.getPixel(src, fx, fy + 1, width, height, edge); + se = this.getPixel(src, fx + 1, fy + 1, width, height, edge); + } else { + // no interpolation required + dst[dstIndex] = nw >> 16 & 0xFF; + dst[dstIndex + 1] = nw >> 8 & 0xFF; + dst[dstIndex + 2] = nw & 0xFF; + dst[dstIndex + 3] = nw >> 24 & 0xFF; + return; + } + } + + cx = 1 - wx; + cy = 1 - wy; + r = ((nw >> 16 & 0xFF) * cx + (ne >> 16 & 0xFF) * wx) * cy + ((sw >> 16 & 0xFF) * cx + (se >> 16 & 0xFF) * wx) * wy; + g = ((nw >> 8 & 0xFF) * cx + (ne >> 8 & 0xFF) * wx) * cy + ((sw >> 8 & 0xFF) * cx + (se >> 8 & 0xFF) * wx) * wy; + b = ((nw & 0xFF) * cx + (ne & 0xFF) * wx) * cy + ((sw & 0xFF) * cx + (se & 0xFF) * wx) * wy; + a = ((nw >> 24 & 0xFF) * cx + (ne >> 24 & 0xFF) * wx) * cy + ((sw >> 24 & 0xFF) * cx + (se >> 24 & 0xFF) * wx) * wy; + + dst[dstIndex] = r > 255 ? 255 : r < 0 ? 0 : r | 0; + dst[dstIndex + 1] = g > 255 ? 255 : g < 0 ? 0 : g | 0; + dst[dstIndex + 2] = b > 255 ? 255 : b < 0 ? 0 : b | 0; + dst[dstIndex + 3] = a > 255 ? 255 : a < 0 ? 0 : a | 0; + }, + /** + * @param r 0 <= n <= 255 + * @param g 0 <= n <= 255 + * @param b 0 <= n <= 255 + * @return Array(h, s, l) + */ + rgbToHsl: function (r, g, b) { + r /= 255; + g /= 255; + b /= 255; + +// var max = Math.max(r, g, b), +// min = Math.min(r, g, b), + var max = (r > g) ? (r > b) ? r : b : (g > b) ? g : b, + min = (r < g) ? (r < b) ? r : b : (g < b) ? g : b, + chroma = max - min, + h = 0, + s = 0, + // Lightness + l = (min + max) / 2; + + if (chroma !== 0) { + // Hue + if (r === max) { + h = (g - b) / chroma + ((g < b) ? 6 : 0); + } else if (g === max) { + h = (b - r) / chroma + 2; + } else { + h = (r - g) / chroma + 4; + } + h /= 6; + + // Saturation + s = (l > 0.5) ? chroma / (2 - max - min) : chroma / (max + min); + } + + return [h, s, l]; + }, + /** + * @param h 0.0 <= n <= 1.0 + * @param s 0.0 <= n <= 1.0 + * @param l 0.0 <= n <= 1.0 + * @return Array(r, g, b) + */ + hslToRgb: function (h, s, l) { + var m1, m2, hue, + r, g, b, + rgb = []; + + if (s === 0) { + r = g = b = l * 255 + 0.5 | 0; + rgb = [r, g, b]; + } else { + if (l <= 0.5) { + m2 = l * (s + 1); + } else { + m2 = l + s - l * s; + } + + m1 = l * 2 - m2; + hue = h + 1 / 3; + + var tmp; + for (var i = 0; i < 3; i += 1) { + if (hue < 0) { + hue += 1; + } else if (hue > 1) { + hue -= 1; + } + + if (6 * hue < 1) { + tmp = m1 + (m2 - m1) * hue * 6; + } else if (2 * hue < 1) { + tmp = m2; + } else if (3 * hue < 2) { + tmp = m1 + (m2 - m1) * (2 / 3 - hue) * 6; + } else { + tmp = m1; + } + + rgb[i] = tmp * 255 + 0.5 | 0; + + hue -= 1 / 3; + } + } + + return rgb; + } +}; + + +ImageFilters.Translate = function (srcImageData, x, y, interpolation) { + +}; +ImageFilters.Scale = function (srcImageData, scaleX, scaleY, interpolation) { + +}; +ImageFilters.Rotate = function (srcImageData, originX, originY, angle, resize, interpolation) { + +}; +ImageFilters.Affine = function (srcImageData, matrix, resize, interpolation) { + +}; +ImageFilters.UnsharpMask = function (srcImageData, level) { + +}; + +ImageFilters.ConvolutionFilter = function (srcImageData, matrixX, matrixY, matrix, divisor, bias, preserveAlpha, clamp, color, alpha) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + divisor = divisor || 1; + bias = bias || 0; + + // default true + (preserveAlpha !== false) && (preserveAlpha = true); + (clamp !== false) && (clamp = true); + + color = color || 0; + alpha = alpha || 0; + + var index = 0, + rows = matrixX >> 1, + cols = matrixY >> 1, + clampR = color >> 16 & 0xFF, + clampG = color >> 8 & 0xFF, + clampB = color & 0xFF, + clampA = alpha * 0xFF; + + for (var y = 0; y < srcHeight; y += 1) { + for (var x = 0; x < srcWidth; x += 1, index += 4) { + var r = 0, + g = 0, + b = 0, + a = 0, + replace = false, + mIndex = 0, + v; + + for (var row = -rows; row <= rows; row += 1) { + var rowIndex = y + row, + offset; + + if (0 <= rowIndex && rowIndex < srcHeight) { + offset = rowIndex * srcWidth; + } else if (clamp) { + offset = y * srcWidth; + } else { + replace = true; + } + + for (var col = -cols; col <= cols; col += 1) { + var m = matrix[mIndex++]; + + if (m !== 0) { + var colIndex = x + col; + + if (!(0 <= colIndex && colIndex < srcWidth)) { + if (clamp) { + colIndex = x; + } else { + replace = true; + } + } + + if (replace) { + r += m * clampR; + g += m * clampG; + b += m * clampB; + a += m * clampA; + } else { + var p = (offset + colIndex) << 2; + r += m * srcPixels[p]; + g += m * srcPixels[p + 1]; + b += m * srcPixels[p + 2]; + a += m * srcPixels[p + 3]; + } + } + } + } + + dstPixels[index] = (v = r / divisor + bias) > 255 ? 255 : v < 0 ? 0 : v | 0; + dstPixels[index + 1] = (v = g / divisor + bias) > 255 ? 255 : v < 0 ? 0 : v | 0; + dstPixels[index + 2] = (v = b / divisor + bias) > 255 ? 255 : v < 0 ? 0 : v | 0; + dstPixels[index + 3] = preserveAlpha ? srcPixels[index + 3] : (v = a / divisor + bias) > 255 ? 255 : v < 0 ? 0 : v | 0; + } + } + + return dstImageData; +}; + +/** + * @param threshold 0.0 <= n <= 1.0 + */ +ImageFilters.Binarize = function (srcImageData, threshold) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + if (isNaN(threshold)) { + threshold = 0.5; + } + + threshold *= 255; + + for (var i = 0; i < srcLength; i += 4) { + var avg = srcPixels[i] + srcPixels[i + 1] + srcPixels[i + 2] / 3; + + dstPixels[i] = dstPixels[i + 1] = dstPixels[i + 2] = avg <= threshold ? 0 : 255; + dstPixels[i + 3] = 255; + } + + return dstImageData; +}; + +ImageFilters.BlendAdd = function (srcImageData, blendImageData, dx, dy) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data, + blendPixels = blendImageData.data; + + var v; + + for (var i = 0; i < srcLength; i += 4) { + dstPixels[i] = ((v = srcPixels[i] + blendPixels[i]) > 255) ? 255 : v; + dstPixels[i + 1] = ((v = srcPixels[i + 1] + blendPixels[i + 1]) > 255) ? 255 : v; + dstPixels[i + 2] = ((v = srcPixels[i + 2] + blendPixels[i + 2]) > 255) ? 255 : v; + dstPixels[i + 3] = 255; + } + + return dstImageData; +}; + +ImageFilters.BlendSubtract = function (srcImageData, blendImageData, dx, dy) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data, + blendPixels = blendImageData.data; + + var v; + + for (var i = 0; i < srcLength; i += 4) { + dstPixels[i] = ((v = srcPixels[i] - blendPixels[i]) < 0) ? 0 : v; + dstPixels[i + 1] = ((v = srcPixels[i + 1] - blendPixels[i + 1]) < 0) ? 0 : v; + dstPixels[i + 2] = ((v = srcPixels[i + 2] - blendPixels[i + 2]) < 0) ? 0 : v; + dstPixels[i + 3] = 255; + } + + return dstImageData; +}; + +/** + * Algorithm based on BoxBlurFilter.java by Huxtable.com + * @see http://www.jhlabs.com/ip/blurring.html + * Copyright 2005 Huxtable.com. All rights reserved. + */ +ImageFilters.BoxBlur = (function () { + var blur = function (src, dst, width, height, radius) { + var tableSize = radius * 2 + 1; + var radiusPlus1 = radius + 1; + var widthMinus1 = width - 1; + + var r, g, b, a; + + var srcIndex = 0; + var dstIndex; + var p, next, prev; + var i, l, x, y, + nextIndex, prevIndex; + + var sumTable = []; + for (i = 0, l = 256 * tableSize; i < l; i += 1) { + sumTable[i] = i / tableSize | 0; + } + + for (y = 0; y < height; y += 1) { + r = g = b = a = 0; + dstIndex = y; + + p = srcIndex << 2; + r += radiusPlus1 * src[p]; + g += radiusPlus1 * src[p + 1]; + b += radiusPlus1 * src[p + 2]; + a += radiusPlus1 * src[p + 3]; + + for (i = 1; i <= radius; i += 1) { + p = (srcIndex + (i < width ? i : widthMinus1)) << 2; + r += src[p]; + g += src[p + 1]; + b += src[p + 2]; + a += src[p + 3]; + } + + for (x = 0; x < width; x += 1) { + p = dstIndex << 2; + dst[p] = sumTable[r]; + dst[p + 1] = sumTable[g]; + dst[p + 2] = sumTable[b]; + dst[p + 3] = sumTable[a]; + + nextIndex = x + radiusPlus1; + if (nextIndex > widthMinus1) { + nextIndex = widthMinus1; + } + + prevIndex = x - radius; + if (prevIndex < 0) { + prevIndex = 0; + } + + next = (srcIndex + nextIndex) << 2; + prev = (srcIndex + prevIndex) << 2; + + r += src[next] - src[prev]; + g += src[next + 1] - src[prev + 1]; + b += src[next + 2] - src[prev + 2]; + a += src[next + 3] - src[prev + 3]; + + dstIndex += height; + } + srcIndex += width; + } + }; + + return function (srcImageData, hRadius, vRadius, quality) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data, + tmpImageData = this.utils.createImageData(srcWidth, srcHeight), + tmpPixels = tmpImageData.data; + + for (var i = 0; i < quality; i += 1) { + // only use the srcPixels on the first loop + blur(i ? dstPixels : srcPixels, tmpPixels, srcWidth, srcHeight, hRadius); + blur(tmpPixels, dstPixels, srcHeight, srcWidth, vRadius); + } + + return dstImageData; + }; +}()); + +/** + * @ param strength 1 <= n <= 4 + */ +ImageFilters.GaussianBlur = function (srcImageData, strength) { + var size, matrix, divisor; + + switch (strength) { + case 2: + size = 5; + matrix = [ + 1, 1, 2, 1, 1, + 1, 2, 4, 2, 1, + 2, 4, 8, 4, 2, + 1, 2, 4, 2, 1, + 1, 1, 2, 1, 1 + ]; + divisor = 52; + break; + case 3: + size = 7; + matrix = [ + 1, 1, 2, 2, 2, 1, 1, + 1, 2, 2, 4, 2, 2, 1, + 2, 2, 4, 8, 4, 2, 2, + 2, 4, 8, 16, 8, 4, 2, + 2, 2, 4, 8, 4, 2, 2, + 1, 2, 2, 4, 2, 2, 1, + 1, 1, 2, 2, 2, 1, 1 + ]; + divisor = 140; + break; + case 4: + size = 15; + matrix = [ + 2, 2, 3, 4, 5, 5, 6, 6, 6, 5, 5, 4, 3, 2, 2, + 2, 3, 4, 5, 7, 7, 8, 8, 8, 7, 7, 5, 4, 3, 2, + 3, 4, 6, 7, 9, 10, 10, 11, 10, 10, 9, 7, 6, 4, 3, + 4, 5, 7, 9, 10, 12, 13, 13, 13, 12, 10, 9, 7, 5, 4, + 5, 7, 9, 11, 13, 14, 15, 16, 15, 14, 13, 11, 9, 7, 5, + 5, 7, 10, 12, 14, 16, 17, 18, 17, 16, 14, 12, 10, 7, 5, + 6, 8, 10, 13, 15, 17, 19, 19, 19, 17, 15, 13, 10, 8, 6, + 6, 8, 11, 13, 16, 18, 19, 20, 19, 18, 16, 13, 11, 8, 6, + 6, 8, 10, 13, 15, 17, 19, 19, 19, 17, 15, 13, 10, 8, 6, + 5, 7, 10, 12, 14, 16, 17, 18, 17, 16, 14, 12, 10, 7, 5, + 5, 7, 9, 11, 13, 14, 15, 16, 15, 14, 13, 11, 9, 7, 5, + 4, 5, 7, 9, 10, 12, 13, 13, 13, 12, 10, 9, 7, 5, 4, + 3, 4, 6, 7, 9, 10, 10, 11, 10, 10, 9, 7, 6, 4, 3, + 2, 3, 4, 5, 7, 7, 8, 8, 8, 7, 7, 5, 4, 3, 2, + 2, 2, 3, 4, 5, 5, 6, 6, 6, 5, 5, 4, 3, 2, 2 + ]; + divisor = 2044; + break; + default: + size = 3; + matrix = [ + 1, 2, 1, + 2, 4, 2, + 1, 2, 1 + ]; + divisor = 16; + break; + } + return this.ConvolutionFilter(srcImageData, size, size, matrix, divisor, 0, false); +}; + +/** + * Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com> + * @see http://incubator.quasimondo.com/processing/fast_blur_deluxe.php + */ +/* + Copyright (c) 2010 Mario Klingemann + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + */ +ImageFilters.StackBlur = (function () { + var mul_table = [ + 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512, + 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512, + 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456, + 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512, + 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328, + 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456, + 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335, + 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512, + 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405, + 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328, + 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271, + 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456, + 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388, + 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335, + 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292, + 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259]; + + + var shg_table = [ + 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, + 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24]; + + function BlurStack() { + this.r = 0; + this.g = 0; + this.b = 0; + this.a = 0; + this.next = null; + } + + return function (srcImageData, radius) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.Clone(srcImageData), + dstPixels = dstImageData.data; + + var x, y, i, p, yp, yi, yw, + r_sum, g_sum, b_sum, a_sum, + r_out_sum, g_out_sum, b_out_sum, a_out_sum, + r_in_sum, g_in_sum, b_in_sum, a_in_sum, + pr, pg, pb, pa, rbs, + div = radius + radius + 1, + w4 = srcWidth << 2, + widthMinus1 = srcWidth - 1, + heightMinus1 = srcHeight - 1, + radiusPlus1 = radius + 1, + sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2, + stackStart = new BlurStack(), + stack = stackStart, + stackIn, stackOut, stackEnd, + mul_sum = mul_table[radius], + shg_sum = shg_table[radius]; + + for (i = 1; i < div; i += 1) { + stack = stack.next = new BlurStack(); + if (i == radiusPlus1) { + stackEnd = stack; + } + } + + stack.next = stackStart; + yw = yi = 0; + + for (y = 0; y < srcHeight; y += 1) { + r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0; + + r_out_sum = radiusPlus1 * (pr = dstPixels[yi]); + g_out_sum = radiusPlus1 * (pg = dstPixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = dstPixels[yi + 2]); + a_out_sum = radiusPlus1 * (pa = dstPixels[yi + 3]); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + + stack = stackStart; + + for (i = 0; i < radiusPlus1; i += 1) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + + for (i = 1; i < radiusPlus1; i += 1) { + p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); + r_sum += (stack.r = (pr = dstPixels[p])) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = (pg = dstPixels[p + 1])) * rbs; + b_sum += (stack.b = (pb = dstPixels[p + 2])) * rbs; + a_sum += (stack.a = (pa = dstPixels[p + 3])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + + stack = stack.next; + } + + stackIn = stackStart; + stackOut = stackEnd; + + for (x = 0; x < srcWidth; x += 1) { + dstPixels[yi] = (r_sum * mul_sum) >> shg_sum; + dstPixels[yi + 1] = (g_sum * mul_sum) >> shg_sum; + dstPixels[yi + 2] = (b_sum * mul_sum) >> shg_sum; + dstPixels[yi + 3] = (a_sum * mul_sum) >> shg_sum; + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + + p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2; + + r_in_sum += (stackIn.r = dstPixels[p]); + g_in_sum += (stackIn.g = dstPixels[p + 1]); + b_in_sum += (stackIn.b = dstPixels[p + 2]); + a_in_sum += (stackIn.a = dstPixels[p + 3]); + + r_sum += r_in_sum; + g_sum += g_in_sum; + b_sum += b_in_sum; + a_sum += a_in_sum; + + stackIn = stackIn.next; + + r_out_sum += (pr = stackOut.r); + g_out_sum += (pg = stackOut.g); + b_out_sum += (pb = stackOut.b); + a_out_sum += (pa = stackOut.a); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + + stackOut = stackOut.next; + + yi += 4; + } + + yw += srcWidth; + } + + for (x = 0; x < srcWidth; x += 1) { + g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0; + + yi = x << 2; + r_out_sum = radiusPlus1 * (pr = dstPixels[yi]); + g_out_sum = radiusPlus1 * (pg = dstPixels[yi + 1]); + b_out_sum = radiusPlus1 * (pb = dstPixels[yi + 2]); + a_out_sum = radiusPlus1 * (pa = dstPixels[yi + 3]); + + r_sum += sumFactor * pr; + g_sum += sumFactor * pg; + b_sum += sumFactor * pb; + a_sum += sumFactor * pa; + + stack = stackStart; + + for (i = 0; i < radiusPlus1; i += 1) { + stack.r = pr; + stack.g = pg; + stack.b = pb; + stack.a = pa; + stack = stack.next; + } + + yp = srcWidth; + + for (i = 1; i <= radius; i += 1) { + yi = (yp + x) << 2; + + r_sum += (stack.r = (pr = dstPixels[yi])) * (rbs = radiusPlus1 - i); + g_sum += (stack.g = (pg = dstPixels[yi + 1])) * rbs; + b_sum += (stack.b = (pb = dstPixels[yi + 2])) * rbs; + a_sum += (stack.a = (pa = dstPixels[yi + 3])) * rbs; + + r_in_sum += pr; + g_in_sum += pg; + b_in_sum += pb; + a_in_sum += pa; + + stack = stack.next; + + if (i < heightMinus1) { + yp += srcWidth; + } + } + + yi = x; + stackIn = stackStart; + stackOut = stackEnd; + + for (y = 0; y < srcHeight; y += 1) { + p = yi << 2; + dstPixels[p] = (r_sum * mul_sum) >> shg_sum; + dstPixels[p + 1] = (g_sum * mul_sum) >> shg_sum; + dstPixels[p + 2] = (b_sum * mul_sum) >> shg_sum; + dstPixels[p + 3] = (a_sum * mul_sum) >> shg_sum; + + r_sum -= r_out_sum; + g_sum -= g_out_sum; + b_sum -= b_out_sum; + a_sum -= a_out_sum; + + r_out_sum -= stackIn.r; + g_out_sum -= stackIn.g; + b_out_sum -= stackIn.b; + a_out_sum -= stackIn.a; + + p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * srcWidth)) << 2; + + r_sum += (r_in_sum += (stackIn.r = dstPixels[p])); + g_sum += (g_in_sum += (stackIn.g = dstPixels[p + 1])); + b_sum += (b_in_sum += (stackIn.b = dstPixels[p + 2])); + a_sum += (a_in_sum += (stackIn.a = dstPixels[p + 3])); + + stackIn = stackIn.next; + + r_out_sum += (pr = stackOut.r); + g_out_sum += (pg = stackOut.g); + b_out_sum += (pb = stackOut.b); + a_out_sum += (pa = stackOut.a); + + r_in_sum -= pr; + g_in_sum -= pg; + b_in_sum -= pb; + a_in_sum -= pa; + + stackOut = stackOut.next; + + yi += srcWidth; + } + } + + return dstImageData; + } +}()); + +/** + * TV based algorithm + */ +ImageFilters.Brightness = function (srcImageData, brightness) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + value += brightness; + return (value > 255) ? 255 : value; + }); + + return dstImageData; +}; + +/** + * GIMP algorithm modified. pretty close to fireworks + * @param brightness -100 <= n <= 100 + * @param contrast -100 <= n <= 100 + */ +ImageFilters.BrightnessContrastGimp = function (srcImageData, brightness, contrast) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data, + p4 = Math.PI / 4; + + // fix to -1 <= n <= 1 + brightness /= 100; + + // fix to -99 <= n <= 99 + contrast *= 0.99; + // fix to -1 < n < 1 + contrast /= 100; + // apply GIMP formula + contrast = Math.tan((contrast + 1) * p4); + + // get the average color + for (var avg = 0, i = 0; i < srcLength; i += 4) { + avg += (srcPixels[i] * 19595 + srcPixels[i + 1] * 38470 + srcPixels[i + 2] * 7471) >> 16; + } + avg = avg / (srcLength / 4); + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + if (brightness < 0) { + value = value * (1 + brightness); + } else if (brightness > 0) { + value = value + ((255 - value) * brightness); + } + //value += brightness; + + if (contrast !== 0) { + value = (value - avg) * contrast + avg; + } + return value + 0.5 | 0; + }); + return dstImageData; +}; + +/** + * more like the new photoshop algorithm + * @param brightness -100 <= n <= 100 + * @param contrast -100 <= n <= 100 + */ +ImageFilters.BrightnessContrastPhotoshop = function (srcImageData, brightness, contrast) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + // fix to 0 <= n <= 2; + brightness = (brightness + 100) / 100; + contrast = (contrast + 100) / 100; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + value *= brightness; + value = (value - 127.5) * contrast + 127.5; + return value + 0.5 | 0; + }); + return dstImageData; +}; + +ImageFilters.Channels = function (srcImageData, channel) { + var matrix; + + switch (channel) { + case 2: // green + matrix = [ + 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, + 0, 1, 0, 0, 0, + 0, 0, 0, 1, 0 + ]; + break; + case 3: // blue + matrix = [ + 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, + 0, 0, 1, 0, 0, + 0, 0, 0, 1, 0 + ]; + break; + default: // red + matrix = [ + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 0, 0, 0, 1, 0 + ]; + break; + + } + + return this.ColorMatrixFilter(srcImageData, matrix); +}; + +ImageFilters.Clone = function (srcImageData) { + return this.Copy(srcImageData, this.utils.createImageData(srcImageData.width, srcImageData.height)); +}; + +/** + * slower + */ +ImageFilters.CloneBuiltin = function (srcImageData) { + var srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + canvas = this.utils.getSampleCanvas(), + context = this.utils.getSampleContext(), + dstImageData; + + canvas.width = srcWidth; + canvas.height = srcHeight; + + context.putImageData(srcImageData, 0, 0); + dstImageData = context.getImageData(0, 0, srcWidth, srcHeight); + + canvas.width = 0; + canvas.height = 0; + + return dstImageData; +}; + +ImageFilters.ColorMatrixFilter = function (srcImageData, matrix) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var m0 = matrix[0], + m1 = matrix[1], + m2 = matrix[2], + m3 = matrix[3], + m4 = matrix[4], + m5 = matrix[5], + m6 = matrix[6], + m7 = matrix[7], + m8 = matrix[8], + m9 = matrix[9], + m10 = matrix[10], + m11 = matrix[11], + m12 = matrix[12], + m13 = matrix[13], + m14 = matrix[14], + m15 = matrix[15], + m16 = matrix[16], + m17 = matrix[17], + m18 = matrix[18], + m19 = matrix[19]; + + var value, i, r, g, b, a; + for (i = 0; i < srcLength; i += 4) { + r = srcPixels[i]; + g = srcPixels[i + 1]; + b = srcPixels[i + 2]; + a = srcPixels[i + 3]; + + dstPixels[i] = (value = r * m0 + g * m1 + b * m2 + a * m3 + m4) > 255 ? 255 : value < 0 ? 0 : value | 0; + dstPixels[i + 1] = (value = r * m5 + g * m6 + b * m7 + a * m8 + m9) > 255 ? 255 : value < 0 ? 0 : value | 0; + dstPixels[i + 2] = (value = r * m10 + g * m11 + b * m12 + a * m13 + m14) > 255 ? 255 : value < 0 ? 0 : value | 0; + dstPixels[i + 3] = (value = r * m15 + g * m16 + b * m17 + a * m18 + m19) > 255 ? 255 : value < 0 ? 0 : value | 0; + } + + return dstImageData; +}; + +ImageFilters.ColorTransformFilter = function ( + srcImageData, redMultiplier, greenMultiplier, blueMultiplier, alphaMultiplier, + redOffset, greenOffset, blueOffset, alphaOffset) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var i, v; + for (i = 0; i < srcLength; i += 4) { + dstPixels[i] = (v = srcPixels[i] * redMultiplier + redOffset) > 255 ? 255 : v < 0 ? 0 : v; + dstPixels[i + 1] = (v = srcPixels[i + 1] * greenMultiplier + greenOffset) > 255 ? 255 : v < 0 ? 0 : v; + dstPixels[i + 2] = (v = srcPixels[i + 2] * blueMultiplier + blueOffset) > 255 ? 255 : v < 0 ? 0 : v; + dstPixels[i + 3] = (v = srcPixels[i + 3] * alphaMultiplier + alphaOffset) > 255 ? 255 : v < 0 ? 0 : v; + } + + return dstImageData; +}; + +ImageFilters.Copy = function (srcImageData, dstImageData) { + var srcPixels = srcImageData.data, + srcLength = srcPixels.length, + dstPixels = dstImageData.data; + + while (srcLength--) { + dstPixels[srcLength] = srcPixels[srcLength]; + } + + return dstImageData; +}; + +ImageFilters.Crop = function (srcImageData, x, y, width, height) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(width, height), + dstPixels = dstImageData.data; + + var srcLeft = Math.max(x, 0), + srcTop = Math.max(y, 0), + srcRight = Math.min(x + width, srcWidth), + srcBottom = Math.min(y + height, srcHeight), + dstLeft = srcLeft - x, + dstTop = srcTop - y, + srcRow, srcCol, srcIndex, dstIndex; + + for (srcRow = srcTop, dstRow = dstTop; srcRow < srcBottom; srcRow += 1, dstRow += 1) { + for (srcCol = srcLeft, dstCol = dstLeft; srcCol < srcRight; srcCol += 1, dstCol += 1) { + srcIndex = (srcRow * srcWidth + srcCol) << 2; + dstIndex = (dstRow * width + dstCol) << 2; + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + } + } + + return dstImageData; +}; + +ImageFilters.CropBuiltin = function (srcImageData, x, y, width, height) { + var srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + canvas = this.utils.getSampleCanvas(), + context = this.utils.getSampleContext(); + + canvas.width = srcWidth; + canvas.height = srcHeight; + context.putImageData(srcImageData, 0, 0); + var result = context.getImageData(x, y, width, height); + + canvas.width = 0; + canvas.height = 0; + + return result; +}; + +/** + * sets to the average of the highest and lowest contrast + */ +ImageFilters.Desaturate = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + for (var i = 0; i < srcLength; i += 4) { + var r = srcPixels[i], + g = srcPixels[i + 1], + b = srcPixels[i + 2], + max = (r > g) ? (r > b) ? r : b : (g > b) ? g : b, + min = (r < g) ? (r < b) ? r : b : (g < b) ? g : b, + avg = ((max + min) / 2) + 0.5 | 0; + + dstPixels[i] = dstPixels[i + 1] = dstPixels[i + 2] = avg; + dstPixels[i + 3] = srcPixels[i + 3]; + } + + return dstImageData; +}; + +ImageFilters.DisplacementMapFilter = function (srcImageData, mapImageData, mapX, mapY, componentX, componentY, scaleX, scaleY, mode) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = ImageFilters.Clone(srcImageData), + dstPixels = dstImageData.data; + + mapX || (mapX = 0); + mapY || (mapY = 0); + componentX || (componentX = 0); // red? + componentY || (componentY = 0); + scaleX || (scaleX = 0); + scaleY || (scaleY = 0); + mode || (mode = 2); // wrap + + var mapWidth = mapImageData.width, + mapHeight = mapImageData.height, + mapPixels = mapImageData.data, + mapRight = mapWidth + mapX, + mapBottom = mapHeight + mapY, + dstIndex, srcIndex, mapIndex, + cx, cy, tx, ty, x, y; + + for (x = 0; x < srcWidth; x += 1) { + for (y = 0; y < srcHeight; y += 1) { + + dstIndex = (y * srcWidth + x) << 2; + + if (x < mapX || y < mapY || x >= mapRight || y >= mapBottom) { + // out of the map bounds + // copy src to dst + srcIndex = dstIndex; + } else { + // apply map + mapIndex = ((y - mapY) * mapWidth + (x - mapX)) << 2; + + // tx = x + ((componentX(x, y) - 128) * scaleX) / 256 + cx = mapPixels[mapIndex + componentX]; + tx = x + (((cx - 128) * scaleX) >> 8); + + // tx = y + ((componentY(x, y) - 128) * scaleY) / 256 + cy = mapPixels[mapIndex + componentY]; + ty = y + (((cy - 128) * scaleY) >> 8); + + srcIndex = ImageFilters.utils.getPixelIndex(tx + 0.5 | 0, ty + 0.5 | 0, srcWidth, srcHeight, mode); + if (srcIndex === null) { + // if mode == ignore and (tx,ty) is out of src bounds + // then copy (x,y) to dst + srcIndex = dstIndex; + } + } + + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + } + } + + return dstImageData; +}; + +/** + * Floyd-Steinberg algorithm + * @param levels 2 <= n <= 255 + */ +ImageFilters.Dither = function (srcImageData, levels) { + var srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + dstImageData = this.Clone(srcImageData), + dstPixels = dstImageData.data; + + levels = levels < 2 ? 2 : levels > 255 ? 255 : levels; + + // Build a color map using the same algorithm as the posterize filter. + var posterize, + levelMap = [], + levelsMinus1 = levels - 1, + j = 0, + k = 0, + i; + + for (i = 0; i < levels; i += 1) { + levelMap[i] = (255 * i) / levelsMinus1; + } + + posterize = this.utils.buildMap(function (value) { + var ret = levelMap[j]; + + k += levels; + + if (k > 255) { + k -= 255; + j += 1; + } + + return ret; + }); + + // Apply the dithering algorithm to each pixel + var x, y, + index, + old_r, old_g, old_b, + new_r, new_g, new_b, + err_r, err_g, err_b, + nbr_r, nbr_g, nbr_b, + srcWidthMinus1 = srcWidth - 1, + srcHeightMinus1 = srcHeight - 1, + A = 7 / 16, + B = 3 / 16, + C = 5 / 16, + D = 1 / 16; + + for (y = 0; y < srcHeight; y += 1) { + for (x = 0; x < srcWidth; x += 1) { + // Get the current pixel. + index = (y * srcWidth + x) << 2; + + old_r = dstPixels[index]; + old_g = dstPixels[index + 1]; + old_b = dstPixels[index + 2]; + + // Quantize using the color map + new_r = posterize[old_r]; + new_g = posterize[old_g]; + new_b = posterize[old_b]; + + // Set the current pixel. + dstPixels[index] = new_r; + dstPixels[index + 1] = new_g; + dstPixels[index + 2] = new_b; + + // Quantization errors + err_r = old_r - new_r; + err_g = old_g - new_g; + err_b = old_b - new_b; + + // Apply the matrix. + // x + 1, y + index += 1 << 2; + if (x < srcWidthMinus1) { + nbr_r = dstPixels[index] + A * err_r; + nbr_g = dstPixels[index + 1] + A * err_g; + nbr_b = dstPixels[index + 2] + A * err_b; + + dstPixels[index] = nbr_r > 255 ? 255 : nbr_r < 0 ? 0 : nbr_r | 0; + dstPixels[index + 1] = nbr_g > 255 ? 255 : nbr_g < 0 ? 0 : nbr_g | 0; + dstPixels[index + 2] = nbr_b > 255 ? 255 : nbr_b < 0 ? 0 : nbr_b | 0; + } + + // x - 1, y + 1 + index += (srcWidth - 2) << 2; + if (x > 0 && y < srcHeightMinus1) { + nbr_r = dstPixels[index] + B * err_r; + nbr_g = dstPixels[index + 1] + B * err_g; + nbr_b = dstPixels[index + 2] + B * err_b; + + dstPixels[index] = nbr_r > 255 ? 255 : nbr_r < 0 ? 0 : nbr_r | 0; + dstPixels[index + 1] = nbr_g > 255 ? 255 : nbr_g < 0 ? 0 : nbr_g | 0; + dstPixels[index + 2] = nbr_b > 255 ? 255 : nbr_b < 0 ? 0 : nbr_b | 0; + } + + // x, y + 1 + index += 1 << 2; + if (y < srcHeightMinus1) { + nbr_r = dstPixels[index] + C * err_r; + nbr_g = dstPixels[index + 1] + C * err_g; + nbr_b = dstPixels[index + 2] + C * err_b; + + dstPixels[index] = nbr_r > 255 ? 255 : nbr_r < 0 ? 0 : nbr_r | 0; + dstPixels[index + 1] = nbr_g > 255 ? 255 : nbr_g < 0 ? 0 : nbr_g | 0; + dstPixels[index + 2] = nbr_b > 255 ? 255 : nbr_b < 0 ? 0 : nbr_b | 0; + } + + // x + 1, y + 1 + index += 1 << 2; + if (x < srcWidthMinus1 && y < srcHeightMinus1) { + nbr_r = dstPixels[index] + D * err_r; + nbr_g = dstPixels[index + 1] + D * err_g; + nbr_b = dstPixels[index + 2] + D * err_b; + + dstPixels[index] = nbr_r > 255 ? 255 : nbr_r < 0 ? 0 : nbr_r | 0; + dstPixels[index + 1] = nbr_g > 255 ? 255 : nbr_g < 0 ? 0 : nbr_g | 0; + dstPixels[index + 2] = nbr_b > 255 ? 255 : nbr_b < 0 ? 0 : nbr_b | 0; + } + } + } + + return dstImageData; +}; + +ImageFilters.Edge = function (srcImageData) { + //pretty close to Fireworks 'Find Edges' effect + return this.ConvolutionFilter(srcImageData, 3, 3, [ + -1, -1, -1, + -1, 8, -1, + -1, -1, -1 + ]); +}; + +ImageFilters.Emboss = function (srcImageData) { + return this.ConvolutionFilter(srcImageData, 3, 3, [ + -2, -1, 0, + -1, 1, 1, + 0, 1, 2 + ]); +}; + +ImageFilters.Enrich = function (srcImageData) { + return this.ConvolutionFilter(srcImageData, 3, 3, [ + 0, -2, 0, + -2, 20, -2, + 0, -2, 0 + ], 10, -40); +}; + +ImageFilters.Flip = function (srcImageData, vertical) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var x, y, srcIndex, dstIndex, i; + + for (y = 0; y < srcHeight; y += 1) { + for (x = 0; x < srcWidth; x += 1) { + srcIndex = (y * srcWidth + x) << 2; + if (vertical) { + dstIndex = ((srcHeight - y - 1) * srcWidth + x) << 2; + } else { + dstIndex = (y * srcWidth + (srcWidth - x - 1)) << 2; + } + + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + } + } + + return dstImageData; +}; + +ImageFilters.Gamma = function (srcImageData, gamma) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + value = (255 * Math.pow(value / 255, 1 / gamma) + 0.5); + return value > 255 ? 255 : value + 0.5 | 0; + }); + + return dstImageData; +}; + +ImageFilters.GrayScale = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + for (var i = 0; i < srcLength; i += 4) { + var intensity = (srcPixels[i] * 19595 + srcPixels[i + 1] * 38470 + srcPixels[i + 2] * 7471) >> 16; + //var intensity = (srcPixels[i] * 0.3086 + srcPixels[i + 1] * 0.6094 + srcPixels[i + 2] * 0.0820) | 0; + dstPixels[i] = dstPixels[i + 1] = dstPixels[i + 2] = intensity; + dstPixels[i + 3] = srcPixels[i + 3]; + } + + return dstImageData; +}; + +/** + * @param hueDelta -180 <= n <= 180 + * @param satDelta -100 <= n <= 100 + * @param lightness -100 <= n <= 100 + */ +ImageFilters.HSLAdjustment = function (srcImageData, hueDelta, satDelta, lightness) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + hueDelta /= 360; + satDelta /= 100; + lightness /= 100; + + var rgbToHsl = this.utils.rgbToHsl; + var hslToRgb = this.utils.hslToRgb; + var h, s, l, hsl, rgb, i; + + for (i = 0; i < srcLength; i += 4) { + // convert to HSL + hsl = rgbToHsl(srcPixels[i], srcPixels[i + 1], srcPixels[i + 2]); + + // hue + h = hsl[0] + hueDelta; + while (h < 0) { + h += 1; + } + while (h > 1) { + h -= 1; + } + + // saturation + s = hsl[1] + hsl[1] * satDelta; + if (s < 0) { + s = 0; + } else if (s > 1) { + s = 1; + } + + // lightness + l = hsl[2]; + if (lightness > 0) { + l += (1 - l) * lightness; + } else if (lightness < 0) { + l += l * lightness; + } + + // convert back to rgb + rgb = hslToRgb(h, s, l); + + dstPixels[i] = rgb[0]; + dstPixels[i + 1] = rgb[1]; + dstPixels[i + 2] = rgb[2]; + dstPixels[i + 3] = srcPixels[i + 3]; + } + + return dstImageData; +}; + +ImageFilters.Invert = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + return 255 - value; + }); + + return dstImageData; +}; + +ImageFilters.Mosaic = function (srcImageData, blockSize) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var cols = Math.ceil(srcWidth / blockSize), + rows = Math.ceil(srcHeight / blockSize), + row, col, + x_start, x_end, y_start, y_end, + x, y, yIndex, index, size, + r, g, b, a; + + for (row = 0; row < rows; row += 1) { + y_start = row * blockSize; + y_end = y_start + blockSize; + + if (y_end > srcHeight) { + y_end = srcHeight; + } + + for (col = 0; col < cols; col += 1) { + x_start = col * blockSize; + x_end = x_start + blockSize; + + if (x_end > srcWidth) { + x_end = srcWidth; + } + + // get the average color from the src + r = g = b = a = 0; + size = (x_end - x_start) * (y_end - y_start); + + for (y = y_start; y < y_end; y += 1) { + yIndex = y * srcWidth; + + for (x = x_start; x < x_end; x += 1) { + index = (yIndex + x) << 2; + r += srcPixels[index]; + g += srcPixels[index + 1]; + b += srcPixels[index + 2]; + a += srcPixels[index + 3]; + } + } + + r = (r / size) + 0.5 | 0; + g = (g / size) + 0.5 | 0; + b = (b / size) + 0.5 | 0; + a = (a / size) + 0.5 | 0; + + // fill the dst with that color + for (y = y_start; y < y_end; y += 1) { + yIndex = y * srcWidth; + + for (x = x_start; x < x_end; x += 1) { + index = (yIndex + x) << 2; + dstPixels[index] = r; + dstPixels[index + 1] = g; + dstPixels[index + 2] = b; + dstPixels[index + 3] = a; + } + } + } + } + + return dstImageData; +}; + +/** + * @param range 1 <= n <= 5 + * @param levels 1 <= n <= 256 + */ +ImageFilters.Oil = function (srcImageData, range, levels) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var index = 0, + rh = [], + gh = [], + bh = [], + rt = [], + gt = [], + bt = [], + x, y, i, row, col, + rowIndex, colIndex, offset, srcIndex, + sr, sg, sb, ri, gi, bi, + r, g, b; + + for (y = 0; y < srcHeight; y += 1) { + for (x = 0; x < srcWidth; x += 1) { + for (i = 0; i < levels; i += 1) { + rh[i] = gh[i] = bh[i] = rt[i] = gt[i] = bt[i] = 0; + } + + for (row = -range; row <= range; row += 1) { + rowIndex = y + row; + + if (rowIndex < 0 || rowIndex >= srcHeight) { + continue; + } + + offset = rowIndex * srcWidth; + + for (col = -range; col <= range; col += 1) { + colIndex = x + col; + if (colIndex < 0 || colIndex >= srcWidth) { + continue; + } + + srcIndex = (offset + colIndex) << 2; + sr = srcPixels[srcIndex]; + sg = srcPixels[srcIndex + 1]; + sb = srcPixels[srcIndex + 2]; + ri = (sr * levels) >> 8; + gi = (sg * levels) >> 8; + bi = (sb * levels) >> 8; + rt[ri] += sr; + gt[gi] += sg; + bt[bi] += sb; + rh[ri] += 1; + gh[gi] += 1; + bh[bi] += 1; + } + } + + r = g = b = 0; + for (i = 1; i < levels; i += 1) { + if (rh[i] > rh[r]) { + r = i; + } + if (gh[i] > gh[g]) { + g = i; + } + if (bh[i] > bh[b]) { + b = i; + } + } + + dstPixels[index] = rt[r] / rh[r] | 0; + dstPixels[index + 1] = gt[g] / gh[g] | 0; + dstPixels[index + 2] = bt[b] / bh[b] | 0; + dstPixels[index + 3] = srcPixels[index + 3]; + index += 4; + } + } + + return dstImageData; +}; + +ImageFilters.OpacityFilter = function (srcImageData, opacity) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + for (var i = 0; i < srcLength; i += 4) { + dstPixels[i] = srcPixels[i]; + dstPixels[i + 1] = srcPixels[i + 1]; + dstPixels[i + 2] = srcPixels[i + 2]; + dstPixels[i + 3] = opacity; + } + + return dstImageData; +}; + +/** + * @param levels 2 <= n <= 255 + */ +ImageFilters.Posterize = function (srcImageData, levels) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + levels = levels < 2 ? 2 : levels > 255 ? 255 : levels; + + var levelMap = [], + levelsMinus1 = levels - 1, + j = 0, + k = 0, + i; + + for (i = 0; i < levels; i += 1) { + levelMap[i] = (255 * i) / levelsMinus1; + } + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + var ret = levelMap[j]; + + k += levels; + + if (k > 255) { + k -= 255; + j += 1; + } + + return ret; + }); + + return dstImageData; +}; + +/** + * @param scale 0.0 <= n <= 5.0 + */ +ImageFilters.Rescale = function (srcImageData, scale) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + value *= scale; + return (value > 255) ? 255 : value + 0.5 | 0; + }); + + return dstImageData; +}; + +/** + * Nearest neighbor + */ +ImageFilters.ResizeNearestNeighbor = function (srcImageData, width, height) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(width, height), + dstPixels = dstImageData.data; + + var xFactor = srcWidth / width, + yFactor = srcHeight / height, + dstIndex = 0, srcIndex, + x, y, offset; + + for (y = 0; y < height; y += 1) { + offset = ((y * yFactor) | 0) * srcWidth; + + for (x = 0; x < width; x += 1) { + srcIndex = (offset + x * xFactor) << 2; + + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + dstIndex += 4; + } + } + + return dstImageData; +}; + +/** + * Bilinear + */ +ImageFilters.Resize = function (srcImageData, width, height) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(width, height), + dstPixels = dstImageData.data; + + var xFactor = srcWidth / width, + yFactor = srcHeight / height, + dstIndex = 0, + x, y; + + for (y = 0; y < height; y += 1) { + for (x = 0; x < width; x += 1) { + this.utils.copyBilinear(srcPixels, x * xFactor, y * yFactor, srcWidth, srcHeight, dstPixels, dstIndex, 0); + dstIndex += 4; + } + } + + return dstImageData; +}; + + +/** + * faster resizing using the builtin context.scale() + * the resizing algorithm may be different between browsers + * this might not work if the image is transparent. + * to fix that we probably need two contexts + */ +ImageFilters.ResizeBuiltin = function (srcImageData, width, height) { + var srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + canvas = this.utils.getSampleCanvas(), + context = this.utils.getSampleContext(), + dstImageData; + + canvas.width = Math.max(srcWidth, width); + canvas.height = Math.max(srcHeight, height); + context.save(); + + context.putImageData(srcImageData, 0, 0); + context.scale(width / srcWidth, height / srcHeight); + context.drawImage(canvas, 0, 0); + + dstImageData = context.getImageData(0, 0, width, height); + + context.restore(); + canvas.width = 0; + canvas.height = 0; + + return dstImageData; +}; + +ImageFilters.Sepia = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + var r, g, b, i, value; + + for (i = 0; i < srcLength; i += 4) { + r = srcPixels[i]; + g = srcPixels[i + 1]; + b = srcPixels[i + 2]; + + dstPixels[i] = (value = r * 0.393 + g * 0.769 + b * 0.189) > 255 ? 255 : value < 0 ? 0 : value + 0.5 | 0; + dstPixels[i + 1] = (value = r * 0.349 + g * 0.686 + b * 0.168) > 255 ? 255 : value < 0 ? 0 : value + 0.5 | 0; + dstPixels[i + 2] = (value = r * 0.272 + g * 0.534 + b * 0.131) > 255 ? 255 : value < 0 ? 0 : value + 0.5 | 0; + dstPixels[i + 3] = srcPixels[i + 3]; + } + + return dstImageData; +}; + +/** + * @param factor 1 <= n + */ +ImageFilters.Sharpen = function (srcImageData, factor) { + //Convolution formula from VIGRA + return this.ConvolutionFilter(srcImageData, 3, 3, [ + -factor / 16, -factor / 8, -factor / 16, + -factor / 8, factor * 0.75 + 1, -factor / 8, + -factor / 16, -factor / 8, -factor / 16 + ]); +}; + +ImageFilters.Solarize = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + this.utils.mapRGB(srcPixels, dstPixels, function (value) { + return value > 127 ? (value - 127.5) * 2 : (127.5 - value) * 2; + }); + + return dstImageData; +}; + +ImageFilters.Transpose = function (srcImageData) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcHeight, srcWidth), + dstPixels = dstImageData.data; + + var srcIndex, dstIndex; + + for (y = 0; y < srcHeight; y += 1) { + for (x = 0; x < srcWidth; x += 1) { + srcIndex = (y * srcWidth + x) << 2; + dstIndex = (x * srcHeight + y) << 2; + + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + } + } + + return dstImageData; +}; + +/** + * @param centerX 0.0 <= n <= 1.0 + * @param centerY 0.0 <= n <= 1.0 + * @param radius + * @param angle(degree) + * @param smooth + */ +ImageFilters.Twril = function (srcImageData, centerX, centerY, radius, angle, edge, smooth) { + var srcPixels = srcImageData.data, + srcWidth = srcImageData.width, + srcHeight = srcImageData.height, + srcLength = srcPixels.length, + dstImageData = this.utils.createImageData(srcWidth, srcHeight), + dstPixels = dstImageData.data; + + //convert position to px + centerX = srcWidth * centerX; + centerY = srcHeight * centerY; + + // degree to radian + angle *= (Math.PI / 180); + + var radius2 = radius * radius, + max_y = srcHeight - 1, + max_x = srcWidth - 1, + dstIndex = 0, + x, y, dx, dy, distance, a, tx, ty, srcIndex, pixel, i; + + for (y = 0; y < srcHeight; y += 1) { + for (x = 0; x < srcWidth; x += 1) { + dx = x - centerX; + dy = y - centerY; + distance = dx * dx + dy * dy; + + if (distance > radius2) { + // out of the effected area. just copy the pixel + dstPixels[dstIndex] = srcPixels[dstIndex]; + dstPixels[dstIndex + 1] = srcPixels[dstIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[dstIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[dstIndex + 3]; + } else { + // main formula + distance = Math.sqrt(distance); + a = Math.atan2(dy, dx) + (angle * (radius - distance)) / radius; + tx = centerX + distance * Math.cos(a); + ty = centerY + distance * Math.sin(a); + + // copy target pixel + if (smooth) { + // bilinear + this.utils.copyBilinear(srcPixels, tx, ty, srcWidth, srcHeight, dstPixels, dstIndex, edge); + } else { + // nearest neighbor + // round tx, ty + srcIndex = ((ty + 0.5 | 0) * srcWidth + (tx + 0.5 | 0)) << 2; + dstPixels[dstIndex] = srcPixels[srcIndex]; + dstPixels[dstIndex + 1] = srcPixels[srcIndex + 1]; + dstPixels[dstIndex + 2] = srcPixels[srcIndex + 2]; + dstPixels[dstIndex + 3] = srcPixels[srcIndex + 3]; + } + } + + dstIndex += 4; + } + } + + return dstImageData; +}; + diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.xml new file mode 100644 index 00000000000..e1fb52a78c4 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>imagefilters.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.js new file mode 100644 index 00000000000..9c31af83efb --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.js @@ -0,0 +1,4 @@ +//about - A Javascript Image filter library for the HTML5 Canvas tag. +//author - https://github.com/arahaya/ImageFilters.js +//demo - http://www.arahaya.com/imagefilters/ +var ImageFilters={};ImageFilters.utils={initSampleCanvas:function(){var t=document.createElement("canvas"),a=t.getContext("2d");t.width=0,t.height=0,this.getSampleCanvas=function(){return t},this.getSampleContext=function(){return a},this.createImageData=a.createImageData?function(t,e){return a.createImageData(t,e)}:function(t,a){return new ImageData(t,a)}},getSampleCanvas:function(){return this.initSampleCanvas(),this.getSampleCanvas()},getSampleContext:function(){return this.initSampleCanvas(),this.getSampleContext()},createImageData:function(t,a){return this.initSampleCanvas(),this.createImageData(t,a)},clamp:function(t){return t>255?255:0>t?0:t},buildMap:function(t){for(var a,e=[],i=0;256>i;i+=1)e[i]=(a=t(i))>255?255:0>a?0:0|a;return e},applyMap:function(t,a,e){for(var i=0,r=t.length;r>i;i+=4)a[i]=e[t[i]],a[i+1]=e[t[i+1]],a[i+2]=e[t[i+2]],a[i+3]=t[i+3]},mapRGB:function(t,a,e){this.applyMap(t,a,this.buildMap(e))},getPixelIndex:function(t,a,e,i,r){if(0>t||t>=e||0>a||a>=i)switch(r){case 1:t=0>t?0:t>=e?e-1:t,a=0>a?0:a>=i?i-1:a;break;case 2:t=(t%=e)<0?t+e:t,a=(a%=i)<0?a+i:a;break;default:return null}return a*e+t<<2},getPixel:function(t,a,e,i,r,n){if(0>a||a>=i||0>e||e>=r)switch(n){case 1:a=0>a?0:a>=i?i-1:a,e=0>e?0:e>=r?r-1:e;break;case 2:a=(a%=i)<0?a+i:a,e=(e%=r)<0?e+r:e;break;default:return 0}var h=e*i+a<<2;return t[h+3]<<24|t[h]<<16|t[h+1]<<8|t[h+2]},getPixelByIndex:function(t,a){return t[a+3]<<24|t[a]<<16|t[a+1]<<8|t[a+2]},copyBilinear:function(t,a,e,i,r,n,h,s){var l,u,o,g,f,c,d,m=0>a?a-1|0:0|a,I=0>e?e-1|0:0|e,v=a-m,F=e-I,p=0,w=0,D=0,x=0;if(m>=0&&i-1>m&&I>=0&&r-1>I){if(l=I*i+m<<2,!v&&!F)return n[h]=t[l],n[h+1]=t[l+1],n[h+2]=t[l+2],void(n[h+3]=t[l+3]);p=t[l+3]<<24|t[l]<<16|t[l+1]<<8|t[l+2],l+=4,w=t[l+3]<<24|t[l]<<16|t[l+1]<<8|t[l+2],l=l-8+(i<<2),D=t[l+3]<<24|t[l]<<16|t[l+1]<<8|t[l+2],l+=4,x=t[l+3]<<24|t[l]<<16|t[l+1]<<8|t[l+2]}else{if(p=this.getPixel(t,m,I,i,r,s),!v&&!F)return n[h]=p>>16&255,n[h+1]=p>>8&255,n[h+2]=255&p,void(n[h+3]=p>>24&255);w=this.getPixel(t,m+1,I,i,r,s),D=this.getPixel(t,m,I+1,i,r,s),x=this.getPixel(t,m+1,I+1,i,r,s)}u=1-v,o=1-F,g=((p>>16&255)*u+(w>>16&255)*v)*o+((D>>16&255)*u+(x>>16&255)*v)*F,f=((p>>8&255)*u+(w>>8&255)*v)*o+((D>>8&255)*u+(x>>8&255)*v)*F,c=((255&p)*u+(255&w)*v)*o+((255&D)*u+(255&x)*v)*F,d=((p>>24&255)*u+(w>>24&255)*v)*o+((D>>24&255)*u+(x>>24&255)*v)*F,n[h]=g>255?255:0>g?0:0|g,n[h+1]=f>255?255:0>f?0:0|f,n[h+2]=c>255?255:0>c?0:0|c,n[h+3]=d>255?255:0>d?0:0|d},rgbToHsl:function(t,a,e){t/=255,a/=255,e/=255;var i=t>a?t>e?t:e:a>e?a:e,r=a>t?e>t?t:e:e>a?a:e,n=i-r,h=0,s=0,l=(r+i)/2;return 0!==n&&(h=t===i?(a-e)/n+(e>a?6:0):a===i?(e-t)/n+2:(t-a)/n+4,h/=6,s=l>.5?n/(2-i-r):n/(i+r)),[h,s,l]},hslToRgb:function(t,a,e){var i,r,n,h,s,l,u=[];if(0===a)h=s=l=255*e+.5|0,u=[h,s,l];else{r=.5>=e?e*(a+1):e+a-e*a,i=2*e-r,n=t+1/3;for(var o,g=0;3>g;g+=1)0>n?n+=1:n>1&&(n-=1),o=1>6*n?i+(r-i)*n*6:1>2*n?r:2>3*n?i+(r-i)*(2/3-n)*6:i,u[g]=255*o+.5|0,n-=1/3}return u}},ImageFilters.Translate=function(t,a,e,i){},ImageFilters.Scale=function(t,a,e,i){},ImageFilters.Rotate=function(t,a,e,i,r,n){},ImageFilters.Affine=function(t,a,e,i){},ImageFilters.UnsharpMask=function(t,a){},ImageFilters.ConvolutionFilter=function(t,a,e,i,r,n,h,s,l,u){var o=t.data,g=t.width,f=t.height,c=(o.length,this.utils.createImageData(g,f)),d=c.data;r=r||1,n=n||0,h!==!1&&(h=!0),s!==!1&&(s=!0),l=l||0,u=u||0;for(var m=0,I=a>>1,v=e>>1,F=l>>16&255,p=l>>8&255,w=255&l,D=255*u,x=0;f>x;x+=1)for(var C=0;g>C;C+=1,m+=4){for(var b,B=0,M=0,S=0,R=0,y=!1,G=0,P=-I;I>=P;P+=1){var k,T=x+P;T>=0&&f>T?k=T*g:s?k=x*g:y=!0;for(var z=-v;v>=z;z+=1){var E=i[G++];if(0!==E){var N=C+z;if(N>=0&&g>N||(s?N=C:y=!0),y)B+=E*F,M+=E*p,S+=E*w,R+=E*D;else{var A=k+N<<2;B+=E*o[A],M+=E*o[A+1],S+=E*o[A+2],R+=E*o[A+3]}}}}d[m]=(b=B/r+n)>255?255:0>b?0:0|b,d[m+1]=(b=M/r+n)>255?255:0>b?0:0|b,d[m+2]=(b=S/r+n)>255?255:0>b?0:0|b,d[m+3]=h?o[m+3]:(b=R/r+n)>255?255:0>b?0:0|b}return c},ImageFilters.Binarize=function(t,a){var e=t.data,i=t.width,r=t.height,n=e.length,h=this.utils.createImageData(i,r),s=h.data;isNaN(a)&&(a=.5),a*=255;for(var l=0;n>l;l+=4){var u=e[l]+e[l+1]+e[l+2]/3;s[l]=s[l+1]=s[l+2]=a>=u?0:255,s[l+3]=255}return h},ImageFilters.BlendAdd=function(t,a,e,i){for(var r,n=t.data,h=t.width,s=t.height,l=n.length,u=this.utils.createImageData(h,s),o=u.data,g=a.data,f=0;l>f;f+=4)o[f]=(r=n[f]+g[f])>255?255:r,o[f+1]=(r=n[f+1]+g[f+1])>255?255:r,o[f+2]=(r=n[f+2]+g[f+2])>255?255:r,o[f+3]=255;return u},ImageFilters.BlendSubtract=function(t,a,e,i){for(var r,n=t.data,h=t.width,s=t.height,l=n.length,u=this.utils.createImageData(h,s),o=u.data,g=a.data,f=0;l>f;f+=4)o[f]=(r=n[f]-g[f])<0?0:r,o[f+1]=(r=n[f+1]-g[f+1])<0?0:r,o[f+2]=(r=n[f+2]-g[f+2])<0?0:r,o[f+3]=255;return u},ImageFilters.BoxBlur=function(){var t=function(t,a,e,i,r){var n,h,s,l,u,o,g,f,c,d,m,I,v,F,p=2*r+1,w=r+1,D=e-1,x=0,C=[];for(c=0,d=256*p;d>c;c+=1)C[c]=c/p|0;for(I=0;i>I;I+=1){for(n=h=s=l=0,u=I,o=x<<2,n+=w*t[o],h+=w*t[o+1],s+=w*t[o+2],l+=w*t[o+3],c=1;r>=c;c+=1)o=x+(e>c?c:D)<<2,n+=t[o],h+=t[o+1],s+=t[o+2],l+=t[o+3];for(m=0;e>m;m+=1)o=u<<2,a[o]=C[n],a[o+1]=C[h],a[o+2]=C[s],a[o+3]=C[l],v=m+w,v>D&&(v=D),F=m-r,0>F&&(F=0),g=x+v<<2,f=x+F<<2,n+=t[g]-t[f],h+=t[g+1]-t[f+1],s+=t[g+2]-t[f+2],l+=t[g+3]-t[f+3],u+=i;x+=e}};return function(a,e,i,r){for(var n=a.data,h=a.width,s=a.height,l=(n.length,this.utils.createImageData(h,s)),u=l.data,o=this.utils.createImageData(h,s),g=o.data,f=0;r>f;f+=1)t(f?u:n,g,h,s,e),t(g,u,s,h,i);return l}}(),ImageFilters.GaussianBlur=function(t,a){var e,i,r;switch(a){case 2:e=5,i=[1,1,2,1,1,1,2,4,2,1,2,4,8,4,2,1,2,4,2,1,1,1,2,1,1],r=52;break;case 3:e=7,i=[1,1,2,2,2,1,1,1,2,2,4,2,2,1,2,2,4,8,4,2,2,2,4,8,16,8,4,2,2,2,4,8,4,2,2,1,2,2,4,2,2,1,1,1,2,2,2,1,1],r=140;break;case 4:e=15,i=[2,2,3,4,5,5,6,6,6,5,5,4,3,2,2,2,3,4,5,7,7,8,8,8,7,7,5,4,3,2,3,4,6,7,9,10,10,11,10,10,9,7,6,4,3,4,5,7,9,10,12,13,13,13,12,10,9,7,5,4,5,7,9,11,13,14,15,16,15,14,13,11,9,7,5,5,7,10,12,14,16,17,18,17,16,14,12,10,7,5,6,8,10,13,15,17,19,19,19,17,15,13,10,8,6,6,8,11,13,16,18,19,20,19,18,16,13,11,8,6,6,8,10,13,15,17,19,19,19,17,15,13,10,8,6,5,7,10,12,14,16,17,18,17,16,14,12,10,7,5,5,7,9,11,13,14,15,16,15,14,13,11,9,7,5,4,5,7,9,10,12,13,13,13,12,10,9,7,5,4,3,4,6,7,9,10,10,11,10,10,9,7,6,4,3,2,3,4,5,7,7,8,8,8,7,7,5,4,3,2,2,2,3,4,5,5,6,6,6,5,5,4,3,2,2],r=2044;break;default:e=3,i=[1,2,1,2,4,2,1,2,1],r=16}return this.ConvolutionFilter(t,e,e,i,r,0,!1)},ImageFilters.StackBlur=function(){function t(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}var a=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],e=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];return function(i,r){var n,h,s,l,u,o,g,f,c,d,m,I,v,F,p,w,D,x,C,b,B,M,S,R,y,G,P,k=i.data,T=i.width,z=i.height,E=(k.length,this.Clone(i)),N=E.data,A=r+r+1,H=T-1,O=z-1,j=r+1,q=j*(j+1)/2,L=new t,U=L,J=a[r],K=e[r];for(s=1;A>s;s+=1)U=U.next=new t,s==j&&(P=U);for(U.next=L,g=o=0,h=0;z>h;h+=1){for(w=D=x=C=f=c=d=m=0,I=j*(b=N[o]),v=j*(B=N[o+1]),F=j*(M=N[o+2]),p=j*(S=N[o+3]),f+=q*b,c+=q*B,d+=q*M,m+=q*S,U=L,s=0;j>s;s+=1)U.r=b,U.g=B,U.b=M,U.a=S,U=U.next;for(s=1;j>s;s+=1)l=o+((s>H?H:s)<<2),f+=(U.r=b=N[l])*(R=j-s),c+=(U.g=B=N[l+1])*R,d+=(U.b=M=N[l+2])*R,m+=(U.a=S=N[l+3])*R,w+=b,D+=B,x+=M,C+=S,U=U.next;for(y=L,G=P,n=0;T>n;n+=1)N[o]=f*J>>K,N[o+1]=c*J>>K,N[o+2]=d*J>>K,N[o+3]=m*J>>K,f-=I,c-=v,d-=F,m-=p,I-=y.r,v-=y.g,F-=y.b,p-=y.a,l=g+((l=n+r+1)<H?l:H)<<2,w+=y.r=N[l],D+=y.g=N[l+1],x+=y.b=N[l+2],C+=y.a=N[l+3],f+=w,c+=D,d+=x,m+=C,y=y.next,I+=b=G.r,v+=B=G.g,F+=M=G.b,p+=S=G.a,w-=b,D-=B,x-=M,C-=S,G=G.next,o+=4;g+=T}for(n=0;T>n;n+=1){for(D=x=C=w=c=d=m=f=0,o=n<<2,I=j*(b=N[o]),v=j*(B=N[o+1]),F=j*(M=N[o+2]),p=j*(S=N[o+3]),f+=q*b,c+=q*B,d+=q*M,m+=q*S,U=L,s=0;j>s;s+=1)U.r=b,U.g=B,U.b=M,U.a=S,U=U.next;for(u=T,s=1;r>=s;s+=1)o=u+n<<2,f+=(U.r=b=N[o])*(R=j-s),c+=(U.g=B=N[o+1])*R,d+=(U.b=M=N[o+2])*R,m+=(U.a=S=N[o+3])*R,w+=b,D+=B,x+=M,C+=S,U=U.next,O>s&&(u+=T);for(o=n,y=L,G=P,h=0;z>h;h+=1)l=o<<2,N[l]=f*J>>K,N[l+1]=c*J>>K,N[l+2]=d*J>>K,N[l+3]=m*J>>K,f-=I,c-=v,d-=F,m-=p,I-=y.r,v-=y.g,F-=y.b,p-=y.a,l=n+((l=h+j)<O?l:O)*T<<2,f+=w+=y.r=N[l],c+=D+=y.g=N[l+1],d+=x+=y.b=N[l+2],m+=C+=y.a=N[l+3],y=y.next,I+=b=G.r,v+=B=G.g,F+=M=G.b,p+=S=G.a,w-=b,D-=B,x-=M,C-=S,G=G.next,o+=T}return E}}(),ImageFilters.Brightness=function(t,a){var e=t.data,i=t.width,r=t.height,n=(e.length,this.utils.createImageData(i,r)),h=n.data;return this.utils.mapRGB(e,h,function(t){return t+=a,t>255?255:t}),n},ImageFilters.BrightnessContrastGimp=function(t,a,e){var i=t.data,r=t.width,n=t.height,h=i.length,s=this.utils.createImageData(r,n),l=s.data,u=Math.PI/4;a/=100,e*=.99,e/=100,e=Math.tan((e+1)*u);for(var o=0,g=0;h>g;g+=4)o+=19595*i[g]+38470*i[g+1]+7471*i[g+2]>>16;return o/=h/4,this.utils.mapRGB(i,l,function(t){return 0>a?t*=1+a:a>0&&(t+=(255-t)*a),0!==e&&(t=(t-o)*e+o),t+.5|0}),s},ImageFilters.BrightnessContrastPhotoshop=function(t,a,e){var i=t.data,r=t.width,n=t.height,h=(i.length,this.utils.createImageData(r,n)),s=h.data;return a=(a+100)/100,e=(e+100)/100,this.utils.mapRGB(i,s,function(t){return t*=a,t=(t-127.5)*e+127.5,t+.5|0}),h},ImageFilters.Channels=function(t,a){var e;switch(a){case 2:e=[0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0];break;case 3:e=[0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0];break;default:e=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0]}return this.ColorMatrixFilter(t,e)},ImageFilters.Clone=function(t){return this.Copy(t,this.utils.createImageData(t.width,t.height))},ImageFilters.CloneBuiltin=function(t){var a,e=t.width,i=t.height,r=this.utils.getSampleCanvas(),n=this.utils.getSampleContext();return r.width=e,r.height=i,n.putImageData(t,0,0),a=n.getImageData(0,0,e,i),r.width=0,r.height=0,a},ImageFilters.ColorMatrixFilter=function(t,a){var e,i,r,n,h,s,l=t.data,u=t.width,o=t.height,g=l.length,f=this.utils.createImageData(u,o),c=f.data,d=a[0],m=a[1],I=a[2],v=a[3],F=a[4],p=a[5],w=a[6],D=a[7],x=a[8],C=a[9],b=a[10],B=a[11],M=a[12],S=a[13],R=a[14],y=a[15],G=a[16],P=a[17],k=a[18],T=a[19];for(i=0;g>i;i+=4)r=l[i],n=l[i+1],h=l[i+2],s=l[i+3],c[i]=(e=r*d+n*m+h*I+s*v+F)>255?255:0>e?0:0|e,c[i+1]=(e=r*p+n*w+h*D+s*x+C)>255?255:0>e?0:0|e,c[i+2]=(e=r*b+n*B+h*M+s*S+R)>255?255:0>e?0:0|e,c[i+3]=(e=r*y+n*G+h*P+s*k+T)>255?255:0>e?0:0|e;return f},ImageFilters.ColorTransformFilter=function(t,a,e,i,r,n,h,s,l){var u,o,g=t.data,f=t.width,c=t.height,d=g.length,m=this.utils.createImageData(f,c),I=m.data;for(u=0;d>u;u+=4)I[u]=(o=g[u]*a+n)>255?255:0>o?0:o,I[u+1]=(o=g[u+1]*e+h)>255?255:0>o?0:o,I[u+2]=(o=g[u+2]*i+s)>255?255:0>o?0:o,I[u+3]=(o=g[u+3]*r+l)>255?255:0>o?0:o;return m},ImageFilters.Copy=function(t,a){for(var e=t.data,i=e.length,r=a.data;i--;)r[i]=e[i];return a},ImageFilters.Crop=function(t,a,e,i,r){var n,h,s,l,u=t.data,o=t.width,g=t.height,f=(u.length,this.utils.createImageData(i,r)),c=f.data,d=Math.max(a,0),m=Math.max(e,0),I=Math.min(a+i,o),v=Math.min(e+r,g),F=d-a,p=m-e;for(n=m,dstRow=p;v>n;n+=1,dstRow+=1)for(h=d,dstCol=F;I>h;h+=1,dstCol+=1)s=n*o+h<<2,l=dstRow*i+dstCol<<2,c[l]=u[s],c[l+1]=u[s+1],c[l+2]=u[s+2],c[l+3]=u[s+3];return f},ImageFilters.CropBuiltin=function(t,a,e,i,r){var n=t.width,h=t.height,s=this.utils.getSampleCanvas(),l=this.utils.getSampleContext();s.width=n,s.height=h,l.putImageData(t,0,0);var u=l.getImageData(a,e,i,r);return s.width=0,s.height=0,u},ImageFilters.Desaturate=function(t){for(var a=t.data,e=t.width,i=t.height,r=a.length,n=this.utils.createImageData(e,i),h=n.data,s=0;r>s;s+=4){var l=a[s],u=a[s+1],o=a[s+2],g=l>u?l>o?l:o:u>o?u:o,f=u>l?o>l?l:o:o>u?u:o,c=(g+f)/2+.5|0;h[s]=h[s+1]=h[s+2]=c,h[s+3]=a[s+3]}return n},ImageFilters.DisplacementMapFilter=function(t,a,e,i,r,n,h,s,l){var u=t.data,o=t.width,g=t.height,f=(u.length,ImageFilters.Clone(t)),c=f.data;e||(e=0),i||(i=0),r||(r=0),n||(n=0),h||(h=0),s||(s=0),l||(l=2);var d,m,I,v,F,p,w,D,x,C=a.width,b=a.height,B=a.data,M=C+e,S=b+i;for(D=0;o>D;D+=1)for(x=0;g>x;x+=1)d=x*o+D<<2,e>D||i>x||D>=M||x>=S?m=d:(I=(x-i)*C+(D-e)<<2,v=B[I+r],p=D+((v-128)*h>>8),F=B[I+n],w=x+((F-128)*s>>8),m=ImageFilters.utils.getPixelIndex(p+.5|0,w+.5|0,o,g,l),null===m&&(m=d)),c[d]=u[m],c[d+1]=u[m+1],c[d+2]=u[m+2],c[d+3]=u[m+3];return f},ImageFilters.Dither=function(t,a){var e=t.width,i=t.height,r=this.Clone(t),n=r.data;a=2>a?2:a>255?255:a;var h,s,l=[],u=a-1,o=0,g=0;for(s=0;a>s;s+=1)l[s]=255*s/u;h=this.utils.buildMap(function(t){var e=l[o];return g+=a,g>255&&(g-=255,o+=1),e});var f,c,d,m,I,v,F,p,w,D,x,C,b,B,M,S=e-1,R=i-1,y=7/16,G=3/16,P=5/16,k=1/16;for(c=0;i>c;c+=1)for(f=0;e>f;f+=1)d=c*e+f<<2,m=n[d],I=n[d+1],v=n[d+2],F=h[m],p=h[I],w=h[v],n[d]=F,n[d+1]=p,n[d+2]=w,D=m-F,x=I-p,C=v-w,d+=4,S>f&&(b=n[d]+y*D,B=n[d+1]+y*x,M=n[d+2]+y*C,n[d]=b>255?255:0>b?0:0|b,n[d+1]=B>255?255:0>B?0:0|B,n[d+2]=M>255?255:0>M?0:0|M),d+=e-2<<2,f>0&&R>c&&(b=n[d]+G*D,B=n[d+1]+G*x,M=n[d+2]+G*C,n[d]=b>255?255:0>b?0:0|b,n[d+1]=B>255?255:0>B?0:0|B,n[d+2]=M>255?255:0>M?0:0|M),d+=4,R>c&&(b=n[d]+P*D,B=n[d+1]+P*x,M=n[d+2]+P*C,n[d]=b>255?255:0>b?0:0|b,n[d+1]=B>255?255:0>B?0:0|B,n[d+2]=M>255?255:0>M?0:0|M),d+=4,S>f&&R>c&&(b=n[d]+k*D,B=n[d+1]+k*x,M=n[d+2]+k*C,n[d]=b>255?255:0>b?0:0|b,n[d+1]=B>255?255:0>B?0:0|B,n[d+2]=M>255?255:0>M?0:0|M);return r},ImageFilters.Edge=function(t){return this.ConvolutionFilter(t,3,3,[-1,-1,-1,-1,8,-1,-1,-1,-1])},ImageFilters.Emboss=function(t){return this.ConvolutionFilter(t,3,3,[-2,-1,0,-1,1,1,0,1,2])},ImageFilters.Enrich=function(t){return this.ConvolutionFilter(t,3,3,[0,-2,0,-2,20,-2,0,-2,0],10,-40)},ImageFilters.Flip=function(t,a){var e,i,r,n,h=t.data,s=t.width,l=t.height,u=(h.length,this.utils.createImageData(s,l)),o=u.data;for(i=0;l>i;i+=1)for(e=0;s>e;e+=1)r=i*s+e<<2,n=a?(l-i-1)*s+e<<2:i*s+(s-e-1)<<2,o[n]=h[r],o[n+1]=h[r+1],o[n+2]=h[r+2],o[n+3]=h[r+3];return u},ImageFilters.Gamma=function(t,a){var e=t.data,i=t.width,r=t.height,n=(e.length,this.utils.createImageData(i,r)),h=n.data;return this.utils.mapRGB(e,h,function(t){return t=255*Math.pow(t/255,1/a)+.5,t>255?255:t+.5|0}),n},ImageFilters.GrayScale=function(t){for(var a=t.data,e=t.width,i=t.height,r=a.length,n=this.utils.createImageData(e,i),h=n.data,s=0;r>s;s+=4){var l=19595*a[s]+38470*a[s+1]+7471*a[s+2]>>16;h[s]=h[s+1]=h[s+2]=l,h[s+3]=a[s+3]}return n},ImageFilters.HSLAdjustment=function(t,a,e,i){var r=t.data,n=t.width,h=t.height,s=r.length,l=this.utils.createImageData(n,h),u=l.data;a/=360,e/=100,i/=100;var o,g,f,c,d,m,I=this.utils.rgbToHsl,v=this.utils.hslToRgb;for(m=0;s>m;m+=4){for(c=I(r[m],r[m+1],r[m+2]),o=c[0]+a;0>o;)o+=1;for(;o>1;)o-=1;g=c[1]+c[1]*e,0>g?g=0:g>1&&(g=1),f=c[2],i>0?f+=(1-f)*i:0>i&&(f+=f*i),d=v(o,g,f),u[m]=d[0],u[m+1]=d[1],u[m+2]=d[2],u[m+3]=r[m+3]}return l},ImageFilters.Invert=function(t){var a=t.data,e=t.width,i=t.height,r=(a.length,this.utils.createImageData(e,i)),n=r.data;return this.utils.mapRGB(a,n,function(t){return 255-t}),r},ImageFilters.Mosaic=function(t,a){var e,i,r,n,h,s,l,u,o,g,f,c,d,m,I,v=t.data,F=t.width,p=t.height,w=(v.length,this.utils.createImageData(F,p)),D=w.data,x=Math.ceil(F/a),C=Math.ceil(p/a);for(e=0;C>e;e+=1)for(h=e*a,s=h+a,s>p&&(s=p),i=0;x>i;i+=1){for(r=i*a,n=r+a,n>F&&(n=F),c=d=m=I=0,f=(n-r)*(s-h),u=h;s>u;u+=1)for(o=u*F,l=r;n>l;l+=1)g=o+l<<2,c+=v[g],d+=v[g+1],m+=v[g+2],I+=v[g+3];for(c=c/f+.5|0,d=d/f+.5|0,m=m/f+.5|0,I=I/f+.5|0,u=h;s>u;u+=1)for(o=u*F,l=r;n>l;l+=1)g=o+l<<2,D[g]=c,D[g+1]=d,D[g+2]=m,D[g+3]=I}return w},ImageFilters.Oil=function(t,a,e){var i,r,n,h,s,l,u,o,g,f,c,d,m,I,v,F,p,w,D=t.data,x=t.width,C=t.height,b=(D.length,this.utils.createImageData(x,C)),B=b.data,M=0,S=[],R=[],y=[],G=[],P=[],k=[];for(r=0;C>r;r+=1)for(i=0;x>i;i+=1){for(n=0;e>n;n+=1)S[n]=R[n]=y[n]=G[n]=P[n]=k[n]=0;for(h=-a;a>=h;h+=1)if(l=r+h,!(0>l||l>=C))for(o=l*x,s=-a;a>=s;s+=1)u=i+s,0>u||u>=x||(g=o+u<<2,f=D[g],c=D[g+1],d=D[g+2],m=f*e>>8,I=c*e>>8,v=d*e>>8,G[m]+=f,P[I]+=c,k[v]+=d,S[m]+=1,R[I]+=1,y[v]+=1);for(F=p=w=0,n=1;e>n;n+=1)S[n]>S[F]&&(F=n),R[n]>R[p]&&(p=n),y[n]>y[w]&&(w=n);B[M]=G[F]/S[F]|0,B[M+1]=P[p]/R[p]|0,B[M+2]=k[w]/y[w]|0,B[M+3]=D[M+3],M+=4}return b},ImageFilters.OpacityFilter=function(t,a){for(var e=t.data,i=t.width,r=t.height,n=e.length,h=this.utils.createImageData(i,r),s=h.data,l=0;n>l;l+=4)s[l]=e[l],s[l+1]=e[l+1],s[l+2]=e[l+2],s[l+3]=a;return h},ImageFilters.Posterize=function(t,a){var e=t.data,i=t.width,r=t.height,n=(e.length,this.utils.createImageData(i,r)),h=n.data;a=2>a?2:a>255?255:a;var s,l=[],u=a-1,o=0,g=0;for(s=0;a>s;s+=1)l[s]=255*s/u;return this.utils.mapRGB(e,h,function(t){var e=l[o];return g+=a,g>255&&(g-=255,o+=1),e}),n},ImageFilters.Rescale=function(t,a){var e=t.data,i=t.width,r=t.height,n=(e.length,this.utils.createImageData(i,r)),h=n.data;return this.utils.mapRGB(e,h,function(t){return t*=a,t>255?255:t+.5|0}),n},ImageFilters.ResizeNearestNeighbor=function(t,a,e){var i,r,n,h,s=t.data,l=t.width,u=t.height,o=(s.length,this.utils.createImageData(a,e)),g=o.data,f=l/a,c=u/e,d=0;for(n=0;e>n;n+=1)for(h=(n*c|0)*l,r=0;a>r;r+=1)i=h+r*f<<2,g[d]=s[i],g[d+1]=s[i+1],g[d+2]=s[i+2],g[d+3]=s[i+3],d+=4;return o},ImageFilters.Resize=function(t,a,e){var i,r,n=t.data,h=t.width,s=t.height,l=(n.length,this.utils.createImageData(a,e)),u=l.data,o=h/a,g=s/e,f=0;for(r=0;e>r;r+=1)for(i=0;a>i;i+=1)this.utils.copyBilinear(n,i*o,r*g,h,s,u,f,0),f+=4;return l},ImageFilters.ResizeBuiltin=function(t,a,e){var i,r=t.width,n=t.height,h=this.utils.getSampleCanvas(),s=this.utils.getSampleContext();return h.width=Math.max(r,a),h.height=Math.max(n,e),s.save(),s.putImageData(t,0,0),s.scale(a/r,e/n),s.drawImage(h,0,0),i=s.getImageData(0,0,a,e),s.restore(),h.width=0,h.height=0,i},ImageFilters.Sepia=function(t){var a,e,i,r,n,h=t.data,s=t.width,l=t.height,u=h.length,o=this.utils.createImageData(s,l),g=o.data;for(r=0;u>r;r+=4)a=h[r],e=h[r+1],i=h[r+2],g[r]=(n=.393*a+.769*e+.189*i)>255?255:0>n?0:n+.5|0,g[r+1]=(n=.349*a+.686*e+.168*i)>255?255:0>n?0:n+.5|0,g[r+2]=(n=.272*a+.534*e+.131*i)>255?255:0>n?0:n+.5|0,g[r+3]=h[r+3];return o},ImageFilters.Sharpen=function(t,a){return this.ConvolutionFilter(t,3,3,[-a/16,-a/8,-a/16,-a/8,.75*a+1,-a/8,-a/16,-a/8,-a/16])},ImageFilters.Solarize=function(t){var a=t.data,e=t.width,i=t.height,r=(a.length,this.utils.createImageData(e,i)),n=r.data;return this.utils.mapRGB(a,n,function(t){return t>127?2*(t-127.5):2*(127.5-t)}),r},ImageFilters.Transpose=function(t){var a,e,i=t.data,r=t.width,n=t.height,h=(i.length,this.utils.createImageData(n,r)),s=h.data;for(y=0;y<n;y+=1)for(x=0;x<r;x+=1)a=y*r+x<<2,e=x*n+y<<2,s[e]=i[a],s[e+1]=i[a+1],s[e+2]=i[a+2],s[e+3]=i[a+3];return h},ImageFilters.Twril=function(t,a,e,i,r,n,h){var s=t.data,l=t.width,u=t.height,o=(s.length,this.utils.createImageData(l,u)),g=o.data;a=l*a,e=u*e,r*=Math.PI/180;var f,c,d,m,I,v,F,p,w,D=i*i,x=0;for(c=0;u>c;c+=1)for(f=0;l>f;f+=1)d=f-a,m=c-e,I=d*d+m*m,I>D?(g[x]=s[x],g[x+1]=s[x+1],g[x+2]=s[x+2],g[x+3]=s[x+3]):(I=Math.sqrt(I),v=Math.atan2(m,d)+r*(i-I)/i,F=a+I*Math.cos(v),p=e+I*Math.sin(v),h?this.utils.copyBilinear(s,F,p,l,u,g,x,n):(w=(p+.5|0)*l+(F+.5|0)<<2,g[x]=s[w],g[x+1]=s[w+1],g[x+2]=s[w+2],g[x+3]=s[w+3])),x+=4;return o}; \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.xml new file mode 100644 index 00000000000..737bc50862a --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/imagefilters/imagefilters.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>imagefilters.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery.xml new file mode 100644 index 00000000000..0eef93fbd03 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>jquery</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.js new file mode 100644 index 00000000000..6b0c5a19564 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.js @@ -0,0 +1,2 @@ +/*! jQuery Migrate v1.4.1 | (c) jQuery Foundation and other contributors | jquery.org/license */ +"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}a.migrateVersion="1.4.1";var f={};a.migrateWarnings=[],b.console&&b.console.log,a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&d("jQuery is not compatible with Quirks Mode");var g=a("<input/>",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') might use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.find,s=a.parseJSON,t=/^\s*</,u=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,v=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,w=/^([^<]*)(<[\w\W]+>)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&"string"==typeof b&&!a.isPlainObject(e)&&(g=w.exec(a.trim(b)))&&g[0]&&(t.test(b)||d("$(html) HTML strings must start with '<' character"),g[3]&&d("$(html) HTML text after last tag is ignored"),"#"===g[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),e&&e.context&&e.context.nodeType&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):(h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector="string"==typeof b?b:"",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&u.test(a))try{document.querySelector(a)}catch(c){a=a.replace(v,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),d("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){d("Attribute selector with '#' was not fixed: "+b[0])}}return r.apply(this,b)};var x;for(x in r)Object.prototype.hasOwnProperty.call(r,x)&&(a.find[x]=r[x]);a.parseJSON=function(a){return a?s.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.boxModel=a.support.boxModel="CSS1Compat"===document.compatMode,e(a,"boxModel",a.boxModel,"jQuery.boxModel is deprecated"),e(a.support,"boxModel",a.support.boxModel,"jQuery.support.boxModel is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.fn.size=function(){return d("jQuery.fn.size() is deprecated; use the .length property"),this.length};var y=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return y=!0,a=d.apply(this,arguments),y=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};y||d("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{"text json":a.parseJSON}});var z=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?z.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var A=/\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||A.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var B=a.event.add,C=a.event.remove,D=a.event.trigger,E=a.fn.toggle,F=a.fn.live,G=a.fn.die,H=a.fn.load,I="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",J=new RegExp("\\b(?:"+I+")\\b"),K=/(?:^|\s)hover(\.\S+|)\b/,L=function(b){return"string"!=typeof b||a.event.special.hover?b:(K.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(K,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&J.test(b)&&d("AJAX events should be attached to document: "+b),B.call(this,a,L(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){C.call(this,a,L(b)||"",c,d,e)},a.each(["load","unload","error"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===c&&"string"==typeof a[0]?H.apply(this,a):(d("jQuery.fn."+c+"() is deprecated"),a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return E.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g<e.length;)e[g++].guid=f;return this.click(h)},a.fn.live=function(b,c,e){return d("jQuery.fn.live() is deprecated"),F?F.apply(this,arguments):(a(this.context).on(b,this.selector,c,e),this)},a.fn.die=function(b,c){return d("jQuery.fn.die() is deprecated"),G?G.apply(this,arguments):(a(this.context).off(b,this.selector||"**",c),this)},a.event.trigger=function(a,b,c,e){return c||J.test(a)||d("Global events are undocumented and deprecated"),D.call(this,a,b,c||document,e)},a.each(I.split("|"),function(b,c){a.event.special[c]={setup:function(){var b=this;return b!==document&&(a.event.add(document,c+"."+a.guid,function(){a.event.trigger(c,Array.prototype.slice.call(arguments,1),b,!0)}),a._data(this,c,a.guid++)),!1},teardown:function(){return this!==document&&a.event.remove(document,c+"."+a._data(this,c)),!1}}}),a.event.special.ready={setup:function(){this===document&&d("'ready' event is deprecated")}};var M=a.fn.andSelf||a.fn.addBack,N=a.fn.find;if(a.fn.andSelf=function(){return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),M.apply(this,arguments)},a.fn.find=function(a){var b=N.apply(this,arguments);return b.context=this.context,b.selector=this.selector?this.selector+" "+a:a,b},a.Callbacks){var O=a.Deferred,P=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var c=O(),e=c.promise();return c.pipe=e.pipe=function(){var b=arguments;return d("deferred.pipe() is deprecated"),a.Deferred(function(d){a.each(P,function(f,g){var h=a.isFunction(b[f])&&b[f];c[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(d.resolve).fail(d.reject).progress(d.notify):d[g[0]+"With"](this===e?d.promise():this,h?[b]:arguments)})}),b=null}).promise()},c.isResolved=function(){return d("deferred.isResolved is deprecated"),"resolved"===c.state()},c.isRejected=function(){return d("deferred.isRejected is deprecated"),"rejected"===c.state()},b&&b.call(c,c),c}}}(jQuery,window); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.xml new file mode 100644 index 00000000000..b04c955dfd1 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery-migrate.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>jquery-migrate.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.js new file mode 100644 index 00000000000..c6a843406cb --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.js @@ -0,0 +1,4 @@ +/*! jQuery v3.0.0 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.0.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return a&&"[object Object]"===k.call(a)?(b=e(a))?(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n):!0:!1},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;d>f;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a)?(d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e):void 0},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"===c||r.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\x00-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\x00"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[0>c?c+b:c]}),even:pa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,e>i&&ya(a.slice(i,e)),f>e&&ya(a=a.slice(e)),f>e&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;d>b;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;d>b;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(f>b)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(1>=b&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){ +return j.call(r(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;g>f;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;g>f;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;d>c;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;o>n;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){return this.originalEvent?b(this.originalEvent):void 0}:function(){return this.originalEvent?this.originalEvent[a]:void 0},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==va()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===va()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&r.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;m>l;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;i>l;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;e>d;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;e>d;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),0>=d||null==d){if(d=Ma(a,b,f),(0>d||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){return c?!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)}):void 0},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){return b?(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px":void 0}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;e>g;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);g>f;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;e>d;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c); +}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){return r.isArray(b)?a.checked=r.inArray(r(a).val(),b)>-1:void 0}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?r.event.trigger(a,b,c,!0):void 0}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",0>b&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;return o.cors||Pb&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){return c?(c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c):void 0})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r}); diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.xml new file mode 100644 index 00000000000..aeb3684ce5c --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/jquery/jquery.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>jquery.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu.xml new file mode 100644 index 00000000000..30b0a513348 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>menu</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.js new file mode 100644 index 00000000000..f5caeb51392 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.js @@ -0,0 +1,641 @@ +//http://www.dynamicdrive.com/dynamicindex1/ddsmoothmenu.htm +var ddsmoothmenu = { + arrowimages: { + down: ["rightarrowclass", "img/right.png", 0], + right: ["rightarrowclass", "img/right.png", 0] + }, + transition: { + overtime: 0, + outtime: 0 + }, //duration of slide in/out animation, in milliseconds + shadow: false, //enable shadow? + //showhidedelay:{showdelay:100,hidedelay:200}, //set delay in milliseconds before sub menus appear and disappear, respectively + showhidedelay: { + showdelay: 0, + hidedelay: 0 + }, + zindexvalue: 1e3, //set z-index value for menus + closeonnonmenuclick: true, + closeonmouseout: false, + overarrowre: /(?=\.(gif|jpg|jpeg|png|bmp))/i, + overarrowaddtofilename: "_over", + detecttouch: !!("ontouchstart" in window) || !!("ontouchstart" in document.documentElement) || !!window.ontouchstart || !!window.Touch && !!window.Touch.length || !!window.onmsgesturechange || window.DocumentTouch && window.document instanceof window.DocumentTouch, + detectwebkit: navigator.userAgent.toLowerCase().indexOf("applewebkit") > -1, + idevice: /ipad|iphone/i.test(navigator.userAgent), + detectie6: function() { + var e; + return (e = /MSIE (\d+)/.exec(navigator.userAgent)) && e[1] < 7 + }(), + detectie9: function() { + var e; + return (e = /MSIE (\d+)/.exec(navigator.userAgent)) && e[1] > 8 + }(), + ie9shadow: function() {}, + css3support: typeof document.documentElement.style.boxShadow === "string" || !document.all && document.querySelector, + prevobjs: [], + menus: null, + executelink: function(e, t, n) { + var r = t.length, + i = n.target; + while (--r > -1) { + if (t[r] === this) { + t.splice(r, 1); + if (i.href !== ddsmoothmenu.emptyhash && i.href && e(i).is("a") && !e(i).children("span." + ddsmoothmenu.arrowimages.down[0] + ", span." + ddsmoothmenu.arrowimages.right[0]).length) { + if (i.target && i.target !== "_self") { + window.open(i.href, i.target) + } else { + window.location.href = i.href + } + n.stopPropagation() + } + } + } + }, + repositionv: function(e, t, n, r, i, s, o) { + o = o || 0; + var u = 0, + a = r + i; + e.css({ + top: n, + display: "block" + }); + while (e.offset().top < i) { + e.css({ + top: ++n + }); + ++u + } + if (!u && t.offset().top + t.outerHeight() < a && e.data("height") + e.offset().top > a) { + e.css({ + top: i - t.parents("ul").last().offset().top - t.position().top + }) + } + s === "toggle" && e.css({ + display: "none" + }); + if (n !== o) { + e.addClass("repositionedv") + } + return [u, n] + }, + updateprev: function(e, t, n) { + var r = t.length, + i, s = n.parents().add(this); + while (--r > -1) { + if (s.index(i = t[r]) < 0) { + e(i).trigger("click", [1]); + t.splice(r, 1) + } + } + t.push(this) + }, + subulpreventemptyclose: function(e) { + var t = e.target; + if (t.href === ddsmoothmenu.emptyhash && $(t).parent("li").find("ul").length < 1) { + e.preventDefault(); + e.stopPropagation() + } + }, + getajaxmenu: function(e, t, n) { + var r = e("#" + t.contentsource[0]); + r.html("Loading Menu..."); + e.ajax({ + url: t.contentsource[1], + async: true, + error: function(e) { + r.html("Error fetching content. Server Response: " + e.responseText) + }, + success: function(i) { + r.html(i); + !!!n && ddsmoothmenu.buildmenu(e, t) + } + }) + }, + closeall: function(e) { + var t = ddsmoothmenu, + n; + if (!t.globaltrackopen) { + return + } + if (e.type === "mouseleave" || (e.type === "click" || e.type === "touchstart") && t.menus.index(e.target) < 0) { + n = t.prevobjs.length; + while (--n > -1) { + $(t.prevobjs[n]).trigger("click"); + t.prevobjs.splice(n, 1) + } + } + }, + emptyhash: $('<a href="#"></a>').get(0).href, + buildmenu: function(e, t) { + var n = ddsmoothmenu; + n.globaltrackopen = n.closeonnonmenuclick || n.closeonmouseout; + var r = 0; + var i = n.globaltrackopen ? n.prevobjs : []; + var s = e("#" + t.mainmenuid).removeClass("ddsmoothmenu ddsmoothmenu-v").addClass(t.classname || "ddsmoothmenu"); + t.repositionv = t.repositionv !== false; + var o = s.find(">ul"); + var u = n.detecttouch ? "toggle" : t.method === "toggle" ? "toggle" : "hover"; + var a = o.find(">li>ul").parent(); + var f = t.orientation != "v" ? "down" : "right", + l = e(document.body); + o.click(function(e) { + e.target.href === n.emptyhash && e.preventDefault() + }); + if (u === "toggle") { + if (n.globaltrackopen) { + n.menus = n.menus ? n.menus.add(o.add(o.find("*"))) : o.add(o.find("*")) + } + if (n.closeonnonmenuclick) { + if (f === "down") { + s.click(function(e) { + e.stopPropagation() + }) + } + e(document).unbind("click.smoothmenu").bind("click.smoothmenu", n.closeall); + if (n.idevice) { + document.removeEventListener("touchstart", n.closeall, false); + document.addEventListener("touchstart", n.closeall, false) + } + } else if (t.closeonnonmenuclick) { + if (f === "down") { + s.click(function(e) { + e.stopPropagation() + }) + } + e(document).bind("click." + t.mainmenuid, function(e) { + o.find("li>a.selected").parent().trigger("click") + }); + if (n.idevice) { + document.addEventListener("touchstart", function(e) { + o.find("li>a.selected").parent().trigger("click") + }, false) + } + } + if (n.closeonmouseout) { + var c = f === "down" ? s : o; + c.bind("mouseleave.smoothmenu", n.closeall) + } else if (t.closeonmouseout) { + var c = f === "down" ? s : o; + c.bind("mouseleave.smoothmenu", function() { + o.find("li>a.selected").parent().trigger("click") + }) + } + if (!e('style[title="ddsmoothmenushadowsnone"]').length) { + e("head").append('<style title="ddsmoothmenushadowsnone" type="text/css">.ddsmoothmenushadowsnone{display:none!important;}</style>') + } + var h; + e(window).bind("resize scroll", function() { + clearTimeout(h); + var t = o.find("li>a.selected").parent(), + n = e(".ddshadow").addClass("ddsmoothmenushadowsnone"); + t.eq(0).trigger("click"); + t.trigger("click"); + h = setTimeout(function() { + n.removeClass("ddsmoothmenushadowsnone") + }, 100) + }) + } + a.each(function() { + function p() { + a.removeClass("selected") + } + var s = e(this).css({ + zIndex: (t.zindexvalue || n.zindexvalue) + r-- + }); + var o = s.children("ul:eq(0)").css({ + display: "block" + }).data("timers", {}); + var a = s.children("a:eq(0)").css({ + paddingRight: n.arrowimages[f][2] + }).append('<span style="display: block;" class="' + n.arrowimages[f][0] + '"></span>'); + var c = { + w: a.outerWidth(), + h: s.innerHeight(), + subulw: o.outerWidth(), + subulh: o.outerHeight() + }; + var h = f === "down" ? c.h : 0; + o.css({ + top: h + }); + u === "toggle" && o.click(n.subulpreventemptyclose); + s[u](function(r) { + if (!s.data("headers")) { + n.buildsubheaders(e, o.find(">li>ul").parent(), t, u, i); + s.data("headers", true).find(">ul").each(function(t, n) { + var r = e(n); + r.data("height", r.outerHeight()) + }).css({ + display: "none", + visibility: "visible" + }) + } + u === "toggle" && n.updateprev.call(this, e, i, s); + clearTimeout(o.data("timers").hidetimer); + a.addClass("selected"); + o.data("timers").showtimer = setTimeout(function() { + var r = f === "down" ? 0 : c.w; + var i = r, + p, d, v, m = 0; + r = s.offset().left + r + c.subulw > e(window).width() ? f === "down" ? -c.subulw + c.w : -c.w : r; + i = i !== r; + o.css({ + top: h + }).removeClass("repositionedv"); + if (t.repositionv && a.offset().top + h + o.data("height") > (v = e(window).height()) + (d = e(document).scrollTop())) { + p = (f === "down" ? 0 : a.outerHeight()) - o.data("height"); + m = n.repositionv(o, a, p, v, d, u, h)[0] + } + o.css({ + left: r, + width: c.subulw + }).stop(true, true).animate({ + height: "show", + opacity: "show" + }, n.transition.overtime, function() { + this.style.removeAttribute && this.style.removeAttribute("filter") + }); + if (i) { + o.addClass("repositioned") + } else { + o.removeClass("repositioned") + } + if (t.shadow) { + if (!s.data("$shadow")) { + s.data("$shadow", e("<div></div>").addClass("ddshadow toplevelshadow").prependTo(l).css({ + zIndex: s.css("zIndex") + })) + } + n.ie9shadow(s.data("$shadow")); + var g = o.offset(); + var y = g.left; + var b = g.top; + s.data("$shadow").css({ + overflow: "visible", + width: c.subulw, + left: y, + top: b + }).stop(true, true).animate({ + height: c.subulh + }, n.transition.overtime) + } + }, n.showhidedelay.showdelay) + }, function(t, r) { + var a = s.data("$shadow"); + if (u === "hover") { + p() + } else { + n.executelink.call(this, e, i, t) + } + clearTimeout(o.data("timers").showtimer); + o.data("timers").hidetimer = setTimeout(function() { + o.stop(true, true).animate({ + height: "hide", + opacity: "hide" + }, r || n.transition.outtime, function() { + u === "toggle" && p() + }); + if (a) { + if (!n.css3support && n.detectwebkit) { + a.children("div:eq(0)").css({ + opacity: 0 + }) + } + a.stop(true, true).animate({ + height: 0 + }, r || n.transition.outtime, function() { + if (u === "toggle") { + this.style.overflow = "hidden" + } + }) + } + }, n.showhidedelay.hidedelay) + }) + }) + }, + buildsubheaders: function(e, t, n, r, i) { + t.each(function() { + function l() { + a.removeClass("selected") + } + var t = ddsmoothmenu; + var s = e(this).css({ + zIndex: e(this).parent("ul").css("z-index") + }); + var o = s.children("ul:eq(0)").css({ + display: "block" + }).data("timers", {}), + u; + r === "toggle" && o.click(t.subulpreventemptyclose); + var a = s.children("a:eq(0)").append('<span style="display: block;" class="' + t.arrowimages["right"][0] + '"></span>'); + var f = { + w: a.outerWidth(), + subulw: o.outerWidth(), + subulh: o.outerHeight() + }; + o.css({ + top: 0 + }); + s[r](function(l) { + if (!s.data("headers")) { + t.buildsubheaders(e, o.find(">li>ul").parent(), n, r, i); + s.data("headers", true).find(">ul").each(function(t, n) { + var r = e(n); + r.data("height", r.height()) + }).css({ + display: "none", + visibility: "visible" + }) + } + r === "toggle" && t.updateprev.call(this, e, i, s); + clearTimeout(o.data("timers").hidetimer); + a.addClass("selected"); + o.data("timers").showtimer = setTimeout(function() { + var i = f.w; + var l = i, + c, h, p, d = 0; + i = s.offset().left + i + f.subulw > e(window).width() ? -f.w : i; + l = l !== i; + o.css({ + top: 0 + }).removeClass("repositionedv"); + if (n.repositionv && a.offset().top + o.data("height") > (p = e(window).height()) + (h = e(document).scrollTop())) { + c = a.outerHeight() - o.data("height"); + d = t.repositionv(o, a, c, p, h, r); + c = d[1]; + d = d[0] + } + o.css({ + left: i, + width: f.subulw + }).stop(true, true).animate({ + height: "show", + opacity: "show" + }, t.transition.overtime, function() { + this.style.removeAttribute && this.style.removeAttribute("filter") + }); + if (l) { + o.addClass("repositioned") + } else { + o.removeClass("repositioned") + } + if (n.shadow) { + if (!s.data("$shadow")) { + u = s.parents("li:eq(0)").data("$shadow"); + s.data("$shadow", e("<div></div>").addClass("ddshadow").prependTo(u).css({ + zIndex: u.css("z-index") + })) + } + var v = o.offset(); + var m = i; + var g = s.position().top - (c ? o.data("height") - a.outerHeight() - d : 0); + if (t.detectwebkit && !t.css3support) { + s.data("$shadow").css({ + opacity: 1 + }) + } + s.data("$shadow").css({ + overflow: "visible", + width: f.subulw, + left: m, + top: g + }).stop(true, true).animate({ + height: f.subulh + }, t.transition.overtime) + } + }, t.showhidedelay.showdelay) + }, function(n, u) { + var a = s.data("$shadow"); + if (r === "hover") { + l() + } else { + t.executelink.call(this, e, i, n) + } + clearTimeout(o.data("timers").showtimer); + o.data("timers").hidetimer = setTimeout(function() { + o.stop(true, true).animate({ + height: "hide", + opacity: "hide" + }, u || t.transition.outtime, function() { + r === "toggle" && l() + }); + if (a) { + if (!t.css3support && t.detectwebkit) { + a.children("div:eq(0)").css({ + opacity: 0 + }) + } + a.stop(true, true).animate({ + height: 0 + }, u || t.transition.outtime, function() { + if (r === "toggle") { + this.style.overflow = "hidden" + } + }) + } + }, t.showhidedelay.hidedelay) + }) + }) + }, + init: function(e) { + function o() { + if (s) { + return + } + if (typeof e.customtheme == "object" && e.customtheme.length == 2) { + var n = e.orientation == "v" ? t : t + ", " + t; + i.push([n, " ul li a {background:", e.customtheme[0], ";}\n", t, " ul li a:hover {background:", e.customtheme[1], ";}"].join("")) + } + i.push('\n<style type="text/css">'); + i.reverse(); + jQuery("head").append(i.join("\n")) + } + if (this.detectie6 && parseFloat(jQuery.fn.jquery) > 1.3) { + this.init = function(e) { + if (typeof e.contentsource == "object") { + jQuery(function(t) { + ddsmoothmenu.getajaxmenu(t, e, "nobuild") + }) + } + return false + }; + jQuery('link[href*="ddsmoothmenu"]').attr("disabled", true); + jQuery(function(e) { + alert("You Seriously Need to Update Your Browser!\n\nDynamic Drive Smooth Navigational Menu Showing Text Only Menu(s)\n\nDEVELOPER's NOTE: This script will run in IE 6 when using jQuery 1.3.2 or less,\nbut not real well."); + e('link[href*="ddsmoothmenu"]').attr("disabled", true) + }); + return this.init(e) + } + var t = "#" + e.mainmenuid, + n, r, i = ["</style>\n"], + s = e.arrowswap ? 4 : 2; + if (e.arrowswap) { + n = ddsmoothmenu.arrowimages.right[1].replace(ddsmoothmenu.overarrowre, ddsmoothmenu.overarrowaddtofilename); + r = ddsmoothmenu.arrowimages.down[1].replace(ddsmoothmenu.overarrowre, ddsmoothmenu.overarrowaddtofilename); + jQuery(new Image).bind("load error", function(n) { + e.rightswap = n.type === "load"; + if (e.rightswap) { + i.push([t, " ul li a:hover .", ddsmoothmenu.arrowimages.right[0], ", ", t, " ul li a.selected .", ddsmoothmenu.arrowimages.right[0], " { background-image: url(", this.src, ");}"].join("")) + }--s; + o() + }).attr("src", n); + jQuery(new Image).bind("load error", function(n) { + e.downswap = n.type === "load"; + if (e.downswap) { + i.push([t, " ul li a:hover .", ddsmoothmenu.arrowimages.down[0], ", ", t, " ul li a.selected .", ddsmoothmenu.arrowimages.down[0], " { background-image: url(", this.src, ");}"].join("")) + }--s; + o() + }).attr("src", r) + } + jQuery(new Image).bind("load error", function(e) { + if (e.type === "load") { + i.push([t + " ul li a .", ddsmoothmenu.arrowimages.right[0], " { background: url(", this.src, ") no-repeat;width:", this.width, "px;height:", this.height, "px;}"].join("")) + }--s; + o() + }).attr("src", ddsmoothmenu.arrowimages.right[1]); + jQuery(new Image).bind("load error", function(e) { + if (e.type === "load") { + i.push([t + " ul li a .", ddsmoothmenu.arrowimages.down[0], " { background: url(", this.src, ") no-repeat;width:", this.width, "px;height:", this.height, "px;}"].join("")) + }--s; + o() + }).attr("src", ddsmoothmenu.arrowimages.down[1]); + e.shadow = this.detectie6 && (e.method === "hover" || e.orientation === "v") ? false : e.shadow || this.shadow; + jQuery(document).ready(function(t) { + if (e.shadow && ddsmoothmenu.css3support) { + t("body").addClass("ddcss3support") + } + if (typeof e.contentsource == "object") { + ddsmoothmenu.getajaxmenu(t, e) + } else { + ddsmoothmenu.buildmenu(t, e) + } + }) + } +}; +if (function(e) { + var t = false; + try { + e('<a href="#"></a>').toggle(function() {}, function() { + t = true + }).trigger("click").trigger("click") + } catch (n) {} + return !t + }(jQuery)) { + (function() { + var e = jQuery.fn.toggle; + jQuery.extend(jQuery.fn, { + toggle: function(t, n) { + if (!jQuery.isFunction(t) || !jQuery.isFunction(n)) { + return e.apply(this, arguments) + } + var r = arguments, + i = t.guid || jQuery.guid++, + s = 0, + o = function(e) { + var n = (jQuery._data(this, "lastToggle" + t.guid) || 0) % s; + jQuery._data(this, "lastToggle" + t.guid, n + 1); + e.preventDefault(); + return r[n].apply(this, arguments) || false + }; + o.guid = i; + while (s < r.length) { + r[s++].guid = i + } + return this.click(o) + } + }) + })() +} +if (ddsmoothmenu.detectie9) { + (function(e) { + function t(e, t) { + return parseInt(e) + t + "px" + } + ddsmoothmenu.ie9shadow = function(n) { + var r = document.defaultView.getComputedStyle(n.get(0), null), + i = r.getPropertyValue("box-shadow").split(" "), + s = { + top: r.getPropertyValue("margin-top"), + left: r.getPropertyValue("margin-left") + }; + e("head").append(['\n<style title="ie9shadow" type="text/css">', ".ddcss3support .ddshadow {", " box-shadow: " + t(i[0], 1) + " " + t(i[1], 1) + " " + i[2] + " " + i[3] + ";", "}", ".ddcss3support .ddshadow.toplevelshadow {", " opacity: " + (e(".ddcss3support .ddshadow").css("opacity") - .1) + ";", " margin-top: " + t(s.top, -1) + ";", " margin-left: " + t(s.left, -1) + ";", "}", "</style>\n"].join("\n")); + ddsmoothmenu.ie9shadow = function() {} + }; + var n = e.fn.height, + r = e.fn.width; + e.extend(e.fn, { + height: function() { + var e = this.get(0); + if (this.length < 1 || arguments.length || e === window || e === document) { + return n.apply(this, arguments) + } + return parseFloat(document.defaultView.getComputedStyle(e, null).getPropertyValue("height")) + }, + innerHeight: function() { + if (this.length < 1) { + return null + } + var e = this.height(), + t = this.get(0), + n = document.defaultView.getComputedStyle(t, null); + e += parseInt(n.getPropertyValue("padding-top")); + e += parseInt(n.getPropertyValue("padding-bottom")); + return e + }, + outerHeight: function(e) { + if (this.length < 1) { + return null + } + var t = this.innerHeight(), + n = this.get(0), + r = document.defaultView.getComputedStyle(n, null); + t += parseInt(r.getPropertyValue("border-top-width")); + t += parseInt(r.getPropertyValue("border-bottom-width")); + if (e) { + t += parseInt(r.getPropertyValue("margin-top")); + t += parseInt(r.getPropertyValue("margin-bottom")) + } + return t + }, + width: function() { + var e = this.get(0); + if (this.length < 1 || arguments.length || e === window || e === document) { + return r.apply(this, arguments) + } + return parseFloat(document.defaultView.getComputedStyle(e, null).getPropertyValue("width")) + }, + innerWidth: function() { + if (this.length < 1) { + return null + } + var e = this.width(), + t = this.get(0), + n = document.defaultView.getComputedStyle(t, null); + e += parseInt(n.getPropertyValue("padding-right")); + e += parseInt(n.getPropertyValue("padding-left")); + return e + }, + outerWidth: function(e) { + if (this.length < 1) { + return null + } + var t = this.innerWidth(), + n = this.get(0), + r = document.defaultView.getComputedStyle(n, null); + t += parseInt(r.getPropertyValue("border-right-width")); + t += parseInt(r.getPropertyValue("border-left-width")); + if (e) { + t += parseInt(r.getPropertyValue("margin-right")); + t += parseInt(r.getPropertyValue("margin-left")) + } + return t + } + }) + })(jQuery) +} + +ddsmoothmenu.init({ + mainmenuid: "main_menu", + method: 'toggle', //'hover' (default) or 'toggle' + contentsource: "markup", +}); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.xml new file mode 100644 index 00000000000..2f3cb9d7ffd --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>menu.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.js new file mode 100644 index 00000000000..f5e14dc02fb --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.js @@ -0,0 +1,17 @@ +//http://www.dynamicdrive.com/dynamicindex1/ddsmoothmenu.htm +var ddsmoothmenu={ + arrowimages:{down:["rightarrowclass","img/right.png",0],right:["rightarrowclass","img/right.png",0]}, + transition:{overtime:0,outtime:0}, //duration of slide in/out animation, in milliseconds + shadow:false, //enable shadow? + //showhidedelay:{showdelay:100,hidedelay:200}, //set delay in milliseconds before sub menus appear and disappear, respectively + showhidedelay:{showdelay:0,hidedelay:0}, + zindexvalue:1e3, //set z-index value for menus + closeonnonmenuclick:true, + closeonmouseout:false, +overarrowre:/(?=\.(gif|jpg|jpeg|png|bmp))/i,overarrowaddtofilename:"_over",detecttouch:!!("ontouchstart"in window)||!!("ontouchstart"in document.documentElement)||!!window.ontouchstart||!!window.Touch&&!!window.Touch.length||!!window.onmsgesturechange||window.DocumentTouch&&window.document instanceof window.DocumentTouch,detectwebkit:navigator.userAgent.toLowerCase().indexOf("applewebkit")>-1,idevice:/ipad|iphone/i.test(navigator.userAgent),detectie6:function(){var e;return(e=/MSIE (\d+)/.exec(navigator.userAgent))&&e[1]<7}(),detectie9:function(){var e;return(e=/MSIE (\d+)/.exec(navigator.userAgent))&&e[1]>8}(),ie9shadow:function(){},css3support:typeof document.documentElement.style.boxShadow==="string"||!document.all&&document.querySelector,prevobjs:[],menus:null,executelink:function(e,t,n){var r=t.length,i=n.target;while(--r>-1){if(t[r]===this){t.splice(r,1);if(i.href!==ddsmoothmenu.emptyhash&&i.href&&e(i).is("a")&&!e(i).children("span."+ddsmoothmenu.arrowimages.down[0]+", span."+ddsmoothmenu.arrowimages.right[0]).length){if(i.target&&i.target!=="_self"){window.open(i.href,i.target)}else{window.location.href=i.href}n.stopPropagation()}}}},repositionv:function(e,t,n,r,i,s,o){o=o||0;var u=0,a=r+i;e.css({top:n,display:"block"});while(e.offset().top<i){e.css({top:++n});++u}if(!u&&t.offset().top+t.outerHeight()<a&&e.data("height")+e.offset().top>a){e.css({top:i-t.parents("ul").last().offset().top-t.position().top})}s==="toggle"&&e.css({display:"none"});if(n!==o){e.addClass("repositionedv")}return[u,n]},updateprev:function(e,t,n){var r=t.length,i,s=n.parents().add(this);while(--r>-1){if(s.index(i=t[r])<0){e(i).trigger("click",[1]);t.splice(r,1)}}t.push(this)},subulpreventemptyclose:function(e){var t=e.target;if(t.href===ddsmoothmenu.emptyhash&&$(t).parent("li").find("ul").length<1){e.preventDefault();e.stopPropagation()}},getajaxmenu:function(e,t,n){var r=e("#"+t.contentsource[0]);r.html("Loading Menu...");e.ajax({url:t.contentsource[1],async:true,error:function(e){r.html("Error fetching content. Server Response: "+e.responseText)},success:function(i){r.html(i);!!!n&&ddsmoothmenu.buildmenu(e,t)}})},closeall:function(e){var t=ddsmoothmenu,n;if(!t.globaltrackopen){return}if(e.type==="mouseleave"||(e.type==="click"||e.type==="touchstart")&&t.menus.index(e.target)<0){n=t.prevobjs.length;while(--n>-1){$(t.prevobjs[n]).trigger("click");t.prevobjs.splice(n,1)}}},emptyhash:$('<a href="#"></a>').get(0).href,buildmenu:function(e,t){var n=ddsmoothmenu;n.globaltrackopen=n.closeonnonmenuclick||n.closeonmouseout;var r=0;var i=n.globaltrackopen?n.prevobjs:[];var s=e("#"+t.mainmenuid).removeClass("ddsmoothmenu ddsmoothmenu-v").addClass(t.classname||"ddsmoothmenu");t.repositionv=t.repositionv!==false;var o=s.find(">ul");var u=n.detecttouch?"toggle":t.method==="toggle"?"toggle":"hover";var a=o.find(">li>ul").parent();var f=t.orientation!="v"?"down":"right",l=e(document.body);o.click(function(e){e.target.href===n.emptyhash&&e.preventDefault()});if(u==="toggle"){if(n.globaltrackopen){n.menus=n.menus?n.menus.add(o.add(o.find("*"))):o.add(o.find("*"))}if(n.closeonnonmenuclick){if(f==="down"){s.click(function(e){e.stopPropagation()})}e(document).unbind("click.smoothmenu").bind("click.smoothmenu",n.closeall);if(n.idevice){document.removeEventListener("touchstart",n.closeall,false);document.addEventListener("touchstart",n.closeall,false)}}else if(t.closeonnonmenuclick){if(f==="down"){s.click(function(e){e.stopPropagation()})}e(document).bind("click."+t.mainmenuid,function(e){o.find("li>a.selected").parent().trigger("click")});if(n.idevice){document.addEventListener("touchstart",function(e){o.find("li>a.selected").parent().trigger("click")},false)}}if(n.closeonmouseout){var c=f==="down"?s:o;c.bind("mouseleave.smoothmenu",n.closeall)}else if(t.closeonmouseout){var c=f==="down"?s:o;c.bind("mouseleave.smoothmenu",function(){o.find("li>a.selected").parent().trigger("click")})}if(!e('style[title="ddsmoothmenushadowsnone"]').length){e("head").append('<style title="ddsmoothmenushadowsnone" type="text/css">.ddsmoothmenushadowsnone{display:none!important;}</style>')}var h;e(window).bind("resize scroll",function(){clearTimeout(h);var t=o.find("li>a.selected").parent(),n=e(".ddshadow").addClass("ddsmoothmenushadowsnone");t.eq(0).trigger("click");t.trigger("click");h=setTimeout(function(){n.removeClass("ddsmoothmenushadowsnone")},100)})}a.each(function(){function p(){a.removeClass("selected")}var s=e(this).css({zIndex:(t.zindexvalue||n.zindexvalue)+r--});var o=s.children("ul:eq(0)").css({display:"block"}).data("timers",{});var a=s.children("a:eq(0)").css({paddingRight:n.arrowimages[f][2]}).append('<span style="display: block;" class="'+n.arrowimages[f][0]+'"></span>');var c={w:a.outerWidth(),h:s.innerHeight(),subulw:o.outerWidth(),subulh:o.outerHeight()};var h=f==="down"?c.h:0;o.css({top:h});u==="toggle"&&o.click(n.subulpreventemptyclose);s[u](function(r){if(!s.data("headers")){n.buildsubheaders(e,o.find(">li>ul").parent(),t,u,i);s.data("headers",true).find(">ul").each(function(t,n){var r=e(n);r.data("height",r.outerHeight())}).css({display:"none",visibility:"visible"})}u==="toggle"&&n.updateprev.call(this,e,i,s);clearTimeout(o.data("timers").hidetimer);a.addClass("selected");o.data("timers").showtimer=setTimeout(function(){var r=f==="down"?0:c.w;var i=r,p,d,v,m=0;r=s.offset().left+r+c.subulw>e(window).width()?f==="down"?-c.subulw+c.w:-c.w:r;i=i!==r;o.css({top:h}).removeClass("repositionedv");if(t.repositionv&&a.offset().top+h+o.data("height")>(v=e(window).height())+(d=e(document).scrollTop())){p=(f==="down"?0:a.outerHeight())-o.data("height");m=n.repositionv(o,a,p,v,d,u,h)[0]}o.css({left:r,width:c.subulw}).stop(true,true).animate({height:"show",opacity:"show"},n.transition.overtime,function(){this.style.removeAttribute&&this.style.removeAttribute("filter")});if(i){o.addClass("repositioned")}else{o.removeClass("repositioned")}if(t.shadow){if(!s.data("$shadow")){s.data("$shadow",e("<div></div>").addClass("ddshadow toplevelshadow").prependTo(l).css({zIndex:s.css("zIndex")}))}n.ie9shadow(s.data("$shadow"));var g=o.offset();var y=g.left;var b=g.top;s.data("$shadow").css({overflow:"visible",width:c.subulw,left:y,top:b}).stop(true,true).animate({height:c.subulh},n.transition.overtime)}},n.showhidedelay.showdelay)},function(t,r){var a=s.data("$shadow");if(u==="hover"){p()}else{n.executelink.call(this,e,i,t)}clearTimeout(o.data("timers").showtimer);o.data("timers").hidetimer=setTimeout(function(){o.stop(true,true).animate({height:"hide",opacity:"hide"},r||n.transition.outtime,function(){u==="toggle"&&p()});if(a){if(!n.css3support&&n.detectwebkit){a.children("div:eq(0)").css({opacity:0})}a.stop(true,true).animate({height:0},r||n.transition.outtime,function(){if(u==="toggle"){this.style.overflow="hidden"}})}},n.showhidedelay.hidedelay)})})},buildsubheaders:function(e,t,n,r,i){t.each(function(){function l(){a.removeClass("selected")}var t=ddsmoothmenu;var s=e(this).css({zIndex:e(this).parent("ul").css("z-index")});var o=s.children("ul:eq(0)").css({display:"block"}).data("timers",{}),u;r==="toggle"&&o.click(t.subulpreventemptyclose);var a=s.children("a:eq(0)").append('<span style="display: block;" class="'+t.arrowimages["right"][0]+'"></span>');var f={w:a.outerWidth(),subulw:o.outerWidth(),subulh:o.outerHeight()};o.css({top:0});s[r](function(l){if(!s.data("headers")){t.buildsubheaders(e,o.find(">li>ul").parent(),n,r,i);s.data("headers",true).find(">ul").each(function(t,n){var r=e(n);r.data("height",r.height())}).css({display:"none",visibility:"visible"})}r==="toggle"&&t.updateprev.call(this,e,i,s);clearTimeout(o.data("timers").hidetimer);a.addClass("selected");o.data("timers").showtimer=setTimeout(function(){var i=f.w;var l=i,c,h,p,d=0;i=s.offset().left+i+f.subulw>e(window).width()?-f.w:i;l=l!==i;o.css({top:0}).removeClass("repositionedv");if(n.repositionv&&a.offset().top+o.data("height")>(p=e(window).height())+(h=e(document).scrollTop())){c=a.outerHeight()-o.data("height");d=t.repositionv(o,a,c,p,h,r);c=d[1];d=d[0]}o.css({left:i,width:f.subulw}).stop(true,true).animate({height:"show",opacity:"show"},t.transition.overtime,function(){this.style.removeAttribute&&this.style.removeAttribute("filter")});if(l){o.addClass("repositioned")}else{o.removeClass("repositioned")}if(n.shadow){if(!s.data("$shadow")){u=s.parents("li:eq(0)").data("$shadow");s.data("$shadow",e("<div></div>").addClass("ddshadow").prependTo(u).css({zIndex:u.css("z-index")}))}var v=o.offset();var m=i;var g=s.position().top-(c?o.data("height")-a.outerHeight()-d:0);if(t.detectwebkit&&!t.css3support){s.data("$shadow").css({opacity:1})}s.data("$shadow").css({overflow:"visible",width:f.subulw,left:m,top:g}).stop(true,true).animate({height:f.subulh},t.transition.overtime)}},t.showhidedelay.showdelay)},function(n,u){var a=s.data("$shadow");if(r==="hover"){l()}else{t.executelink.call(this,e,i,n)}clearTimeout(o.data("timers").showtimer);o.data("timers").hidetimer=setTimeout(function(){o.stop(true,true).animate({height:"hide",opacity:"hide"},u||t.transition.outtime,function(){r==="toggle"&&l()});if(a){if(!t.css3support&&t.detectwebkit){a.children("div:eq(0)").css({opacity:0})}a.stop(true,true).animate({height:0},u||t.transition.outtime,function(){if(r==="toggle"){this.style.overflow="hidden"}})}},t.showhidedelay.hidedelay)})})},init:function(e){function o(){if(s){return}if(typeof e.customtheme=="object"&&e.customtheme.length==2){var n=e.orientation=="v"?t:t+", "+t;i.push([n," ul li a {background:",e.customtheme[0],";}\n",t," ul li a:hover {background:",e.customtheme[1],";}"].join(""))}i.push('\n<style type="text/css">');i.reverse();jQuery("head").append(i.join("\n"))}if(this.detectie6&&parseFloat(jQuery.fn.jquery)>1.3){this.init=function(e){if(typeof e.contentsource=="object"){jQuery(function(t){ddsmoothmenu.getajaxmenu(t,e,"nobuild")})}return false};jQuery('link[href*="ddsmoothmenu"]').attr("disabled",true);jQuery(function(e){alert("You Seriously Need to Update Your Browser!\n\nDynamic Drive Smooth Navigational Menu Showing Text Only Menu(s)\n\nDEVELOPER's NOTE: This script will run in IE 6 when using jQuery 1.3.2 or less,\nbut not real well.");e('link[href*="ddsmoothmenu"]').attr("disabled",true)});return this.init(e)}var t="#"+e.mainmenuid,n,r,i=["</style>\n"],s=e.arrowswap?4:2;if(e.arrowswap){n=ddsmoothmenu.arrowimages.right[1].replace(ddsmoothmenu.overarrowre,ddsmoothmenu.overarrowaddtofilename);r=ddsmoothmenu.arrowimages.down[1].replace(ddsmoothmenu.overarrowre,ddsmoothmenu.overarrowaddtofilename);jQuery(new Image).bind("load error",function(n){e.rightswap=n.type==="load";if(e.rightswap){i.push([t," ul li a:hover .",ddsmoothmenu.arrowimages.right[0],", ",t," ul li a.selected .",ddsmoothmenu.arrowimages.right[0]," { background-image: url(",this.src,");}"].join(""))}--s;o()}).attr("src",n);jQuery(new Image).bind("load error",function(n){e.downswap=n.type==="load";if(e.downswap){i.push([t," ul li a:hover .",ddsmoothmenu.arrowimages.down[0],", ",t," ul li a.selected .",ddsmoothmenu.arrowimages.down[0]," { background-image: url(",this.src,");}"].join(""))}--s;o()}).attr("src",r)}jQuery(new Image).bind("load error",function(e){if(e.type==="load"){i.push([t+" ul li a .",ddsmoothmenu.arrowimages.right[0]," { background: url(",this.src,") no-repeat;width:",this.width,"px;height:",this.height,"px;}"].join(""))}--s;o()}).attr("src",ddsmoothmenu.arrowimages.right[1]);jQuery(new Image).bind("load error",function(e){if(e.type==="load"){i.push([t+" ul li a .",ddsmoothmenu.arrowimages.down[0]," { background: url(",this.src,") no-repeat;width:",this.width,"px;height:",this.height,"px;}"].join(""))}--s;o()}).attr("src",ddsmoothmenu.arrowimages.down[1]);e.shadow=this.detectie6&&(e.method==="hover"||e.orientation==="v")?false:e.shadow||this.shadow;jQuery(document).ready(function(t){if(e.shadow&&ddsmoothmenu.css3support){t("body").addClass("ddcss3support")}if(typeof e.contentsource=="object"){ddsmoothmenu.getajaxmenu(t,e)}else{ddsmoothmenu.buildmenu(t,e)}})}};if(function(e){var t=false;try{e('<a href="#"></a>').toggle(function(){},function(){t=true}).trigger("click").trigger("click")}catch(n){}return!t}(jQuery)){(function(){var e=jQuery.fn.toggle;jQuery.extend(jQuery.fn,{toggle:function(t,n){if(!jQuery.isFunction(t)||!jQuery.isFunction(n)){return e.apply(this,arguments)}var r=arguments,i=t.guid||jQuery.guid++,s=0,o=function(e){var n=(jQuery._data(this,"lastToggle"+t.guid)||0)%s;jQuery._data(this,"lastToggle"+t.guid,n+1);e.preventDefault();return r[n].apply(this,arguments)||false};o.guid=i;while(s<r.length){r[s++].guid=i}return this.click(o)}})})()}if(ddsmoothmenu.detectie9){(function(e){function t(e,t){return parseInt(e)+t+"px"}ddsmoothmenu.ie9shadow=function(n){var r=document.defaultView.getComputedStyle(n.get(0),null),i=r.getPropertyValue("box-shadow").split(" "),s={top:r.getPropertyValue("margin-top"),left:r.getPropertyValue("margin-left")};e("head").append(['\n<style title="ie9shadow" type="text/css">',".ddcss3support .ddshadow {"," box-shadow: "+t(i[0],1)+" "+t(i[1],1)+" "+i[2]+" "+i[3]+";","}",".ddcss3support .ddshadow.toplevelshadow {"," opacity: "+(e(".ddcss3support .ddshadow").css("opacity")-.1)+";"," margin-top: "+t(s.top,-1)+";"," margin-left: "+t(s.left,-1)+";","}","</style>\n"].join("\n"));ddsmoothmenu.ie9shadow=function(){}};var n=e.fn.height,r=e.fn.width;e.extend(e.fn,{height:function(){var e=this.get(0);if(this.length<1||arguments.length||e===window||e===document){return n.apply(this,arguments)}return parseFloat(document.defaultView.getComputedStyle(e,null).getPropertyValue("height"))},innerHeight:function(){if(this.length<1){return null}var e=this.height(),t=this.get(0),n=document.defaultView.getComputedStyle(t,null);e+=parseInt(n.getPropertyValue("padding-top"));e+=parseInt(n.getPropertyValue("padding-bottom"));return e},outerHeight:function(e){if(this.length<1){return null}var t=this.innerHeight(),n=this.get(0),r=document.defaultView.getComputedStyle(n,null);t+=parseInt(r.getPropertyValue("border-top-width"));t+=parseInt(r.getPropertyValue("border-bottom-width"));if(e){t+=parseInt(r.getPropertyValue("margin-top"));t+=parseInt(r.getPropertyValue("margin-bottom"))}return t},width:function(){var e=this.get(0);if(this.length<1||arguments.length||e===window||e===document){return r.apply(this,arguments)}return parseFloat(document.defaultView.getComputedStyle(e,null).getPropertyValue("width"))},innerWidth:function(){if(this.length<1){return null}var e=this.width(),t=this.get(0),n=document.defaultView.getComputedStyle(t,null);e+=parseInt(n.getPropertyValue("padding-right"));e+=parseInt(n.getPropertyValue("padding-left"));return e},outerWidth:function(e){if(this.length<1){return null}var t=this.innerWidth(),n=this.get(0),r=document.defaultView.getComputedStyle(n,null);t+=parseInt(r.getPropertyValue("border-right-width"));t+=parseInt(r.getPropertyValue("border-left-width"));if(e){t+=parseInt(r.getPropertyValue("margin-right"));t+=parseInt(r.getPropertyValue("margin-left"))}return t}})})(jQuery)} + +ddsmoothmenu.init({ + mainmenuid: "main_menu", + method: 'toggle', //'hover' (default) or 'toggle' + contentsource: "markup", + }); diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.xml new file mode 100644 index 00000000000..ba8c8450710 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/menu/menu.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>menu.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate.xml new file mode 100644 index 00000000000..2ad56fb6321 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>translate</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.js new file mode 100644 index 00000000000..c22c36e8fd1 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.js @@ -0,0 +1,63 @@ +// https://github.com/jorgejeferson/translate.js/tree/39be8237666a76035fc210a28d8e431f1416579e +(function ($) { + $.fn.translate = function (options) { + var that = this; //a reference to ourselves + var settings = { + css: "trn", + attrs: ["alt", "placeholder", "title"], + lang: "pt", + langDefault: "pt", + }; + settings = $.extend(settings, options || {}); + if (settings.css.lastIndexOf(".", 0) !== 0) { //doesn't start with '.' + settings.css = "." + settings.css; + } + var t = settings.t; + //public methods + this.lang = function (l) { + if (l) { + settings.lang = l; + this.translate(settings); //translate everything + } + return settings.lang; + }; + this.get = function (index) { + var res = index; + + try { + res = t[index][settings.lang]; + } catch (err) { //not found, return index + return index; + } + if (res) { + return res; + } else { + return index; + } + }; + this.g = this.get; + //main + this.find(settings.css).each(function (i) { + var $this = $(this); + + var trn_key = $this.attr("data-trn-key"); + if (!trn_key) { + trn_key = $this.html(); + $this.attr("data-trn-key", trn_key); + } + // Filtering attr + $.each(this.attributes, function () { + if ($.inArray(this.name, settings.attrs) !== -1) { + var trn_attr_key = $this.attr("data-trn-attr"); + if (!trn_attr_key) { + trn_attr_key = $this.attr(this.name); + $this.attr("data-trn-attr", trn_attr_key); + } + $this.attr(this.name, that.get(trn_attr_key)); + } + }); + $this.html(that.get(trn_key)); + }); + return this; + }; +})(jQuery); diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.xml new file mode 100644 index 00000000000..405764df98f --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>jquery.translate.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.js b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.js new file mode 100644 index 00000000000..4946b23e621 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.js @@ -0,0 +1,2 @@ +// https://github.com/jorgejeferson/translate.js/tree/39be8237666a76035fc210a28d8e431f1416579e +!function(a){a.fn.translate=function(b){var c=this,d={css:"trn",attrs:["alt","placeholder","title"],lang:"pt",langDefault:"pt"};d=a.extend(d,b||{}),0!==d.css.lastIndexOf(".",0)&&(d.css="."+d.css);var e=d.t;return this.lang=function(a){return a&&(d.lang=a,this.translate(d)),d.lang},this.get=function(a){var b=a;try{b=e[a][d.lang]}catch(b){return a}return b?b:a},this.g=this.get,this.find(d.css).each(function(b){var e=a(this),f=e.attr("data-trn-key");f||(f=e.html(),e.attr("data-trn-key",f)),a.each(this.attributes,function(){if(a.inArray(this.name,d.attrs)!==-1){var b=e.attr("data-trn-attr");b||(b=e.attr(this.name),e.attr("data-trn-attr",b)),e.attr(this.name,c.get(b))}}),e.html(c.get(f))}),this}}(jQuery); \ No newline at end of file diff --git a/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.xml b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.xml new file mode 100644 index 00000000000..42d9f683ce8 --- /dev/null +++ b/bt5/erp5_officejs/SkinTemplateItem/portal_skins/erp5_officejs_theme/miniPaint/vendor/translate/jquery.translate.min.js.xml @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>__name__</string> </key> + <value> <string>jquery.translate.min.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_officejs/bt/template_keep_last_workflow_history_only_path_list b/bt5/erp5_officejs/bt/template_keep_last_workflow_history_only_path_list index 9e9cc90ee25..9953f2aedc4 100644 --- a/bt5/erp5_officejs/bt/template_keep_last_workflow_history_only_path_list +++ b/bt5/erp5_officejs/bt/template_keep_last_workflow_history_only_path_list @@ -1,7 +1,10 @@ web_page_module/gadget_ckeditor_* web_page_module/gadget_officejs_* web_page_module/gadget_ooffice_* +web_page_module/gadget_image_* web_site_module/officejs_text_editor web_site_module/officejs_text_editor/** web_site_module/officejs_spreadsheet -web_site_module/officejs_spreadsheet/** \ No newline at end of file +web_site_module/officejs_spreadsheet/** +web_site_module/officejs_image_editor +web_site_module/officejs_image_editor/** \ No newline at end of file diff --git a/bt5/erp5_officejs/bt/template_keep_workflow_path_list b/bt5/erp5_officejs/bt/template_keep_workflow_path_list index 9e9cc90ee25..9953f2aedc4 100644 --- a/bt5/erp5_officejs/bt/template_keep_workflow_path_list +++ b/bt5/erp5_officejs/bt/template_keep_workflow_path_list @@ -1,7 +1,10 @@ web_page_module/gadget_ckeditor_* web_page_module/gadget_officejs_* web_page_module/gadget_ooffice_* +web_page_module/gadget_image_* web_site_module/officejs_text_editor web_site_module/officejs_text_editor/** web_site_module/officejs_spreadsheet -web_site_module/officejs_spreadsheet/** \ No newline at end of file +web_site_module/officejs_spreadsheet/** +web_site_module/officejs_image_editor +web_site_module/officejs_image_editor/** \ No newline at end of file diff --git a/bt5/erp5_officejs/bt/template_path_list b/bt5/erp5_officejs/bt/template_path_list index 82928cd7459..7de52a1e92f 100644 --- a/bt5/erp5_officejs/bt/template_path_list +++ b/bt5/erp5_officejs/bt/template_path_list @@ -1,6 +1,10 @@ web_page_module/gadget_ckeditor_* +web_page_module/gadget_image_* +web_page_module/gadget_image_editor_* web_page_module/gadget_officejs_* web_page_module/gadget_ooffice_* +web_site_module/officejs_image_editor +web_site_module/officejs_image_editor/** web_site_module/officejs_spreadsheet web_site_module/officejs_spreadsheet/** web_site_module/officejs_svg_editor -- 2.30.9 From abb4032884c83bb4bebbbc8982464cfab78dfce5 Mon Sep 17 00:00:00 2001 From: Hardik Juneja <hardikj.juneja@nexedi.com> Date: Wed, 9 Nov 2016 09:52:27 +0000 Subject: [PATCH 2/2] epr5_officejs: some small ui changes --- .../gadget_officejs_application_panel_html.html | 2 +- .../gadget_officejs_application_panel_html.xml | 4 ++-- .../gadget_officejs_page_document_list_js.js | 8 ++++++++ .../gadget_officejs_page_document_list_js.xml | 6 +++--- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.html b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.html index 63773a4e039..3295163c3d2 100644 --- a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.html +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.html @@ -37,7 +37,7 @@ <ul data-role="listview" class="ui-listview"> <li><a href="#page=document_list" data-i18n="Document List">Document List</a></li> <li><a href="#page=jio_configurator" data-i18n="Storage Configuration">Storage Configuration</a></li> - <li><a href="#page=sync" data-i18n="Synchronization">Synchronization</a></li> + <li><a href="#page=sync&auto_repair=true" data-i18n="Synchronization">Synchronization</a></li> </ul> </div> </script> diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.xml index b6c378145a8..9fba7f187eb 100644 --- a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.xml +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_application_panel_html.xml @@ -269,7 +269,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>954.2922.61218.8379</string> </value> + <value> <string>955.10506.10902.40072</string> </value> </item> <item> <key> <string>state</string> </key> @@ -287,7 +287,7 @@ </tuple> <state> <tuple> - <float>1474450659.36</float> + <float>1478684772.2</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.js b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.js index aa45a3717f8..84b0e1fb550 100644 --- a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.js +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.js @@ -112,6 +112,14 @@ } }); }); + }) + .declareService(function() { + var gadget = this; + return new RSVP.Queue() + .push(function() { + var search_bar = gadget.props.element.querySelector('.ui-input-text input'); + $(search_bar).select().focus(); + }); }); }(window, RSVP, rJS)); \ No newline at end of file diff --git a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.xml b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.xml index 38b1358212a..b0924c81be5 100644 --- a/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.xml +++ b/bt5/erp5_officejs/PathTemplateItem/web_page_module/gadget_officejs_page_document_list_js.xml @@ -249,7 +249,7 @@ </item> <item> <key> <string>actor</string> </key> - <value> <string>supercedriclen</string> </value> + <value> <string>zope</string> </value> </item> <item> <key> <string>comment</string> </key> @@ -263,7 +263,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>951.28163.54980.41130</string> </value> + <value> <string>955.10498.23035.57378</string> </value> </item> <item> <key> <string>state</string> </key> @@ -281,7 +281,7 @@ </tuple> <state> <tuple> - <float>1464188897.32</float> + <float>1478684301.49</float> <string>UTC</string> </tuple> </state> -- 2.30.9