js-hqx
Version:
javascript & canvas pixel art scaling algorithm
1,660 lines (1,602 loc) • 380 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("hqx", [], factory);
else if(typeof exports === 'object')
exports["hqx"] = factory();
else
root["hqx"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = 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;
};
// ==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
*/
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 = Math; // global to local. SHALL NOT cache abs directly (http://jsperf.com/math-vs-global/2)
var _RGBtoYUV = function _RGBtoYUV(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 _Diff(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 _Interp1(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 _Interp2(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 _Interp3(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 _Interp4(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 _Interp5(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 _Interp6(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 _Interp7(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 _Interp8(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 _Interp9(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 _Interp10(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 getVendorAttribute(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 getImagePixels(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);
};
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// hq 2x
var hq2x = function hq2x(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