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 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 | 1 1 1 1 1 | "use strict"; /*! StackBlur - a fast almost Gaussian Blur For Canvas Version: 0.5 Author: Mario Klingemann Contact: mario@quasimondo.com Website: http://www.quasimondo.com/StackBlurForCanvas Twitter: @quasimondo In case you find this class useful - especially in commercial projects - I am not totally unhappy for a small donation to my PayPal account mario@quasimondo.de Or support me on flattr: https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript 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. */ 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 stackBlurCanvasRGBA(imageData, top_x, top_y, width, height, radius) { if (isNaN(radius) || radius < 1) return; radius |= 0; var pixels = imageData.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; var div = radius + radius + 1; var widthMinus1 = width - 1; var heightMinus1 = height - 1; var radiusPlus1 = radius + 1; var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2; var stackStart = new BlurStack(); var stackEnd; var stack = stackStart; for (i = 1; i < div; i++) { stack = stack.next = new BlurStack(); if (i == radiusPlus1) stackEnd = stack; } stack.next = stackStart; var stackIn = null; var stackOut = null; yw = yi = 0; var mul_sum = mul_table[radius]; var shg_sum = shg_table[radius]; for (y = 0; y < height; y++) { 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 = pixels[yi]); g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); a_out_sum = radiusPlus1 * (pa = pixels[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++) { stack.r = pr; stack.g = pg; stack.b = pb; stack.a = pa; stack = stack.next; } for (i = 1; i < radiusPlus1; i++) { p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2); r_sum += (stack.r = pr = pixels[p]) * (rbs = radiusPlus1 - i); g_sum += (stack.g = pg = pixels[p + 1]) * rbs; b_sum += (stack.b = pb = pixels[p + 2]) * rbs; a_sum += (stack.a = pa = pixels[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 < width; x++) { pixels[yi + 3] = pa = a_sum * mul_sum >> shg_sum; if (pa !== 0) { pa = 255 / pa; pixels[yi] = (r_sum * mul_sum >> shg_sum) * pa; pixels[yi + 1] = (g_sum * mul_sum >> shg_sum) * pa; pixels[yi + 2] = (b_sum * mul_sum >> shg_sum) * pa; } else { pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0; } 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 = pixels[p]; g_in_sum += stackIn.g = pixels[p + 1]; b_in_sum += stackIn.b = pixels[p + 2]; a_in_sum += stackIn.a = pixels[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 += width; } for (x = 0; x < width; x++) { 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 = pixels[yi]); g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]); b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]); a_out_sum = radiusPlus1 * (pa = pixels[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++) { stack.r = pr; stack.g = pg; stack.b = pb; stack.a = pa; stack = stack.next; } yp = width; for (i = 1; i <= radius; i++) { yi = yp + x << 2; r_sum += (stack.r = pr = pixels[yi]) * (rbs = radiusPlus1 - i); g_sum += (stack.g = pg = pixels[yi + 1]) * rbs; b_sum += (stack.b = pb = pixels[yi + 2]) * rbs; a_sum += (stack.a = pa = pixels[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 += width; } } yi = x; stackIn = stackStart; stackOut = stackEnd; for (y = 0; y < height; y++) { p = yi << 2; pixels[p + 3] = pa = a_sum * mul_sum >> shg_sum; if (pa > 0) { pa = 255 / pa; pixels[p] = (r_sum * mul_sum >> shg_sum) * pa; pixels[p + 1] = (g_sum * mul_sum >> shg_sum) * pa; pixels[p + 2] = (b_sum * mul_sum >> shg_sum) * pa; } else { pixels[p] = pixels[p + 1] = pixels[p + 2] = 0; } 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) * width << 2; r_sum += r_in_sum += stackIn.r = pixels[p]; g_sum += g_in_sum += stackIn.g = pixels[p + 1]; b_sum += b_in_sum += stackIn.b = pixels[p + 2]; a_sum += a_in_sum += stackIn.a = pixels[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 += width; } } } function BlurStack() { this.r = 0; this.g = 0; this.b = 0; this.a = 0; this.next = null; } module.exports = { stackBlurCanvasRGBA: stackBlurCanvasRGBA }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9yb290L1NFUlZFUi9pbWdseS1zZGstaHRtbDUvc3JjL2pzL3ZlbmRvci9zdGFjay1ibHVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENiLElBQUksU0FBUyxHQUFHLENBQ1IsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUMvRCxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQy9ELEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFDL0QsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUMvRCxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQy9ELEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFDL0QsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUMvRCxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQy9ELEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFDL0QsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUMvRCxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQy9ELEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFDL0QsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUMvRCxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQy9ELEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFDL0QsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQzs7QUFHckUsSUFBSSxTQUFTLEdBQUcsQ0FDVCxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQ2hFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDOUQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM5RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzlELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDOUQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM5RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzlELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDOUQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM5RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzlELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDOUQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM5RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQzlELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDOUQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUM5RCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxDQUFDOztBQUVqRSxTQUFTLG1CQUFtQixDQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUM1RTtBQUNFLE1BQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUcsT0FBTztBQUMxQyxRQUFNLElBQUksQ0FBQyxDQUFDOztBQUVaLE1BQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7O0FBRTVCLE1BQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFDdEQsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUMxQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQ3RDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7O0FBRXBCLE1BQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQUksV0FBVyxHQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFJLFdBQVcsR0FBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQUksU0FBUyxHQUFHLFdBQVcsSUFBSyxXQUFXLEdBQUcsQ0FBQyxDQUFBLEFBQUUsR0FBRyxDQUFDLENBQUM7O0FBRXRELE1BQUksVUFBVSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDakMsTUFBSSxRQUFRLENBQUM7QUFDYixNQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDdkIsT0FBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQ3pCO0FBQ0UsU0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNyQyxRQUFLLENBQUMs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QyxDQUFDLEFBQUUsQ0FBQzs7QUFFakMsY0FBUSxJQUFJLEVBQUUsQ0FBQztBQUNmLGNBQVEsSUFBSSxFQUFFLENBQUM7QUFDZixjQUFRLElBQUksRUFBRSxDQUFDO0FBQ2YsY0FBUSxJQUFJLEVBQUUsQ0FBQzs7QUFFZixjQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQzs7QUFFekIsUUFBRSxJQUFJLEtBQUssQ0FBQztLQUNiO0dBQ0Y7Q0FDRjs7QUFFRCxTQUFTLFNBQVMsR0FDbEI7QUFDRSxNQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLE1BQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsTUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxNQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLE1BQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ2xCOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUc7QUFDZixxQkFBbUIsRUFBRSxtQkFBbUI7Q0FDekMsQ0FBQyIsImZpbGUiOiIvcm9vdC9TRVJWRVIvaW1nbHktc2RrLWh0bWw1L3NyYy9qcy92ZW5kb3Ivc3RhY2stYmx1ci5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyohXG5cblN0YWNrQmx1ciAtIGEgZmFzdCBhbG1vc3QgR2F1c3NpYW4gQmx1ciBGb3IgQ2FudmFzXG5cblZlcnNpb246ICAwLjVcbkF1dGhvcjogICBNYXJpbyBLbGluZ2VtYW5uXG5Db250YWN0OiAgbWFyaW9AcXVhc2ltb25kby5jb21cbldlYnNpdGU6ICBodHRwOi8vd3d3LnF1YXNpbW9uZG8uY29tL1N0YWNrQmx1ckZvckNhbnZhc1xuVHdpdHRlcjogIEBxdWFzaW1vbmRvXG5cbkluIGNhc2UgeW91IGZpbmQgdGhpcyBjbGFzcyB1c2VmdWwgLSBlc3BlY2lhbGx5IGluIGNvbW1lcmNpYWwgcHJvamVjdHMgLVxuSSBhbSBub3QgdG90YWxseSB1bmhhcHB5IGZvciBhIHNtYWxsIGRvbmF0aW9uIHRvIG15IFBheVBhbCBhY2NvdW50XG5tYXJpb0BxdWFzaW1vbmRvLmRlXG5cbk9yIHN1cHBvcnQgbWUgb24gZmxhdHRyOlxuaHR0cHM6Ly9mbGF0dHIuY29tL3RoaW5nLzcyNzkxL1N0YWNrQmx1ci1hLWZhc3QtYWxtb3N0LUdhdXNzaWFuLUJsdXItRWZmZWN0LWZvci1DYW52YXNKYXZhc2NyaXB0XG5cbkNvcHlyaWdodCAoYykgMjAxMCBNYXJpbyBLbGluZ2VtYW5uXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uXG5vYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvblxuZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0XG5yZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSxcbmNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcblNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nXG5jb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZVxuaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsXG5FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVNcbk9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG5OT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxuSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksXG5XSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbkZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Jcbk9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbnZhciBtdWxfdGFibGUgPSBbXG4gICAgICAgIDUxMiw1MTIsNDU2LDUxMiwzMjgsNDU2LDMzNSw1MTIsNDA1LDMyOCwyNzEsNDU2LDM4OCwzMzUsMjkyLDUxMixcbiAgICAgICAgNDU0LDQwNSwzNjQsMzI4LDI5OCwyNzEsNDk2LDQ1Niw0MjAsMzg4LDM2MCwzMzUsMzEyLDI5MiwyNzMsNTEyLFxuICAgICAgICA0ODIsNDU0LDQyOCw0MDUsMzgzLDM2NCwzNDUsMzI4LDMxMiwyOTgsMjg0LDI3MSwyNTksNDk2LDQ3NSw0NTYsXG4gICAgICAgIDQzNyw0MjAsNDA0LDM4OCwzNzQsMzYwLDM0NywzMzUsMzIzLDMxMiwzMDIsMjkyLDI4MiwyNzMsMjY1LDUxMixcbiAgICAgICAgNDk3LDQ4Miw0NjgsNDU0LDQ0MSw0MjgsNDE3LDQwNSwzOTQsMzgzLDM3MywzNjQsMzU0LDM0NSwzMzcsMzI4LFxuICAgICAgICAzMjAsMzEyLDMwNSwyOTgsMjkxLDI4NCwyNzgsMjcxLDI2NSwyNTksNTA3LDQ5Niw0ODUsNDc1LDQ2NSw0NTYsXG4gICAgICAgIDQ0Niw0MzcsNDI4LDQyMCw0MTIsNDA0LDM5NiwzODgsMzgxLDM3NCwzNjcsMzYwLDM1NCwzNDcsMzQxLDMzNSxcbiAgICAgICAgMzI5LDMyMywzMTgsMzEyLDMwNywzMDIsMjk3LDI5MiwyODcsMjgyLDI3OCwyNzMsMjY5LDI2NSwyNjEsNTEyLFxuICAgICAgICA1MDUsNDk3LDQ4OSw0ODIsNDc1LDQ2OCw0NjEsNDU0LDQ0Nyw0NDEsNDM1LDQyOCw0MjIsNDE3LDQxMSw0MDUsXG4gICAgICAgIDM5OSwzOTQsMzg5LDM4MywzNzgsMzczLDM2OCwzNjQsMzU5LDM1NCwzNTAsMzQ1LDM0MSwzMzcsMzMyLDMyOCxcbiAgICAgICAgMzI0LDMyMCwzMTYsMzEyLDMwOSwzMDUsMzAxLDI5OCwyOTQsMjkxLDI4NywyODQsMjgxLDI3OCwyNzQsMjcxLFxuICAgICAgICAyNjgsMjY1LDI2MiwyNTksMjU3LDUwNyw1MDEsNDk2LDQ5MSw0ODUsNDgwLDQ3NSw0NzAsNDY1LDQ2MCw0NTYsXG4gICAgICAgIDQ1MSw0NDYsNDQyLDQzNyw0MzMsNDI4LDQyNCw0MjAsNDE2LDQxMiw0MDgsNDA0LDQwMCwzOTYsMzkyLDM4OCxcbiAgICAgICAgMzg1LDM4MSwzNzcsMzc0LDM3MCwzNjcsMzYzLDM2MCwzNTcsMzU0LDM1MCwzNDcsMzQ0LDM0MSwzMzgsMzM1LFxuICAgICAgICAzMzIsMzI5LDMyNiwzMjMsMzIwLDMxOCwzMTUsMzEyLDMxMCwzMDcsMzA0LDMwMiwyOTksMjk3LDI5NCwyOTIsXG4gICAgICAgIDI4OSwyODcsMjg1LDI4MiwyODAsMjc4LDI3NSwyNzMsMjcxLDI2OSwyNjcsMjY1LDI2MywyNjEsMjU5XTtcblxuXG52YXIgc2hnX3RhYmxlID0gW1xuICAgICAgIDksIDExLCAxMiwgMTMsIDEzLCAxNCwgMTQsIDE1LCAxNSwgMTUsIDE1LCAxNiwgMTYsIDE2LCAxNiwgMTcsXG4gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTksXG4gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsXG4gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjEsXG4gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsXG4gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsXG4gICAgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsXG4gICAgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjMsXG4gICAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsXG4gICAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsXG4gICAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsXG4gICAgMjMsIDIzLCAyMywgMjMsIDIzLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsXG4gICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsXG4gICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsXG4gICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsXG4gICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCBdO1xuXG5mdW5jdGlvbiBzdGFja0JsdXJDYW52YXNSR0JBKCBpbWFnZURhdGEsIHRvcF94LCB0b3BfeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzIClcbntcbiAgaWYgKCBpc05hTihyYWRpdXMpIHx8IHJhZGl1cyA8IDEgKSByZXR1cm47XG4gIHJhZGl1cyB8PSAwO1xuXG4gIHZhciBwaXhlbHMgPSBpbWFnZURhdGEuZGF0YTtcblxuICB2YXIgeCwgeSwgaSwgcCwgeXAsIHlpLCB5dywgcl9zdW0sIGdfc3VtLCBiX3N1bSwgYV9zdW0sXG4gIHJfb3V0X3N1bSwgZ19vdXRfc3VtLCBiX291dF9zdW0sIGFfb3V0X3N1bSxcbiAgcl9pbl9zdW0sIGdfaW5fc3VtLCBiX2luX3N1bSwgYV9pbl9zdW0sXG4gIHByLCBwZywgcGIsIHBhLCByYnM7XG5cbiAgdmFyIGRpdiA9IHJhZGl1cyArIHJhZGl1cyArIDE7XG4gIHZhciB3aWR0aE1pbnVzMSAgPSB3aWR0aCAtIDE7XG4gIHZhciBoZWlnaHRNaW51czEgPSBoZWlnaHQgLSAxO1xuICB2YXIgcmFkaXVzUGx1czEgID0gcmFkaXVzICsgMTtcbiAgdmFyIHN1bUZhY3RvciA9IHJhZGl1c1BsdXMxICogKCByYWRpdXNQbHVzMSArIDEgKSAvIDI7XG5cbiAgdmFyIHN0YWNrU3RhcnQgPSBuZXcgQmx1clN0YWNrKCk7XG4gIHZhciBzdGFja0VuZDtcbiAgdmFyIHN0YWNrID0gc3RhY2tTdGFydDtcbiAgZm9yICggaSA9IDE7IGkgPCBkaXY7IGkrKyApXG4gIHtcbiAgICBzdGFjayA9IHN0YWNrLm5leHQgPSBuZXcgQmx1clN0YWNrKCk7XG4gICAgaWYgKCBpID09IHJhZGl1c1BsdXMxICkgc3RhY2tFbmQgPSBzdGFjaztcbiAgfVxuICBzdGFjay5uZXh0ID0gc3RhY2tTdGFydDtcbiAgdmFyIHN0YWNrSW4gPSBudWxsO1xuICB2YXIgc3RhY2tPdXQgPSBudWxsO1xuXG4gIHl3ID0geWkgPSAwO1xuXG4gIHZhciBtdWxfc3VtID0gbXVsX3RhYmxlW3JhZGl1c107XG4gIHZhciBzaGdfc3VtID0gc2hnX3RhYmxlW3JhZGl1c107XG5cbiAgZm9yICggeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKyApXG4gIHtcbiAgICByX2luX3N1bSA9IGdfaW5fc3VtID0gYl9pbl9zdW0gPSBhX2luX3N1bSA9IHJfc3VtID0gZ19zdW0gPSBiX3N1bSA9IGFfc3VtID0gMDtcblxuICAgIHJfb3V0X3N1bSA9IHJhZGl1c1BsdXMxICogKCBwciA9IHBpeGVsc1t5aV0gKTtcbiAgICBnX291dF9zdW0gPSByYWRpdXNQbHVzMSAqICggcGcgPSBwaXhlbHNbeWkrMV0gKTtcbiAgICBiX291dF9zdW0gPSByYWRpdXNQbHVzMSAqICggcGIgPSBwaXhlbHNbeWkrMl0gKTtcbiAgICBhX291dF9zdW0gPSByYWRpdXNQbHVzMSAqICggcGEgPSBwaXhlbHNbeWkrM10gKTtcblxuICAgIHJfc3VtICs9IHN1bUZhY3RvciAqIHByO1xuICAgIGdfc3VtICs9IHN1bUZhY3RvciAqIHBnO1xuICAgIGJfc3VtICs9IHN1bUZhY3RvciAqIHBiO1xuICAgIGFfc3VtICs9IHN1bUZhY3RvciAqIHBhO1xuXG4gICAgc3RhY2sgPSBzdGFja1N0YXJ0O1xuXG4gICAgZm9yKCBpID0gMDsgaSA8IHJhZGl1c1BsdXMxOyBpKysgKVxuICAgIHtcbiAgICAgIHN0YWNrLnIgPSBwcjtcbiAgICAgIHN0YWNrLmcgPSBwZztcbiAgICAgIHN0YWNrLmIgPSBwYjtcbiAgICAgIHN0YWNrLmEgPSBwYTtcbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cbiAgICBmb3IoIGkgPSAxOyBpIDwgcmFkaXVzUGx1czE7IGkrKyApXG4gICAge1xuICAgICAgcCA9IHlpICsgKCggd2lkdGhNaW51czEgPCBpID8gd2lkdGhNaW51czEgOiBpICkgPDwgMiApO1xuICAgICAgcl9zdW0gKz0gKCBzdGFjay5yID0gKCBwciA9IHBpeGVsc1twXSkpICogKCByYnMgPSByYWRpdXNQbHVzMSAtIGkgKTtcbiAgICAgIGdfc3VtICs9ICggc3RhY2suZyA9ICggcGcgPSBwaXhlbHNbcCsxXSkpICogcmJzO1xuICAgICAgYl9zdW0gKz0gKCBzdGFjay5iID0gKCBwYiA9IHBpeGVsc1twKzJdKSkgKiByYnM7XG4gICAgICBhX3N1bSArPSAoIHN0YWNrLmEgPSAoIHBhID0gcGl4ZWxzW3ArM10pKSAqIHJicztcblxuICAgICAgcl9pbl9zdW0gKz0gcHI7XG4gICAgICBnX2luX3N1bSArPSBwZztcbiAgICAgIGJfaW5fc3VtICs9IHBiO1xuICAgICAgYV9pbl9zdW0gKz0gcGE7XG5cbiAgICAgIHN0YWNrID0gc3RhY2submV4dDtcbiAgICB9XG5cblxuICAgIHN0YWNrSW4gPSBzdGFja1N0YXJ0O1xuICAgIHN0YWNrT3V0ID0gc3RhY2tFbmQ7XG4gICAgZm9yICggeCA9IDA7IHggPCB3aWR0aDsgeCsrIClcbiAgICB7XG4gICAgICBwaXhlbHNbeWkrM10gPSBwYSA9IChhX3N1bSAqIG11bF9zdW0pID4+IHNoZ19zdW07XG4gICAgICBpZiAoIHBhICE9PSAwIClcbiAgICAgIHtcbiAgICAgICAgcGEgPSAyNTUgLyBwYTtcbiAgICAgICAgcGl4ZWxzW3lpXSAgID0gKChyX3N1bSAqIG11bF9zdW0pID4+IHNoZ19zdW0pICogcGE7XG4gICAgICAgIHBpeGVsc1t5aSsxXSA9ICgoZ19zdW0gKiBtdWxfc3VtKSA+PiBzaGdfc3VtKSAqIHBhO1xuICAgICAgICBwaXhlbHNbeWkrMl0gPSAoKGJfc3VtICogbXVsX3N1bSkgPj4gc2hnX3N1bSkgKiBwYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpeGVsc1t5aV0gPSBwaXhlbHNbeWkrMV0gPSBwaXhlbHNbeWkrMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICByX3N1bSAtPSByX291dF9zdW07XG4gICAgICBnX3N1bSAtPSBnX291dF9zdW07XG4gICAgICBiX3N1bSAtPSBiX291dF9zdW07XG4gICAgICBhX3N1bSAtPSBhX291dF9zdW07XG5cbiAgICAgIHJfb3V0X3N1bSAtPSBzdGFja0luLnI7XG4gICAgICBnX291dF9zdW0gLT0gc3RhY2tJbi5nO1xuICAgICAgYl9vdXRfc3VtIC09IHN0YWNrSW4uYjtcbiAgICAgIGFfb3V0X3N1bSAtPSBzdGFja0luLmE7XG5cbiAgICAgIHAgPSAgKCB5dyArICggKCBwID0geCArIHJhZGl1cyArIDEgKSA8IHdpZHRoTWludXMxID8gcCA6IHdpZHRoTWludXMxICkgKSA8PCAyO1xuXG4gICAgICByX2luX3N1bSArPSAoIHN0YWNrSW4uciA9IHBpeGVsc1twXSk7XG4gICAgICBnX2luX3N1bSArPSAoIHN0YWNrSW4uZyA9IHBpeGVsc1twKzFdKTtcbiAgICAgIGJfaW5fc3VtICs9ICggc3RhY2tJbi5iID0gcGl4ZWxzW3ArMl0pO1xuICAgICAgYV9pbl9zdW0gKz0gKCBzdGFja0luLmEgPSBwaXhlbHNbcCszXSk7XG5cbiAgICAgIHJfc3VtICs9IHJfaW5fc3VtO1xuICAgICAgZ19zdW0gKz0gZ19pbl9zdW07XG4gICAgICBiX3N1bSArPSBiX2luX3N1bTtcbiAgICAgIGFfc3VtICs9IGFfaW5fc3VtO1xuXG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuXG4gICAgICByX291dF9zdW0gKz0gKCBwciA9IHN0YWNrT3V0LnIgKTtcbiAgICAgIGdfb3V0X3N1bSArPSAoIHBnID0gc3RhY2tPdXQuZyApO1xuICAgICAgYl9vdXRfc3VtICs9ICggcGIgPSBzdGFja091dC5iICk7XG4gICAgICBhX291dF9zdW0gKz0gKCBwYSA9IHN0YWNrT3V0LmEgKTtcblxuICAgICAgcl9pbl9zdW0gLT0gcHI7XG4gICAgICBnX2luX3N1bSAtPSBwZztcbiAgICAgIGJfaW5fc3VtIC09IHBiO1xuICAgICAgYV9pbl9zdW0gLT0gcGE7XG5cbiAgICAgIHN0YWNrT3V0ID0gc3RhY2tPdXQubmV4dDtcblxuICAgICAgeWkgKz0gNDtcbiAgICB9XG4gICAgeXcgKz0gd2lkdGg7XG4gIH1cblxuXG4gIGZvciAoIHggPSAwOyB4IDwgd2lkdGg7IHgrKyApXG4gIHtcbiAgICBnX2luX3N1bSA9IGJfaW5fc3VtID0gYV9pbl9zdW0gPSByX2luX3N1bSA9IGdfc3VtID0gYl9zdW0gPSBhX3N1bSA9IHJfc3VtID0gMDtcblxuICAgIHlpID0geCA8PCAyO1xuICAgIHJfb3V0X3N1bSA9IHJhZGl1c1BsdXMxICogKCBwciA9IHBpeGVsc1t5aV0pO1xuICAgIGdfb3V0X3N1bSA9IHJhZGl1c1BsdXMxICogKCBwZyA9IHBpeGVsc1t5aSsxXSk7XG4gICAgYl9vdXRfc3VtID0gcmFkaXVzUGx1czEgKiAoIHBiID0gcGl4ZWxzW3lpKzJdKTtcbiAgICBhX291dF9zdW0gPSByYWRpdXNQbHVzMSAqICggcGEgPSBwaXhlbHNbeWkrM10pO1xuXG4gICAgcl9zdW0gKz0gc3VtRmFjdG9yICogcHI7XG4gICAgZ19zdW0gKz0gc3VtRmFjdG9yICogcGc7XG4gICAgYl9zdW0gKz0gc3VtRmFjdG9yICogcGI7XG4gICAgYV9zdW0gKz0gc3VtRmFjdG9yICogcGE7XG5cbiAgICBzdGFjayA9IHN0YWNrU3RhcnQ7XG5cbiAgICBmb3IoIGkgPSAwOyBpIDwgcmFkaXVzUGx1czE7IGkrKyApXG4gICAge1xuICAgICAgc3RhY2suciA9IHByO1xuICAgICAgc3RhY2suZyA9IHBnO1xuICAgICAgc3RhY2suYiA9IHBiO1xuICAgICAgc3RhY2suYSA9IHBhO1xuICAgICAgc3RhY2sgPSBzdGFjay5uZXh0O1xuICAgIH1cblxuICAgIHlwID0gd2lkdGg7XG5cbiAgICBmb3IoIGkgPSAxOyBpIDw9IHJhZGl1czsgaSsrIClcbiAgICB7XG4gICAgICB5aSA9ICggeXAgKyB4ICkgPDwgMjtcblxuICAgICAgcl9zdW0gKz0gKCBzdGFjay5yID0gKCBwciA9IHBpeGVsc1t5aV0pKSAqICggcmJzID0gcmFkaXVzUGx1czEgLSBpICk7XG4gICAgICBnX3N1bSArPSAoIHN0YWNrLmcgPSAoIHBnID0gcGl4ZWxzW3lpKzFdKSkgKiByYnM7XG4gICAgICBiX3N1bSArPSAoIHN0YWNrLmIgPSAoIHBiID0gcGl4ZWxzW3lpKzJdKSkgKiByYnM7XG4gICAgICBhX3N1bSArPSAoIHN0YWNrLmEgPSAoIHBhID0gcGl4ZWxzW3lpKzNdKSkgKiByYnM7XG5cbiAgICAgIHJfaW5fc3VtICs9IHByO1xuICAgICAgZ19pbl9zdW0gKz0gcGc7XG4gICAgICBiX2luX3N1bSArPSBwYjtcbiAgICAgIGFfaW5fc3VtICs9IHBhO1xuXG4gICAgICBzdGFjayA9IHN0YWNrLm5leHQ7XG5cbiAgICAgIGlmKCBpIDwgaGVpZ2h0TWludXMxIClcbiAgICAgIHtcbiAgICAgICAgeXAgKz0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgeWkgPSB4O1xuICAgIHN0YWNrSW4gPSBzdGFja1N0YXJ0O1xuICAgIHN0YWNrT3V0ID0gc3RhY2tFbmQ7XG4gICAgZm9yICggeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKyApXG4gICAge1xuICAgICAgcCA9IHlpIDw8IDI7XG4gICAgICBwaXhlbHNbcCszXSA9IHBhID0gKGFfc3VtICogbXVsX3N1bSkgPj4gc2hnX3N1bTtcbiAgICAgIGlmICggcGEgPiAwIClcbiAgICAgIHtcbiAgICAgICAgcGEgPSAyNTUgLyBwYTtcbiAgICAgICAgcGl4ZWxzW3BdICAgPSAoKHJfc3VtICogbXVsX3N1bSkgPj4gc2hnX3N1bSApICogcGE7XG4gICAgICAgIHBpeGVsc1twKzFdID0gKChnX3N1bSAqIG11bF9zdW0pID4+IHNoZ19zdW0gKSAqIHBhO1xuICAgICAgICBwaXhlbHNbcCsyXSA9ICgoYl9zdW0gKiBtdWxfc3VtKSA+PiBzaGdfc3VtICkgKiBwYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpeGVsc1twXSA9IHBpeGVsc1twKzFdID0gcGl4ZWxzW3ArMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICByX3N1bSAtPSByX291dF9zdW07XG4gICAgICBnX3N1bSAtPSBnX291dF9zdW07XG4gICAgICBiX3N1bSAtPSBiX291dF9zdW07XG4gICAgICBhX3N1bSAtPSBhX291dF9zdW07XG5cbiAgICAgIHJfb3V0X3N1bSAtPSBzdGFja0luLnI7XG4gICAgICBnX291dF9zdW0gLT0gc3RhY2tJbi5nO1xuICAgICAgYl9vdXRfc3VtIC09IHN0YWNrSW4uYjtcbiAgICAgIGFfb3V0X3N1bSAtPSBzdGFja0luLmE7XG5cbiAgICAgIHAgPSAoIHggKyAoKCAoIHAgPSB5ICsgcmFkaXVzUGx1czEpIDwgaGVpZ2h0TWludXMxID8gcCA6IGhlaWdodE1pbnVzMSApICogd2lkdGggKSkgPDwgMjtcblxuICAgICAgcl9zdW0gKz0gKCByX2luX3N1bSArPSAoIHN0YWNrSW4uciA9IHBpeGVsc1twXSkpO1xuICAgICAgZ19zdW0gKz0gKCBnX2luX3N1bSArPSAoIHN0YWNrSW4uZyA9IHBpeGVsc1twKzFdKSk7XG4gICAgICBiX3N1bSArPSAoIGJfaW5fc3VtICs9ICggc3RhY2tJbi5iID0gcGl4ZWxzW3ArMl0pKTtcbiAgICAgIGFfc3VtICs9ICggYV9pbl9zdW0gKz0gKCBzdGFja0luLmEgPSBwaXhlbHNbcCszXSkpO1xuXG4gICAgICBzdGFja0luID0gc3RhY2tJbi5uZXh0O1xuXG4gICAgICByX291dF9zdW0gKz0gKCBwciA9IHN0YWNrT3V0LnIgKTtcbiAgICAgIGdfb3V0X3N1bSArPSAoIHBnID0gc3RhY2tPdXQuZyApO1xuICAgICAgYl9vdXRfc3VtICs9ICggcGIgPSBzdGFja091dC5iICk7XG4gICAgICBhX291dF9zdW0gKz0gKCBwYSA9IHN0YWNrT3V0LmEgKTtcblxuICAgICAgcl9pbl9zdW0gLT0gcHI7XG4gICAgICBnX2luX3N1bSAtPSBwZztcbiAgICAgIGJfaW5fc3VtIC09IHBiO1xuICAgICAgYV9pbl9zdW0gLT0gcGE7XG5cbiAgICAgIHN0YWNrT3V0ID0gc3RhY2tPdXQubmV4dDtcblxuICAgICAgeWkgKz0gd2lkdGg7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEJsdXJTdGFjaygpXG57XG4gIHRoaXMuciA9IDA7XG4gIHRoaXMuZyA9IDA7XG4gIHRoaXMuYiA9IDA7XG4gIHRoaXMuYSA9IDA7XG4gIHRoaXMubmV4dCA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdGFja0JsdXJDYW52YXNSR0JBOiBzdGFja0JsdXJDYW52YXNSR0JBXG59O1xuIl19 |