1/*! pdfmake v0.1.36, @license MIT, @link http://pdfmake.org */ 2(function webpackUniversalModuleDefinition(root, factory) { 3 if(typeof exports === 'object' && typeof module === 'object') 4 module.exports = factory(); 5 else if(typeof define === 'function' && define.amd) 6 define([], factory); 7 else { 8 var a = factory(); 9 for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; 10 } 11})(typeof self !== 'undefined' ? self : this, function() { 12return /******/ (function(modules) { // webpackBootstrap 13/******/ // The module cache 14/******/ var installedModules = {}; 15/******/ 16/******/ // The require function 17/******/ function __webpack_require__(moduleId) { 18/******/ 19/******/ // Check if module is in cache 20/******/ if(installedModules[moduleId]) { 21/******/ return installedModules[moduleId].exports; 22/******/ } 23/******/ // Create a new module (and put it into the cache) 24/******/ var module = installedModules[moduleId] = { 25/******/ i: moduleId, 26/******/ l: false, 27/******/ exports: {} 28/******/ }; 29/******/ 30/******/ // Execute the module function 31/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 32/******/ 33/******/ // Flag the module as loaded 34/******/ module.l = true; 35/******/ 36/******/ // Return the exports of the module 37/******/ return module.exports; 38/******/ } 39/******/ 40/******/ 41/******/ // expose the modules object (__webpack_modules__) 42/******/ __webpack_require__.m = modules; 43/******/ 44/******/ // expose the module cache 45/******/ __webpack_require__.c = installedModules; 46/******/ 47/******/ // define getter function for harmony exports 48/******/ __webpack_require__.d = function(exports, name, getter) { 49/******/ if(!__webpack_require__.o(exports, name)) { 50/******/ Object.defineProperty(exports, name, { 51/******/ configurable: false, 52/******/ enumerable: true, 53/******/ get: getter 54/******/ }); 55/******/ } 56/******/ }; 57/******/ 58/******/ // getDefaultExport function for compatibility with non-harmony modules 59/******/ __webpack_require__.n = function(module) { 60/******/ var getter = module && module.__esModule ? 61/******/ function getDefault() { return module['default']; } : 62/******/ function getModuleExports() { return module; }; 63/******/ __webpack_require__.d(getter, 'a', getter); 64/******/ return getter; 65/******/ }; 66/******/ 67/******/ // Object.prototype.hasOwnProperty.call 68/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 69/******/ 70/******/ // __webpack_public_path__ 71/******/ __webpack_require__.p = ""; 72/******/ 73/******/ // Load entry module and return exports 74/******/ return __webpack_require__(__webpack_require__.s = 122); 75/******/ }) 76/************************************************************************/ 77/******/ ([ 78/* 0 */ 79/***/ (function(module, exports, __webpack_require__) { 80 81"use strict"; 82 83 84function isString(variable) { 85 return typeof variable === 'string' || variable instanceof String; 86} 87 88function isNumber(variable) { 89 return typeof variable === 'number' || variable instanceof Number; 90} 91 92function isBoolean(variable) { 93 return typeof variable === 'boolean'; 94} 95 96function isArray(variable) { 97 return Array.isArray(variable); 98} 99 100function isFunction(variable) { 101 return typeof variable === 'function'; 102} 103 104function isObject(variable) { 105 return variable !== null && typeof variable === 'object'; 106} 107 108function isNull(variable) { 109 return variable === null; 110} 111 112function isUndefined(variable) { 113 return variable === undefined; 114} 115 116function pack() { 117 var result = {}; 118 119 for (var i = 0, l = arguments.length; i < l; i++) { 120 var obj = arguments[i]; 121 122 if (obj) { 123 for (var key in obj) { 124 if (obj.hasOwnProperty(key)) { 125 result[key] = obj[key]; 126 } 127 } 128 } 129 } 130 131 return result; 132} 133 134function offsetVector(vector, x, y) { 135 switch (vector.type) { 136 case 'ellipse': 137 case 'rect': 138 vector.x += x; 139 vector.y += y; 140 break; 141 case 'line': 142 vector.x1 += x; 143 vector.x2 += x; 144 vector.y1 += y; 145 vector.y2 += y; 146 break; 147 case 'polyline': 148 for (var i = 0, l = vector.points.length; i < l; i++) { 149 vector.points[i].x += x; 150 vector.points[i].y += y; 151 } 152 break; 153 } 154} 155 156function fontStringify(key, val) { 157 if (key === 'font') { 158 return 'font'; 159 } 160 return val; 161} 162 163module.exports = { 164 isString: isString, 165 isNumber: isNumber, 166 isBoolean: isBoolean, 167 isArray: isArray, 168 isFunction: isFunction, 169 isObject: isObject, 170 isNull: isNull, 171 isUndefined: isUndefined, 172 pack: pack, 173 fontStringify: fontStringify, 174 offsetVector: offsetVector 175}; 176 177 178/***/ }), 179/* 1 */ 180/***/ (function(module, exports, __webpack_require__) { 181 182"use strict"; 183/* WEBPACK VAR INJECTION */(function(global) {/*! 184 * The buffer module from node.js, for the browser. 185 * 186 * @author Feross Aboukhadijeh <[email protected]> <http://feross.org> 187 * @license MIT 188 */ 189/* eslint-disable no-proto */ 190 191 192 193var base64 = __webpack_require__(124) 194var ieee754 = __webpack_require__(125) 195var isArray = __webpack_require__(76
vendor: 6,472 bytes, lines 195-417
195) 196 197exports.Buffer = Buffer 198exports.SlowBuffer = SlowBuffer 199exports.INSPECT_MAX_BYTES = 50 200 201/** 202 * If `Buffer.TYPED_ARRAY_SUPPORT`: 203 * === true Use Uint8Array implementation (fastest) 204 * === false Use Object implementation (most compatible, even IE6) 205 * 206 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, 207 * Opera 11.6+, iOS 4.2+. 208 * 209 * Due to various browser bugs, sometimes the Object implementation will be used even 210 * when the browser supports typed arrays. 211 * 212 * Note: 213 * 214 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, 215 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. 216 * 217 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. 218 * 219 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of 220 * incorrect length in some situations. 221 222 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they 223 * get the Object implementation, which is slower but behaves correctly. 224 */ 225Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined 226 ? global.TYPED_ARRAY_SUPPORT 227 : typedArraySupport() 228 229/* 230 * Export kMaxLength after typed array support is determined. 231 */ 232exports.kMaxLength = kMaxLength() 233 234function typedArraySupport () { 235 try { 236 var arr = new Uint8Array(1) 237 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} 238 return arr.foo() === 42 && // typed array instances can be augmented 239 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` 240 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` 241 } catch (e) { 242 return false 243 } 244} 245 246function kMaxLength () { 247 return Buffer.TYPED_ARRAY_SUPPORT 248 ? 0x7fffffff 249 : 0x3fffffff 250} 251 252function createBuffer (that, length) { 253 if (kMaxLength() < length) { 254 throw new RangeError('Invalid typed array length') 255 } 256 if (Buffer.TYPED_ARRAY_SUPPORT) { 257 // Return an augmented `Uint8Array` instance, for best performance 258 that = new Uint8Array(length) 259 that.__proto__ = Buffer.prototype 260 } else { 261 // Fallback: Return an object instance of the Buffer class 262 if (that === null) { 263 that = new Buffer(length) 264 } 265 that.length = length 266 } 267 268 return that 269} 270 271/** 272 * The Buffer constructor returns instances of `Uint8Array` that have their 273 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of 274 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods 275 * and the `Uint8Array` methods. Square bracket notation works as expected -- it 276 * returns a single octet. 277 * 278 * The `Uint8Array` prototype remains unmodified. 279 */ 280 281function Buffer (arg, encodingOrOffset, length) { 282 if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { 283 return new Buffer(arg, encodingOrOffset, length) 284 } 285 286 // Common case. 287 if (typeof arg === 'number') { 288 if (typeof encodingOrOffset === 'string') { 289 throw new Error( 290 'If encoding is specified then the first argument must be a string' 291 ) 292 } 293 return allocUnsafe(this, arg) 294 } 295 return from(this, arg, encodingOrOffset, length) 296} 297 298Buffer.poolSize = 8192 // not used by this implementation 299 300// TODO: Legacy, not needed anymore. Remove in next major version. 301Buffer._augment = function (arr) { 302 arr.__proto__ = Buffer.prototype 303 return arr 304} 305 306function from (that, value, encodingOrOffset, length) { 307 if (typeof value === 'number') { 308 throw new TypeError('"value" argument must not be a number') 309 } 310 311 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { 312 return fromArrayBuffer(that, value, encodingOrOffset, length) 313 } 314 315 if (typeof value === 'string') { 316 return fromString(that, value, encodingOrOffset) 317 } 318 319 return fromObject(that, value) 320} 321 322/** 323 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError 324 * if value is a number. 325 * Buffer.from(str[, encoding]) 326 * Buffer.from(array) 327 * Buffer.from(buffer) 328 * Buffer.from(arrayBuffer[, byteOffset[, length]]) 329 **/ 330Buffer.from = function (value, encodingOrOffset, length) { 331 return from(null, value, encodingOrOffset, length) 332} 333 334if (Buffer.TYPED_ARRAY_SUPPORT) { 335 Buffer.prototype.__proto__ = Uint8Array.prototype 336 Buffer.__proto__ = Uint8Array 337 if (typeof Symbol !== 'undefined' && Symbol.species && 338 Buffer[Symbol.species] === Buffer) { 339 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 340 Object.defineProperty(Buffer, Symbol.species, { 341 value: null, 342 configurable: true 343 }) 344 } 345} 346 347function assertSize (size) { 348 if (typeof size !== 'number') { 349 throw new TypeError('"size" argument must be a number') 350 } else if (size < 0) { 351 throw new RangeError('"size" argument must not be negative') 352 } 353} 354 355function alloc (that, size, fill, encoding) { 356 assertSize(size) 357 if (size <= 0) { 358 return createBuffer(that, size) 359 } 360 if (fill !== undefined) { 361 // Only pay attention to encoding if it's a string. This 362 // prevents accidentally sending in a number that would 363 // be interpretted as a start offset. 364 return typeof encoding === 'string' 365 ? createBuffer(that, size).fill(fill, encoding) 366 : createBuffer(that, size).fill(fill) 367 } 368 return createBuffer(that, size) 369} 370 371/** 372 * Creates a new filled Buffer instance. 373 * alloc(size[, fill[, encoding]]) 374 **/ 375Buffer.alloc = function (size, fill, encoding) { 376 return alloc(null, size, fill, encoding) 377} 378 379function allocUnsafe (that, size) { 380 assertSize(size) 381 that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) 382 if (!Buffer.TYPED_ARRAY_SUPPORT) { 383 for (var i = 0; i < size; ++i) { 384 that[i] = 0 385 } 386 } 387 return that 388} 389 390/** 391 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. 392 * */ 393Buffer.allocUnsafe = function (size) { 394 return allocUnsafe(null, size) 395} 396/** 397 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. 398 */ 399Buffer.allocUnsafeSlow = function (size) { 400 return allocUnsafe(null, size) 401} 402 403function fromString (that, string, encoding) { 404 if (typeof encoding !== 'string' || encoding === '') { 405 encoding = 'utf8' 406 } 407 408 if (!Buffer.isEncoding(encoding)) { 409 throw new TypeError('"encoding" must be a valid string encoding') 410 } 411 412 var length = byteLength(string, encoding) | 0 413 that = createBuffer(that, length) 414 415 var actual = that.write(string, encoding) 416 417 if (actual !== length) {
vendor: 8,522 bytes, lines 418-765
418 // Writing a hex string, for example, that contains invalid characters will 419 // cause everything after the first invalid character to be ignored. (e.g. 420 // 'abxxcd' will be treated as 'ab') 421 that = that.slice(0, actual) 422 } 423 424 return that 425} 426 427function fromArrayLike (that, array) { 428 var length = array.length < 0 ? 0 : checked(array.length) | 0 429 that = createBuffer(that, length) 430 for (var i = 0; i < length; i += 1) { 431 that[i] = array[i] & 255 432 } 433 return that 434} 435 436function fromArrayBuffer (that, array, byteOffset, length) { 437 array.byteLength // this throws if `array` is not a valid ArrayBuffer 438 439 if (byteOffset < 0 || array.byteLength < byteOffset) { 440 throw new RangeError('\'offset\' is out of bounds') 441 } 442 443 if (array.byteLength < byteOffset + (length || 0)) { 444 throw new RangeError('\'length\' is out of bounds') 445 } 446 447 if (byteOffset === undefined && length === undefined) { 448 array = new Uint8Array(array) 449 } else if (length === undefined) { 450 array = new Uint8Array(array, byteOffset) 451 } else { 452 array = new Uint8Array(array, byteOffset, length) 453 } 454 455 if (Buffer.TYPED_ARRAY_SUPPORT) { 456 // Return an augmented `Uint8Array` instance, for best performance 457 that = array 458 that.__proto__ = Buffer.prototype 459 } else { 460 // Fallback: Return an object instance of the Buffer class 461 that = fromArrayLike(that, array) 462 } 463 return that 464} 465 466function fromObject (that, obj) { 467 if (Buffer.isBuffer(obj)) { 468 var len = checked(obj.length) | 0 469 that = createBuffer(that, len) 470 471 if (that.length === 0) { 472 return that 473 } 474 475 obj.copy(that, 0, 0, len) 476 return that 477 } 478 479 if (obj) { 480 if ((typeof ArrayBuffer !== 'undefined' && 481 obj.buffer instanceof ArrayBuffer) || 'length' in obj) { 482 if (typeof obj.length !== 'number' || isnan(obj.length)) { 483 return createBuffer(that, 0) 484 } 485 return fromArrayLike(that, obj) 486 } 487 488 if (obj.type === 'Buffer' && isArray(obj.data)) { 489 return fromArrayLike(that, obj.data) 490 } 491 } 492 493 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') 494} 495 496function checked (length) { 497 // Note: cannot use `length < kMaxLength()` here because that fails when 498 // length is NaN (which is otherwise coerced to zero.) 499 if (length >= kMaxLength()) { 500 throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 501 'size: 0x' + kMaxLength().toString(16) + ' bytes') 502 } 503 return length | 0 504} 505 506function SlowBuffer (length) { 507 if (+length != length) { // eslint-disable-line eqeqeq 508 length = 0 509 } 510 return Buffer.alloc(+length) 511} 512 513Buffer.isBuffer = function isBuffer (b) { 514 return !!(b != null && b._isBuffer) 515} 516 517Buffer.compare = function compare (a, b) { 518 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { 519 throw new TypeError('Arguments must be Buffers') 520 } 521 522 if (a === b) return 0 523 524 var x = a.length 525 var y = b.length 526 527 for (var i = 0, len = Math.min(x, y); i < len; ++i) { 528 if (a[i] !== b[i]) { 529 x = a[i] 530 y = b[i] 531 break 532 } 533 } 534 535 if (x < y) return -1 536 if (y < x) return 1 537 return 0 538} 539 540Buffer.isEncoding = function isEncoding (encoding) { 541 switch (String(encoding).toLowerCase()) { 542 case 'hex': 543 case 'utf8': 544 case 'utf-8': 545 case 'ascii': 546 case 'latin1': 547 case 'binary': 548 case 'base64': 549 case 'ucs2': 550 case 'ucs-2': 551 case 'utf16le': 552 case 'utf-16le': 553 return true 554 default: 555 return false 556 } 557} 558 559Buffer.concat = function concat (list, length) { 560 if (!isArray(list)) { 561 throw new TypeError('"list" argument must be an Array of Buffers') 562 } 563 564 if (list.length === 0) { 565 return Buffer.alloc(0) 566 } 567 568 var i 569 if (length === undefined) { 570 length = 0 571 for (i = 0; i < list.length; ++i) { 572 length += list[i].length 573 } 574 } 575 576 var buffer = Buffer.allocUnsafe(length) 577 var pos = 0 578 for (i = 0; i < list.length; ++i) { 579 var buf = list[i] 580 if (!Buffer.isBuffer(buf)) { 581 throw new TypeError('"list" argument must be an Array of Buffers') 582 } 583 buf.copy(buffer, pos) 584 pos += buf.length 585 } 586 return buffer 587} 588 589function byteLength (string, encoding) { 590 if (Buffer.isBuffer(string)) { 591 return string.length 592 } 593 if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && 594 (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { 595 return string.byteLength 596 } 597 if (typeof string !== 'string') { 598 string = '' + string 599 } 600 601 var len = string.length 602 if (len === 0) return 0 603 604 // Use a for loop to avoid recursion 605 var loweredCase = false 606 for (;;) { 607 switch (encoding) { 608 case 'ascii': 609 case 'latin1': 610 case 'binary': 611 return len 612 case 'utf8': 613 case 'utf-8': 614 case undefined: 615 return utf8ToBytes(string).length 616 case 'ucs2': 617 case 'ucs-2': 618 case 'utf16le': 619 case 'utf-16le': 620 return len * 2 621 case 'hex': 622 return len >>> 1 623 case 'base64': 624 return base64ToBytes(string).length 625 default: 626 if (loweredCase) return utf8ToBytes(string).length // assume utf8 627 encoding = ('' + encoding).toLowerCase() 628 loweredCase = true 629 } 630 } 631} 632Buffer.byteLength = byteLength 633 634function slowToString (encoding, start, end) { 635 var loweredCase = false 636 637 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only 638 // property of a typed array. 639 640 // This behaves neither like String nor Uint8Array in that we set start/end 641 // to their upper/lower bounds if the value passed is out of range. 642 // undefined is handled specially as per ECMA-262 6th Edition, 643 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. 644 if (start === undefined || start < 0) { 645 start = 0 646 } 647 // Return early if start > this.length. Done here to prevent potential uint32 648 // coercion fail below. 649 if (start > this.length) { 650 return '' 651 } 652 653 if (end === undefined || end > this.length) { 654 end = this.length 655 } 656 657 if (end <= 0) { 658 return '' 659 } 660 661 // Force coersion to uint32. This will also coerce falsey/NaN values to 0. 662 end >>>= 0 663 start >>>= 0 664 665 if (end <= start) { 666 return '' 667 } 668 669 if (!encoding) encoding = 'utf8' 670 671 while (true) { 672 switch (encoding) { 673 case 'hex': 674 return hexSlice(this, start, end) 675 676 case 'utf8': 677 case 'utf-8': 678 return utf8Slice(this, start, end) 679 680 case 'ascii': 681 return asciiSlice(this, start, end) 682 683 case 'latin1': 684 case 'binary': 685 return latin1Slice(this, start, end) 686 687 case 'base64': 688 return base64Slice(this, start, end) 689 690 case 'ucs2': 691 case 'ucs-2': 692 case 'utf16le': 693 case 'utf-16le': 694 return utf16leSlice(this, start, end) 695 696 default: 697 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) 698 encoding = (encoding + '').toLowerCase() 699 loweredCase = true 700 } 701 } 702} 703 704// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect 705// Buffer instances. 706Buffer.prototype._isBuffer = true 707 708function swap (b, n, m) { 709 var i = b[n] 710 b[n] = b[m] 711 b[m] = i 712} 713 714Buffer.prototype.swap16 = function swap16 () { 715 var len = this.length 716 if (len % 2 !== 0) { 717 throw new RangeError('Buffer size must be a multiple of 16-bits') 718 } 719 for (var i = 0; i < len; i += 2) { 720 swap(this, i, i + 1) 721 } 722 return this 723} 724 725Buffer.prototype.swap32 = function swap32 () { 726 var len = this.length 727 if (len % 4 !== 0) { 728 throw new RangeError('Buffer size must be a multiple of 32-bits') 729 } 730 for (var i = 0; i < len; i += 4) { 731 swap(this, i, i + 3) 732 swap(this, i + 1, i + 2) 733 } 734 return this 735} 736 737Buffer.prototype.swap64 = function swap64 () { 738 var len = this.length 739 if (len % 8 !== 0) { 740 throw new RangeError('Buffer size must be a multiple of 64-bits') 741 } 742 for (var i = 0; i < len; i += 8) { 743 swap(this, i, i + 7) 744 swap(this, i + 1, i + 6) 745 swap(this, i + 2, i + 5) 746 swap(this, i + 3, i + 4) 747 } 748 return this 749} 750 751Buffer.prototype.toString = function toString () { 752 var length = this.length | 0 753 if (length === 0) return '' 754 if (arguments.length === 0) return utf8Slice(this, 0, length) 755 return slowToString.apply(this, arguments) 756} 757 758Buffer.prototype.equals = function equals (b) { 759 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') 760 if (this === b) return true 761 return Buffer.compare(this, b) === 0 762} 763 764Buffer.prototype.inspect = function inspect () { 765 var str = ''
vendor: 2,989 bytes, lines 766-878
766 var max = exports.INSPECT_MAX_BYTES 767 if (this.length > 0) { 768 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') 769 if (this.length > max) str += ' ... ' 770 } 771 return '<Buffer ' + str + '>' 772} 773 774Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { 775 if (!Buffer.isBuffer(target)) { 776 throw new TypeError('Argument must be a Buffer') 777 } 778 779 if (start === undefined) { 780 start = 0 781 } 782 if (end === undefined) { 783 end = target ? target.length : 0 784 } 785 if (thisStart === undefined) { 786 thisStart = 0 787 } 788 if (thisEnd === undefined) { 789 thisEnd = this.length 790 } 791 792 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { 793 throw new RangeError('out of range index') 794 } 795 796 if (thisStart >= thisEnd && start >= end) { 797 return 0 798 } 799 if (thisStart >= thisEnd) { 800 return -1 801 } 802 if (start >= end) { 803 return 1 804 } 805 806 start >>>= 0 807 end >>>= 0 808 thisStart >>>= 0 809 thisEnd >>>= 0 810 811 if (this === target) return 0 812 813 var x = thisEnd - thisStart 814 var y = end - start 815 var len = Math.min(x, y) 816 817 var thisCopy = this.slice(thisStart, thisEnd) 818 var targetCopy = target.slice(start, end) 819 820 for (var i = 0; i < len; ++i) { 821 if (thisCopy[i] !== targetCopy[i]) { 822 x = thisCopy[i] 823 y = targetCopy[i] 824 break 825 } 826 } 827 828 if (x < y) return -1 829 if (y < x) return 1 830 return 0 831} 832 833// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, 834// OR the last index of `val` in `buffer` at offset <= `byteOffset`. 835// 836// Arguments: 837// - buffer - a Buffer to search 838// - val - a string, Buffer, or number 839// - byteOffset - an index into `buffer`; will be clamped to an int32 840// - encoding - an optional encoding, relevant is val is a string 841// - dir - true for indexOf, false for lastIndexOf 842function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { 843 // Empty buffer means no match 844 if (buffer.length === 0) return -1 845 846 // Normalize byteOffset 847 if (typeof byteOffset === 'string') { 848 encoding = byteOffset 849 byteOffset = 0 850 } else if (byteOffset > 0x7fffffff) { 851 byteOffset = 0x7fffffff 852 } else if (byteOffset < -0x80000000) { 853 byteOffset = -0x80000000 854 } 855 byteOffset = +byteOffset // Coerce to Number. 856 if (isNaN(byteOffset)) { 857 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer 858 byteOffset = dir ? 0 : (buffer.length - 1) 859 } 860 861 // Normalize byteOffset: negative offsets start from the end of the buffer 862 if (byteOffset < 0) byteOffset = buffer.length + byteOffset 863 if (byteOffset >= buffer.length) { 864 if (dir) return -1 865 else byteOffset = buffer.length - 1 866 } else if (byteOffset < 0) { 867 if (dir) byteOffset = 0 868 else return -1 869 } 870 871 // Normalize val 872 if (typeof val === 'string') { 873 val = Buffer.from(val, encoding) 874 } 875 876 // Finally, search either indexOf (if dir is true) or lastIndexOf 877 if (Buffer.isBuffer(val)) { 878 // Special case: looking for empty string/buffer always fail
vendor: 30,332 bytes, lines 878-1972
878s 879 if (val.length === 0) { 880 return -1 881 } 882 return arrayIndexOf(buffer, val, byteOffset, encoding, dir) 883 } else if (typeof val === 'number') { 884 val = val & 0xFF // Search for a byte value [0-255] 885 if (Buffer.TYPED_ARRAY_SUPPORT && 886 typeof Uint8Array.prototype.indexOf === 'function') { 887 if (dir) { 888 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) 889 } else { 890 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) 891 } 892 } 893 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) 894 } 895 896 throw new TypeError('val must be string, number or Buffer') 897} 898 899function arrayIndexOf (arr, val, byteOffset, encoding, dir) { 900 var indexSize = 1 901 var arrLength = arr.length 902 var valLength = val.length 903 904 if (encoding !== undefined) { 905 encoding = String(encoding).toLowerCase() 906 if (encoding === 'ucs2' || encoding === 'ucs-2' || 907 encoding === 'utf16le' || encoding === 'utf-16le') { 908 if (arr.length < 2 || val.length < 2) { 909 return -1 910 } 911 indexSize = 2 912 arrLength /= 2 913 valLength /= 2 914 byteOffset /= 2 915 } 916 } 917 918 function read (buf, i) { 919 if (indexSize === 1) { 920 return buf[i] 921 } else { 922 return buf.readUInt16BE(i * indexSize) 923 } 924 } 925 926 var i 927 if (dir) { 928 var foundIndex = -1 929 for (i = byteOffset; i < arrLength; i++) { 930 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { 931 if (foundIndex === -1) foundIndex = i 932 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize 933 } else { 934 if (foundIndex !== -1) i -= i - foundIndex 935 foundIndex = -1 936 } 937 } 938 } else { 939 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength 940 for (i = byteOffset; i >= 0; i--) { 941 var found = true 942 for (var j = 0; j < valLength; j++) { 943 if (read(arr, i + j) !== read(val, j)) { 944 found = false 945 break 946 } 947 } 948 if (found) return i 949 } 950 } 951 952 return -1 953} 954 955Buffer.prototype.includes = function includes (val, byteOffset, encoding) { 956 return this.indexOf(val, byteOffset, encoding) !== -1 957} 958 959Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { 960 return bidirectionalIndexOf(this, val, byteOffset, encoding, true) 961} 962 963Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { 964 return bidirectionalIndexOf(this, val, byteOffset, encoding, false) 965} 966 967function hexWrite (buf, string, offset, length) { 968 offset = Number(offset) || 0 969 var remaining = buf.length - offset 970 if (!length) { 971 length = remaining 972 } else { 973 length = Number(length) 974 if (length > remaining) { 975 length = remaining 976 } 977 } 978 979 // must be an even number of digits 980 var strLen = string.length 981 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') 982 983 if (length > strLen / 2) { 984 length = strLen / 2 985 } 986 for (var i = 0; i < length; ++i) { 987 var parsed = parseInt(string.substr(i * 2, 2), 16) 988 if (isNaN(parsed)) return i 989 buf[offset + i] = parsed 990 } 991 return i 992} 993 994function utf8Write (buf, string, offset, length) { 995 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) 996} 997 998function asciiWrite (buf, string, offset, length) { 999 return blitBuffer(asciiToBytes(string), buf, offset, length) 1000} 1001 1002function latin1Write (buf, string, offset, length) { 1003 return asciiWrite(buf, string, offset, length) 1004} 1005 1006function base64Write (buf, string, offset, length) { 1007 return blitBuffer(base64ToBytes(string), buf, offset, length) 1008} 1009 1010function ucs2Write (buf, string, offset, length) { 1011 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) 1012} 1013 1014Buffer.prototype.write = function write (string, offset, length, encoding) { 1015 // Buffer#write(string) 1016 if (offset === undefined) { 1017 encoding = 'utf8' 1018 length = this.length 1019 offset = 0 1020 // Buffer#write(string, encoding) 1021 } else if (length === undefined && typeof offset === 'string') { 1022 encoding = offset 1023 length = this.length 1024 offset = 0 1025 // Buffer#write(string, offset[, length][, encoding]) 1026 } else if (isFinite(offset)) { 1027 offset = offset | 0 1028 if (isFinite(length)) { 1029 length = length | 0 1030 if (encoding === undefined) encoding = 'utf8' 1031 } else { 1032 encoding = length 1033 length = undefined 1034 } 1035 // legacy write(string, encoding, offset, length) - remove in v0.13 1036 } else { 1037 throw new Error( 1038 'Buffer.write(string, encoding, offset[, length]) is no longer supported' 1039 ) 1040 } 1041 1042 var remaining = this.length - offset 1043 if (length === undefined || length > remaining) length = remaining 1044 1045 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { 1046 throw new RangeError('Attempt to write outside buffer bounds') 1047 } 1048 1049 if (!encoding) encoding = 'utf8' 1050 1051 var loweredCase = false 1052 for (;;) { 1053 switch (encoding) { 1054 case 'hex': 1055 return hexWrite(this, string, offset, length) 1056 1057 case 'utf8': 1058 case 'utf-8': 1059 return utf8Write(this, string, offset, length) 1060 1061 case 'ascii': 1062 return asciiWrite(this, string, offset, length) 1063 1064 case 'latin1': 1065 case 'binary': 1066 return latin1Write(this, string, offset, length) 1067 1068 case 'base64': 1069 // Warning: maxLength not taken into account in base64Write 1070 return base64Write(this, string, offset, length) 1071 1072 case 'ucs2': 1073 case 'ucs-2': 1074 case 'utf16le': 1075 case 'utf-16le': 1076 return ucs2Write(this, string, offset, length) 1077 1078 default: 1079 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) 1080 encoding = ('' + encoding).toLowerCase() 1081 loweredCase = true 1082 } 1083 } 1084} 1085 1086Buffer.prototype.toJSON = function toJSON () { 1087 return { 1088 type: 'Buffer', 1089 data: Array.prototype.slice.call(this._arr || this, 0) 1090 } 1091} 1092 1093function base64Slice (buf, start, end) { 1094 if (start === 0 && end === buf.length) { 1095 return base64.fromByteArray(buf) 1096 } else { 1097 return base64.fromByteArray(buf.slice(start, end)) 1098 } 1099} 1100 1101function utf8Slice (buf, start, end) { 1102 end = Math.min(buf.length, end) 1103 var res = [] 1104 1105 var i = start 1106 while (i < end) { 1107 var firstByte = buf[i] 1108 var codePoint = null 1109 var bytesPerSequence = (firstByte > 0xEF) ? 4 1110 : (firstByte > 0xDF) ? 3 1111 : (firstByte > 0xBF) ? 2 1112 : 1 1113 1114 if (i + bytesPerSequence <= end) { 1115 var secondByte, thirdByte, fourthByte, tempCodePoint 1116 1117 switch (bytesPerSequence) { 1118 case 1: 1119 if (firstByte < 0x80) { 1120 codePoint = firstByte 1121 } 1122 break 1123 case 2: 1124 secondByte = buf[i + 1] 1125 if ((secondByte & 0xC0) === 0x80) { 1126 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) 1127 if (tempCodePoint > 0x7F) { 1128 codePoint = tempCodePoint 1129 } 1130 } 1131 break 1132 case 3: 1133 secondByte = buf[i + 1] 1134 thirdByte = buf[i + 2] 1135 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { 1136 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) 1137 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { 1138 codePoint = tempCodePoint 1139 } 1140 } 1141 break 1142 case 4: 1143 secondByte = buf[i + 1] 1144 thirdByte = buf[i + 2] 1145 fourthByte = buf[i + 3] 1146 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { 1147 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) 1148 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { 1149 codePoint = tempCodePoint 1150 } 1151 } 1152 } 1153 } 1154 1155 if (codePoint === null) { 1156 // we did not generate a valid codePoint so insert a 1157 // replacement char (U+FFFD) and advance only 1 byte 1158 codePoint = 0xFFFD 1159 bytesPerSequence = 1 1160 } else if (codePoint > 0xFFFF) { 1161 // encode to utf16 (surrogate pair dance) 1162 codePoint -= 0x10000 1163 res.push(codePoint >>> 10 & 0x3FF | 0xD800) 1164 codePoint = 0xDC00 | codePoint & 0x3FF 1165 } 1166 1167 res.push(codePoint) 1168 i += bytesPerSequence 1169 } 1170 1171 return decodeCodePointsArray(res) 1172} 1173 1174// Based on http://stackoverflow.com/a/22747272/680742, the browser with 1175// the lowest limit is Chrome, with 0x10000 args. 1176// We go 1 magnitude less, for safety 1177var MAX_ARGUMENTS_LENGTH = 0x1000 1178 1179function decodeCodePointsArray (codePoints) { 1180 var len = codePoints.length 1181 if (len <= MAX_ARGUMENTS_LENGTH) { 1182 return String.fromCharCode.apply(String, codePoints) // avoid extra slice() 1183 } 1184 1185 // Decode in chunks to avoid "call stack size exceeded". 1186 var res = '' 1187 var i = 0 1188 while (i < len) { 1189 res += String.fromCharCode.apply( 1190 String, 1191 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) 1192 ) 1193 } 1194 return res 1195} 1196 1197function asciiSlice (buf, start, end) { 1198 var ret = '' 1199 end = Math.min(buf.length, end) 1200 1201 for (var i = start; i < end; ++i) { 1202 ret += String.fromCharCode(buf[i] & 0x7F) 1203 } 1204 return ret 1205} 1206 1207function latin1Slice (buf, start, end) { 1208 var ret = '' 1209 end = Math.min(buf.length, end) 1210 1211 for (var i = start; i < end; ++i) { 1212 ret += String.fromCharCode(buf[i]) 1213 } 1214 return ret 1215} 1216 1217function hexSlice (buf, start, end) { 1218 var len = buf.length 1219 1220 if (!start || start < 0) start = 0 1221 if (!end || end < 0 || end > len) end = len 1222 1223 var out = '' 1224 for (var i = start; i < end; ++i) { 1225 out += toHex(buf[i]) 1226 } 1227 return out 1228} 1229 1230function utf16leSlice (buf, start, end) { 1231 var bytes = buf.slice(start, end) 1232 var res = '' 1233 for (var i = 0; i < bytes.length; i += 2) { 1234 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) 1235 } 1236 return res 1237} 1238 1239Buffer.prototype.slice = function slice (start, end) { 1240 var len = this.length 1241 start = ~~start 1242 end = end === undefined ? len : ~~end 1243 1244 if (start < 0) { 1245 start += len 1246 if (start < 0) start = 0 1247 } else if (start > len) { 1248 start = len 1249 } 1250 1251 if (end < 0) { 1252 end += len 1253 if (end < 0) end = 0 1254 } else if (end > len) { 1255 end = len 1256 } 1257 1258 if (end < start) end = start 1259 1260 var newBuf 1261 if (Buffer.TYPED_ARRAY_SUPPORT) { 1262 newBuf = this.subarray(start, end) 1263 newBuf.__proto__ = Buffer.prototype 1264 } else { 1265 var sliceLen = end - start 1266 newBuf = new Buffer(sliceLen, undefined) 1267 for (var i = 0; i < sliceLen; ++i) { 1268 newBuf[i] = this[i + start] 1269 } 1270 } 1271 1272 return newBuf 1273} 1274 1275/* 1276 * Need to make sure that buffer isn't trying to write out of bounds. 1277 */ 1278function checkOffset (offset, ext, length) { 1279 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') 1280 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') 1281} 1282 1283Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { 1284 offset = offset | 0 1285 byteLength = byteLength | 0 1286 if (!noAssert) checkOffset(offset, byteLength, this.length) 1287 1288 var val = this[offset] 1289 var mul = 1 1290 var i = 0 1291 while (++i < byteLength && (mul *= 0x100)) { 1292 val += this[offset + i] * mul 1293 } 1294 1295 return val 1296} 1297 1298Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { 1299 offset = offset | 0 1300 byteLength = byteLength | 0 1301 if (!noAssert) { 1302 checkOffset(offset, byteLength, this.length) 1303 } 1304 1305 var val = this[offset + --byteLength] 1306 var mul = 1 1307 while (byteLength > 0 && (mul *= 0x100)) { 1308 val += this[offset + --byteLength] * mul 1309 } 1310 1311 return val 1312} 1313 1314Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { 1315 if (!noAssert) checkOffset(offset, 1, this.length) 1316 return this[offset] 1317} 1318 1319Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { 1320 if (!noAssert) checkOffset(offset, 2, this.length) 1321 return this[offset] | (this[offset + 1] << 8) 1322} 1323 1324Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { 1325 if (!noAssert) checkOffset(offset, 2, this.length) 1326 return (this[offset] << 8) | this[offset + 1] 1327} 1328 1329Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { 1330 if (!noAssert) checkOffset(offset, 4, this.length) 1331 1332 return ((this[offset]) | 1333 (this[offset + 1] << 8) | 1334 (this[offset + 2] << 16)) + 1335 (this[offset + 3] * 0x1000000) 1336} 1337 1338Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { 1339 if (!noAssert) checkOffset(offset, 4, this.length) 1340 1341 return (this[offset] * 0x1000000) + 1342 ((this[offset + 1] << 16) | 1343 (this[offset + 2] << 8) | 1344 this[offset + 3]) 1345} 1346 1347Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { 1348 offset = offset | 0 1349 byteLength = byteLength | 0 1350 if (!noAssert) checkOffset(offset, byteLength, this.length) 1351 1352 var val = this[offset] 1353 var mul = 1 1354 var i = 0 1355 while (++i < byteLength && (mul *= 0x100)) { 1356 val += this[offset + i] * mul 1357 } 1358 mul *= 0x80 1359 1360 if (val >= mul) val -= Math.pow(2, 8 * byteLength) 1361 1362 return val 1363} 1364 1365Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { 1366 offset = offset | 0 1367 byteLength = byteLength | 0 1368 if (!noAssert) checkOffset(offset, byteLength, this.length) 1369 1370 var i = byteLength 1371 var mul = 1 1372 var val = this[offset + --i] 1373 while (i > 0 && (mul *= 0x100)) { 1374 val += this[offset + --i] * mul 1375 } 1376 mul *= 0x80 1377 1378 if (val >= mul) val -= Math.pow(2, 8 * byteLength) 1379 1380 return val 1381} 1382 1383Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { 1384 if (!noAssert) checkOffset(offset, 1, this.length) 1385 if (!(this[offset] & 0x80)) return (this[offset]) 1386 return ((0xff - this[offset] + 1) * -1) 1387} 1388 1389Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { 1390 if (!noAssert) checkOffset(offset, 2, this.length) 1391 var val = this[offset] | (this[offset + 1] << 8) 1392 return (val & 0x8000) ? val | 0xFFFF0000 : val 1393} 1394 1395Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { 1396 if (!noAssert) checkOffset(offset, 2, this.length) 1397 var val = this[offset + 1] | (this[offset] << 8) 1398 return (val & 0x8000) ? val | 0xFFFF0000 : val 1399} 1400 1401Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { 1402 if (!noAssert) checkOffset(offset, 4, this.length) 1403 1404 return (this[offset]) | 1405 (this[offset + 1] << 8) | 1406 (this[offset + 2] << 16) | 1407 (this[offset + 3] << 24) 1408} 1409 1410Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { 1411 if (!noAssert) checkOffset(offset, 4, this.length) 1412 1413 return (this[offset] << 24) | 1414 (this[offset + 1] << 16) | 1415 (this[offset + 2] << 8) | 1416 (this[offset + 3]) 1417} 1418 1419Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { 1420 if (!noAssert) checkOffset(offset, 4, this.length) 1421 return ieee754.read(this, offset, true, 23, 4) 1422} 1423 1424Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { 1425 if (!noAssert) checkOffset(offset, 4, this.length) 1426 return ieee754.read(this, offset, false, 23, 4) 1427} 1428 1429Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { 1430 if (!noAssert) checkOffset(offset, 8, this.length) 1431 return ieee754.read(this, offset, true, 52, 8) 1432} 1433 1434Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { 1435 if (!noAssert) checkOffset(offset, 8, this.length) 1436 return ieee754.read(this, offset, false, 52, 8) 1437} 1438 1439function checkInt (buf, value, offset, ext, max, min) { 1440 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') 1441 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') 1442 if (offset + ext > buf.length) throw new RangeError('Index out of range') 1443} 1444 1445Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { 1446 value = +value 1447 offset = offset | 0 1448 byteLength = byteLength | 0 1449 if (!noAssert) { 1450 var maxBytes = Math.pow(2, 8 * byteLength) - 1 1451 checkInt(this, value, offset, byteLength, maxBytes, 0) 1452 } 1453 1454 var mul = 1 1455 var i = 0 1456 this[offset] = value & 0xFF 1457 while (++i < byteLength && (mul *= 0x100)) { 1458 this[offset + i] = (value / mul) & 0xFF 1459 } 1460 1461 return offset + byteLength 1462} 1463 1464Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { 1465 value = +value 1466 offset = offset | 0 1467 byteLength = byteLength | 0 1468 if (!noAssert) { 1469 var maxBytes = Math.pow(2, 8 * byteLength) - 1 1470 checkInt(this, value, offset, byteLength, maxBytes, 0) 1471 } 1472 1473 var i = byteLength - 1 1474 var mul = 1 1475 this[offset + i] = value & 0xFF 1476 while (--i >= 0 && (mul *= 0x100)) { 1477 this[offset + i] = (value / mul) & 0xFF 1478 } 1479 1480 return offset + byteLength 1481} 1482 1483Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { 1484 value = +value 1485 offset = offset | 0 1486 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) 1487 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) 1488 this[offset] = (value & 0xff) 1489 return offset + 1 1490} 1491 1492function objectWriteUInt16 (buf, value, offset, littleEndian) { 1493 if (value < 0) value = 0xffff + value + 1 1494 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { 1495 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> 1496 (littleEndian ? i : 1 - i) * 8 1497 } 1498} 1499 1500Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { 1501 value = +value 1502 offset = offset | 0 1503 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) 1504 if (Buffer.TYPED_ARRAY_SUPPORT) { 1505 this[offset] = (value & 0xff) 1506 this[offset + 1] = (value >>> 8) 1507 } else { 1508 objectWriteUInt16(this, value, offset, true) 1509 } 1510 return offset + 2 1511} 1512 1513Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { 1514 value = +value 1515 offset = offset | 0 1516 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) 1517 if (Buffer.TYPED_ARRAY_SUPPORT) { 1518 this[offset] = (value >>> 8) 1519 this[offset + 1] = (value & 0xff) 1520 } else { 1521 objectWriteUInt16(this, value, offset, false) 1522 } 1523 return offset + 2 1524} 1525 1526function objectWriteUInt32 (buf, value, offset, littleEndian) { 1527 if (value < 0) value = 0xffffffff + value + 1 1528 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { 1529 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff 1530 } 1531} 1532 1533Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { 1534 value = +value 1535 offset = offset | 0 1536 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) 1537 if (Buffer.TYPED_ARRAY_SUPPORT) { 1538 this[offset + 3] = (value >>> 24) 1539 this[offset + 2] = (value >>> 16) 1540 this[offset + 1] = (value >>> 8) 1541 this[offset] = (value & 0xff) 1542 } else { 1543 objectWriteUInt32(this, value, offset, true) 1544 } 1545 return offset + 4 1546} 1547 1548Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { 1549 value = +value 1550 offset = offset | 0 1551 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) 1552 if (Buffer.TYPED_ARRAY_SUPPORT) { 1553 this[offset] = (value >>> 24) 1554 this[offset + 1] = (value >>> 16) 1555 this[offset + 2] = (value >>> 8) 1556 this[offset + 3] = (value & 0xff) 1557 } else { 1558 objectWriteUInt32(this, value, offset, false) 1559 } 1560 return offset + 4 1561} 1562 1563Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { 1564 value = +value 1565 offset = offset | 0 1566 if (!noAssert) { 1567 var limit = Math.pow(2, 8 * byteLength - 1) 1568 1569 checkInt(this, value, offset, byteLength, limit - 1, -limit) 1570 } 1571 1572 var i = 0 1573 var mul = 1 1574 var sub = 0 1575 this[offset] = value & 0xFF 1576 while (++i < byteLength && (mul *= 0x100)) { 1577 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { 1578 sub = 1 1579 } 1580 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF 1581 } 1582 1583 return offset + byteLength 1584} 1585 1586Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { 1587 value = +value 1588 offset = offset | 0 1589 if (!noAssert) { 1590 var limit = Math.pow(2, 8 * byteLength - 1) 1591 1592 checkInt(this, value, offset, byteLength, limit - 1, -limit) 1593 } 1594 1595 var i = byteLength - 1 1596 var mul = 1 1597 var sub = 0 1598 this[offset + i] = value & 0xFF 1599 while (--i >= 0 && (mul *= 0x100)) { 1600 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { 1601 sub = 1 1602 } 1603 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF 1604 } 1605 1606 return offset + byteLength 1607} 1608 1609Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { 1610 value = +value 1611 offset = offset | 0 1612 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) 1613 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) 1614 if (value < 0) value = 0xff + value + 1 1615 this[offset] = (value & 0xff) 1616 return offset + 1 1617} 1618 1619Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { 1620 value = +value 1621 offset = offset | 0 1622 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) 1623 if (Buffer.TYPED_ARRAY_SUPPORT) { 1624 this[offset] = (value & 0xff) 1625 this[offset + 1] = (value >>> 8) 1626 } else { 1627 objectWriteUInt16(this, value, offset, true) 1628 } 1629 return offset + 2 1630} 1631 1632Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { 1633 value = +value 1634 offset = offset | 0 1635 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) 1636 if (Buffer.TYPED_ARRAY_SUPPORT) { 1637 this[offset] = (value >>> 8) 1638 this[offset + 1] = (value & 0xff) 1639 } else { 1640 objectWriteUInt16(this, value, offset, false) 1641 } 1642 return offset + 2 1643} 1644 1645Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { 1646 value = +value 1647 offset = offset | 0 1648 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) 1649 if (Buffer.TYPED_ARRAY_SUPPORT) { 1650 this[offset] = (value & 0xff) 1651 this[offset + 1] = (value >>> 8) 1652 this[offset + 2] = (value >>> 16) 1653 this[offset + 3] = (value >>> 24) 1654 } else { 1655 objectWriteUInt32(this, value, offset, true) 1656 } 1657 return offset + 4 1658} 1659 1660Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { 1661 value = +value 1662 offset = offset | 0 1663 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) 1664 if (value < 0) value = 0xffffffff + value + 1 1665 if (Buffer.TYPED_ARRAY_SUPPORT) { 1666 this[offset] = (value >>> 24) 1667 this[offset + 1] = (value >>> 16) 1668 this[offset + 2] = (value >>> 8) 1669 this[offset + 3] = (value & 0xff) 1670 } else { 1671 objectWriteUInt32(this, value, offset, false) 1672 } 1673 return offset + 4 1674} 1675 1676function checkIEEE754 (buf, value, offset, ext, max, min) { 1677 if (offset + ext > buf.length) throw new RangeError('Index out of range') 1678 if (offset < 0) throw new RangeError('Index out of range') 1679} 1680 1681function writeFloat (buf, value, offset, littleEndian, noAssert) { 1682 if (!noAssert) { 1683 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) 1684 } 1685 ieee754.write(buf, value, offset, littleEndian, 23, 4) 1686 return offset + 4 1687} 1688 1689Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { 1690 return writeFloat(this, value, offset, true, noAssert) 1691} 1692 1693Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { 1694 return writeFloat(this, value, offset, false, noAssert) 1695} 1696 1697function writeDouble (buf, value, offset, littleEndian, noAssert) { 1698 if (!noAssert) { 1699 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) 1700 } 1701 ieee754.write(buf, value, offset, littleEndian, 52, 8) 1702 return offset + 8 1703} 1704 1705Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { 1706 return writeDouble(this, value, offset, true, noAssert) 1707} 1708 1709Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { 1710 return writeDouble(this, value, offset, false, noAssert) 1711} 1712 1713// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) 1714Buffer.prototype.copy = function copy (target, targetStart, start, end) { 1715 if (!start) start = 0 1716 if (!end && end !== 0) end = this.length 1717 if (targetStart >= target.length) targetStart = target.length 1718 if (!targetStart) targetStart = 0 1719 if (end > 0 && end < start) end = start 1720 1721 // Copy 0 bytes; we're done 1722 if (end === start) return 0 1723 if (target.length === 0 || this.length === 0) return 0 1724 1725 // Fatal error conditions 1726 if (targetStart < 0) { 1727 throw new RangeError('targetStart out of bounds') 1728 } 1729 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') 1730 if (end < 0) throw new RangeError('sourceEnd out of bounds') 1731 1732 // Are we oob? 1733 if (end > this.length) end = this.length 1734 if (target.length - targetStart < end - start) { 1735 end = target.length - targetStart + start 1736 } 1737 1738 var len = end - start 1739 var i 1740 1741 if (this === target && start < targetStart && targetStart < end) { 1742 // descending copy from end 1743 for (i = len - 1; i >= 0; --i) { 1744 target[i + targetStart] = this[i + start] 1745 } 1746 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { 1747 // ascending copy from start 1748 for (i = 0; i < len; ++i) { 1749 target[i + targetStart] = this[i + start] 1750 } 1751 } else { 1752 Uint8Array.prototype.set.call( 1753 target, 1754 this.subarray(start, start + len), 1755 targetStart 1756 ) 1757 } 1758 1759 return len 1760} 1761 1762// Usage: 1763// buffer.fill(number[, offset[, end]]) 1764// buffer.fill(buffer[, offset[, end]]) 1765// buffer.fill(string[, offset[, end]][, encoding]) 1766Buffer.prototype.fill = function fill (val, start, end, encoding) { 1767 // Handle string cases: 1768 if (typeof val === 'string') { 1769 if (typeof start === 'string') { 1770 encoding = start 1771 start = 0 1772 end = this.length 1773 } else if (typeof end === 'string') { 1774 encoding = end 1775 end = this.length 1776 } 1777 if (val.length === 1) { 1778 var code = val.charCodeAt(0) 1779 if (code < 256) { 1780 val = code 1781 } 1782 } 1783 if (encoding !== undefined && typeof encoding !== 'string') { 1784 throw new TypeError('encoding must be a string') 1785 } 1786 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { 1787 throw new TypeError('Unknown encoding: ' + encoding) 1788 } 1789 } else if (typeof val === 'number') { 1790 val = val & 255 1791 } 1792 1793 // Invalid ranges are not set to a default, so can range check early. 1794 if (start < 0 || this.length < start || this.length < end) { 1795 throw new RangeError('Out of range index') 1796 } 1797 1798 if (end <= start) { 1799 return this 1800 } 1801 1802 start = start >>> 0 1803 end = end === undefined ? this.length : end >>> 0 1804 1805 if (!val) val = 0 1806 1807 var i 1808 if (typeof val === 'number') { 1809 for (i = start; i < end; ++i) { 1810 this[i] = val 1811 } 1812 } else { 1813 var bytes = Buffer.isBuffer(val) 1814 ? val 1815 : utf8ToBytes(new Buffer(val, encoding).toString()) 1816 var len = bytes.length 1817 for (i = 0; i < end - start; ++i) { 1818 this[i + start] = bytes[i % len] 1819 } 1820 } 1821 1822 return this 1823} 1824 1825// HELPER FUNCTIONS 1826// ================ 1827 1828var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g 1829 1830function base64clean (str) { 1831 // Node strips out invalid characters like \n and \t from the string, base64-js does not 1832 str = stringtrim(str).replace(INVALID_BASE64_RE, '') 1833 // Node converts strings with length < 2 to '' 1834 if (str.length < 2) return '' 1835 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not 1836 while (str.length % 4 !== 0) { 1837 str = str + '=' 1838 } 1839 return str 1840} 1841 1842function stringtrim (str) { 1843 if (str.trim) return str.trim() 1844 return str.replace(/^\s+|\s+$/g, '') 1845} 1846 1847function toHex (n) { 1848 if (n < 16) return '0' + n.toString(16) 1849 return n.toString(16) 1850} 1851 1852function utf8ToBytes (string, units) { 1853 units = units || Infinity 1854 var codePoint 1855 var length = string.length 1856 var leadSurrogate = null 1857 var bytes = [] 1858 1859 for (var i = 0; i < length; ++i) { 1860 codePoint = string.charCodeAt(i) 1861 1862 // is surrogate component 1863 if (codePoint > 0xD7FF && codePoint < 0xE000) { 1864 // last char was a lead 1865 if (!leadSurrogate) { 1866 // no lead yet 1867 if (codePoint > 0xDBFF) { 1868 // unexpected trail 1869 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) 1870 continue 1871 } else if (i + 1 === length) { 1872 // unpaired lead 1873 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) 1874 continue 1875 } 1876 1877 // valid lead 1878 leadSurrogate = codePoint 1879 1880 continue 1881 } 1882 1883 // 2 leads in a row 1884 if (codePoint < 0xDC00) { 1885 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) 1886 leadSurrogate = codePoint 1887 continue 1888 } 1889 1890 // valid surrogate pair 1891 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 1892 } else if (leadSurrogate) { 1893 // valid bmp char, but last char was a lead 1894 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) 1895 } 1896 1897 leadSurrogate = null 1898 1899 // encode utf8 1900 if (codePoint < 0x80) { 1901 if ((units -= 1) < 0) break 1902 bytes.push(codePoint) 1903 } else if (codePoint < 0x800) { 1904 if ((units -= 2) < 0) break 1905 bytes.push( 1906 codePoint >> 0x6 | 0xC0, 1907 codePoint & 0x3F | 0x80 1908 ) 1909 } else if (codePoint < 0x10000) { 1910 if ((units -= 3) < 0) break 1911 bytes.push( 1912 codePoint >> 0xC | 0xE0, 1913 codePoint >> 0x6 & 0x3F | 0x80, 1914 codePoint & 0x3F | 0x80 1915 ) 1916 } else if (codePoint < 0x110000) { 1917 if ((units -= 4) < 0) break 1918 bytes.push( 1919 codePoint >> 0x12 | 0xF0, 1920 codePoint >> 0xC & 0x3F | 0x80, 1921 codePoint >> 0x6 & 0x3F | 0x80, 1922 codePoint & 0x3F | 0x80 1923 ) 1924 } else { 1925 throw new Error('Invalid code point') 1926 } 1927 } 1928 1929 return bytes 1930} 1931 1932function asciiToBytes (str) { 1933 var byteArray = [] 1934 for (var i = 0; i < str.length; ++i) { 1935 // Node's code seems to be doing this and not & 0x7F.. 1936 byteArray.push(str.charCodeAt(i) & 0xFF) 1937 } 1938 return byteArray 1939} 1940 1941function utf16leToBytes (str, units) { 1942 var c, hi, lo 1943 var byteArray = [] 1944 for (var i = 0; i < str.length; ++i) { 1945 if ((units -= 2) < 0) break 1946 1947 c = str.charCodeAt(i) 1948 hi = c >> 8 1949 lo = c % 256 1950 byteArray.push(lo) 1951 byteArray.push(hi) 1952 } 1953 1954 return byteArray 1955} 1956 1957function base64ToBytes (str) { 1958 return base64.toByteArray(base64clean(str)) 1959} 1960 1961function blitBuffer (src, dst, offset, length) { 1962 for (var i = 0; i < length; ++i) { 1963 if ((i + offset >= dst.length) || (i >= src.length)) break 1964 dst[i + offset] = src[i] 1965 } 1966 return i 1967} 1968 1969function isnan (val) { 1970 return val !== val // eslint-disable-line no-self-compare 1971} 1972
vendor: 2,905 bytes, lines 1973-2058
1973/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) 1974 1975/***/ }), 1976/* 2 */ 1977/***/ (function(module, exports) { 1978 1979var core = module.exports = { version: '2.5.3' }; 1980if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef 1981 1982 1983/***/ }), 1984/* 3 */ 1985/***/ (function(module, exports, __webpack_require__) { 1986 1987var global = __webpack_require__(10); 1988var core = __webpack_require__(2); 1989var ctx = __webpack_require__(20); 1990var hide = __webpack_require__(13); 1991var PROTOTYPE = 'prototype'; 1992 1993var $export = function (type, name, source) { 1994 var IS_FORCED = type & $export.F; 1995 var IS_GLOBAL = type & $export.G; 1996 var IS_STATIC = type & $export.S; 1997 var IS_PROTO = type & $export.P; 1998 var IS_BIND = type & $export.B; 1999 var IS_WRAP = type & $export.W; 2000 var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); 2001 var expProto = exports[PROTOTYPE]; 2002 var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; 2003 var key, own, out; 2004 if (IS_GLOBAL) source = name; 2005 for (key in source) { 2006 // contains in native 2007 own = !IS_FORCED && target && target[key] !== undefined; 2008 if (own && key in exports) continue; 2009 // export native or passed 2010 out = own ? target[key] : source[key]; 2011 // prevent global pollution for namespaces 2012 exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] 2013 // bind timers to global for call from export context 2014 : IS_BIND && own ? ctx(out, global) 2015 // wrap global constructors for prevent change them in library 2016 : IS_WRAP && target[key] == out ? (function (C) { 2017 var F = function (a, b, c) { 2018 if (this instanceof C) { 2019 switch (arguments.length) { 2020 case 0: return new C(); 2021 case 1: return new C(a); 2022 case 2: return new C(a, b); 2023 } return new C(a, b, c); 2024 } return C.apply(this, arguments); 2025 }; 2026 F[PROTOTYPE] = C[PROTOTYPE]; 2027 return F; 2028 // make static versions for prototype methods 2029 })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; 2030 // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% 2031 if (IS_PROTO) { 2032 (exports.virtual || (exports.virtual = {}))[key] = out; 2033 // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% 2034 if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); 2035 } 2036 } 2037}; 2038// type bitmap 2039$export.F = 1; // forced 2040$export.G = 2; // global 2041$export.S = 4; // static 2042$export.P = 8; // proto 2043$export.B = 16; // bind 2044$export.W = 32; // wrap 2045$export.U = 64; // safe 2046$export.R = 128; // real proto method for `library` 2047module.exports = $export; 2048 2049 2050/***/ }), 2051/* 4 */ 2052/***/ (function(module, exports, __webpack_require__) { 2053 2054var store = __webpack_require__(65)('wks'); 2055var uid = __webpack_require__(38); 2056var Symbol = __webpack_require__(10).Symbol; 2057var USE_SYMBOL = typeof Symbol == 'function'; 2058
vendor: 6,791 bytes, lines 2059-2294
2059var $exports = module.exports = function (name) { 2060 return store[name] || (store[name] = 2061 USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); 2062}; 2063 2064$exports.store = store; 2065 2066 2067/***/ }), 2068/* 5 */ 2069/***/ (function(module, exports, __webpack_require__) { 2070 2071// Thank's IE8 for his funny defineProperty 2072module.exports = !__webpack_require__(19)(function () { 2073 return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; 2074}); 2075 2076 2077/***/ }), 2078/* 6 */ 2079/***/ (function(module, exports, __webpack_require__) { 2080 2081var anObject = __webpack_require__(14); 2082var IE8_DOM_DEFINE = __webpack_require__(95); 2083var toPrimitive = __webpack_require__(58); 2084var dP = Object.defineProperty; 2085 2086exports.f = __webpack_require__(5) ? Object.defineProperty : function defineProperty(O, P, Attributes) { 2087 anObject(O); 2088 P = toPrimitive(P, true); 2089 anObject(Attributes); 2090 if (IE8_DOM_DEFINE) try { 2091 return dP(O, P, Attributes); 2092 } catch (e) { /* empty */ } 2093 if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); 2094 if ('value' in Attributes) O[P] = Attributes.value; 2095 return O; 2096}; 2097 2098 2099/***/ }), 2100/* 7 */ 2101/***/ (function(module, exports) { 2102 2103var g; 2104 2105// This works in non-strict mode 2106g = (function() { 2107 return this; 2108})(); 2109 2110try { 2111 // This works if eval is allowed (see CSP) 2112 g = g || Function("return this")() || (1,eval)("this"); 2113} catch(e) { 2114 // This works if the window reference is available 2115 if(typeof window === "object") 2116 g = window; 2117} 2118 2119// g can still be undefined, but nothing to do about it... 2120// We return undefined, instead of nothing here, so it's 2121// easier to handle this case. if(!global) { ...} 2122 2123module.exports = g; 2124 2125 2126/***/ }), 2127/* 8 */ 2128/***/ (function(module, exports, __webpack_require__) { 2129 2130"use strict"; 2131/* WEBPACK VAR INJECTION */(function(Buffer, __dirname) { 2132 2133function VirtualFileSystem() { 2134 this.fileSystem = {}; 2135 this.baseSystem = {}; 2136} 2137 2138VirtualFileSystem.prototype.readFileSync = function (filename) { 2139 filename = fixFilename(filename); 2140 2141 var base64content = this.baseSystem[filename]; 2142 if (base64content) { 2143 return new Buffer(base64content, 'base64'); 2144 } 2145 2146 var content = this.fileSystem[filename]; 2147 if (content) { 2148 return content; 2149 } 2150 2151 throw 'File \'' + filename + '\' not found in virtual file system'; 2152}; 2153 2154VirtualFileSystem.prototype.writeFileSync = function (filename, content) { 2155 this.fileSystem[fixFilename(filename)] = content; 2156}; 2157 2158VirtualFileSystem.prototype.bindFS = function (data) { 2159 this.baseSystem = data || {}; 2160}; 2161 2162 2163function fixFilename(filename) { 2164 if (filename.indexOf(__dirname) === 0) { 2165 filename = filename.substring(__dirname.length); 2166 } 2167 2168 if (filename.indexOf('/') === 0) { 2169 filename = filename.substring(1); 2170 } 2171 2172 return filename; 2173} 2174 2175module.exports = new VirtualFileSystem(); 2176 2177/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, "/")) 2178 2179/***/ }), 2180/* 9 */ 2181/***/ (function(module, exports) { 2182 2183module.exports = function (it) { 2184 return typeof it === 'object' ? it !== null : typeof it === 'function'; 2185}; 2186 2187 2188/***/ }), 2189/* 10 */ 2190/***/ (function(module, exports) { 2191 2192// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 2193var global = module.exports = typeof window != 'undefined' && window.Math == Math 2194 ? window : typeof self != 'undefined' && self.Math == Math ? self 2195 // eslint-disable-next-line no-new-func 2196 : Function('return this')(); 2197if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef 2198 2199 2200/***/ }), 2201/* 11 */ 2202/***/ (function(module, exports) { 2203 2204// shim for using process in browser 2205var process = module.exports = {}; 2206 2207// cached from whatever global is present so that test runners that stub it 2208// don't break things. But we need to wrap it in a try catch in case it is 2209// wrapped in strict mode code which doesn't define any globals. It's inside a 2210// function because try/catches deoptimize in certain engines. 2211 2212var cachedSetTimeout; 2213var cachedClearTimeout; 2214 2215function defaultSetTimout() { 2216 throw new Error('setTimeout has not been defined'); 2217} 2218function defaultClearTimeout () { 2219 throw new Error('clearTimeout has not been defined'); 2220} 2221(function () { 2222 try { 2223 if (typeof setTimeout === 'function') { 2224 cachedSetTimeout = setTimeout; 2225 } else { 2226 cachedSetTimeout = defaultSetTimout; 2227 } 2228 } catch (e) { 2229 cachedSetTimeout = defaultSetTimout; 2230 } 2231 try { 2232 if (typeof clearTimeout === 'function') { 2233 cachedClearTimeout = clearTimeout; 2234 } else { 2235 cachedClearTimeout = defaultClearTimeout; 2236 } 2237 } catch (e) { 2238 cachedClearTimeout = defaultClearTimeout; 2239 } 2240} ()) 2241function runTimeout(fun) { 2242 if (cachedSetTimeout === setTimeout) { 2243 //normal enviroments in sane situations 2244 return setTimeout(fun, 0); 2245 } 2246 // if setTimeout wasn't available but was latter defined 2247 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 2248 cachedSetTimeout = setTimeout; 2249 return setTimeout(fun, 0); 2250 } 2251 try { 2252 // when when somebody has screwed with setTimeout but no I.E. maddness 2253 return cachedSetTimeout(fun, 0); 2254 } catch(e){ 2255 try { 2256 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 2257 return cachedSetTimeout.call(null, fun, 0); 2258 } catch(e){ 2259 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 2260 return cachedSetTimeout.call(this, fun, 0); 2261 } 2262 } 2263 2264 2265} 2266function runClearTimeout(marker) { 2267 if (cachedClearTimeout === clearTimeout) { 2268 //normal enviroments in sane situations 2269 return clearTimeout(marker); 2270 } 2271 // if clearTimeout wasn't available but was latter defined 2272 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 2273 cachedClearTimeout = clearTimeout; 2274 return clearTimeout(marker); 2275 } 2276 try { 2277 // when when somebody has screwed with setTimeout but no I.E. maddness 2278 return cachedClearTimeout(marker); 2279 } catch (e){ 2280 try { 2281 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 2282 return cachedClearTimeout.call(null, marker); 2283 } catch (e){ 2284 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 2285 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 2286 return cachedClearTimeout.call(this, marker); 2287 } 2288 } 2289 2290 2291 2292} 2293var queue = []; 2294var draining = false;
vendor: 7,555 bytes, lines 2295-2602
2295var currentQueue; 2296var queueIndex = -1; 2297 2298function cleanUpNextTick() { 2299 if (!draining || !currentQueue) { 2300 return; 2301 } 2302 draining = false; 2303 if (currentQueue.length) { 2304 queue = currentQueue.concat(queue); 2305 } else { 2306 queueIndex = -1; 2307 } 2308 if (queue.length) { 2309 drainQueue(); 2310 } 2311} 2312 2313function drainQueue() { 2314 if (draining) { 2315 return; 2316 } 2317 var timeout = runTimeout(cleanUpNextTick); 2318 draining = true; 2319 2320 var len = queue.length; 2321 while(len) { 2322 currentQueue = queue; 2323 queue = []; 2324 while (++queueIndex < len) { 2325 if (currentQueue) { 2326 currentQueue[queueIndex].run(); 2327 } 2328 } 2329 queueIndex = -1; 2330 len = queue.length; 2331 } 2332 currentQueue = null; 2333 draining = false; 2334 runClearTimeout(timeout); 2335} 2336 2337process.nextTick = function (fun) { 2338 var args = new Array(arguments.length - 1); 2339 if (arguments.length > 1) { 2340 for (var i = 1; i < arguments.length; i++) { 2341 args[i - 1] = arguments[i]; 2342 } 2343 } 2344 queue.push(new Item(fun, args)); 2345 if (queue.length === 1 && !draining) { 2346 runTimeout(drainQueue); 2347 } 2348}; 2349 2350// v8 likes predictible objects 2351function Item(fun, array) { 2352 this.fun = fun; 2353 this.array = array; 2354} 2355Item.prototype.run = function () { 2356 this.fun.apply(null, this.array); 2357}; 2358process.title = 'browser'; 2359process.browser = true; 2360process.env = {}; 2361process.argv = []; 2362process.version = ''; // empty string to avoid regexp issues 2363process.versions = {}; 2364 2365function noop() {} 2366 2367process.on = noop; 2368process.addListener = noop; 2369process.once = noop; 2370process.off = noop; 2371process.removeListener = noop; 2372process.removeAllListeners = noop; 2373process.emit = noop; 2374process.prependListener = noop; 2375process.prependOnceListener = noop; 2376 2377process.listeners = function (name) { return [] } 2378 2379process.binding = function (name) { 2380 throw new Error('process.binding is not supported'); 2381}; 2382 2383process.cwd = function () { return '/' }; 2384process.chdir = function (dir) { 2385 throw new Error('process.chdir is not supported'); 2386}; 2387process.umask = function() { return 0; }; 2388 2389 2390/***/ }), 2391/* 12 */ 2392/***/ (function(module, exports, __webpack_require__) { 2393 2394// Generated by CoffeeScript 1.7.1 2395(function() { 2396 var NumberT, PropertyDescriptor; 2397 2398 NumberT = __webpack_require__(22).Number; 2399 2400 exports.resolveLength = function(length, stream, parent) { 2401 var res; 2402 if (typeof length === 'number') { 2403 res = length; 2404 } else if (typeof length === 'function') { 2405 res = length.call(parent, parent); 2406 } else if (parent && typeof length === 'string') { 2407 res = parent[length]; 2408 } else if (stream && length instanceof NumberT) { 2409 res = length.decode(stream); 2410 } 2411 if (isNaN(res)) { 2412 throw new Error('Not a fixed size'); 2413 } 2414 return res; 2415 }; 2416 2417 PropertyDescriptor = (function() { 2418 function PropertyDescriptor(opts) { 2419 var key, val; 2420 if (opts == null) { 2421 opts = {}; 2422 } 2423 this.enumerable = true; 2424 this.configurable = true; 2425 for (key in opts) { 2426 val = opts[key]; 2427 this[key] = val; 2428 } 2429 } 2430 2431 return PropertyDescriptor; 2432 2433 })(); 2434 2435 exports.PropertyDescriptor = PropertyDescriptor; 2436 2437}).call(this); 2438 2439 2440/***/ }), 2441/* 13 */ 2442/***/ (function(module, exports, __webpack_require__) { 2443 2444var dP = __webpack_require__(6); 2445var createDesc = __webpack_require__(27); 2446module.exports = __webpack_require__(5) ? function (object, key, value) { 2447 return dP.f(object, key, createDesc(1, value)); 2448} : function (object, key, value) { 2449 object[key] = value; 2450 return object; 2451}; 2452 2453 2454/***/ }), 2455/* 14 */ 2456/***/ (function(module, exports, __webpack_require__) { 2457 2458var isObject = __webpack_require__(9); 2459module.exports = function (it) { 2460 if (!isObject(it)) throw TypeError(it + ' is not an object!'); 2461 return it; 2462}; 2463 2464 2465/***/ }), 2466/* 15 */ 2467/***/ (function(module, exports, __webpack_require__) { 2468 2469// Copyright Joyent, Inc. and other Node contributors. 2470// 2471// Permission is hereby granted, free of charge, to any person obtaining a 2472// copy of this software and associated documentation files (the 2473// "Software"), to deal in the Software without restriction, including 2474// without limitation the rights to use, copy, modify, merge, publish, 2475// distribute, sublicense, and/or sell copies of the Software, and to permit 2476// persons to whom the Software is furnished to do so, subject to the 2477// following conditions: 2478// 2479// The above copyright notice and this permission notice shall be included 2480// in all copies or substantial portions of the Software. 2481// 2482// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 2483// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2484// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 2485// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 2486// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2487// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2488// USE OR OTHER DEALINGS IN THE SOFTWARE. 2489 2490module.exports = Stream; 2491 2492var EE = __webpack_require__(31).EventEmitter; 2493var inherits = __webpack_require__(21); 2494 2495inherits(Stream, EE); 2496Stream.Readable = __webpack_require__(45); 2497Stream.Writable = __webpack_require__(146); 2498Stream.Duplex = __webpack_require__(147); 2499Stream.Transform = __webpack_require__(148); 2500Stream.PassThrough = __webpack_require__(149); 2501 2502// Backwards-compat with node 0.4.x 2503Stream.Stream = Stream; 2504 2505 2506 2507// old-style streams. Note that the pipe method (the only relevant 2508// part of this class) is overridden in the Readable class. 2509 2510function Stream() { 2511 EE.call(this); 2512} 2513 2514Stream.prototype.pipe = function(dest, options) { 2515 var source = this; 2516 2517 function ondata(chunk) { 2518 if (dest.writable) { 2519 if (false === dest.write(chunk) && source.pause) { 2520 source.pause(); 2521 } 2522 } 2523 } 2524 2525 source.on('data', ondata); 2526 2527 function ondrain() { 2528 if (source.readable && source.resume) { 2529 source.resume(); 2530 } 2531 } 2532 2533 dest.on('drain', ondrain); 2534 2535 // If the 'end' option is not supplied, dest.end() will be called when 2536 // source gets the 'end' or 'close' events. Only dest.end() once. 2537 if (!dest._isStdio && (!options || options.end !== false)) { 2538 source.on('end', onend); 2539 source.on('close', onclose); 2540 } 2541 2542 var didOnEnd = false; 2543 function onend() { 2544 if (didOnEnd) return; 2545 didOnEnd = true; 2546 2547 dest.end(); 2548 } 2549 2550 2551 function onclose() { 2552 if (didOnEnd) return; 2553 didOnEnd = true; 2554 2555 if (typeof dest.destroy === 'function') dest.destroy(); 2556 } 2557 2558 // don't leave dangling pipes when there are errors. 2559 function onerror(er) { 2560 cleanup(); 2561 if (EE.listenerCount(this, 'error') === 0) { 2562 throw er; // Unhandled stream error in pipe. 2563 } 2564 } 2565 2566 source.on('error', onerror); 2567 dest.on('error', onerror); 2568 2569 // remove all the event listeners that were added. 2570 function cleanup() { 2571 source.removeListener('data', ondata); 2572 dest.removeListener('drain', ondrain); 2573 2574 source.removeListener('end', onend); 2575 source.removeListener('close', onclose); 2576 2577 source.removeListener('error', onerror); 2578 dest.removeListener('error', onerror); 2579 2580 source.removeListener('end', cleanup); 2581 source.removeListener('close', cleanup); 2582 2583 dest.removeListener('close', cleanup); 2584 } 2585 2586 source.on('end', cleanup); 2587 source.on('close', cleanup); 2588 2589 dest.on('close', cleanup); 2590 2591 dest.emit('pipe', source); 2592 2593 // Allow for unix-like usage: A.pipe(B).pipe(C) 2594 return dest; 2595}; 2596 2597 2598/***/ }), 2599/* 16 */ 2600/***/ (function(module, exports, __webpack_require__) { 2601 2602"use strict";
vendor: 4,219 bytes, lines 2603-2751
2603// Copyright Joyent, Inc. and other Node contributors. 2604// 2605// Permission is hereby granted, free of charge, to any person obtaining a 2606// copy of this software and associated documentation files (the 2607// "Software"), to deal in the Software without restriction, including 2608// without limitation the rights to use, copy, modify, merge, publish, 2609// distribute, sublicense, and/or sell copies of the Software, and to permit 2610// persons to whom the Software is furnished to do so, subject to the 2611// following conditions: 2612// 2613// The above copyright notice and this permission notice shall be included 2614// in all copies or substantial portions of the Software. 2615// 2616// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 2617// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2618// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 2619// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 2620// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2621// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2622// USE OR OTHER DEALINGS IN THE SOFTWARE. 2623 2624// a duplex stream is just a stream that is both readable and writable. 2625// Since JS doesn't have multiple prototypal inheritance, this class 2626// prototypally inherits from Readable, and then parasitically from 2627// Writable. 2628 2629 2630 2631/*<replacement>*/ 2632 2633var processNextTick = __webpack_require__(32).nextTick; 2634/*</replacement>*/ 2635 2636/*<replacement>*/ 2637var objectKeys = Object.keys || function (obj) { 2638 var keys = []; 2639 for (var key in obj) { 2640 keys.push(key); 2641 }return keys; 2642}; 2643/*</replacement>*/ 2644 2645module.exports = Duplex; 2646 2647/*<replacement>*/ 2648var util = __webpack_require__(25); 2649util.inherits = __webpack_require__(21); 2650/*</replacement>*/ 2651 2652var Readable = __webpack_require__(83); 2653var Writable = __webpack_require__(46); 2654 2655util.inherits(Duplex, Readable); 2656 2657var keys = objectKeys(Writable.prototype); 2658for (var v = 0; v < keys.length; v++) { 2659 var method = keys[v]; 2660 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; 2661} 2662 2663function Duplex(options) { 2664 if (!(this instanceof Duplex)) return new Duplex(options); 2665 2666 Readable.call(this, options); 2667 Writable.call(this, options); 2668 2669 if (options && options.readable === false) this.readable = false; 2670 2671 if (options && options.writable === false) this.writable = false; 2672 2673 this.allowHalfOpen = true; 2674 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; 2675 2676 this.once('end', onend); 2677} 2678 2679// the no-half-open enforcer 2680function onend() { 2681 // if we allow half-open state, or if the writable side ended, 2682 // then we're ok. 2683 if (this.allowHalfOpen || this._writableState.ended) return; 2684 2685 // no more data can be written. 2686 // But allow more writes to happen in this tick. 2687 processNextTick(onEndNT, this); 2688} 2689 2690function onEndNT(self) { 2691 self.end(); 2692} 2693 2694Object.defineProperty(Duplex.prototype, 'destroyed', { 2695 get: function () { 2696 if (this._readableState === undefined || this._writableState === undefined) { 2697 return false; 2698 } 2699 return this._readableState.destroyed && this._writableState.destroyed; 2700 }, 2701 set: function (value) { 2702 // we ignore the value if the stream 2703 // has not been initialized yet 2704 if (this._readableState === undefined || this._writableState === undefined) { 2705 return; 2706 } 2707 2708 // backward compatibility, the user is explicitly 2709 // managing destroyed 2710 this._readableState.destroyed = value; 2711 this._writableState.destroyed = value; 2712 } 2713}); 2714 2715Duplex.prototype._destroy = function (err, cb) { 2716 this.push(null); 2717 this.end(); 2718 2719 processNextTick(cb, err); 2720}; 2721 2722function forEach(xs, f) { 2723 for (var i = 0, l = xs.length; i < l; i++) { 2724 f(xs[i], i); 2725 } 2726} 2727 2728/***/ }), 2729/* 17 */ 2730/***/ (function(module, exports, __webpack_require__) { 2731 2732// to indexed object, toObject with fallback for non-array-like ES3 strings 2733var IObject = __webpack_require__(54); 2734var defined = __webpack_require__(56); 2735module.exports = function (it) { 2736 return IObject(defined(it)); 2737}; 2738 2739 2740/***/ }), 2741/* 18 */ 2742/***/ (function(module, exports) { 2743 2744var hasOwnProperty = {}.hasOwnProperty; 2745module.exports = function (it, key) { 2746 return hasOwnProperty.call(it, key); 2747}; 2748 2749 2750/***/ }), 2751/* 19 */
2752/***/ (function(module, exports) { 2753 2754module.exports = function (exec) { 2755 try { 2756 return !!exec(); 2757 } catch (e) { 2758 return true; 2759 } 2760}; 2761 2762 2763/***/ }), 2764/* 20 */ 2765/***/ (function(module, exports, __webpack_require__) { 2766 2767// optional / simple context binding 2768var aFunction = __webpack_require__(97); 2769module.exports = function (fn, that, length) { 2770 aFunction(fn); 2771 if (that === undefined) return fn; 2772 switch (length) { 2773 case 1: return function (a) { 2774 return fn.call(that, a); 2775 }; 2776 case 2: return function (a, b) { 2777 return fn.call(that, a, b); 2778 }; 2779 case 3: return function (a, b, c) { 2780 return fn.call(that, a, b, c); 2781 }; 2782 } 2783 return function (/* ...args */) { 2784 return fn.apply(that, arguments); 2785 }; 2786}; 2787 2788 2789/***/ }), 2790/* 21 */ 2791/***/ (function(module, exports) { 2792 2793if (typeof Object.create === 'function') { 2794 // implementation from standard node.js 'util' module 2795 module.exports = function inherits(ctor, superCtor) { 2796 ctor.super_ = superCtor 2797 ctor.prototype = Object.create(superCtor.prototype, { 2798 constructor: { 2799 value: ctor, 2800 enumerable: false, 2801 writable: true, 2802 configurable: true 2803 } 2804 }); 2805 }; 2806} else { 2807 // old school shim for old browsers 2808 module.exports = function inherits(ctor, superCtor) { 2809 ctor.super_ = superCtor 2810 var TempCtor = function () {} 2811 TempCtor.prototype = superCtor.prototype 2812 ctor.prototype = new TempCtor() 2813 ctor.prototype.constructor = ctor 2814 } 2815} 2816 2817 2818/***/ }), 2819/* 22 */ 2820/***/ (function(module, exports, __webpack_require__) { 2821 2822// Generated by CoffeeScript 1.7.1 2823(function() { 2824 var DecodeStream, Fixed, NumberT, 2825 __hasProp = {}.hasOwnProperty, 2826 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 2827 2828 DecodeStream = __webpack_require__(51); 2829 2830 NumberT = (function() { 2831 function NumberT(type, endian) { 2832 this.type = type; 2833 this.endian = endian != null ? endian : 'BE'; 2834 this.fn = this.type; 2835 if (this.type[this.type.length - 1] !== '8') { 2836 this.fn += this.endian; 2837 } 2838 } 2839 2840 NumberT.prototype.size = function() { 2841 return DecodeStream.TYPES[this.type]; 2842 }; 2843 2844 NumberT.prototype.decode = function(stream) { 2845 return stream['read' + this.fn](); 2846 }; 2847 2848 NumberT.prototype.encode = function(stream, val) { 2849 return stream['write' + this.fn](val); 2850 }; 2851 2852 return NumberT; 2853 2854 })(); 2855 2856 exports.Number = NumberT; 2857 2858 exports.uint8 = new NumberT('UInt8'); 2859 2860 exports.uint16be = exports.uint16 = new NumberT('UInt16', 'BE'); 2861 2862 exports.uint16le = new NumberT('UInt16', 'LE'); 2863 2864 exports.uint24be = exports.uint24 = new NumberT('UInt24', 'BE'); 2865 2866 exports.uint24le = new NumberT('UInt24', 'LE'); 2867 2868 exports.uint32be = exports.uint32 = new NumberT('UInt32', 'BE'); 2869 2870 exports.uint32le = new NumberT('UInt32', 'LE'); 2871 2872 exports.int8 = new NumberT('Int8'); 2873 2874 exports.int16be = exports.int16 = new NumberT('Int16', 'BE'); 2875 2876 exports.int16le = new NumberT('Int16', 'LE'); 2877 2878 exports.int24be = exports.int24 = new NumberT('Int24', 'BE'); 2879 2880 exports.int24le = new NumberT('Int24', 'LE'); 2881 2882 exports.int32be = exports.int32 = new NumberT('Int32', 'BE'); 2883 2884 exports.int32le = new NumberT('Int32', 'LE'); 2885 2886 exports.floatbe = exports.float = new NumberT('Float', 'BE'); 2887 2888 exports.floatle = new NumberT('Float', 'LE'); 2889 2890 exports.doublebe = exports.double = new NumberT('Double', 'BE'); 2891 2892 exports.doublele = new NumberT('Double', 'LE'); 2893 2894 Fixed = (function(_super) { 2895 __extends(Fixed, _super); 2896 2897 function Fixed(size, endian, fracBits) { 2898 if (fracBits == null) { 2899 fracBits = size >> 1; 2900 } 2901 Fixed.__super__.constructor.call(this, "Int" + size, endian); 2902 this._point = 1 << fracBits; 2903 } 2904 2905 Fixed.prototype.decode = function(stream) { 2906 return Fixed.__super__.decode.call(this, stream) / this._point; 2907 }; 2908 2909 Fixed.prototype.encode = function(stream, val) { 2910 return Fixed.__super__.encode.call(this, stream, val * this._point | 0); 2911 }; 2912 2913 return Fixed; 2914 2915 })(NumberT); 2916 2917 exports.Fixed = Fixed; 2918 2919 exports.fixed16be = exports.fixed16 = new Fixed(16, 'BE'); 2920 2921 exports.fixed16le = new Fixed(16, 'LE'); 2922 2923 exports.fixed32be = exports.fixed32 = new Fixed(32, 'BE'); 2924 2925 exports.fixed32le = new Fixed(32, 'LE'); 2926 2927}).call(this); 2928 2929 2930/***/ }), 2931/* 23 */
2932/***/ (function(module, exports) { 2933 2934module.exports = {}; 2935 2936 2937/***/ }), 2938/* 24 */ 2939/***/ (function(module, exports, __webpack_require__) { 2940 2941"use strict"; 2942 2943var $at = __webpack_require__(207)(true); 2944 2945// 21.1.3.27 String.prototype[@@iterator]() 2946__webpack_require__(61)(String, 'String', function (iterated) { 2947 this._t = String(iterated); // target 2948 this._i = 0; // next index 2949// 21.1.5.2.1 %StringIteratorPrototype%.next() 2950}, function () { 2951 var O = this._t; 2952 var index = this._i; 2953 var point; 2954 if (index >= O.length) return { value: undefined, done: true }; 2955 point = $at(O, index); 2956 this._i += point.length; 2957 return { value: point, done: false }; 2958}); 2959 2960 2961/***/ }), 2962/* 25 */ 2963/***/ (function(module, exports, __webpack_require__) { 2964 2965/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors. 2966// 2967// Permission is hereby granted, free of charge, to any person obtaining a 2968// copy of this software and associated documentation files (the 2969// "Software"), to deal in the Software without restriction, including 2970// without limitation the rights to use, copy, modify, merge, publish, 2971// distribute, sublicense, and/or sell copies of the Software, and to permit 2972// persons to whom the Software is furnished to do so, subject to the 2973// following conditions: 2974// 2975// The above copyright notice and this permission notice shall be included 2976// in all copies or substantial portions of the Software. 2977// 2978// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 2979// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2980// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 2981// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 2982// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2983// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2984// USE OR OTHER DEALINGS IN THE SOFTWARE. 2985 2986// NOTE: These type checking functions intentionally don't use `instanceof` 2987// because it is fragile and can be easily faked with `Object.create()`. 2988 2989function isArray(arg) { 2990 if (Array.isArray) { 2991 return Array.isArray(arg); 2992 } 2993 return objectToString(arg) === '[object Array]'; 2994} 2995exports.isArray = isArray; 2996 2997function isBoolean(arg) { 2998 return typeof arg === 'boolean'; 2999} 3000exports.isBoolean = isBoolean; 3001 3002function isNull(arg) { 3003 return arg === null; 3004} 3005exports.isNull = isNull; 3006 3007function isNullOrUndefined(arg) { 3008 return arg == null; 3009} 3010exports.isNullOrUndefined = isNullOrUndefined; 3011 3012function isNumber(arg) { 3013 return typeof arg === 'number'; 3014} 3015exports.isNumber = isNumber; 3016 3017function isString(arg) { 3018 return typeof arg === 'string'; 3019} 3020exports.isString = isString; 3021 3022function isSymbol(arg) { 3023 return typeof arg === 'symbol'; 3024} 3025exports.isSymbol = isSymbol; 3026 3027function isUndefined(arg) { 3028 return arg === void 0; 3029} 3030exports.isUndefined = isUndefined; 3031 3032function isRegExp(re) { 3033 return objectToString(re) === '[object RegExp]'; 3034} 3035exports.isRegExp = isRegExp; 3036 3037function isObject(arg) { 3038 return typeof arg === 'object' && arg !== null; 3039} 3040exports.isObject = isObject; 3041 3042function isDate(d) { 3043 return objectToString(d) === '[object Date]'; 3044} 3045exports.isDate = isDate; 3046 3047function isError(e) { 3048 return (objectToString(e) === '[object Error]' || e instanceof Error); 3049} 3050exports.isError = isError; 3051 3052function isFunction(arg) { 3053 return typeof arg === 'function'; 3054} 3055exports.isFunction = isFunction; 3056 3057function isPrimitive(arg) { 3058 return arg === null || 3059 typeof arg === 'boolean' || 3060 typeof arg === 'number' || 3061 typeof arg === 'string' || 3062 typeof arg === 'symbol' || // ES6 symbol 3063 typeof arg === 'undefined'; 3064} 3065exports.isPrimitive = isPrimitive; 3066 3067exports.isBuffer = Buffer.isBuffer; 3068 3069function objectToString(o) { 3070 return Object.prototype.toString.call(o); 3071} 3072 3073/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 3074 3075/***/ }), 3076/* 26 */ 3077/***/ (function(module, exports, __webpack_require__) { 3078 3079/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 3080 3081/* 3082PDFObject - converts JavaScript types into their corrisponding PDF types. 3083By Devon Govett 3084 */ 3085 3086(function() { 3087 var PDFObject, PDFReference; 3088 3089 PDFObject = (function() { 3090 var escapable, escapableRe, pad, swapBytes; 3091 3092 function PDFObject() {} 3093 3094 pad = function(str, length) { 3095 return (Array(length + 1).join('0') + str).slice(-length); 3096 }; 3097 3098 escapableRe = /[\n\r\t\b\f\(\)\\]/g; 3099 3100 escapable = { 3101 '\n': '\\n', 3102 '\r': '\\r', 3103 '\t': '\\t', 3104 '\b': '\\b', 3105 '\f': '\\f', 3106 '\\': '\\\\', 3107 '(': '\\(', 3108 ')': '\\)' 3109 }; 3110 3111 swapBytes = function(buff) { 3112 var a, i, j, l, ref; 3113 l = buff.length; 3114 if (l & 0x01) { 3115 throw new Error("Buffer length must be even"); 3116 } else { 3117 for (i = j = 0, ref = l - 1; j < ref; i = j += 2) { 3118 a = buff[i]; 3119 buff[i] = buff[i + 1]; 3120 buff[i + 1] = a; 3121 } 3122 } 3123 return buff; 3124 }; 3125 3126 PDFObject.convert = function(object) { 3127 var e, i, isUnicode, items, j, key, out, ref, string, val; 3128 if (typeof object === 'string') { 3129 return '/' + object; 3130 } else if (object instanceof String) {
3131 string = object; 3132 isUnicode = false; 3133 for (i = j = 0, ref = string.length; j < ref; i = j += 1) { 3134 if (string.charCodeAt(i) > 0x7f) { 3135 isUnicode = true; 3136 break; 3137 } 3138 } 3139 if (isUnicode) { 3140 string = swapBytes(new Buffer('\ufeff' + string, 'utf16le')).toString('binary'); 3141 } 3142 string = string.replace(escapableRe, function(c) { 3143 return escapable[c]; 3144 }); 3145 return '(' + string + ')'; 3146 } else if (Buffer.isBuffer(object)) { 3147 return '<' + object.toString('hex') + '>'; 3148 } else if (object instanceof PDFReference) { 3149 return object.toString(); 3150 } else if (object instanceof Date) { 3151 return '(D:' + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth() + 1, 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z)'; 3152 } else if (Array.isArray(object)) { 3153 items = ((function() { 3154 var k, len, results; 3155 results = []; 3156 for (k = 0, len = object.length; k < len; k++) { 3157 e = object[k]; 3158 results.push(PDFObject.convert(e)); 3159 } 3160 return results; 3161 })()).join(' '); 3162 return '[' + items + ']'; 3163 } else if ({}.toString.call(object) === '[object Object]') { 3164 out = ['<<']; 3165 for (key in object) { 3166 val = object[key]; 3167 out.push('/' + key + ' ' + PDFObject.convert(val)); 3168 } 3169 out.push('>>'); 3170 return out.join('\n'); 3171 } else if (typeof object === 'number') { 3172 return PDFObject.number(object); 3173 } else { 3174 return '' + object; 3175 } 3176 }; 3177 3178 PDFObject.number = function(n) { 3179 if (n > -1e21 && n < 1e21) { 3180 return Math.round(n * 1e6) / 1e6; 3181 } 3182 throw new Error("unsupported number: " + n); 3183 }; 3184 3185 return PDFObject; 3186 3187 })(); 3188 3189 module.exports = PDFObject; 3190 3191 PDFReference = __webpack_require__(87); 3192 3193}).call(this); 3194 3195/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 3196 3197/***/ }), 3198/* 27 */ 3199/***/ (function(module, exports) { 3200 3201module.exports = function (bitmap, value) { 3202 return { 3203 enumerable: !(bitmap & 1), 3204 configurable: !(bitmap & 2), 3205 writable: !(bitmap & 4), 3206 value: value 3207 }; 3208}; 3209 3210 3211/***/ }), 3212/* 28 */ 3213/***/ (function(module, exports, __webpack_require__) { 3214 3215__webpack_require__(201); 3216var global = __webpack_require__(10); 3217var hide = __webpack_require__(13); 3218var Iterators = __webpack_require__(23); 3219var TO_STRING_TAG = __webpack_require__(4)('toStringTag'); 3220 3221var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' + 3222 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' + 3223 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' + 3224 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' + 3225 'TextTrackList,TouchList').split(','); 3226 3227for (var i = 0; i < DOMIterables.length; i++) { 3228 var NAME = DOMIterables[i]; 3229 var Collection = global[NAME]; 3230 var proto = Collection && Collection.prototype; 3231 if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); 3232 Iterators[NAME] = Iterators.Array; 3233} 3234 3235 3236/***/ }), 3237/* 29 */ 3238/***/ (function(module, exports, __webpack_require__) { 3239 3240// 19.1.2.14 / 15.2.3.14 Object.keys(O) 3241var $keys = __webpack_require__(101); 3242var enumBugKeys = __webpack_require__(66); 3243 3244module.exports = Object.keys || function keys(O) { 3245 return $keys(O, enumBugKeys); 3246}; 3247 3248 3249/***/ }), 3250/* 30 */ 3251/***/ (function(module, exports, __webpack_require__) { 3252 3253// 7.1.13 ToObject(argument) 3254var defined = __webpack_require__(56); 3255module.exports = function (it) { 3256 return Object(defined(it)); 3257}; 3258 3259 3260/***/ }), 3261/* 31 */ 3262/***/ (function(module, exports) { 3263 3264// Copyright Joyent, Inc. and other Node contributors. 3265// 3266// Permission is hereby granted, free of charge, to any person obtaining a 3267// copy of this software and associated documentation files (the 3268// "Software"), to deal in the Software without restriction, including 3269// without limitation the rights to use, copy, modify, merge, publish, 3270// distribute, sublicense, and/or sell copies of the Software, and to permit 3271// persons to whom the Software is furnished to do so, subject to the 3272// following conditions: 3273// 3274// The above copyright notice and this permission notice shall be included 3275// in all copies or substantial portions of the Software. 3276// 3277// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 3278// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 3279// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 3280// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 3281// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 3282// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 3283// USE OR OTHER DEALINGS IN THE SOFTWARE. 3284 3285function EventEmitter() { 3286 this._events = this._events || {}; 3287 this._maxListeners = this._maxListeners || undefined; 3288} 3289module.exports = EventEmitter; 3290 3291// Backwards-compat with node 0.10.x 3292EventEmitter.EventEmitter = EventEmitter; 3293 3294EventEmitter.prototype._events = undefined; 3295EventEmitter.prototype._maxListeners = undefined; 3296 3297// By default EventEmitters will print a warning if more than 10 listeners are 3298// added to it. This is a useful default which helps finding memory leaks. 3299EventEmitter.defaultMaxListeners = 10; 3300 3301// Obviously not all Emitters should be limited to 10. This function allows 3302// that to be increased. Set to zero for unlimited. 3303EventEmitter.prototype.setMaxListeners = function(n) { 3304 if (!isNumber(n) || n < 0 || isNaN(n)) 3305 throw TypeError('n must be a positive number'); 3306 this._maxListeners = n; 3307 return this; 3308}; 3309 3310EventEmitter.prototype.emit = function(type) { 3311 var er, handler, len, args, i, listeners; 3312 3313 if (!this._events) 3314 this._events = {}; 3315 3316 // If there is no 'error' event listener then throw. 3317 if (type === 'error') { 3318 if (!this._events.error || 3319 (isObject(this._events.error) && !this._events.error.length)) { 3320 er = arguments[1]; 3321 if (er instanceof Error) { 3322 throw er; // Unhandled 'error' event 3323 } else { 3324 // At least give some kind of context to the user 3325 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); 3326 err.context = er; 3327 throw err; 3328 } 3329 } 3330 } 3331 3332 handler = this._events[type]; 3333 3334 if (isUndefined(handler)) 3335 return false;
vendor: 6,757 bytes, lines 3336-3611
3336 3337 if (isFunction(handler)) { 3338 switch (arguments.length) { 3339 // fast cases 3340 case 1: 3341 handler.call(this); 3342 break; 3343 case 2: 3344 handler.call(this, arguments[1]); 3345 break; 3346 case 3: 3347 handler.call(this, arguments[1], arguments[2]); 3348 break; 3349 // slower 3350 default: 3351 args = Array.prototype.slice.call(arguments, 1); 3352 handler.apply(this, args); 3353 } 3354 } else if (isObject(handler)) { 3355 args = Array.prototype.slice.call(arguments, 1); 3356 listeners = handler.slice(); 3357 len = listeners.length; 3358 for (i = 0; i < len; i++) 3359 listeners[i].apply(this, args); 3360 } 3361 3362 return true; 3363}; 3364 3365EventEmitter.prototype.addListener = function(type, listener) { 3366 var m; 3367 3368 if (!isFunction(listener)) 3369 throw TypeError('listener must be a function'); 3370 3371 if (!this._events) 3372 this._events = {}; 3373 3374 // To avoid recursion in the case that type === "newListener"! Before 3375 // adding it to the listeners, first emit "newListener". 3376 if (this._events.newListener) 3377 this.emit('newListener', type, 3378 isFunction(listener.listener) ? 3379 listener.listener : listener); 3380 3381 if (!this._events[type]) 3382 // Optimize the case of one listener. Don't need the extra array object. 3383 this._events[type] = listener; 3384 else if (isObject(this._events[type])) 3385 // If we've already got an array, just append. 3386 this._events[type].push(listener); 3387 else 3388 // Adding the second element, need to change to array. 3389 this._events[type] = [this._events[type], listener]; 3390 3391 // Check for listener leak 3392 if (isObject(this._events[type]) && !this._events[type].warned) { 3393 if (!isUndefined(this._maxListeners)) { 3394 m = this._maxListeners; 3395 } else { 3396 m = EventEmitter.defaultMaxListeners; 3397 } 3398 3399 if (m && m > 0 && this._events[type].length > m) { 3400 this._events[type].warned = true; 3401 console.error('(node) warning: possible EventEmitter memory ' + 3402 'leak detected. %d listeners added. ' + 3403 'Use emitter.setMaxListeners() to increase limit.', 3404 this._events[type].length); 3405 if (typeof console.trace === 'function') { 3406 // not supported in IE 10 3407 console.trace(); 3408 } 3409 } 3410 } 3411 3412 return this; 3413}; 3414 3415EventEmitter.prototype.on = EventEmitter.prototype.addListener; 3416 3417EventEmitter.prototype.once = function(type, listener) { 3418 if (!isFunction(listener)) 3419 throw TypeError('listener must be a function'); 3420 3421 var fired = false; 3422 3423 function g() { 3424 this.removeListener(type, g); 3425 3426 if (!fired) { 3427 fired = true; 3428 listener.apply(this, arguments); 3429 } 3430 } 3431 3432 g.listener = listener; 3433 this.on(type, g); 3434 3435 return this; 3436}; 3437 3438// emits a 'removeListener' event iff the listener was removed 3439EventEmitter.prototype.removeListener = function(type, listener) { 3440 var list, position, length, i; 3441 3442 if (!isFunction(listener)) 3443 throw TypeError('listener must be a function'); 3444 3445 if (!this._events || !this._events[type]) 3446 return this; 3447 3448 list = this._events[type]; 3449 length = list.length; 3450 position = -1; 3451 3452 if (list === listener || 3453 (isFunction(list.listener) && list.listener === listener)) { 3454 delete this._events[type]; 3455 if (this._events.removeListener) 3456 this.emit('removeListener', type, listener); 3457 3458 } else if (isObject(list)) { 3459 for (i = length; i-- > 0;) { 3460 if (list[i] === listener || 3461 (list[i].listener && list[i].listener === listener)) { 3462 position = i; 3463 break; 3464 } 3465 } 3466 3467 if (position < 0) 3468 return this; 3469 3470 if (list.length === 1) { 3471 list.length = 0; 3472 delete this._events[type]; 3473 } else { 3474 list.splice(position, 1); 3475 } 3476 3477 if (this._events.removeListener) 3478 this.emit('removeListener', type, listener); 3479 } 3480 3481 return this; 3482}; 3483 3484EventEmitter.prototype.removeAllListeners = function(type) { 3485 var key, listeners; 3486 3487 if (!this._events) 3488 return this; 3489 3490 // not listening for removeListener, no need to emit 3491 if (!this._events.removeListener) { 3492 if (arguments.length === 0) 3493 this._events = {}; 3494 else if (this._events[type]) 3495 delete this._events[type]; 3496 return this; 3497 } 3498 3499 // emit removeListener for all listeners on all events 3500 if (arguments.length === 0) { 3501 for (key in this._events) { 3502 if (key === 'removeListener') continue; 3503 this.removeAllListeners(key); 3504 } 3505 this.removeAllListeners('removeListener'); 3506 this._events = {}; 3507 return this; 3508 } 3509 3510 listeners = this._events[type]; 3511 3512 if (isFunction(listeners)) { 3513 this.removeListener(type, listeners); 3514 } else if (listeners) { 3515 // LIFO order 3516 while (listeners.length) 3517 this.removeListener(type, listeners[listeners.length - 1]); 3518 } 3519 delete this._events[type]; 3520 3521 return this; 3522}; 3523 3524EventEmitter.prototype.listeners = function(type) { 3525 var ret; 3526 if (!this._events || !this._events[type]) 3527 ret = []; 3528 else if (isFunction(this._events[type])) 3529 ret = [this._events[type]]; 3530 else 3531 ret = this._events[type].slice(); 3532 return ret; 3533}; 3534 3535EventEmitter.prototype.listenerCount = function(type) { 3536 if (this._events) { 3537 var evlistener = this._events[type]; 3538 3539 if (isFunction(evlistener)) 3540 return 1; 3541 else if (evlistener) 3542 return evlistener.length; 3543 } 3544 return 0; 3545}; 3546 3547EventEmitter.listenerCount = function(emitter, type) { 3548 return emitter.listenerCount(type); 3549}; 3550 3551function isFunction(arg) { 3552 return typeof arg === 'function'; 3553} 3554 3555function isNumber(arg) { 3556 return typeof arg === 'number'; 3557} 3558 3559function isObject(arg) { 3560 return typeof arg === 'object' && arg !== null; 3561} 3562 3563function isUndefined(arg) { 3564 return arg === void 0; 3565} 3566 3567 3568/***/ }), 3569/* 32 */ 3570/***/ (function(module, exports, __webpack_require__) { 3571 3572"use strict"; 3573/* WEBPACK VAR INJECTION */(function(process) { 3574 3575if (!process.version || 3576 process.version.indexOf('v0.') === 0 || 3577 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { 3578 module.exports = { nextTick: nextTick }; 3579} else { 3580 module.exports = process 3581} 3582 3583function nextTick(fn, arg1, arg2, arg3) { 3584 if (typeof fn !== 'function') { 3585 throw new TypeError('"callback" argument must be a function'); 3586 } 3587 var len = arguments.length; 3588 var args, i; 3589 switch (len) { 3590 case 0: 3591 case 1: 3592 return process.nextTick(fn); 3593 case 2: 3594 return process.nextTick(function afterTickOne() { 3595 fn.call(null, arg1); 3596 }); 3597 case 3: 3598 return process.nextTick(function afterTickTwo() { 3599 fn.call(null, arg1, arg2); 3600 }); 3601 case 4: 3602 return process.nextTick(function afterTickThree() { 3603 fn.call(null, arg1, arg2, arg3); 3604 }); 3605 default: 3606 args = new Array(len - 1); 3607 i = 0; 3608 while (i < args.length) { 3609 args[i++] = arguments[i]; 3610 } 3611 return process.nextTick(function afterTick() {
3612 fn.apply(null, args); 3613 }); 3614 } 3615} 3616 3617 3618/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11))) 3619 3620/***/ }), 3621/* 33 */ 3622/***/ (function(module, exports, __webpack_require__) { 3623 3624/* eslint-disable node/no-deprecated-api */ 3625var buffer = __webpack_require__(1) 3626var Buffer = buffer.Buffer 3627 3628// alternative to using Object.keys for old browsers 3629function copyProps (src, dst) { 3630 for (var key in src) { 3631 dst[key] = src[key] 3632 } 3633} 3634if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { 3635 module.exports = buffer 3636} else { 3637 // Copy properties from require('buffer') 3638 copyProps(buffer, exports) 3639 exports.Buffer = SafeBuffer 3640} 3641 3642function SafeBuffer (arg, encodingOrOffset, length) { 3643 return Buffer(arg, encodingOrOffset, length) 3644} 3645 3646// Copy static methods from Buffer 3647copyProps(Buffer, SafeBuffer) 3648 3649SafeBuffer.from = function (arg, encodingOrOffset, length) { 3650 if (typeof arg === 'number') { 3651 throw new TypeError('Argument must not be a number') 3652 } 3653 return Buffer(arg, encodingOrOffset, length) 3654} 3655 3656SafeBuffer.alloc = function (size, fill, encoding) { 3657 if (typeof size !== 'number') { 3658 throw new TypeError('Argument must be a number') 3659 } 3660 var buf = Buffer(size) 3661 if (fill !== undefined) { 3662 if (typeof encoding === 'string') { 3663 buf.fill(fill, encoding) 3664 } else { 3665 buf.fill(fill) 3666 } 3667 } else { 3668 buf.fill(0) 3669 } 3670 return buf 3671} 3672 3673SafeBuffer.allocUnsafe = function (size) { 3674 if (typeof size !== 'number') { 3675 throw new TypeError('Argument must be a number') 3676 } 3677 return Buffer(size) 3678} 3679 3680SafeBuffer.allocUnsafeSlow = function (size) { 3681 if (typeof size !== 'number') { 3682 throw new TypeError('Argument must be a number') 3683 } 3684 return buffer.SlowBuffer(size) 3685} 3686 3687 3688/***/ }), 3689/* 34 */ 3690/***/ (function(module, exports, __webpack_require__) { 3691 3692"use strict"; 3693 3694 3695 3696var TYPED_OK = (typeof Uint8Array !== 'undefined') && 3697 (typeof Uint16Array !== 'undefined') && 3698 (typeof Int32Array !== 'undefined'); 3699 3700function _has(obj, key) { 3701 return Object.prototype.hasOwnProperty.call(obj, key); 3702} 3703 3704exports.assign = function (obj /*from1, from2, from3, ...*/) { 3705 var sources = Array.prototype.slice.call(arguments, 1); 3706 while (sources.length) { 3707 var source = sources.shift(); 3708 if (!source) { continue; } 3709 3710 if (typeof source !== 'object') { 3711 throw new TypeError(source + 'must be non-object'); 3712 } 3713 3714 for (var p in source) { 3715 if (_has(source, p)) { 3716 obj[p] = source[p]; 3717 } 3718 } 3719 } 3720 3721 return obj; 3722}; 3723 3724 3725// reduce buffer size, avoiding mem copy 3726exports.shrinkBuf = function (buf, size) { 3727 if (buf.length === size) { return buf; } 3728 if (buf.subarray) { return buf.subarray(0, size); } 3729 buf.length = size; 3730 return buf; 3731}; 3732 3733 3734var fnTyped = { 3735 arraySet: function (dest, src, src_offs, len, dest_offs) { 3736 if (src.subarray && dest.subarray) { 3737 dest.set(src.subarray(src_offs, src_offs + len), dest_offs); 3738 return; 3739 } 3740 // Fallback to ordinary array 3741 for (var i = 0; i < len; i++) { 3742 dest[dest_offs + i] = src[src_offs + i]; 3743 } 3744 }, 3745 // Join array of chunks to single array. 3746 flattenChunks: function (chunks) { 3747 var i, l, len, pos, chunk, result; 3748 3749 // calculate data length 3750 len = 0; 3751 for (i = 0, l = chunks.length; i < l; i++) { 3752 len += chunks[i].length; 3753 } 3754 3755 // join chunks 3756 result = new Uint8Array(len); 3757 pos = 0; 3758 for (i = 0, l = chunks.length; i < l; i++) { 3759 chunk = chunks[i]; 3760 result.set(chunk, pos); 3761 pos += chunk.length; 3762 } 3763 3764 return result; 3765 } 3766}; 3767 3768var fnUntyped = { 3769 arraySet: function (dest, src, src_offs, len, dest_offs) { 3770 for (var i = 0; i < len; i++) { 3771 dest[dest_offs + i] = src[src_offs + i]; 3772 } 3773 }, 3774 // Join array of chunks to single array. 3775 flattenChunks: function (chunks) { 3776 return [].concat.apply([], chunks); 3777 } 3778}; 3779 3780 3781// Enable/Disable typed arrays use, for testing 3782// 3783exports.setTyped = function (on) { 3784 if (on) { 3785 exports.Buf8 = Uint8Array; 3786 exports.Buf16 = Uint16Array; 3787 exports.Buf32 = Int32Array; 3788 exports.assign(exports, fnTyped); 3789 } else { 3790 exports.Buf8 = Array; 3791 exports.Buf16 = Array; 3792 exports.Buf32 = Array; 3793 exports.assign(exports, fnUntyped); 3794 } 3795}; 3796 3797exports.setTyped(TYPED_OK); 3798 3799 3800/***/ }), 3801/* 35 */
vendor: 4,401 bytes, lines 3802-3956
3802/***/ (function(module, exports) { 3803 3804exports.f = {}.propertyIsEnumerable; 3805 3806 3807/***/ }), 3808/* 36 */ 3809/***/ (function(module, exports, __webpack_require__) { 3810 3811// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) 3812var anObject = __webpack_require__(14); 3813var dPs = __webpack_require__(100); 3814var enumBugKeys = __webpack_require__(66); 3815var IE_PROTO = __webpack_require__(64)('IE_PROTO'); 3816var Empty = function () { /* empty */ }; 3817var PROTOTYPE = 'prototype'; 3818 3819// Create object with fake `null` prototype: use iframe Object with cleared prototype 3820var createDict = function () { 3821 // Thrash, waste and sodomy: IE GC bug 3822 var iframe = __webpack_require__(96)('iframe'); 3823 var i = enumBugKeys.length; 3824 var lt = '<'; 3825 var gt = '>'; 3826 var iframeDocument; 3827 iframe.style.display = 'none'; 3828 __webpack_require__(205).appendChild(iframe); 3829 iframe.src = 'javascript:'; // eslint-disable-line no-script-url 3830 // createDict = iframe.contentWindow.Object; 3831 // html.removeChild(iframe); 3832 iframeDocument = iframe.contentWindow.document; 3833 iframeDocument.open(); 3834 iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); 3835 iframeDocument.close(); 3836 createDict = iframeDocument.F; 3837 while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; 3838 return createDict(); 3839}; 3840 3841module.exports = Object.create || function create(O, Properties) { 3842 var result; 3843 if (O !== null) { 3844 Empty[PROTOTYPE] = anObject(O); 3845 result = new Empty(); 3846 Empty[PROTOTYPE] = null; 3847 // add "__proto__" for Object.getPrototypeOf polyfill 3848 result[IE_PROTO] = O; 3849 } else result = createDict(); 3850 return Properties === undefined ? result : dPs(result, Properties); 3851}; 3852 3853 3854/***/ }), 3855/* 37 */ 3856/***/ (function(module, exports, __webpack_require__) { 3857 3858// 7.1.15 ToLength 3859var toInteger = __webpack_require__(63); 3860var min = Math.min; 3861module.exports = function (it) { 3862 return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 3863}; 3864 3865 3866/***/ }), 3867/* 38 */ 3868/***/ (function(module, exports) { 3869 3870var id = 0; 3871var px = Math.random(); 3872module.exports = function (key) { 3873 return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); 3874}; 3875 3876 3877/***/ }), 3878/* 39 */ 3879/***/ (function(module, exports, __webpack_require__) { 3880 3881var def = __webpack_require__(6).f; 3882var has = __webpack_require__(18); 3883var TAG = __webpack_require__(4)('toStringTag'); 3884 3885module.exports = function (it, tag, stat) { 3886 if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); 3887}; 3888 3889 3890/***/ }), 3891/* 40 */ 3892/***/ (function(module, exports, __webpack_require__) { 3893 3894var META = __webpack_require__(38)('meta'); 3895var isObject = __webpack_require__(9); 3896var has = __webpack_require__(18); 3897var setDesc = __webpack_require__(6).f; 3898var id = 0; 3899var isExtensible = Object.isExtensible || function () { 3900 return true; 3901}; 3902var FREEZE = !__webpack_require__(19)(function () { 3903 return isExtensible(Object.preventExtensions({})); 3904}); 3905var setMeta = function (it) { 3906 setDesc(it, META, { value: { 3907 i: 'O' + ++id, // object ID 3908 w: {} // weak collections IDs 3909 } }); 3910}; 3911var fastKey = function (it, create) { 3912 // return primitive with prefix 3913 if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; 3914 if (!has(it, META)) { 3915 // can't set metadata to uncaught frozen object 3916 if (!isExtensible(it)) return 'F'; 3917 // not necessary to add metadata 3918 if (!create) return 'E'; 3919 // add missing metadata 3920 setMeta(it); 3921 // return object ID 3922 } return it[META].i; 3923}; 3924var getWeak = function (it, create) { 3925 if (!has(it, META)) { 3926 // can't set metadata to uncaught frozen object 3927 if (!isExtensible(it)) return true; 3928 // not necessary to add metadata 3929 if (!create) return false; 3930 // add missing metadata 3931 setMeta(it); 3932 // return hash weak collections IDs 3933 } return it[META].w; 3934}; 3935// add metadata on freeze-family methods calling 3936var onFreeze = function (it) { 3937 if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); 3938 return it; 3939}; 3940var meta = module.exports = { 3941 KEY: META, 3942 NEED: false, 3943 fastKey: fastKey, 3944 getWeak: getWeak, 3945 onFreeze: onFreeze 3946}; 3947 3948 3949/***/ }), 3950/* 41 */ 3951/***/ (function(module, exports, __webpack_require__) { 3952 3953var ctx = __webpack_require__(20); 3954var call = __webpack_require__(111); 3955var isArrayIter = __webpack_require__(112); 3956var anObject = __webpack_require__(14);
3957var toLength = __webpack_require__(37); 3958var getIterFn = __webpack_require__(67); 3959var BREAK = {}; 3960var RETURN = {}; 3961var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { 3962 var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); 3963 var f = ctx(fn, that, entries ? 2 : 1); 3964 var index = 0; 3965 var length, step, iterator, result; 3966 if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); 3967 // fast case for arrays with default iterator 3968 if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { 3969 result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); 3970 if (result === BREAK || result === RETURN) return result; 3971 } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { 3972 result = call(iterator, f, step.value, entries); 3973 if (result === BREAK || result === RETURN) return result; 3974 } 3975}; 3976exports.BREAK = BREAK; 3977exports.RETURN = RETURN; 3978 3979 3980/***/ }), 3981/* 42 */ 3982/***/ (function(module, exports, __webpack_require__) { 3983 3984"use strict"; 3985 3986 3987var isString = __webpack_require__(0).isString; 3988var isNumber = __webpack_require__(0).isNumber; 3989var isObject = __webpack_require__(0).isObject; 3990var isArray = __webpack_require__(0).isArray; 3991var LineBreaker = __webpack_require__(78); 3992 3993var LEADING = /^(\s)+/g; 3994var TRAILING = /(\s)+$/g; 3995 3996/** 3997 * Creates an instance of TextTools - text measurement utility 3998 * 3999 * @constructor 4000 * @param {FontProvider} fontProvider 4001 */ 4002function TextTools(fontProvider) { 4003 this.fontProvider = fontProvider; 4004} 4005 4006/** 4007 * Converts an array of strings (or inline-definition-objects) into a collection 4008 * of inlines and calculated minWidth/maxWidth. 4009 * and their min/max widths 4010 * @param {Object} textArray - an array of inline-definition-objects (or strings) 4011 * @param {Object} styleContextStack current style stack 4012 * @return {Object} collection of inlines, minWidth, maxWidth 4013 */ 4014TextTools.prototype.buildInlines = function (textArray, styleContextStack) { 4015 var measured = measure(this.fontProvider, textArray, styleContextStack); 4016 4017 var minWidth = 0, 4018 maxWidth = 0, 4019 currentLineWidth; 4020 4021 measured.forEach(function (inline) { 4022 minWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut); 4023 4024 if (!currentLineWidth) { 4025 currentLineWidth = {width: 0, leadingCut: inline.leadingCut, trailingCut: 0}; 4026 } 4027 4028 currentLineWidth.width += inline.width; 4029 currentLineWidth.trailingCut = inline.trailingCut; 4030 4031 maxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth)); 4032 4033 if (inline.lineEnd) { 4034 currentLineWidth = null; 4035 } 4036 }); 4037 4038 if (getStyleProperty({}, styleContextStack, 'noWrap', false)) { 4039 minWidth = maxWidth; 4040 } 4041 4042 return { 4043 items: measured, 4044 minWidth: minWidth, 4045 maxWidth: maxWidth 4046 }; 4047 4048 function getTrimmedWidth(item) { 4049 return Math.max(0, item.width - item.leadingCut - item.trailingCut); 4050 } 4051}; 4052 4053/** 4054 * Returns size of the specified string (without breaking it) using the current style 4055 * @param {String} text text to be measured 4056 * @param {Object} styleContextStack current style stack 4057 * @return {Object} size of the specified string 4058 */ 4059TextTools.prototype.sizeOfString = function (text, styleContextStack) { 4060 text = text ? text.toString().replace(/\t/g, ' ') : ''; 4061 4062 //TODO: refactor - extract from measure 4063 var fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto'); 4064 var fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12); 4065 var fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null); 4066 var bold = getStyleProperty({}, styleContextStack, 'bold', false); 4067 var italics = getStyleProperty({}, styleContextStack, 'italics', false); 4068 var lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1); 4069 var characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0); 4070 4071 var font = this.fontProvider.provideFont(fontName, bold, italics); 4072 4073 return { 4074 width: widthOfString(text, font, fontSize, characterSpacing, fontFeatures), 4075 height: font.lineHeight(fontSize) * lineHeight, 4076 fontSize: fontSize, 4077 lineHeight: lineHeight, 4078 ascender: font.ascender / 1000 * fontSize, 4079 descender: font.descender / 1000 * fontSize 4080 }; 4081}; 4082 4083TextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) { 4084 return widthOfString(text, font, fontSize, characterSpacing, fontFeatures); 4085}; 4086 4087function splitWords(text, noWrap) { 4088 var results = []; 4089 text = text.replace(/\t/g, ' '); 4090 4091 if (noWrap) { 4092 results.push({text: text}); 4093 return results; 4094 } 4095 4096 var breaker = new LineBreaker(text); 4097 var last = 0; 4098 var bk; 4099 4100 while (bk = breaker.nextBreak()) { 4101 var word = text.slice(last, bk.position); 4102 4103 if (bk.required || word.match(/\r?\n$|\r$/)) { // new line 4104 word = word.replace(/\r?\n$|\r$/, ''); 4105 results.push({text: word, lineEnd: true}); 4106 } else { 4107 results.push({text: word}); 4108 } 4109 4110 last = bk.position; 4111 } 4112 4113 return results; 4114} 4115 4116function copyStyle(source, destination) { 4117 destination = destination || {}; 4118 source = source || {}; //TODO: default style 4119 4120 for (var key in source) { 4121 if (key != 'text' && source.hasOwnProperty(key)) { 4122 destination[key] = source[key]; 4123 } 4124 } 4125 4126 return destination; 4127} 4128 4129function normalizeTextArray(array, styleContextStack) { 4130 function flatten(array) { 4131 return array.reduce(function (prev, cur) { 4132 var current = isArray(cur.text) ? flatten(cur.text) : cur; 4133 var more = [].concat(current).some(Array.isArray); 4134 return prev.concat(more ? flatten(current) : current); 4135 }, []); 4136 } 4137 4138 var results = []; 4139 4140 if (!isArray(array)) { 4141 array = [array]; 4142 } 4143 4144 array = flatten(array); 4145 4146 for (var i = 0, l = array.length; i < l; i++) { 4147 var item = array[i]; 4148 var style = null; 4149 var words; 4150 4151 var noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false); 4152 if (isObject(item)) { 4153 words = splitWords(normalizeString(item.text), noWrap); 4154 style = copyStyle(item); 4155 } else { 4156 words = splitWords(normalizeString(item), noWrap); 4157 } 4158 4159 for (var i2 = 0, l2 = words.length; i2 < l2; i2++) { 4160 var result = { 4161 text: words[i2].text 4162 }; 4163 4164 if (words[i2].lineEnd) { 4165 result.lineEnd = true; 4166 } 4167 4168 copyStyle(style, result); 4169 4170 results.push(result); 4171 } 4172 } 4173 4174 return results; 4175} 4176 4177function normalizeString(value) { 4178 if (value === undefined || value === null) { 4179 return ''; 4180 } else if (isNumber(value)) { 4181 return value.toString(); 4182 } else if (isString(value)) { 4183 return value; 4184 } else { 4185 return value.toString(); 4186 } 4187} 4188 4189function getStyleProperty(item, styleContextStack, property, defaultValue) { 4190 var value; 4191 4192 if (item[property] !== undefined && item[property] !== null) { 4193 // item defines this property 4194 return item[property]; 4195 } 4196 4197 if (!styleContextStack) { 4198 return defaultValue; 4199 } 4200 4201 styleContextStack.auto(item, function () { 4202 value = styleContextStack.getProperty(property); 4203 }); 4204 4205 if (value !== null && value !== undefined) { 4206 return value; 4207 } else { 4208 return defaultValue; 4209 } 4210} 4211 4212function measure(fontProvider, textArray, styleContextStack) { 4213 var normalized = normalizeTextArray(textArray, styleContextStack); 4214 4215 if (normalized.length) { 4216 var leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0); 4217 4218 if (leadingIndent) { 4219 normalized[0].leadingCut = -leadingIndent; 4220 normalized[0].leadingIndent = leadingIndent; 4221 } 4222 } 4223 4224 normalized.forEach(function (item) { 4225 var fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto'); 4226 var fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12); 4227 var fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null); 4228 var bold = getStyleProperty(item, styleContextStack, 'bold', false); 4229 var italics = getStyleProperty(item, styleContextStack, 'italics', false); 4230 var color = getStyleProperty(item, styleContextStack, 'color', 'black'); 4231 var decoration = getStyleProperty(item, styleContextStack, 'decoration', null); 4232 var decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null); 4233 var decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null); 4234 var background = getStyleProperty(item, styleContextStack, 'background', null); 4235 var lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1); 4236 var characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing',
42360); 4237 var link = getStyleProperty(item, styleContextStack, 'link', null); 4238 var linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null); 4239 var noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null); 4240 var preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false); 4241 4242 var font = fontProvider.provideFont(fontName, bold, italics); 4243 4244 item.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures); 4245 item.height = font.lineHeight(fontSize) * lineHeight; 4246 4247 var leadingSpaces = item.text.match(LEADING); 4248 4249 if (!item.leadingCut) { 4250 item.leadingCut = 0; 4251 } 4252 4253 if (leadingSpaces && !preserveLeadingSpaces) { 4254 item.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures); 4255 } 4256 4257 var trailingSpaces = item.text.match(TRAILING); 4258 if (trailingSpaces) { 4259 item.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures); 4260 } else { 4261 item.trailingCut = 0; 4262 } 4263 4264 item.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left'); 4265 item.font = font; 4266 item.fontSize = fontSize; 4267 item.fontFeatures = fontFeatures; 4268 item.characterSpacing = characterSpacing; 4269 item.color = color; 4270 item.decoration = decoration; 4271 item.decorationColor = decorationColor; 4272 item.decorationStyle = decorationStyle; 4273 item.background = background; 4274 item.link = link; 4275 item.linkToPage = linkToPage; 4276 item.noWrap = noWrap; 4277 }); 4278 4279 return normalized; 4280} 4281 4282function widthOfString(text, font, fontSize, characterSpacing, fontFeatures) { 4283 return font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1)); 4284} 4285 4286module.exports = TextTools; 4287 4288 4289/***/ }), 4290/* 43 */ 4291/***/ (function(module, exports, __webpack_require__) { 4292 4293// Generated by CoffeeScript 1.7.1 4294var UnicodeTrie, inflate; 4295 4296inflate = __webpack_require__(79); 4297 4298UnicodeTrie = (function() { 4299 var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET; 4300 4301 SHIFT_1 = 6 + 5; 4302 4303 SHIFT_2 = 5; 4304 4305 SHIFT_1_2 = SHIFT_1 - SHIFT_2; 4306 4307 OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1; 4308 4309 INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2; 4310 4311 INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1; 4312 4313 INDEX_SHIFT = 2; 4314 4315 DATA_BLOCK_LENGTH = 1 << SHIFT_2; 4316 4317 DATA_MASK = DATA_BLOCK_LENGTH - 1; 4318 4319 LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2; 4320 4321 LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2; 4322 4323 INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH; 4324 4325 UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH; 4326 4327 UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; 4328 4329 INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH; 4330 4331 DATA_GRANULARITY = 1 << INDEX_SHIFT; 4332 4333 function UnicodeTrie(data) { 4334 var isBuffer, uncompressedLength, view; 4335 isBuffer = typeof data.readUInt32BE === 'function' && typeof data.slice === 'function'; 4336 if (isBuffer || data instanceof Uint8Array) { 4337 if (isBuffer) { 4338 this.highStart = data.readUInt32BE(0); 4339 this.errorValue = data.readUInt32BE(4); 4340 uncompressedLength = data.readUInt32BE(8); 4341 data = data.slice(12); 4342 } else { 4343 view = new DataView(data.buffer); 4344 this.highStart = view.getUint32(0); 4345 this.errorValue = view.getUint32(4); 4346 uncompressedLength = view.getUint32(8); 4347 data = data.subarray(12); 4348 } 4349 data = inflate(data, new Uint8Array(uncompressedLength)); 4350 data = inflate(data, new Uint8Array(uncompressedLength)); 4351 this.data = new Uint32Array(data.buffer); 4352 } else { 4353 this.data = data.data, this.highStart = data.highStart, this.errorValue = data.errorValue; 4354 } 4355 } 4356 4357 UnicodeTrie.prototype.get = function(codePoint) { 4358 var index; 4359 if (codePoint < 0 || codePoint > 0x10ffff) { 4360 return this.errorValue; 4361 } 4362 if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) { 4363 index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK); 4364 return this.data[index]; 4365 } 4366 if (codePoint <= 0xffff) { 4367 index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK); 4368 return this.data[index]; 4369 } 4370 if (codePoint < this.highStart) { 4371 index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >>
4371 SHIFT_1)]; 4372 index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)]; 4373 index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK); 4374 return this.data[index]; 4375 } 4376 return this.data[this.data.length - DATA_GRANULARITY]; 4377 }; 4378 4379 return UnicodeTrie; 4380 4381})(); 4382 4383module.exports = UnicodeTrie; 4384 4385 4386/***/ }), 4387/* 44 */ 4388/***/ (function(module, exports, __webpack_require__) { 4389 4390"use strict"; 4391 4392 4393var isString = __webpack_require__(0).isString; 4394 4395function buildColumnWidths(columns, availableWidth) { 4396 var autoColumns = [], 4397 autoMin = 0, autoMax = 0, 4398 starColumns = [], 4399 starMaxMin = 0, 4400 starMaxMax = 0, 4401 fixedColumns = [], 4402 initial_availableWidth = availableWidth; 4403 4404 columns.forEach(function (column) { 4405 if (isAutoColumn(column)) { 4406 autoColumns.push(column); 4407 autoMin += column._minWidth; 4408 autoMax += column._maxWidth; 4409 } else if (isStarColumn(column)) { 4410 starColumns.push(column); 4411 starMaxMin = Math.max(starMaxMin, column._minWidth); 4412 starMaxMax = Math.max(starMaxMax, column._maxWidth); 4413 } else { 4414 fixedColumns.push(column); 4415 } 4416 }); 4417 4418 fixedColumns.forEach(function (col) { 4419 // width specified as % 4420 if (isString(col.width) && /\d+%/.test(col.width)) { 4421 col.width = parseFloat(col.width) * initial_availableWidth / 100; 4422 } 4423 if (col.width < (col._minWidth) && col.elasticWidth) { 4424 col._calcWidth = col._minWidth; 4425 } else { 4426 col._calcWidth = col.width; 4427 } 4428 4429 availableWidth -= col._calcWidth; 4430 }); 4431 4432 // http://www.freesoft.org/CIE/RFC/1942/18.htm 4433 // http://www.w3.org/TR/CSS2/tables.html#width-layout 4434 // http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm 4435 var minW = autoMin + starMaxMin * starColumns.length; 4436 var maxW = autoMax + starMaxMax * starColumns.length; 4437 if (minW >= availableWidth) { 4438 // case 1 - there's no way to fit all columns within available width 4439 // that's actually pretty bad situation with PDF as we have no horizontal scroll 4440 // no easy workaround (unless we decide, in the future, to split single words) 4441 // currently we simply use minWidths for all columns 4442 autoColumns.forEach(function (col) { 4443 col._calcWidth = col._minWidth; 4444 }); 4445 4446 starColumns.forEach(function (col) { 4447 col._calcWidth = starMaxMin; // starMaxMin already contains padding 4448 }); 4449 } else { 4450 if (maxW < availableWidth) { 4451 // case 2 - we can fit rest of the table within available space 4452 autoColumns.forEach(function (col) { 4453 col._calcWidth = col._maxWidth; 4454 availableWidth -= col._calcWidth; 4455 }); 4456 } else { 4457 // maxW is too large, but minW fits within available width 4458 var W = availableWidth - minW; 4459 var D = maxW - minW; 4460 4461 autoColumns.forEach(function (col) { 4462 var d = col._maxWidth - col._minWidth; 4463 col._calcWidth = col._minWidth + d * W / D; 4464 availableWidth -= col._calcWidth; 4465 }); 4466 } 4467 4468 if (starColumns.length > 0) { 4469 var starSize = availableWidth / starColumns.length; 4470 4471 starColumns.forEach(function (col) { 4472 col._calcWidth = starSize; 4473 }); 4474 } 4475 } 4476} 4477 4478function isAutoColumn(column) { 4479 return column.width === 'auto'; 4480} 4481 4482function isStarColumn(column) { 4483 return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star'; 4484} 4485 4486//TODO: refactor and reuse in measureTable 4487function measureMinMax(columns) { 4488 var result = {min: 0, max: 0}; 4489 4490 var maxStar = {min: 0, max: 0}; 4491 var starCount = 0; 4492 4493 for (var i = 0, l = columns.length; i < l; i++) { 4494 var c = columns[i]; 4495 4496 if (isStarColumn(c)) { 4497 maxStar.min = Math.max(maxStar.min, c._minWidth); 4498 maxStar.max = Math.max(maxStar.max, c._maxWidth); 4499 starCount++; 4500 } else if (isAutoColumn(c)) { 4501 result.min += c._minWidth; 4502 result.max += c._maxWidth; 4503 } else { 4504 result.min += ((c.width !== undefined && c.width) || c._minWidth); 4505 result.max += ((c.width !== undefined && c.width) || c._maxWidth); 4506 } 4507 } 4508 4509 if (starCount) { 4510 result.min += starCount * maxStar.min; 4511 result.max += starCount * maxStar.max; 4512 } 4513 4514 return result; 4515} 4516 4517/** 4518 * Calculates column widths 4519 * @private 4520 */ 4521module.exports = { 4522 buildColumnWidths: buildColumnWidths, 4523 measureMinMax: measureMinMax, 4524 isAutoColumn: isAutoColumn, 4525 isStarColumn: isStarColumn 4526}; 4527 4528 4529/***/ }), 4530/* 45 */ 4531/***/ (function(module, exports, __webpack_require__) { 4532 4533exports = module.exports = __webpack_require__(83); 4534exports.Stream = exports; 4535exports.Readable = exports; 4536exports.Writable = __webpack_require__(46); 4537exports.Duplex = __webpack_require__(16); 4538exports.Transform = __webpack_require__(86); 4539exports.PassThrough = __webpack_require__(145); 4540 4541 4542/***/ }), 4543/* 46 */ 4544/***/ (function(module, exports, __webpack_require__) { 4545 4546"use strict"; 4547/* WEBPACK VAR INJECTION */(function(process, setImmediate, global) {// Copyright Joyent, Inc. and other Node contributors. 4548// 4549// Permission is hereby granted, free of charge, to any person obtaining a 4550// copy of this software and associated documentation files (the 4551// "Software"), to deal in the Software without restriction, including 4552// without limitation the rights to use, copy, modify, merge, publish, 4553// distribute, sublicense, and/or sell copies of the Software, and to permit 4554// persons to whom the Software is furnished to do so, subject to the 4555// following conditions: 4556// 4557// The above copyright notice and this permission notice shall be included 4558// in all copies or substantial portions of the Software. 4559// 4560// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 4561// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 4562// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 4563// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 4564// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 4565// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 4566// USE OR OTHER DEALINGS IN THE SOFTWARE. 4567 4568// A bit simpler than readable streams. 4569// Implement an async ._write(chunk, encoding, cb), and it'll handle all 4570// the drain event emission and buffering. 4571 4572 4573 4574/*<replacement>*/ 4575 4576var processNextTick = __webpack_require__(32).nextTick; 4577/*</replacement>*/ 4578 4579module.exports = Writable; 4580 4581/* <replacement> */ 4582function WriteReq(chunk, encoding, cb) { 4583 this.chunk = chunk; 4584 this.encoding = encoding; 4585 this.callback = cb; 4586 this.next = null; 4587} 4588 4589// It seems a linked list but it is not 4590// there will be only 2 of these for each stream 4591function CorkedRequest(state) { 4592 var _this = this; 4593 4594 this.next = null; 4595 this.entry = null; 4596 this.finish = function () { 4597 onCorkedFinish(_this, state); 4598 }; 4599} 4600/* </replacement> */ 4601
vendor: 8,296 bytes, lines 4602-4862
4602/*<replacement>*/ 4603var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; 4604/*</replacement>*/ 4605 4606/*<replacement>*/ 4607var Duplex; 4608/*</replacement>*/ 4609 4610Writable.WritableState = WritableState; 4611 4612/*<replacement>*/ 4613var util = __webpack_require__(25); 4614util.inherits = __webpack_require__(21); 4615/*</replacement>*/ 4616 4617/*<replacement>*/ 4618var internalUtil = { 4619 deprecate: __webpack_require__(144) 4620}; 4621/*</replacement>*/ 4622 4623/*<replacement>*/ 4624var Stream = __webpack_require__(84); 4625/*</replacement>*/ 4626 4627/*<replacement>*/ 4628 4629var Buffer = __webpack_require__(33).Buffer; 4630var OurUint8Array = global.Uint8Array || function () {}; 4631function _uint8ArrayToBuffer(chunk) { 4632 return Buffer.from(chunk); 4633} 4634function _isUint8Array(obj) { 4635 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; 4636} 4637 4638/*</replacement>*/ 4639 4640var destroyImpl = __webpack_require__(85); 4641 4642util.inherits(Writable, Stream); 4643 4644function nop() {} 4645 4646function WritableState(options, stream) { 4647 Duplex = Duplex || __webpack_require__(16); 4648 4649 options = options || {}; 4650 4651 // Duplex streams are both readable and writable, but share 4652 // the same options object. 4653 // However, some cases require setting options to different 4654 // values for the readable and the writable sides of the duplex stream. 4655 // These options can be provided separately as readableXXX and writableXXX. 4656 var isDuplex = stream instanceof Duplex; 4657 4658 // object stream flag to indicate whether or not this stream 4659 // contains buffers or objects. 4660 this.objectMode = !!options.objectMode; 4661 4662 if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; 4663 4664 // the point at which write() starts returning false 4665 // Note: 0 is a valid value, means that we always return false if 4666 // the entire buffer is not flushed immediately on write() 4667 var hwm = options.highWaterMark; 4668 var writableHwm = options.writableHighWaterMark; 4669 var defaultHwm = this.objectMode ? 16 : 16 * 1024; 4670 4671 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; 4672 4673 // cast to ints. 4674 this.highWaterMark = Math.floor(this.highWaterMark); 4675 4676 // if _final has been called 4677 this.finalCalled = false; 4678 4679 // drain event flag. 4680 this.needDrain = false; 4681 // at the start of calling end() 4682 this.ending = false; 4683 // when end() has been called, and returned 4684 this.ended = false; 4685 // when 'finish' is emitted 4686 this.finished = false; 4687 4688 // has it been destroyed 4689 this.destroyed = false; 4690 4691 // should we decode strings into buffers before passing to _write? 4692 // this is here so that some node-core streams can optimize string 4693 // handling at a lower level. 4694 var noDecode = options.decodeStrings === false; 4695 this.decodeStrings = !noDecode; 4696 4697 // Crypto is kind of old and crusty. Historically, its default string 4698 // encoding is 'binary' so we have to make this configurable. 4699 // Everything else in the universe uses 'utf8', though. 4700 this.defaultEncoding = options.defaultEncoding || 'utf8'; 4701 4702 // not an actual buffer we keep track of, but a measurement 4703 // of how much we're waiting to get pushed to some underlying 4704 // socket or file. 4705 this.length = 0; 4706 4707 // a flag to see when we're in the middle of a write. 4708 this.writing = false; 4709 4710 // when true all writes will be buffered until .uncork() call 4711 this.corked = 0; 4712 4713 // a flag to be able to tell if the onwrite cb is called immediately, 4714 // or on a later tick. We set this to true at first, because any 4715 // actions that shouldn't happen until "later" should generally also 4716 // not happen before the first write call. 4717 this.sync = true; 4718 4719 // a flag to know if we're processing previously buffered items, which 4720 // may call the _write() callback in the same tick, so that we don't 4721 // end up in an overlapped onwrite situation. 4722 this.bufferProcessing = false; 4723 4724 // the callback that's passed to _write(chunk,cb) 4725 this.onwrite = function (er) { 4726 onwrite(stream, er); 4727 }; 4728 4729 // the callback that the user supplies to write(chunk,encoding,cb) 4730 this.writecb = null; 4731 4732 // the amount that is being written when _write is called. 4733 this.writelen = 0; 4734 4735 this.bufferedRequest = null; 4736 this.lastBufferedRequest = null; 4737 4738 // number of pending user-supplied write callbacks 4739 // this must be 0 before 'finish' can be emitted 4740 this.pendingcb = 0; 4741 4742 // emit prefinish if the only thing we're waiting for is _write cbs 4743 // This is relevant for synchronous Transform streams 4744 this.prefinished = false; 4745 4746 // True if the error was already emitted and should not be thrown again 4747 this.errorEmitted = false; 4748 4749 // count buffered requests 4750 this.bufferedRequestCount = 0; 4751 4752 // allocate the first CorkedRequest, there is always 4753 // one allocated and free to use, and we maintain at most two 4754 this.corkedRequestsFree = new CorkedRequest(this); 4755} 4756 4757WritableState.prototype.getBuffer = function getBuffer() { 4758 var current = this.bufferedRequest; 4759 var out = []; 4760 while (current) { 4761 out.push(current); 4762 current = current.next; 4763 } 4764 return out; 4765}; 4766 4767(function () { 4768 try { 4769 Object.defineProperty(WritableState.prototype, 'buffer', { 4770 get: internalUtil.deprecate(function () { 4771 return this.getBuffer(); 4772 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') 4773 }); 4774 } catch (_) {} 4775})(); 4776 4777// Test _writableState for inheritance to account for Duplex streams, 4778// whose prototype chain only points to Readable. 4779var realHasInstance; 4780if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { 4781 realHasInstance = Function.prototype[Symbol.hasInstance]; 4782 Object.defineProperty(Writable, Symbol.hasInstance, { 4783 value: function (object) { 4784 if (realHasInstance.call(this, object)) return true; 4785 if (this !== Writable) return false; 4786 4787 return object && object._writableState instanceof WritableState; 4788 } 4789 }); 4790} else { 4791 realHasInstance = function (object) { 4792 return object instanceof this; 4793 }; 4794} 4795 4796function Writable(options) { 4797 Duplex = Duplex || __webpack_require__(16); 4798 4799 // Writable ctor is applied to Duplexes, too. 4800 // `realHasInstance` is necessary because using plain `instanceof` 4801 // would return false, as no `_writableState` property is attached. 4802 4803 // Trying to use the custom `instanceof` for Writable here will also break the 4804 // Node.js LazyTransform implementation, which has a non-trivial getter for 4805 // `_writableState` that would lead to infinite recursion. 4806 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { 4807 return new Writable(options); 4808 } 4809 4810 this._writableState = new WritableState(options, this); 4811 4812 // legacy. 4813 this.writable = true; 4814 4815 if (options) { 4816 if (typeof options.write === 'function') this._write = options.write; 4817 4818 if (typeof options.writev === 'function') this._writev = options.writev; 4819 4820 if (typeof options.destroy === 'function') this._destroy = options.destroy; 4821 4822 if (typeof options.final === 'function') this._final = options.final; 4823 } 4824 4825 Stream.call(this); 4826} 4827 4828// Otherwise people can pipe Writable streams, which is just wrong. 4829Writable.prototype.pipe = function () { 4830 this.emit('error', new Error('Cannot pipe, not readable')); 4831}; 4832 4833function writeAfterEnd(stream, cb) { 4834 var er = new Error('write after end'); 4835 // TODO: defer error events consistently everywhere, not just the cb 4836 stream.emit('error', er); 4837 processNextTick(cb, er); 4838} 4839 4840// Checks that a user-supplied chunk is valid, especially for the particular 4841// mode the stream is in. Currently this means that `null` is never accepted 4842// and undefined/non-string values are only allowed in object mode. 4843function validChunk(stream, state, chunk, cb) { 4844 var valid = true; 4845 var er = false; 4846 4847 if (chunk === null) { 4848 er = new TypeError('May not write null values to stream'); 4849 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { 4850 er = new TypeError('Invalid non-string/buffer chunk'); 4851 } 4852 if (er) { 4853 stream.emit('error', er); 4854 processNextTick(cb, er); 4855 valid = false; 4856 } 4857 return valid; 4858} 4859 4860Writable.prototype.write = function (chunk, encoding, cb) { 4861 var state = this._writableState; 4862 var ret = false;
vendor: 8,830 bytes, lines 4863-5179
4863 var isBuf = !state.objectMode && _isUint8Array(chunk); 4864 4865 if (isBuf && !Buffer.isBuffer(chunk)) { 4866 chunk = _uint8ArrayToBuffer(chunk); 4867 } 4868 4869 if (typeof encoding === 'function') { 4870 cb = encoding; 4871 encoding = null; 4872 } 4873 4874 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; 4875 4876 if (typeof cb !== 'function') cb = nop; 4877 4878 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { 4879 state.pendingcb++; 4880 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); 4881 } 4882 4883 return ret; 4884}; 4885 4886Writable.prototype.cork = function () { 4887 var state = this._writableState; 4888 4889 state.corked++; 4890}; 4891 4892Writable.prototype.uncork = function () { 4893 var state = this._writableState; 4894 4895 if (state.corked) { 4896 state.corked--; 4897 4898 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); 4899 } 4900}; 4901 4902Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { 4903 // node::ParseEncoding() requires lower case. 4904 if (typeof encoding === 'string') encoding = encoding.toLowerCase(); 4905 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); 4906 this._writableState.defaultEncoding = encoding; 4907 return this; 4908}; 4909 4910function decodeChunk(state, chunk, encoding) { 4911 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { 4912 chunk = Buffer.from(chunk, encoding); 4913 } 4914 return chunk; 4915} 4916 4917// if we're already writing something, then just put this 4918// in the queue, and wait our turn. Otherwise, call _write 4919// If we return false, then we need a drain event, so set that flag. 4920function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { 4921 if (!isBuf) { 4922 var newChunk = decodeChunk(state, chunk, encoding); 4923 if (chunk !== newChunk) { 4924 isBuf = true; 4925 encoding = 'buffer'; 4926 chunk = newChunk; 4927 } 4928 } 4929 var len = state.objectMode ? 1 : chunk.length; 4930 4931 state.length += len; 4932 4933 var ret = state.length < state.highWaterMark; 4934 // we must ensure that previous needDrain will not be reset to false. 4935 if (!ret) state.needDrain = true; 4936 4937 if (state.writing || state.corked) { 4938 var last = state.lastBufferedRequest; 4939 state.lastBufferedRequest = { 4940 chunk: chunk, 4941 encoding: encoding, 4942 isBuf: isBuf, 4943 callback: cb, 4944 next: null 4945 }; 4946 if (last) { 4947 last.next = state.lastBufferedRequest; 4948 } else { 4949 state.bufferedRequest = state.lastBufferedRequest; 4950 } 4951 state.bufferedRequestCount += 1; 4952 } else { 4953 doWrite(stream, state, false, len, chunk, encoding, cb); 4954 } 4955 4956 return ret; 4957} 4958 4959function doWrite(stream, state, writev, len, chunk, encoding, cb) { 4960 state.writelen = len; 4961 state.writecb = cb; 4962 state.writing = true; 4963 state.sync = true; 4964 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); 4965 state.sync = false; 4966} 4967 4968function onwriteError(stream, state, sync, er, cb) { 4969 --state.pendingcb; 4970 4971 if (sync) { 4972 // defer the callback if we are being called synchronously 4973 // to avoid piling up things on the stack 4974 processNextTick(cb, er); 4975 // this can emit finish, and it will always happen 4976 // after error 4977 processNextTick(finishMaybe, stream, state); 4978 stream._writableState.errorEmitted = true; 4979 stream.emit('error', er); 4980 } else { 4981 // the caller expect this to happen before if 4982 // it is async 4983 cb(er); 4984 stream._writableState.errorEmitted = true; 4985 stream.emit('error', er); 4986 // this can emit finish, but finish must 4987 // always follow error 4988 finishMaybe(stream, state); 4989 } 4990} 4991 4992function onwriteStateUpdate(state) { 4993 state.writing = false; 4994 state.writecb = null; 4995 state.length -= state.writelen; 4996 state.writelen = 0; 4997} 4998 4999function onwrite(stream, er) { 5000 var state = stream._writableState; 5001 var sync = state.sync; 5002 var cb = state.writecb; 5003 5004 onwriteStateUpdate(state); 5005 5006 if (er) onwriteError(stream, state, sync, er, cb);else { 5007 // Check if we're actually ready to finish, but don't emit yet 5008 var finished = needFinish(state); 5009 5010 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { 5011 clearBuffer(stream, state); 5012 } 5013 5014 if (sync) { 5015 /*<replacement>*/ 5016 asyncWrite(afterWrite, stream, state, finished, cb); 5017 /*</replacement>*/ 5018 } else { 5019 afterWrite(stream, state, finished, cb); 5020 } 5021 } 5022} 5023 5024function afterWrite(stream, state, finished, cb) { 5025 if (!finished) onwriteDrain(stream, state); 5026 state.pendingcb--; 5027 cb(); 5028 finishMaybe(stream, state); 5029} 5030 5031// Must force callback to be called on nextTick, so that we don't 5032// emit 'drain' before the write() consumer gets the 'false' return 5033// value, and has a chance to attach a 'drain' listener. 5034function onwriteDrain(stream, state) { 5035 if (state.length === 0 && state.needDrain) { 5036 state.needDrain = false; 5037 stream.emit('drain'); 5038 } 5039} 5040 5041// if there's something in the buffer waiting, then process it 5042function clearBuffer(stream, state) { 5043 state.bufferProcessing = true; 5044 var entry = state.bufferedRequest; 5045 5046 if (stream._writev && entry && entry.next) { 5047 // Fast case, write everything using _writev() 5048 var l = state.bufferedRequestCount; 5049 var buffer = new Array(l); 5050 var holder = state.corkedRequestsFree; 5051 holder.entry = entry; 5052 5053 var count = 0; 5054 var allBuffers = true; 5055 while (entry) { 5056 buffer[count] = entry; 5057 if (!entry.isBuf) allBuffers = false; 5058 entry = entry.next; 5059 count += 1; 5060 } 5061 buffer.allBuffers = allBuffers; 5062 5063 doWrite(stream, state, true, state.length, buffer, '', holder.finish); 5064 5065 // doWrite is almost always async, defer these to save a bit of time 5066 // as the hot path ends with doWrite 5067 state.pendingcb++; 5068 state.lastBufferedRequest = null; 5069 if (holder.next) { 5070 state.corkedRequestsFree = holder.next; 5071 holder.next = null; 5072 } else { 5073 state.corkedRequestsFree = new CorkedRequest(state); 5074 } 5075 state.bufferedRequestCount = 0; 5076 } else { 5077 // Slow case, write chunks one-by-one 5078 while (entry) { 5079 var chunk = entry.chunk; 5080 var encoding = entry.encoding; 5081 var cb = entry.callback; 5082 var len = state.objectMode ? 1 : chunk.length; 5083 5084 doWrite(stream, state, false, len, chunk, encoding, cb); 5085 entry = entry.next; 5086 state.bufferedRequestCount--; 5087 // if we didn't call the onwrite immediately, then 5088 // it means that we need to wait until it does. 5089 // also, that means that the chunk and cb are currently 5090 // being processed, so move the buffer counter past them. 5091 if (state.writing) { 5092 break; 5093 } 5094 } 5095 5096 if (entry === null) state.lastBufferedRequest = null; 5097 } 5098 5099 state.bufferedRequest = entry; 5100 state.bufferProcessing = false; 5101} 5102 5103Writable.prototype._write = function (chunk, encoding, cb) { 5104 cb(new Error('_write() is not implemented')); 5105}; 5106 5107Writable.prototype._writev = null; 5108 5109Writable.prototype.end = function (chunk, encoding, cb) { 5110 var state = this._writableState; 5111 5112 if (typeof chunk === 'function') { 5113 cb = chunk; 5114 chunk = null; 5115 encoding = null; 5116 } else if (typeof encoding === 'function') { 5117 cb = encoding; 5118 encoding = null; 5119 } 5120 5121 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); 5122 5123 // .end() fully uncorks 5124 if (state.corked) { 5125 state.corked = 1; 5126 this.uncork(); 5127 } 5128 5129 // ignore unnecessary end() calls. 5130 if (!state.ending && !state.finished) endWritable(this, state, cb); 5131}; 5132 5133function needFinish(state) { 5134 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; 5135} 5136function callFinal(stream, state) { 5137 stream._final(function (err) { 5138 state.pendingcb--; 5139 if (err) { 5140 stream.emit('error', err); 5141 } 5142 state.prefinished = true; 5143 stream.emit('prefinish'); 5144 finishMaybe(stream, state); 5145 }); 5146} 5147function prefinish(stream, state) { 5148 if (!state.prefinished && !state.finalCalled) { 5149 if (typeof stream._final === 'function') { 5150 state.pendingcb++; 5151 state.finalCalled = true; 5152 processNextTick(callFinal, stream, state); 5153 } else { 5154 state.prefinished = true; 5155 stream.emit('prefinish'); 5156 } 5157 } 5158} 5159 5160function finishMaybe(stream, state) { 5161 var need = needFinish(state); 5162 if (need) { 5163 prefinish(stream, state); 5164 if (state.pendingcb === 0) { 5165 state.finished = true; 5166 stream.emit('finish'); 5167 } 5168 } 5169 return need; 5170} 5171 5172function endWritable(stream, state, cb) { 5173 state.ending = true; 5174 finishMaybe(stream, state); 5175 if (cb) { 5176 if (state.finished) processNextTick(cb);else stream.once('finish', cb); 5177 } 5178 state.ended = true; 5179 stream.writable = false;
vendor: 1,279 bytes, lines 5180-5233
5180} 5181 5182function onCorkedFinish(corkReq, state, err) { 5183 var entry = corkReq.entry; 5184 corkReq.entry = null; 5185 while (entry) { 5186 var cb = entry.callback; 5187 state.pendingcb--; 5188 cb(err); 5189 entry = entry.next; 5190 } 5191 if (state.corkedRequestsFree) { 5192 state.corkedRequestsFree.next = corkReq; 5193 } else { 5194 state.corkedRequestsFree = corkReq; 5195 } 5196} 5197 5198Object.defineProperty(Writable.prototype, 'destroyed', { 5199 get: function () { 5200 if (this._writableState === undefined) { 5201 return false; 5202 } 5203 return this._writableState.destroyed; 5204 }, 5205 set: function (value) { 5206 // we ignore the value if the stream 5207 // has not been initialized yet 5208 if (!this._writableState) { 5209 return; 5210 } 5211 5212 // backward compatibility, the user is explicitly 5213 // managing destroyed 5214 this._writableState.destroyed = value; 5215 } 5216}); 5217 5218Writable.prototype.destroy = destroyImpl.destroy; 5219Writable.prototype._undestroy = destroyImpl.undestroy; 5220Writable.prototype._destroy = function (err, cb) { 5221 this.end(); 5222 cb(err); 5223}; 5224/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11), __webpack_require__(142).setImmediate, __webpack_require__(7))) 5225 5226/***/ }), 5227/* 47 */ 5228/***/ (function(module, exports, __webpack_require__) { 5229 5230"use strict"; 5231 5232 5233var Buffer = __webpack_require__(33
vendor: 8,264 bytes, lines 5233-5505
5233).Buffer; 5234 5235var isEncoding = Buffer.isEncoding || function (encoding) { 5236 encoding = '' + encoding; 5237 switch (encoding && encoding.toLowerCase()) { 5238 case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': 5239 return true; 5240 default: 5241 return false; 5242 } 5243}; 5244 5245function _normalizeEncoding(enc) { 5246 if (!enc) return 'utf8'; 5247 var retried; 5248 while (true) { 5249 switch (enc) { 5250 case 'utf8': 5251 case 'utf-8': 5252 return 'utf8'; 5253 case 'ucs2': 5254 case 'ucs-2': 5255 case 'utf16le': 5256 case 'utf-16le': 5257 return 'utf16le'; 5258 case 'latin1': 5259 case 'binary': 5260 return 'latin1'; 5261 case 'base64': 5262 case 'ascii': 5263 case 'hex': 5264 return enc; 5265 default: 5266 if (retried) return; // undefined 5267 enc = ('' + enc).toLowerCase(); 5268 retried = true; 5269 } 5270 } 5271}; 5272 5273// Do not cache `Buffer.isEncoding` when checking encoding names as some 5274// modules monkey-patch it to support additional encodings 5275function normalizeEncoding(enc) { 5276 var nenc = _normalizeEncoding(enc); 5277 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); 5278 return nenc || enc; 5279} 5280 5281// StringDecoder provides an interface for efficiently splitting a series of 5282// buffers into a series of JS strings without breaking apart multi-byte 5283// characters. 5284exports.StringDecoder = StringDecoder; 5285function StringDecoder(encoding) { 5286 this.encoding = normalizeEncoding(encoding); 5287 var nb; 5288 switch (this.encoding) { 5289 case 'utf16le': 5290 this.text = utf16Text; 5291 this.end = utf16End; 5292 nb = 4; 5293 break; 5294 case 'utf8': 5295 this.fillLast = utf8FillLast; 5296 nb = 4; 5297 break; 5298 case 'base64': 5299 this.text = base64Text; 5300 this.end = base64End; 5301 nb = 3; 5302 break; 5303 default: 5304 this.write = simpleWrite; 5305 this.end = simpleEnd; 5306 return; 5307 } 5308 this.lastNeed = 0; 5309 this.lastTotal = 0; 5310 this.lastChar = Buffer.allocUnsafe(nb); 5311} 5312 5313StringDecoder.prototype.write = function (buf) { 5314 if (buf.length === 0) return ''; 5315 var r; 5316 var i; 5317 if (this.lastNeed) { 5318 r = this.fillLast(buf); 5319 if (r === undefined) return ''; 5320 i = this.lastNeed; 5321 this.lastNeed = 0; 5322 } else { 5323 i = 0; 5324 } 5325 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); 5326 return r || ''; 5327}; 5328 5329StringDecoder.prototype.end = utf8End; 5330 5331// Returns only complete characters in a Buffer 5332StringDecoder.prototype.text = utf8Text; 5333 5334// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer 5335StringDecoder.prototype.fillLast = function (buf) { 5336 if (this.lastNeed <= buf.length) { 5337 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); 5338 return this.lastChar.toString(this.encoding, 0, this.lastTotal); 5339 } 5340 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); 5341 this.lastNeed -= buf.length; 5342}; 5343 5344// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a 5345// continuation byte. 5346function utf8CheckByte(byte) { 5347 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; 5348 return -1; 5349} 5350 5351// Checks at most 3 bytes at the end of a Buffer in order to detect an 5352// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) 5353// needed to complete the UTF-8 character (if applicable) are returned. 5354function utf8CheckIncomplete(self, buf, i) { 5355 var j = buf.length - 1; 5356 if (j < i) return 0; 5357 var nb = utf8CheckByte(buf[j]); 5358 if (nb >= 0) { 5359 if (nb > 0) self.lastNeed = nb - 1; 5360 return nb; 5361 } 5362 if (--j < i) return 0; 5363 nb = utf8CheckByte(buf[j]); 5364 if (nb >= 0) { 5365 if (nb > 0) self.lastNeed = nb - 2; 5366 return nb; 5367 } 5368 if (--j < i) return 0; 5369 nb = utf8CheckByte(buf[j]); 5370 if (nb >= 0) { 5371 if (nb > 0) { 5372 if (nb === 2) nb = 0;else self.lastNeed = nb - 3; 5373 } 5374 return nb; 5375 } 5376 return 0; 5377} 5378 5379// Validates as many continuation bytes for a multi-byte UTF-8 character as 5380// needed or are available. If we see a non-continuation byte where we expect 5381// one, we "replace" the validated continuation bytes we've seen so far with 5382// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding 5383// behavior. The continuation byte check is included three times in the case 5384// where all of the continuation bytes for a character exist in the same buffer. 5385// It is also done this way as a slight performance increase instead of using a 5386// loop. 5387function utf8CheckExtraBytes(self, buf, p) { 5388 if ((buf[0] & 0xC0) !== 0x80) { 5389 self.lastNeed = 0; 5390 return '\ufffd'.repeat(p); 5391 } 5392 if (self.lastNeed > 1 && buf.length > 1) { 5393 if ((buf[1] & 0xC0) !== 0x80) { 5394 self.lastNeed = 1; 5395 return '\ufffd'.repeat(p + 1); 5396 } 5397 if (self.lastNeed > 2 && buf.length > 2) { 5398 if ((buf[2] & 0xC0) !== 0x80) { 5399 self.lastNeed = 2; 5400 return '\ufffd'.repeat(p + 2); 5401 } 5402 } 5403 } 5404} 5405 5406// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. 5407function utf8FillLast(buf) { 5408 var p = this.lastTotal - this.lastNeed; 5409 var r = utf8CheckExtraBytes(this, buf, p); 5410 if (r !== undefined) return r; 5411 if (this.lastNeed <= buf.length) { 5412 buf.copy(this.lastChar, p, 0, this.lastNeed); 5413 return this.lastChar.toString(this.encoding, 0, this.lastTotal); 5414 } 5415 buf.copy(this.lastChar, p, 0, buf.length); 5416 this.lastNeed -= buf.length; 5417} 5418 5419// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a 5420// partial character, the character's bytes are buffered until the required 5421// number of bytes are available. 5422function utf8Text(buf, i) { 5423 var total = utf8CheckIncomplete(this, buf, i); 5424 if (!this.lastNeed) return buf.toString('utf8', i); 5425 this.lastTotal = total; 5426 var end = buf.length - (total - this.lastNeed); 5427 buf.copy(this.lastChar, 0, end); 5428 return buf.toString('utf8', i, end); 5429} 5430 5431// For UTF-8, a replacement character for each buffered byte of a (partial) 5432// character needs to be added to the output. 5433function utf8End(buf) { 5434 var r = buf && buf.length ? this.write(buf) : ''; 5435 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed); 5436 return r; 5437} 5438 5439// UTF-16LE typically needs two bytes per character, but even if we have an even 5440// number of bytes available, we need to check if we end on a leading/high 5441// surrogate. In that case, we need to wait for the next two bytes in order to 5442// decode the last character properly. 5443function utf16Text(buf, i) { 5444 if ((buf.length - i) % 2 === 0) { 5445 var r = buf.toString('utf16le', i); 5446 if (r) { 5447 var c = r.charCodeAt(r.length - 1); 5448 if (c >= 0xD800 && c <= 0xDBFF) { 5449 this.lastNeed = 2; 5450 this.lastTotal = 4; 5451 this.lastChar[0] = buf[buf.length - 2]; 5452 this.lastChar[1] = buf[buf.length - 1]; 5453 return r.slice(0, -1); 5454 } 5455 } 5456 return r; 5457 } 5458 this.lastNeed = 1; 5459 this.lastTotal = 2; 5460 this.lastChar[0] = buf[buf.length - 1]; 5461 return buf.toString('utf16le', i, buf.length - 1); 5462} 5463 5464// For UTF-16LE we do not explicitly append special replacement characters if we 5465// end on a partial character, we simply let v8 handle that. 5466function utf16End(buf) { 5467 var r = buf && buf.length ? this.write(buf) : ''; 5468 if (this.lastNeed) { 5469 var end = this.lastTotal - this.lastNeed; 5470 return r + this.lastChar.toString('utf16le', 0, end); 5471 } 5472 return r; 5473} 5474 5475function base64Text(buf, i) { 5476 var n = (buf.length - i) % 3; 5477 if (n === 0) return buf.toString('base64', i); 5478 this.lastNeed = 3 - n; 5479 this.lastTotal = 3; 5480 if (n === 1) { 5481 this.lastChar[0] = buf[buf.length - 1]; 5482 } else { 5483 this.lastChar[0] = buf[buf.length - 2]; 5484 this.lastChar[1] = buf[buf.length - 1]; 5485 } 5486 return buf.toString('base64', i, buf.length - n); 5487} 5488 5489function base64End(buf) { 5490 var r = buf && buf.length ? this.write(buf) : ''; 5491 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); 5492 return r; 5493} 5494 5495// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) 5496function simpleWrite(buf) { 5497 return buf.toString(this.encoding); 5498} 5499 5500function simpleEnd(buf) { 5501 return buf && buf.length ? this.write(buf) : ''; 5502} 5503 5504/***/ }), 5505/*
vendor: 1,743 bytes, lines 5505-5559
550548 */ 5506/***/ (function(module, exports, __webpack_require__) { 5507 5508"use strict"; 5509/* WEBPACK VAR INJECTION */(function(process) { 5510 5511var Buffer = __webpack_require__(1).Buffer; 5512var Transform = __webpack_require__(15).Transform; 5513var binding = __webpack_require__(150); 5514var util = __webpack_require__(49); 5515var assert = __webpack_require__(88).ok; 5516var kMaxLength = __webpack_require__(1).kMaxLength; 5517var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes'; 5518 5519// zlib doesn't provide these, so kludge them in following the same 5520// const naming scheme zlib uses. 5521binding.Z_MIN_WINDOWBITS = 8; 5522binding.Z_MAX_WINDOWBITS = 15; 5523binding.Z_DEFAULT_WINDOWBITS = 15; 5524 5525// fewer than 64 bytes per chunk is stupid. 5526// technically it could work with as few as 8, but even 64 bytes 5527// is absurdly low. Usually a MB or more is best. 5528binding.Z_MIN_CHUNK = 64; 5529binding.Z_MAX_CHUNK = Infinity; 5530binding.Z_DEFAULT_CHUNK = 16 * 1024; 5531 5532binding.Z_MIN_MEMLEVEL = 1; 5533binding.Z_MAX_MEMLEVEL = 9; 5534binding.Z_DEFAULT_MEMLEVEL = 8; 5535 5536binding.Z_MIN_LEVEL = -1; 5537binding.Z_MAX_LEVEL = 9; 5538binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION; 5539 5540// expose all the zlib constants 5541var bkeys = Object.keys(binding); 5542for (var bk = 0; bk < bkeys.length; bk++) { 5543 var bkey = bkeys[bk]; 5544 if (bkey.match(/^Z/)) { 5545 Object.defineProperty(exports, bkey, { 5546 enumerable: true, value: binding[bkey], writable: false 5547 }); 5548 } 5549} 5550 5551// translation table for return codes. 5552var codes = { 5553 Z_OK: binding.Z_OK, 5554 Z_STREAM_END: binding.Z_STREAM_END, 5555 Z_NEED_DICT: binding.Z_NEED_DICT, 5556 Z_ERRNO: binding.Z_ERRNO, 5557 Z_STREAM_ERROR: binding.Z_STREAM_ERROR, 5558 Z_DATA_ERROR: binding.Z_DATA_ERROR, 5559 Z_MEM_ERROR: binding.Z_MEM_ERROR,
5560 Z_BUF_ERROR: binding.Z_BUF_ERROR, 5561 Z_VERSION_ERROR: binding.Z_VERSION_ERROR 5562}; 5563 5564var ckeys = Object.keys(codes); 5565for (var ck = 0; ck < ckeys.length; ck++) { 5566 var ckey = ckeys[ck]; 5567 codes[codes[ckey]] = ckey; 5568} 5569 5570Object.defineProperty(exports, 'codes', { 5571 enumerable: true, value: Object.freeze(codes), writable: false 5572}
vendor: 14,778 bytes, lines 5572-6117
5572); 5573 5574exports.Deflate = Deflate; 5575exports.Inflate = Inflate; 5576exports.Gzip = Gzip; 5577exports.Gunzip = Gunzip; 5578exports.DeflateRaw = DeflateRaw; 5579exports.InflateRaw = InflateRaw; 5580exports.Unzip = Unzip; 5581 5582exports.createDeflate = function (o) { 5583 return new Deflate(o); 5584}; 5585 5586exports.createInflate = function (o) { 5587 return new Inflate(o); 5588}; 5589 5590exports.createDeflateRaw = function (o) { 5591 return new DeflateRaw(o); 5592}; 5593 5594exports.createInflateRaw = function (o) { 5595 return new InflateRaw(o); 5596}; 5597 5598exports.createGzip = function (o) { 5599 return new Gzip(o); 5600}; 5601 5602exports.createGunzip = function (o) { 5603 return new Gunzip(o); 5604}; 5605 5606exports.createUnzip = function (o) { 5607 return new Unzip(o); 5608}; 5609 5610// Convenience methods. 5611// compress/decompress a string or buffer in one step. 5612exports.deflate = function (buffer, opts, callback) { 5613 if (typeof opts === 'function') { 5614 callback = opts; 5615 opts = {}; 5616 } 5617 return zlibBuffer(new Deflate(opts), buffer, callback); 5618}; 5619 5620exports.deflateSync = function (buffer, opts) { 5621 return zlibBufferSync(new Deflate(opts), buffer); 5622}; 5623 5624exports.gzip = function (buffer, opts, callback) { 5625 if (typeof opts === 'function') { 5626 callback = opts; 5627 opts = {}; 5628 } 5629 return zlibBuffer(new Gzip(opts), buffer, callback); 5630}; 5631 5632exports.gzipSync = function (buffer, opts) { 5633 return zlibBufferSync(new Gzip(opts), buffer); 5634}; 5635 5636exports.deflateRaw = function (buffer, opts, callback) { 5637 if (typeof opts === 'function') { 5638 callback = opts; 5639 opts = {}; 5640 } 5641 return zlibBuffer(new DeflateRaw(opts), buffer, callback); 5642}; 5643 5644exports.deflateRawSync = function (buffer, opts) { 5645 return zlibBufferSync(new DeflateRaw(opts), buffer); 5646}; 5647 5648exports.unzip = function (buffer, opts, callback) { 5649 if (typeof opts === 'function') { 5650 callback = opts; 5651 opts = {}; 5652 } 5653 return zlibBuffer(new Unzip(opts), buffer, callback); 5654}; 5655 5656exports.unzipSync = function (buffer, opts) { 5657 return zlibBufferSync(new Unzip(opts), buffer); 5658}; 5659 5660exports.inflate = function (buffer, opts, callback) { 5661 if (typeof opts === 'function') { 5662 callback = opts; 5663 opts = {}; 5664 } 5665 return zlibBuffer(new Inflate(opts), buffer, callback); 5666}; 5667 5668exports.inflateSync = function (buffer, opts) { 5669 return zlibBufferSync(new Inflate(opts), buffer); 5670}; 5671 5672exports.gunzip = function (buffer, opts, callback) { 5673 if (typeof opts === 'function') { 5674 callback = opts; 5675 opts = {}; 5676 } 5677 return zlibBuffer(new Gunzip(opts), buffer, callback); 5678}; 5679 5680exports.gunzipSync = function (buffer, opts) { 5681 return zlibBufferSync(new Gunzip(opts), buffer); 5682}; 5683 5684exports.inflateRaw = function (buffer, opts, callback) { 5685 if (typeof opts === 'function') { 5686 callback = opts; 5687 opts = {}; 5688 } 5689 return zlibBuffer(new InflateRaw(opts), buffer, callback); 5690}; 5691 5692exports.inflateRawSync = function (buffer, opts) { 5693 return zlibBufferSync(new InflateRaw(opts), buffer); 5694}; 5695 5696function zlibBuffer(engine, buffer, callback) { 5697 var buffers = []; 5698 var nread = 0; 5699 5700 engine.on('error', onError); 5701 engine.on('end', onEnd); 5702 5703 engine.end(buffer); 5704 flow(); 5705 5706 function flow() { 5707 var chunk; 5708 while (null !== (chunk = engine.read())) { 5709 buffers.push(chunk); 5710 nread += chunk.length; 5711 } 5712 engine.once('readable', flow); 5713 } 5714 5715 function onError(err) { 5716 engine.removeListener('end', onEnd); 5717 engine.removeListener('readable', flow); 5718 callback(err); 5719 } 5720 5721 function onEnd() { 5722 var buf; 5723 var err = null; 5724 5725 if (nread >= kMaxLength) { 5726 err = new RangeError(kRangeErrorMessage); 5727 } else { 5728 buf = Buffer.concat(buffers, nread); 5729 } 5730 5731 buffers = []; 5732 engine.close(); 5733 callback(err, buf); 5734 } 5735} 5736 5737function zlibBufferSync(engine, buffer) { 5738 if (typeof buffer === 'string') buffer = Buffer.from(buffer); 5739 5740 if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer'); 5741 5742 var flushFlag = engine._finishFlushFlag; 5743 5744 return engine._processChunk(buffer, flushFlag); 5745} 5746 5747// generic zlib 5748// minimal 2-byte header 5749function Deflate(opts) { 5750 if (!(this instanceof Deflate)) return new Deflate(opts); 5751 Zlib.call(this, opts, binding.DEFLATE); 5752} 5753 5754function Inflate(opts) { 5755 if (!(this instanceof Inflate)) return new Inflate(opts); 5756 Zlib.call(this, opts, binding.INFLATE); 5757} 5758 5759// gzip - bigger header, same deflate compression 5760function Gzip(opts) { 5761 if (!(this instanceof Gzip)) return new Gzip(opts); 5762 Zlib.call(this, opts, binding.GZIP); 5763} 5764 5765function Gunzip(opts) { 5766 if (!(this instanceof Gunzip)) return new Gunzip(opts); 5767 Zlib.call(this, opts, binding.GUNZIP); 5768} 5769 5770// raw - no header 5771function DeflateRaw(opts) { 5772 if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts); 5773 Zlib.call(this, opts, binding.DEFLATERAW); 5774} 5775 5776function InflateRaw(opts) { 5777 if (!(this instanceof InflateRaw)) return new InflateRaw(opts); 5778 Zlib.call(this, opts, binding.INFLATERAW); 5779} 5780 5781// auto-detect header. 5782function Unzip(opts) { 5783 if (!(this instanceof Unzip)) return new Unzip(opts); 5784 Zlib.call(this, opts, binding.UNZIP); 5785} 5786 5787function isValidFlushFlag(flag) { 5788 return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK; 5789} 5790 5791// the Zlib class they all inherit from 5792// This thing manages the queue of requests, and returns 5793// true or false if there is anything in the queue when 5794// you call the .write() method. 5795 5796function Zlib(opts, mode) { 5797 var _this = this; 5798 5799 this._opts = opts = opts || {}; 5800 this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK; 5801 5802 Transform.call(this, opts); 5803 5804 if (opts.flush && !isValidFlushFlag(opts.flush)) { 5805 throw new Error('Invalid flush flag: ' + opts.flush); 5806 } 5807 if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) { 5808 throw new Error('Invalid flush flag: ' + opts.finishFlush); 5809 } 5810 5811 this._flushFlag = opts.flush || binding.Z_NO_FLUSH; 5812 this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH; 5813 5814 if (opts.chunkSize) { 5815 if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) { 5816 throw new Error('Invalid chunk size: ' + opts.chunkSize); 5817 } 5818 } 5819 5820 if (opts.windowBits) { 5821 if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) { 5822 throw new Error('Invalid windowBits: ' + opts.windowBits); 5823 } 5824 } 5825 5826 if (opts.level) { 5827 if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) { 5828 throw new Error('Invalid compression level: ' + opts.level); 5829 } 5830 } 5831 5832 if (opts.memLevel) { 5833 if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) { 5834 throw new Error('Invalid memLevel: ' + opts.memLevel); 5835 } 5836 } 5837 5838 if (opts.strategy) { 5839 if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) { 5840 throw new Error('Invalid strategy: ' + opts.strategy); 5841 } 5842 } 5843 5844 if (opts.dictionary) { 5845 if (!Buffer.isBuffer(opts.dictionary)) { 5846 throw new Error('Invalid dictionary: it should be a Buffer instance'); 5847 } 5848 } 5849 5850 this._handle = new binding.Zlib(mode); 5851 5852 var self = this; 5853 this._hadError = false; 5854 this._handle.onerror = function (message, errno) { 5855 // there is no way to cleanly recover. 5856 // continuing only obscures problems. 5857 _close(self); 5858 self._hadError = true; 5859 5860 var error = new Error(message); 5861 error.errno = errno; 5862 error.code = exports.codes[errno]; 5863 self.emit('error', error); 5864 }; 5865 5866 var level = exports.Z_DEFAULT_COMPRESSION; 5867 if (typeof opts.level === 'number') level = opts.level; 5868 5869 var strategy = exports.Z_DEFAULT_STRATEGY; 5870 if (typeof opts.strategy === 'number') strategy = opts.strategy; 5871 5872 this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary); 5873 5874 this._buffer = Buffer.allocUnsafe(this._chunkSize); 5875 this._offset = 0; 5876 this._level = level; 5877 this._strategy = strategy; 5878 5879 this.once('end', this.close); 5880 5881 Object.defineProperty(this, '_closed', { 5882 get: function () { 5883 return !_this._handle; 5884 }, 5885 configurable: true, 5886 enumerable: true 5887 }); 5888} 5889 5890util.inherits(Zlib, Transform); 5891 5892Zlib.prototype.params = function (level, strategy, callback) { 5893 if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) { 5894 throw new RangeError('Invalid compression level: ' + level); 5895 } 5896 if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) { 5897 throw new TypeError('Invalid strategy: ' + strategy); 5898 } 5899 5900 if (this._level !== level || this._strategy !== strategy) { 5901 var self = this; 5902 this.flush(binding.Z_SYNC_FLUSH, function () { 5903 assert(self._handle, 'zlib binding closed'); 5904 self._handle.params(level, strategy); 5905 if (!self._hadError) { 5906 self._level = level; 5907 self._strategy = strategy; 5908 if (callback) callback(); 5909 } 5910 }); 5911 } else { 5912 process.nextTick(callback); 5913 } 5914}; 5915 5916Zlib.prototype.reset = function () { 5917 assert(this._handle, 'zlib binding closed'); 5918 return this._handle.reset(); 5919}; 5920 5921// This is the _flush function called by the transform class, 5922// internally, when the last chunk has been written. 5923Zlib.prototype._flush = function (callback) { 5924 this._transform(Buffer.alloc(0), '', callback); 5925}; 5926 5927Zlib.prototype.flush = function (kind, callback) { 5928 var _this2 = this; 5929 5930 var ws = this._writableState; 5931 5932 if (typeof kind === 'function' || kind === undefined && !callback) { 5933 callback = kind; 5934 kind = binding.Z_FULL_FLUSH; 5935 } 5936 5937 if (ws.ended) { 5938 if (callback) process.nextTick(callback); 5939 } else if (ws.ending) { 5940 if (callback) this.once('end', callback); 5941 } else if (ws.needDrain) { 5942 if (callback) { 5943 this.once('drain', function () { 5944 return _this2.flush(kind, callback); 5945 }); 5946 } 5947 } else { 5948 this._flushFlag = kind; 5949 this.write(Buffer.alloc(0), '', callback); 5950 } 5951}; 5952 5953Zlib.prototype.close = function (callback) { 5954 _close(this, callback); 5955 process.nextTick(emitCloseNT, this); 5956}; 5957 5958function _close(engine, callback) { 5959 if (callback) process.nextTick(callback); 5960 5961 // Caller may invoke .close after a zlib error (which will null _handle). 5962 if (!engine._handle) return; 5963 5964 engine._handle.close(); 5965 engine._handle = null; 5966} 5967 5968function emitCloseNT(self) { 5969 self.emit('close'); 5970} 5971 5972Zlib.prototype._transform = function (chunk, encoding, cb) { 5973 var flushFlag; 5974 var ws = this._writableState; 5975 var ending = ws.ending || ws.ended; 5976 var last = ending && (!chunk || ws.length === chunk.length); 5977 5978 if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input')); 5979 5980 if (!this._handle) return cb(new Error('zlib binding closed')); 5981 5982 // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag 5983 // (or whatever flag was provided using opts.finishFlush). 5984 // If it's explicitly flushing at some other time, then we use 5985 // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression 5986 // goodness. 5987 if (last) flushFlag = this._finishFlushFlag;else { 5988 flushFlag = this._flushFlag; 5989 // once we've flushed the last of the queue, stop flushing and 5990 // go back to the normal behavior. 5991 if (chunk.length >= ws.length) { 5992 this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH; 5993 } 5994 } 5995 5996 this._processChunk(chunk, flushFlag, cb); 5997}; 5998 5999Zlib.prototype._processChunk = function (chunk, flushFlag, cb) { 6000 var availInBefore = chunk && chunk.length; 6001 var availOutBefore = this._chunkSize - this._offset; 6002 var inOff = 0; 6003 6004 var self = this; 6005 6006 var async = typeof cb === 'function'; 6007 6008 if (!async) { 6009 var buffers = []; 6010 var nread = 0; 6011 6012 var error; 6013 this.on('error', function (er) { 6014 error = er; 6015 }); 6016 6017 assert(this._handle, 'zlib binding closed'); 6018 do { 6019 var res = this._handle.writeSync(flushFlag, chunk, // in 6020 inOff, // in_off 6021 availInBefore, // in_len 6022 this._buffer, // out 6023 this._offset, //out_off 6024 availOutBefore); // out_len 6025 } while (!this._hadError && callback(res[0], res[1])); 6026 6027 if (this._hadError) { 6028 throw error; 6029 } 6030 6031 if (nread >= kMaxLength) { 6032 _close(this); 6033 throw new RangeError(kRangeErrorMessage); 6034 } 6035 6036 var buf = Buffer.concat(buffers, nread); 6037 _close(this); 6038 6039 return buf; 6040 } 6041 6042 assert(this._handle, 'zlib binding closed'); 6043 var req = this._handle.write(flushFlag, chunk, // in 6044 inOff, // in_off 6045 availInBefore, // in_len 6046 this._buffer, // out 6047 this._offset, //out_off 6048 availOutBefore); // out_len 6049 6050 req.buffer = chunk; 6051 req.callback = callback; 6052 6053 function callback(availInAfter, availOutAfter) { 6054 // When the callback is used in an async write, the callback's 6055 // context is the `req` object that was created. The req object 6056 // is === this._handle, and that's why it's important to null 6057 // out the values after they are done being used. `this._handle` 6058 // can stay in memory longer than the callback and buffer are needed. 6059 if (this) { 6060 this.buffer = null; 6061 this.callback = null; 6062 } 6063 6064 if (self._hadError) return; 6065 6066 var have = availOutBefore - availOutAfter; 6067 assert(have >= 0, 'have should not go down'); 6068 6069 if (have > 0) { 6070 var out = self._buffer.slice(self._offset, self._offset + have); 6071 self._offset += have; 6072 // serve some output to the consumer. 6073 if (async) { 6074 self.push(out); 6075 } else { 6076 buffers.push(out); 6077 nread += out.length; 6078 } 6079 } 6080 6081 // exhausted the output buffer, or used all the input create a new one. 6082 if (availOutAfter === 0 || self._offset >= self._chunkSize) { 6083 availOutBefore = self._chunkSize; 6084 self._offset = 0; 6085 self._buffer = Buffer.allocUnsafe(self._chunkSize); 6086 } 6087 6088 if (availOutAfter === 0) { 6089 // Not actually done. Need to reprocess. 6090 // Also, update the availInBefore to the availInAfter value, 6091 // so that if we have to hit it a third (fourth, etc.) time, 6092 // it'll have the correct byte counts. 6093 inOff += availInBefore - availInAfter; 6094 availInBefore = availInAfter; 6095 6096 if (!async) return true; 6097 6098 var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize); 6099 newReq.callback = callback; // this same function 6100 newReq.buffer = chunk; 6101 return; 6102 } 6103 6104 if (!async) return false; 6105 6106 // finished with the chunk. 6107 cb(); 6108 } 6109}; 6110 6111util.inherits(Deflate, Zlib); 6112util.inherits(Inflate, Zlib); 6113util.inherits(Gzip, Zlib); 6114util.inherits(Gunzip, Zlib); 6115util.inherits(DeflateRaw, Zlib); 6116util.inherits(InflateRaw, Zlib); 6117util.inherits(Unzip, Zlib);
vendor: 15,606 bytes, lines 6118-6701
6118/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11))) 6119 6120/***/ }), 6121/* 49 */ 6122/***/ (function(module, exports, __webpack_require__) { 6123 6124/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. 6125// 6126// Permission is hereby granted, free of charge, to any person obtaining a 6127// copy of this software and associated documentation files (the 6128// "Software"), to deal in the Software without restriction, including 6129// without limitation the rights to use, copy, modify, merge, publish, 6130// distribute, sublicense, and/or sell copies of the Software, and to permit 6131// persons to whom the Software is furnished to do so, subject to the 6132// following conditions: 6133// 6134// The above copyright notice and this permission notice shall be included 6135// in all copies or substantial portions of the Software. 6136// 6137// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 6138// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 6139// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 6140// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 6141// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 6142// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 6143// USE OR OTHER DEALINGS IN THE SOFTWARE. 6144 6145var formatRegExp = /%[sdj%]/g; 6146exports.format = function(f) { 6147 if (!isString(f)) { 6148 var objects = []; 6149 for (var i = 0; i < arguments.length; i++) { 6150 objects.push(inspect(arguments[i])); 6151 } 6152 return objects.join(' '); 6153 } 6154 6155 var i = 1; 6156 var args = arguments; 6157 var len = args.length; 6158 var str = String(f).replace(formatRegExp, function(x) { 6159 if (x === '%%') return '%'; 6160 if (i >= len) return x; 6161 switch (x) { 6162 case '%s': return String(args[i++]); 6163 case '%d': return Number(args[i++]); 6164 case '%j': 6165 try { 6166 return JSON.stringify(args[i++]); 6167 } catch (_) { 6168 return '[Circular]'; 6169 } 6170 default: 6171 return x; 6172 } 6173 }); 6174 for (var x = args[i]; i < len; x = args[++i]) { 6175 if (isNull(x) || !isObject(x)) { 6176 str += ' ' + x; 6177 } else { 6178 str += ' ' + inspect(x); 6179 } 6180 } 6181 return str; 6182}; 6183 6184 6185// Mark that a method should not be used. 6186// Returns a modified function which warns once by default. 6187// If --no-deprecation is set, then it is a no-op. 6188exports.deprecate = function(fn, msg) { 6189 // Allow for deprecating things in the process of starting up. 6190 if (isUndefined(global.process)) { 6191 return function() { 6192 return exports.deprecate(fn, msg).apply(this, arguments); 6193 }; 6194 } 6195 6196 if (process.noDeprecation === true) { 6197 return fn; 6198 } 6199 6200 var warned = false; 6201 function deprecated() { 6202 if (!warned) { 6203 if (process.throwDeprecation) { 6204 throw new Error(msg); 6205 } else if (process.traceDeprecation) { 6206 console.trace(msg); 6207 } else { 6208 console.error(msg); 6209 } 6210 warned = true; 6211 } 6212 return fn.apply(this, arguments); 6213 } 6214 6215 return deprecated; 6216}; 6217 6218 6219var debugs = {}; 6220var debugEnviron; 6221exports.debuglog = function(set) { 6222 if (isUndefined(debugEnviron)) 6223 debugEnviron = process.env.NODE_DEBUG || ''; 6224 set = set.toUpperCase(); 6225 if (!debugs[set]) { 6226 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { 6227 var pid = process.pid; 6228 debugs[set] = function() { 6229 var msg = exports.format.apply(exports, arguments); 6230 console.error('%s %d: %s', set, pid, msg); 6231 }; 6232 } else { 6233 debugs[set] = function() {}; 6234 } 6235 } 6236 return debugs[set]; 6237}; 6238 6239 6240/** 6241 * Echos the value of a value. Trys to print the value out 6242 * in the best way possible given the different types. 6243 * 6244 * @param {Object} obj The object to print out. 6245 * @param {Object} opts Optional options object that alters the output. 6246 */ 6247/* legacy: obj, showHidden, depth, colors*/ 6248function inspect(obj, opts) { 6249 // default options 6250 var ctx = { 6251 seen: [], 6252 stylize: stylizeNoColor 6253 }; 6254 // legacy... 6255 if (arguments.length >= 3) ctx.depth = arguments[2]; 6256 if (arguments.length >= 4) ctx.colors = arguments[3]; 6257 if (isBoolean(opts)) { 6258 // legacy... 6259 ctx.showHidden = opts; 6260 } else if (opts) { 6261 // got an "options" object 6262 exports._extend(ctx, opts); 6263 } 6264 // set default options 6265 if (isUndefined(ctx.showHidden)) ctx.showHidden = false; 6266 if (isUndefined(ctx.depth)) ctx.depth = 2; 6267 if (isUndefined(ctx.colors)) ctx.colors = false; 6268 if (isUndefined(ctx.customInspect)) ctx.customInspect = true; 6269 if (ctx.colors) ctx.stylize = stylizeWithColor; 6270 return formatValue(ctx, obj, ctx.depth); 6271} 6272exports.inspect = inspect; 6273 6274 6275// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics 6276inspect.colors = { 6277 'bold' : [1, 22], 6278 'italic' : [3, 23], 6279 'underline' : [4, 24], 6280 'inverse' : [7, 27], 6281 'white' : [37, 39], 6282 'grey' : [90, 39], 6283 'black' : [30, 39], 6284 'blue' : [34, 39], 6285 'cyan' : [36, 39], 6286 'green' : [32, 39], 6287 'magenta' : [35, 39], 6288 'red' : [31, 39], 6289 'yellow' : [33, 39] 6290}; 6291 6292// Don't use 'blue' not visible on cmd.exe 6293inspect.styles = { 6294 'special': 'cyan', 6295 'number': 'yellow', 6296 'boolean': 'yellow', 6297 'undefined': 'grey', 6298 'null': 'bold', 6299 'string': 'green', 6300 'date': 'magenta', 6301 // "name": intentionally not styling 6302 'regexp': 'red' 6303}; 6304 6305 6306function stylizeWithColor(str, styleType) { 6307 var style = inspect.styles[styleType]; 6308 6309 if (style) { 6310 return '\u001b[' + inspect.colors[style][0] + 'm' + str + 6311 '\u001b[' + inspect.colors[style][1] + 'm'; 6312 } else { 6313 return str; 6314 } 6315} 6316 6317 6318function stylizeNoColor(str, styleType) { 6319 return str; 6320} 6321 6322 6323function arrayToHash(array) { 6324 var hash = {}; 6325 6326 array.forEach(function(val, idx) { 6327 hash[val] = true; 6328 }); 6329 6330 return hash; 6331} 6332 6333 6334function formatValue(ctx, value, recurseTimes) { 6335 // Provide a hook for user-specified inspect functions. 6336 // Check that value is an object with an inspect function on it 6337 if (ctx.customInspect && 6338 value && 6339 isFunction(value.inspect) && 6340 // Filter out the util module, it's inspect function is special 6341 value.inspect !== exports.inspect && 6342 // Also filter out any prototype objects using the circular check. 6343 !(value.constructor && value.constructor.prototype === value)) { 6344 var ret = value.inspect(recurseTimes, ctx); 6345 if (!isString(ret)) { 6346 ret = formatValue(ctx, ret, recurseTimes); 6347 } 6348 return ret; 6349 } 6350 6351 // Primitive types cannot have properties 6352 var primitive = formatPrimitive(ctx, value); 6353 if (primitive) { 6354 return primitive; 6355 } 6356 6357 // Look up the keys of the object. 6358 var keys = Object.keys(value); 6359 var visibleKeys = arrayToHash(keys); 6360 6361 if (ctx.showHidden) { 6362 keys = Object.getOwnPropertyNames(value); 6363 } 6364 6365 // IE doesn't make error fields non-enumerable 6366 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx 6367 if (isError(value) 6368 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { 6369 return formatError(value); 6370 } 6371 6372 // Some type of object without properties can be shortcutted. 6373 if (keys.length === 0) { 6374 if (isFunction(value)) { 6375 var name = value.name ? ': ' + value.name : ''; 6376 return ctx.stylize('[Function' + name + ']', 'special'); 6377 } 6378 if (isRegExp(value)) { 6379 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 6380 } 6381 if (isDate(value)) { 6382 return ctx.stylize(Date.prototype.toString.call(value), 'date'); 6383 } 6384 if (isError(value)) { 6385 return formatError(value); 6386 } 6387 } 6388 6389 var base = '', array = false, braces = ['{', '}']; 6390 6391 // Make Array say that they are Array 6392 if (isArray(value)) { 6393 array = true; 6394 braces = ['[', ']']; 6395 } 6396 6397 // Make functions say that they are functions 6398 if (isFunction(value)) { 6399 var n = value.name ? ': ' + value.name : ''; 6400 base = ' [Function' + n + ']'; 6401 } 6402 6403 // Make RegExps say that they are RegExps 6404 if (isRegExp(value)) { 6405 base = ' ' + RegExp.prototype.toString.call(value); 6406 } 6407 6408 // Make dates with properties first say the date 6409 if (isDate(value)) { 6410 base = ' ' + Date.prototype.toUTCString.call(value); 6411 } 6412 6413 // Make error with message first say the error 6414 if (isError(value)) { 6415 base = ' ' + formatError(value); 6416 } 6417 6418 if (keys.length === 0 && (!array || value.length == 0)) { 6419 return braces[0] + base + braces[1]; 6420 } 6421 6422 if (recurseTimes < 0) { 6423 if (isRegExp(value)) { 6424 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); 6425 } else { 6426 return ctx.stylize('[Object]', 'special'); 6427 } 6428 } 6429 6430 ctx.seen.push(value); 6431 6432 var output; 6433 if (array) { 6434 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); 6435 } else { 6436 output = keys.map(function(key) { 6437 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); 6438 }); 6439 } 6440 6441 ctx.seen.pop(); 6442 6443 return reduceToSingleString(output, base, braces); 6444} 6445 6446 6447function formatPrimitive(ctx, value) { 6448 if (isUndefined(value)) 6449 return ctx.stylize('undefined', 'undefined'); 6450 if (isString(value)) { 6451 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') 6452 .replace(/'/g, "\\'") 6453 .replace(/\\"/g, '"') + '\''; 6454 return ctx.stylize(simple, 'string'); 6455 } 6456 if (isNumber(value)) 6457 return ctx.stylize('' + value, 'number'); 6458 if (isBoolean(value)) 6459 return ctx.stylize('' + value, 'boolean'); 6460 // For some reason typeof null is "object", so special case here. 6461 if (isNull(value)) 6462 return ctx.stylize('null', 'null'); 6463} 6464 6465 6466function formatError(value) { 6467 return '[' + Error.prototype.toString.call(value) + ']'; 6468} 6469 6470 6471function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { 6472 var output = []; 6473 for (var i = 0, l = value.length; i < l; ++i) { 6474 if (hasOwnProperty(value, String(i))) { 6475 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 6476 String(i), true)); 6477 } else { 6478 output.push(''); 6479 } 6480 } 6481 keys.forEach(function(key) { 6482 if (!key.match(/^\d+$/)) { 6483 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, 6484 key, true)); 6485 } 6486 }); 6487 return output; 6488} 6489 6490 6491function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { 6492 var name, str, desc; 6493 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; 6494 if (desc.get) { 6495 if (desc.set) { 6496 str = ctx.stylize('[Getter/Setter]', 'special'); 6497 } else { 6498 str = ctx.stylize('[Getter]', 'special'); 6499 } 6500 } else { 6501 if (desc.set) { 6502 str = ctx.stylize('[Setter]', 'special'); 6503 } 6504 } 6505 if (!hasOwnProperty(visibleKeys, key)) { 6506 name = '[' + key + ']'; 6507 } 6508 if (!str) { 6509 if (ctx.seen.indexOf(desc.value) < 0) { 6510 if (isNull(recurseTimes)) { 6511 str = formatValue(ctx, desc.value, null); 6512 } else { 6513 str = formatValue(ctx, desc.value, recurseTimes - 1); 6514 } 6515 if (str.indexOf('\n') > -1) { 6516 if (array) { 6517 str = str.split('\n').map(function(line) { 6518 return ' ' + line; 6519 }).join('\n').substr(2); 6520 } else { 6521 str = '\n' + str.split('\n').map(function(line) { 6522 return ' ' + line; 6523 }).join('\n'); 6524 } 6525 } 6526 } else { 6527 str = ctx.stylize('[Circular]', 'special'); 6528 } 6529 } 6530 if (isUndefined(name)) { 6531 if (array && key.match(/^\d+$/)) { 6532 return str; 6533 } 6534 name = JSON.stringify('' + key); 6535 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { 6536 name = name.substr(1, name.length - 2); 6537 name = ctx.stylize(name, 'name'); 6538 } else { 6539 name = name.replace(/'/g, "\\'") 6540 .replace(/\\"/g, '"') 6541 .replace(/(^"|"$)/g, "'"); 6542 name = ctx.stylize(name, 'string'); 6543 } 6544 } 6545 6546 return name + ': ' + str; 6547} 6548 6549 6550function reduceToSingleString(output, base, braces) { 6551 var numLinesEst = 0; 6552 var length = output.reduce(function(prev, cur) { 6553 numLinesEst++; 6554 if (cur.indexOf('\n') >= 0) numLinesEst++; 6555 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; 6556 }, 0); 6557 6558 if (length > 60) { 6559 return braces[0] + 6560 (base === '' ? '' : base + '\n ') + 6561 ' ' + 6562 output.join(',\n ') + 6563 ' ' + 6564 braces[1]; 6565 } 6566 6567 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; 6568} 6569 6570 6571// NOTE: These type checking functions intentionally don't use `instanceof` 6572// because it is fragile and can be easily faked with `Object.create()`. 6573function isArray(ar) { 6574 return Array.isArray(ar); 6575} 6576exports.isArray = isArray; 6577 6578function isBoolean(arg) { 6579 return typeof arg === 'boolean'; 6580} 6581exports.isBoolean = isBoolean; 6582 6583function isNull(arg) { 6584 return arg === null; 6585} 6586exports.isNull = isNull; 6587 6588function isNullOrUndefined(arg) { 6589 return arg == null; 6590} 6591exports.isNullOrUndefined = isNullOrUndefined; 6592 6593function isNumber(arg) { 6594 return typeof arg === 'number'; 6595} 6596exports.isNumber = isNumber; 6597 6598function isString(arg) { 6599 return typeof arg === 'string'; 6600} 6601exports.isString = isString; 6602 6603function isSymbol(arg) { 6604 return typeof arg === 'symbol'; 6605} 6606exports.isSymbol = isSymbol; 6607 6608function isUndefined(arg) { 6609 return arg === void 0; 6610} 6611exports.isUndefined = isUndefined; 6612 6613function isRegExp(re) { 6614 return isObject(re) && objectToString(re) === '[object RegExp]'; 6615} 6616exports.isRegExp = isRegExp; 6617 6618function isObject(arg) { 6619 return typeof arg === 'object' && arg !== null; 6620} 6621exports.isObject = isObject; 6622 6623function isDate(d) { 6624 return isObject(d) && objectToString(d) === '[object Date]'; 6625} 6626exports.isDate = isDate; 6627 6628function isError(e) { 6629 return isObject(e) && 6630 (objectToString(e) === '[object Error]' || e instanceof Error); 6631} 6632exports.isError = isError; 6633 6634function isFunction(arg) { 6635 return typeof arg === 'function'; 6636} 6637exports.isFunction = isFunction; 6638 6639function isPrimitive(arg) { 6640 return arg === null || 6641 typeof arg === 'boolean' || 6642 typeof arg === 'number' || 6643 typeof arg === 'string' || 6644 typeof arg === 'symbol' || // ES6 symbol 6645 typeof arg === 'undefined'; 6646} 6647exports.isPrimitive = isPrimitive; 6648 6649exports.isBuffer = __webpack_require__(151); 6650 6651function objectToString(o) { 6652 return Object.prototype.toString.call(o); 6653} 6654 6655 6656function pad(n) { 6657 return n < 10 ? '0' + n.toString(10) : n.toString(10); 6658} 6659 6660 6661var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 6662 'Oct', 'Nov', 'Dec']; 6663 6664// 26 Feb 16:19:34 6665function timestamp() { 6666 var d = new Date(); 6667 var time = [pad(d.getHours()), 6668 pad(d.getMinutes()), 6669 pad(d.getSeconds())].join(':'); 6670 return [d.getDate(), months[d.getMonth()], time].join(' '); 6671} 6672 6673 6674// log is just a thin wrapper to console.log that prepends a timestamp 6675exports.log = function() { 6676 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); 6677}; 6678 6679 6680/** 6681 * Inherit the prototype methods from one constructor into another. 6682 * 6683 * The Function.prototype.inherits from lang.js rewritten as a standalone 6684 * function (not on Function.prototype). NOTE: If this file is to be loaded 6685 * during bootstrapping this function needs to be rewritten using some native 6686 * functions as prototype setup using normal JavaScript does not work as 6687 * expected during bootstrapping (see mirror.js in r114903). 6688 * 6689 * @param {function} ctor Constructor function which needs to inherit the 6690 * prototype. 6691 * @param {function} superCtor Constructor function to inherit prototype from. 6692 */ 6693exports.inherits = __webpack_require__(152); 6694 6695exports._extend = function(origin, add) { 6696 // Don't do anything if add isn't an object 6697 if (!add || !isObject(add)) return origin; 6698 6699 var keys = Object.keys(add); 6700 var i = keys.length; 6701 while (i--) {
6702 origin[keys[i]] = add[keys[i]]; 6703 } 6704 return origin; 6705}; 6706 6707function hasOwnProperty(obj, prop) { 6708 return Object.prototype.hasOwnProperty.call(obj, prop); 6709} 6710 6711/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11))) 6712 6713/***/ }), 6714/* 50 */ 6715/***/ (function(module, exports, __webpack_require__) { 6716 6717/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 6718(function() { 6719 var EmbeddedFont, PDFFont, StandardFont, fontkit; 6720 6721 fontkit = __webpack_require__(167); 6722 6723 PDFFont = (function() { 6724 PDFFont.open = function(document, src, family, id) { 6725 var font; 6726 if (typeof src === 'string') { 6727 if (StandardFont.isStandardFont(src)) { 6728 return new StandardFont(document, src, id); 6729 } 6730 font = fontkit.openSync(src, family); 6731 } else if (Buffer.isBuffer(src)) { 6732 font = fontkit.create(src, family); 6733 } else if (src instanceof Uint8Array) { 6734 font = fontkit.create(new Buffer(src), family); 6735 } else if (src instanceof ArrayBuffer) { 6736 font = fontkit.create(new Buffer(new Uint8Array(src)), family); 6737 } 6738 if (font == null) { 6739 throw new Error('Not a supported font format or standard PDF font.'); 6740 } 6741 return new EmbeddedFont(document, font, id); 6742 }; 6743 6744 function PDFFont() { 6745 throw new Error('Cannot construct a PDFFont directly.'); 6746 } 6747 6748 PDFFont.prototype.encode = function(text) { 6749 throw new Error('Must be implemented by subclasses'); 6750 }; 6751 6752 PDFFont.prototype.widthOfString = function(text) { 6753 throw new Error('Must be implemented by subclasses'); 6754 }; 6755 6756 PDFFont.prototype.ref = function() { 6757 return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref(); 6758 }; 6759 6760 PDFFont.prototype.finalize = function() { 6761 if (this.embedded || (this.dictionary == null)) { 6762 return; 6763 } 6764 this.embed(); 6765 return this.embedded = true; 6766 }; 6767 6768 PDFFont.prototype.embed = function() { 6769 throw new Error('Must be implemented by subclasses'); 6770 }; 6771 6772 PDFFont.prototype.lineHeight = function(size, includeGap) { 6773 var gap; 6774 if (includeGap == null) { 6775 includeGap = false; 6776 } 6777 gap = includeGap ? this.lineGap : 0; 6778 return (this.ascender + gap - this.descender) / 1000 * size; 6779 }; 6780 6781 return PDFFont; 6782 6783 })(); 6784 6785 module.exports = PDFFont; 6786 6787 StandardFont = __webpack_require__(292); 6788 6789 EmbeddedFont = __webpack_require__(294); 6790 6791}).call(this); 6792 6793/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 6794 6795/***/ }), 6796/* 51 */ 6797/***/ (function(module, exports, __webpack_require__) { 6798 6799/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1 6800(function() { 6801 var DecodeStream, iconv; 6802 6803 try { 6804 iconv = __webpack_require__(52); 6805 } catch (_error) {} 6806 6807 DecodeStream = (function() { 6808 var key; 6809 6810 function DecodeStream(buffer) { 6811 this.buffer = buffer; 6812 this.pos = 0; 6813 this.length = this.buffer.length; 6814 } 6815 6816 DecodeStream.TYPES = { 6817 UInt8: 1, 6818 UInt16: 2, 6819 UInt24: 3, 6820 UInt32: 4, 6821 Int8: 1, 6822 Int16: 2, 6823 Int24: 3, 6824 Int32: 4, 6825 Float: 4, 6826 Double: 8 6827 }; 6828 6829 for (key in Buffer.prototype) { 6830 if (key.slice(0, 4) === 'read') { 6831 (function(key) { 6832 var bytes; 6833 bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')]; 6834 return DecodeStream.prototype[key] = function() { 6835 var ret; 6836 ret = this.buffer[key](this.pos); 6837 this.pos += bytes; 6838 return ret; 6839 }; 6840 })(key); 6841 } 6842 } 6843 6844 DecodeStream.prototype.readString = function(length, encoding) { 6845 var buf, byte, i, _i, _ref; 6846 if (encoding == null) { 6847 encoding = 'ascii'; 6848 } 6849 switch (encoding) { 6850 case 'utf16le': 6851 case 'ucs2': 6852 case 'utf8': 6853 case 'ascii': 6854 return this.buffer.toString(encoding, this.pos, this.pos += length); 6855 case 'utf16be': 6856 buf = new Buffer(this.readBuffer(length)); 6857 for (i = _i = 0, _ref = buf.length - 1; _i < _ref; i = _i += 2) { 6858 byte = buf[i]; 6859 buf[i] = buf[i + 1]; 6860 buf[i + 1] = byte; 6861 } 6862 return buf.toString('utf16le'); 6863 default: 6864 buf = this.readBuffer(length); 6865 if (iconv) { 6866 try { 6867 return iconv.decode(buf, encoding); 6868 } catch (_error) {} 6869 } 6870 return buf; 6871 } 6872 }; 6873 6874 DecodeStream.prototype.readBuffer = function(length) { 6875 return this.buffer.slice(this.pos, this.pos += length); 6876 }; 6877 6878 DecodeStream.prototype.readUInt24BE = function() { 6879 return (this.readUInt16BE() << 8) + this.readUInt8(); 6880 }; 6881 6882 DecodeStream.prototype.readUInt24LE = function() { 6883 return this.readUInt16LE() + (this.readUInt8() << 16); 6884 }; 6885 6886 DecodeStream.prototype.readInt24BE = function() { 6887 return (this.readInt16BE() << 8) + this.readUInt8(); 6888 }; 6889 6890 DecodeStream.prototype.readInt24LE = function() { 6891 return this.readUInt16LE() + (this.readInt8() << 16); 6892 }; 6893 6894 return DecodeStream; 6895 6896 })(); 6897 6898 module.exports = DecodeStream; 6899 6900}).call(this); 6901 6902/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 6903
6904/***/ }), 6905/* 52 */ 6906/***/ (function(module, exports, __webpack_require__) { 6907 6908"use strict"; 6909/* WEBPACK VAR INJECTION */(function(process) { 6910 6911// Some environments don't have global Buffer (e.g. React Native). 6912// Solution would be installing npm modules "buffer" and "stream" explicitly. 6913var Buffer = __webpack_require__(1).Buffer; 6914 6915var bomHandling = __webpack_require__(170), 6916 iconv = module.exports; 6917 6918// All codecs and aliases are kept here, keyed by encoding name/alias. 6919// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. 6920iconv.encodings = null; 6921 6922// Characters emitted in case of error. 6923iconv.defaultCharUnicode = '�'; 6924iconv.defaultCharSingleByte = '?'; 6925 6926// Public API. 6927iconv.encode = function encode(str, encoding, options) { 6928 str = "" + (str || ""); // Ensure string. 6929 6930 var encoder = iconv.getEncoder(encoding, options); 6931 6932 var res = encoder.write(str); 6933 var trail = encoder.end(); 6934 6935 return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; 6936} 6937 6938iconv.decode = function decode(buf, encoding, options) { 6939 if (typeof buf === 'string') { 6940 if (!iconv.skipDecodeWarning) { 6941 console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); 6942 iconv.skipDecodeWarning = true; 6943 } 6944 6945 buf = new Buffer("" + (buf || ""), "binary"); // Ensure buffer. 6946 } 6947 6948 var decoder = iconv.getDecoder(encoding, options); 6949 6950 var res = decoder.write(buf); 6951 var trail = decoder.end(); 6952 6953 return trail ? (res + trail) : res; 6954} 6955 6956iconv.encodingExists = function encodingExists(enc) { 6957 try { 6958 iconv.getCodec(enc); 6959 return true; 6960 } catch (e) { 6961 return false; 6962 } 6963} 6964 6965// Legacy aliases to convert functions 6966iconv.toEncoding = iconv.encode; 6967iconv.fromEncoding = iconv.decode; 6968 6969// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. 6970iconv._codecDataCache = {}; 6971iconv.getCodec = function getCodec(encoding) { 6972 if (!iconv.encodings) 6973 iconv.encodings = __webpack_require__(171); // Lazy load all encoding definitions. 6974 6975 // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. 6976 var enc = (''+encoding).toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, ""); 6977 6978 // Traverse iconv.encodings to find actual codec. 6979 var codecOptions = {}; 6980 while (true) { 6981 var codec = iconv._codecDataCache[enc]; 6982 if (codec) 6983 return codec; 6984 6985 var codecDef = iconv.encodings[enc]; 6986 6987 switch (typeof codecDef) { 6988 case "string": // Direct alias to other encoding. 6989 enc = codecDef; 6990 break; 6991 6992 case "object": // Alias with options. Can be layered. 6993 for (var key in codecDef) 6994 codecOptions[key] = codecDef[key]; 6995 6996 if (!codecOptions.encodingName) 6997 codecOptions.encodingName = enc; 6998 6999 enc = codecDef.type; 7000 break; 7001 7002 case "function": // Codec itself. 7003 if (!codecOptions.encodingName) 7004 codecOptions.encodingName = enc; 7005 7006 // The codec function must load all tables and return object with .encoder and .decoder methods. 7007 // It'll be called only once (for each different options object). 7008 codec = new codecDef(codecOptions, iconv); 7009 7010 iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. 7011 return codec; 7012 7013 default: 7014 throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); 7015 } 7016 } 7017} 7018 7019iconv.getEncoder = function getEncoder(encoding, options) { 7020 var codec = iconv.getCodec(encoding), 7021 encoder = new codec.encoder(options, codec); 7022 7023 if (codec.bomAware && options && options.addBOM) 7024 encoder = new bomHandling.PrependBOM(encoder, options); 7025 7026 return encoder; 7027} 7028 7029iconv.getDecoder = function getDecoder(encoding, options) { 7030 var codec = iconv.getCodec(encoding), 7031 decoder = new codec.decoder(options, codec); 7032 7033 if (codec.bomAware && !(options && options.stripBOM === false)) 7034 decoder = new bomHandling.StripBOM(decoder, options); 7035 7036 return decoder; 7037} 7038 7039 7040// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json. 7041var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node; 7042if (nodeVer) { 7043 7044 // Load streaming support in Node v0.10+ 7045 var nodeVerArr = nodeVer.split(".").map(Number); 7046 if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { 7047 __webpack_require__(185)(iconv); 7048 } 7049 7050 // Load Node primitive extensions. 7051 __webpack_require__(186)(iconv); 7052} 7053 7054if (false) { 7055 console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); 7056} 7057 7058/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(11))) 7059 7060/***/ }), 7061/* 53 */
7062/***/ (function(module, exports) { 7063 7064module.exports = [["0","
vendor: 14,886 bytes, line 7064
7064\u0000",127,"â¬"],["8140","ä¸ä¸ä¸
ä¸ä¸ä¸ä¸ä¸ä¸ 両丣並丩丮丯丱丳丵丷丼ä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹¢ä¹£ä¹¤ä¹¥ä¹§ä¹¨ä¹ª",5,"乲乴",9,"乿",6,"äºäº"],["8180","äºäºäºäºäºäºäºäº£äºªäº¯äº°äº±äº´äº¶äº·äº¸äº¹äº¼äº½äº¾ä»ä»ä»ä»ä»ä»ä»ä»ä» 仢仦仧仩ä»ä»®ä»¯ä»±ä»´ä»¸ä»¹ä»ºä»¼ä»¾ä¼ä¼",6,"ä¼ä¼ä¼",4,"ä¼ä¼ä¼¡ä¼£ä¼¨ä¼©ä¼¬ä¼ä¼®ä¼±ä¼³ä¼µä¼·ä¼¹ä¼»ä¼¾",4,"ä½ä½
ä½",5,"ä½ä½ä½ä½¡ä½¢ä½¦ä½¨ä½ªä½«ä½ä½®ä½±ä½²ä½µä½·ä½¸ä½¹ä½ºä½½ä¾ä¾ä¾ä¾
ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾¡ä¾¢"],["8240","侤侫ä¾ä¾°",4,"ä¾¶",8,"ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿",4,"ä¿ä¿ä¿ 俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","åååååååååååå å¢å£å¤å§å«å¯",10,"å»å½å¿ååååå
åååååå",4,"åååååå",7,"å¦",5,"å",8,"å¸å¹åºå¼å½ååååååååååå",20,"å¤å¦åªå«å",4,"å³",6,"å¼"],["8340","å½",17,"å",5,"åååå",10,"å¨å©åªå«å¯å°å±å²å´å¶",4,"å¼",9,"å"],["8380","ååå",5,"å",13,"å¢",28,"å
å
å
å
å
å
å
å
å
å
å
å
å
å
",4,"å
£å
¤å
¦å
§å
©å
ªå
¯å
²å
ºå
¾å
¿åååååååååååååååååå¡å£å¦",4,"åå®å´å¸å¹åºå¾å¿åååå
åååååå",5],["8440","ååååååå¢å£å¥",5,"å¬å®å±å²å´å·å¾åå
åååååååååååå¡å¢å£å¥å¦å§åªå¬å¯å±å²å´åµå¼å¾å",5,"åååååååå"],["8480","åååååå å¢å£å¤å¦å¨å«å¬åå®å°å±å³",9,"å¾åå",4,"å",6,"ååå",6,"åå¤å¥å¦å§å®å¯å°å´",9,"ååååå
ååååååååååååå",5,"å å¡å¢å£å¥",10,"å±",7,"å»å¼å½åååååååååå"],["8540","åååååååååå¢å¤å¥å§å¨å©å«å¬åå¯",9,"å¼å½åååååååååååååå¥å¨åªå¬åå²å¶å¹å»å¼å½å¾åååååååå"],["8580","å",4,"ååååååå å¡å¤å§åªå«å¬åå¯",6,"å·å¸å¹åºå¼å½å¾åå",4,"ååååååååååå¡å¢å§å´åºå¾å¿ååå
åååååååå¢å¤å¥åªå°å³å¶å·åºå½å¿åååå
ååååååååå",4,"å£å¥å§å©",7,"å´å¹åºå¾å¿ååå
ååååååååååååå å¡"],["8640","å¢å¥å®å°å²åµå¶å·å¹åºå¼å¾åå
åååååå ",4,"å«å¬å¯å°å±å´",5,"å»å¾ååååå
åå",4,"ååå",5,"ååååå¡å¥å¦"],["8680","å¨å©å«åå²å´åµå¶å¸å¹åºå»å½ååå
ååå",4,"ååååå",4,"åååå å¢å£å¨å©å«å¯",5,"å¹åºå½å¿å
åååååååååååååå ",6,"å¨",8,"å²å´å¶å¸åºå¼å¿",4,"åååååååååå",4,"åå å¢å§å©åå®å°å±å´å¶å¸",4,"å¿åååå
"],["8740","åååååå",7,"ååååå å¡å¢å¥å¦å¨å©åªå«å®å¯å°å³åµå·å¸åºå¼å½å¾å",11,"å",4,"ååååå",4],["8780","å£å¥å¦å§åå®å¯å°å²å³å´åµå·å¸å¹åºå½",7,"å",6,"åååå",14,"å¤",10,"å°",6,"å¸å¹åºå»å½",12,"å",8,"åååååå£å¥",5,"å¬å®å¯å²å³å¶å·å¸å»å¼åååå
åå",6],["8840","å",9,"ååå å¡å¢å¤å¥å¦å§å«å±å²å´",4,"å¼å½å¿åååå
ååååå",4,"ååå¢å£å¥å§å¬å®å°å±å²å´åµå¸å¹åºå½å¾å¿å"],["8880","åååååå",4,"å",6,"ååååå¥å¨åªå¬å¯å°å±å³åµå¶å·å¹",8,"å",6,"ååååååååååå¡å¢å£å¥",7,"å®å°å±å²å³åµå¶å·å»å¼å¾å¿å å å å
å å å å å å å å å å å å å å å å å å å ¢å £å ¥",4,"å «",4,"å ±å ²å ³å ´å ¶",7],["8940","å ¾",5,"å¡
",6,"å¡å¡å¡å¡å¡å¡å¡å¡å¡",4,"å¡",5,"塦",4,"å¡",16,"å¡¿å¢å¢å¢å¢å¢å¢å¢å¢"],["8980","å¢",4,"å¢",4,"å¢å¢å¢å¢ ",7,"墪",17,"墽墾墿å£å£å£å£å£",10,"å£å£å£å£",13,"壥",5,"å£å£¯å£±å£²å£´å£µå£·å£¸å£º",7,"å¤å¤
å¤å¤",4,"å¤å¤å¤å¤å¤å¤å¤å¤å¤å¤å¤ 夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿å¥å¥å¥
å¥å¥å¥å¥å¥å¥å¥å¥å¥",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿å¦å¦
å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦å¦ 妡妢妦"],["8a80","妧妬å¦å¦°å¦±å¦³",5,"妺妼妽妿",6,"å§å§å§å§å§å§å§å§å§å§å§å§",4,"姤姦姧姩姪姫å§",11,"姺姼姽姾å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨å¨¡å¨¢å¨¤å¨¦å¨§å¨¨å¨ª",6,"娳娵娷",4,"娽娾娿å©",4,"å©å©å©",9,"å©å©å©å©å©",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾åª",17,"åª",6,"åª",13,"媫媬"],["8b80","åª",4,"媴媶媷媹",4,"媿å«å«",5,"å«å«å«",4,"å«å«å«å«å«å«å«å«å«å«¢å«¤å«¥å«§å«¨å«ªå«¬",4,"嫲",22,"å¬",11,"å¬",25,"嬳嬵嬶嬸",7,"å",6],["8c40","å",7,"åååå å¡å§å¨å«åå®å¯å²å´å¶å·å¸å¹å»å¼å¾å¿å®å®å®å®å®å®å®å®å®å®å®å®§å®¨å®©å®¬å®å®®å®¯å®±å®²å®·å®ºå®»å®¼å¯å¯å¯å¯å¯å¯å¯å¯å¯å¯"],["8c80","å¯å¯",8,"å¯ å¯¢å¯£å¯¦å¯§å¯©",4,"寯寱",6,"寽対å°å°å°å°
å°å°å°å°å°å°å°å°å°å°å°å°å°å°å° 尡尣尦尨尩尪尫å°å°®å°¯å°°å°²å°³å°µå°¶å°·å±å±å±å±å±å±å±å±å±å±å±å±å±å±å±å±å±å±¢å±¤å±§",6,"å±°å±²",6,"屻屼屽屾å²å²",4,"å²å²å²å²å²å²å²å²å²",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾å³å³å³å³
",5,"å³",5,"å³",5,"å³",6,"峢峣峧峩峫峬峮峯峱",9,"å³¼",4],["8d80","å´å´å´
å´",5,"å´",4,"å´å´å´å´å´å´å´å´",4,"崥崨崪崫崬崯",4,"å´µ",7,"å´¿",7,"åµåµåµ",10,"åµåµåµåµ",10,"嵪åµåµ®åµ°åµ±åµ²åµ³åµµ",12,"å¶",21,"å¶å¶å¶å¶å¶å¶ "],["8e40","å¶¡",21,"嶸",12,"å·",6,"å·",12,"å·å·å· 巣巤巪巬å·"],["8e80","巰巵巶巸",4,"å·¿å¸å¸å¸å¸å¸å¸å¸å¸å¸å¸å¸å¸",7,"帨",4,"帯帰帲",4,"帹帺帾帿å¹å¹å¹å¹",5,"å¹",6,"å¹",4,"å¹å¹å¹å¹ å¹£",14,"幵幷幹幾åºåºåºåº
åºåºåºåºåºåºåºåºåºåº¡åº¢åº£åº¤åº¨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","å»å»å»å»",5,"å»å»å»å»å»å»å»",11,"廩廫",8,"廵廸廹廻廼廽å¼
å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼å¼¡å¼¢å¼£å¼¤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿å½",14,"å½å½å½å½å½å½å½å½å½ 彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾å¾ å¾¢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"å¿å¿å¿å¿å¿å¿å¿å¿å¿å¿å¿å¿å¿å¿¢å¿£å¿¥å¿¦å¿¨å¿©å¿¬å¿¯å¿°å¿²å¿³å¿´å¿¶å¿·å¿¹å¿ºå¿¼æ"],["9040","æææææææææææææ¢æ£æ¤æ¬ææ®æ°",4,"æ¶",4,"æ½æ¾ææ",6,"ææææææææææææææ æ¡æ¥æ¦æ®æ±æ²æ´æµæ·æ¾æ"],["9080","æææ
æææææææææææææææææ¡æ¢æ¤æ¥æ§æ©æªæ®æ°æ³æµæ¶æ·æ¹æºæ½",7,"ææææ",4,"æææææææææ¡",4,"æªæ±æ²æµæ·æ¸æ»",4,"ææææ
æææææ",4,"æææææææææ¡æ¢æ¥æ¨æ©æªæ¬",18,"æ
",6],["9140","æ
æ
æ
æ
æ
æ
æ
æ
æ
æ
",6,"æ
æ
æ
æ
¡æ
£æ
¤æ
¥æ
¦æ
©",6,"æ
±æ
²æ
³æ
´æ
¶æ
¸",18,"æææ",4,"æ"],["9180","æ",6,"æ",8,"æªæ«æ",9,"æ¸",5,"æ¿æææ",4,"ææ",4,"ææ",16,"æ§",13,"æ¶",8,"æ",5,"æææææææææ æ£æ¦æ§æ¨æ©æ«ææ¯æ°æ±æ²æµæ¶æ¸",4,"æææ
ææ"],["9240","ææææææææ",6,"æ¤æ¥æ¨æ±æ²æ´æµæ·æ¸æºæ»æ½ææææ
ææææ",5,"ææææææ£æ¦æ§æ©æªææ®æ¯æ°æ²æ³æ´æ¶æ·æ¸æºæ¾ææ"],["9280","ææææææææ æ¡æ¤æªæ«æ°æ²æµæ¸æ¹æºæ»ææææ
ææææææææææææææææ¦æ§æ©æ¬ææ®æ°æ±æ³",5,"æ»æ¼æ¾æ¿æææææææææææ",7,"æ æ¤æ¥æ¦æ¨æªæ«æ¬æ¯æ°æ²æ³æ´æµæ¸æ¹æ¼æ½æ¾æ¿ææææ
æææææææææ",6,"æ¡æ¤æ¦æ«æ¯æ±æ²æµæ¶æ¹æ»æ½æ¿æ"],["9340","ææææ
ææææææææææ",6,"ææ¢æ¤",4,"æ«æ¬æ®æ¯æ°æ±æ³æµæ·æ¹æºæ»æ¼æ¾æææ",4,"æææææ",5,"æææ¢æ£æ¤"],["9380","æ¥æ§æ¨æ©æ«æ®",5,"æµ",4,"æ»æ¼æ¾æææææ",6,"æææææ",4,"æ",7,"æ¨æªæ«æ¬æ®",9,"æ»",6,"æææ",8,"æææææææææ",4,"æ¥æ¦æ§æ¨æªæ«æ¯æ±æ²æ³æ´æ¶æ¹æ»æ½æ¾æ¿ææææ",6,"ææææææææ"],["9440","æææææ æ¡æ£æ¥æ§",24,"æ",7,"æ",7,"æ",4,"æ",8],["9480","æ¢æ£æ¤æ¦",4,"æ¬ææ°æ±æ²æ³æ·æºæ¼æ½æ",4,"ææææææææææææææææ æ¡æ¤æ¥æ§æ¨æ©æªææ®æ¯æ±æ³æµæ¶æ¸",14,"æææææææææææææææ æ¢æ£æ¦æ¨æªæ¬æ®æ±",7,"æºæ»æ¾æ¿æææææææææææææ",7,"æ¡æ£æ¤æªæ«"],["9540","æ²æ³æ´æµæ¸æ¹æ»",4,"æææ
ææææææææææææææææ¡æ¢æ£æ¤æ¦æ©æªæ«æ¬æ®æ°æ²æ³æ·",4,"æ½æ¿æææ",6,"æææææ"],["9580","ææææææ æ¢æ£æ¥æ§æ©",4,"æ±æ²æ³æµæ¸æ¹æ»æ¼æ½æ¿ææææ
ææææææææææææææ",4,"æ",8,"æ©",4,"æ¯",4,"æµæ¶æ·æ¸æºæ»æ¼æ½æ¿",25,"ææ",7,"æ§æ¨æª",5,"æ±æµæ¶æ¸æºæ»æ½æææ"],["9640","ææ
æææææææææææææææ ",5,"æ§æ©æ®æ°æ²æ³æ¶æ·æ¸æ¹æ»æ¼æ¾æ¿æææ
ææææææææ",4,"ææ¢æ£æ¤æ¦æ§æ«æ¬æ®æ±æ´æ¶"],["9680","æ¸æ¹æºæ»æ½ææææ
ææææææææææææææææ æ¡æ¤æ¦æ©æ¬æ®æ±æ²æ´æ¹",7,"ææ
",9,"ææææææ¡æ£æ¤æ¦æ§æ¨æªæ«ææ®æ²æµ",7,"æ¾æ æ æ æ æ æ æ æ æ æ æ ",4,"æ æ æ æ ¢",6,"æ «",6,"æ ´æ µæ ¶æ ºæ »æ ¿æ¡æ¡æ¡æ¡æ¡æ¡",5],["9740","æ¡æ¡æ¡æ¡æ¡ªæ¡¬",7,"桵桸",8,"æ¢æ¢æ¢",7,"æ¢æ¢æ¢æ¢æ¢æ¢æ¢",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"æ£æ£",5,"æ£æ£æ£æ£æ£æ£æ£æ£æ£æ£æ£æ£",4,"棡棢棤",9,"æ£¯æ£²æ£³æ£´æ£¶æ£·æ£¸æ£»æ£½æ£¾æ£¿æ¤æ¤æ¤æ¤æ¤",4,"æ¤æ¤æ¤æ¤",11,"椡椢椣椥",7,"æ¤®æ¤¯æ¤±æ¤²æ¤³æ¤µæ¤¶æ¤·æ¤¸æ¤ºæ¤»æ¤¼æ¤¾æ¥æ¥æ¥",16,"æ¥æ¥æ¥æ¥æ¥æ¥æ¥"],["9840","æ¥¡æ¥¢æ¥¤æ¥¥æ¥§æ¥¨æ¥©æ¥ªæ¥¬æ¥æ¥¯æ¥°æ¥²",4,"æ¥ºæ¥»æ¥½æ¥¾æ¥¿æ¦æ¦æ¦
æ¦æ¦æ¦æ¦",5,"æ¦æ¦æ¦æ¦æ¦",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","æ¦¾æ¦¿æ§æ§",7,"æ§æ§æ§æ§æ§æ§æ§",5,"æ§æ§æ§æ§¡",11,"槮槯槰槱槳",9,"æ§¾æ¨",9,"æ¨",11,"æ¨",5,"æ¨ æ¨¢",5,"æ¨©æ¨«æ¨¬æ¨æ¨®æ¨°æ¨²æ¨³æ¨´æ¨¶",6,"樿",4,"æ©
æ©æ©",7,"æ©",6,"æ©"],["9940","æ©",4,"橢橣橤橦",10,"橲",6,"æ©ºæ©»æ©½æ©¾æ©¿æªæªæªæª
",8,"æªæª",4,"æª",7,"檡",5],["9980","檧檨檪æª",114,"欥欦欨",6],["9a40","æ¬¯æ¬°æ¬±æ¬³æ¬´æ¬µæ¬¶æ¬¸æ¬»æ¬¼æ¬½æ¬¿æææææ
ææææ",11,"æ",7,"æ¨æ©æ«",13,"æºæ½æ¾æ¿æ®æ®
æ®"],["9a80","æ®æ®æ®æ®æ®æ®æ®æ®æ®æ®æ®",4,"殢",7,"殫",7,"殶殸",6,"æ¯æ¯æ¯æ¯",4,"æ¯æ¯æ¯æ¯æ¯æ¯æ¯",4,"毢",7,"æ¯¬æ¯æ¯®æ¯°æ¯±æ¯²æ¯´æ¯¶æ¯·æ¯¸æ¯ºæ¯»æ¯¼æ¯¾",6,"æ°",4,"æ°æ°æ°æ°æ°æ°æ° æ°£æ°¥æ°«æ°¬æ°æ°±æ°³æ°¶æ°·æ°¹æ°ºæ°»æ°¼æ°¾æ°¿æ±æ±æ±
æ±æ±",4,"æ±æ±æ±æ±æ±"],["9b40","æ±æ±æ±¢æ±£æ±¥æ±¦æ±§æ±«",4,"æ±±æ±³æ±µæ±·æ±¸æ±ºæ±»æ±¼æ±¿æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²æ² æ²¢æ²¨æ²¬æ²¯æ²°æ²´æ²µæ²¶æ²·æ²ºæ³æ³æ³æ³æ³æ³æ³æ³æ³æ³æ³æ³æ³æ³"],["9b80","æ³æ³æ³æ³æ³æ³¤æ³¦æ³§æ³©æ³¬æ³æ³²æ³´æ³¹æ³¿æ´æ´æ´æ´
æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´æ´",5,"æ´¦æ´¨æ´©æ´¬æ´æ´¯æ´°æ´´æ´¶æ´·æ´¸æ´ºæ´¿æµæµæµæµæµæµæµæµæµæµæµæµæµæµ¡æµ¢æµ¤æµ¥æµ§æµ¨æµ«æµ¬æµæµ°æµ±æµ²æµ³æµµæµ¶æµ¹æµºæµ»æµ½",4,"æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶",4,"æ¶æ¶¢æ¶¥æ¶¬æ¶æ¶°æ¶±æ¶³æ¶´æ¶¶æ¶·æ¶¹",5,"æ·æ·æ·æ·æ·æ·"],["9c40","æ·æ·æ·æ·æ·æ·æ·æ·æ·æ·æ·æ·æ·æ·¢æ·£æ·¥æ·§æ·¨æ·©æ·ªæ·æ·¯æ·°æ·²æ·´æ·µæ·¶æ·¸æ·ºæ·½",7,"æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸æ¸¢æ¸¦æ¸§æ¸¨æ¸ªæ¸¬æ¸®æ¸°æ¸±æ¸³æ¸µ"],["9c80","渶渷渹渻",7,"æ¹
",7,"æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹ ",10,"æ¹¬æ¹æ¹¯",14,"æºæºæºæºæºæºæº",4,"æº",6,"æºæºæºæºæºæº æº¡æº£æº¤æº¦æº¨æº©æº«æº¬æºæº®æº°æº³æºµæº¸æº¹æº¼æº¾æº¿æ»æ»æ»æ»
æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»£æ»§æ»ª",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"æ¼æ¼æ¼
æ¼æ¼æ¼",4,"æ¼æ¼æ¼æ¼",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"æ¼¿æ½æ½æ½"],["9d80","æ½æ½æ½
æ½æ½æ½æ½æ½",9,"æ½æ½æ½æ½æ½æ½ 潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"æ¾
æ¾æ¾æ¾æ¾æ¾",12,"æ¾æ¾æ¾æ¾ æ¾¢",4,"澨",10,"澴澵澷澸澺",5,"æ¿æ¿",5,"æ¿",6,"æ¿",10,"æ¿æ¿¢æ¿£æ¿¤æ¿¥"],["9e40","濦",7,"æ¿°",32,"ç",7,"ç",6,"ç¤",6],["9e80","ç«",9,"ç¶ç·ç¸çº",17,"ççç",13,"ç",11,"ç®ç±ç²ç³ç´ç·ç¹çºç»ç½ççççççççççççççççççç",12,"ç°ç²ç´çµç¶çºç¾ç¿çç
çççç",12,"ç"],["9f40","çççç ç¡ç¢ç£ç¥çªç®ç°",6,"ç¸çºç»ç¼ç¾",10,"ç",4,"ççççç",10,"ç§",7,"ç²ç³ç´"],["9f80","çµç·",13,"ç
ç
ç
ç
ç
ç
ç
",12,"ç
ç
",4,"ç
¥ç
©",4,"ç
¯ç
°ç
±ç
´ç
µç
¶ç
·ç
¹ç
ȍ
¼ç
¾",5,"ç
",4,"çççççççççççç",4,"ç¡",6,"ç©çªç«ç",5,"ç´ç¶ç·ç¸çº",8,"ç",9,"ç",4],["a040","ç",9,"ç¡ç¢ç£ç¤ç¦ç¨",5,"ç¯",9,"çº",11,"ç",19],["a080","ççç",9,"ç©ç«çç®ç¯ç²ç³ç´çºç¼ç¾ç",6,"çççççççççççççççç ç£ç¤ç¥ç¨çªç«ç¬çç°ç±ç³ç´ç¶ç·ç¸ç»ç¼ç½ççç
",4,"ççççç",11,"ç ",11,"ç®ç±ç²ç³çµçº",6,"ç
ççççççççççççççç"],["a1a1","ããã·Ë˨ãã
âï½ââ¦ââââããã",7,"ãããã±Ã÷â¶â§â¨âââªâ©ââ·ââ¥â¥â âââ«â®â¡âââ½ââ â®â¯â¤â¥ââµâ´ââ°â²â³âï¼Â¤ï¿ ï¿¡â°Â§âââ
ââââââ¡â â³â²â»ââââã"],["a2a1","â
°",9],["a2b1","â",19,"â´",19,"â ",9],["a2e5","ã ",9],["a2f1","â
",11],["a3a1","ï¼ï¼ï¼ï¿¥ï¼
",88,"ï¿£"],["a4a1","ã",82],["a5a1","ã¡",85],["a6a1","Î",16,"Σ",6],["a6c1","α",16,"Ï",6],["a6e0","︵︶︹︺︿ï¹ï¸½ï¸¾ï¹ï¹ï¹ï¹"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","Ð",5,"ÐÐ",25],["a7d1","а",5,"Ñж",25],["a840","ËËËâââ¥âµâ
ââââââââ£ââ¦â§â¿â",35,"â",6],["a880","â",7,"ââââ¼â½â¢â£â¤â¥ââããã"],["a8a1","ÄáÇà ÄéÄèīÃÇìÅóÇòūúÇùÇÇÇÇüêÉ"],["a8bd","ÅÅ"],["a8c0","É¡"],["a8c5","ã
",36],["a940","ã¡",8,"ã£ãããããã¡ããããã︰¬¦"],["a959","â¡ã±"],["a95c","â"],["a960","ã¼ããã½ã¾ãããï¹",9,"ï¹ï¹ï¹ï¹ï¹",8],["a980","ï¹¢",4,"﹨﹩﹪﹫"],["a996","ã"],["a9a4","â",75],["aa40","çççç¢",5,"çªç«çµç¶ç¹ç½ç¾ç¿ççç",5,"ççççççççççççç ç£ç¤ç¦ç§ç¨çç¯ç°ç²ç³çµç¶çºç»ç¼ç½ç",8],["aa80","çççççççççççç",7,"ç¡",10,"ç®ç°ç±"],["ab40","ç²",11,"ç¿",4,"ç
ççççççççççççççççççç ç¡ç£",5,"çªç¬çç±ç´çµç¶ç¸ç¹ç¼ç½ç¾ç¿çç",4],["ab80","çççç",6,"çççççç¡ç¢ç£ç¤ç¦ç¨çªç«ç¬ç®ç¯ç°ç±ç³",4],["ac40","ç¸",10,"çççççççç",8,"ç",5,"ç£ç¤ç§ç©ç«çç¯ç±ç²ç·",4,"ç½ç¾ç¿çç",11],["ac80","ç",6,"çççç ",12,"ç®ç¯ç±",4,"ç¸ç¹çº"],["ad40","ç»ç¼ç½ç¿ççç
çççççççç",10,"çç",7,"çª",15,"ç»",12],["ad80","ç",9,"ç",8,"ççç¡ç¥ç§",6,"ç°ç±ç²"],["ae40","ç³çµç¸",6,"ççççç
",7,"ççççççççççç ",4,"ç¦ç§çªç®ç´ç¶ç¹ç¼ç½ç¿ççççççççççççççççç"],["ae80","ç",7,"ç§ç¨ç©ç«",6,"ç
vendor: 32,163 bytes, line 7064
7064³çµç¶ç·çº",4,"ççççç
ç"],["af40","çççççççççççççç¢ç¦",4,"çç¶ç·çºç»ç¿ççççççççççççççççç ç¡ç¥ç©ç¬çç®ç¯ç²ç³çµç¶ç·ç¸çºç»ç½ç¾çççç"],["af80","çççççççççççççççç¡ç£ç§ç¨ç¬ç®ç¯ç±ç²ç¶ç·ç¹çºç»ç½ççç"],["b040","ç
",6,"ç",5,"çç",4,"ççç ç¡ç¢ç¤",6,"ç¬çç®ç°",7,"ç¹çºç¼ç¿çççç
ççççççççççççç"],["b080","ç",7,"ç¥",8,"ç¯ç°ç³çµ",9,"çççåé¿åæ¨åååççè¼ç®è¾ç¢ç±ééæ°¨å®ä¿ºææå²¸èºæ¡è®æç广ç¬ç¿±è¢å²å¥¥ææ¾³èææåå§ç¬å
«ç¤å·´æè·é¶æèåé¸ç½¢ç¸ç½æç¾æä½°è´¥æç¨æçæ¬æ³è¬é¢æ¿çæ®æä¼´ç£ååç»é¦å¸®æ¢æ¦èç»æ£ç£
èéåè°¤èèå
è¤å¥"],["b140","ççççççççççççç ",4,"ç¦",7,"ç°ç³çµç¶ç·çºç»ç½ç¿çççç
çççç",10,"ççççç¡ç£ç¤ç¥ç§çªç«"],["b180","ç¬ç®ç°",4,"ç¹ç»ç½ç¾ç¿ççç
çç",7,"ç",7,"çèé¹ä¿å ¡é¥±å®æ±æ¥æ´è±¹é²çæ¯ç¢æ²ååè¾èè´é¡åç夿«ç被å¥è¯æ¬ç¬¨å´©ç»·ç泵蹦迸é¼é¼»æ¯éç¬å½¼ç¢§èè½æ¯æ¯æ¯å¸åºç¹éæå¼å¿
è¾å£èé¿ééè¾¹ç¼è´¬æä¾¿ååè¾¨è¾©è¾«éæ å½ªèè¡¨é³æå«çªå½¬ææ¿æ»¨å®¾æå
µå°æä¸ç§é¥¼ç³"],["b240","çççç ç¤ç§ç©çªç",11,"çºç»ç¼çççç",5,"ççç",11,"ç¡ç£ç¤ç¦ç¨ç«çç®ç¯ç±ç²ç´ç¶",4],["b280","ç¼ç¾ç",12,"ç",8,"çççç",4,"ç¤ç
å¹¶ç»è ææ¨éµæ³¢ååæéç®ä¼¯å¸è¶èèæ¸¤æ³é©³æååºè¡¥å ä¸å¸æ¥ç°¿é¨ææ¦çè£ææè´¢ç¬è¸©é彩èè¡é¤åèæ®ææ¨ç¿èè±ä»æ²§èæç³æ§½æ¹èåçä¾§åæµå±è¹æåè¬è¶æ¥ç¢´æ½å¯å²å·®è¯§ææ´è±ºææºèé¦è°ç¼ é²äº§é颤æç"],["b340","ç¦ç¨çªç¯ç°ç±ç²ç´çµç·ç¹çºç»ç¼ç ",5,"ç ç ç ç ç ç ç ç ç ç ç ç ¡ç ¢ç ¤ç ¨ç ªç «ç ®ç ¯ç ±ç ²ç ³ç µç ¶ç ½ç ¿ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡"],["b380","ç¡ç¡ç¡",11,"硯",7,"硸硹硺硻硽",6,"åºå°å¸¸é¿å¿è åæç
å±å¡è¶
æéæå²æ½®å·¢åµçè½¦æ¯æ¤æ£å½»æ¾é´è£è¾°å°æ¨å¿±æ²éè¶è¡¬æç§°åæ©æåä¹ç¨æ©æ¾è¯æ¿ééªç§¤åç´æåæ± è¿å¼é©°è»é½¿ä¾å°ºèµ¤ç¿
æ¥ç½å
å²è«å´å® æ½é
¬ç´è¸ç¨ æç¹ä»ç»¸ç
ä¸èååºæ©±å¨èºé鿻餿¥"],["b440","ç¢ç¢
ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ç¢ 碢碤碦碨",7,"碵碶碷碸確碻碼碽碿ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£",9],["b480","磤磥磦磧磩磪磫ç£",4,"磳磵磶磸磹磻",5,"ç¤ç¤ç¤ç¤",6,"ç¡å¨çæè§¦å¤æ£å·ç©¿æ¤½ä¼ è¹å串ç®çªå¹¢åºé¯åå¹çæ¶é¤åæ¥æ¤¿éåæ·³çº¯è ¢æ³ç»°çµè¨ç£éè¾æ
ç·è¯æ¤åºèµæ¬¡èªè±å±åä»ä¸åç²éç°ä¿è¹¿ç¯¡çªæ§å´å¬èçç²¹æ·¬ç¿ æåå¯¸ç£æ®ææªæ«éæè¾¾çç©æå¤§åæ¹å£æ´å¸¦æ®ä»£è´·è¢å¾
é®"],["b540","ç¤",5,"ç¤",9,"ç¤",4,"礥",14,"礵",4,"礽礿ç¥ç¥ç¥ç¥
ç¥ç¥",8,"ç¥ç¥ç¥ç¥ç¥¡ç¥£"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦æ è½æ
丹å鏿¸èæ¦æ°®ä½æ®æ·¡è¯å¼¹è彿¡å
è¡æ¡£åæ£è¹åå²ç¥·å¯¼å°ç¨»æ¼éçå¾·å¾ç蹬ç¯ç»ççªå³éå ¤ä½æ»´è¿ªæç¬ç涤ç¿å«¡æµåºå°è第å¸å¼éç¼é¢ ææ»ç¢ç¹å
¸éå«çµä½ç¸åºæ¦å¥ æ·æ®¿ç¢å¼éååæåéè°è·ç¹ç¢è¶è¿è°å "],["b640","ç¦",6,"ç¦",11,"禨",10,"禴",4,"禼禿ç§ç§ç§
ç§ç§ç§ç§ç§ç§ç§ç§ç§ç§ç§ç§",5,"ç§ ç§¡ç§¢ç§¥ç§¨ç§ª"],["b680","秬秮秱",6,"秹秺秼秾秿ç¨ç¨ç¨
ç¨ç¨ç¨ç¨ç¨ç¨",4,"ç¨ç¨ç¨ç¨ç¨ç¨ä¸ç¯å®éé¡¶é¼éå®è®¢ä¸¢ä¸å¬è£æå¨æ 便«å»æ´å
ææé¡è±éçé½ç£æ¯çç¬è¯»å µç¹èµæéè度渡å¦ç«¯ç黿®µæç¼å å
é对墩å¨è¹²æ¦é¡¿å¤éç¾éæåå¤å¤ºå躲æµè·ºèµåæ°å è¾å³¨é¹
ä¿é¢è®¹å¨¥æ¶åæ¼éé饿æ©èå¿è³å°é¥µæ´±äº"],["b740","ç¨ç¨ç¨¡ç¨¢ç¨¤",14,"稴稵稶稸稺稾ç©",5,"ç©",9,"ç©",4,"ç©",16],["b780","ç©©",6,"穱穲穳穵穻穼穽穾çªçª
çªçªçªçªçªçªçªçªçªçªçªçªçªçªçª¡çª¢è´°åç½çä¼ä¹éæ³çè©å¸çªç¿»æ¨ç¾éç¹å¡ç¦åè¿èè´©ç¯é¥æ³åè³æ¹èªæ¿é²å¦¨ä»¿è®¿çººæ¾è²éå¡é£è¥åªè¯½å èºåºæ²¸è´¹è¬é
婿°å纷åçæ±¾ç²å¥ä»½å¿¿æ¤ç²ªä¸°å°æ«èå³°éé£ç¯ç½é¢å¯ç¼è®½å¥å¤ä½å¦å¤«æ·è¤åµæ¶æè¾å¹
æ°ç¬¦ä¼ä¿æ"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"ç«",10,"ç«",9,"ç«ç«ç«ç«ç«ç«ç«¡ç«¢ç«¤ç«§",5,"竮竰竱竲竳"],["b880","ç«´",4,"竻竼竾ç¬ç¬ç¬ç¬
ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬ç¬¡ç¬¢ç¬£ç¬§ç¬©ç¬æµ®æ¶ªç¦è¢±å¼ç«æè¾
ä¿¯éæ§è¯è
åºè
èµ´å¯è¦èµå¤å
ä»éç¶è
¹è´å¯è®£éå¦ç¼åå¶åè¯¥æ¹æ¦éçæºå¹²çææç«¿èèµ¶æç§æ¢èµ£ååé¢ç¼¸èçº²å²æ¸¯æ ç¯çé«èç¾ç³æé稿å奿ææé¸½è³çå²é©èæ ¼è¤ééé¬ä¸ªåç»æ ¹è·èæ´åºç¾¹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"ççççççççççççç¡ç£",10,"ç¯ç°ç³ç´ç¶ç¸çºç¼ç½ç¿ç®ç®ç®ç®ç®",6,"ç®ç®"],["b980","ç®ç®ç®ç®ç®ç®ç®ç®ç®ç®ç® 箣箤箥箮箯箰箲箳箵箶箷箹",7,"ç¯ç¯ç¯åè¿æ¢å·¥æ»åæé¾ä¾èº¬å
¬å®«å¼å·©æ±æ±è´¡å
±é©å¾æ²èç墿è´å¤è¾èåç®ä¼°æ²½å¤å§é¼å¤èéª¨è°·è¡æ
顾åºéå®çå寡æè¤ä¹ææªæ£ºå
³å®å è§ç®¡é¦ç½æ¯çè´¯å
广éç°è§åç¡
å½é¾éºè½¨é¬¼è¯¡ç¸æ¡æè·ªè´µå½è¾æ»æ£é
éå½æè£¹è¿å"],["ba40","ç¯
ç¯ç¯ç¯ç¯ç¯ç¯ç¯ç¯ç¯ç¯",4,"ç¯ç¯ç¯ç¯ç¯ 篢篣篤篧篨篩篫篬ç¯ç¯¯ç¯°ç¯²",4,"篸篹篺篻篽篿",7,"ç°ç°ç°ç°ç°ç°",5,"ç°ç°ç°"],["ba80","ç°",4,"ç° ",5,"簨簩簫",12,"ç°¹",5,"ç±éª¸å©æµ·æ°¦äº¥å®³éªé
£æ¨é¯é©å«æ¶µå¯å½åç½ç¿°æ¼ææ±æ¾æçæ±æ±å¤¯æèªå£å豪毫é好èå·æµ©åµåè·èæ ¸ç¦¾åä½åçè²é河涸赫è¤é¹¤è´ºå¿é»çå¾ç æ¨å¼äº¨æ¨ªè¡¡æè½°åçè¹é¸¿æ´ªå®å¼çº¢å侯ç´å¼åååå¼ä¹å¿½ç壶è«è¡è´çç³æ¹"],["bb40","ç±",9,"ç±",36,"ç±µ",5,"ç±¾",9],["bb80","ç²ç²",6,"ç²ç²ç²ç²ç²ç²ç² 粡粣粦粧粨粩粫粬ç²ç²¯ç²°ç²´",4,"粺粻弧è嬿¤äºæ²ªæ·è±ååç¾æ»ç»ååè¯æ§å¾ææ·®åæ¬¢ç¯æ¡è¿ç¼æ¢æ£å¤çªè±¢ç涣宦幻èæ
é»ç£ºèç°§çå°æ¶ç
æå¹æè°ç°æ¥è¾å¾½æ¢è忝ææ
§åæ æ¦è´¿ç§½ä¼ç©æ±è®³è¯²ç»è¤æå©éæµæ··è±æ´»ä¼ç«è·ææé货祸å»å¾åºæºç¸ç¨½ç§¯ç®"],["bc40","粿ç³ç³ç³ç³ç³ç³ç³ç³",6,"ç³ç³ç³ç³ç³ç³¡",6,"糩",5,"ç³°",7,"糹糺糼",13,"ç´",5],["bc80","ç´",14,"紡紣紤紥紦紨紩紪紬ç´ç´®ç´°",6,"è饥迹æ¿è®¥é¸¡å§¬ç»©ç¼åææ£è¾ç±éåæ¥ç¾æ±²å³å«çº§æ¤å èå·±èæåå£ä¼ç¥åæ¸æµå¯å¯è®¡è®°æ¢å¿é
å¦ç»§çºªåæ·å¤¹ä½³å®¶å èé¢è´¾ç²é¾å稼价æ¶é©¾å«æ¼çåå°ç¬ºé´ç
å
¼è©è°å¥¸ç¼è§æ£æ¬ç¢±ç¡·æ£æ¡ç®ä¿åªåèæ§é´è·µè´±è§é®ç®ä»¶"],["bd40","ç´·",54,"絯",7],["bd80","絸",32,"å¥è°åé¥¯æ¸æº
涧建åµå§å°æµæ±çèæ¡¨å¥è®²å é
±éèæ¤ç¤ç¦è¶äº¤éæµéªå¨å¼æ
é°ç«ä¾¥èç¡è§é¥ºç¼´ç»å¿æé
µè½¿è¾å«çªææ¥ç秸è¡é¶æªå«èæ¡æ°æ·ç«ç«æ´ç»è§£å§æèè¥çåä»ç¥è¯«å±å·¾çæ¤é仿´¥è¥ç´§é¦ä»
è°¨è¿é³æç¦è¿ç¬æµ¸"],["be40","ç¶",12,"ç¶§",6,"綯",42],["be80","ç·",32,"å°½å²èå
¢èçæ¶é²¸äº¬æç²¾ç²³ç»äºè¦æ¯é¢é墿¬éå¾çéç«ç«åç¯çªæªç©¶çº çéä¹
ç¸ä¹é
婿æ§è¼è
åå°±çé æçç½å±
驹èå±åç©ä¸¾æ²®èææ®å·¨å
·è·è¸é¯ä¿±å¥æ§ç¬å§æé¹å¨å¦ç·å·ç»¢æ
æ«ææåçµè§å³è¯ç»åèé§ååå³»"],["bf40","ç·»",62],["bf80","縺縼",4,"ç¹",4,"ç¹",21,"ä¿ç«£æµé¡éªååå¡å¯å¼æ©æ¥·å¯æ
¨åå ªååç ç康æ
·ç³ ææäº¢çèæ·ç¤é å·èæ¯æ£µç£é¢ç§å£³å³å¯æ¸´å
å»å®¢è¯¾è¯å妿³åå空æåæ§æ 壿£å¯æ¯åçªè¦é
·åºè£¤å¤¸å®æè·¨è¯åç·ä¾©å¿«å®½æ¬¾å¡ççæ¡ç¿ç¶æ·åµäºç岿窥èµå¥éå"],["c040","ç¹",35,"çº",23,"çºçºçº"],["c080","纮纴纻纼ç»ç»¤ç»¬ç»¹ç¼ç¼ç¼ç¼·ç¼¹ç¼»",6,"ç½ç½",9,"ç½ç½é¦æ§æºå¤ææå°æ¬æ©å»éåæåè¡è
è¾£å¦è±æ¥èµèå©ªæ æ¦ç¯®éå
°æ¾è°°æ½è§æç¼ç滥ç
æ¦ç¼å»éææµªæå³ç¢è佬姥é
ªçæ¶åä¹é·éè¾ç£ç´¯å¡åæè类泪棱æ¥å·å梨çé»ç¯±ç¸ç¦»æ¼çæé鲤礼èèåæ ä¸½åå±ç ¾åå©åä¾ä¿"],["c140","ç½ç½ç½ç½ç½ç½ç½ ç½£",4,"罫罬ç½ç½¯ç½°ç½³ç½µç½¶ç½·ç½¸ç½ºç½»ç½¼ç½½ç½¿ç¾ç¾",7,"ç¾ç¾ç¾",4,"ç¾",4,"ç¾ç¾ç¾ 羢羣羥羦羨",6,"ç¾±"],["c180","ç¾³",4,"羺羻羾ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿",4,"ç¿ç¿ç¿",5,"翢翣ç¢ç«ç²æ²¥é¶åçå©ä¿©èè²è¿é°å»ææ¶å¸æè¸é¾æç¼ç»ç²®åæ¢ç²±è¯ä¸¤è¾éæ¾äº®è°
æ©èåççå¯¥è¾½æ½¦äºæé£å»æåè£çå£çç³æç£·é临é»é³æ·åèµåæç²è±é¶é¾éä¼¶ç¾åçµéµå²é¢å¦ä»¤æºç榴硫é¦çåç¤æµæ³å
é¾èå笼窿"],["c240","翤翧翨翪翫翬ç¿ç¿¯ç¿²ç¿´",6,"翽翾翿èèèèèèèèèèèèèèè¡è£è¤è«",5,"è²è´è¹èºè¼è¾èèèè
èèèèèèèèèèè"],["c280","èè",13,"è«",5,"è²",11,"é忢鿥¼å¨æç¯æ¼éè¦å¢é¢
åºçæ³å¤èé²éºç¢é²è·¯èµé¹¿æ½ç¦å½éæ®é©´åéä¾£æ
履屡ç¼èæ°¯å¾ç滤绿峦æåªæ»¦åµä¹±æ ç¥æ¡è½®ä¼¦ä»æ²¦çº¶è®ºèèºç½é»é£ç®©éª¡è£¸è½æ´éªç»å¦éº»çç è马éªååå买麦åè¿èçé¦è®æ»¡èæ¼æ
¢æ¼«"],["c340","è¾èèè
èèè",5,"èèèèèè£è¦è§è¨è¬è°è³èµè¶è¸è¹è»è
è",4,"è",6,"èèè è¢è£è¦è®èµè·è¹è»è¾è¿èèèèè
èèè"],["c380","èèèèèèèè",12,"èè®è°è³è´èµè·è¹",4,"è¿è°©èè«ç²æ°å¿è½ç«è
鿝çéå¯èå帽è²è´¸ä¹ç«ææ¢
é
¶éç
¤æ²¡çåªéæ¯ç¾æ§å¯å¦¹åªé¨é·ä»¬èèæª¬çé°ç梦åç¯éé¡ç³è¿·è°å¼¥ç±³ç§è§
æ³èå¯å¹æ£ç 绵åå
å娩ç¼
é¢èæçèç§æ¸ºåºå¦èçæ°æ¿ç¿ææ¯é½æè鸣éåå½è°¬æ¸"],["c440","è
",5,"è
è
è
è
è
è
è
è
è
è
",4,"è
¡è
¢è
£è
¤è
¦è
¨è
ªè
«è

¯è
²è
³è
µè
¶è
·è
¸èè",4,"èèèèèèè",5,"èèè",4,"è¤è¥"],["c480","è§è©è«",7,"è´",5,"è¼è½è¾è¿èè
èèèèè",6,"æ¹è模è磨æ©éæ¹æ«è«å¢¨é»æ²«æ¼ å¯éè°çææç¡äº©å§æ¯å¢æ®å¹åæ
æ¨ç®ç¦ç§ç©æ¿åªåé é£å¨çº³æ°ä¹å¥¶èå¥åç·é¾åæ èæ¼é¹æ·å¢é¦å
å«©è½å¦®éåªæ³¥å°¼æä½ å¿è
»éæººè«æå¹´ç¢¾æµæ»å¿µå¨é
¿é¸å°¿æèå½å®ééæ¶
æ¨æ çåå®"],["c540","è",14,"è¤è¥è¦è¨è©è«è®",4,"èµ",5,"è½è¿èè",4,"èèèèè",5,"èè è¤è¥è¦è§è©è®è²èºè¼è½è¿"],["c580","èèèèè
èèèèèèè",7,"èèèèèè ",7,"è©æ§æ³çæé®çº½èæµåå¼å¥´åªæå¥³æèçæªæ¦ç³¯è¯ºå¦æ¬§é¸¥æ®´èåå¶æ²¤åªè¶´ç¬å¸æç¶ææç徿¹æ´¾ææ½çç£ç¼çå¤åä¹åºæèªèæåå¨ç®è¢è·æ³¡å¸èå¹è£´èµéªé
佩æ²å·çç °æ¨ç¹æ¾å½è¬æ£ç¡¼ç¯·è¨æé¹æ§ç¢°å¯ç 鹿¹æ«åçµæ¯"],["c640","èªè«è¬èè±èµè¶è·è¸è»è¼èèèè
èèèèèèèèèèèèè è¢è£è§è²èµè¶èºè»è¼è¿èèèè
èèèèèèèè¢è§è¨è©èªè¬èè®è°è²è³èµè¶è¸"],["c680","èºè¼",4,"èèèèèèèèèè",9,"è©èªè®è°è²è·è»è½å¤è¾ç²ç®å¹çå»å±è¬ç¯åçéªé£æ¼ç¢ç¥¨æç¥æ¼é¢è´«åèä¹åªè¹èå¹³åç¶è¯å±å¡æ³¼é¢å©ç ´éè¿«ç²åæéºä»èè¡è©è²åæ´åæ®æµ¦è°±æçææ¬ºæ æå¦»ä¸åæ¼ææ²å
¶æ£å¥æ§ç¦å´è齿ç¥ç¥éªèµ·å²ä¹ä¼å¯å¥ç 卿°è¿å¼æ±½æ³£è®«æ"],["c740","è¾è¿èèèè
èè",4,"èè",4,"èè¢è°",6,"è¹èºè¾",6,"èèèèèèèèèèèèèèèèèè¡",6,"è¬èè®"],["c780","è¯èµè»è¾è¿èèèèèèèèèèèèèèèèèèèè¢è£è¤è¦è§è¨è«è¬èæ°æ´½çµæ¦éé
åè¿ç¾ä»è°¦ä¹¾é»é±é³åæ½é£æµ
è°´å 嵿¬ ææªåè
ç¾å¢è·å¼ºæ¢æ©é¹æ²ææ¡¥ç§ä¹ä¾¨å·§éæ¬ç¿å³ä¿çªåè䏿¯çªé¦ä¾µäº²ç§¦ç´å¤è¹æç¦½å¯æ²é轻氢å¾å¿æ¸
ææ´æ°°æ
顷请åºç¼ç©·ç§ä¸é±çæ±åé
æ³
è¶åºèæ²èº¯å±é©±æ¸ "],["c840","è®è¯è³",4,"èºè»è¼è¾è¿èèè
èèèèèè",5,"èèèè",5,"è©",7,"è²",5,"è¹èºè»è¾",7,"èèè"],["c880","è",6,"è",4,"èèèèè è¢è¤",4,"èªè®è¯è°è²è´è·è¹è»è¼å娶é¾è¶£å»å颧æéæ³å
¨çæ³ç¬å¸å缺çç¸å´é¹æ¦·ç¡®éè£ç¾¤ç¶çåæç¤å£¤æå·è®©é¥¶æ°ç»æ¹ç壬ä»äººå¿é§ä»»è®¤åå¦çº«æä»æ¥æè¸èè£èçæº¶å®¹ç»åææèè¹è ååºå¦è¾±ä¹³æ±å
¥è¤¥è½¯é®èçéé°æ¶¦è¥å¼±ææ´è¨è
®é³å¡èµä¸å"],["c940","è½",4,"èèè
èèèè",7,"èèèèèèè è¢",12,"è°è±è³èµè¶è·è»è¼è¾èèèè
èèèèèèèèèèè"],["c980","è",4,"èè¡è¢è¤è§",4,"èè®è¯è±",10,"è½è¾èèè伿£æ¡å丧æéªæ«å«çè²æ¶©æ£®å§èç æå¹æ²çº±å»å¥ç
çæçè«æå±±å ç
½è¡«éªéæ
赡è³åæ±æç¼®å¢ä¼¤åèµæä¸å°è£³æ¢¢æç¨ç§èåºé¶å°å¨éµç»å¥¢èµèèè赦æå°æ
æ¶ç¤¾è®¾ç ·ç³å»ä¼¸èº«æ·±å¨ ç»
ç¥æ²å®¡å©¶çè¾æ
æ¸å£°çç¥ç²å绳"],["ca40","è",8,"èèèèèèèèèèèèèèè è¢",8,"è",9,"è¾",4,"èè
èèè",10],["ca80","èèèèèèè",4,"è¥è¦è§è©",8,"è³èµè¶è·è¸è¼è½è¿èèççå©èå£å¸å¤±ç®æ½æ¹¿è¯å°¸è±åç³æ¾æ¶ä»é£èå®è¯å²ç¢ä½¿å±é©¶å§å¼ç¤ºå£«ä¸æ¿äºæèªéå¿æ¯åå¬éä»ä¾é饰æ°å¸æå®¤è§è¯æ¶æé¦å®å¯¿æå®åç¦å
½è¬æ¢æ¢³æ®æè¾åèæ·ç书èµå°çè¯ææç½²èé»é¼ 屿¯è¿°æ ææç«å¢
åº¶æ°æ¼±"],["cb40","èèèè",6,"è",10,"è",6,"è¥è¦è§è©è«è¬èè±",5,"è¸èº",6,"è",6,"è",4,"èè"],["cb80","èè",5,"è",6,"è¥è¦è§è¨èª",14,"æå·èæè¡°ç©å¸
æ æ´éåç½è°æ°´ç¡ç¨å®ç¬é¡ºèè¯´ç¡æçæ¯æå¶æç§å¸ä¸æ»è寺å£å伺似饲巳æ¾è¸æé¢éå®è®¼è¯µæèæå½èé
¥ä¿ç´ éç²å³å¡æº¯å®¿è¯èé
¸èç®è½éé绥é«ç¢å²ç©éé§ç¥åæç¬èæ¢å缩çç´¢éæå¡ä»å®å¥¹å¡"],["cc40","è¹èºè¼è½è¾è",4,"è",10,"èèèèè",15,"è¨èª",13,"è¹èºè»è½è¾è¿è"],["cc80","è",11,"èèè",4,"èèèèè è¡è£",7,"çæè¹è¸èèæ¬å°æ³°é
å¤ªææ±°åæè´ªç«æ»©åæªç°æ½è°è°å¦æ¯¯è¢ç¢³æ¢å¹çæ±¤å¡æªå æ£ èåç³å躺æ·è¶ç«ææ¶æ»ç»¦èæ¡éæ·é¶è®¨å¥ç¹è¤è
¾ç¼èªæ¢¯å踢éæé¢è¹å¼ä½æ¿åææ¶åå±å¤©æ·»å¡«ç°çæ¬èè
ææ¡è¿¢çºè·³è´´éå¸å
å¬ç"],["cd40","èè¯è°è²",6,"è",6,"è",4,"èè",5,"è",4,"è¥è¦è«èè®è²è³è·è¸è¹è»",4,"èèèè
èèèèèèèèèè"],["cd80","èè è¡è¢è£è¥è¦è§è¨èªè«è¬è¯èµè¶è·èºè»è¼è½è¿èèè
èèèèèèèèèæ±å»·åäºåºæºèéæ¡é
®ç³åé彤童桶æ
çç»ç巿头éå¸ç§çªå¾å¾éæ¶å± ååå
æ¹å¢æ¨é¢è
¿è褪éåå±¯èææè±é¸µé驮驼æ¤å¦¥æå¾æåèæ´¼å¨ç¦è¢æªå¤è±å¼¯æ¹¾ç©é¡½ä¸¸ç·å®ç¢æ½æçæå®å©ä¸è
汪ç亡æç½å¾æºæå¿å¦å¨"],["ce40","èèèèè è¤è¦è§è¨èªè«è¬èè¯è°è²è³èµè¶è¸è¹èºè¼è½è",6,"èèèèèèèèèèèè",5,"è¡è¢è¦",7,"è¯è±è²è³èµ"],["ce80","è·è¸è¹èºè¿èèèèèèèèè",4,"èèèè",6,"è ",4,"å·å¾®å±é¦è¿æ¡
å´å¯æä¸ºæ½ç»´èèå§ä¼ä¼ªå°¾çº¬æªèå³çèåé使¸è°å°æ
°å«ç温èæé»çº¹å»ç¨³ç´é®å¡ç¿ç®æèæ¶¡çªææ¡å§æ¡æ²å·«åé¨ä¹æ±¡è¯¬å±æ èæ¢§å¾å´æ¯æ¦äºæåèä¼ä¾®åæé¾æ¤ç©å¿å¡æè¯¯æçæè¥¿ç¡ç½æ°å»å¸é¡çº"],["cf40","è¥è¦è§è©èªè®è°è±è²è´è¶è·è¸è¹è»è¼è¾è¿è",4,"èèèè",4,"è",6,"èèèèè¡è¢è£è¤è¦è§è¨è©è«è¬èè¯",9],["cf80","èºè»è¼è½è¿è è è è ",5,"è ",7,"è è è è è è ",4,"è £ç¨æ¯å¸æè夿çç¯æºªæ±çæªè¢å¸ä¹ 媳å飿´ç³»éæç»çè¾å£éè¾æå³¡ä¾ çä¸å¦å¤åæé¨å
ä»é²çº¤å¸è´¤è¡è·é²æ¶å¼¦å«æ¾é©ç°ç®å¿è
ºé¦
羡宪é·é线ç¸å¢é¶é¦ç®±è¥æ¹ä¹¡ç¿ç¥¥è¯¦æ³å享项巷橡åå象è§ç¡éåå®å£éæ¶å®µæ·æ"],["d040","è ¤",13,"è ³",5,"è ºè »è ½è ¾è ¿è¡è¡è¡è¡",5,"è¡",5,"è¡è¡è¡è¡",6,"衦衧衪è¡è¡¯è¡±è¡³è¡´è¡µè¡¶è¡¸è¡¹è¡º"],["d080","衻衼è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢è¢",4,"è¢",4,"袣袥",5,"å°åæ ¡èå¸ç¬ææ¥äºæèéåææºéªæèè°å械å¸è¹ææ³æ³»è°¢å±èªè¯éæ¬£è¾æ°å¿»å¿ä¿¡è¡
æè
¥ç©æºå
´ååå½¢é¢è¡éå¹¸ææ§å§å
å¶è¸åæ±¹éçä¼ä¿®ç¾æ½å
éç§è¢ç»£å¢æéèåé¡»å¾è®¸èé
åæåºçæ¤çµ®å©¿ç»ªç»è½©å§å®£æ¬æç"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿è£è£è£è£è£è£è£è£è£è£è£è£è£è£è£è£",4,"è£ è£¡è£¦è£§è£©",6,"裲裵裶裷裺裻製裿è¤è¤è¤",5],["d180","è¤è¤",4,"è¤è¤",4,"è¤",4,"褢褣褤褦褧褨褩褬è¤è¤®è¤¯è¤±è¤²è¤³è¤µè¤·éç£ç©ç»é´èå¦ç©´éªè¡åç循æ¬è¯¢å¯»é©¯å·¡æ®æ±è®è®¯éè¿
忼鏦é¸å丫è½çèå´è¡æ¶¯é
åäºè®¶çå½éçæ·¹ç严ç è岩延è¨é¢éçæ²¿å¥æ©ç¼è¡æ¼è³å °çåç éå彦ç°å®´è°éªæ®å¤®é¸¯ç§§æ¨æ¬ä½¯ç¡ç¾æ´é³æ°§ä»°çå
»æ ·æ¼¾éè
°å¦ç¶"],["d240","褸",8,"è¥è¥è¥
",24,"è¥ ",5,"襧",19,"襼"],["d280","襽襾è¦è¦è¦è¦
è¦",26,"æå°§é¥çªè°£å§å¬èè¯è¦è椰åè¶ç·éå¶ä¹é¡µæä¸å¶æ³è
夿¶²ä¸å£¹å»æé±ä¾ä¼è¡£é¢å¤·é移仪è°çæ²å®å§¨å½æ¤
èåå·²ä¹ç£ä»¥èºææé屹亿役èé¸èç«äº¦è£ææ¯
å¿ä¹ç溢诣议è°è¯å¼ç¿¼ç¿ç»èµè«å æ®·é³é´å§»åé¶æ·«å¯
饮尹å¼é"],["d340","覢",30,"è§è§è§è§è§è§è§è§è§è§è§è§ 觡觢觤觧觨觩觪觬è§è§®è§°è§±è§²è§´",6],["d380","è§»",4,"è¨",5,"è¨",21,"å°è±æ¨±å©´é¹°åºç¼¨è¹è¤è¥è§èè¿èµ¢çå½±é¢ç¡¬æ 忥佣èç庸éè¸è¹åæ³³æ¶æ°¸æ¿åç¨å¹½ä¼æ å¿§å°¤ç±é®éç¹æ²¹æ¸¸é
æåå³ä½é诱åå¹¼è¿æ·¤äºçæ¦èæèä½ä¿é¾é±¼ææ¸æ¸é
äºå¨±é¨ä¸å±¿ç¦¹å®è¯ç¾½çåèéåéå»å³ªå¾¡ææ¬²ç±è²èª"],["d440","è¨",31,"訿",8,"è©",21],["d480","è©",25,"詺",6,"æµ´å¯è£é¢è±«é©é¸³æ¸å¤å
å£è¢åæ´è¾åååç¿æºç¼è¿èæ¿æ¨é¢æ°çº¦è¶è·é¥å²³ç²¤ææ¦é
èäºé§åé¨å
è¿è´é
æéµååç ¸ææ ½åç¾å®°è½½åå¨å±ææèµèµèè¬éç³å¿è»æ£æ©æ¾¡è¤èºåªé çç¶ç¥è´£æ©å泽贼æå¢ææ¾èµ æå³æ¸£æè½§"],["d540","èª",7,"èª",7,"èª",46],["d580","è«",32,"é¡é¸ç¨æ
榨åä¹ç¸è¯ææå®
çªåºå¯¨ç»æ¯¡è©¹ç²æ²¾çæ©è¾å´å±è¸æ å æç«æ¹ç»½æ¨ç« å½°æ¼³å¼ ææ¶¨æä¸å¸è´¦ä»èç´éæææ¾æ²¼èµµç
§ç½©å
èå¬é®æå²è°è¾è
éèè¿æµçæççç §è»è´é侦æç¹è¯éæ¯ééµè¸æ£çå¾ç°äºææ´æ¯æ£æ¿"],["d640","諤",34,"è¬",27],["d680","謤謥謧",30,"帧çéè¯èææ¯å±èç¥è¢èæ±ä¹ç»èç´æ¤æ®æ§å¼ä¾åææ¢è¶¾åªæ¨çº¸å¿ææ·è³è´ç½®å¸å³å¶æºç§©ç¨è´¨ççæ»æ²»çªä¸ç
å¿ éè¡·ç»ç§è¿é仲ä¼èå¨å·æ´²è¯ç²¥è½´èå¸åç±å®æ¼éª¤ç æ ªèæ±çªè¯¸è¯é竹çç
®æç©å±ä¸»èæ±å©èè´®é¸ç"],["d740","è",31,"è§",4,"è",25],["d780","è®",24,"讬讱讻è¯è¯è¯ªè°è°ä½æ³¨ç¥é©»æçªæ½ä¸ç 转æ°èµç¯æ¡©åºè£
å¦æå£®ç¶æ¤é¥è¿½èµå ç¼è°åææåæ¡ç¢èé
åçç¼æµå
¹å¨èµå§¿æ»æ·åç´«ä»ç±½æ»åèªæ¸å鬿£è¸ªå®ç»¼æ»çºµé¹èµ°å¥æç§è¶³åæç¥è¯
é»ç»é»çºå´éæç½ªå°éµæ¨å·¦ä½æåä½å座"],["d840","è°¸",8,"è±è±è±è±
è±è±è±è±",7,"è±è±è±è±è±",5,"è±£",6,"豬",6,"豴豵豶豷豻",6,"è²è²è²è²"],["d880","è²è²è²",6,"è²è²è²è²",20,"äºä¸å
ä¸å»¿å
ä¸äºä¸é¬²å¬å©ä¸¨ç¦ºä¸¿åä¹å¤ç»å®æ°åè¤é¦æ¯ç¾é¼ä¸¶äºé¼ä¹ä¹©äºèåå¬åä»ååå£å¥å®é¥èµååµå¦å®å¾èµå¦å£ååååå³å¿åååå¡åè¯å½åååååç½äº»ä»ä»ä»ä»¨ä»¡ä»«ä»ä¼ä»³ä¼¢ä½¤ä»µä¼¥ä¼§ä¼ä¼«ä½ä½§æ¸ä½ä½"],["d940","è²®",62],["d980","è³",32,"ä½ä½ä¼²ä¼½ä½¶ä½´ä¾ä¾ä¾ä¾ä½¾ä½»ä¾ªä½¼ä¾¬ä¾ä¿¦ä¿¨ä¿ªä¿
ä¿ä¿£ä¿ä¿ä¿ä¿¸å©å俳å¬åå®å俾ååå¥å¨å¾ååååå¬å»å¥å§å©åºåååå¬å¦å®åå仿°½ä½ä½¥ä¿é¾ æ±ç±´å
®å·½é»é¦åå¤å¹åè¨åå«å¤å
äº å
亳衮袤亵èè£ç¦å¬´è 羸å«å±å½å¼"],["da40","è´",14,"è´ èµèµèµèµèµ¥èµ¨èµ©èµªèµ¬èµ®èµ¯èµ±èµ²èµ¸",8,"è¶è¶è¶è¶è¶è¶è¶",4,"è¶è¶è¶",9,"è¶ è¶¡"],["da80","趢趤",12,"趲趶趷趹趻趽è·è·è·è·
è·è·è·è·è·è·è·è·è·ååå¢å¥è® 讦讧讪讴讵讷è¯è¯è¯è¯è¯è¯è¯è¯è¯è¯è¯è¯è¯è¯ 诤诨诩诮诰诳诶诹诼诿è°è°è°è°è°è°è°è°è°è°è°è°è°è°è°è°è° 谡谥谧谪谫谮谯谲谳谵谶å©åºéé¢é¡é±éªé½é¼ééééé§é¬é²é´éééé°ééééé¬é¡é´é³é¶éº"],["db40","è·è·è·è·è· 跡跢跥跦跧跩è·è·®è·°è·±è·²è·´è·¶è·¼è·¾",6,"è¸è¸è¸è¸è¸è¸è¸è¸è¸è¸è¸",7,"è¸ è¸¡è¸¤",4,"踫è¸è¸°è¸²è¸³è¸´è¸¶è¸·è¸¸è¸»è¸¼è¸¾"],["db80","踿è¹è¹
è¹è¹",4,"è¹",5,"è¹",11,"蹧蹨蹪蹫蹮蹱é¸é°éé
é¾ééééé¦é¢éééé«é¯é¾éé¢éé£é±é¯é¹é
é
åå¥å¢å¬åå¾å¿ååå°åç®çå»´åµå¼é¬¯å¶å¼çå·¯åå©å¡å¡¾å¢¼å£
å£å©å¬åªå³å¹å®å¯åå»åå©å
å«åå¼å»å¨åå¶å³åå¤åå²åå§å´åå åååååå¸å´å¯å¸å¤å"],["dc40","蹳蹵蹷",4,"蹽蹾èºèºèºèºèºèº",6,"èºèºèºèº",6,"èºèº",11,"èºèº®èº°èº±èº³",6,"躻",7],["dc80","è»",10,"è»",21,"å å å½åå å å å¡å 塥塬å¢å¢å¢å¢é¦¨é¼æ¿è¹è½è¿èèè¨èèèèèè«è¸è¾è°èèè£èè·è®èèèè©è´è¡èªèèèè¤è¡èè·è¤èèèè´èèèè»èèèèèèè èèèèèèèè¼è´è±èèè¯èèèèèèè èèºè³è¦è¥"],["dd40","軥",62],["dd80","輤",32,"è¨èè©è¬èªèè®è°è¸è³è´è èªèèè
è¼è¶è©è½è¸è»èèè¨èºè¼èèè¥èå èèèè½èèè¸èèèèèèè¸è¹èªè
èè¦è°è¡èèèèè³èèèºèè¸è¼èè©è¶èèè±èèèèè¦è½èèè¿èºè è¡è¹è´èè¥è£èçè¸è°è¹èèº"],["de40","è½
",32,"轪è¾è¾è¾è¾è¾ 辡辢辤辥辦辧辪辬è¾è¾®è¾¯è¾²è¾³è¾´è¾µè¾·è¾¸è¾ºè¾»è¾¼è¾¿è¿è¿è¿"],["de80","è¿",4,"è¿è¿è¿è¿è¿è¿ 迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿éééééééèè»è¿è¼èèè¨è¤èèºç¢èè²è»è¤è¨èèè¹è®èè
è¹è·è°èèèè¿è§è
è©èè¼å»¾å¼å¤¼å¥è·å¥å¥å¥åå°¢å°¥å°¬å°´ææªææ»ææææ®æ¢æ¶æ¹ææææ¶æ±æºææ´ææ¬ææ©æ®æ¼æ²æ¸æ æ¿ææææææ¾æ
ææææ ææ¦æ¡ææææ"],["df40","ééé£é¤é¥é§",5,"é°",4,"é·é¹éºé½é¿ééé
éé",4,"ééééééé",5,"é¤é¦é§é©éªé«é¬é¯",4,"é¶",6,"é¾é"],["df80","éé
ééééé",4,"ééééééééé é¤é¥é§é¨é©é«éé²é·é¼é½é¿éæºæ·æ¸ææºææææ¤æ¢ææ¥æ®å¼å¿çå¼åå±å½å©å¨å»åååååååååå¡ååå£å²ååå·å±å¤åååå¶å¦ååååå´åå§å¦ååå²å£åå»å¿ååååå©åªå¤ååååå§å å½åå³å¢å£ååå§åªå§ååµååååå¿åå¼"],["e040","éééééééééééééééééé é£é¤é¥é©éªé¬é®é°é±é²é³éµé¶é·é¹éºé»é¼é¿éééé
",19,"ééé"],["e080","ééé é¡é¤",10,"é°é²",6,"éº",8,"é
å·ååµå¶å·å³å°ååååå±å¹åååå¾ååå»åå½å¾åååªå·åååå«å¬åå¦ååå¯å¥å²å³ååå¨åµå¤è¾ååååå¤å£å¾åå§ååå¹åå¬åå¢åååååå¤å±å«å»å¼å
åå¯åååå¡åµå«å¹å¿ååååå¸å¸å¸å¸å¸±å¸»å¸¼"],["e140","é
é
é
é
é
é
é
é
é
é
é
é
é
é
é
¦é
§é
¨é
«é
é
³é
ºé
Ȏ
¼é",4,"éééééé",6,"é",5,"é¤",5,"é«é¬é°é±é²é³é¶é·é¸é¹é»"],["e180","é¼",10,"éééé",9,"é",8,"帷å¹å¹å¹å¹å¹¡å²å±ºå²å²å²å²å²å²å²å²å²å²µå²¢å²½å²¬å²«å²±å²£å³å²·å³å³å³¤å³å³¥å´å´å´§å´¦å´®å´¤å´å´å´åµå´¾å´´å´½åµ¬åµåµ¯åµåµ«åµåµåµ©åµ´å¶å¶å¶è±³å¶·å·
彳彷å¾å¾å¾å¾å¾å¾å¾å¾¨å¾å¾µå¾¼è¡¢å½¡çç°ç´ç·ç¸çççççç¨ç¯ç©ç²ç´ç·çç³ççº"],["e240","é¦",62],["e280","é¥",32,"ç»ççç¡ççççç¢ç¹ç¥ç¬ç¸ç±çççç ç¬ç¯ç¾è夥飧夤å¤é¥£é¥§",5,"饴饷饽é¦é¦é¦é¦é¦é¦é¦é¦é¦é¦åºåºåºåºåº¥åº 庹庵庾庳èµå»å»å»å»¨å»ªèºå¿å¿å¿å¿æå¿®æå¿¡å¿¤å¿¾æ
æå¿ªå¿å¿¸ææµæ¦ææææ©æ«ææ¿æ¡æ¸æ¹æ»æºæ"],["e340","é",45,"éµ",16],["e380","é",7,"é",24,"æªæ½æææææææææ¬æ»æ±æææææ´æ æ¦ææ£æ´æææ«æ
æ
µæ¬ææ§æ·ææµå¿é³é©é«é±é³éµé¶é¼é¾éééééééééééééééä¸¬ç¿ææ°µæ±æ±æ±æ²£æ²
æ²æ²æ²æ±¨æ±©æ±´æ±¶æ²æ²©æ³æ³æ²æ³·æ³¸æ³±æ³æ²²æ³ æ³æ³ºæ³«æ³®æ²±æ³æ³¯æ³¾"],["e440","é¨",5,"é¯",24,"é",31],["e480","é©",32,"æ´¹æ´§æ´æµæµæ´æ´æ´æ´æ´«æµæ´®æ´µæ´æµæµæµæ´³æ¶æµ¯æ¶æ¶ æµæ¶æ¶æµæµ æµ¼æµ£æ¸æ·æ·
æ·æ¸æ¶¿æ· æ¸æ·¦æ·æ·æ¸æ¶«æ¸æ¶®æ¸«æ¹®æ¹æ¹«æº²æ¹æºæ¹æ¹æ¸²æ¸¥æ¹æ»æº±æºæ» æ¼æ»¢æº¥æº§æº½æº»æº·æ»æº´æ»æºæ»æºæ½¢æ½æ½æ¼¤æ¼æ»¹æ¼¯æ¼¶æ½æ½´æ¼ªæ¼æ¼©æ¾æ¾æ¾æ½¸æ½²æ½¼æ½ºæ¿"],["e540","é",51,"é¿",10],["e580","é",31,"髿¿æ¾§æ¾¹æ¾¶æ¿æ¿¡æ¿®æ¿æ¿ 濯çç£çç¹çµççå®å®å®å®å®¥å®¸ç¯éªæ´å¯¤å¯®è¤°å¯°è¹è¬è¾¶è¿è¿è¿¥è¿®è¿¤è¿©è¿¦è¿³è¿¨é
ééé¦éééé¡éµé¶éé¯ééééé¨éé¢éæ¹é´é½ééééå½å½å½å½å°»å«å±å±å±å±£å±¦ç¾¼å¼ªå¼©å¼è´å¼¼é¬»å±®å¦å¦å¦å¦©å¦ªå¦£"],["e640","é¬",34,"é",27],["e680","é¬",29,"éééå¦å§å¦«å¦å¦¤å§å¦²å¦¯å§å¦¾å¨
å¨å§å¨å§£å§å§¹å¨å¨å¨²å¨´å¨å¨£å¨å©å©§å©å©å¨¼å©¢å©µè¬åªªåªå©·å©ºåª¾å««åª²å«å«åª¸å« 嫣嫱å«å«¦å«å«å¬å¬å¬å¬²å¬·åå°å°åå¥å³ååå¢é©µé©·é©¸é©ºé©¿é©½éªéªéª
éªéªéªéªéªéªéªéªéªéªéªéª 骢骣骥骧çºçº¡çº£çº¥çº¨çº©"],["e740","é",7,"é",54],["e780","é",32,"çºçº°çº¾ç»ç»ç»ç»ç»ç»ç»ç»ç»ç»ç» 绡绨绫绮绯绱绲ç¼ç»¶ç»ºç»»ç»¾ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼ç¼¡",6,"缪缫缬ç¼ç¼¯",4,"缵幺ç¿å·ç¾éççç®ç¢ççççç·ç³çççç¥ç顼çç©ç§ççºç²ççªçç¦ç¥ç¨ç°ç®ç¬"],["e840","é¯",14,"é¿",43,"é¬éé®é¯"],["e880","é°",20,"ééééééééé¦é»éé çççççççç·çç¾çççççççç¨ç©çç§ççºéªé«é¬æææææ©æ¥ææªæ³ææ§æµæ¨ææææ·æ¼æ°æ ææ æ©æ°æ ææµææ³ææ ææ¸æ¢æ ææ½æ ²æ ³æ¡ æ¡¡æ¡æ¡¢æ¡æ¡¤æ¢æ æ¡æ¡¦æ¡æ¡§æ¡æ ¾æ¡æ¡æ ©æ¢µæ¢æ¡´æ¡·æ¢æ¡«æ£æ¥®æ£¼æ¤æ¤ 棹"],["e940","é§é³é½éééééé é®é´éµé·",7,"é",42],["e980","é«",32,"æ¤¤æ£°æ¤æ¤æ¥æ££æ¤æ¥±æ¤¹æ¥ æ¥æ¥æ¦æ¥«æ¦æ¦æ¥¸æ¤´æ§æ¦æ¦æ§æ¦æ¥¦æ¥£æ¥¹æ¦æ¦§æ¦»æ¦«æ¦æ§æ¦±æ§æ§æ§æ¦æ§ æ¦æ§¿æ¨¯æ§æ¨æ¨æ©¥æ§²æ©æ¨¾æª æ©æ©æ¨µæªæ©¹æ¨½æ¨¨æ©æ©¼æªæªæª©æªæª«ç·çæ®æ®æ®æ®æ®æ®æ®æ®æ®æ®¡æ®ªè½«è½è½±è½²è½³è½µè½¶è½¸è½·è½¹è½ºè½¼è½¾è¾è¾è¾è¾è¾"],["ea40","é",27,"é¬é¿éééééé é£",6,"é«é¬éé¯é°é·é¸é¹éºé¾éééééééééé"],["ea80","ééééééé é£é¥é¦é«é",4,"é³é¸",12,"éééè¾è¾è¾è¾è¾è»æææææ¢æ¡æ¥æ¤æ¬è§ç¯ç´ç¿çççæ´æ®æ¯æ°æææ²æææç
æ·ææ´æ±æ¶æµèææææææ¡ææ·æææ§ææ¾æææ¦æ©è´²è´³è´¶è´»è´½èµèµ
èµèµèµèµèµèµèµè§è§è§è§è§è§è§è§ç®ççç¦ç¯ç¾ç¿çççççææ²æ°"],["eb40","éééééééééé",9,"é¨",7,"é±é²é´éµé·é¸éºé»é¿éééééééééé",9,"é¡",6,"é«"],["eb80","é¬éé®é°é±é²é´éµé¸éºé»é¼é½é¿ééé
ééééééééé",4,"ééé æ¿æè毪毳毽毵毹æ°
æ°æ°æ°æ°æ°æ°æ°æ°¡æ°©æ°¤æ°ªæ°²æµææ«çççç°è¢åèèèè¼æè½è±è«èè´è·è§è¨è©èªèèèèèèæèè«è±è´èèèè²è¼æèè±è¶èè¬èè²è
è
è
è
´è
è
è
±è
è
©è
¼è
½è
è
§å¡åªµèèèæ»è£èªèæ¦èè»"],["ec40","é¡",8,"é«é¬é®é¯é±é³",4,"éºé»é¼é½é¿",18,"ééééééééé£é¤é¦é§é¨éª",7],["ec80","é²éµé·",4,"é½",7,"é",4,"ééééééééé",4,"èè¦æ¬¤æ¬·æ¬¹æææé£é£é£é£é£é£æ®³å½æ¯è§³æé½ææ¼æææææææççççç»çç·ç«ç±ç¨ççççç¯ç±ç
³ç
ç
¨ç
ç
²ç
ç
¸ç
ºçç³çµç¨ç ç çç§ç¹çç¨ç¬çç
¦ç¹æ¾æ½æææç¤»ç¥ç¥ç¥ç¥ç¥ç¥ç¥ç¥¢ç¥ç¥ 祯祧祺ç¦
ç¦ç¦ç¦§ç¦³å¿å¿"],["ed40","ééé¡é¢é¤",6,"é¬é®é°é±é³éµ",46],["ed80","é¤é¥é¨é®",4,"é´é·",23,"æ¼æææ§æææ£æ«æææ
æ©ææææèè¿æ²æ³¶æ·¼ç¶ç¸ç ç ç ç ç æ«ç ç ç ç ¹ç ºç »ç ç ¼ç ¥ç ¬ç £ç ©ç¡ç¡ç¡ç¡ç ¦ç¡ç¡ç¡ç¡ªç¢ç¢ç¢ç¢ç¢ç¢¡ç¢£ç¢²ç¢¹ç¢¥ç£ç£ç£ç£¬ç£²ç¤
磴ç¤ç¤¤ç¤ç¤´é¾é»¹é»»é»¼ç±ççç¹çççç¢ççç¦çµç¸çççççç¨"],["ee40","é ",62],["ee80","é¡",32,"ç¢ç¥ç¿çç½ççççç ç°çµç½çºçççççç²ç¹çç½ç½¡ç½è©ç½¨ç½´ç½±ç½¹ç¾ç½¾çç¥è ²é
ééééééééééééééé£é¤é«éªéé¬é¯é°é²é´é¶",4,"é¼é½é¿éé",6,"éééééééééééé é¢é¤é¥é§é¨éª"],["ef40","顯",5,"é¢é¢é¢é¢é¢é¢£é¢¨",37,"é£é£é£é£é£é£é£é£é£ ",4],["ef80","飥飦飩",30,"é©é«é®é¯é³é´éµé·é¹é¼é½é¿éééééééééé",4,"éééééé¢éªé«é©é¬é±é²é´é¶é·é¸é¼é¾é¿ééµéé
ééééééééééééééééé¡é¢é¤",8,"é¯é±é²é³éºç§ç¬éç§ç§ç§£ç§«ç¨åµç¨ç¨ç¨ç¨"],["f040","é¤",4,"é¤é¤é¤",28,"餯",26],["f080","é¥",9,"é¥",12,"饤饦饳饸饹饻饾é¦é¦é¦ç¨¹ç¨·ç©é»é¦¥ç©°ççççç¤çç ç¬é¸ 鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹£é¹¦",6,"é¹±é¹é¹³çççç çç¬ç£ç³ç´ç¸çç±ç°ççççç£ç¨ç¦ç¤ç«ç§çç±ç¼ç¿ççç
çççç¥ççç"],["f140","é¦é¦é¦",10,"馦馧馩",47],["f180","é§",32,"çç¼ç¢ç ççç°ç¿çµçç¾ç³çççççç«ç¯ç¿ç«¦ç©¸ç©¹çªçªçªçªçª¦çª 窬窨çªçª³è¡¤è¡©è¡²è¡½è¡¿è¢è¢¢è£è¢·è¢¼è£è£¢è£è££è£¥è£±è¤è£¼è£¨è£¾è£°è¤¡è¤è¤è¤è¤è¤´è¤«è¤¶è¥è¥¦è¥»çè¥ç²ç´çèèèèè è¢è¥è¦è§è©è¨è±èèµèèèèè©è±è¦é¡¸é¢é¢"],["f240","駺",62],["f280","騹",32,"é¢é¢é¢é¢é¢é¢é¢é¢é¢é¢¡é¢¢é¢¥é¢¦èèè¬è®è¿èºè¼è»è¨èèè¬èè§è£èªèè©è¶èèµèè°èºè±è¯èèè´è©è±è²èè³èèèè´èèèèèè¸èèèèè£è»èè¥è®èè¾èè´è±è©è·è¿èè¢è½è¾è»è è°èè®èèè£è¼è¤èè¥èè¯è¨è"],["f340","é©",17,"驲éªéªéªéªéªéªéªéª¦éª©",6,"骲骳骴骵骹骻骽骾骿é«é«é«",4,"é«é«é«é«é«é«é«é«é«é«é«é«é«"],["f380","é«é«é« 髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"é¬é¬
é¬èèè
èèèè«è¥è¬èµè³èèè½èèèèèªè è®è è è¾è è è ¡è ¹è ¼ç¼¶ç½ç½ç½
è竺竽ç¬ç¬ç¬ç¬ç¬ç¬«ç¬ç笸笪ç¬ç¬®ç¬±ç¬ 笥笤笳笾ç¬ççç
çµççç ç®ç»ç¢ç²ç±ç®ç®¦ç®§ç®¸ç®¬ç®ç®¨ç®
箪ç®ç®¢ç®«ç®´ç¯ç¯ç¯ç¯ç¯ç¯¥ç¯¦ç¯ªç°ç¯¾ç¯¼ç°ç°ç°"],["f440","é¬é¬",5,"é¬é¬é¬é¬",10,"é¬ é¬¡é¬¢é¬¤",10,"鬰鬱鬳",7,"鬽鬾鬿éééééééééé",5],["f480","é",32,"ç°ç°ªç°¦ç°¸ç±ç±è¾èèèè¬è¡è¡è¢è£èè¯è¨è«è¸è»è³è´è¾èèèèèèè¨è¡¾è¢
è¢è£è£è¥ç¾ç¾ç¾§ç¾¯ç¾°ç¾²ç±¼æç²ç²ç²ç²ç²¢ç²²ç²¼ç²½ç³ç³ç³ç³ç³ç³
ç³ç³¨è®æ¨ç¾¿ç¿ç¿ç¿¥ç¿¡ç¿¦ç¿©ç¿®ç¿³ç³¸çµ·ç¶¦ç¶®ç¹çºéº¸éº´èµ³è¶è¶è¶è¶±èµ§èµè±è±é
é
é
é
é
¤"],["f540","é¼",62],["f580","é®»",32,"é
¢é
¡é
°é
©é
¯é
½é
¾é
²é
´é
¹éé
éééé¢é£éªéé®é¯éµé´éºè±é¹¾è¶¸è·«è¸
è¹è¹©è¶µè¶¿è¶¼è¶ºè·è·è·è·è·è·è·è·è·è·¬è··è·¸è·£è·¹è·»è·¤è¸è·½è¸è¸è¸è¸¬è¸®è¸£è¸¯è¸ºè¹è¸¹è¸µè¸½è¸±è¹è¹è¹è¹è¹è¹è¹°è¹¶è¹¼è¹¯è¹´èº
èºèºèºèºèºè±¸è²è²è²
è²è²æè§è§è§è§"],["f640","é¯",62],["f680","é°",32,"觥觫觯訾謦éé©é³é¯ééééééªéé°é¾é¾é¾é¾
",5,"é¾é»¾é¼é¼é¹é¼é½ééç¿é éé®éé¾éªééé¾é«é±¿é²é²
é²é²é²ç¨£é²é²é²é²é²é²é²é²é²é²",5,"é²¥",4,"鲫é²é²®é²°",7,"鲺鲻鲼鲽é³é³
é³é³é³é³"],["f740","é°¼",62],["f780","鱻鱽鱾é²é²é²é²é²é²é²é²é²é²é²é²é²é²ªé²¬é²¯é²¹é²¾",4,"é³é³é³é³é³é³é³ 鳡é³",4,"é³é³é³é³é³é³é³é³é³é³¢é¼é
éééé¯é«é£é²é´éª±éª°éª·é¹éª¶éªºéª¼é«é«é«
é«é«é«é«é
éééééé飨é¤é¤®é¥é¥é«é«¡é«¦é«¯é««é«»é«é«¹é¬é¬é¬é¬é¬£éº½éº¾ç¸»éºéºéºéºéºééºéºé»é»é»é» é»é»¢é»©é»§é»¥é»ªé»¯é¼¢é¼¬é¼¯é¼¹é¼·é¼½é¼¾é½"],["f840","é³£",62],["f880","é´¢",32],["f940","éµ",62],["f980","é¶",32],["fa40","é¶£",62],["fa80","é·¢",32],["fb40","é¸",27,"鸤鸧鸮鸰鸴鸻鸼é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹é¹ 鹡鹢鹥鹮鹯鹲鹴",9,"éº"],["fb80","éºéºéºéº
éºéºéºéº",5,"éº",8,"éºéº ",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"é»
é»é»é»é»é»é»é»é»é»é»é»é»é»é»é»é»¡é»£é»¤é»¦é»¨é»«é»¬é»é»®é»°",8,"黺黽黿",6],["fc80","é¼",4,"é¼é¼é¼é¼é¼é¼é¼é¼é¼",5,"鼡鼣",8,"é¼é¼®é¼°é¼±"],["fd40","é¼²",4,"鼸鼺鼼鼿",4,"é½
",10,"é½",38],["fd80","é½¹",5,"é¾é¾é¾",11,"é¾é¾é¾é¾¡",4,"郎凉ï¦ï§§ï§±"],["fe40","ï¨ï¨ï¨ï¨ï¨ï¨ï¨ï¨ï¨ï¨ 﨡﨣﨤﨧﨨﨩"]]
vendor: 10,232 bytes, lines 7064-7414
7064 7065 7066/***/ }), 7067/* 54 */ 7068/***/ (function(module, exports, __webpack_require__) { 7069 7070// fallback for non-array-like ES3 and non-enumerable old V8 strings 7071var cof = __webpack_require__(55); 7072// eslint-disable-next-line no-prototype-builtins 7073module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { 7074 return cof(it) == 'String' ? it.split('') : Object(it); 7075}; 7076 7077 7078/***/ }), 7079/* 55 */ 7080/***/ (function(module, exports) { 7081 7082var toString = {}.toString; 7083 7084module.exports = function (it) { 7085 return toString.call(it).slice(8, -1); 7086}; 7087 7088 7089/***/ }), 7090/* 56 */ 7091/***/ (function(module, exports) { 7092 7093// 7.2.1 RequireObjectCoercible(argument) 7094module.exports = function (it) { 7095 if (it == undefined) throw TypeError("Can't call method on " + it); 7096 return it; 7097}; 7098 7099 7100/***/ }), 7101/* 57 */ 7102/***/ (function(module, exports, __webpack_require__) { 7103 7104var pIE = __webpack_require__(35); 7105var createDesc = __webpack_require__(27); 7106var toIObject = __webpack_require__(17); 7107var toPrimitive = __webpack_require__(58); 7108var has = __webpack_require__(18); 7109var IE8_DOM_DEFINE = __webpack_require__(95); 7110var gOPD = Object.getOwnPropertyDescriptor; 7111 7112exports.f = __webpack_require__(5) ? gOPD : function getOwnPropertyDescriptor(O, P) { 7113 O = toIObject(O); 7114 P = toPrimitive(P, true); 7115 if (IE8_DOM_DEFINE) try { 7116 return gOPD(O, P); 7117 } catch (e) { /* empty */ } 7118 if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); 7119}; 7120 7121 7122/***/ }), 7123/* 58 */ 7124/***/ (function(module, exports, __webpack_require__) { 7125 7126// 7.1.1 ToPrimitive(input [, PreferredType]) 7127var isObject = __webpack_require__(9); 7128// instead of the ES6 spec version, we didn't implement @@toPrimitive case 7129// and the second argument - flag - preferred type is a string 7130module.exports = function (it, S) { 7131 if (!isObject(it)) return it; 7132 var fn, val; 7133 if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; 7134 if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; 7135 if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; 7136 throw TypeError("Can't convert object to primitive value"); 7137}; 7138 7139 7140/***/ }), 7141/* 59 */ 7142/***/ (function(module, exports, __webpack_require__) { 7143 7144// most Object methods by ES6 should accept primitives 7145var $export = __webpack_require__(3); 7146var core = __webpack_require__(2); 7147var fails = __webpack_require__(19); 7148module.exports = function (KEY, exec) { 7149 var fn = (core.Object || {})[KEY] || Object[KEY]; 7150 var exp = {}; 7151 exp[KEY] = exec(fn); 7152 $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); 7153}; 7154 7155 7156/***/ }), 7157/* 60 */ 7158/***/ (function(module, exports, __webpack_require__) { 7159 7160module.exports = { "default": __webpack_require__(200), __esModule: true }; 7161 7162/***/ }), 7163/* 61 */ 7164/***/ (function(module, exports, __webpack_require__) { 7165 7166"use strict"; 7167 7168var LIBRARY = __webpack_require__(62); 7169var $export = __webpack_require__(3); 7170var redefine = __webpack_require__(99); 7171var hide = __webpack_require__(13); 7172var has = __webpack_require__(18); 7173var Iterators = __webpack_require__(23); 7174var $iterCreate = __webpack_require__(203); 7175var setToStringTag = __webpack_require__(39); 7176var getPrototypeOf = __webpack_require__(206); 7177var ITERATOR = __webpack_require__(4)('iterator'); 7178var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` 7179var FF_ITERATOR = '@@iterator'; 7180var KEYS = 'keys'; 7181var VALUES = 'values'; 7182 7183var returnThis = function () { return this; }; 7184 7185module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { 7186 $iterCreate(Constructor, NAME, next); 7187 var getMethod = function (kind) { 7188 if (!BUGGY && kind in proto) return proto[kind]; 7189 switch (kind) { 7190 case KEYS: return function keys() { return new Constructor(this, kind); }; 7191 case VALUES: return function values() { return new Constructor(this, kind); }; 7192 } return function entries() { return new Constructor(this, kind); }; 7193 }; 7194 var TAG = NAME + ' Iterator'; 7195 var DEF_VALUES = DEFAULT == VALUES; 7196 var VALUES_BUG = false; 7197 var proto = Base.prototype; 7198 var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; 7199 var $default = (!BUGGY && $native) || getMethod(DEFAULT); 7200 var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; 7201 var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; 7202 var methods, key, IteratorPrototype; 7203 // Fix native 7204 if ($anyNative) { 7205 IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); 7206 if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { 7207 // Set @@toStringTag to native iterators 7208 setToStringTag(IteratorPrototype, TAG, true); 7209 // fix for some old engines 7210 if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis); 7211 } 7212 } 7213 // fix Array#{values, @@iterator}.name in V8 / FF 7214 if (DEF_VALUES && $native && $native.name !== VALUES) { 7215 VALUES_BUG = true; 7216 $default = function values() { return $native.call(this); }; 7217 } 7218 // Define iterator 7219 if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { 7220 hide(proto, ITERATOR, $default); 7221 } 7222 // Plug for library 7223 Iterators[NAME] = $default; 7224 Iterators[TAG] = returnThis; 7225 if (DEFAULT) { 7226 methods = { 7227 values: DEF_VALUES ? $default : getMethod(VALUES), 7228 keys: IS_SET ? $default : getMethod(KEYS), 7229 entries: $entries 7230 }; 7231 if (FORCED) for (key in methods) { 7232 if (!(key in proto)) redefine(proto, key, methods[key]); 7233 } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); 7234 } 7235 return methods; 7236}; 7237 7238 7239/***/ }), 7240/* 62 */ 7241/***/ (function(module, exports) { 7242 7243module.exports = true; 7244 7245 7246/***/ }), 7247/* 63 */ 7248/***/ (function(module, exports) { 7249 7250// 7.1.4 ToInteger 7251var ceil = Math.ceil; 7252var floor = Math.floor; 7253module.exports = function (it) { 7254 return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); 7255}; 7256 7257 7258/***/ }), 7259/* 64 */ 7260/***/ (function(module, exports, __webpack_require__) { 7261 7262var shared = __webpack_require__(65)('keys'); 7263var uid = __webpack_require__(38); 7264module.exports = function (key) { 7265 return shared[key] || (shared[key] = uid(key)); 7266}; 7267 7268 7269/***/ }), 7270/* 65 */ 7271/***/ (function(module, exports, __webpack_require__) { 7272 7273var global = __webpack_require__(10); 7274var SHARED = '__core-js_shared__'; 7275var store = global[SHARED] || (global[SHARED] = {}); 7276module.exports = function (key) { 7277 return store[key] || (store[key] = {}); 7278}; 7279 7280 7281/***/ }), 7282/* 66 */ 7283/***/ (function(module, exports) { 7284 7285// IE 8- don't enum bug keys 7286module.exports = ( 7287 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' 7288).split(','); 7289 7290 7291/***/ }), 7292/* 67 */ 7293/***/ (function(module, exports, __webpack_require__) { 7294 7295var classof = __webpack_require__(68); 7296var ITERATOR = __webpack_require__(4)('iterator'); 7297var Iterators = __webpack_require__(23); 7298module.exports = __webpack_require__(2).getIteratorMethod = function (it) { 7299 if (it != undefined) return it[ITERATOR] 7300 || it['@@iterator'] 7301 || Iterators[classof(it)]; 7302}; 7303 7304 7305/***/ }), 7306/* 68 */ 7307/***/ (function(module, exports, __webpack_require__) { 7308 7309// getting tag from 19.1.3.6 Object.prototype.toString() 7310var cof = __webpack_require__(55); 7311var TAG = __webpack_require__(4)('toStringTag'); 7312// ES3 wrong here 7313var ARG = cof(function () { return arguments; }()) == 'Arguments'; 7314 7315// fallback for IE11 Script Access Denied error 7316var tryGet = function (it, key) { 7317 try { 7318 return it[key]; 7319 } catch (e) { /* empty */ } 7320}; 7321 7322module.exports = function (it) { 7323 var O, T, B; 7324 return it === undefined ? 'Undefined' : it === null ? 'Null' 7325 // @@toStringTag case 7326 : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T 7327 // builtinTag case 7328 : ARG ? cof(O) 7329 // ES3 arguments fallback 7330 : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; 7331}; 7332 7333 7334/***/ }), 7335/* 69 */ 7336/***/ (function(module, exports, __webpack_require__) { 7337 7338"use strict"; 7339 7340 7341exports.__esModule = true; 7342 7343var _iterator = __webpack_require__(103); 7344 7345var _iterator2 = _interopRequireDefault(_iterator); 7346 7347var _symbol = __webpack_require__(216); 7348 7349var _symbol2 = _interopRequireDefault(_symbol); 7350 7351var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; }; 7352 7353function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 7354 7355exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) { 7356 return typeof obj === "undefined" ? "undefined" : _typeof(obj); 7357} : function (obj) { 7358 return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); 7359}; 7360 7361/***/ }), 7362/* 70 */ 7363/***/ (function(module, exports, __webpack_require__) { 7364 7365exports.f = __webpack_require__(4); 7366 7367 7368/***/ }), 7369/* 71 */ 7370/***/ (function(module, exports, __webpack_require__) { 7371 7372var global = __webpack_require__(10); 7373var core = __webpack_require__(2); 7374var LIBRARY = __webpack_require__(62); 7375var wksExt = __webpack_require__(70); 7376var defineProperty = __webpack_require__(6).f; 7377module.exports = function (name) { 7378 var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); 7379 if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); 7380}; 7381 7382 7383/***/ }), 7384/* 72 */ 7385/***/ (function(module, exports) { 7386 7387exports.f = Object.getOwnPropertySymbols; 7388 7389 7390/***/ }), 7391/* 73 */ 7392/***/ (function(module, exports) { 7393 7394 7395 7396/***/ }), 7397/* 74 */ 7398/***/ (function(module, exports, __webpack_require__) { 7399 7400module.exports = { "default": __webpack_require__(223), __esModule: true }; 7401 7402/***/ }), 7403/* 75 */ 7404/***/ (function(module, exports, __webpack_require__) { 7405 7406var isObject = __webpack_require__(9); 7407module.exports = function (it, TYPE) { 7408 if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); 7409 return it; 7410}; 7411 7412 7413/***/ }), 7414/* 76 */
7415/***/ (function(module, exports) { 7416 7417var toString = {}.toString; 7418 7419module.exports = Array.isArray || function (arr) { 7420 return toString.call(arr) == '[object Array]'; 7421}; 7422 7423 7424/***/ }), 7425/* 77 */ 7426/***/ (function(module, exports, __webpack_require__) { 7427 7428"use strict"; 7429 7430 7431function TraversalTracker() { 7432 this.events = {}; 7433} 7434 7435TraversalTracker.prototype.startTracking = function (event, callback) { 7436 var callbacks = this.events[event] || (this.events[event] = []); 7437 7438 if (callbacks.indexOf(callback) < 0) { 7439 callbacks.push(callback); 7440 } 7441}; 7442 7443TraversalTracker.prototype.stopTracking = function (event, callback) { 7444 var callbacks = this.events[event]; 7445 7446 if (!callbacks) { 7447 return; 7448 } 7449 7450 var index = callbacks.indexOf(callback); 7451 if (index >= 0) { 7452 callbacks.splice(index, 1); 7453 } 7454}; 7455 7456TraversalTracker.prototype.emit = function (event) { 7457 var args = Array.prototype.slice.call(arguments, 1); 7458 var callbacks = this.events[event]; 7459 7460 if (!callbacks) { 7461 return; 7462 } 7463 7464 callbacks.forEach(function (callback) { 7465 callback.apply(this, args); 7466 }); 7467}; 7468 7469TraversalTracker.prototype.auto = function (event, callback, innerFunction) { 7470 this.startTracking(event, callback); 7471 innerFunction(); 7472 this.stopTracking(event, callback); 7473}; 7474 7475module.exports = TraversalTracker; 7476 7477 7478/***/ }), 7479/* 78 */ 7480/***/ (function(module, exports, __webpack_require__) { 7481 7482// Generated by CoffeeScript 1.7.1 7483(function() { 7484 var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, base64, characterClasses, classTrie, data, fs, pairTable, _ref, _ref1; 7485 7486 UnicodeTrie = __webpack_require__(43); 7487 7488 7489 7490 base64 = __webpack_require__(131); 7491 7492 _ref = __webpack_require__(132), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses; 7493 7494 _ref1 = __webpack_require__(133), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable; 7495 7496 data = base64.toByteArray("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"); 7497 7498 classTrie = new UnicodeTrie(data); 7499 7500 LineBreaker = (function() { 7501 var Break, mapClass, mapFirst; 7502 7503 function LineBreaker(string) { 7504 this.string = string; 7505 this.pos = 0; 7506 this.lastPos = 0; 7507 this.curClass = null; 7508 this.nextClass = null; 7509 } 7510 7511 LineBreaker.prototype.nextCodePoint = function() { 7512 var code, next; 7513 code = this.string.charCodeAt(this.pos++); 7514 next = this.string.charCodeAt(this.pos); 7515 if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) { 7516 this.pos++; 7517 return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000; 7518 } 7519 return code; 7520 }; 7521 7522 mapClass = function(c) { 7523 switch (c) { 7524 case AI: 7525 return AL; 7526 case SA: 7527 case SG: 7528 case XX: 7529 return AL; 7530 case CJ: 7531 return NS; 7532 default: 7533 return c; 7534 } 7535 }; 7536 7537 mapFirst = function(c) { 7538 switch (c) { 7539 case LF: 7540 case NL: 7541 return BK; 7542 case CB: 7543 return BA; 7544 case SP: 7545 return WJ; 7546 default: 7547 return c; 7548 } 7549 }; 7550 7551 LineBreaker.prototype.nextCharClass = function(first) { 7552 if (first == null) { 7553 first = false; 7554 } 7555 return mapClass(classTrie.get(this.nextCodePoint())); 7556 }; 7557 7558 Break = (function() { 7559 function Break(position, required) { 7560 this.position = position; 7561 this.required = required != null ? required : false; 7562 } 7563 7564 return Break; 7565 7566 })(); 7567 7568 LineBreaker.prototype.nextBreak = function() { 7569 var cur, lastClass, shouldBreak; 7570 if (this.curClass == null) { 7571 this.curClass = mapFirst(this.nextCharClass()); 7572 } 7573 while (this.pos < this.string.length) {
7574 this.lastPos = this.pos; 7575 lastClass = this.nextClass; 7576 this.nextClass = this.nextCharClass(); 7577 if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) { 7578 this.curClass = mapFirst(mapClass(this.nextClass)); 7579 return new Break(this.lastPos, true); 7580 } 7581 cur = (function() { 7582 switch (this.nextClass) { 7583 case SP: 7584 return this.curClass; 7585 case BK: 7586 case LF: 7587 case NL: 7588 return BK; 7589 case CR: 7590 return CR; 7591 case CB: 7592 return BA; 7593 } 7594 }).call(this); 7595 if (cur != null) { 7596 this.curClass = cur; 7597 if (this.nextClass === CB) { 7598 return new Break(this.lastPos); 7599 } 7600 continue; 7601 } 7602 shouldBreak = false; 7603 switch (pairTable[this.curClass][this.nextClass]) { 7604 case DI_BRK: 7605 shouldBreak = true; 7606 break; 7607 case IN_BRK: 7608 shouldBreak = lastClass === SP; 7609 break; 7610 case CI_BRK: 7611 shouldBreak = lastClass === SP; 7612 if (!shouldBreak) { 7613 continue; 7614 } 7615 break; 7616 case CP_BRK: 7617 if (lastClass !== SP) { 7618 continue; 7619 } 7620 } 7621 this.curClass = this.nextClass; 7622 if (shouldBreak) { 7623 return new Break(this.lastPos); 7624 } 7625 } 7626 if (this.pos >= this.string.length) { 7627 if (this.lastPos < this.string.length) { 7628 this.lastPos = this.string.length; 7629 return new Break(this.string.length); 7630 } else { 7631 return null; 7632 } 7633 } 7634 }; 7635 7636 return LineBreaker; 7637 7638 })(); 7639 7640 module.exports = LineBreaker; 7641 7642}).call(this); 7643 7644 7645/***/ }), 7646/* 79 */ 7647/***/ (function(module, exports) { 7648 7649var TINF_OK = 0; 7650var TINF_DATA_ERROR = -3; 7651 7652function Tree() { 7653 this.table = new Uint16Array(16); /* table of code length counts */ 7654 this.trans = new Uint16Array(288); /* code -> symbol translation table */ 7655} 7656 7657function Data(source, dest) { 7658 this.source = source; 7659 this.sourceIndex = 0; 7660 this.tag = 0; 7661 this.bitcount = 0; 7662 7663 this.dest = dest; 7664 this.destLen = 0; 7665 7666 this.ltree = new Tree(); /* dynamic length/symbol tree */ 7667 this.dtree = new Tree(); /* dynamic distance tree */ 7668} 7669 7670/* --------------------------------------------------- *
vendor: 7,339 bytes, lines 7671-7971
7671 * -- uninitialized global data (static structures) -- * 7672 * --------------------------------------------------- */ 7673 7674var sltree = new Tree(); 7675var sdtree = new Tree(); 7676 7677/* extra bits and base tables for length codes */ 7678var length_bits = new Uint8Array(30); 7679var length_base = new Uint16Array(30); 7680 7681/* extra bits and base tables for distance codes */ 7682var dist_bits = new Uint8Array(30); 7683var dist_base = new Uint16Array(30); 7684 7685/* special ordering of code length codes */ 7686var clcidx = new Uint8Array([ 7687 16, 17, 18, 0, 8, 7, 9, 6, 7688 10, 5, 11, 4, 12, 3, 13, 2, 7689 14, 1, 15 7690]); 7691 7692/* used by tinf_decode_trees, avoids allocations every call */ 7693var code_tree = new Tree(); 7694var lengths = new Uint8Array(288 + 32); 7695 7696/* ----------------------- * 7697 * -- utility functions -- * 7698 * ----------------------- */ 7699 7700/* build extra bits and base tables */ 7701function tinf_build_bits_base(bits, base, delta, first) { 7702 var i, sum; 7703 7704 /* build bits table */ 7705 for (i = 0; i < delta; ++i) bits[i] = 0; 7706 for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0; 7707 7708 /* build base table */ 7709 for (sum = first, i = 0; i < 30; ++i) { 7710 base[i] = sum; 7711 sum += 1 << bits[i]; 7712 } 7713} 7714 7715/* build the fixed huffman trees */ 7716function tinf_build_fixed_trees(lt, dt) { 7717 var i; 7718 7719 /* build fixed length tree */ 7720 for (i = 0; i < 7; ++i) lt.table[i] = 0; 7721 7722 lt.table[7] = 24; 7723 lt.table[8] = 152; 7724 lt.table[9] = 112; 7725 7726 for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i; 7727 for (i = 0; i < 144; ++i) lt.trans[24 + i] = i; 7728 for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i; 7729 for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i; 7730 7731 /* build fixed distance tree */ 7732 for (i = 0; i < 5; ++i) dt.table[i] = 0; 7733 7734 dt.table[5] = 32; 7735 7736 for (i = 0; i < 32; ++i) dt.trans[i] = i; 7737} 7738 7739/* given an array of code lengths, build a tree */ 7740var offs = new Uint16Array(16); 7741 7742function tinf_build_tree(t, lengths, off, num) { 7743 var i, sum; 7744 7745 /* clear code length count table */ 7746 for (i = 0; i < 16; ++i) t.table[i] = 0; 7747 7748 /* scan symbol lengths, and sum code length counts */ 7749 for (i = 0; i < num; ++i) t.table[lengths[off + i]]++; 7750 7751 t.table[0] = 0; 7752 7753 /* compute offset table for distribution sort */ 7754 for (sum = 0, i = 0; i < 16; ++i) { 7755 offs[i] = sum; 7756 sum += t.table[i]; 7757 } 7758 7759 /* create code->symbol translation table (symbols sorted by code) */ 7760 for (i = 0; i < num; ++i) { 7761 if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i; 7762 } 7763} 7764 7765/* ---------------------- * 7766 * -- decode functions -- * 7767 * ---------------------- */ 7768 7769/* get one bit from source stream */ 7770function tinf_getbit(d) { 7771 /* check if tag is empty */ 7772 if (!d.bitcount--) { 7773 /* load next tag */ 7774 d.tag = d.source[d.sourceIndex++]; 7775 d.bitcount = 7; 7776 } 7777 7778 /* shift bit out of tag */ 7779 var bit = d.tag & 1; 7780 d.tag >>>= 1; 7781 7782 return bit; 7783} 7784 7785/* read a num bit value from a stream and add base */ 7786function tinf_read_bits(d, num, base) { 7787 if (!num) 7788 return base; 7789 7790 while (d.bitcount < 24) { 7791 d.tag |= d.source[d.sourceIndex++] << d.bitcount; 7792 d.bitcount += 8; 7793 } 7794 7795 var val = d.tag & (0xffff >>> (16 - num)); 7796 d.tag >>>= num; 7797 d.bitcount -= num; 7798 return val + base; 7799} 7800 7801/* given a data stream and a tree, decode a symbol */ 7802function tinf_decode_symbol(d, t) { 7803 while (d.bitcount < 24) { 7804 d.tag |= d.source[d.sourceIndex++] << d.bitcount; 7805 d.bitcount += 8; 7806 } 7807 7808 var sum = 0, cur = 0, len = 0; 7809 var tag = d.tag; 7810 7811 /* get more bits while code value is above sum */ 7812 do { 7813 cur = 2 * cur + (tag & 1); 7814 tag >>>= 1; 7815 ++len; 7816 7817 sum += t.table[len]; 7818 cur -= t.table[len]; 7819 } while (cur >= 0); 7820 7821 d.tag = tag; 7822 d.bitcount -= len; 7823 7824 return t.trans[sum + cur]; 7825} 7826 7827/* given a data stream, decode dynamic trees from it */ 7828function tinf_decode_trees(d, lt, dt) { 7829 var hlit, hdist, hclen; 7830 var i, num, length; 7831 7832 /* get 5 bits HLIT (257-286) */ 7833 hlit = tinf_read_bits(d, 5, 257); 7834 7835 /* get 5 bits HDIST (1-32) */ 7836 hdist = tinf_read_bits(d, 5, 1); 7837 7838 /* get 4 bits HCLEN (4-19) */ 7839 hclen = tinf_read_bits(d, 4, 4); 7840 7841 for (i = 0; i < 19; ++i) lengths[i] = 0; 7842 7843 /* read code lengths for code length alphabet */ 7844 for (i = 0; i < hclen; ++i) { 7845 /* get 3 bits code length (0-7) */ 7846 var clen = tinf_read_bits(d, 3, 0); 7847 lengths[clcidx[i]] = clen; 7848 } 7849 7850 /* build code length tree */ 7851 tinf_build_tree(code_tree, lengths, 0, 19); 7852 7853 /* decode code lengths for the dynamic trees */ 7854 for (num = 0; num < hlit + hdist;) { 7855 var sym = tinf_decode_symbol(d, code_tree); 7856 7857 switch (sym) { 7858 case 16: 7859 /* copy previous code length 3-6 times (read 2 bits) */ 7860 var prev = lengths[num - 1]; 7861 for (length = tinf_read_bits(d, 2, 3); length; --length) { 7862 lengths[num++] = prev; 7863 } 7864 break; 7865 case 17: 7866 /* repeat code length 0 for 3-10 times (read 3 bits) */ 7867 for (length = tinf_read_bits(d, 3, 3); length; --length) { 7868 lengths[num++] = 0; 7869 } 7870 break; 7871 case 18: 7872 /* repeat code length 0 for 11-138 times (read 7 bits) */ 7873 for (length = tinf_read_bits(d, 7, 11); length; --length) { 7874 lengths[num++] = 0; 7875 } 7876 break; 7877 default: 7878 /* values 0-15 represent the actual code lengths */ 7879 lengths[num++] = sym; 7880 break; 7881 } 7882 } 7883 7884 /* build dynamic trees */ 7885 tinf_build_tree(lt, lengths, 0, hlit); 7886 tinf_build_tree(dt, lengths, hlit, hdist); 7887} 7888 7889/* ----------------------------- * 7890 * -- block inflate functions -- * 7891 * ----------------------------- */ 7892 7893/* given a stream and two trees, inflate a block of data */ 7894function tinf_inflate_block_data(d, lt, dt) { 7895 while (1) { 7896 var sym = tinf_decode_symbol(d, lt); 7897 7898 /* check for end of block */ 7899 if (sym === 256) { 7900 return TINF_OK; 7901 } 7902 7903 if (sym < 256) { 7904 d.dest[d.destLen++] = sym; 7905 } else { 7906 var length, dist, offs; 7907 var i; 7908 7909 sym -= 257; 7910 7911 /* possibly get more bits from length code */ 7912 length = tinf_read_bits(d, length_bits[sym], length_base[sym]); 7913 7914 dist = tinf_decode_symbol(d, dt); 7915 7916 /* possibly get more bits from distance code */ 7917 offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); 7918 7919 /* copy match */ 7920 for (i = offs; i < offs + length; ++i) { 7921 d.dest[d.destLen++] = d.dest[i]; 7922 } 7923 } 7924 } 7925} 7926 7927/* inflate an uncompressed block of data */ 7928function tinf_inflate_uncompressed_block(d) { 7929 var length, invlength; 7930 var i; 7931 7932 /* unread from bitbuffer */ 7933 while (d.bitcount > 8) { 7934 d.sourceIndex--; 7935 d.bitcount -= 8; 7936 } 7937 7938 /* get length */ 7939 length = d.source[d.sourceIndex + 1]; 7940 length = 256 * length + d.source[d.sourceIndex]; 7941 7942 /* get one's complement of length */ 7943 invlength = d.source[d.sourceIndex + 3]; 7944 invlength = 256 * invlength + d.source[d.sourceIndex + 2]; 7945 7946 /* check length */ 7947 if (length !== (~invlength & 0x0000ffff)) 7948 return TINF_DATA_ERROR; 7949 7950 d.sourceIndex += 4; 7951 7952 /* copy block */ 7953 for (i = length; i; --i) 7954 d.dest[d.destLen++] = d.source[d.sourceIndex++]; 7955 7956 /* make sure we start next block on a byte boundary */ 7957 d.bitcount = 0; 7958 7959 return TINF_OK; 7960} 7961 7962/* inflate stream from source to dest */ 7963function tinf_uncompress(source, dest) { 7964 var d = new Data(source, dest); 7965 var bfinal, btype, res; 7966 7967 do { 7968 /* read final block flag */ 7969 bfinal = tinf_getbit(d); 7970 7971 /* read block type (2 bits) */
7972 btype = tinf_read_bits(d, 2, 0); 7973 7974 /* decompress block */ 7975 switch (btype) { 7976 case 0: 7977 /* decompress uncompressed block */ 7978 res = tinf_inflate_uncompressed_block(d); 7979 break; 7980 case 1: 7981 /* decompress block with fixed huffman trees */ 7982 res = tinf_inflate_block_data(d, sltree, sdtree); 7983 break; 7984 case 2: 7985 /* decompress block with dynamic huffman trees */ 7986 tinf_decode_trees(d, d.ltree, d.dtree); 7987 res = tinf_inflate_block_data(d, d.ltree, d.dtree); 7988 break; 7989 default: 7990 res = TINF_DATA_ERROR; 7991 } 7992 7993 if (res !== TINF_OK) 7994 throw new Error('Data error'); 7995 7996 } while (!bfinal); 7997 7998 if (d.destLen < d.dest.length) { 7999 if (typeof d.dest.slice === 'function') 8000 return d.dest.slice(0, d.destLen); 8001 else 8002 return d.dest.subarray(0, d.destLen); 8003 } 8004 8005 return d.dest; 8006} 8007 8008/* -------------------- * 8009 * -- initialization -- * 8010 * -------------------- */ 8011 8012/* build fixed huffman trees */ 8013tinf_build_fixed_trees(sltree, sdtree); 8014 8015/* build extra bits and base tables */ 8016tinf_build_bits_base(length_bits, length_base, 4, 3); 8017tinf_build_bits_base(dist_bits, dist_base, 2, 1); 8018 8019/* fix a special case */ 8020length_bits[28] = 0; 8021length_base[28] = 258; 8022 8023module.exports = tinf_uncompress; 8024 8025 8026/***/ }), 8027/* 80 */ 8028/***/ (function(module, exports, __webpack_require__) { 8029 8030"use strict"; 8031 8032 8033var isString = __webpack_require__(0).isString; 8034var isArray = __webpack_require__(0).isArray; 8035var isUndefined = __webpack_require__(0).isUndefined; 8036var isNull = __webpack_require__(0).isNull; 8037 8038/** 8039 * Creates an instance of StyleContextStack used for style inheritance and style overrides 8040 * 8041 * @constructor 8042 * @this {StyleContextStack} 8043 * @param {Object} named styles dictionary 8044 * @param {Object} optional default style definition 8045 */ 8046function StyleContextStack(styleDictionary, defaultStyle) { 8047 this.defaultStyle = defaultStyle || {}; 8048 this.styleDictionary = styleDictionary; 8049 this.styleOverrides = []; 8050} 8051 8052/** 8053 * Creates cloned version of current stack 8054 * @return {StyleContextStack} current stack snapshot 8055 */ 8056StyleContextStack.prototype.clone = function () { 8057 var stack = new StyleContextStack(this.styleDictionary, this.defaultStyle); 8058 8059 this.styleOverrides.forEach(function (item) { 8060 stack.styleOverrides.push(item); 8061 }); 8062 8063 return stack; 8064}; 8065 8066/** 8067 * Pushes style-name or style-overrides-object onto the stack for future evaluation 8068 * 8069 * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or 8070 * a new dictionary defining overriding properties 8071 */ 8072StyleContextStack.prototype.push = function (styleNameOrOverride) { 8073 this.styleOverrides.push(styleNameOrOverride); 8074}; 8075 8076/** 8077 * Removes last style-name or style-overrides-object from the stack 8078 * 8079 * @param {Number} howMany - optional number of elements to be popped (if not specified, 8080 * one element will be removed from the stack) 8081 */ 8082StyleContextStack.prototype.pop = function (howMany) { 8083 howMany = howMany || 1; 8084 8085 while (howMany-- > 0) { 8086 this.styleOverrides.pop(); 8087 } 8088}; 8089 8090/** 8091 * Creates a set of named styles or/and a style-overrides-object based on the item, 8092 * pushes those elements onto the stack for future evaluation and returns the number 8093 * of elements pushed, so they can be easily poped then. 8094 * 8095 * @param {Object} item - an object with optional style property and/or style overrides 8096 * @return the number of items pushed onto the stack 8097 */ 8098StyleContextStack.prototype.autopush = function (item) { 8099 if (isString(item)) { 8100 return 0; 8101 } 8102 8103 var styleNames = []; 8104 8105 if (item.style) { 8106 if (isArray(item.style)) { 8107 styleNames = item.style; 8108 } else { 8109 styleNames = [item.style]; 8110 } 8111 } 8112 8113 for (var i = 0, l = styleNames.length; i < l; i++) { 8114 this.push(styleNames[i]); 8115 } 8116 8117 var styleProperties = [ 8118 'font', 8119 'fontSize', 8120 'fontFeatures', 8121 'bold', 8122 'italics', 8123 'alignment', 8124 'color', 8125 'columnGap', 8126 'fillColor', 8127 'decoration', 8128 'decorationStyle', 8129 'decorationColor', 8130 'background', 8131 'lineHeight', 8132 'characterSpacing', 8133 'noWrap', 8134 'markerColor', 8135 'leadingIndent' 8136 //'tableCellPadding' 8137 // 'cellBorder', 8138 // 'headerCellBorder', 8139 // 'oddRowCellBorder', 8140 // 'evenRowCellBorder', 8141 // 'tableBorder' 8142 ]; 8143 var styleOverrideObject = {}; 8144 var pushStyleOverrideObject = false;
8145 8146 styleProperties.forEach(function (key) { 8147 if (!isUndefined(item[key]) && !isNull(item[key])) { 8148 styleOverrideObject[key] = item[key]; 8149 pushStyleOverrideObject = true; 8150 } 8151 }); 8152 8153 if (pushStyleOverrideObject) { 8154 this.push(styleOverrideObject); 8155 } 8156 8157 return styleNames.length + (pushStyleOverrideObject ? 1 : 0); 8158}; 8159 8160/** 8161 * Automatically pushes elements onto the stack, using autopush based on item, 8162 * executes callback and then pops elements back. Returns value returned by callback 8163 * 8164 * @param {Object} item - an object with optional style property and/or style overrides 8165 * @param {Function} function to be called between autopush and pop 8166 * @return {Object} value returned by callback 8167 */ 8168StyleContextStack.prototype.auto = function (item, callback) { 8169 var pushedItems = this.autopush(item); 8170 var result = callback(); 8171 8172 if (pushedItems > 0) { 8173 this.pop(pushedItems); 8174 } 8175 8176 return result; 8177}; 8178 8179/** 8180 * Evaluates stack and returns value of a named property 8181 * 8182 * @param {String} property - property name 8183 * @return property value or null if not found 8184 */ 8185StyleContextStack.prototype.getProperty = function (property) { 8186 if (this.styleOverrides) { 8187 for (var i = this.styleOverrides.length - 1; i >= 0; i--) { 8188 var item = this.styleOverrides[i]; 8189 8190 if (isString(item)) { 8191 // named-style-override 8192 var style = this.styleDictionary[item]; 8193 if (style && !isUndefined(style[property]) && !isNull(style[property])) { 8194 return style[property]; 8195 } 8196 } else if (!isUndefined(item[property]) && !isNull(item[property])) { 8197 // style-overrides-object 8198 return item[property]; 8199 } 8200 } 8201 } 8202 8203 return this.defaultStyle && this.defaultStyle[property]; 8204}; 8205 8206module.exports = StyleContextStack; 8207 8208 8209/***/ }), 8210/* 81 */ 8211/***/ (function(module, exports, __webpack_require__) { 8212 8213"use strict"; 8214 8215 8216var TraversalTracker = __webpack_require__(77); 8217var isString = __webpack_require__(0).isString; 8218 8219/** 8220 * Creates an instance of DocumentContext - a store for current x, y positions and available width/height. 8221 * It facilitates column divisions and vertical sync 8222 */ 8223function DocumentContext(pageSize, pageMargins) { 8224 this.pages = []; 8225 8226 this.pageMargins = pageMargins; 8227 8228 this.x = pageMargins.left; 8229 this.availableWidth = pageSize.width - pageMargins.left - pageMargins.right; 8230 this.availableHeight = 0; 8231 this.page = -1; 8232 8233 this.snapshots = []; 8234 8235 this.endingCell = null; 8236 8237 this.tracker = new TraversalTracker(); 8238 8239 this.addPage(pageSize); 8240 8241 this.hasBackground = false; 8242} 8243 8244DocumentContext.prototype.beginColumnGroup = function () { 8245 this.snapshots.push({ 8246 x: this.x, 8247 y: this.y, 8248 availableHeight: this.availableHeight, 8249 availableWidth: this.availableWidth, 8250 page: this.page, 8251 bottomMost: { 8252 x: this.x, 8253 y: this.y, 8254 availableHeight: this.availableHeight, 8255 availableWidth: this.availableWidth, 8256 page: this.page 8257 }, 8258 endingCell: this.endingCell, 8259 lastColumnWidth: this.lastColumnWidth 8260 }); 8261 8262 this.lastColumnWidth = 0; 8263}; 8264 8265DocumentContext.prototype.beginColumn = function (width, offset, endingCell) { 8266 var saved = this.snapshots[this.snapshots.length - 1]; 8267 8268 this.calculateBottomMost(saved); 8269 8270 this.endingCell = endingCell; 8271 this.page = saved.page; 8272 this.x = this.x + this.lastColumnWidth + (offset || 0); 8273 this.y = saved.y; 8274 this.availableWidth = width; //saved.availableWidth - offset; 8275 this.availableHeight = saved.availableHeight; 8276 8277 this.lastColumnWidth = width; 8278}; 8279 8280DocumentContext.prototype.calculateBottomMost = function (destContext) { 8281 if (this.endingCell) { 8282 this.saveContextInEndingCell(this.endingCell); 8283 this.endingCell = null; 8284 } else { 8285 destContext.bottomMost = bottomMostContext(this, destContext.bottomMost); 8286 } 8287}; 8288 8289DocumentContext.prototype.markEnding = function (endingCell) { 8290 this.page = endingCell._columnEndingContext.page; 8291 this.x = endingCell._columnEndingContext.x; 8292 this.y = endingCell._columnEndingContext.y; 8293 this.availableWidth = endingCell._columnEndingContext.availableWidth; 8294 this.availableHeight = endingCell._columnEndingContext.availableHeight; 8295 this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth; 8296}; 8297 8298DocumentContext.prototype.saveContextInEndingCell = function (endingCell) { 8299 endingCell._columnEndingContext = { 8300 page: this.page, 8301 x: this.x, 8302 y: this.y, 8303 availableHeight: this.availableHeight, 8304 availableWidth: this.availableWidth, 8305 lastColumnWidth: this.lastColumnWidth 8306 }; 8307}; 8308 8309DocumentContext.prototype.completeColumnGroup = function (height) { 8310 var saved = this.snapshots.pop(); 8311 8312 this.calculateBottomMost(saved); 8313 8314 this.endingCell = null; 8315 this.x = saved.x; 8316 8317 var y = saved.bottomMost.y; 8318 if (height) { 8319 if (saved.page === saved.bottomMost.page) { 8320 if ((saved.y + height) > y) { 8321 y = saved.y + height; 8322 } 8323 } else { 8324 y += height; 8325 } 8326 } 8327 8328 this.y = y; 8329 this.page = saved.bottomMost.page; 8330 this.availableWidth = saved.availableWidth; 8331 this.availableHeight = saved.bottomMost.availableHeight; 8332 if (height) { 8333 this.availableHeight -= (y - saved.bottomMost.y); 8334 } 8335 this.lastColumnWidth = saved.lastColumnWidth; 8336}; 8337 8338DocumentContext.prototype.addMargin = function (left, right) { 8339 this.x += left;
8340 this.availableWidth -= left + (right || 0); 8341}; 8342 8343DocumentContext.prototype.moveDown = function (offset) { 8344 this.y += offset; 8345 this.availableHeight -= offset; 8346 8347 return this.availableHeight > 0; 8348}; 8349 8350DocumentContext.prototype.initializePage = function () { 8351 this.y = this.pageMargins.top; 8352 this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom; 8353 this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right; 8354}; 8355 8356DocumentContext.prototype.pageSnapshot = function () { 8357 if (this.snapshots[0]) { 8358 return this.snapshots[0]; 8359 } else { 8360 return this; 8361 } 8362}; 8363 8364DocumentContext.prototype.moveTo = function (x, y) { 8365 if (x !== undefined && x !== null) { 8366 this.x = x; 8367 this.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right; 8368 } 8369 if (y !== undefined && y !== null) { 8370 this.y = y; 8371 this.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom; 8372 } 8373}; 8374 8375DocumentContext.prototype.beginDetachedBlock = function () { 8376 this.snapshots.push({ 8377 x: this.x, 8378 y: this.y, 8379 availableHeight: this.availableHeight, 8380 availableWidth: this.availableWidth, 8381 page: this.page, 8382 endingCell: this.endingCell, 8383 lastColumnWidth: this.lastColumnWidth 8384 }); 8385}; 8386 8387DocumentContext.prototype.endDetachedBlock = function () { 8388 var saved = this.snapshots.pop(); 8389 8390 this.x = saved.x; 8391 this.y = saved.y; 8392 this.availableWidth = saved.availableWidth; 8393 this.availableHeight = saved.availableHeight; 8394 this.page = saved.page; 8395 this.endingCell = saved.endingCell; 8396 this.lastColumnWidth = saved.lastColumnWidth; 8397}; 8398 8399function pageOrientation(pageOrientationString, currentPageOrientation) { 8400 if (pageOrientationString === undefined) { 8401 return currentPageOrientation; 8402 } else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) { 8403 return 'landscape'; 8404 } else { 8405 return 'portrait'; 8406 } 8407} 8408 8409var getPageSize = function (currentPage, newPageOrientation) { 8410 8411 newPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation); 8412 8413 if (newPageOrientation !== currentPage.pageSize.orientation) { 8414 return { 8415 orientation: newPageOrientation, 8416 width: currentPage.pageSize.height, 8417 height: currentPage.pageSize.width 8418 }; 8419 } else { 8420 return { 8421 orientation: currentPage.pageSize.orientation, 8422 width: currentPage.pageSize.width, 8423 height: currentPage.pageSize.height 8424 }; 8425 } 8426 8427}; 8428 8429 8430DocumentContext.prototype.moveToNextPage = function (pageOrientation) { 8431 var nextPageIndex = this.page + 1; 8432 8433 var prevPage = this.page; 8434 var prevY = this.y; 8435 8436 var createNewPage = nextPageIndex >= this.pages.length; 8437 if (createNewPage) { 8438 var currentAvailableWidth = this.availableWidth; 8439 var currentPageOrientation = this.getCurrentPage().pageSize.orientation; 8440 8441 var pageSize = getPageSize(this.getCurrentPage(), pageOrientation); 8442 this.addPage(pageSize); 8443 8444 if (currentPageOrientation === pageSize.orientation) { 8445 this.availableWidth = currentAvailableWidth; 8446 } 8447 } else { 8448 this.page = nextPageIndex; 8449 this.initializePage(); 8450 } 8451 8452 return { 8453 newPageCreated: createNewPage, 8454 prevPage: prevPage, 8455 prevY: prevY, 8456 y: this.y 8457 }; 8458}; 8459 8460 8461DocumentContext.prototype.addPage = function (pageSize) { 8462 var page = {items: [], pageSize: pageSize}; 8463 this.pages.push(page); 8464 this.page = this.pages.length - 1; 8465 this.initializePage(); 8466 8467 this.tracker.emit('pageAdded'); 8468 8469 return page; 8470}; 8471 8472DocumentContext.prototype.getCurrentPage = function () { 8473 if (this.page < 0 || this.page >= this.pages.length) { 8474 return null; 8475 } 8476 8477 return this.pages[this.page]; 8478}; 8479 8480DocumentContext.prototype.getCurrentPosition = function () { 8481 var pageSize = this.getCurrentPage().pageSize; 8482 var innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom; 8483 var innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right; 8484 8485 return { 8486 pageNumber: this.page + 1, 8487 pageOrientation: pageSize.orientation, 8488 pageInnerHeight: innerHeight, 8489 pageInnerWidth: innerWidth, 8490 left: this.x, 8491 top: this.y,
8492 verticalRatio: ((this.y - this.pageMargins.top) / innerHeight), 8493 horizontalRatio: ((this.x - this.pageMargins.left) / innerWidth) 8494 }; 8495}; 8496 8497function bottomMostContext(c1, c2) { 8498 var r; 8499 8500 if (c1.page > c2.page) { 8501 r = c1; 8502 } else if (c2.page > c1.page) { 8503 r = c2; 8504 } else { 8505 r = (c1.y > c2.y) ? c1 : c2; 8506 } 8507 8508 return { 8509 page: r.page, 8510 x: r.x, 8511 y: r.y, 8512 availableHeight: r.availableHeight, 8513 availableWidth: r.availableWidth 8514 }; 8515} 8516 8517module.exports = DocumentContext; 8518 8519 8520/***/ }), 8521/* 82 */ 8522/***/ (function(module, exports, __webpack_require__) { 8523 8524"use strict"; 8525 8526 8527/** 8528 * Creates an instance of Line 8529 * 8530 * @constructor 8531 * @this {Line} 8532 * @param {Number} Maximum width this line can have 8533 */ 8534function Line(maxWidth) { 8535 this.maxWidth = maxWidth; 8536 this.leadingCut = 0; 8537 this.trailingCut = 0; 8538 this.inlineWidths = 0; 8539 this.inlines = []; 8540} 8541 8542Line.prototype.getAscenderHeight = function () { 8543 var y = 0; 8544 8545 this.inlines.forEach(function (inline) { 8546 y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize); 8547 }); 8548 return y; 8549}; 8550 8551Line.prototype.hasEnoughSpaceForInline = function (inline) { 8552 if (this.inlines.length === 0) { 8553 return true; 8554 } 8555 if (this.newLineForced) { 8556 return false; 8557 } 8558 8559 return this.inlineWidths + inline.width - this.leadingCut - (inline.trailingCut || 0) <= this.maxWidth; 8560}; 8561 8562Line.prototype.addInline = function (inline) { 8563 if (this.inlines.length === 0) { 8564 this.leadingCut = inline.leadingCut || 0; 8565 } 8566 this.trailingCut = inline.trailingCut || 0; 8567 8568 inline.x = this.inlineWidths - this.leadingCut; 8569 8570 this.inlines.push(inline); 8571 this.inlineWidths += inline.width; 8572 8573 if (inline.lineEnd) { 8574 this.newLineForced = true; 8575 } 8576}; 8577 8578Line.prototype.getWidth = function () { 8579 return this.inlineWidths - this.leadingCut - this.trailingCut; 8580}; 8581 8582/** 8583 * Returns line height 8584 * @return {Number} 8585 */ 8586Line.prototype.getHeight = function () { 8587 var max = 0; 8588 8589 this.inlines.forEach(function (item) { 8590 max = Math.max(max, item.height || 0); 8591 }); 8592 8593 return max; 8594}; 8595 8596module.exports = Line; 8597 8598 8599/***/ }), 8600/* 83 */ 8601/***/ (function(module, exports, __webpack_require__) { 8602 8603"use strict"; 8604/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors. 8605// 8606// Permission is hereby granted, free of charge, to any person obtaining a 8607// copy of this software and associated documentation files (the 8608// "Software"), to deal in the Software without restriction, including 8609// without limitation the rights to use, copy, modify, merge, publish, 8610// distribute, sublicense, and/or sell copies of the Software, and to permit 8611// persons to whom the Software is furnished to do so, subject to the 8612// following conditions: 8613// 8614// The above copyright notice and this permission notice shall be included 8615// in all copies or substantial portions of the Software. 8616// 8617// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 8618// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 8619// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 8620// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 8621// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 8622// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 8623// USE OR OTHER DEALINGS IN THE SOFTWARE. 8624 8625 8626 8627/*<replacement>*/ 8628 8629var processNextTick = __webpack_require__(32).nextTick; 8630/*</replacement>*/ 8631 8632module.exports = Readable; 8633 8634/*<replacement>*/ 8635var isArray = __webpack_require__(76); 8636/*</replacement>*/ 8637 8638/*<replacement>*/ 8639var Duplex; 8640/*</replacement>*/ 8641 8642Readable.ReadableState = ReadableState; 8643 8644/*<replacement>*/ 8645var EE = __webpack_require__(31).EventEmitter; 8646 8647var EElistenerCount = function (emitter, type) { 8648 return emitter.listeners(type).length; 8649}; 8650/*</replacement>*/ 8651 8652/*<replacement>*/ 8653var Stream = __webpack_require__(84); 8654/*</replacement>*/ 8655 8656/*<replacement>*/ 8657 8658var Buffer = __webpack_require__(33).Buffer; 8659var OurUint8Array = global.Uint8Array || function () {}; 8660function _uint8ArrayToBuffer(chunk) { 8661 return Buffer.from(chunk); 8662} 8663function _isUint8Array(obj) { 8664 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; 8665} 8666 8667/*</replacement>*/ 8668 8669/*<replacement>*/ 8670var util = __webpack_require__(25); 8671util.inherits = __webpack_require__(21); 8672/*</replacement>*/ 8673 8674/*<replacement>*/ 8675var debugUtil = __webpack_require__(139); 8676var debug = void 0; 8677if (debugUtil && debugUtil.debuglog) { 8678 debug = debugUtil.debuglog('stream'); 8679} else { 8680 debug = function () {}; 8681} 8682/*</replacement>*/ 8683 8684var BufferList = __webpack_require__(140); 8685var destroyImpl = __webpack_require__(85); 8686var StringDecoder; 8687 8688util.inherits(Readable, Stream); 8689 8690var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; 8691 8692function prependListener(emitter, event, fn) { 8693 // Sadly this is not cacheable as some libraries bundle their own 8694 // event emitter implementation with them. 8695 if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); 8696 8697 // This is a hack to make sure that our error handler is attached before any 8698 // userland ones. NEVER DO THIS. This is here only because this code needs 8699 // to continue to work with older versions of Node.js that do not include 8700 // the prependListener() method. The goal is to eventually remove this hack. 8701 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);
vendor: 5,093 bytes, lines 8701-8859
8701else emitter._events[event] = [fn, emitter._events[event]]; 8702} 8703 8704function ReadableState(options, stream) { 8705 Duplex = Duplex || __webpack_require__(16); 8706 8707 options = options || {}; 8708 8709 // Duplex streams are both readable and writable, but share 8710 // the same options object. 8711 // However, some cases require setting options to different 8712 // values for the readable and the writable sides of the duplex stream. 8713 // These options can be provided separately as readableXXX and writableXXX. 8714 var isDuplex = stream instanceof Duplex; 8715 8716 // object stream flag. Used to make read(n) ignore n and to 8717 // make all the buffer merging and length checks go away 8718 this.objectMode = !!options.objectMode; 8719 8720 if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; 8721 8722 // the point at which it stops calling _read() to fill the buffer 8723 // Note: 0 is a valid value, means "don't call _read preemptively ever" 8724 var hwm = options.highWaterMark; 8725 var readableHwm = options.readableHighWaterMark; 8726 var defaultHwm = this.objectMode ? 16 : 16 * 1024; 8727 8728 if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; 8729 8730 // cast to ints. 8731 this.highWaterMark = Math.floor(this.highWaterMark); 8732 8733 // A linked list is used to store data chunks instead of an array because the 8734 // linked list can remove elements from the beginning faster than 8735 // array.shift() 8736 this.buffer = new BufferList(); 8737 this.length = 0; 8738 this.pipes = null; 8739 this.pipesCount = 0; 8740 this.flowing = null; 8741 this.ended = false; 8742 this.endEmitted = false; 8743 this.reading = false; 8744 8745 // a flag to be able to tell if the event 'readable'/'data' is emitted 8746 // immediately, or on a later tick. We set this to true at first, because 8747 // any actions that shouldn't happen until "later" should generally also 8748 // not happen before the first read call. 8749 this.sync = true; 8750 8751 // whenever we return null, then we set a flag to say 8752 // that we're awaiting a 'readable' event emission. 8753 this.needReadable = false; 8754 this.emittedReadable = false; 8755 this.readableListening = false; 8756 this.resumeScheduled = false; 8757 8758 // has it been destroyed 8759 this.destroyed = false; 8760 8761 // Crypto is kind of old and crusty. Historically, its default string 8762 // encoding is 'binary' so we have to make this configurable. 8763 // Everything else in the universe uses 'utf8', though. 8764 this.defaultEncoding = options.defaultEncoding || 'utf8'; 8765 8766 // the number of writers that are awaiting a drain event in .pipe()s 8767 this.awaitDrain = 0; 8768 8769 // if true, a maybeReadMore has been scheduled 8770 this.readingMore = false; 8771 8772 this.decoder = null; 8773 this.encoding = null; 8774 if (options.encoding) { 8775 if (!StringDecoder) StringDecoder = __webpack_require__(47).StringDecoder; 8776 this.decoder = new StringDecoder(options.encoding); 8777 this.encoding = options.encoding; 8778 } 8779} 8780 8781function Readable(options) { 8782 Duplex = Duplex || __webpack_require__(16); 8783 8784 if (!(this instanceof Readable)) return new Readable(options); 8785 8786 this._readableState = new ReadableState(options, this); 8787 8788 // legacy 8789 this.readable = true; 8790 8791 if (options) { 8792 if (typeof options.read === 'function') this._read = options.read; 8793 8794 if (typeof options.destroy === 'function') this._destroy = options.destroy; 8795 } 8796 8797 Stream.call(this); 8798} 8799 8800Object.defineProperty(Readable.prototype, 'destroyed', { 8801 get: function () { 8802 if (this._readableState === undefined) { 8803 return false; 8804 } 8805 return this._readableState.destroyed; 8806 }, 8807 set: function (value) { 8808 // we ignore the value if the stream 8809 // has not been initialized yet 8810 if (!this._readableState) { 8811 return; 8812 } 8813 8814 // backward compatibility, the user is explicitly 8815 // managing destroyed 8816 this._readableState.destroyed = value; 8817 } 8818}); 8819 8820Readable.prototype.destroy = destroyImpl.destroy; 8821Readable.prototype._undestroy = destroyImpl.undestroy; 8822Readable.prototype._destroy = function (err, cb) { 8823 this.push(null); 8824 cb(err); 8825}; 8826 8827// Manually shove something into the read() buffer. 8828// This returns true if the highWaterMark has not been hit yet, 8829// similar to how Writable.write() returns true if you should 8830// write() some more. 8831Readable.prototype.push = function (chunk, encoding) { 8832 var state = this._readableState; 8833 var skipChunkCheck; 8834 8835 if (!state.objectMode) { 8836 if (typeof chunk === 'string') { 8837 encoding = encoding || state.defaultEncoding; 8838 if (encoding !== state.encoding) { 8839 chunk = Buffer.from(chunk, encoding); 8840 encoding = ''; 8841 } 8842 skipChunkCheck = true; 8843 } 8844 } else { 8845 skipChunkCheck = true; 8846 } 8847 8848 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); 8849}; 8850 8851// Unshift should *always* be something directly out of read() 8852Readable.prototype.unshift = function (chunk) { 8853 return readableAddChunk(this, chunk, null, true, false); 8854}; 8855 8856function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { 8857 var state = stream._readableState; 8858 if (chunk === null) { 8859 state.reading = false;
vendor: 2,542 bytes, lines 8860-8931
8860 onEofChunk(stream, state); 8861 } else { 8862 var er; 8863 if (!skipChunkCheck) er = chunkInvalid(state, chunk); 8864 if (er) { 8865 stream.emit('error', er); 8866 } else if (state.objectMode || chunk && chunk.length > 0) { 8867 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { 8868 chunk = _uint8ArrayToBuffer(chunk); 8869 } 8870 8871 if (addToFront) { 8872 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); 8873 } else if (state.ended) { 8874 stream.emit('error', new Error('stream.push() after EOF')); 8875 } else { 8876 state.reading = false; 8877 if (state.decoder && !encoding) { 8878 chunk = state.decoder.write(chunk); 8879 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); 8880 } else { 8881 addChunk(stream, state, chunk, false); 8882 } 8883 } 8884 } else if (!addToFront) { 8885 state.reading = false; 8886 } 8887 } 8888 8889 return needMoreData(state); 8890} 8891 8892function addChunk(stream, state, chunk, addToFront) { 8893 if (state.flowing && state.length === 0 && !state.sync) { 8894 stream.emit('data', chunk); 8895 stream.read(0); 8896 } else { 8897 // update the buffer info. 8898 state.length += state.objectMode ? 1 : chunk.length; 8899 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); 8900 8901 if (state.needReadable) emitReadable(stream); 8902 } 8903 maybeReadMore(stream, state); 8904} 8905 8906function chunkInvalid(state, chunk) { 8907 var er; 8908 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { 8909 er = new TypeError('Invalid non-string/buffer chunk'); 8910 } 8911 return er; 8912} 8913 8914// if it's past the high water mark, we can push in some more. 8915// Also, if we have no data yet, we can stand some 8916// more bytes. This is to work around cases where hwm=0, 8917// such as the repl. Also, if the push() triggered a 8918// readable event, and the user called read(largeNumber) such that 8919// needReadable was set, then we ought to push more, so that another 8920// 'readable' event will be triggered. 8921function needMoreData(state) { 8922 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); 8923} 8924 8925Readable.prototype.isPaused = function () { 8926 return this._readableState.flowing === false; 8927}; 8928 8929// backwards compatibility. 8930Readable.prototype.setEncoding = function (enc) { 8931 if (!StringDecoder) StringDecoder = __webpack_require__(47
vendor: 14,902 bytes, lines 8931-9423
8931).StringDecoder; 8932 this._readableState.decoder = new StringDecoder(enc); 8933 this._readableState.encoding = enc; 8934 return this; 8935}; 8936 8937// Don't raise the hwm > 8MB 8938var MAX_HWM = 0x800000; 8939function computeNewHighWaterMark(n) { 8940 if (n >= MAX_HWM) { 8941 n = MAX_HWM; 8942 } else { 8943 // Get the next highest power of 2 to prevent increasing hwm excessively in 8944 // tiny amounts 8945 n--; 8946 n |= n >>> 1; 8947 n |= n >>> 2; 8948 n |= n >>> 4; 8949 n |= n >>> 8; 8950 n |= n >>> 16; 8951 n++; 8952 } 8953 return n; 8954} 8955 8956// This function is designed to be inlinable, so please take care when making 8957// changes to the function body. 8958function howMuchToRead(n, state) { 8959 if (n <= 0 || state.length === 0 && state.ended) return 0; 8960 if (state.objectMode) return 1; 8961 if (n !== n) { 8962 // Only flow one buffer at a time 8963 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; 8964 } 8965 // If we're asking for more than the current hwm, then raise the hwm. 8966 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); 8967 if (n <= state.length) return n; 8968 // Don't have enough 8969 if (!state.ended) { 8970 state.needReadable = true; 8971 return 0; 8972 } 8973 return state.length; 8974} 8975 8976// you can override either this method, or the async _read(n) below. 8977Readable.prototype.read = function (n) { 8978 debug('read', n); 8979 n = parseInt(n, 10); 8980 var state = this._readableState; 8981 var nOrig = n; 8982 8983 if (n !== 0) state.emittedReadable = false; 8984 8985 // if we're doing read(0) to trigger a readable event, but we 8986 // already have a bunch of data in the buffer, then just trigger 8987 // the 'readable' event and move on. 8988 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { 8989 debug('read: emitReadable', state.length, state.ended); 8990 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); 8991 return null; 8992 } 8993 8994 n = howMuchToRead(n, state); 8995 8996 // if we've ended, and we're now clear, then finish it up. 8997 if (n === 0 && state.ended) { 8998 if (state.length === 0) endReadable(this); 8999 return null; 9000 } 9001 9002 // All the actual chunk generation logic needs to be 9003 // *below* the call to _read. The reason is that in certain 9004 // synthetic stream cases, such as passthrough streams, _read 9005 // may be a completely synchronous operation which may change 9006 // the state of the read buffer, providing enough data when 9007 // before there was *not* enough. 9008 // 9009 // So, the steps are: 9010 // 1. Figure out what the state of things will be after we do 9011 // a read from the buffer. 9012 // 9013 // 2. If that resulting state will trigger a _read, then call _read. 9014 // Note that this may be asynchronous, or synchronous. Yes, it is 9015 // deeply ugly to write APIs this way, but that still doesn't mean 9016 // that the Readable class should behave improperly, as streams are 9017 // designed to be sync/async agnostic. 9018 // Take note if the _read call is sync or async (ie, if the read call 9019 // has returned yet), so that we know whether or not it's safe to emit 9020 // 'readable' etc. 9021 // 9022 // 3. Actually pull the requested chunks out of the buffer and return. 9023 9024 // if we need a readable event, then we need to do some reading. 9025 var doRead = state.needReadable; 9026 debug('need readable', doRead); 9027 9028 // if we currently have less than the highWaterMark, then also read some 9029 if (state.length === 0 || state.length - n < state.highWaterMark) { 9030 doRead = true; 9031 debug('length less than watermark', doRead); 9032 } 9033 9034 // however, if we've ended, then there's no point, and if we're already 9035 // reading, then it's unnecessary. 9036 if (state.ended || state.reading) { 9037 doRead = false; 9038 debug('reading or ended', doRead); 9039 } else if (doRead) { 9040 debug('do read'); 9041 state.reading = true; 9042 state.sync = true; 9043 // if the length is currently zero, then we *need* a readable event. 9044 if (state.length === 0) state.needReadable = true; 9045 // call internal read method 9046 this._read(state.highWaterMark); 9047 state.sync = false; 9048 // If _read pushed data synchronously, then `reading` will be false, 9049 // and we need to re-evaluate how much data we can return to the user. 9050 if (!state.reading) n = howMuchToRead(nOrig, state); 9051 } 9052 9053 var ret; 9054 if (n > 0) ret = fromList(n, state);else ret = null; 9055 9056 if (ret === null) { 9057 state.needReadable = true; 9058 n = 0; 9059 } else { 9060 state.length -= n; 9061 } 9062 9063 if (state.length === 0) { 9064 // If we have nothing in the buffer, then we want to know 9065 // as soon as we *do* get something into the buffer. 9066 if (!state.ended) state.needReadable = true; 9067 9068 // If we tried to read() past the EOF, then emit end on the next tick. 9069 if (nOrig !== n && state.ended) endReadable(this); 9070 } 9071 9072 if (ret !== null) this.emit('data', ret); 9073 9074 return ret; 9075}; 9076 9077function onEofChunk(stream, state) { 9078 if (state.ended) return; 9079 if (state.decoder) { 9080 var chunk = state.decoder.end(); 9081 if (chunk && chunk.length) { 9082 state.buffer.push(chunk); 9083 state.length += state.objectMode ? 1 : chunk.length; 9084 } 9085 } 9086 state.ended = true; 9087 9088 // emit 'readable' now to make sure it gets picked up. 9089 emitReadable(stream); 9090} 9091 9092// Don't emit readable right away in sync mode, because this can trigger 9093// another read() call => stack overflow. This way, it might trigger 9094// a nextTick recursion warning, but that's not so bad. 9095function emitReadable(stream) { 9096 var state = stream._readableState; 9097 state.needReadable = false; 9098 if (!state.emittedReadable) { 9099 debug('emitReadable', state.flowing); 9100 state.emittedReadable = true; 9101 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); 9102 } 9103} 9104 9105function emitReadable_(stream) { 9106 debug('emit readable'); 9107 stream.emit('readable'); 9108 flow(stream); 9109} 9110 9111// at this point, the user has presumably seen the 'readable' event, 9112// and called read() to consume some data. that may have triggered 9113// in turn another _read(n) call, in which case reading = true if 9114// it's in progress. 9115// However, if we're not ended, or reading, and the length < hwm, 9116// then go ahead and try to read some more preemptively. 9117function maybeReadMore(stream, state) { 9118 if (!state.readingMore) { 9119 state.readingMore = true; 9120 processNextTick(maybeReadMore_, stream, state); 9121 } 9122} 9123 9124function maybeReadMore_(stream, state) { 9125 var len = state.length; 9126 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { 9127 debug('maybeReadMore read 0'); 9128 stream.read(0); 9129 if (len === state.length) 9130 // didn't get any data, stop spinning. 9131 break;else len = state.length; 9132 } 9133 state.readingMore = false; 9134} 9135 9136// abstract method. to be overridden in specific implementation classes. 9137// call cb(er, data) where data is <= n in length. 9138// for virtual (non-string, non-buffer) streams, "length" is somewhat 9139// arbitrary, and perhaps not very meaningful. 9140Readable.prototype._read = function (n) { 9141 this.emit('error', new Error('_read() is not implemented')); 9142}; 9143 9144Readable.prototype.pipe = function (dest, pipeOpts) { 9145 var src = this; 9146 var state = this._readableState; 9147 9148 switch (state.pipesCount) { 9149 case 0: 9150 state.pipes = dest; 9151 break; 9152 case 1: 9153 state.pipes = [state.pipes, dest]; 9154 break; 9155 default: 9156 state.pipes.push(dest); 9157 break; 9158 } 9159 state.pipesCount += 1; 9160 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); 9161 9162 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; 9163 9164 var endFn = doEnd ? onend : unpipe; 9165 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); 9166 9167 dest.on('unpipe', onunpipe); 9168 function onunpipe(readable, unpipeInfo) { 9169 debug('onunpipe'); 9170 if (readable === src) { 9171 if (unpipeInfo && unpipeInfo.hasUnpiped === false) { 9172 unpipeInfo.hasUnpiped = true; 9173 cleanup(); 9174 } 9175 } 9176 } 9177 9178 function onend() { 9179 debug('onend'); 9180 dest.end(); 9181 } 9182 9183 // when the dest drains, it reduces the awaitDrain counter 9184 // on the source. This would be more elegant with a .once() 9185 // handler in flow(), but adding and removing repeatedly is 9186 // too slow. 9187 var ondrain = pipeOnDrain(src); 9188 dest.on('drain', ondrain); 9189 9190 var cleanedUp = false; 9191 function cleanup() { 9192 debug('cleanup'); 9193 // cleanup event handlers once the pipe is broken 9194 dest.removeListener('close', onclose); 9195 dest.removeListener('finish', onfinish); 9196 dest.removeListener('drain', ondrain); 9197 dest.removeListener('error', onerror); 9198 dest.removeListener('unpipe', onunpipe); 9199 src.removeListener('end', onend); 9200 src.removeListener('end', unpipe); 9201 src.removeListener('data', ondata); 9202 9203 cleanedUp = true; 9204 9205 // if the reader is waiting for a drain event from this 9206 // specific writer, then it would cause it to never start 9207 // flowing again. 9208 // So, if this is awaiting a drain, then we just call it now. 9209 // If we don't know, then assume that we are waiting for one. 9210 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); 9211 } 9212 9213 // If the user pushes more data while we're writing to dest then we'll end up 9214 // in ondata again. However, we only want to increase awaitDrain once because 9215 // dest will only emit one 'drain' event for the multiple writes. 9216 // => Introduce a guard on increasing awaitDrain. 9217 var increasedAwaitDrain = false; 9218 src.on('data', ondata); 9219 function ondata(chunk) { 9220 debug('ondata'); 9221 increasedAwaitDrain = false; 9222 var ret = dest.write(chunk); 9223 if (false === ret && !increasedAwaitDrain) { 9224 // If the user unpiped during `dest.write()`, it is possible 9225 // to get stuck in a permanently paused state if that write 9226 // also returned false. 9227 // => Check whether `dest` is still a piping destination. 9228 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { 9229 debug('false write response, pause', src._readableState.awaitDrain); 9230 src._readableState.awaitDrain++; 9231 increasedAwaitDrain = true; 9232 } 9233 src.pause(); 9234 } 9235 } 9236 9237 // if the dest has an error, then stop piping into it. 9238 // however, don't suppress the throwing behavior for this. 9239 function onerror(er) { 9240 debug('onerror', er); 9241 unpipe(); 9242 dest.removeListener('error', onerror); 9243 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); 9244 } 9245 9246 // Make sure our error handler is attached before userland ones. 9247 prependListener(dest, 'error', onerror); 9248 9249 // Both close and finish should trigger unpipe, but only once. 9250 function onclose() { 9251 dest.removeListener('finish', onfinish); 9252 unpipe(); 9253 } 9254 dest.once('close', onclose); 9255 function onfinish() { 9256 debug('onfinish'); 9257 dest.removeListener('close', onclose); 9258 unpipe(); 9259 } 9260 dest.once('finish', onfinish); 9261 9262 function unpipe() { 9263 debug('unpipe'); 9264 src.unpipe(dest); 9265 } 9266 9267 // tell the dest that it's being piped to 9268 dest.emit('pipe', src); 9269 9270 // start the flow if it hasn't been started already. 9271 if (!state.flowing) { 9272 debug('pipe resume'); 9273 src.resume(); 9274 } 9275 9276 return dest; 9277}; 9278 9279function pipeOnDrain(src) { 9280 return function () { 9281 var state = src._readableState; 9282 debug('pipeOnDrain', state.awaitDrain); 9283 if (state.awaitDrain) state.awaitDrain--; 9284 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { 9285 state.flowing = true; 9286 flow(src); 9287 } 9288 }; 9289} 9290 9291Readable.prototype.unpipe = function (dest) { 9292 var state = this._readableState; 9293 var unpipeInfo = { hasUnpiped: false }; 9294 9295 // if we're not piping anywhere, then do nothing. 9296 if (state.pipesCount === 0) return this; 9297 9298 // just one destination. most common case. 9299 if (state.pipesCount === 1) { 9300 // passed in one, but it's not the right one. 9301 if (dest && dest !== state.pipes) return this; 9302 9303 if (!dest) dest = state.pipes; 9304 9305 // got a match. 9306 state.pipes = null; 9307 state.pipesCount = 0; 9308 state.flowing = false; 9309 if (dest) dest.emit('unpipe', this, unpipeInfo); 9310 return this; 9311 } 9312 9313 // slow case. multiple pipe destinations. 9314 9315 if (!dest) { 9316 // remove all. 9317 var dests = state.pipes; 9318 var len = state.pipesCount; 9319 state.pipes = null; 9320 state.pipesCount = 0; 9321 state.flowing = false; 9322 9323 for (var i = 0; i < len; i++) { 9324 dests[i].emit('unpipe', this, unpipeInfo); 9325 }return this; 9326 } 9327 9328 // try to find the right one. 9329 var index = indexOf(state.pipes, dest); 9330 if (index === -1) return this; 9331 9332 state.pipes.splice(index, 1); 9333 state.pipesCount -= 1; 9334 if (state.pipesCount === 1) state.pipes = state.pipes[0]; 9335 9336 dest.emit('unpipe', this, unpipeInfo); 9337 9338 return this; 9339}; 9340 9341// set up data events if they are asked for 9342// Ensure readable listeners eventually get something 9343Readable.prototype.on = function (ev, fn) { 9344 var res = Stream.prototype.on.call(this, ev, fn); 9345 9346 if (ev === 'data') { 9347 // Start flowing on next tick if stream isn't explicitly paused 9348 if (this._readableState.flowing !== false) this.resume(); 9349 } else if (ev === 'readable') { 9350 var state = this._readableState; 9351 if (!state.endEmitted && !state.readableListening) { 9352 state.readableListening = state.needReadable = true; 9353 state.emittedReadable = false; 9354 if (!state.reading) { 9355 processNextTick(nReadingNextTick, this); 9356 } else if (state.length) { 9357 emitReadable(this); 9358 } 9359 } 9360 } 9361 9362 return res; 9363}; 9364Readable.prototype.addListener = Readable.prototype.on; 9365 9366function nReadingNextTick(self) { 9367 debug('readable nexttick read 0'); 9368 self.read(0); 9369} 9370 9371// pause() and resume() are remnants of the legacy readable stream API 9372// If the user uses them, then switch into old mode. 9373Readable.prototype.resume = function () { 9374 var state = this._readableState; 9375 if (!state.flowing) { 9376 debug('resume'); 9377 state.flowing = true; 9378 resume(this, state); 9379 } 9380 return this; 9381}; 9382 9383function resume(stream, state) { 9384 if (!state.resumeScheduled) { 9385 state.resumeScheduled = true; 9386 processNextTick(resume_, stream, state); 9387 } 9388} 9389 9390function resume_(stream, state) { 9391 if (!state.reading) { 9392 debug('resume read 0'); 9393 stream.read(0); 9394 } 9395 9396 state.resumeScheduled = false; 9397 state.awaitDrain = 0; 9398 stream.emit('resume'); 9399 flow(stream); 9400 if (state.flowing && !state.reading) stream.read(0); 9401} 9402 9403Readable.prototype.pause = function () { 9404 debug('call pause flowing=%j', this._readableState.flowing); 9405 if (false !== this._readableState.flowing) { 9406 debug('pause'); 9407 this._readableState.flowing = false; 9408 this.emit('pause'); 9409 } 9410 return this; 9411}; 9412 9413function flow(stream) { 9414 var state = stream._readableState; 9415 debug('flow', state.flowing); 9416 while (state.flowing && stream.read() !== null) {} 9417} 9418 9419// wrap an old-style stream as the async data source. 9420// This is *not* part of the readable stream interface. 9421// It is an ugly unfortunate mess of history. 9422Readable.prototype.wrap = function (stream) { 9423 var
vendor: 5,057 bytes, lines 9423-9602
9423_this = this; 9424 9425 var state = this._readableState; 9426 var paused = false; 9427 9428 stream.on('end', function () { 9429 debug('wrapped end'); 9430 if (state.decoder && !state.ended) { 9431 var chunk = state.decoder.end(); 9432 if (chunk && chunk.length) _this.push(chunk); 9433 } 9434 9435 _this.push(null); 9436 }); 9437 9438 stream.on('data', function (chunk) { 9439 debug('wrapped data'); 9440 if (state.decoder) chunk = state.decoder.write(chunk); 9441 9442 // don't skip over falsy values in objectMode 9443 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; 9444 9445 var ret = _this.push(chunk); 9446 if (!ret) { 9447 paused = true; 9448 stream.pause(); 9449 } 9450 }); 9451 9452 // proxy all the other methods. 9453 // important when wrapping filters and duplexes. 9454 for (var i in stream) { 9455 if (this[i] === undefined && typeof stream[i] === 'function') { 9456 this[i] = function (method) { 9457 return function () { 9458 return stream[method].apply(stream, arguments); 9459 }; 9460 }(i); 9461 } 9462 } 9463 9464 // proxy certain important events. 9465 for (var n = 0; n < kProxyEvents.length; n++) { 9466 stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); 9467 } 9468 9469 // when we try to consume some more bytes, simply unpause the 9470 // underlying stream. 9471 this._read = function (n) { 9472 debug('wrapped _read', n); 9473 if (paused) { 9474 paused = false; 9475 stream.resume(); 9476 } 9477 }; 9478 9479 return this; 9480}; 9481 9482// exposed for testing purposes only. 9483Readable._fromList = fromList; 9484 9485// Pluck off n bytes from an array of buffers. 9486// Length is the combined lengths of all the buffers in the list. 9487// This function is designed to be inlinable, so please take care when making 9488// changes to the function body. 9489function fromList(n, state) { 9490 // nothing buffered 9491 if (state.length === 0) return null; 9492 9493 var ret; 9494 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { 9495 // read it all, truncate the list 9496 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); 9497 state.buffer.clear(); 9498 } else { 9499 // read part of list 9500 ret = fromListPartial(n, state.buffer, state.decoder); 9501 } 9502 9503 return ret; 9504} 9505 9506// Extracts only enough buffered data to satisfy the amount requested. 9507// This function is designed to be inlinable, so please take care when making 9508// changes to the function body. 9509function fromListPartial(n, list, hasStrings) { 9510 var ret; 9511 if (n < list.head.data.length) { 9512 // slice is the same for buffers and strings 9513 ret = list.head.data.slice(0, n); 9514 list.head.data = list.head.data.slice(n); 9515 } else if (n === list.head.data.length) { 9516 // first chunk is a perfect match 9517 ret = list.shift(); 9518 } else { 9519 // result spans more than one buffer 9520 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); 9521 } 9522 return ret; 9523} 9524 9525// Copies a specified amount of characters from the list of buffered data 9526// chunks. 9527// This function is designed to be inlinable, so please take care when making 9528// changes to the function body. 9529function copyFromBufferString(n, list) { 9530 var p = list.head; 9531 var c = 1; 9532 var ret = p.data; 9533 n -= ret.length; 9534 while (p = p.next) { 9535 var str = p.data; 9536 var nb = n > str.length ? str.length : n; 9537 if (nb === str.length) ret += str;else ret += str.slice(0, n); 9538 n -= nb; 9539 if (n === 0) { 9540 if (nb === str.length) { 9541 ++c; 9542 if (p.next) list.head = p.next;else list.head = list.tail = null; 9543 } else { 9544 list.head = p; 9545 p.data = str.slice(nb); 9546 } 9547 break; 9548 } 9549 ++c; 9550 } 9551 list.length -= c; 9552 return ret; 9553} 9554 9555// Copies a specified amount of bytes from the list of buffered data chunks. 9556// This function is designed to be inlinable, so please take care when making 9557// changes to the function body. 9558function copyFromBuffer(n, list) { 9559 var ret = Buffer.allocUnsafe(n); 9560 var p = list.head; 9561 var c = 1; 9562 p.data.copy(ret); 9563 n -= p.data.length; 9564 while (p = p.next) { 9565 var buf = p.data; 9566 var nb = n > buf.length ? buf.length : n; 9567 buf.copy(ret, ret.length - n, 0, nb); 9568 n -= nb; 9569 if (n === 0) { 9570 if (nb === buf.length) { 9571 ++c; 9572 if (p.next) list.head = p.next;else list.head = list.tail = null; 9573 } else { 9574 list.head = p; 9575 p.data = buf.slice(nb); 9576 } 9577 break; 9578 } 9579 ++c; 9580 } 9581 list.length -= c; 9582 return ret; 9583} 9584 9585function endReadable(stream) { 9586 var state = stream._readableState; 9587 9588 // If we get here before consuming all the bytes, then that is a 9589 // bug in node. Should never happen. 9590 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); 9591 9592 if (!state.endEmitted) { 9593 state.ended = true; 9594 processNextTick(endReadableNT, state, stream); 9595 } 9596} 9597 9598function endReadableNT(state, stream) { 9599 // Check that we didn't get one last unshift. 9600 if (!state.endEmitted && state.length === 0) { 9601 state.endEmitted = true; 9602 stream.readable = false;
vendor: 2,515 bytes, lines 9603-9712
9603 stream.emit('end'); 9604 } 9605} 9606 9607function forEach(xs, f) { 9608 for (var i = 0, l = xs.length; i < l; i++) { 9609 f(xs[i], i); 9610 } 9611} 9612 9613function indexOf(xs, x) { 9614 for (var i = 0, l = xs.length; i < l; i++) { 9615 if (xs[i] === x) return i; 9616 } 9617 return -1; 9618} 9619/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11))) 9620 9621/***/ }), 9622/* 84 */ 9623/***/ (function(module, exports, __webpack_require__) { 9624 9625module.exports = __webpack_require__(31).EventEmitter; 9626 9627 9628/***/ }), 9629/* 85 */ 9630/***/ (function(module, exports, __webpack_require__) { 9631 9632"use strict"; 9633 9634 9635/*<replacement>*/ 9636 9637var processNextTick = __webpack_require__(32).nextTick; 9638/*</replacement>*/ 9639 9640// undocumented cb() API, needed for core, not for public API 9641function destroy(err, cb) { 9642 var _this = this; 9643 9644 var readableDestroyed = this._readableState && this._readableState.destroyed; 9645 var writableDestroyed = this._writableState && this._writableState.destroyed; 9646 9647 if (readableDestroyed || writableDestroyed) { 9648 if (cb) { 9649 cb(err); 9650 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { 9651 processNextTick(emitErrorNT, this, err); 9652 } 9653 return this; 9654 } 9655 9656 // we set destroyed to true before firing error callbacks in order 9657 // to make it re-entrance safe in case destroy() is called within callbacks 9658 9659 if (this._readableState) { 9660 this._readableState.destroyed = true; 9661 } 9662 9663 // if this is a duplex stream mark the writable part as destroyed as well 9664 if (this._writableState) { 9665 this._writableState.destroyed = true; 9666 } 9667 9668 this._destroy(err || null, function (err) { 9669 if (!cb && err) { 9670 processNextTick(emitErrorNT, _this, err); 9671 if (_this._writableState) { 9672 _this._writableState.errorEmitted = true; 9673 } 9674 } else if (cb) { 9675 cb(err); 9676 } 9677 }); 9678 9679 return this; 9680} 9681 9682function undestroy() { 9683 if (this._readableState) { 9684 this._readableState.destroyed = false; 9685 this._readableState.reading = false; 9686 this._readableState.ended = false; 9687 this._readableState.endEmitted = false; 9688 } 9689 9690 if (this._writableState) { 9691 this._writableState.destroyed = false; 9692 this._writableState.ended = false; 9693 this._writableState.ending = false; 9694 this._writableState.finished = false; 9695 this._writableState.errorEmitted = false; 9696 } 9697} 9698 9699function emitErrorNT(self, err) { 9700 self.emit('error', err); 9701} 9702 9703module.exports = { 9704 destroy: destroy, 9705 undestroy: undestroy 9706}; 9707 9708/***/ }), 9709/* 86 */ 9710/***/ (function(module, exports, __webpack_require__) { 9711 9712"use strict";
9713// Copyright Joyent, Inc. and other Node contributors. 9714// 9715// Permission is hereby granted, free of charge, to any person obtaining a 9716// copy of this software and associated documentation files (the 9717// "Software"), to deal in the Software without restriction, including 9718// without limitation the rights to use, copy, modify, merge, publish, 9719// distribute, sublicense, and/or sell copies of the Software, and to permit 9720// persons to whom the Software is furnished to do so, subject to the 9721// following conditions: 9722// 9723// The above copyright notice and this permission notice shall be included 9724// in all copies or substantial portions of the Software. 9725// 9726// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 9727// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 9728// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 9729// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 9730// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 9731// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 9732// USE OR OTHER DEALINGS IN THE SOFTWARE. 9733 9734// a transform stream is a readable/writable stream where you do 9735// something with the data. Sometimes it's called a "filter", 9736// but that's not a great name for it, since that implies a thing where 9737// some bits pass through, and others are simply ignored. (That would 9738// be a valid example of a transform, of course.) 9739// 9740// While the output is causally related to the input, it's not a 9741// necessarily symmetric or synchronous transformation. For example, 9742// a zlib stream might take multiple plain-text writes(), and then 9743// emit a single compressed chunk some time in the future. 9744// 9745// Here's how this works: 9746// 9747// The Transform stream has all the aspects of the readable and writable 9748// stream classes. When you write(chunk), that calls _write(chunk,cb) 9749// internally, and returns false if there's a lot of pending writes 9750// buffered up. When you call read(), that calls _read(n) until 9751// there's enough pending readable data buffered up. 9752// 9753// In a transform stream, the written data is placed in a buffer. When 9754// _read(n) is called, it transforms the queued up data, calling the 9755// buffered _write cb's as it consumes chunks. If consuming a single 9756// written chunk would result in multiple output chunks, then the first 9757// outputted bit calls the readcb, and subsequent chunks just go into 9758// the read buffer, and will cause it to emit 'readable' if necessary. 9759// 9760// This way, back-pressure is actually determined by the reading side, 9761// since _read has to be called to start processing a new chunk. However, 9762// a pathological inflate type of transform can cause excessive buffering 9763// here. For example, imagine a stream where every byte of input is 9764// interpreted as an integer from 0-255, and then results in that many 9765// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in 9766// 1kb of data being output. In this case, you could write a very small 9767// amount of input, and end up with a very large amount of output. In 9768// such a pathological inflating mechanism, there'd be no way to tell 9769// the system to stop doing the transform. A single 4MB write could 9770// cause the system to run out of memory. 9771// 9772// However, even in such a pathological case, only a single written chunk 9773// would be consumed, and then the rest would wait (un-transformed) until 9774// the results of the previous transformed chunk were consumed. 9775 9776 9777 9778module.exports = Transform; 9779 9780var Duplex = __webpack_require__(16); 9781 9782/*<replacement>*/ 9783var util = __webpack_require__(25); 9784util.inherits = __webpack_require__(21); 9785/*</replacement>*/ 9786 9787util.inherits(Transform, Duplex); 9788 9789function afterTransform(er, data) { 9790 var ts = this._transformState; 9791 ts.transforming = false; 9792 9793 var cb = ts.writecb; 9794 9795 if (!cb) { 9796 return this.emit('error', new Error('write callback called multiple times')); 9797 } 9798 9799 ts.writechunk = null; 9800 ts.writecb = null; 9801 9802 if (data != null) // single equals check for both `null` and `undefined` 9803 this.push(data); 9804 9805 cb(er); 9806 9807 var rs = this._readableState; 9808 rs.reading = false;
9809 if (rs.needReadable || rs.length < rs.highWaterMark) { 9810 this._read(rs.highWaterMark); 9811 } 9812} 9813 9814function Transform(options) { 9815 if (!(this instanceof Transform)) return new Transform(options); 9816 9817 Duplex.call(this, options); 9818 9819 this._transformState = { 9820 afterTransform: afterTransform.bind(this), 9821 needTransform: false, 9822 transforming: false, 9823 writecb: null, 9824 writechunk: null, 9825 writeencoding: null 9826 }; 9827 9828 // start out asking for a readable event once data is transformed. 9829 this._readableState.needReadable = true; 9830 9831 // we have implemented the _read method, and done the other things 9832 // that Readable wants before the first _read call, so unset the 9833 // sync guard flag. 9834 this._readableState.sync = false; 9835 9836 if (options) { 9837 if (typeof options.transform === 'function') this._transform = options.transform; 9838 9839 if (typeof options.flush === 'function') this._flush = options.flush; 9840 } 9841 9842 // When the writable side finishes, then flush out anything remaining. 9843 this.on('prefinish', prefinish); 9844} 9845 9846function prefinish() { 9847 var _this = this; 9848 9849 if (typeof this._flush === 'function') { 9850 this._flush(function (er, data) { 9851 done(_this, er, data); 9852 }); 9853 } else { 9854 done(this, null, null); 9855 } 9856} 9857 9858Transform.prototype.push = function (chunk, encoding) { 9859 this._transformState.needTransform = false; 9860 return Duplex.prototype.push.call(this, chunk, encoding); 9861}; 9862 9863// This is the part where you do stuff! 9864// override this function in implementation classes. 9865// 'chunk' is an input chunk. 9866// 9867// Call `push(newChunk)` to pass along transformed output 9868// to the readable side. You may call 'push' zero or more times. 9869// 9870// Call `cb(err)` when you are done with this chunk. If you pass 9871// an error, then that'll put the hurt on the whole operation. If you 9872// never call cb(), then you'll never get another chunk. 9873Transform.prototype._transform = function (chunk, encoding, cb) { 9874 throw new Error('_transform() is not implemented'); 9875}; 9876 9877Transform.prototype._write = function (chunk, encoding, cb) { 9878 var ts = this._transformState; 9879 ts.writecb = cb; 9880 ts.writechunk = chunk; 9881 ts.writeencoding = encoding; 9882 if (!ts.transforming) { 9883 var rs = this._readableState; 9884 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); 9885 } 9886}; 9887 9888// Doesn't matter what the args are here. 9889// _transform does all the work. 9890// That we got here means that the readable side wants more data. 9891Transform.prototype._read = function (n) { 9892 var ts = this._transformState; 9893 9894 if (ts.writechunk !== null && ts.writecb && !ts.transforming) { 9895 ts.transforming = true; 9896 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); 9897 } else { 9898 // mark that we need a transform, so that any data that comes in 9899 // will get processed, now that we've asked for it. 9900 ts.needTransform = true; 9901 } 9902}; 9903 9904Transform.prototype._destroy = function (err, cb) { 9905 var _this2 = this; 9906 9907 Duplex.prototype._destroy.call(this, err, function (err2) { 9908 cb(err2); 9909 _this2.emit('close'); 9910 }); 9911}; 9912 9913function done(stream, er, data) { 9914 if (er) return stream.emit('error', er); 9915 9916 if (data != null) // single equals check for both `null` and `undefined` 9917 stream.push(data); 9918 9919 // if there's nothing in the write buffer, then that means 9920 // that nothing more will ever be provided 9921 if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); 9922 9923 if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); 9924 9925 return stream.push(null); 9926} 9927 9928/***/ }), 9929/* 87 */ 9930/***/ (function(module, exports, __webpack_require__) { 9931 9932/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 9933 9934/* 9935PDFReference - represents a reference to another object in the PDF object heirarchy 9936By Devon Govett 9937 */ 9938 9939(function() { 9940 var PDFObject, PDFReference, stream, zlib, 9941 bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, 9942 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 9943 hasProp = {}.hasOwnProperty; 9944 9945 zlib = __webpack_require__(48); 9946 9947 stream = __webpack_require__(15); 9948 9949 PDFReference = (function(superClass) { 9950 extend(PDFReference, superClass); 9951 9952 function PDFReference(document, id, data) { 9953 this.document = document; 9954 this.id = id; 9955 this.data = data != null ? data : {}; 9956 this.finalize = bind(this.finalize, this); 9957 PDFReference.__super__.constructor.call(this, { 9958 decodeStrings: false 9959 }); 9960 this.gen = 0; 9961 this.deflate = null; 9962 this.compress = this.document.compress && !this.data.Filter; 9963 this.uncompressedLength = 0; 9964 this.chunks = []; 9965 } 9966 9967 PDFReference.prototype.initDeflate = function() { 9968 this.data.Filter = 'FlateDecode'; 9969 this.deflate = zlib.createDeflate(); 9970 this.deflate.on('data', (function(_this) { 9971 return function(chunk) { 9972 _this.chunks.push(chunk); 9973 return _this.data.Length += chunk.length; 9974 }; 9975 })(this)); 9976 return this.deflate.on('end', this.finalize); 9977 }; 9978 9979 PDFReference.prototype._write = function(chunk, encoding, callback) { 9980 var base; 9981 if (!Buffer.isBuffer(chunk)) { 9982 chunk = new Buffer(chunk + '\n', 'binary'); 9983 } 9984 this.uncompressedLength += chunk.length; 9985 if ((base = this.data).Length == null) { 9986 base.Length = 0; 9987 } 9988 if (this.compress) { 9989 if (!this.deflate) { 9990 this.initDeflate(); 9991 } 9992 this.deflate.write(chunk); 9993 } else { 9994 this.chunks.push(chunk); 9995 this.data.Length += chunk.length; 9996 } 9997 return callback(); 9998 }; 9999 10000 PDFReference.prototype.end = function(chunk) { 10001 PDFReference.__super__.end.apply(this, arguments); 10002 if (this.deflate) { 10003 return this.deflate.end(); 10004 } else { 10005 return this.finalize(); 10006 } 10007 }; 10008 10009 PDFReference.prototype.finalize = function() { 10010 var chunk, i, len, ref; 10011 this.offset = this.document._offset; 10012 this.document._write(this.id + " " + this.gen + " obj"); 10013 this.document._write(PDFObject.convert(this.data)); 10014 if (this.chunks.length) { 10015 this.document._write('stream'); 10016 ref = this.chunks; 10017 for (i = 0, len = ref.length; i < len; i++) { 10018 chunk = ref[i]; 10019 this.document._write(chunk); 10020 } 10021 this.chunks.length = 0; 10022 this.document._write('\nendstream'); 10023 } 10024 this.document._write('endobj'); 10025 return this.document._refEnd(this); 10026 }; 10027 10028 PDFReference.prototype.toString = function() { 10029 return this.id + " " + this.gen + " R"; 10030 }; 10031 10032 return PDFReference; 10033 10034 })(stream.Writable); 10035 10036 module.exports = PDFReference; 10037 10038 PDFObject = __webpack_require__(26); 10039 10040}).call(this); 10041 10042/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 10043
vendor: 4,424 bytes, lines 10044-10191
10044/***/ }), 10045/* 88 */ 10046/***/ (function(module, exports, __webpack_require__) { 10047 10048"use strict"; 10049/* WEBPACK VAR INJECTION */(function(global) { 10050 10051// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js 10052// original notice: 10053 10054/*! 10055 * The buffer module from node.js, for the browser. 10056 * 10057 * @author Feross Aboukhadijeh <[email protected]> <http://feross.org> 10058 * @license MIT 10059 */ 10060function compare(a, b) { 10061 if (a === b) { 10062 return 0; 10063 } 10064 10065 var x = a.length; 10066 var y = b.length; 10067 10068 for (var i = 0, len = Math.min(x, y); i < len; ++i) { 10069 if (a[i] !== b[i]) { 10070 x = a[i]; 10071 y = b[i]; 10072 break; 10073 } 10074 } 10075 10076 if (x < y) { 10077 return -1; 10078 } 10079 if (y < x) { 10080 return 1; 10081 } 10082 return 0; 10083} 10084function isBuffer(b) { 10085 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') { 10086 return global.Buffer.isBuffer(b); 10087 } 10088 return !!(b != null && b._isBuffer); 10089} 10090 10091// based on node assert, original notice: 10092 10093// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 10094// 10095// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! 10096// 10097// Originally from narwhal.js (http://narwhaljs.org) 10098// Copyright (c) 2009 Thomas Robinson <280north.com> 10099// 10100// Permission is hereby granted, free of charge, to any person obtaining a copy 10101// of this software and associated documentation files (the 'Software'), to 10102// deal in the Software without restriction, including without limitation the 10103// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10104// sell copies of the Software, and to permit persons to whom the Software is 10105// furnished to do so, subject to the following conditions: 10106// 10107// The above copyright notice and this permission notice shall be included in 10108// all copies or substantial portions of the Software. 10109// 10110// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10111// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 10112// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 10113// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 10114// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 10115// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10116 10117var util = __webpack_require__(49); 10118var hasOwn = Object.prototype.hasOwnProperty; 10119var pSlice = Array.prototype.slice; 10120var functionsHaveNames = (function () { 10121 return function foo() {}.name === 'foo'; 10122}()); 10123function pToString (obj) { 10124 return Object.prototype.toString.call(obj); 10125} 10126function isView(arrbuf) { 10127 if (isBuffer(arrbuf)) { 10128 return false; 10129 } 10130 if (typeof global.ArrayBuffer !== 'function') { 10131 return false; 10132 } 10133 if (typeof ArrayBuffer.isView === 'function') { 10134 return ArrayBuffer.isView(arrbuf); 10135 } 10136 if (!arrbuf) { 10137 return false; 10138 } 10139 if (arrbuf instanceof DataView) { 10140 return true; 10141 } 10142 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) { 10143 return true; 10144 } 10145 return false; 10146} 10147// 1. The assert module provides functions that throw 10148// AssertionError's when particular conditions are not met. The 10149// assert module must conform to the following interface. 10150 10151var assert = module.exports = ok; 10152 10153// 2. The AssertionError is defined in assert. 10154// new assert.AssertionError({ message: message, 10155// actual: actual, 10156// expected: expected }) 10157 10158var regex = /\s*function\s+([^\(\s]*)\s*/; 10159// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js 10160function getName(func) { 10161 if (!util.isFunction(func)) { 10162 return; 10163 } 10164 if (functionsHaveNames) { 10165 return func.name; 10166 } 10167 var str = func.toString(); 10168 var match = str.match(regex); 10169 return match && match[1]; 10170} 10171assert.AssertionError = function AssertionError(options) { 10172 this.name = 'AssertionError'; 10173 this.actual = options.actual; 10174 this.expected = options.expected; 10175 this.operator = options.operator; 10176 if (options.message) { 10177 this.message = options.message; 10178 this.generatedMessage = false; 10179 } else { 10180 this.message = getMessage(this); 10181 this.generatedMessage = true; 10182 } 10183 var stackStartFunction = options.stackStartFunction || fail; 10184 if (Error.captureStackTrace) { 10185 Error.captureStackTrace(this, stackStartFunction); 10186 } else { 10187 // non v8 browsers so we can have a stacktrace 10188 var err = new Error(); 10189 if (err.stack) { 10190 var out = err.stack; 10191
vendor: 5,869 bytes, lines 10192-10346
10192 // try to strip useless frames 10193 var fn_name = getName(stackStartFunction); 10194 var idx = out.indexOf('\n' + fn_name); 10195 if (idx >= 0) { 10196 // once we have located the function frame 10197 // we need to strip out everything before it (and its line) 10198 var next_line = out.indexOf('\n', idx + 1); 10199 out = out.substring(next_line + 1); 10200 } 10201 10202 this.stack = out; 10203 } 10204 } 10205}; 10206 10207// assert.AssertionError instanceof Error 10208util.inherits(assert.AssertionError, Error); 10209 10210function truncate(s, n) { 10211 if (typeof s === 'string') { 10212 return s.length < n ? s : s.slice(0, n); 10213 } else { 10214 return s; 10215 } 10216} 10217function inspect(something) { 10218 if (functionsHaveNames || !util.isFunction(something)) { 10219 return util.inspect(something); 10220 } 10221 var rawname = getName(something); 10222 var name = rawname ? ': ' + rawname : ''; 10223 return '[Function' + name + ']'; 10224} 10225function getMessage(self) { 10226 return truncate(inspect(self.actual), 128) + ' ' + 10227 self.operator + ' ' + 10228 truncate(inspect(self.expected), 128); 10229} 10230 10231// At present only the three keys mentioned above are used and 10232// understood by the spec. Implementations or sub modules can pass 10233// other keys to the AssertionError's constructor - they will be 10234// ignored. 10235 10236// 3. All of the following functions must throw an AssertionError 10237// when a corresponding condition is not met, with a message that 10238// may be undefined if not provided. All assertion methods provide 10239// both the actual and expected values to the assertion error for 10240// display purposes. 10241 10242function fail(actual, expected, message, operator, stackStartFunction) { 10243 throw new assert.AssertionError({ 10244 message: message, 10245 actual: actual, 10246 expected: expected, 10247 operator: operator, 10248 stackStartFunction: stackStartFunction 10249 }); 10250} 10251 10252// EXTENSION! allows for well behaved errors defined elsewhere. 10253assert.fail = fail; 10254 10255// 4. Pure assertion tests whether a value is truthy, as determined 10256// by !!guard. 10257// assert.ok(guard, message_opt); 10258// This statement is equivalent to assert.equal(true, !!guard, 10259// message_opt);. To test strictly for the value true, use 10260// assert.strictEqual(true, guard, message_opt);. 10261 10262function ok(value, message) { 10263 if (!value) fail(value, true, message, '==', assert.ok); 10264} 10265assert.ok = ok; 10266 10267// 5. The equality assertion tests shallow, coercive equality with 10268// ==. 10269// assert.equal(actual, expected, message_opt); 10270 10271assert.equal = function equal(actual, expected, message) { 10272 if (actual != expected) fail(actual, expected, message, '==', assert.equal); 10273}; 10274 10275// 6. The non-equality assertion tests for whether two objects are not equal 10276// with != assert.notEqual(actual, expected, message_opt); 10277 10278assert.notEqual = function notEqual(actual, expected, message) { 10279 if (actual == expected) { 10280 fail(actual, expected, message, '!=', assert.notEqual); 10281 } 10282}; 10283 10284// 7. The equivalence assertion tests a deep equality relation. 10285// assert.deepEqual(actual, expected, message_opt); 10286 10287assert.deepEqual = function deepEqual(actual, expected, message) { 10288 if (!_deepEqual(actual, expected, false)) { 10289 fail(actual, expected, message, 'deepEqual', assert.deepEqual); 10290 } 10291}; 10292 10293assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { 10294 if (!_deepEqual(actual, expected, true)) { 10295 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); 10296 } 10297}; 10298 10299function _deepEqual(actual, expected, strict, memos) { 10300 // 7.1. All identical values are equivalent, as determined by ===. 10301 if (actual === expected) { 10302 return true; 10303 } else if (isBuffer(actual) && isBuffer(expected)) { 10304 return compare(actual, expected) === 0; 10305 10306 // 7.2. If the expected value is a Date object, the actual value is 10307 // equivalent if it is also a Date object that refers to the same time. 10308 } else if (util.isDate(actual) && util.isDate(expected)) { 10309 return actual.getTime() === expected.getTime(); 10310 10311 // 7.3 If the expected value is a RegExp object, the actual value is 10312 // equivalent if it is also a RegExp object with the same source and 10313 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). 10314 } else if (util.isRegExp(actual) && util.isRegExp(expected)) { 10315 return actual.source === expected.source && 10316 actual.global === expected.global && 10317 actual.multiline === expected.multiline && 10318 actual.lastIndex === expected.lastIndex && 10319 actual.ignoreCase === expected.ignoreCase; 10320 10321 // 7.4. Other pairs that do not both pass typeof value == 'object', 10322 // equivalence is determined by ==. 10323 } else if ((actual === null || typeof actual !== 'object') && 10324 (expected === null || typeof expected !== 'object')) { 10325 return strict ? actual === expected : actual == expected; 10326 10327 // If both values are instances of typed arrays, wrap their underlying 10328 // ArrayBuffers in a Buffer each to increase performance 10329 // This optimization requires the arrays to have the same type as checked by 10330 // Object.prototype.toString (aka pToString). Never perform binary 10331 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their 10332 // bit patterns are not identical. 10333 } else if (isView(actual) && isView(expected) && 10334 pToString(actual) === pToString(expected) && 10335 !(actual instanceof Float32Array || 10336 actual instanceof Float64Array)) { 10337 return compare(new Uint8Array(actual.buffer), 10338 new Uint8Array(expected.buffer)) === 0; 10339 10340 // 7.5 For all other Object pairs, including Array objects, equivalence is 10341 // determined by having the same number of owned properties (as verified 10342 // with Object.prototype.hasOwnProperty.call), the same set of keys 10343 // (although not necessarily the same order), equivalent values for every 10344 // corresponding key, and an identical 'prototype' property. Note: this 10345 // accounts for both named and indexed properties on Arrays. 10346 }
vendor: 7,288 bytes, lines 10346-10608
10346 else if (isBuffer(actual) !== isBuffer(expected)) { 10347 return false; 10348 } else { 10349 memos = memos || {actual: [], expected: []}; 10350 10351 var actualIndex = memos.actual.indexOf(actual); 10352 if (actualIndex !== -1) { 10353 if (actualIndex === memos.expected.indexOf(expected)) { 10354 return true; 10355 } 10356 } 10357 10358 memos.actual.push(actual); 10359 memos.expected.push(expected); 10360 10361 return objEquiv(actual, expected, strict, memos); 10362 } 10363} 10364 10365function isArguments(object) { 10366 return Object.prototype.toString.call(object) == '[object Arguments]'; 10367} 10368 10369function objEquiv(a, b, strict, actualVisitedObjects) { 10370 if (a === null || a === undefined || b === null || b === undefined) 10371 return false; 10372 // if one is a primitive, the other must be same 10373 if (util.isPrimitive(a) || util.isPrimitive(b)) 10374 return a === b; 10375 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) 10376 return false; 10377 var aIsArgs = isArguments(a); 10378 var bIsArgs = isArguments(b); 10379 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) 10380 return false; 10381 if (aIsArgs) { 10382 a = pSlice.call(a); 10383 b = pSlice.call(b); 10384 return _deepEqual(a, b, strict); 10385 } 10386 var ka = objectKeys(a); 10387 var kb = objectKeys(b); 10388 var key, i; 10389 // having the same number of owned properties (keys incorporates 10390 // hasOwnProperty) 10391 if (ka.length !== kb.length) 10392 return false; 10393 //the same set of keys (although not necessarily the same order), 10394 ka.sort(); 10395 kb.sort(); 10396 //~~~cheap key test 10397 for (i = ka.length - 1; i >= 0; i--) { 10398 if (ka[i] !== kb[i]) 10399 return false; 10400 } 10401 //equivalent values for every corresponding key, and 10402 //~~~possibly expensive deep test 10403 for (i = ka.length - 1; i >= 0; i--) { 10404 key = ka[i]; 10405 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects)) 10406 return false; 10407 } 10408 return true; 10409} 10410 10411// 8. The non-equivalence assertion tests for any deep inequality. 10412// assert.notDeepEqual(actual, expected, message_opt); 10413 10414assert.notDeepEqual = function notDeepEqual(actual, expected, message) { 10415 if (_deepEqual(actual, expected, false)) { 10416 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); 10417 } 10418}; 10419 10420assert.notDeepStrictEqual = notDeepStrictEqual; 10421function notDeepStrictEqual(actual, expected, message) { 10422 if (_deepEqual(actual, expected, true)) { 10423 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); 10424 } 10425} 10426 10427 10428// 9. The strict equality assertion tests strict equality, as determined by ===. 10429// assert.strictEqual(actual, expected, message_opt); 10430 10431assert.strictEqual = function strictEqual(actual, expected, message) { 10432 if (actual !== expected) { 10433 fail(actual, expected, message, '===', assert.strictEqual); 10434 } 10435}; 10436 10437// 10. The strict non-equality assertion tests for strict inequality, as 10438// determined by !==. assert.notStrictEqual(actual, expected, message_opt); 10439 10440assert.notStrictEqual = function notStrictEqual(actual, expected, message) { 10441 if (actual === expected) { 10442 fail(actual, expected, message, '!==', assert.notStrictEqual); 10443 } 10444}; 10445 10446function expectedException(actual, expected) { 10447 if (!actual || !expected) { 10448 return false; 10449 } 10450 10451 if (Object.prototype.toString.call(expected) == '[object RegExp]') { 10452 return expected.test(actual); 10453 } 10454 10455 try { 10456 if (actual instanceof expected) { 10457 return true; 10458 } 10459 } catch (e) { 10460 // Ignore. The instanceof check doesn't work for arrow functions. 10461 } 10462 10463 if (Error.isPrototypeOf(expected)) { 10464 return false; 10465 } 10466 10467 return expected.call({}, actual) === true; 10468} 10469 10470function _tryBlock(block) { 10471 var error; 10472 try { 10473 block(); 10474 } catch (e) { 10475 error = e; 10476 } 10477 return error; 10478} 10479 10480function _throws(shouldThrow, block, expected, message) { 10481 var actual; 10482 10483 if (typeof block !== 'function') { 10484 throw new TypeError('"block" argument must be a function'); 10485 } 10486 10487 if (typeof expected === 'string') { 10488 message = expected; 10489 expected = null; 10490 } 10491 10492 actual = _tryBlock(block); 10493 10494 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + 10495 (message ? ' ' + message : '.'); 10496 10497 if (shouldThrow && !actual) { 10498 fail(actual, expected, 'Missing expected exception' + message); 10499 } 10500 10501 var userProvidedMessage = typeof message === 'string'; 10502 var isUnwantedException = !shouldThrow && util.isError(actual); 10503 var isUnexpectedException = !shouldThrow && actual && !expected; 10504 10505 if ((isUnwantedException && 10506 userProvidedMessage && 10507 expectedException(actual, expected)) || 10508 isUnexpectedException) { 10509 fail(actual, expected, 'Got unwanted exception' + message); 10510 } 10511 10512 if ((shouldThrow && actual && expected && 10513 !expectedException(actual, expected)) || (!shouldThrow && actual)) { 10514 throw actual; 10515 } 10516} 10517 10518// 11. Expected to throw an error: 10519// assert.throws(block, Error_opt, message_opt); 10520 10521assert.throws = function(block, /*optional*/error, /*optional*/message) { 10522 _throws(true, block, error, message); 10523}; 10524 10525// EXTENSION! This is annoying to write outside this module. 10526assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { 10527 _throws(false, block, error, message); 10528}; 10529 10530assert.ifError = function(err) { if (err) throw err; }; 10531 10532var objectKeys = Object.keys || function (obj) { 10533 var keys = []; 10534 for (var key in obj) { 10535 if (hasOwn.call(obj, key)) keys.push(key); 10536 } 10537 return keys; 10538}; 10539 10540/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) 10541 10542/***/ }), 10543/* 89 */ 10544/***/ (function(module, exports, __webpack_require__) { 10545 10546"use strict"; 10547 10548 10549// Note: adler32 takes 12% for level 0 and 2% for level 6. 10550// It isn't worth it to make additional optimizations as in original. 10551// Small size is preferable. 10552 10553// (C) 1995-2013 Jean-loup Gailly and Mark Adler 10554// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 10555// 10556// This software is provided 'as-is', without any express or implied 10557// warranty. In no event will the authors be held liable for any damages 10558// arising from the use of this software. 10559// 10560// Permission is granted to anyone to use this software for any purpose, 10561// including commercial applications, and to alter it and redistribute it 10562// freely, subject to the following restrictions: 10563// 10564// 1. The origin of this software must not be misrepresented; you must not 10565// claim that you wrote the original software. If you use this software 10566// in a product, an acknowledgment in the product documentation would be 10567// appreciated but is not required. 10568// 2. Altered source versions must be plainly marked as such, and must not be 10569// misrepresented as being the original software. 10570// 3. This notice may not be removed or altered from any source distribution. 10571 10572function adler32(adler, buf, len, pos) { 10573 var s1 = (adler & 0xffff) |0, 10574 s2 = ((adler >>> 16) & 0xffff) |0, 10575 n = 0; 10576 10577 while (len !== 0) { 10578 // Set limit ~ twice less than 5552, to keep 10579 // s2 in 31-bits, because we force signed ints. 10580 // in other case %= will fail. 10581 n = len > 2000 ? 2000 : len; 10582 len -= n; 10583 10584 do { 10585 s1 = (s1 + buf[pos++]) |0; 10586 s2 = (s2 + s1) |0; 10587 } while (--n); 10588 10589 s1 %= 65521; 10590 s2 %= 65521; 10591 } 10592 10593 return (s1 | (s2 << 16)) |0; 10594} 10595 10596 10597module.exports = adler32; 10598 10599 10600/***/ }), 10601/* 90 */ 10602/***/ (function(module, exports, __webpack_require__) { 10603 10604"use strict"; 10605 10606 10607// Note: we can't get significant speed boost here. 10608// So write code to minimize size - no pregenerated tables
10609// and array tools dependencies. 10610 10611// (C) 1995-2013 Jean-loup Gailly and Mark Adler 10612// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 10613// 10614// This software is provided 'as-is', without any express or implied 10615// warranty. In no event will the authors be held liable for any damages 10616// arising from the use of this software. 10617// 10618// Permission is granted to anyone to use this software for any purpose, 10619// including commercial applications, and to alter it and redistribute it 10620// freely, subject to the following restrictions: 10621// 10622// 1. The origin of this software must not be misrepresented; you must not 10623// claim that you wrote the original software. If you use this software 10624// in a product, an acknowledgment in the product documentation would be 10625// appreciated but is not required. 10626// 2. Altered source versions must be plainly marked as such, and must not be 10627// misrepresented as being the original software. 10628// 3. This notice may not be removed or altered from any source distribution. 10629 10630// Use ordinary array, since untyped makes no boost here 10631function makeTable() { 10632 var c, table = []; 10633 10634 for (var n = 0; n < 256; n++) { 10635 c = n; 10636 for (var k = 0; k < 8; k++) { 10637 c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); 10638 } 10639 table[n] = c; 10640 } 10641 10642 return table; 10643} 10644 10645// Create table on load. Just 255 signed longs. Not a problem. 10646var crcTable = makeTable(); 10647 10648 10649function crc32(crc, buf, len, pos) { 10650 var t = crcTable, 10651 end = pos + len; 10652 10653 crc ^= -1; 10654 10655 for (var i = pos; i < end; i++) { 10656 crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; 10657 } 10658 10659 return (crc ^ (-1)); // >>> 0; 10660} 10661 10662 10663module.exports = crc32; 10664 10665 10666/***/ }), 10667/* 91 */ 10668/***/ (function(module, exports) { 10669 10670module.exports = [["a140","î",62],["a180","î ",32],["a240","î¦",62],["a280","î¥",32],["a2ab","î¦",5],["a2e3","â¬î"],["a2ef","î®î¯"],["a2fd","î°î±"],["a340","î",62],["a380","î ",31,"ã"],["a440","î¦",62],["a480","î¥",32],["a4f4","î²",10],["a540","î",62],["a580","î ",32],["a5f7","î½",7],["a640","î¦",62],["a680","î¥",32],["a6b9","î ",7],["a6d9","î",6],["a6ec","îî"],["a6f3","î"],["a6f6","î",8],["a740","î",62],["a780","î ",32],["a7c2","î ",14],["a7f2","î¯",12],["a896","î¼",10],["a8bc","î"],["a8bf","ǹ"],["a8c1","îîîî"],["a8ea","î",20],["a958","î¢"],["a95b","î£"],["a95d","î¤î¥î¦"],["a989","ã¾â¿°",11],["a997","î´",12],["a9f0","î ",14],["aaa1","î",93],["aba1","î",93],["aca1","î¼",93],["ada1","î",93],["aea1","î ¸",93],["afa1","î",93],["d7fa","î ",4],["f8a1","î´",93],["f9a1","î",93],["faa1","î°",93],["fba1","î",93],["fca1","î¬",93],["fda1","î",93],["fe50","âºî î î âºã³ãâºâºî ãããâºâºã¥®ã¤î ¦ã§ã§ã©³ã§î «î ¬ãã±®ã³ âº§î ±î ²âºªää ⺮ä·âº³âº¶âº·î »ä±ä¬âº»äää¡äî¡"],["fe80","ä£ä©ä¼äâ»ä¥ä¥ºä¥½ä¦ä¦ä¦ ä¦ä¦ä¦ä¦·ä¦¶î¡î¡ä²£ä²ä² 䲡䱷䲢ä´",6,"䶮î¨",93]] 10671 10672/***/ }), 10673/* 92 */ 10674/***/ (function(module, exports) { 10675 10676module.exports = [["0","\u000
vendor: 42,167 bytes, line 10676
106760",127],["a140","ãï¼ããï¼â§ï¼ï¼ï¼ï¼ï¸°â¦â¥ï¹ï¹ï¹Â·ï¹ï¹ï¹ï¹ï½â︱â︳â´ï¸´ï¹ï¼ï¼ï¸µï¸¶ï½ï½ï¸·ï¸¸ãã︹︺ãã︻︼ãã︽︾ãã︿ï¹ããï¹ï¹ããï¹ï¹ï¹ï¹"],["a1a1","ï¹ï¹ï¹ï¹ââââããâµâ²ï¼ï¼ï¼â»Â§ãâââ³â²âââ
âââ¡â â½â¼ã£â
¯ ̄_Ëï¹ï¹ï¹ï¹ï¹ï¹ï¹ï¹ ﹡ï¼ï¼Ã÷±âï¼ï¼ï¼â¦â§â âââ¡ï¹¢",4,"ï½â©âªâ¥â ââ¿ããâ«â®âµâ´âââââââââââââ¥â£ï¼"],["a240","ï¼¼â﹨ï¼ï¿¥ãï¿ ï¿¡ï¼
ï¼ ââ﹩﹪﹫ãããããã¡ããã°å
å
å
å
å
¡å
£å§ç©ç³â",7,"ââââââââ¼â´â¬â¤ââââââââââ"],["a2a1","â®â°â¯âââªâ¡â¢â£â¥â¤â±â²â³ï¼",9,"â
",9,"ã¡",8,"ååå
A",25,"ï½",21],["a340","ï½ï½ï½ï½Î",16,"Σ",6,"α",16,"Ï",6,"ã
",10],["a3a1","ã",25,"ËËËËË"],["a3e1","â¬"],["a440","ä¸ä¹ä¸ä¸ä¹ä¹äºäºäººå¿å
¥å
«å åååååååä¸ä¸ä¸ä¸ä¸«ä¸¸å¡ä¹
ä¹ä¹ä¹äºäº¡å
ååºååå£å士å¤å¤§å¥³ååå寸å°å°¢å°¸å±±å·å·¥å·±å·²å·³å·¾å¹²å»¾å¼å¼æ"],["a4a1","ä¸ä¸ä¸ä¸ä¸°ä¸¹ä¹å°¹äºäºäºäºäºäº¢ä»ä»ä»ä»ä»ä»ä»ä»ä»å
å
å
§å
å
®å
¬åå¶åååå»å¾å¿åå¹ååå
ååååå壬天夫太å¤åå°å°¤å°ºå±¯å·´å¹»å»¿å¼å¼å¿ææ¶æææ¯æææ¤æ¹æ¥æ°ææ¨æ¬ æ¢æ¹æ¯æ¯æ¯æ°æ°´ç«çªç¶ç»çççç¬çä¸"],["a540","ä¸ä¸ä¸ä¸ä¸»ä¹ä¹ä¹ä»¥ä»ä»ä»ä»ä»ä»£ä»¤ä»ä»å
å
ååå¬å¹åºå¸åå åå
åååä»ååå¡å å¯å®å»å¯å¤å³å¬å®å©å¨å¼å¸åµå«å¦åªå²å±å°å¥åå»ååå¤"],["a5a1","央失奴奶åå®å°¼å·¨å·§å·¦å¸å¸å¹³å¹¼å¼å¼å¼å¿
ææææææ¥æ¦æ®æ¬æªæ«ææ£æ¯æ°æ°æ°¸æ±æ±æ°¾ç¯çççç¦ççç¨ç©ç°ç±ç²ç³çç½ç®ç¿ç®çç¢ç³ç¤ºç¦¾ç©´ç«ä¸ä¸ä¹ä¹ä¹©äºäº¤äº¦äº¥ä»¿ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä»²ä»¶ä»»ä»°ä»³ä»½ä¼ä¼å
å
å
å
å
¨"],["a640","å
±åå°åååååå£åå¡å å°å±åååååååååååååååå ååå³å°å¨åå¬å¯å©å¤å¤å¤·å¤¸å¦å¥¸å¦å¥½å¥¹å¦å¦ååå®å®å®
å®å¯ºå°å±¹å·å¸å¹¶å¹´"],["a6a1","å¼å¼å¿å¿æææææ£æææ¶æ©æ¨æ¬ææ²æ³ææ½æ´æ±æµæ¬¡æ¤æ»æ°æ±æ±æ±æ±æ± æ±æ±æ±¡æ±æ±æ±ç°ççç¾ç«¹ç±³ç³¸ç¼¶ç¾ç¾½èèèèè³è¿èèèè£èªè³è¼èèèè®è²è¾è«è¡è¡è¡£è¥¿é¡ä¸²äº¨ä½ä½ä½ä½ä½ä¼´ä½ä½ä¼°ä½ä½ä¼½ä¼ºä¼¸ä½ä½ä¼¼ä½ä½£"],["a740","ä½ä½ 伯ä½ä¼¶ä½ä½ä½ä½å
å
å
å
µå¶å·å¥å¤å©åªå¨å«å©åªå¬å£å³åµåååå¾å¦åå§ååå³åååå©åå¹å»å¸å®åµå¶å å¼åå±å«åå¬åªå°å¤å«åååå"],["a7a1","ååå¾ååå»å£¯å¤¾å¦å¦å¦¨å¦å¦£å¦å¦å¦å¦¤å¦å¦å¦¥ååååå®å®å®å°¬å±å±å°¿å°¾å²å²å²å²å·«å¸åºåºåºå»·å¼å¼å½¤å½¢å½·å½¹å¿å¿å¿å¿å¿±å¿«å¿¸å¿ªæææææææ¶ææææ¼æ¾æ¹æ³ææ¯ææ®æææææ¹æ»æ¸æ±æ´æææææææææææ "],["a840","æææ¥æ¯æ±æ±æ²æ²æ²æ²æ²
æ²æ±ªæ±ºæ²æ±°æ²æ±¨æ²æ²æ±½æ²æ±²æ±¾æ±´æ²æ±¶æ²æ²æ²æ²ç¶ç¼ç½ç¸ç¢ç¡ç çççç¬ç«ç·ç¸çç¯ç£ç§ç§ç¦¿ç©¶ç³»ç½èèèèèèè²è¯è"],["a8a1","èèè¦è§è¨è°·è±è±è²èµ¤èµ°è¶³èº«è»è¾è¾°è¿è¿è¿
è¿å·¡éé¢éªé¦é£é
ééé²é®é±éªé¬ä¸¦ä¹ä¹³äºäºäºäº«äº¬ä½¯ä¾ä¾ä½³ä½¿ä½¬ä¾ä¾ä¾ä¾ä½°ä½µä¾ä½©ä½»ä¾ä½¾ä¾ä¾ä½ºå
å
å
å
©å
·å
¶å
¸å½å½å»å¸å·åºå°å®å¶åå¾å»ååååå¦å·å¸å¹åååå³åµ"],["a940","åå¸ååå»å·åååå¼åå±å¶ååå¢å¨åå½ååºåå·åªå©å¡å¦å¤å¼å¤å¥å¥å¥å¥å¥å¦¾å¦»å§å¦¹å¦®å§å§å§å§å§å§å§å¦¯å¦³å§å§
åå¤å£å®å®å®å®å®å®å°å±å±
"],["a9a1","å±å²·å²¡å²¸å²©å²«å²±å²³å¸å¸å¸å¸å¸å¸å¹¸åºåºåºåºåºå»¶å¼¦å¼§å¼©å¾å¾å½¿å½¼å¿å¿ å¿½å¿µå¿¿æææ¯æµææªææ¡æ§æ©æ«ææææ¿æ¾ææ¿ææææ¿ææ¹æææ«æææææ¨æ½æ¼æææææµææ±æææææ¬ææ¾æ§æ¼æºææææææææææ"],["aa40","æææææææ±ææ³æ·ææææ¯æ°æ¿ææ¾ææµæææ¼æªæ²æ¬£æ¦æ§æ¿æ°æ°æ³£æ³¨æ³³æ²±æ³æ³¥æ²³æ²½æ²¾æ²¼æ³¢æ²«æ³æ³æ²¸æ³æ²¹æ³æ²®æ³æ³
æ³±æ²¿æ²»æ³¡æ³æ³æ²¬æ³¯æ³æ³æ³ "],["aaa1","çççççç¬çç¸çç§ç©çççççç©ç¨çç«ç¥ç½çççççç²ç´ç¥ç½ç¤¾ç¥ç¥ç§ç§ç©ºç©¹ç«ºç³¾ç½ç¾ç¾è
èºè¥è¢è±è¡è«è©è´èªè¯è¥è¾èè³èèèè½èè¹è±è¬è¥è¯è¸è£è°è¾è·èè±å表è»è¿è¿è¿éµé¸é±é¶ééé·éééé¿é»é"],["ab40","éé¹é¨ééäºäºäº®ä¿¡ä¾µä¾¯ä¾¿ä¿ ä¿ä¿ä¿ä¿ä¾¶ä¿ä¿ä¿ä¿ä¾®ä¿ä¿ä¿ä¿ä¿ä¿ä¾·å
ååå åååååååååååååå»ååå¬åå¨ååå¸å¦å³ååå½åªå"],["aba1","ååå¯å«å±å»å©å§å¿å¿ååå å£å¢åå®åå¥å¥å¥å¥å¥å§å§å§¿å§£å§¨å¨å§¥å§ªå§å§¦å¨å§»å©å®£å®¦å®¤å®¢å®¥å°å±å±å±å±å³å³å··å¸å¸¥å¸å¹½åº 度建å¼å¼å½¥å¾å¾
å¾å¾å¾å¾å¾æææ æ¥ææ¨ææ°æ¨æ¢æææ¬æ«æªæ¤æææææ¼æææ®æ½ææ±æ·"],["ac40","æ¯æ¬æ¾æ´æææ¿æ
æ«æ½æ¢æ¥ææ æ§æ¯ææ¨æ±æ¤æ·æ¿ææ±æææ¬æ¶æ¯æµæ©æ¯æææ´ææ¥æ¸æææ³æ°ææ¢æææªæ®æ®æ®µæ¯æ¯æ°æ³æ´æ´²æ´ªæµæ´¥æ´æ´±æ´æ´"],["aca1","æ´»æ´½æ´¾æ´¶æ´æ³µæ´¹æ´§æ´¸æ´©æ´®æ´µæ´æ´«ç«çºç³ç¬ç¯çç¸ç®ç¤ç°ç²ç¯ç´ç©ç ç¡ç·çç»ç²ççç³ççççççç«ç¤ç¥ç¢ç£ç¸ççççççç
çç¹ç¸ççç¾ç¼ççç ç ç ç ç¥ç¥ç¥ç¥ç¦¹ç¦ºç§ç§ç§ç©¿çªç«¿ç«½ç±½ç´ç´
ç´ç´ç´ç´ç´ç¼¸ç¾ç¾¿è"],["ad40","èèèè¶èè¥èèèèè¡èèèè¤èè´è¢è§èè
è£èè¦èè¥èèèèè±èèèèèèèè¯èèè¹è»èºè¡è¡«è¦è§è¨è¨è¨è²è² 赴赳趴è»è»è¿°è¿¦è¿¢è¿ªè¿¥"],["ada1","è¿è¿«è¿¤è¿¨ééééé
é
ééééééé¢é©ééé³é 風é£é£é¦é¦ä¹äº³ååå£ä¿¯å¦å¥ä¿¸å©ååå¼åååå俺ååå¨ä¿±å¡ååå俳修ååªä¿¾å«åå
¼å¤å¥å¢ååååååååååªå¿åååå¨ååå·å¼å¥å²ååºåå©åå¡åå®åª"],["ae40","å¦å§åå½åååååååå å¤å¥å¥å¥å¨å¨å¨å¨å¨å¨å§¬å¨ 娣娩娥å¨å¨å«å±å®°å®³å®¶å®´å®®å®µå®¹å®¸å°å±å±å±å³å³½å³»å³ªå³¨å³°å³¶å´å³´å·®å¸å¸«åº«åºåº§å¼±å¾å¾å¾æ"],["aea1","æ£æ¥ææææ©æ¯æææææææ
æææ³ææ¿ææ¾æ¯ææææææºææ½æªæ«æ¨æææææææ
æææææææ
ææ¸ææææ ¡æ ¸æ¡æ¡æ¡æ ¹æ¡æ¡æ ©æ¢³æ æ¡æ¡æ ½æ´æ¡æ¡æ ¼æ¡æ ªæ¡
æ æ æ¡æ®æ®æ®·æ°£æ°§æ°¨æ°¦æ°¤æ³°æµªæ¶æ¶æ¶æµ¦æµ¸æµ·æµæ¶"],["af40","æµ¬æ¶æµ®æµæµ´æµ©æ¶æ¶æµ¹æ¶
æµ¥æ¶ççç¤çççç¹ç¹ç¼ç¹ç½ç¸ç·çççç®ç çªççççççç¾ç
çç²ç³ç½ç¼ç¹çç¸çç°çççç©çç ç¨ç©ç °ç §ç ¸ç ç ´ç ·"],["afa1","ç ¥ç ç ç ç ²ç¥ç¥ç¥ ç¥ç¥ç¥ç¥ç¥ç¥ç§¤ç§£ç§§ç§ç§¦ç§©ç§çªçªç«ç¬ç¬ç²ç´¡ç´ç´ç´ç´ ç´¢ç´ç´ç´ç´ç´ç´ç´ç´ç¼ºç½ç¾ç¿
ç¿èèèèèè½è¿è±èè°è
èè´èè¸è³èè½èè¼è¯èè¬èèèªè«è¨è¬è»è«èèèè¸èèèµè´èè²è¹è¶èèè±è¨è"],["b040","èèèªèè¤è©èè£èè¡°è¡·è¢è¢è¡½è¡¹è¨è¨è¨è¨è¨è¨è¨è¨è¨è¨è¨è±è±ºè±¹è²¡è²¢èµ·èº¬è»è»è»è¾±ééè¿·é迺迴é追é
迸éé¡éé¢é
é
é
ééééééé¢é£é¡"],["b0a1","ééé¤ééé»é£¢é¦¬éª¨é«é¬¥é¬²é¬¼ä¹¾åºå½ååååååå¥å¶åååµå´å·ååå¯åå
åå°åªå¯åååååååå¿åå¾åæ¼ååªå¦ååå¡ååå±åååå¯å¤å¸å®åå¬å£å³ååååååå
å å å å¤åºå å µå·å¹å¤ 奢娶å©å©å©¦å©ªå©"],["b140","娼婢å©å©å©å°å¯å¯
å¯å¯å®¿å¯å°å°å°å± å±å±å´å´å´å´å´å´¢å´å´©å´å´å´¤å´§å´å·¢å¸¸å¸¶å¸³å¸·åº·åº¸åº¶åºµåº¾å¼µå¼·å½å½¬å½©å½«å¾å¾å¾å¾å¾¡å¾ 徿¿æ£ææ æ¨ææ´æ¦æ½"],["b1a1","æ
æ»æµææ¼æææææ¸ææææææ æ§æ²ææ¢æ¥æ·æ§ææªæ±æ©ææææ«æ¨ææææ¡æ¬ææææ»æ©æ¨æºæææææåæææææææ¬æææææææ¤æ¨æ¦ææ¹åææ¢æ¢¯æ¢¢æ¢æ¢µæ¡¿æ¡¶æ¢±æ¢§æ¢æ¢°æ¢æ£æ¢æ¢æ¢
æ¢æ¢æ¢¨æ¢æ¢¡æ¢æ¬²æ®º"],["b240","æ¯«æ¯¬æ°«æ¶æ¶¼æ·³æ·æ¶²æ·¡æ·æ·¤æ·»æ·ºæ¸
æ·æ·æ¶¯æ·æ¶®æ·æ·¹æ¶¸æ··æ·µæ·
æ·æ¸æ¶µæ·æ·«æ·æ·ªæ·±æ·®æ·¨æ·æ·æ¶ªæ·¬æ¶¿æ·¦ç¹ççç½ç¯ç½ç½çççççççç
çççç¾çç ç¶"],["b2a1","ç·çç¢ç¥ç¦ç¢ç°ççççµççççççç·ç¾ç¼ç¶ç¸çºç¡«ç¡ç¡ç¥¥ç¥¨ç¥ç§»çªçªç¬ 笨ç¬ç¬¬ç¬¦ç¬ç¬ç¬®ç²ç²ç²çµçµçµ±ç´®ç´¹ç´¼çµç´°ç´³çµç´¯çµç´²ç´±ç¼½ç¾ç¾ç¿ç¿ç¿èèèè¯èè£è«è©è°è¤èèµè·è¶è¹èèèè¸è¢èè½è«èèèèè è·è»è¼"],["b340","èè§è彪èèè¶èèµèèè±è¯èè¡è¢è¢è¢«è¢è¢è¢è¢è¦è¦è¨ªè¨è¨£è¨¥è¨±è¨è¨è¨è¨¢è±è±è²©è²¬è²«è²¨è²ªè²§èµ§èµ¦è¶¾è¶ºè»è»ééééé£éééééé éé¢ééé"],["b3a1","é¨éé½é
ééµé¦é£é§éé©ééªéµé³é¸é°é´é¶é·é¬ééªé©ç« ç«é é é鳥鹵鹿麥麻å¢åå
ååååååæå±å²å´åµå©ååååå¥å»åå§å¼ååååååªååååå³å®åå¾å²åå»å¬å±å¾åå«ååå ¯å ªå ´å ¤å °å ±å ¡å å å£¹å£ºå¥ "],["b440","å©·åªå©¿åªåªåª§å³å±å¯å¯å¯å¯å°å°å°±åµåµå´´åµå·½å¹
帽å¹å¹å¹¾å»å»å»å»å¼¼å½å¾©å¾ªå¾¨ææ¡æ²æ¶æ ææ£æºææ°æ»æ´æ
¨æ±ææ¶ææææææ£ææææ©æææ"],["b4a1","ææ£ææ¡æææ®æ¶æ´æªææææ¹ææ¦æ¢æ£æææ¯æ®æ°æ´æ¶æ¯ææºæ¾æ·æ¾æ¿æææ£ºæ£æ£ æ£æ£æ¤
æ£æ£µæ£®æ£§æ£¹æ£æ£²æ££æ£æ£æ¤æ¤æ¤æ£æ£æ¥®æ£»æ¬¾æ¬ºæ¬½æ®æ®æ®¼æ¯¯æ°®æ°¯æ°¬æ¸¯æ¸¸æ¹æ¸¡æ¸²æ¹§æ¹æ¸ æ¸¥æ¸£æ¸æ¹æ¹æ¸¤æ¹æ¹®æ¸æ¸¦æ¹¯æ¸´æ¹æ¸ºæ¸¬æ¹æ¸æ¸¾æ»"],["b540","æºæ¸æ¹æ¹£æ¹æ¹²æ¹©æ¹ççç¦ç°ç¡ç¶ç
®ççççç¶ç¥ç´ç©çºçªç³ç¢ç¥çµç¶ç´ç¯çç¦ç¨ç¥ç¦ç«çªç¢çç£çççç ç»ç¼ççç´çççç¡ç¡¬ç¡¯ç¨ç¨ç¨ç¨
ç¨çª"],["b5a1","çªçªç«¥ç«£ççççççççççç²ç²¥çµçµçµ¨çµç´«çµ®çµ²çµ¡çµ¦çµ¢çµ°çµ³åç¿ç¿èèè
è
è
è
è
è
è¹è
è¾è
è
è
´èèè©èè¸èè è
èèè¯è±è´èèè°èèè½è²èè¸èèèèèèèèèèèèè¤èèè¡è£è£è¢±è¦è¦è¨»è© è©è©è¨¼è©"],["b640","è©è©è©è©è¨´è¨ºè¨¶è©è±¡è²è²¯è²¼è²³è²½è³è²»è³è²´è²·è²¶è²¿è²¸è¶è¶
è¶è·è·è·è·è·è·è·è·è»»è»¸è»¼è¾é®éµé±é¸é²é¶ééµéé¾é
£é
¥éééé£éééééééééé"],["b6a1","ééééééé½é
ééé²ééé
éééé¯é²éé
é é 飧飪飯飩飲é£é¦®é¦é»é»é»äºååµå²å³å
å¾å¬å·å»å¯åå¿å·å½åå¦å¤å¢å£å¯åå¨åå¦ååååå£å¤å¯åå¡å
åå¥åååå¡å¡å¡å¡å¡å¡å¡«å¡å¡å¡å¡¢å¡å¡å¥§å«å«å«åª¾åª½åª¼"],["b740","媳å«åª²åµ©åµ¯å¹å¹¹å»å»å¼å½å¾¬å¾®æææ
ææ³ææ¹æææ
æ
æ
æ
æ¾æ´æ§æææ·æ¡æ¢ææ¾ææªææ½æ¬æææææ¶ææææ¬ææ°ææææææææææ¦æ¥"],["b7a1","æ¥æ¥·æ¥ æ¥æ¥µæ¤°æ¦æ¥æ¥¨æ¥«æ¥æ¥æ¥¹æ¦æ¥æ¥£æ¥ææ²æ¯æ®¿æ¯æ¯½æº¢æº¯æ»æº¶æ»æºæºæ»æ»
æº¥æºæº¼æººæº«æ»æºæºæ»æ»æºªæº§æº´ç
ç
ç
©ç
¤ç
ç
§ç
ç

¦ç
ç
¥ç
ç
ç
¨ç
çºçç·ç
ç¿ç¾ç¯çççççç¿çççç¶ç¸çç°çç²ç±çºç¿ç´ç³çççç«ç¦çç£"],["b840","ç¹çªç¬çç¥ç¨ç¢ç®ç¢ç¢°ç¢ç¢ç¢ç¢ç¡¼ç¢ç¢ç¡¿ç¥ºç¥¿ç¦è¬ç¦½ç¨ç¨ç¨ ç¨ç¨ç¨çªçª ç·ç¯ç ç®ç§ç²±ç²³ç²µç¶çµ¹ç¶ç¶ç¶çµç½®ç½©ç½ªç½²ç¾©ç¾¨ç¾¤èèèèè
±è
°è
¸è
¥è
®è
³è
«"],["b8a1","è
¹è
ºè
¦è
èèè·è½è±èµè¦è«èè¬èè¼èµè¡è£è©èèèèèè¹èèèèè¾è»èèèèè¡è£è£è£è£è£è£è£¡è£è£è£è¦è§£è©«è©²è©³è©¦è©©è©°èªè©¼è©£èª 話èª
è©è©¢è©®è©¬è©¹è©»è¨¾è©¨è±¢è²è²è³è³è³è³è²²è³è³è³
è·¡è·è·¨è·¯è·³è·ºè·ªè·¤è·¦èº²è¼è¼è»¾è¼"],["b940","è¾è¾²éééééé¼éééééééé¾éééé
Ž
ªé
©éé·éé¸é½éé¾ééé¤éé´ééé
é¹é¿éééééééééé·é»é¹é¶éé´é¶é é é é é é 飼飴"],["b9a1","飽飾馳馱馴髡鳩éºé¼é¼é¼ å§å®å¥ååååååå±åå©å
¢å³ååå±åå¾åååå½åååååå·ååååå¶åå塵塾å¢å¢å¢å¡¹å¢
塽壽夥夢夤奪奩嫡嫦嫩å«å«å«å«£åµå¯å¯§å¯¡å¯¥å¯¦å¯¨å¯¢å¯¤å¯å°å±¢å¶å¶å¹å¹£å¹å¹å¹å»å»å¼å½å½°å¾¹æ
"],["ba40","æ¿æ
æ
·æ
¢æ
£æ
æ
æ
æ
µæªææææ¤æ¸ææºææ§æ´ææ»æ²æ¡æææ¢æ¨ææ¦æ¦¨æ¦æ§æ¦®æ§æ§æ¦æ¦·æ¦»æ¦«æ¦´æ§æ§æ¦æ§æ¦¦æ§æ¦£æææ°³æ¼³æ¼æ»¾æ¼æ»´æ¼©æ¼¾æ¼ æ¼¬æ¼æ¼æ¼¢"],["baa1","æ»¿æ»¯æ¼æ¼±æ¼¸æ¼²æ¼£æ¼æ¼«æ¼¯æ¾æ¼ªæ»¬æ¼æ»²æ»æ»·ççç
½çççç¾ççççç¤ç£çªç°çççç§ççççç¡ç£çç½ç¿ç¡ç£ç¢ç¢§ç¢³ç¢©ç¢£ç¦ç¦ç¦ç¨®ç¨±çªªçª©ç«ç«¯ç®¡ç®ç®çµç®ç®ç®ç®ç®¸ç®ç®ç²¹ç²½ç²¾ç¶»ç¶°ç¶ç¶½ç¶¾ç¶ ç·ç¶´ç¶²ç¶±ç¶ºç¶¢ç¶¿ç¶µç¶¸ç¶ç·ç·ç¶¬"],["bb40","ç½°ç¿ ç¿¡ç¿èèèè
èèèèè
¿èè§èºèèèèèè¿èèèèè²èèè¸èèèè¼èèè¿èè»è¢è¥è´èèè·è©è£³è¤è£´è£¹è£¸è£½è£¨è¤è£¯èª¦èªèªèª£èªèª¡èªèª¤"],["bba1","說誥誨èªèªèªèª§è±ªè²è²è³è³è³èµ«è¶è¶è·¼è¼è¼è¼è¼è¾£é ééé£ééé¢éééééé
µé
¸é
·é
´é¸éé
ééé»ééé¨é¼éé¡é¨é©é£é¥é¤ééééééé¼é
é¶é é 颯颱é¤é¤
é¤é¤é§éª¯éª°é«¦éé鳴鳶鳳麼鼻é½ååå»åµå¹åååå
å"],["bc40","åååååå°å²å®å»å¹å²å¿å´å©åååå´å¶å¯å°å¢å¢å¢å¢³å¢å¢®å¢©å¢¦å¥å¬å«»å¬å«µå¬å¬å¯®å¯¬å¯©å¯«å±¤å±¥å¶å¶å¹¢å¹å¹¡å»¢å»å»å»å»£å» å½å½±å¾·å¾µæ
¶æ
§æ
®æ
æ
æ"],["bca1","æ
¼æ
°æ
«æ
¾æ§ææ«ææ¬ææ¤ææ®æ®æ©æ¯æ¹ææ²æææ°æ¥æææ©ææ®ææ«ææ¬ææ¢æ³æµæ·æ¸æ®æ«æ´æ±æ¨£æ¨æ§¨æ¨æ¨æ¨æ§½æ¨¡æ¨æ¨æ§³æ¨æ¨
æ§æ¨æææ®¤æ¯
æ¯æ¼¿æ½¼æ¾æ½æ½¦æ½æ¾æ½æ½æ½¸æ½®æ¾æ½ºæ½°æ½¤æ¾æ½æ»æ½¯æ½ æ½çç¬ç±ç¨ççççç©çç"],["bd40","ç¾çç¿ç ç©çç¤ç¦ç¡ç¢ççºç¤çççççç£ç£
確ç£ç¢¾ç£ç¢¼ç£ç¨¿ç¨¼ç©ç¨½ç¨·ç¨»çª¯çª®ç®ç®±ç¯ç®´ç¯ç¯ç¯ç® ç¯ç³ç· 練緯緻ç·ç·¬ç·ç·¨ç·£ç·ç·ç·©ç¶ç·ç·²ç·¹ç½µç½·ç¾¯"],["bda1","ç¿©è¦èèèè èèèè½èè®è¬èèèè£è¡èè¬è¥è¿èèè´è¶è è¦è¸è¨èèèèè¡è¡è¤è¤è¤è¤è¤è¤èª¼è«è«è«èªè«è«¸èª²è«è«èª¿èª°è«è«èª¶èª¹è«è±è±è±¬è³ è³è³¦è³¤è³¬è³è³¢è³£è³è³ªè³¡èµè¶è¶£è¸«è¸è¸è¸¢è¸è¸©è¸è¸¡è¸èººè¼è¼è¼è¼©è¼¦è¼ªè¼è¼"],["be40","è¼¥é©é®é¨éé·é°éé§é±ééééé
é»é·éªé¬é¤éé³é¼ééé°é²éé±ééééé éééé ¡é «é 颳é¤é¤é¤é¤é§é§é§é§é§é§é§é§éª·é«®é«¯é¬§é
éé·é¯é´é´"],["bea1","é´éº©éº¾é»å¢¨é½åååååååªåååå³åå«å¹å©å¤å¸åªå¨å¥å±å¯å¬å¢å¶å£å¢¾å£å£
奮å¬å¬´å¸å¯°å°å½æ²ææ©æææ¶æ¾æææ°æ
æææ»æ¼ææææææ¿æææ¾æ´æææ¹æææ¸æ¨½æ¨¸æ¨ºæ©æ©«æ©æ¨¹æ©æ©¢æ©¡æ©æ©æ¨µæ©æ©ææ·æ°
æ¿æ¾±æ¾¡"],["bf40","æ¿æ¾¤æ¿æ¾§æ¾³æ¿æ¾¹æ¾¶æ¾¦æ¾ æ¾´ç¾çççççç¹çççççç¨çç£çççç¢ççç´ç¸çºç§ç¥ç ççç¥ç£¨ç£ç£¬ç£§ç¦¦ç©ç©ç©ç©ç©çªºç¯ç°ç¯ç¯¤ç¯ç¯¡ç¯©ç¯¦ç³ç³ç¸"],["bfa1","ç¸ç¸ç¸ç¸£ç¸ç¸ç¸ç¸ç½¹ç¾²ç¿°ç¿±ç¿®è¨è³è©è¨è»èèèèèèè¨è©èèèèªèèèèè¢è衡褪褲褥褫褡親覦諦諺諫諱è¬è«è«§è«®è«¾è¬è¬è«·è«è«³è«¶è«¼è±«è±è²è³´è¹è¸±è¸´è¹è¸¹è¸µè¼»è¼¯è¼¸è¼³è¾¨è¾¦éµé´é¸é²é¼éºé´éé é¶é¸é³é¯é¢é¼é«éé"],["c040","éé¦é¡éé®éé»é§é¨éªéééééééééé¦éé °é ¸é »é ·é é ¹é ¤é¤é¤¨é¤é¤é¤¡é¤é§é§¢é§±éª¸éª¼é«»é«é¬¨é®é´é´£é´¦é´¨é´é´é»é»é¾é¾åªåå¡å²åµåååå
å"],["c0a1","åå£å£å£å£å¬°å¬ªå¬¤åºå°·å±¨å¶¼å¶ºå¶½å¶¸å¹«å½å¾½ææææ¦ææ²æ´ææææ æ°æ¦æ¬æ±æ¢ææææææªæªæªæª¢æªæ«æª£æ©¾æªæªæª ææ®®æ¯æ°æ¿æ¿±æ¿æ¿ æ¿æ¿¤æ¿«æ¿¯æ¾æ¿¬æ¿¡æ¿©æ¿æ¿®æ¿°ç§çç®ç¦ç¥çç¬ç´ç çµçç°ç²ç©ç°ç¦ç¨ççççªç³çªç°ç¬"],["c140","ç§çç¯ç£·ç£ºç£´ç£¯ç¤ç¦§ç¦ªç©çª¿ç°ç°ç¯¾ç¯·ç°ç¯ ç³ ç³ç³ç³¢ç³ç³ç³ç¸®ç¸¾ç¹ç¸·ç¸²ç¹ç¸«ç¸½ç¸±ç¹
ç¹ç¸´ç¸¹ç¹ç¸µç¸¿ç¸¯ç½ç¿³ç¿¼è±è²è°è¯è³èèèºèèè¿è½èè¾è¨èè±èª"],["c1a1","èè¾èèèè¯èèè¨èè§èèè³èèè«è»èºèè褻褶è¥è¤¸è¤½è¦¬è¬è¬è¬è¬è¬è¬ è¬è¬è¬è±è°¿è±³è³ºè³½è³¼è³¸è³»è¶¨è¹è¹è¹è¹è½è¼¾è½è½
輿é¿é½ééééé¹é£ééééé¨éµéé¥ééé¾é¬éé°éééééééé±é¸éééé éé¡é¢¶é¤µé¨"],["c240","駿鮮鮫鮪é®é´»é´¿éºé»é»é»é»é»é¼¾é½å¢åå®å£å£å¬¸å½æ£æ³æ´æ²æ¾ææºæ»æ·æ·ææ¦æª³æª¬æ«æª»æª¸æ«æª®æª¯ææ¸æ®¯ççæ¿¾ç濺ççç»ç¼ç¾ç¸ç·çµç§ç¿ççç"],["c2a1","çç½ç¿ç»ç¼ç¤ç¦®ç©¡ç©¢ç© ç«ç«
ç°«ç°§ç°ªç°ç°£ç°¡ç³§ç¹ç¹ç¹ç¹ç¹¡ç¹ç¹ç½ç¿¹ç¿»è·è¶èèèèè©èèèè°èºè¹è¦è¯è¬è²è è¦è¦²è§´è¬¨è¬¹è¬¬è¬«è±è´
è¹è¹£è¹¦è¹¤è¹è¹è»è½è½éééé«é¬ééééé¢é³é®é¬é°éééééééé¢ééééé¤é£é¦"],["c340","éé¹é¡é¡é¡é¡é¡é¢ºé¤¾é¤¿é¤½é¤®é¦¥é¨é«é¬é¬éééé¯é¯é¯½é¯é¯éµéµéµ é» é¼é¼¬å³å¥å£å£å£¢å¯µé¾å»¬æ²æ·æ¶æµæææ ææ«¥æ«æ«æ«ççç¨çççççççç¢ç¸"],["c3a1","çºç½çç£çççç¡çç¤ç¦±ç©«ç©©ç°¾ç°¿ç°¸ç°½ç°·ç±ç¹«ç¹ç¹¹ç¹©ç¹ªç¾
繳羶羹羸èè©èèªèè¤è¥è·è»è
è è¹è¾è¥ è¥è¥è¥èèèèèèèèèè´è´è¹¼è¹²èºè¹¶è¹¬è¹ºè¹´è½è½è¾ééé±é®é¡éééééééé¢ééé¤éé¨éé´é£éªé§é¡éé»é¡"],["c440","é¡é¡é¢¼é¥
é¥é¨é¨é¬é¯¨é¯§é¯é¯é¶éµ¡éµ²éµªéµ¬éºéºéºéº´å¸å¨å·å¶å´å¼å£¤ååå½å¯¶å·æ¸æºææææ¦æ§æ«¬ç¾ç°ç²çç»çç¢ç¥ç¤¦ç¤ªç¤¬ç¤«ç«ç«¶ç±ç±ç±ç³¯ç³°è¾®ç¹½ç¹¼"],["c4a1","çºç½èèè¦è»è¹èèºèèèèè è 襤覺觸è°è¬è¦è¯èè«è´è´èºèºèº
èºé´éééé½é¡é°é£é¥é¥é¦¨é¨«é¨°é¨·é¨µé°é°é¹¹éºµé»¨é¼¯é½é½£é½¡å·å¸åååå¤å±¬å·æ¼æ¾ææææ©æ«»æ¬æ«ºæ®²ççç§ççç©çç±çºçºç¾¼èèèè £è ¢è ¡è 襪襬覽è´"],["c540","è·è½è´èºèºèºè½è¾¯éºé®é³éµéºé¸é²é«é¢é¸é¹é²é¿é¡§é¡¥é¥é©
é©é©é¨¾é«ééé°é°¥é¶¯é¶´é·é¶¸éºé»¯é¼é½é½¦é½§å¼å»åååå¿å·å·å½æ¿æ¤æ¬æ¡çççç¤çç®ç¬"],["c5a1","ç¦³ç± ç±è¾è½è襲襯觼è®è´è´èºèºè½¡é
éééé½é¾ééé¡«é¥é©é©é«é¬é±é°±é°¾é°»é·é·é¼´é½¬é½ªé¾åå·ææ£æ«æªæ¬æ¬çç«ç±¤ç±£ç±¥çºçºçºè¢è¸è¿è ±è®ééé£é é¤é¨é¡¯é¥é©é©é©é«é«é«é±é±é±é·¥éºé»´å壩æ¬çç±ç²çç½ç¾è ¶è ¹è¡¢è®è®"],["c640","è®è·è´ééªééééé¡°é©é¬¢éé±é·¹é·ºé¹¼é¹½é¼é½·é½²å»³æ¬ç£ç±¬ç±®è »è§èº¡éé²é°é¡±é¥é«é¬£é»ç¤çè®é·é驢驥çºè®èºªé
é½é¾é¼é±·é±¸é»·è±é¿é¸ç¨é©ªé¬±é¸é¸ç±²"],["c940","ä¹ä¹åµååä¸ä¸ä¹äºåï¨å±®å½³ä¸åä¸ä¸®äºä»ä»ä»åå¼å¬å¹å å¤å¤¬å°å·¿æ¡æ®³æ¯æ°ç¿ä¸±ä¸¼ä»¨ä»ä»©ä»¡ä»ä»åååå¢å£å¤å¤¯å®å®å°å°»å±´å±³å¸åºåºå¿æææ°"],["c9a1","æ°¶æ±æ°¿æ°»ç®ç°ç禸èéä¼ä¼ä¼¬ä»µä¼ä»±ä¼ä»·ä¼ä¼ä¼ä¼
ä¼¢ä¼ä¼ä»´ä¼å±åååå¦å¢ååååå¡åå®åªå´å¤¼å¦å¥¼å¦
奻奾奷奿åå°å°¥å±¼å±ºå±»å±¾å·å¹µåºå¼å¼å½´å¿å¿å¿æææ¤æ¡æ¦æ¢ææ ææ¥æ¯æ®æ¾æ¹æ¸æ»æºæ¿æ¼æ³æ°æ±æ±æ±æ±æ±æ±æ±"],["ca40","æ±ç±çç´çµççªç¿ç©µç½è¸è¼èè½è¿è襾éééééé¢é¤é é£ä½ä¼»ä½¢ä½ä½ä½¤ä¼¾ä½§ä½ä½ä½ä½ä¼ä¼³ä¼¿ä½¡åå¹ååå¡åå®åå£å²ååå°å·åªåå
ååå¥å"],["caa1","å½ååå¨å¤åå®å§å¥åå
ååååå¤å¥å¦¦å¦å¦ å¦å¦å¦¢å¦å¦å¦§å¦¡å®å®å°¨å°ªå²å²å²å²å²å²å²å²å²å²å· å¸å¸åºåºåºåºåºå¼
å¼å½¸å½¶å¿å¿å¿å¿å¿¨å¿®å¿³å¿¡å¿¤å¿£å¿ºå¿¯å¿·å¿»æå¿´æºæææææææ±æ»æºæ°æææ·æ½æ²æ´æ·æ°æ´æ³æ²æµæ
æ"],["cb40","æææææææææ¯æ°æ°æ±¸æ±§æ±«æ²æ²æ²æ±±æ±¯æ±©æ²æ±æ²æ²æ²æ±¦æ±³æ±¥æ±»æ²ç´çºç£ç¿ç½ççççºç
ççççççºç¹ççç礽è´èèèèèèèè
èèè"],["cba1","èèè豸è¿è¾¿éé¡é¥éé§é é°é¨é¯é丳ä¾ä½¼ä¾
ä½½ä¾ä¾ä½¶ä½´ä¾ä¾ä½·ä½ä¾ä½ªä¾ä½¹ä¾ä½¸ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä½«ä½®åå¼å¾åµå²å³åå±å¼ååå¼åååå¿ååååå«åºå¾å¥å¬å´å¦åå¯å¡å åå£å§å¤å·å¹å¯å²åå«å±å°å¶ååµå»å³å´å¢"],["cc40","å¨å½å¤å¥
妵妺å§å§å¦²å§å§å¦¶å¦¼å§å§å¦±å¦½å§å§å¦´å§å¢å¥å®å®å±å±å²®å²¤å² 岵岯岨岬å²å²£å²å²¢å²ªå²§å²å²¥å²¶å²°å²¦å¸å¸å¸å¼¨å¼¢å¼£å¼¤å½å¾å½¾å½½å¿å¿¥ææ¦ææ²æ"],["cca1","æ´æææ³æææ¬æ¢æææ®æææææææ½ææ´ææ¾æªæ¶ææ®æ³æ¯æ»æ©æ°æ¸æ½æ¨æ»ææ¼ææææ»ææææ
æ½æææ¶ææ
æ¬æææ¶æ»ææææ´æææºæææææ½ææ¸æ¹ææ¬¥æ®æ¾æ¯æ°æ²æ³¬æ³«æ³®æ³æ²¶æ³æ²æ³§æ²·æ³æ³æ²ºæ³æ³æ³æ³²"],["cd40","æ³æ³æ²´æ²æ²æ²æ³æ³æ´°æ³æ³æ²°æ³¹æ³æ³©æ³ççç
çççççççççªççççççççççç¤ç¡çç¦ç¢ç ç¬ççç¨ç¿çç¾ççç¯ç³ç±ç°çµç¸ç¼ç¹ç»çº"],["cda1","ç·ç¥ç¤¿ç§
穸穻竻籵糽èµèè®è£è¸èµèè è èè«èèèèµè§è®è¼èèºè´è¨è¡è©èè¤èè¶è¢è°è¯èè®è±è¿è¿è¿è¿è¿è¿è¿é²é´é¯é³é°é¹é½é¼éºéä¿ä¿
ä¿ä¾²ä¿ä¿ä¿ä¿ä¿ä¿ä¾»ä¾³ä¿ä¿ä¿ä¾ºä¿ä¾¹ä¿¬ååååå½å¼åååååºå¡åå¥å"],["ce40","åèå·å®åå¶å
åå å°å¼å¢å¾å²åå°åµååå¤ååååååååå¥åå壴å¤å¥å§¡å§å§®å¨å§±å§å§ºå§½å§¼å§¶å§¤å§²å§·å§å§©å§³å§µå§ 姾姴å§å®¨å±å³å³å³å³å³å³"],["cea1","å³å³å³å³å³å³å³å³å³å³å³å³å³å³¸å·¹å¸¡å¸¢å¸£å¸ 帤庰庤庢åºåº£åº¥å¼å¼®å½å¾æ·æ¹ææ²ææ
æææææææææ¤æææ¦æ®ææææææµæææ«æ¹æææ¸æ¶ææææºææ»æ°æææªæ¿æ¶æ¡æ²æµææ¦æ¢æ³æ«æºææ´æ¹æ®ææææ²ææº"],["cf40","ææ»æ¸æææ·æ
æ«æ¤ææµææ³æ·æ¶æ®æ£ææ¹ææ§æ°æ²æ¼ææææ®æ¦ææºææææªææ¬¨æ®æ®æ®¶æ¯æ¯æ¯ æ° æ°¡æ´¨æ´´æ´æ´æ´¼æ´¿æ´æ´æ³æ´³æ´æ´æ´ºæ´æ´æ´æ´æµ"],["cfa1","æ´æ´æ´·æ´æ´æµæ´æ´ æ´¬æ´æ´¢æ´æ´ç·çç¾ç±ç°ç¡ç´çµç©çççç¬ç°ç³ç®çç¤ç¨ç«ççªç¦ç£ç
çççç
ç¹ç¶çµç´ç«ç¿çç¾ççç¸çç¬ç®ç®ççç§çªç¹ççççç
çç·ç»çºç§ç¨ç ç ç ç
ç ç ç ç ç ç ç¥ç¥ç¥ç¥
ç¥ç§ç§ç§ç§ç§çª"],["d040","穾ç«ç¬ç¬ç±ºç±¸ç±¹ç±¿ç²ç²ç´ç´ç´ç½ç¾ç¾ç¾¾èèèèè·èèè èèèèè
è£èèèèèèèè¦èè¿è¡èèè¾è¹èè¨èèèºè«èè´è¬è¡è²èµèè»è¶è°èª"],["d0a1","è¤è èºè³èè·è´è¼è³è¡è¡è¡§è¡ªè¡©è§è¨è¨èµ²è¿£è¿¡è¿®è¿ é±é½é¿éé
é¾éééééééééééåå
ååå¢å°å俵俴å³å·å¬ä¿¶ä¿·ååå å§åµå¯å±åå
ååååå
ååå¡åååååå¢åååå¦å¢ååå§å³å¤åå¿ååå«åå
å±"],["d140","åå»å·å¸å ååååååå ²åååºåå½å¼å¸å¶å¿ååå¹åå¤å¥å¨å¨å¨å¨®å¨å¨å¨å¨å¨å¨³å¬å®§å®å®¬å°å±å±å³¬å³¿å³®å³±å³·å´å³¹å¸©å¸¨åº¨åº®åºªåº¬å¼³å¼°å½§æææ§"],["d1a1","ææ¢æææææææææææææææ²æææ¬ææ
æ¶ææ¤æ¹æææ¼æ©ææ´ææææææ³æææ¸ææææææææææææææææ æ æ¡æ ²æ ³æ »æ¡æ¡æ æ ±æ æ µæ «æ æ ¯æ¡æ¡æ ´æ æ æ æ ¦æ ¨æ ®æ¡æ ºæ ¥æ æ¬¬æ¬¯æ¬æ¬±æ¬´æèæ®æ¯¦æ¯¤"],["d240","æ¯¨æ¯£æ¯¢æ¯§æ°¥æµºæµ£æµ¤æµ¶æ´æµ¡æ¶æµæµ¢æµæµ¯æ¶æ¶æ·¯æµ¿æ¶æµæµ§æµ æ¶æµ°æµ¼æµæ¶æ¶æ´¯æµ¨æ¶æµ¾æ¶æ¶æ´æ¶æµ»æµ½æµµæ¶çççççç¼¹ç¢çççç ççç
ççççç¡çç¸"],["d2a1","ç·ç¶ççºç´ç¾ç¶ç³ç»çççç¥çç¼ç§ç£ç©ççççççççç¨ççç´çµç¡ççç°çç»ççç¿ç¶çºçççççççç£ççççç¢ç§ç £ç ¬ç ¢ç µç ¯ç ¨ç ®ç «ç ¡ç ©ç ³ç ªç ±ç¥ç¥ç¥ç¥ç¥ç¥ç¥ç§«ç§¬ç§ ç§®ç§ç§ªç§ç§ç§çªçªçª
çªçªçªçªç«ç¬"],["d340","ç¬ç¬ç¬
ç¬ç¬ç¬ç¬ç¬ç¬ç²ç²ç²ç²ç²ç²ç²
ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´ç½ç½¡ç½ç½ ç½ç½ç¾ç¾ç¿ç¿ç¿èè¾è¹èºè²è¹èµèè»èèè¯è¥è³èèèèè¥èè¿èè¦èè¢"],["d3a1","èèèèªèè¼èèè¤è è·è¯è©èè
èèèè¬èè§èèèè¢è¨èèèèèèèèèè
è¥èè¡è§èèèèèèè¡è¡è¡è¡µè¡¶è¡²è¢è¡±è¡¿è¡¯è¢è¡¾è¡´è¡¼è¨è±è±è±»è²¤è²£èµ¶èµ¸è¶µè¶·è¶¶è»è»è¿¾è¿µéè¿¿è¿»é迼迶éé ééé£éé¥ééééé¤é
"],["d440","é
é
éé¢éééé¼é££é«é¬¯ä¹¿å°åªå¡åå åååå²åååååå¢åå
åå©å«å£å¤ååå®å³åååå«åå¬å®åååååµå¶å¼ååå´åªåå¢å¶åµå°åå
"],["d4a1","åå²å¥åå¹ååå»ååååå»å å¢å¶åå´å åå½å å¸å å³åå å®å£å²å¥å¬å¡å å¼å å§å å å±å©å°å å å¥å© å©å©å©§å©å¨¸å¨µå©å©å©å©¥å©¬å©å©¤å©å©å©å©å©å©å©åªå¨¾å©å¨¹å©å©°å©©å©å©å©å©å©å²å®å¯å¯å±å´å´å´å´å´ å´å´¨å´å´¦å´¥å´"],["d540","å´°å´å´£å´å´®å¸¾å¸´åº±åº´åº¹åº²åº³å¼¶å¼¸å¾å¾å¾ææææ¾æ°æºææææ¤ææææ±ææ·ææ¿ææææ²æ¥æææ½æ½æææææ«ææ¯æææ®æ¯æµæææ®æ¼æ¤æ»æ"],["d5a1","æ¸æ
ææææ°æææ¥æ¡ææææ¢ææ¡¹æ¢æ¢æ¢æ¡æ¡®æ¢®æ¢«æ¥æ¡¯æ¢£æ¢¬æ¢©æ¡µæ¡´æ¢²æ¢æ¡·æ¢æ¡¼æ¡«æ¡²æ¢ªæ¢æ¡±æ¡¾æ¢æ¢æ¢æ¢ æ¢æ¢¤æ¡¸æ¡»æ¢æ¢æ¢æ¡½æ¬¶æ¬³æ¬·æ¬¸æ®æ®æ®æ®æ®æ°ªæ·æ¶«æ¶´æ¶³æ¹´æ¶¬æ·©æ·¢æ¶·æ·¶æ·æ¸æ·æ· æ·æ·æ¶¾æ·¥æ·æ·æ·æ·´æ·æ¶½æ·æ·°æ¶ºæ·æ·æ·æ·"],["d640","æ·æ·²æ·æ·½æ·æ·æ·£æ¶»çºçç·çç´çç°çç³çç¼ç¿çççç¸ç¶çççç¾ç»ç¼ç¿çççççççç¿çççç¶ç¸çµççç½çççºç¼ç¿ççç´çç¤ç£ççç"],["d6a1","çççççççç¹ç¯çç±ç²ç´ç³ç½ç¥ç»çµç¡ç¡ç¡ç¡ç¡ç¡ç ¦ç¡
ç¡ç¥¤ç¥§ç¥©ç¥ªç¥£ç¥«ç¥¡ç¦»ç§ºç§¸ç§¶ç§·çªçªçªç¬µç笴笥笰笢笤笳ç¬ç¬ªç¬ç¬±ç¬«ç¬ç¬¯ç¬²ç¬¸ç¬ç¬£ç²ç²ç²ç²£ç´µç´½ç´¸ç´¶ç´ºçµ
紬紩çµçµç´¾ç´¿çµç´»ç´¨ç½£ç¾ç¾ç¾ç¾ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿è"],["d740","èèèèèèè¥èèèèè¬èè¡èè§èè¢èè¸è³èºè´è²è´èè£è¨èèºè³è¤è´èèèèèµèè©è½èèèèèªèè¾è¥è¯èèè°è¿è¦èè®è¶èèèè¿è·"],["d7a1","èèè
èºè°èè¹è³è¸èè´è»è¼èè½è¾è¡è¢è¢è¢¨è¢¢è¢ªè¢è¢è¢¡è¢è¢è¢§è¢è¢è¢è¢¤è¢¬è¢è¢è¢è¦è§è§è§è¨°è¨§è¨¬è¨è°¹è°»è±è±è±½è²¥èµ½èµ»èµ¹è¶¼è·è¶¹è¶¿è·è»è»è»è»è»è» 軡é¤ééééé¡é¯éªé°é´é²é³éé«é¬é©é
é
é
é
é
é¬é´é±é³é¸é¤é¹éª"],["d840","é«é·é¨é®éºééé¼éé«é±é¯é¿éªé 飥é¦åååååå£ååååå¨ååååå
åååå¤å§åå¨å¥åå·å
å¢ååååµåå£åå¤å½åå¦å¿åå¡ååå ©å ·"],["d8a1","å å å §å £å ¨åµå¡å ¥å å å ³å ¿å ¶å ®å ¹å ¸å å ¬å »å¥¡åª¯åªåªå©ºåª¢åªå©¸åª¦å©¼åª¥åª¬åªåª®å¨·åªåªåªåªåªåª©å©»å©½åªåªåªåªåªå¯ªå¯å¯å¯å¯å¯å¯å°å°°å´·åµåµ«åµåµå´¿å´µåµåµåµå´³å´ºåµå´½å´±åµåµå´¹åµå´¸å´¼å´²å´¶åµåµ
å¹å¹å½å¾¦å¾¥å¾«ææ¹ææ¢æææ"],["d940","æ²æææ
æµææ¸æ¼æ¾ææææææ¿æææææ±æ°ææ¥æ¨æ¯æææ³ææ æ¶ææ²æµæ¡ææ¾æææææææææææ°æææ²æ§æªæ¤ææ¨æ¥ææææ®ææ"],["d9a1","æ¼æ¬æ»ææ±æ¹æªæ²ææ¤æ£æ¤æ£æ¤ªæ£¬æ£ªæ£±æ¤æ£æ£·æ£«æ£¤æ£¶æ¤æ¤æ£³æ£¡æ¤æ£æ¤æ¥°æ¢´æ¤æ£¯æ£æ¤æ£¸æ£æ£½æ£¼æ£¨æ¤æ¤æ¤æ£æ£æ£æ£æ£¦æ£´æ£æ¤æ£æ£©æ¤æ¤¥æ£æ¬¹æ¬»æ¬¿æ¬¼æ®æ®æ®æ®æ®½æ¯°æ¯²æ¯³æ°°æ·¼æ¹æ¹æ¸æ¹æºæ¸¼æ¸½æ¹
æ¹¢æ¸«æ¸¿æ¹æ¹æ¹³æ¸æ¸³æ¹æ¹æ¹æ¸»æ¸æ¸®æ¹"],["da40","æ¹¨æ¹æ¹¡æ¸±æ¸¨æ¹ æ¹±æ¹«æ¸¹æ¸¢æ¸°æ¹æ¹¥æ¸§æ¹¸æ¹¤æ¹·æ¹æ¹¹æ¹æ¹¦æ¸µæ¸¶æ¹ç çç¯ç»ç®ç±ç£ç¥ç¢ç²çç¨çºççççççç
çççç°ç¢ç±ç³ç§ç²çç¦ç£çµçç®ç¬ç°ç«ç"],["daa1","çç¡çç±ç¤ç£çç©ç ç²ç»ç¯ç¯ç¬ç§çç¡ç¦ççç¤ççççççççç
çççççç¬ç¡ 硤硥ç¡ç¡ç¡±ç¡ªç¡®ç¡°ç¡©ç¡¨ç¡ç¡¢ç¥´ç¥³ç¥²ç¥°ç¨ç¨ç¨ç¨ç¨çªç«¦ç«¤ç笻ççççççç
ç²¢ç²ç²¨ç²¡çµçµ¯çµ£çµçµçµ§çµªçµçµçµçµ«çµçµçµ©çµçµçµç¼¾ç¼¿ç½¥"],["db40","ç½¦ç¾¢ç¾ ç¾¡ç¿èèèè¾èè
è
è
è
è
è½è
èºè¦è®è·è¸è¹èè¼è½è¿èµè»èè¹è£èè¨èè§è¤è¼è¶èèèè«è£è¿èèè¥èè¿è¡èèèèµèèèèèèèè³"],["dba1","èèºèèèªèèè¬è®èè»èè¢èèè¾èè¢è¦èè£èèªèè«èè¬è©èè¨èè¡è¡è¡è¢ºè£è¢¹è¢¸è£è¢¾è¢¶è¢¼è¢·è¢½è¢²è¤è£è¦è¦è¦è§è§è§è©è©è¨¹è©è©è©è©è©è©
è©è©è©è©è©è©è±è²è²è²ºè²¾è²°è²¹è²µè¶è¶è¶è·è·è·è·è·è·è·è·è·è·è·è·
軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩éé´é¯éé¬éé¿é¼éé¹é»éééé
éé
¡é
¤é
é
¢é
ééé¥ééé¦ééééé¿é½ééé§ééé¤ééé
éé»ééééé¾é"],["dca1","ééééééé±é°é¬é°é®é 颩飫鳦黹äºäºäº¶å½å¿åå®ååå´ååå°ååºå±ååå¶å¸ååºå¸å»å¼ååååååååååå©å¿ååååå¢ååå²ååååå¡å¡¨å¡¤å¡å¡å¡å¡¯å¡å¡å¡å¡å¡¥å¡å ½å¡£å¡±å£¼å«å«å«åªºåª¸åª±åªµåª°åª¿å«åª»å«"],["dd40","媷å«å«åª´åª¶å«åª¹åªå¯å¯å¯å°å°³åµ±åµ£åµåµ¥åµ²åµ¬åµåµ¨åµ§åµ¢å·°å¹å¹å¹å¹å¹å»
å»å»å»å»å½å¾¯å¾æ·æ
æ
æ«æ
æ¶æ²æ®æ
æ¯æ
æ©æ
æ é
¨æ£æ¥æ¤æ
æ±æ«ææææ æ¤"],["dda1","æ³æææææ¹æ·æ¢æ£ææ¦æ°æ¨ææµæ¯ææææ¥æ§ææ§ææ®æ¡ææ¯æææææææææææ¸æ æ¥¦æ¥æ¤¸æ¥æ¥¢æ¥±æ¤¿æ¥
æ¥ªæ¤¹æ¥æ¥æ¥æ¥ºæ¥æ¥æ¤µæ¥¬æ¤³æ¤½æ¥¥æ£°æ¥¸æ¤´æ¥©æ¥æ¥¯æ¥æ¥¶æ¥æ¥æ¥´æ¥æ¤»æ¥æ¤·æ¥æ¥æ¥æ¤²æ¥æ¤¯æ¥»æ¤¼ææ
æææææ®ï¨æ¯»æ¯¼"],["de40","æ¯¹æ¯·æ¯¸æºæ»æ»æºæ»æºæºæºæº æº±æº¹æ»æ»æº½æ»æºæ»æº·æº°æ»æº¦æ»æº²æº¾æ»æ»æ»æºæºæºæºæº¤æº¡æº¿æº³æ»æ»æºæº®æº£ç
ç
ç
ç
£ç
ç
ç
ç
¢ç
²ç
¸ç
ªç
¡ç
ç
ç
ç
ç
°ç
ç
ç
"],["dea1","ç
ç
ç
ççççççç¼çç»çºçççççççççççççççççç¡ç¿ç¾ç½çç¹ç·æ¦ç¯ççç·ç¾ç¼ç¹ç¸çç»ç¶ççµç½ççµçççç çççç©ç§çççç ç¢ç¢ç¢ç¢ç¢ç¢ç¢
ç¢ç¢¡ç¢ç¡¹ç¢ç¢ç¢ç¡»ç¥¼ç¦ç¥½ç¥¹ç¨ç¨ç¨ç¨ç¨ç¨ç¨¢ç¨"],["df40","ç¨ç¨çª£çª¢çªç««ç¦ç¤çç´ç©ç²ç¥ç³ç±ç°ç¡ç¸ç¶ç£ç²²ç²´ç²¯ç¶ç¶ç¶ç¶çµ¿ç¶
絺ç¶çµ»ç¶çµ¼ç¶ç¶ç¶çµ½ç¶ç½ç½«ç½§ç½¨ç½¬ç¾¦ç¾¥ç¾§ç¿ç¿è¡è
¤è
è
·è
è
©è
è
¢è
²æ¡è
è
¶è
§è
¯"],["dfa1","è
è
¡èèèèèè
è±è¿èè¶è¹èèè¥èèèè§è°èè½èèè´è³èèèè·èºè´èºèè¸è²è
è©èèè¯èèèè°è¹èèèè¯è
èè»èè¶è³è¨è¾èè«è èè®èèèè·èèºèèµèè¸èèèè¶èè
è£è£è£è£è£è£è£è£è£è¦
è¦è§è§¥è§¤"],["e040","è§¡è§ è§¢è§è§¦è©¶èªè©¿è©¡è¨¿è©·èªèªè©µèªèªè©´è©ºè°¼è±è±è±¥è±¤è±¦è²è²è²
è³èµ¨èµ©è¶è¶è¶è¶è¶è¶è¶è¶è¶è·°è· 跬跱跮è·è·©è·£è·¢è·§è·²è·«è·´è¼è»¿è¼è¼è¼
è¼è¼è¼è¼éé¿"],["e0a1","ééé½ééééééééé
®é
¯ééé°éºé¦é³é¥ééé®éééé¬éé é§é¯é¶é¡é°é±éé£éé²ééééé²ééééééééééºé½é¸éµé³é·é¸é²é é é 颬飶飹馯馲馰馵éªéª«é鳪é³é³§éºé»½å¦ååå¨å³ååªåå¤åå¬å°å¯å£å "],["e140","åååå©å«å°å¬å§åååå¼ååååååºååå¿å¹å¢å¡¼å¢å¢å¢å¢å¡¿å¡´å¢å¡ºå¢å¢å¢å¡¶å¢å¢å¡»å¢å¢å£¾å¥«å«å«®å«¥å«å«ªå«å«å««å«³å«¢å« å«å«¬å«å«å«å«¨å«å·å¯ "],["e1a1","寣屣å¶å¶åµ½å¶åµºå¶åµ·å¶å¶å¶åµ¾åµ¼å¶åµ¹åµ¿å¹å¹å¹å»å»å»å»å»å»å»å»å»å½å½å½¯å¾¶æ¬æ¨æ
æ
æ
±æ
³æ
æ
æ
²æ
¬ææ
´æ
æ
ºæ
æ
¥æ»æ
ªæ
¡æ
æ©æ§æ«æ«ææææ´æ¶æ²æ³æ½æµæ¦æ¦æææææææ ææ¿æ¿æ¬æ«ææ¥æ·æ³æ æ¡æ ææ
ææ¢æ¦±æ¦¶æ§"],["e240","æ¦ æ§æ¦æ¦°æ¦¬æ¦¼æ¦æ¦æ¦æ¦§æ¦æ¦©æ¦¾æ¦¯æ¦¿æ§æ¦½æ¦¤æ§æ¦¹æ§æ¦æ§æ¦³æ¦æ¦ªæ¦¡æ¦æ§æ¦æ¦æ§æ¦µæ¦¥æ§ææææ®æ®æ® æ¯æ¯æ¯¾æ»æ»µæ»±æ¼æ¼¥æ»¸æ¼·æ»»æ¼®æ¼æ½æ¼æ¼æ¼§æ¼æ¼»æ¼æ»æ¼"],["e2a1","æ¼¶æ½³æ»¹æ»®æ¼æ½æ¼°æ¼¼æ¼µæ»«æ¼æ¼æ½æ¼
æ»½æ»¶æ¼¹æ¼æ»¼æ¼ºæ¼æ¼æ¼æ¼æ¼¡ççççç
ççç
»ççççççççççççç¢ç³ç±çµç²ç§ç®çççç½ççççççççç¸çç¼ç
çç®çç¯ç¾ç碲碪碴ç¢ç¢¨ç¡¾ç¢«ç¢ç¢¥ç¢ 碬碢碤ç¦ç¦ç¦ç¦ç¦ç¦ç¦"],["e340","ç¦ç¦ç¦ç¦ç¨«ç©ç¨°ç¨¯ç¨¨ç¨¦çª¨çª«çª¬ç«®ç®ç®ç®ç®ç®ç®ç®ç®ç®ç®ç®
ç®åç®ç®¤ç®ç²»ç²¿ç²¼ç²ºç¶§ç¶·ç·ç¶£ç¶ªç·ç·ç·
ç¶ç·ç·ç·ç·ç·ç¶¯ç¶¹ç¶ç¶¼ç¶ç¶¦ç¶®ç¶©ç¶¡ç·ç½³ç¿¢ç¿£ç¿¥ç¿"],["e3a1","è¤èèèèèèèèèèèè¤è¡èèºèèè¬è®è«è¹è´èèèªèè±èèè§è»è¢èèèèè©è¯è¨èèè¶èè èèèèè°èè¡è³è£è¨è«èè®èè¡èèèè¬èè¾èè è²èªèè¼èèºè±èµèè¦è§è¸è¤èè°è裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫è¦è¦¡è¦è¦è§©è§«è§¨èª«èªèªèªèªèªè°½è±¨è±©è³è³è³è¶è¸è¸è·¿è¸è·½è¸è¸è¸è¸è¸
è·¾è¸è¸è¼è¼è¼è¼é£éé é¢éééé¤é¡éé
ºé
²é
¹é
³é¥é¤é¶ééºé ééªé"],["e4a1","é¦éé«é¹éé¿é£é®éééé¢é½éé¡ééééé§é¾éé©ééééé¡é¿éé½éºé¾éééé»ééé¿ééé é¢é¢®é¤é¤é¤é¦é¦é§é¦¹é¦»é¦ºé§é¦½é§éª±é«£é«§é¬¾é¬¿é é¡é鳱鳲鳵麧å¿åå°å¸ååå¶å¾ååå½åååå±å¯ååååµååååå"],["e540","ååå³å½å¬å¾å¸åªåºå墫å¢å¢±å¢ 墣墯墬墥墡壿嫿嫴嫽嫷嫶å¬å«¸å¬å«¹å¬å¬å¬
å¬å±§å¶å¶å¶å¶å¶¢å¶å¶å¶ å¶å¶¡å¶å¶å¹©å¹å¹ å¹ç·³å»å»å»¡å½å¾²æææ
¹æ±æ°æ¢æ"],["e5a1","æææ¯ææææªæ¡ææ
¦æ³ææ®æ°ææ æ
æææææææ£ææ¨æ±ææ¶æºæ¹æ»æ²æ³æµæ°æ©æ²æ·æªæ¯æ¨æ¨æ¨æ§¥æ§¸æ¨æ§±æ§¤æ¨ æ§¿æ§¬æ§¢æ¨æ¨æ§¾æ¨§æ§²æ§®æ¨æ§·æ§§æ©æ¨æ§¦æ§»æ¨æ§¼æ§«æ¨æ¨æ¨æ¨¥æ¨æ§¶æ¨¦æ¨æ§´æ¨ææ®¥æ®£æ®¢æ®¦æ°æ°æ¯¿æ°æ½æ¼¦æ½¾æ¾æ¿æ¾"],["e640","æ¾æ¾æ¾æ½¢æ½æ¾
æ½æ¾æ½¶æ½¬æ¾æ½æ½²æ½æ½æ½æ¾æ¾æ½æ¼æ½¡æ½«æ½½æ½§æ¾æ½æ¾æ½©æ½¿æ¾æ½£æ½·æ½ªæ½»ç²ç¯çç°ç çç©çµçç¥çç¤ç¡çªçç§ç³ççççççç ççç¡çç"],["e6a1","ç¢çççççç½ç
çç¼ç¹ççç¾ç¥ççççç£çç¨çççççççççç£ç¢»ç£ç£ç£ç£ç£ç£ç£ç£ç£ç¦ç¦¡ç¦ ç¦ç¦¢ç¦æ¶ç¨¹çª²çª´çª³ç®·ç¯ç®¾ç®¬ç¯ç®¯ç®¹ç¯ç®µç³
ç³ç³ç³ç··ç·ç·ªç·§ç·ç·¡ç¸ç·ºç·¦ç·¶ç·±ç·°ç·®ç·ç½¶ç¾¬ç¾°ç¾ç¿ç¿«ç¿ªç¿¬ç¿¦ç¿¨è¤è§è£è"],["e740","èèè¢èèèèèèèèèè¤è»èèè©èèèèèè§èè»è«èºèèè´èªè²èè·è«è³è¼èèªè©èè¾è¨èè®èè½èè¶è±è¦è§è¨è°è¯è¹èè è°èèè¯è¢"],["e7a1","èè£è¤è·è¡è³èèèèè¡èèèèèªèèèèè¯è¬èºè®èè¥èè»èµè¢è§è©è¡è¤
è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¦¢è¦¤è¦£è§è§°è§¬è«è«èª¸è«è«è«è«èª»è«èª¾è«è«
è«è«èªºèª½è«è°¾è±è²è³¥è³è³è³¨è³è³è³§è¶ è¶è¶¡è¶è¸ 踣踥踤踮è¸è¸è¸è¸è¸è¸¦è¸§"],["e840","è¸è¸è¸è¸è¸è¸è¸è¼¬è¼¤è¼è¼è¼ è¼£è¼è¼é³é°é¯é§é«é¯é«é©éªé²é¦é®é
éééééééééééé¶éé±ééé©éééé¯éé¨éééé¦éééé éé§éé"],["e8a1","éµé¡éé´é¼é¬é«é®é°é¤é¢éé
ééééééééé é é ¦é ©é ¨é é é §é¢²é¤é£ºé¤é¤é¤é¤é¤é§é§é§é§é§é§é§é§é§é§é§é§éª³é«¬é««é«³é«²é«±ééé§é´é±é¦é¶éµé°é¨é¤é¬é³¼é³ºé³½é³¿é³·é´é´é³¹é³»é´é´
é´éºé»é¼é¼ååååååå´å¡å°å å®"],["e940","å³å¦å£åå²åå·ååå£å¢½å£å¢¿å¢ºå£å¢¼å£å¬å¬å¬å¬¡å¬å¬å¬å¬å¬¨å¬å¬ å¬å¯¯å¶¬å¶±å¶©å¶§å¶µå¶°å¶®å¶ªå¶¨å¶²å¶å¶¯å¶´å¹§å¹¨å¹¦å¹¯å»©å»§å»¦å»¨å»¥å½å¾¼ææ¨ææ
æ´ææææº"],["e9a1","æ¿æ¸æææææææ½ææææ³ææ³æ¿æ¼æ¢ææ¾æææææ½æ»æºææ£æ¨´æ©¦æ©æ©§æ¨²æ©¨æ¨¾æ©æ©æ©¶æ©æ©æ¨¨æ©æ¨»æ¨¿æ©æ©ªæ©¤æ©æ©æ©æ©¯æ©©æ© æ¨¼æ©æ©æ©æ©æ©æ©ææææ®§æ®ªæ®«æ¯æ¯æ°æ°æ°æ¾æ¿æ¾£æ¿æ¾¼æ¿æ¿æ½æ¿æ¾½æ¾æ¿æ¾¨çæ¾¥æ¾®æ¾ºæ¾¬æ¾ªæ¿æ¾¿æ¾¸"],["ea40","æ¾¢æ¿æ¾«æ¿æ¾¯æ¾²æ¾°ç
çç¿ç¸ççççççççç½çç¼çççççç©ç¦ç§ç¬ç¥ç«çªç¿çç çççç¡ççç¯çç±ç½ç³ç¼çµç²ç°ç»ç¦ççç¡ççç¢ç£çç"],["eaa1","çç£ç£©ç£¥ç£ªç£ç££ç£ç£¡ç£¢ç£ç£ç£ 禤ç©ç©ç©çª¶çª¸çªµçª±çª·ç¯ç¯£ç¯§ç¯ç¯ç¯¥ç¯ç¯¨ç¯¹ç¯ç¯ªç¯¢ç¯ç¯«ç¯ç¯ç³ç³ç³ç³ç³ç¸ç¸¡ç¸ç¸ç¸ç¸ ç¸ç¸ç¸ç¸ç¸ç¸¢ç¸ç¸ç¸ç¸ç¸ç¸¥ç¸¤ç½ç½»ç½¼ç½ºç¾±ç¿¯èªè©è¬è±è¦è®è¹èµè«è°è¬è´è²è·è§è²èèèèè
è«èèè¡è"],["eb40","èèè¤èè¢èèèè£è¾èè±èè®èµèè§è èè¦èèè¥è¬è£è¥è¤èèèèèèèèèè¹èè£è
èèèèèèèèè¤è¤¦è¤°è¤è¤®è¤§è¤±è¤¢è¤©è¤£è¤¯è¤¬è¤è§±è« "],["eba1","諢諲諴諵è«è¬è«¤è«è«°è«è«è«¡è«¨è«¿è«¯è«»è²è²è²è³µè³®è³±è³°è³³èµ¬èµ®è¶¥è¶§è¸³è¸¾è¸¸è¹è¹
踶踼踽è¹è¸°è¸¿èº½è¼¶è¼®è¼µè¼²è¼¹è¼·è¼´é¶é¹é»ééºé³éµé¶éééééé§ééééééºé¸é¼éé£éééééééééºé¥éé¹é·é´éé¤é¿é©é¹éµéªéé"],["ec40","éé¾ééé»éé¼éé¾é¹éºé¶é¿éµé½é©éééééééé°é¸é µé ¯é ²é¤¤é¤é¤§é¤©é¦é§®é§¬é§¥é§¤é§°é§£é§ªé§©é§§éª¹éª¿éª´éª»é«¶é«ºé«¹é«·é¬³é®é®
é®é¼é¾é»é®é®é®é®éºé®"],["eca1","é½é®é´¥é´é´ é´é´é´©é´é´é´¢é´é´é´éºéºéºéº®éºé»é»é»ºé¼é¼½å¦å¥å¢å¤å å©å´ååååååå¾åå¿åå£å£å£å£å¬å¬¥å¬²å¬£å¬¬å¬§å¬¦å¬¯å¬®å»å¯±å¯²å¶·å¹¬å¹ªå¾¾å¾»ææµæ¼æ§æ æ¥æ¤æ¨ææ¯æ©æ£æ«æ¤æ¨æææ¶æææªæªæªæª¥æªæªæªæª¡æªæªæªæª"],["ed40","æªæªæª¨æª¤æªæ©¿æª¦æªæª
æªæªææ®æ°æ¿æ¾©æ¿´æ¿æ¿£æ¿æ¿æ¿§æ¿¦æ¿æ¿²æ¿æ¿¢æ¿¨ç¡ç±ç¨ç²ç¤ç°ç¢ç³ç®ç¯çç²ç«ççªçç±ç¥ç¯çççççççççç¤ç©çµç«ç²ç·ç¶"],["eda1","ç´ç±ç¨ç°ç£³ç£½ç¤ç£»ç£¼ç£²ç¤
磹磾ç¤ç¦«ç¦¨ç©ç©ç©ç©ç©ç©çª¾ç«ç«ç°
ç°ç¯²ç°ç¯¿ç¯»ç°ç¯´ç°ç¯³ç°ç°ç°ç°ç¯¸ç¯½ç°ç¯°ç¯±ç°ç°ç³¨ç¸ç¸¼ç¹ç¸³é¡ç¸¸ç¸ªç¹ç¹ç¹ç¸©ç¹ç¸°ç¸»ç¸¶ç¹ç¸ºç½
罿罾罽翴翲è¬è»èèèè
èè¼è©èèèèèèè§èè èè£è»è¤èè"],["ee40","è·è¼èè¡èºè¸èèèèèèèèè¢èèè
è¹è¶èèèè¨è¾èªèè
è°è¬è¹èµè¼è®èèèèè·è¯èèè´è¶è¿è¸è½èè²è¤µè¤³è¤¼è¤¾è¥è¥è¤·è¥è¦è¦¯è¦®è§²è§³è¬"],["eea1","è¬è¬è¬è¬
è¬è¬¢è¬è¬è¬è¬è¬è¬è¬è¬è¬è¬è±è±°è±²è±±è±¯è²è²è³¹èµ¯è¹è¹è¹è¹è¹è¹è½è½é
é¾é¸éé¢éééé¡éé é¡éé¯é¤ééé¼ééé¶éééé ééééªé¹ééééé±é·é»é¡éé£é§éééééééé
é·é®é°é¬é éééééé¡é"],["ef40","ééééé±é¡é¡é¡é¡é¡
é¡é¤¥é¤«é¤¬é¤ªé¤³é¤²é¤¯é¤é¤±é¤°é¦é¦£é¦¡é¨é§ºé§´é§·é§¹é§¸é§¶é§»é§½é§¾é§¼é¨éª¾é«¾é«½é¬é«¼éé®é®¨é®é®é®¦é®¡é®¥é®¤é®é®¢é® 鮯鴳éµéµ§é´¶é´®é´¯é´±é´¸é´°"],["efa1","éµ
éµéµé´¾é´·éµé´½ç¿µé´éºéºéºéº°é»é»é»»é»¿é¼¤é¼£é¼¢é½é¾ å±åå®åååååå奰嬼屩屪å·å¹å¹®ææææ®æ±æªæ°æ«ææ©æ¿ææ½æ¸æææ¼ææææææ«
æª¹æª½æ«¡æ«æªºæª¶æª·æ«æª´æªææ¯æ°ççççç
ççæ¿¿çæ¿»ç¦æ¿¼æ¿·ççç¿ç¹çç½ç¶"],["f040","ç¸ççµçç¾ç¶ç»ççççç¤çççççç¦ç½ç¬ççºç£¿ç¤ç¤ç¤ç¤ç¤ç¤ç¤ç¦ç¦¬ç©ç°ç°©ç°ç° ç°ç°ç°ç°¦ç°¨ç°¢ç°¥ç°°ç¹ç¹ç¹ç¹£ç¹ç¹¢ç¹ç¹ç¹ ç¹ç¹ç¾µç¾³ç¿·ç¿¸èµèè"],["f0a1","èèèè´èèèèè³èµè½èèè¿èèèè
è±è¶èè¤è¸è·è¾è©è§è¦è¢èè«èªè¥èè³è¤èèèèèè£è¤èèè è´è¨èè¥è¥è¥è¥è¥è¥è¥è¥è¬ªè¬§è¬£è¬³è¬°è¬µè謯謼謾謱謥謷謦謶謮謤謻謽謺è±è±µè²è²è²è³¾è´è´è´è¹è¹¢è¹ è¹è¹è¹è¹¥è¹§"],["f140","è¹è¹è¹¡è¹è¹©è¹è½è½è½è½é¨éºé»é¾é¨é¥é§é¯éªéµééé·éééé§ééªéé¦éééééé±éé²é¤é¨é´é£é¥éééé³ééå·éééé£é¢é¥é¬é®é¨é«é¤éª"],["f1a1","é¢é¥éééééºé¡é¡é¡é¢¸é¥é¤¼é¤ºé¨é¨é¨é¨é¨é¨é¨é¨
é¨é¨é«é«é¬é¬é¬
鬩鬵éééé¯é¯é¯é®¿é¯é®µé®¸é¯é®¶é¯é®¹é®½éµéµéµéµéµéµéµéµéµéµéµéµéµéµéµéºéºé»é¼é¼é¼é¼¥é¼«é¼ªé¼©é¼¨é½é½å´åµåå·å´å«åå¦å§åªå¬å£å£å£å¤å¬½å¬¾å¬¿å·å¹°"],["f240","å¾¿æ»æææææææææææ«§æ« æ«æ«æ«æ«æ«æ«æ«æ««æ«æ«æ«æ æ®°æ°çç§ç çç«ç¡ç¢ç£ç©çç¤ççªççççç
ç¥ç¦ç¤ç£ç¡çç
ç·ççç çççç±ç¤ç¤"],["f2a1","礡ç¤ç¤ç¤ç¦°ç©§ç©¨ç°³ç°¼ç°¹ç°¬ç°»ç³¬ç³ªç¹¶ç¹µç¹¸ç¹°ç¹·ç¹¯ç¹ºç¹²ç¹´ç¹¨ç½ç½ç¾ç¾ç¾·ç¿½ç¿¾è¸èèè¤è¡è£è«è±èèè¡è¨èèè¬è²è¸èèè£èèè°è¦è¯èè¢è èºè è¶è·è è è è è¼è è¿è è 襢è¥è¥è¥è¥¡è¥è¥è¥è¥è¦è¦·è¦¶è§¶èèèèèèèèè"],["f340","èèèèè±è±·è±¶è²è´è´è´è¶¬è¶ªè¶è¶«è¹è¹¸è¹³è¹ªè¹¯è¹»è»è½è½è½è½è½è¾´é
é¿é°éééééééé¹é¬ééé©é¦ééé®é£éééééé§é½ééé¡é©é«é¬é¨é¦"],["f3a1","é³é·é¶éééé¡é¡é¡é¡é¢¿é¢½é¢»é¢¾é¥é¥é¥é¦¦é¦§é¨é¨é¨¥é¨é¨¤é¨é¨¢é¨ 騧騣é¨é¨é¨é«é¬é¬é¬é¬é¬·é¯ªé¯«é¯ é¯é¯¤é¯¦é¯¢é¯°é¯é¯é¯¬é¯é¯é¯¥é¯é¯¡é¯éµ·é¶é¶é¶é¶éµ±é¶éµ¸é¶é¶é¶éµ½éµ«éµ´éµµéµ°éµ©é¶
鵳鵻é¶éµ¯éµ¹éµ¿é¶éµ¨éºéºé»é»¼é¼é½é½é½é½é½é½å·å²"],["f440","åµå³å££å
å·å·å»®å»¯å¿å¿æ¹ææææææ¨æ£æ¤æ«³æ«°æ«ªæ«¨æ«¹æ«±æ«®æ«¯ç¼çµç¯ç·ç´ç±çç¸ç¿çºç¹çç»ç³çççç¨ç½ç¼çºç«çªç¾çççççç²ç¤¥ç¤£ç¤§ç¤¨ç¤¤ç¤©"],["f4a1","禲穮穬ç©ç«·ç±ç±ç±ç±ç±
糮繻繾çºçºç¾ºç¿¿è¹èèèè¨è©è¢è¿èè¾èèè¶èèè
èè½è è è è è è 襣襦覹觷è èªèè¨è£è¥è§èè¶®èºèºèºè½è½è½è½è½è½éé
é
é·éµé²é³ééé»é ééé¾ééé¨éééµéé·éééééºéé¸éé¿"],["f540","é¼éé¶éééé éé®é¯é¹é»é½é¾é¡ 顢顣é¡é£é£é¥é¥é¥é¥é¥é¥é¨²é¨´é¨±é¨¬é¨ªé¨¶é¨©é¨®é¨¸é¨é«é«é«é¬é¬é¬é°é°é¯·é°
é°é¯¸é±é°é°é°é°é°é°é¶é¶é¶¤é¶é¶é¶é¶é¶"],["f5a1","é¶ é¶é¶é¶ªé¶é¶¡é¶é¶¢é¶¨é¶é¶£é¶¿é¶©é¶é¶¦é¶§éºéºéºé»¥é»¤é»§é»¦é¼°é¼®é½é½ é½é½é½é¾åºå¹åååå½å¾ååå·å·å»±æ½ææ¬æ«¼æ¬æ«¸æ¬çççççç
ççççç¾ççªçç¤ç¤±ç¤¯ç±ç±ç³²çºçºçºçºçºçºç½ç¾»è°èèèªè¦èè£èèè§è®è¡è è©èè¥"],["f640","è ©è è è è ¤è è «è¡è¥è¥©è¥®è¥«è§ºè¹è¸è
èºè»è´è´è¶¯èºèºè½è½è½é
é
é
é¹é¿é»é¶é©é½é¼é°é¹éªé·é¬éé±é¥é¤é£éµéºé¿é¡é¡¤é£é£é£é¥é¥é¨¹é¨½é©é©é©é©é¨º"],["f6a1","騿é«é¬é¬é¬é¬é¬ºéé°«é°é°é°¬é°£é°¨é°©é°¤é°¡é¶·é¶¶é¶¼é·é·é·é·é¶¾é·
é·é¶»é¶µé·é¶¹é¶ºé¶¬é·é¶±é¶é·é¶³é·é¶²é¹ºéºé»«é»®é»é¼é¼é¼é¼±é½é½¥é½¤é¾äº¹åå
å奱ååå·å·å»²æ¡æ æ¦æ¢æ¬æ¬æ¬æ°ççççççç©ç¿çççççç礵禴穰穱ç±ç±ç±ç±ç±"],["f740","ç³´ç³±çºç½ç¾èè«è´èµè³è¬è²è¶è ¬è ¨è ¦è ªè ¥è¥±è¦¿è¦¾è§»è¾è®è®è®è®
è¿è´èºèºèºèºèºèºèºè½ è½¢é
ééééééé
éééé¿é£é¡ªé¡©é£é¥é¥é©é©é©é©é©é©é©"],["f7a1","é©é©é©é«é¬é¬«é¬»ééé±é±é°¿é±é°¹é°³é±é°¼é°·é°´é°²é°½é°¶é·é·é·é·é·é·é·é·é·é·©é·é·é·é·µé·é·éº¶é»°é¼µé¼³é¼²é½é½«é¾é¾¢å½å壨壧奲åå·è ¯å½ææææ©æ¥ææ«æ¬æ¬æ¬æ¯ççç¢çççç°ç籧籦çºè¬èºèè¹è¼è±è»è¾è °è ²è ®è ³è¥¶è¥´è¥³è§¾"],["f840","è®è®è®è®è±
è´èºè½¤è½£é¼é¢éééééé
é é©é©é¬é¬é¬ é±é±é±é±é±é±é±é±é±é±é·»é··é·¯é·£é·«é·¸é·¤é·¶é·¡é·®é·¦é·²é·°é·¢é·¬é·´é·³é·¨é·é»é»é»²é»³é¼é¼é¼¸é¼·é¼¶é½é½"],["f8a1","齱齰齮齯åååå±æææ®æ¬çç¡çç ç£çç¥ç礸禷禶籪çºç¾èèè ¸è ·è µè¡è®è®èºèºèº èºé¾é½éé«é¨é©é¥ééééé¥é©é«é鱣鱧鱦鱢é±é± é¸é·¾é¸é¸é¸é¸
é¸é¸é¸é·¿é·½é¸éº é¼é½é½´é½µé½¶åæ®æ¸æ¬æ¬æ¬æ¬ç¢ç¦çªçç礹籩籫糶çº"],["f940","çºçºçºè è¡èèè襹襺襼襻觿è®è®èº¥èº¤èº£é®éé¯é±é³é顲é¥é±¨é±®é±é¸é¸é¸é¸é¸é¸éº¡é»µé¼é½é½¸é½»é½ºé½¹åç¦ç±¯è ¼è¶²èº¦éé´é¸é¶éµé© 鱴鱳鱱鱵é¸é¸é»¶é¼"],["f9a1","龤ç¨ç¥ç³·èªè ¾è ½è ¿è®è²èº©è»é顳顴é£é¥¡é¦«é©¤é©¦é©§é¬¤é¸é¸é½ææ¬ç§è躨ééé驩驨鬮é¸ç©èè®é鱹麷çµé©«é±ºé¸ç©çªéº¤é½¾é½é¾ç¢é¹è£å¢»æç²§å«ºââ¦ââ â¬â£ââ©âââ¤âââªâ¡ââ§âââ¥âââ«â¢ââ¨âââââ®â°â¯â"]]
10676 10677 10678/***/ }), 10679/* 93 */ 10680/***/ (function(module, exports, __webpack_require__) { 10681 10682// Generated by CoffeeScript 1.7.1 10683(function() { 10684 var ArrayT, NumberT, utils; 10685 10686 NumberT = __webpack_require__(22).Number; 10687 10688 utils = __webpack_require__(12); 10689 10690 ArrayT = (function() { 10691 function ArrayT(type, length, lengthType) { 10692 this.type = type; 10693 this.length = length; 10694 this.lengthType = lengthType != null ? lengthType : 'count'; 10695 } 10696 10697 ArrayT.prototype.decode = function(stream, parent) { 10698 var ctx, i, length, pos, res, target, _i; 10699 pos = stream.pos; 10700 res = []; 10701 ctx = parent; 10702 if (this.length != null) { 10703 length = utils.resolveLength(this.length, stream, parent); 10704 } 10705 if (this.length instanceof NumberT) { 10706 Object.defineProperties(res, { 10707 parent: { 10708 value: parent 10709 }, 10710 _startOffset: { 10711 value: pos 10712 }, 10713 _currentOffset: { 10714 value: 0, 10715 writable: true 10716 }, 10717 _length: { 10718 value: length 10719 } 10720 }); 10721 ctx = res; 10722 } 10723 if ((length == null) || this.lengthType === 'bytes') { 10724 target = length != null ? stream.pos + length : (parent != null ? parent._length : void 0) ? parent._startOffset + parent._length : stream.length; 10725 while (stream.pos < target) { 10726 res.push(this.type.decode(stream, ctx)); 10727 } 10728 } else { 10729 for (i = _i = 0; _i < length; i = _i += 1) { 10730 res.push(this.type.decode(stream, ctx)); 10731 } 10732 } 10733 return res; 10734 }; 10735 10736 ArrayT.prototype.size = function(array, ctx) { 10737 var item, size, _i, _len; 10738 if (!array) { 10739 return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx); 10740 } 10741 size = 0; 10742 if (this.length instanceof NumberT) { 10743 size += this.length.size(); 10744 ctx = { 10745 parent: ctx 10746 }; 10747 } 10748 for (_i = 0, _len = array.length; _i < _len; _i++) { 10749 item = array[_i]; 10750 size += this.type.size(item, ctx); 10751 } 10752 return size; 10753 }; 10754 10755 ArrayT.prototype.encode = function(stream, array, parent) { 10756 var ctx, i, item, ptr, _i, _len; 10757 ctx = parent; 10758 if (this.length instanceof NumberT) { 10759 ctx = { 10760 pointers: [], 10761 startOffset: stream.pos, 10762 parent: parent 10763 }; 10764 ctx.pointerOffset = stream.pos + this.size(array, ctx); 10765 this.length.encode(stream, array.length); 10766 } 10767 for (_i = 0, _len = array.length; _i < _len; _i++) { 10768 item = array[_i]; 10769 this.type.encode(stream, item, ctx); 10770 } 10771 if (this.length instanceof NumberT) { 10772 i = 0; 10773 while (i < ctx.pointers.length) { 10774 ptr = ctx.pointers[i++]; 10775 ptr.type.encode(stream, ptr.val); 10776 } 10777 } 10778 }; 10779 10780 return ArrayT; 10781 10782 })(); 10783 10784 module.exports = ArrayT; 10785 10786}).call(this); 10787 10788 10789/***/ }), 10790/* 94 */ 10791/***/ (function(module, exports, __webpack_require__) { 10792 10793// Generated by CoffeeScript 1.7.1 10794(function() { 10795 var Struct, utils; 10796 10797 utils = __webpack_require__(12); 10798 10799 Struct = (function() { 10800 function Struct(fields) { 10801 this.fields = fields != null ? fields : {}; 10802 } 10803 10804 Struct.prototype.decode = function(stream, parent, length) { 10805 var res, _ref; 10806 if (length == null) { 10807 length = 0; 10808 } 10809 res = this._setup(stream, parent, length); 10810 this._parseFields(stream, res, this.fields); 10811 if ((_ref = this.process) != null) { 10812 _ref.call(res, stream); 10813 } 10814 return res; 10815 }; 10816 10817 Struct.prototype._setup = function(stream, parent, length) { 10818 var res; 10819 res = {}; 10820 Object.defineProperties(res, { 10821 parent: { 10822 value: parent 10823 }, 10824 _startOffset: { 10825 value: stream.pos 10826 }, 10827 _currentOffset: { 10828 value: 0, 10829 writable: true 10830 }, 10831 _length: { 10832 value: length 10833 } 10834 }); 10835 return res; 10836 }; 10837 10838 Struct.prototype._parseFields = function(stream, res, fields) { 10839 var key, type, val; 10840 for (key in fields) { 10841 type = fields[key]; 10842 if (typeof type === 'function') { 10843 val = type.call(res, res); 10844 } else { 10845 val = type.decode(stream, res); 10846 } 10847 if (val !== void 0) { 10848 if (val instanceof utils.PropertyDescriptor) { 10849 Object.defineProperty(res, key, val); 10850 } else { 10851 res[key] = val; 10852 } 10853 } 10854 res._currentOffset = stream.pos - res._startOffset; 10855 } 10856 }; 10857 10858 Struct.prototype.size = function(val, parent, includePointers) { 10859 var ctx, key, size, type, _ref; 10860 if (val == null) { 10861 val = {}; 10862 } 10863 if (includePointers == null) { 10864 includePointers = true; 10865 } 10866 ctx = { 10867 parent: parent, 10868 val: val, 10869 pointerSize: 0 10870 }; 10871 size = 0; 10872 _ref = this.fields; 10873 for (key in _ref) { 10874 type = _ref[key]; 10875 if (type.size != null) { 10876 size += type.size(val[key], ctx); 10877 } 10878 } 10879 if (includePointers) { 10880 size += ctx.pointerSize; 10881 } 10882 return size; 10883 }; 10884 10885 Struct.prototype.encode = function(stream, val, parent) { 10886 var ctx, i, key, ptr, type, _ref, _ref1; 10887 if ((_ref = this.preEncode) != null) { 10888 _ref.call(val, stream); 10889 } 10890 ctx = { 10891 pointers: [], 10892 startOffset: stream.pos, 10893 parent: parent, 10894 val: val, 10895 pointerSize: 0 10896 }; 10897 ctx.pointerOffset = stream.pos + this.size(val, ctx, false); 10898 _ref1 = this.fields; 10899 for (key in _ref1) { 10900 type = _ref1[key]; 10901 if (type.encode != null) { 10902 type.encode(stream, val[key], ctx); 10903 } 10904 } 10905 i = 0; 10906 while (i < ctx.pointers.length) { 10907 ptr = ctx.pointers[i++]; 10908 ptr.type.encode(stream, ptr.val, ptr.parent); 10909 } 10910 }; 10911 10912 return Struct; 10913 10914 })(); 10915 10916 module.exports = Struct; 10917 10918}).call(this); 10919 10920 10921/***/ }), 10922/* 95 */ 10923/***/ (function(module, exports, __webpack_require__) { 10924 10925module.exports = !__webpack_require__(5) && !__webpack_require__(19)(function () { 10926 return Object.defineProperty(__webpack_require__(96)('div'), 'a', { get: function () { return 7; } }).a != 7; 10927}); 10928 10929 10930/***/ }), 10931/* 96 */ 10932/***/ (function(module, exports, __webpack_require__) { 10933 10934var isObject = __webpack_require__(9); 10935var document = __webpack_require__(10).document; 10936// typeof document.createElement is 'object' in old IE 10937var is = isObject(document) && isObject(document.createElement); 10938module.exports = function (it) { 10939 return is ? document.createElement(it) : {}; 10940}; 10941 10942 10943/***/ }), 10944/* 97 */
vendor: 5,027 bytes, lines 10945-11140
10945/***/ (function(module, exports) { 10946 10947module.exports = function (it) { 10948 if (typeof it != 'function') throw TypeError(it + ' is not a function!'); 10949 return it; 10950}; 10951 10952 10953/***/ }), 10954/* 98 */ 10955/***/ (function(module, exports) { 10956 10957module.exports = function (done, value) { 10958 return { value: value, done: !!done }; 10959}; 10960 10961 10962/***/ }), 10963/* 99 */ 10964/***/ (function(module, exports, __webpack_require__) { 10965 10966module.exports = __webpack_require__(13); 10967 10968 10969/***/ }), 10970/* 100 */ 10971/***/ (function(module, exports, __webpack_require__) { 10972 10973var dP = __webpack_require__(6); 10974var anObject = __webpack_require__(14); 10975var getKeys = __webpack_require__(29); 10976 10977module.exports = __webpack_require__(5) ? Object.defineProperties : function defineProperties(O, Properties) { 10978 anObject(O); 10979 var keys = getKeys(Properties); 10980 var length = keys.length; 10981 var i = 0; 10982 var P; 10983 while (length > i) dP.f(O, P = keys[i++], Properties[P]); 10984 return O; 10985}; 10986 10987 10988/***/ }), 10989/* 101 */ 10990/***/ (function(module, exports, __webpack_require__) { 10991 10992var has = __webpack_require__(18); 10993var toIObject = __webpack_require__(17); 10994var arrayIndexOf = __webpack_require__(204)(false); 10995var IE_PROTO = __webpack_require__(64)('IE_PROTO'); 10996 10997module.exports = function (object, names) { 10998 var O = toIObject(object); 10999 var i = 0; 11000 var result = []; 11001 var key; 11002 for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); 11003 // Don't enum bug & hidden keys 11004 while (names.length > i) if (has(O, key = names[i++])) { 11005 ~arrayIndexOf(result, key) || result.push(key); 11006 } 11007 return result; 11008}; 11009 11010 11011/***/ }), 11012/* 102 */ 11013/***/ (function(module, exports, __webpack_require__) { 11014 11015var toInteger = __webpack_require__(63); 11016var max = Math.max; 11017var min = Math.min; 11018module.exports = function (index, length) { 11019 index = toInteger(index); 11020 return index < 0 ? max(index + length, 0) : min(index, length); 11021}; 11022 11023 11024/***/ }), 11025/* 103 */ 11026/***/ (function(module, exports, __webpack_require__) { 11027 11028module.exports = { "default": __webpack_require__(215), __esModule: true }; 11029 11030/***/ }), 11031/* 104 */ 11032/***/ (function(module, exports, __webpack_require__) { 11033 11034// 7.2.2 IsArray(argument) 11035var cof = __webpack_require__(55); 11036module.exports = Array.isArray || function isArray(arg) { 11037 return cof(arg) == 'Array'; 11038}; 11039 11040 11041/***/ }), 11042/* 105 */ 11043/***/ (function(module, exports, __webpack_require__) { 11044 11045// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) 11046var $keys = __webpack_require__(101); 11047var hiddenKeys = __webpack_require__(66).concat('length', 'prototype'); 11048 11049exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { 11050 return $keys(O, hiddenKeys); 11051}; 11052 11053 11054/***/ }), 11055/* 106 */ 11056/***/ (function(module, exports, __webpack_require__) { 11057 11058"use strict"; 11059 11060 11061exports.__esModule = true; 11062 11063exports.default = function (instance, Constructor) { 11064 if (!(instance instanceof Constructor)) { 11065 throw new TypeError("Cannot call a class as a function"); 11066 } 11067}; 11068 11069/***/ }), 11070/* 107 */ 11071/***/ (function(module, exports, __webpack_require__) { 11072 11073"use strict"; 11074 11075 11076exports.__esModule = true; 11077 11078var _defineProperty = __webpack_require__(74); 11079 11080var _defineProperty2 = _interopRequireDefault(_defineProperty); 11081 11082function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11083 11084exports.default = function () { 11085 function defineProperties(target, props) { 11086 for (var i = 0; i < props.length; i++) { 11087 var descriptor = props[i]; 11088 descriptor.enumerable = descriptor.enumerable || false; 11089 descriptor.configurable = true; 11090 if ("value" in descriptor) descriptor.writable = true; 11091 (0, _defineProperty2.default)(target, descriptor.key, descriptor); 11092 } 11093 } 11094 11095 return function (Constructor, protoProps, staticProps) { 11096 if (protoProps) defineProperties(Constructor.prototype, protoProps); 11097 if (staticProps) defineProperties(Constructor, staticProps); 11098 return Constructor; 11099 }; 11100}(); 11101 11102/***/ }), 11103/* 108 */ 11104/***/ (function(module, exports, __webpack_require__) { 11105 11106"use strict"; 11107 11108var dP = __webpack_require__(6).f; 11109var create = __webpack_require__(36); 11110var redefineAll = __webpack_require__(109); 11111var ctx = __webpack_require__(20); 11112var anInstance = __webpack_require__(110); 11113var forOf = __webpack_require__(41); 11114var $iterDefine = __webpack_require__(61); 11115var step = __webpack_require__(98); 11116var setSpecies = __webpack_require__(228); 11117var DESCRIPTORS = __webpack_require__(5); 11118var fastKey = __webpack_require__(40).fastKey; 11119var validate = __webpack_require__(75); 11120var SIZE = DESCRIPTORS ? '_s' : 'size'; 11121 11122var getEntry = function (that, key) { 11123 // fast case 11124 var index = fastKey(key); 11125 var entry; 11126 if (index !== 'F') return that._i[index]; 11127 // frozen object case 11128 for (entry = that._f; entry; entry = entry.n) { 11129 if (entry.k == key) return entry; 11130 } 11131}; 11132 11133module.exports = { 11134 getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { 11135 var C = wrapper(function (that, iterable) { 11136 anInstance(that, C, NAME, '_i'); 11137 that._t = NAME; // collection type 11138 that._i = create(null); // index 11139 that._f = undefined; // first entry 11140 that._l = undefined; // last entry
vendor: 4,193 bytes, lines 11141-11267
11141 that[SIZE] = 0; // size 11142 if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); 11143 }); 11144 redefineAll(C.prototype, { 11145 // 23.1.3.1 Map.prototype.clear() 11146 // 23.2.3.2 Set.prototype.clear() 11147 clear: function clear() { 11148 for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { 11149 entry.r = true; 11150 if (entry.p) entry.p = entry.p.n = undefined; 11151 delete data[entry.i]; 11152 } 11153 that._f = that._l = undefined; 11154 that[SIZE] = 0; 11155 }, 11156 // 23.1.3.3 Map.prototype.delete(key) 11157 // 23.2.3.4 Set.prototype.delete(value) 11158 'delete': function (key) { 11159 var that = validate(this, NAME); 11160 var entry = getEntry(that, key); 11161 if (entry) { 11162 var next = entry.n; 11163 var prev = entry.p; 11164 delete that._i[entry.i]; 11165 entry.r = true; 11166 if (prev) prev.n = next; 11167 if (next) next.p = prev; 11168 if (that._f == entry) that._f = next; 11169 if (that._l == entry) that._l = prev; 11170 that[SIZE]--; 11171 } return !!entry; 11172 }, 11173 // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) 11174 // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) 11175 forEach: function forEach(callbackfn /* , that = undefined */) { 11176 validate(this, NAME); 11177 var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); 11178 var entry; 11179 while (entry = entry ? entry.n : this._f) { 11180 f(entry.v, entry.k, this); 11181 // revert to the last existing entry 11182 while (entry && entry.r) entry = entry.p; 11183 } 11184 }, 11185 // 23.1.3.7 Map.prototype.has(key) 11186 // 23.2.3.7 Set.prototype.has(value) 11187 has: function has(key) { 11188 return !!getEntry(validate(this, NAME), key); 11189 } 11190 }); 11191 if (DESCRIPTORS) dP(C.prototype, 'size', { 11192 get: function () { 11193 return validate(this, NAME)[SIZE]; 11194 } 11195 }); 11196 return C; 11197 }, 11198 def: function (that, key, value) { 11199 var entry = getEntry(that, key); 11200 var prev, index; 11201 // change existing entry 11202 if (entry) { 11203 entry.v = value; 11204 // create new entry 11205 } else { 11206 that._l = entry = { 11207 i: index = fastKey(key, true), // <- index 11208 k: key, // <- key 11209 v: value, // <- value 11210 p: prev = that._l, // <- previous entry 11211 n: undefined, // <- next entry 11212 r: false // <- removed 11213 }; 11214 if (!that._f) that._f = entry; 11215 if (prev) prev.n = entry; 11216 that[SIZE]++; 11217 // add to index 11218 if (index !== 'F') that._i[index] = entry; 11219 } return that; 11220 }, 11221 getEntry: getEntry, 11222 setStrong: function (C, NAME, IS_MAP) { 11223 // add .keys, .values, .entries, [@@iterator] 11224 // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 11225 $iterDefine(C, NAME, function (iterated, kind) { 11226 this._t = validate(iterated, NAME); // target 11227 this._k = kind; // kind 11228 this._l = undefined; // previous 11229 }, function () { 11230 var that = this; 11231 var kind = that._k; 11232 var entry = that._l; 11233 // revert to the last existing entry 11234 while (entry && entry.r) entry = entry.p; 11235 // get next entry 11236 if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { 11237 // or finish the iteration 11238 that._t = undefined; 11239 return step(1); 11240 } 11241 // return step by kind 11242 if (kind == 'keys') return step(0, entry.k); 11243 if (kind == 'values') return step(0, entry.v); 11244 return step(0, [entry.k, entry.v]); 11245 }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); 11246 11247 // add [@@species], 23.1.2.2, 23.2.2.2 11248 setSpecies(NAME); 11249 } 11250}; 11251 11252 11253/***/ }), 11254/* 109 */ 11255/***/ (function(module, exports, __webpack_require__) { 11256 11257var hide = __webpack_require__(13); 11258module.exports = function (target, src, safe) { 11259 for (var key in src) { 11260 if (safe && target[key]) target[key] = src[key]; 11261 else hide(target, key, src[key]); 11262 } return target; 11263}; 11264 11265 11266/***/ }), 11267/* 110 */
vendor: 4,182 bytes, lines 11268-11415
11268/***/ (function(module, exports) { 11269 11270module.exports = function (it, Constructor, name, forbiddenField) { 11271 if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { 11272 throw TypeError(name + ': incorrect invocation!'); 11273 } return it; 11274}; 11275 11276 11277/***/ }), 11278/* 111 */ 11279/***/ (function(module, exports, __webpack_require__) { 11280 11281// call something on iterator step with safe closing on error 11282var anObject = __webpack_require__(14); 11283module.exports = function (iterator, fn, value, entries) { 11284 try { 11285 return entries ? fn(anObject(value)[0], value[1]) : fn(value); 11286 // 7.4.6 IteratorClose(iterator, completion) 11287 } catch (e) { 11288 var ret = iterator['return']; 11289 if (ret !== undefined) anObject(ret.call(iterator)); 11290 throw e; 11291 } 11292}; 11293 11294 11295/***/ }), 11296/* 112 */ 11297/***/ (function(module, exports, __webpack_require__) { 11298 11299// check on default Array iterator 11300var Iterators = __webpack_require__(23); 11301var ITERATOR = __webpack_require__(4)('iterator'); 11302var ArrayProto = Array.prototype; 11303 11304module.exports = function (it) { 11305 return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); 11306}; 11307 11308 11309/***/ }), 11310/* 113 */ 11311/***/ (function(module, exports, __webpack_require__) { 11312 11313"use strict"; 11314 11315var global = __webpack_require__(10); 11316var $export = __webpack_require__(3); 11317var meta = __webpack_require__(40); 11318var fails = __webpack_require__(19); 11319var hide = __webpack_require__(13); 11320var redefineAll = __webpack_require__(109); 11321var forOf = __webpack_require__(41); 11322var anInstance = __webpack_require__(110); 11323var isObject = __webpack_require__(9); 11324var setToStringTag = __webpack_require__(39); 11325var dP = __webpack_require__(6).f; 11326var each = __webpack_require__(229)(0); 11327var DESCRIPTORS = __webpack_require__(5); 11328 11329module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { 11330 var Base = global[NAME]; 11331 var C = Base; 11332 var ADDER = IS_MAP ? 'set' : 'add'; 11333 var proto = C && C.prototype; 11334 var O = {}; 11335 if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { 11336 new C().entries().next(); 11337 }))) { 11338 // create collection constructor 11339 C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); 11340 redefineAll(C.prototype, methods); 11341 meta.NEED = true; 11342 } else { 11343 C = wrapper(function (target, iterable) { 11344 anInstance(target, C, NAME, '_c'); 11345 target._c = new Base(); 11346 if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target); 11347 }); 11348 each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) { 11349 var IS_ADDER = KEY == 'add' || KEY == 'set'; 11350 if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) { 11351 anInstance(this, C, KEY); 11352 if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false; 11353 var result = this._c[KEY](a === 0 ? 0 : a, b); 11354 return IS_ADDER ? this : result; 11355 }); 11356 }); 11357 IS_WEAK || dP(C.prototype, 'size', { 11358 get: function () { 11359 return this._c.size; 11360 } 11361 }); 11362 } 11363 11364 setToStringTag(C, NAME); 11365 11366 O[NAME] = C; 11367 $export($export.G + $export.W + $export.F, O); 11368 11369 if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); 11370 11371 return C; 11372}; 11373 11374 11375/***/ }), 11376/* 114 */ 11377/***/ (function(module, exports, __webpack_require__) { 11378 11379// https://github.com/DavidBruant/Map-Set.prototype.toJSON 11380var classof = __webpack_require__(68); 11381var from = __webpack_require__(233); 11382module.exports = function (NAME) { 11383 return function toJSON() { 11384 if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic"); 11385 return from(this); 11386 }; 11387}; 11388 11389 11390/***/ }), 11391/* 115 */ 11392/***/ (function(module, exports, __webpack_require__) { 11393 11394"use strict"; 11395 11396// https://tc39.github.io/proposal-setmap-offrom/ 11397var $export = __webpack_require__(3); 11398 11399module.exports = function (COLLECTION) { 11400 $export($export.S, COLLECTION, { of: function of() { 11401 var length = arguments.length; 11402 var A = new Array(length); 11403 while (length--) A[length] = arguments[length]; 11404 return new this(A); 11405 } }); 11406}; 11407 11408 11409/***/ }), 11410/* 116 */ 11411/***/ (function(module, exports, __webpack_require__) { 11412 11413"use strict"; 11414 11415// https://tc39.github.io/proposal-setmap-offrom/
11416var $export = __webpack_require__(3); 11417var aFunction = __webpack_require__(97); 11418var ctx = __webpack_require__(20); 11419var forOf = __webpack_require__(41); 11420 11421module.exports = function (COLLECTION) { 11422 $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) { 11423 var mapFn = arguments[1]; 11424 var mapping, A, n, cb; 11425 aFunction(this); 11426 mapping = mapFn !== undefined; 11427 if (mapping) aFunction(mapFn); 11428 if (source == undefined) return new this(); 11429 A = []; 11430 if (mapping) { 11431 n = 0; 11432 cb = ctx(mapFn, arguments[2], 2); 11433 forOf(source, false, function (nextItem) { 11434 A.push(cb(nextItem, n++)); 11435 }); 11436 } else { 11437 forOf(source, false, A.push, A); 11438 } 11439 return new this(A); 11440 } }); 11441}; 11442 11443 11444/***/ }), 11445/* 117 */ 11446/***/ (function(module, exports, __webpack_require__) { 11447 11448/* Copyright 2013 Google Inc. All Rights Reserved. 11449 11450 Licensed under the Apache License, Version 2.0 (the "License"); 11451 you may not use this file except in compliance with the License. 11452 You may obtain a copy of the License at 11453 11454 http://www.apache.org/licenses/LICENSE-2.0 11455 11456 Unless required by applicable law or agreed to in writing, software 11457 distributed under the License is distributed on an "AS IS" BASIS, 11458 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11459 See the License for the specific language governing permissions and 11460 limitations under the License. 11461*/ 11462 11463var BrotliInput = __webpack_require__(118).BrotliInput; 11464var BrotliOutput = __webpack_require__(118).BrotliOutput; 11465var BrotliBitReader = __webpack_require__(285); 11466var BrotliDictionary = __webpack_require__(119); 11467var HuffmanCode = __webpack_require__(120).HuffmanCode; 11468var BrotliBuildHuffmanTable = __webpack_require__(120).BrotliBuildHuffmanTable; 11469var Context = __webpack_require__(289); 11470var Prefix = __webpack_require__(290); 11471var Transform = __webpack_require__(291); 11472 11473var kDefaultCodeLength = 8; 11474var kCodeLengthRepeatCode = 16; 11475var kNumLiteralCodes = 256; 11476var kNumInsertAndCopyCodes = 704; 11477var kNumBlockLengthCodes = 26; 11478var kLiteralContextBits = 6; 11479var kDistanceContextBits = 2; 11480 11481var HUFFMAN_TABLE_BITS = 8; 11482var HUFFMAN_TABLE_MASK = 0xff; 11483/* Maximum possible Huffman table size for an alphabet size of 704, max code 11484 * length 15 and root table bits 8. */ 11485var HUFFMAN_MAX_TABLE_SIZE = 1080; 11486 11487var CODE_LENGTH_CODES = 18; 11488var kCodeLengthCodeOrder = new Uint8Array([ 11489 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, 11490]); 11491 11492var NUM_DISTANCE_SHORT_CODES = 16; 11493var kDistanceShortCodeIndexOffset = new Uint8Array([ 11494 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 11495]); 11496 11497var kDistanceShortCodeValueOffset = new Int8Array([ 11498 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 11499]); 11500 11501var kMaxHuffmanTableSize = new Uint16Array([ 11502 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 11503 854, 886, 920, 952, 984, 1016, 1048, 1080 11504]); 11505 11506function DecodeWindowBits(br) { 11507 var n; 11508 if (br.readBits(1) === 0) { 11509 return 16; 11510 } 11511 11512 n = br.readBits(3); 11513 if (n > 0) { 11514 return 17 + n; 11515 } 11516 11517 n = br.readBits(3); 11518 if (n > 0) { 11519 return 8 + n; 11520 } 11521 11522 return 17; 11523} 11524 11525/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ 11526function DecodeVarLenUint8(br) { 11527 if (br.readBits(1)) { 11528 var nbits = br.readBits(3); 11529 if (nbits === 0) { 11530 return 1; 11531 } else { 11532 return br.readBits(nbits) + (1 << nbits); 11533 } 11534 } 11535 return 0; 11536} 11537 11538function MetaBlockLength() { 11539 this.meta_block_length = 0; 11540 this.input_end = 0; 11541 this.is_uncompressed = 0; 11542 this.is_metadata = false; 11543} 11544 11545function DecodeMetaBlockLength(br) { 11546 var out = new MetaBlockLength; 11547 var size_nibbles; 11548 var size_bytes; 11549 var i; 11550 11551 out.input_end = br.readBits(1); 11552 if (out.input_end && br.readBits(1)) { 11553 return out; 11554 } 11555 11556 size_nibbles = br.readBits(2) + 4; 11557 if (size_nibbles === 7) { 11558 out.is_metadata = true; 11559 11560 if (br.readBits(1) !== 0) 11561 throw new Error('Invalid reserved bit'); 11562 11563 size_bytes = br.readBits(2); 11564 if (size_bytes === 0) 11565 return out; 11566 11567 for (i = 0; i < size_bytes; i++) { 11568 var next_byte = br.readBits(8); 11569 if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0) 11570 throw new Error('Invalid size byte'); 11571
vendor: 28,212 bytes, lines 11572-12459
11572 out.meta_block_length |= next_byte << (i * 8); 11573 } 11574 } else { 11575 for (i = 0; i < size_nibbles; ++i) { 11576 var next_nibble = br.readBits(4); 11577 if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0) 11578 throw new Error('Invalid size nibble'); 11579 11580 out.meta_block_length |= next_nibble << (i * 4); 11581 } 11582 } 11583 11584 ++out.meta_block_length; 11585 11586 if (!out.input_end && !out.is_metadata) { 11587 out.is_uncompressed = br.readBits(1); 11588 } 11589 11590 return out; 11591} 11592 11593/* Decodes the next Huffman code from bit-stream. */ 11594function ReadSymbol(table, index, br) { 11595 var start_index = index; 11596 11597 var nbits; 11598 br.fillBitWindow(); 11599 index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK; 11600 nbits = table[index].bits - HUFFMAN_TABLE_BITS; 11601 if (nbits > 0) { 11602 br.bit_pos_ += HUFFMAN_TABLE_BITS; 11603 index += table[index].value; 11604 index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1); 11605 } 11606 br.bit_pos_ += table[index].bits; 11607 return table[index].value; 11608} 11609 11610function ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) { 11611 var symbol = 0; 11612 var prev_code_len = kDefaultCodeLength; 11613 var repeat = 0; 11614 var repeat_code_len = 0; 11615 var space = 32768; 11616 11617 var table = []; 11618 for (var i = 0; i < 32; i++) 11619 table.push(new HuffmanCode(0, 0)); 11620 11621 BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES); 11622 11623 while (symbol < num_symbols && space > 0) { 11624 var p = 0; 11625 var code_len; 11626 11627 br.readMoreInput(); 11628 br.fillBitWindow(); 11629 p += (br.val_ >>> br.bit_pos_) & 31; 11630 br.bit_pos_ += table[p].bits; 11631 code_len = table[p].value & 0xff; 11632 if (code_len < kCodeLengthRepeatCode) { 11633 repeat = 0; 11634 code_lengths[symbol++] = code_len; 11635 if (code_len !== 0) { 11636 prev_code_len = code_len; 11637 space -= 32768 >> code_len; 11638 } 11639 } else { 11640 var extra_bits = code_len - 14; 11641 var old_repeat; 11642 var repeat_delta; 11643 var new_len = 0; 11644 if (code_len === kCodeLengthRepeatCode) { 11645 new_len = prev_code_len; 11646 } 11647 if (repeat_code_len !== new_len) { 11648 repeat = 0; 11649 repeat_code_len = new_len; 11650 } 11651 old_repeat = repeat; 11652 if (repeat > 0) { 11653 repeat -= 2; 11654 repeat <<= extra_bits; 11655 } 11656 repeat += br.readBits(extra_bits) + 3; 11657 repeat_delta = repeat - old_repeat; 11658 if (symbol + repeat_delta > num_symbols) { 11659 throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols'); 11660 } 11661 11662 for (var x = 0; x < repeat_delta; x++) 11663 code_lengths[symbol + x] = repeat_code_len; 11664 11665 symbol += repeat_delta; 11666 11667 if (repeat_code_len !== 0) { 11668 space -= repeat_delta << (15 - repeat_code_len); 11669 } 11670 } 11671 } 11672 if (space !== 0) { 11673 throw new Error("[ReadHuffmanCodeLengths] space = " + space); 11674 } 11675 11676 for (; symbol < num_symbols; symbol++) 11677 code_lengths[symbol] = 0; 11678} 11679 11680function ReadHuffmanCode(alphabet_size, tables, table, br) { 11681 var table_size = 0; 11682 var simple_code_or_skip; 11683 var code_lengths = new Uint8Array(alphabet_size); 11684 11685 br.readMoreInput(); 11686 11687 /* simple_code_or_skip is used as follows: 11688 1 for simple code; 11689 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ 11690 simple_code_or_skip = br.readBits(2); 11691 if (simple_code_or_skip === 1) { 11692 /* Read symbols, codes & code lengths directly. */ 11693 var i; 11694 var max_bits_counter = alphabet_size - 1; 11695 var max_bits = 0; 11696 var symbols = new Int32Array(4); 11697 var num_symbols = br.readBits(2) + 1; 11698 while (max_bits_counter) { 11699 max_bits_counter >>= 1; 11700 ++max_bits; 11701 } 11702 11703 for (i = 0; i < num_symbols; ++i) { 11704 symbols[i] = br.readBits(max_bits) % alphabet_size; 11705 code_lengths[symbols[i]] = 2; 11706 } 11707 code_lengths[symbols[0]] = 1; 11708 switch (num_symbols) { 11709 case 1: 11710 break; 11711 case 3: 11712 if ((symbols[0] === symbols[1]) || 11713 (symbols[0] === symbols[2]) || 11714 (symbols[1] === symbols[2])) { 11715 throw new Error('[ReadHuffmanCode] invalid symbols'); 11716 } 11717 break; 11718 case 2: 11719 if (symbols[0] === symbols[1]) { 11720 throw new Error('[ReadHuffmanCode] invalid symbols'); 11721 } 11722 11723 code_lengths[symbols[1]] = 1; 11724 break; 11725 case 4: 11726 if ((symbols[0] === symbols[1]) || 11727 (symbols[0] === symbols[2]) || 11728 (symbols[0] === symbols[3]) || 11729 (symbols[1] === symbols[2]) || 11730 (symbols[1] === symbols[3]) || 11731 (symbols[2] === symbols[3])) { 11732 throw new Error('[ReadHuffmanCode] invalid symbols'); 11733 } 11734 11735 if (br.readBits(1)) { 11736 code_lengths[symbols[2]] = 3; 11737 code_lengths[symbols[3]] = 3; 11738 } else { 11739 code_lengths[symbols[0]] = 2; 11740 } 11741 break; 11742 } 11743 } else { /* Decode Huffman-coded code lengths. */ 11744 var i; 11745 var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES); 11746 var space = 32; 11747 var num_codes = 0; 11748 /* Static Huffman code for the code length code lengths */ 11749 var huff = [ 11750 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 11751 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1), 11752 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), 11753 new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5) 11754 ]; 11755 for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) { 11756 var code_len_idx = kCodeLengthCodeOrder[i]; 11757 var p = 0; 11758 var v; 11759 br.fillBitWindow(); 11760 p += (br.val_ >>> br.bit_pos_) & 15; 11761 br.bit_pos_ += huff[p].bits; 11762 v = huff[p].value; 11763 code_length_code_lengths[code_len_idx] = v; 11764 if (v !== 0) { 11765 space -= (32 >> v); 11766 ++num_codes; 11767 } 11768 } 11769 11770 if (!(num_codes === 1 || space === 0)) 11771 throw new Error('[ReadHuffmanCode] invalid num_codes or space'); 11772 11773 ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br); 11774 } 11775 11776 table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size); 11777 11778 if (table_size === 0) { 11779 throw new Error("[ReadHuffmanCode] BuildHuffmanTable failed: "); 11780 } 11781 11782 return table_size; 11783} 11784 11785function ReadBlockLength(table, index, br) { 11786 var code; 11787 var nbits; 11788 code = ReadSymbol(table, index, br); 11789 nbits = Prefix.kBlockLengthPrefixCode[code].nbits; 11790 return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits); 11791} 11792 11793function TranslateShortCodes(code, ringbuffer, index) { 11794 var val; 11795 if (code < NUM_DISTANCE_SHORT_CODES) { 11796 index += kDistanceShortCodeIndexOffset[code]; 11797 index &= 3; 11798 val = ringbuffer[index] + kDistanceShortCodeValueOffset[code]; 11799 } else { 11800 val = code - NUM_DISTANCE_SHORT_CODES + 1; 11801 } 11802 return val; 11803} 11804 11805function MoveToFront(v, index) { 11806 var value = v[index]; 11807 var i = index; 11808 for (; i; --i) v[i] = v[i - 1]; 11809 v[0] = value; 11810} 11811 11812function InverseMoveToFrontTransform(v, v_len) { 11813 var mtf = new Uint8Array(256); 11814 var i; 11815 for (i = 0; i < 256; ++i) { 11816 mtf[i] = i; 11817 } 11818 for (i = 0; i < v_len; ++i) { 11819 var index = v[i]; 11820 v[i] = mtf[index]; 11821 if (index) MoveToFront(mtf, index); 11822 } 11823} 11824 11825/* Contains a collection of huffman trees with the same alphabet size. */ 11826function HuffmanTreeGroup(alphabet_size, num_htrees) { 11827 this.alphabet_size = alphabet_size; 11828 this.num_htrees = num_htrees; 11829 this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); 11830 this.htrees = new Uint32Array(num_htrees); 11831} 11832 11833HuffmanTreeGroup.prototype.decode = function(br) { 11834 var i; 11835 var table_size; 11836 var next = 0; 11837 for (i = 0; i < this.num_htrees; ++i) { 11838 this.htrees[i] = next; 11839 table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br); 11840 next += table_size; 11841 } 11842}; 11843 11844function DecodeContextMap(context_map_size, br) { 11845 var out = { num_htrees: null, context_map: null }; 11846 var use_rle_for_zeros; 11847 var max_run_length_prefix = 0; 11848 var table; 11849 var i; 11850 11851 br.readMoreInput(); 11852 var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1; 11853 11854 var context_map = out.context_map = new Uint8Array(context_map_size); 11855 if (num_htrees <= 1) { 11856 return out; 11857 } 11858 11859 use_rle_for_zeros = br.readBits(1); 11860 if (use_rle_for_zeros) { 11861 max_run_length_prefix = br.readBits(4) + 1; 11862 } 11863 11864 table = []; 11865 for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) { 11866 table[i] = new HuffmanCode(0, 0); 11867 } 11868 11869 ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br); 11870 11871 for (i = 0; i < context_map_size;) { 11872 var code; 11873 11874 br.readMoreInput(); 11875 code = ReadSymbol(table, 0, br); 11876 if (code === 0) { 11877 context_map[i] = 0; 11878 ++i; 11879 } else if (code <= max_run_length_prefix) { 11880 var reps = 1 + (1 << code) + br.readBits(code); 11881 while (--reps) { 11882 if (i >= context_map_size) { 11883 throw new Error("[DecodeContextMap] i >= context_map_size"); 11884 } 11885 context_map[i] = 0; 11886 ++i; 11887 } 11888 } else { 11889 context_map[i] = code - max_run_length_prefix; 11890 ++i; 11891 } 11892 } 11893 if (br.readBits(1)) { 11894 InverseMoveToFrontTransform(context_map, context_map_size); 11895 } 11896 11897 return out; 11898} 11899 11900function DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) { 11901 var ringbuffer = tree_type * 2; 11902 var index = tree_type; 11903 var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br); 11904 var block_type; 11905 if (type_code === 0) { 11906 block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]; 11907 } else if (type_code === 1) { 11908 block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1; 11909 } else { 11910 block_type = type_code - 2; 11911 } 11912 if (block_type >= max_block_type) { 11913 block_type -= max_block_type; 11914 } 11915 block_types[tree_type] = block_type; 11916 ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type; 11917 ++indexes[index]; 11918} 11919 11920function CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) { 11921 var rb_size = ringbuffer_mask + 1; 11922 var rb_pos = pos & ringbuffer_mask; 11923 var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK; 11924 var nbytes; 11925 11926 /* For short lengths copy byte-by-byte */ 11927 if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) { 11928 while (len-- > 0) { 11929 br.readMoreInput(); 11930 ringbuffer[rb_pos++] = br.readBits(8); 11931 if (rb_pos === rb_size) { 11932 output.write(ringbuffer, rb_size); 11933 rb_pos = 0; 11934 } 11935 } 11936 return; 11937 } 11938 11939 if (br.bit_end_pos_ < 32) { 11940 throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32'); 11941 } 11942 11943 /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */ 11944 while (br.bit_pos_ < 32) { 11945 ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_); 11946 br.bit_pos_ += 8; 11947 ++rb_pos; 11948 --len; 11949 } 11950 11951 /* Copy remaining bytes from br.buf_ to ringbuffer. */ 11952 nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3; 11953 if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) { 11954 var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos; 11955 for (var x = 0; x < tail; x++) 11956 ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; 11957 11958 nbytes -= tail; 11959 rb_pos += tail; 11960 len -= tail; 11961 br_pos = 0; 11962 } 11963 11964 for (var x = 0; x < nbytes; x++) 11965 ringbuffer[rb_pos + x] = br.buf_[br_pos + x]; 11966 11967 rb_pos += nbytes; 11968 len -= nbytes; 11969 11970 /* If we wrote past the logical end of the ringbuffer, copy the tail of the 11971 ringbuffer to its beginning and flush the ringbuffer to the output. */ 11972 if (rb_pos >= rb_size) { 11973 output.write(ringbuffer, rb_size); 11974 rb_pos -= rb_size; 11975 for (var x = 0; x < rb_pos; x++) 11976 ringbuffer[x] = ringbuffer[rb_size + x]; 11977 } 11978 11979 /* If we have more to copy than the remaining size of the ringbuffer, then we 11980 first fill the ringbuffer from the input and then flush the ringbuffer to 11981 the output */ 11982 while (rb_pos + len >= rb_size) { 11983 nbytes = rb_size - rb_pos; 11984 if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) { 11985 throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); 11986 } 11987 output.write(ringbuffer, rb_size); 11988 len -= nbytes; 11989 rb_pos = 0; 11990 } 11991 11992 /* Copy straight from the input onto the ringbuffer. The ringbuffer will be 11993 flushed to the output at a later time. */ 11994 if (br.input_.read(ringbuffer, rb_pos, len) < len) { 11995 throw new Error('[CopyUncompressedBlockToOutput] not enough bytes'); 11996 } 11997 11998 /* Restore the state of the bit reader. */ 11999 br.reset(); 12000} 12001 12002/* Advances the bit reader position to the next byte boundary and verifies 12003 that any skipped bits are set to zero. */ 12004function JumpToByteBoundary(br) { 12005 var new_bit_pos = (br.bit_pos_ + 7) & ~7; 12006 var pad_bits = br.readBits(new_bit_pos - br.bit_pos_); 12007 return pad_bits == 0; 12008} 12009 12010function BrotliDecompressedSize(buffer) { 12011 var input = new BrotliInput(buffer); 12012 var br = new BrotliBitReader(input); 12013 DecodeWindowBits(br); 12014 var out = DecodeMetaBlockLength(br); 12015 return out.meta_block_length; 12016} 12017 12018exports.BrotliDecompressedSize = BrotliDecompressedSize; 12019 12020function BrotliDecompressBuffer(buffer, output_size) { 12021 var input = new BrotliInput(buffer); 12022 12023 if (output_size == null) { 12024 output_size = BrotliDecompressedSize(buffer); 12025 } 12026 12027 var output_buffer = new Uint8Array(output_size); 12028 var output = new BrotliOutput(output_buffer); 12029 12030 BrotliDecompress(input, output); 12031 12032 if (output.pos < output.buffer.length) { 12033 output.buffer = output.buffer.subarray(0, output.pos); 12034 } 12035 12036 return output.buffer; 12037} 12038 12039exports.BrotliDecompressBuffer = BrotliDecompressBuffer; 12040 12041function BrotliDecompress(input, output) { 12042 var i; 12043 var pos = 0; 12044 var input_end = 0; 12045 var window_bits = 0; 12046 var max_backward_distance; 12047 var max_distance = 0; 12048 var ringbuffer_size; 12049 var ringbuffer_mask; 12050 var ringbuffer; 12051 var ringbuffer_end; 12052 /* This ring buffer holds a few past copy distances that will be used by */ 12053 /* some special distance codes. */ 12054 var dist_rb = [ 16, 15, 11, 4 ]; 12055 var dist_rb_idx = 0; 12056 /* The previous 2 bytes used for context. */ 12057 var prev_byte1 = 0; 12058 var prev_byte2 = 0; 12059 var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)]; 12060 var block_type_trees; 12061 var block_len_trees; 12062 var br; 12063 12064 /* We need the slack region for the following reasons: 12065 - always doing two 8-byte copies for fast backward copying 12066 - transforms 12067 - flushing the input ringbuffer when decoding uncompressed blocks */ 12068 var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE; 12069 12070 br = new BrotliBitReader(input); 12071 12072 /* Decode window size. */ 12073 window_bits = DecodeWindowBits(br); 12074 max_backward_distance = (1 << window_bits) - 16; 12075 12076 ringbuffer_size = 1 << window_bits; 12077 ringbuffer_mask = ringbuffer_size - 1; 12078 ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength); 12079 ringbuffer_end = ringbuffer_size; 12080 12081 block_type_trees = []; 12082 block_len_trees = []; 12083 for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) { 12084 block_type_trees[x] = new HuffmanCode(0, 0); 12085 block_len_trees[x] = new HuffmanCode(0, 0); 12086 } 12087 12088 while (!input_end) { 12089 var meta_block_remaining_len = 0; 12090 var is_uncompressed; 12091 var block_length = [ 1 << 28, 1 << 28, 1 << 28 ]; 12092 var block_type = [ 0 ]; 12093 var num_block_types = [ 1, 1, 1 ]; 12094 var block_type_rb = [ 0, 1, 0, 1, 0, 1 ]; 12095 var block_type_rb_index = [ 0 ]; 12096 var distance_postfix_bits; 12097 var num_direct_distance_codes; 12098 var distance_postfix_mask; 12099 var num_distance_codes; 12100 var context_map = null; 12101 var context_modes = null; 12102 var num_literal_htrees; 12103 var dist_context_map = null; 12104 var num_dist_htrees; 12105 var context_offset = 0; 12106 var context_map_slice = null; 12107 var literal_htree_index = 0; 12108 var dist_context_offset = 0; 12109 var dist_context_map_slice = null; 12110 var dist_htree_index = 0; 12111 var context_lookup_offset1 = 0; 12112 var context_lookup_offset2 = 0; 12113 var context_mode; 12114 var htree_command; 12115 12116 for (i = 0; i < 3; ++i) { 12117 hgroup[i].codes = null; 12118 hgroup[i].htrees = null; 12119 } 12120 12121 br.readMoreInput(); 12122 12123 var _out = DecodeMetaBlockLength(br); 12124 meta_block_remaining_len = _out.meta_block_length; 12125 if (pos + meta_block_remaining_len > output.buffer.length) { 12126 /* We need to grow the output buffer to fit the additional data. */ 12127 var tmp = new Uint8Array( pos + meta_block_remaining_len ); 12128 tmp.set( output.buffer ); 12129 output.buffer = tmp; 12130 } 12131 input_end = _out.input_end; 12132 is_uncompressed = _out.is_uncompressed; 12133 12134 if (_out.is_metadata) { 12135 JumpToByteBoundary(br); 12136 12137 for (; meta_block_remaining_len > 0; --meta_block_remaining_len) { 12138 br.readMoreInput(); 12139 /* Read one byte and ignore it. */ 12140 br.readBits(8); 12141 } 12142 12143 continue; 12144 } 12145 12146 if (meta_block_remaining_len === 0) { 12147 continue; 12148 } 12149 12150 if (is_uncompressed) { 12151 br.bit_pos_ = (br.bit_pos_ + 7) & ~7; 12152 CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos, 12153 ringbuffer, ringbuffer_mask, br); 12154 pos += meta_block_remaining_len; 12155 continue; 12156 } 12157 12158 for (i = 0; i < 3; ++i) { 12159 num_block_types[i] = DecodeVarLenUint8(br) + 1; 12160 if (num_block_types[i] >= 2) { 12161 ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); 12162 ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); 12163 block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br); 12164 block_type_rb_index[i] = 1; 12165 } 12166 } 12167 12168 br.readMoreInput(); 12169 12170 distance_postfix_bits = br.readBits(2); 12171 num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits); 12172 distance_postfix_mask = (1 << distance_postfix_bits) - 1; 12173 num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits)); 12174 context_modes = new Uint8Array(num_block_types[0]); 12175 12176 for (i = 0; i < num_block_types[0]; ++i) { 12177 br.readMoreInput(); 12178 context_modes[i] = (br.readBits(2) << 1); 12179 } 12180 12181 var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br); 12182 num_literal_htrees = _o1.num_htrees; 12183 context_map = _o1.context_map; 12184 12185 var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br); 12186 num_dist_htrees = _o2.num_htrees; 12187 dist_context_map = _o2.context_map; 12188 12189 hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees); 12190 hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]); 12191 hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees); 12192 12193 for (i = 0; i < 3; ++i) { 12194 hgroup[i].decode(br); 12195 } 12196 12197 context_map_slice = 0; 12198 dist_context_map_slice = 0; 12199 context_mode = context_modes[block_type[0]]; 12200 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 12201 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 12202 htree_command = hgroup[1].htrees[0]; 12203 12204 while (meta_block_remaining_len > 0) { 12205 var cmd_code; 12206 var range_idx; 12207 var insert_code; 12208 var copy_code; 12209 var insert_length; 12210 var copy_length; 12211 var distance_code; 12212 var distance; 12213 var context; 12214 var j; 12215 var copy_dst; 12216 12217 br.readMoreInput(); 12218 12219 if (block_length[1] === 0) { 12220 DecodeBlockType(num_block_types[1], 12221 block_type_trees, 1, block_type, block_type_rb, 12222 block_type_rb_index, br); 12223 block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br); 12224 htree_command = hgroup[1].htrees[block_type[1]]; 12225 } 12226 --block_length[1]; 12227 cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br); 12228 range_idx = cmd_code >> 6; 12229 if (range_idx >= 2) { 12230 range_idx -= 2; 12231 distance_code = -1; 12232 } else { 12233 distance_code = 0; 12234 } 12235 insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7); 12236 copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7); 12237 insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset + 12238 br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits); 12239 copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset + 12240 br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits); 12241 prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask]; 12242 prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask]; 12243 for (j = 0; j < insert_length; ++j) { 12244 br.readMoreInput(); 12245 12246 if (block_length[0] === 0) { 12247 DecodeBlockType(num_block_types[0], 12248 block_type_trees, 0, block_type, block_type_rb, 12249 block_type_rb_index, br); 12250 block_length[0] = ReadBlockLength(block_len_trees, 0, br); 12251 context_offset = block_type[0] << kLiteralContextBits; 12252 context_map_slice = context_offset; 12253 context_mode = context_modes[block_type[0]]; 12254 context_lookup_offset1 = Context.lookupOffsets[context_mode]; 12255 context_lookup_offset2 = Context.lookupOffsets[context_mode + 1]; 12256 } 12257 context = (Context.lookup[context_lookup_offset1 + prev_byte1] | 12258 Context.lookup[context_lookup_offset2 + prev_byte2]); 12259 literal_htree_index = context_map[context_map_slice + context]; 12260 --block_length[0]; 12261 prev_byte2 = prev_byte1; 12262 prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br); 12263 ringbuffer[pos & ringbuffer_mask] = prev_byte1; 12264 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 12265 output.write(ringbuffer, ringbuffer_size); 12266 } 12267 ++pos; 12268 } 12269 meta_block_remaining_len -= insert_length; 12270 if (meta_block_remaining_len <= 0) break; 12271 12272 if (distance_code < 0) { 12273 var context; 12274 12275 br.readMoreInput(); 12276 if (block_length[2] === 0) { 12277 DecodeBlockType(num_block_types[2], 12278 block_type_trees, 2, block_type, block_type_rb, 12279 block_type_rb_index, br); 12280 block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br); 12281 dist_context_offset = block_type[2] << kDistanceContextBits; 12282 dist_context_map_slice = dist_context_offset; 12283 } 12284 --block_length[2]; 12285 context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff; 12286 dist_htree_index = dist_context_map[dist_context_map_slice + context]; 12287 distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br); 12288 if (distance_code >= num_direct_distance_codes) { 12289 var nbits; 12290 var postfix; 12291 var offset; 12292 distance_code -= num_direct_distance_codes; 12293 postfix = distance_code & distance_postfix_mask; 12294 distance_code >>= distance_postfix_bits; 12295 nbits = (distance_code >> 1) + 1; 12296 offset = ((2 + (distance_code & 1)) << nbits) - 4; 12297 distance_code = num_direct_distance_codes + 12298 ((offset + br.readBits(nbits)) << 12299 distance_postfix_bits) + postfix; 12300 } 12301 } 12302 12303 /* Convert the distance code to the actual distance by possibly looking */ 12304 /* up past distnaces from the ringbuffer. */ 12305 distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx); 12306 if (distance < 0) { 12307 throw new Error('[BrotliDecompress] invalid distance'); 12308 } 12309 12310 if (pos < max_backward_distance && 12311 max_distance !== max_backward_distance) { 12312 max_distance = pos; 12313 } else { 12314 max_distance = max_backward_distance; 12315 } 12316 12317 copy_dst = pos & ringbuffer_mask; 12318 12319 if (distance > max_distance) { 12320 if (copy_length >= BrotliDictionary.minDictionaryWordLength && 12321 copy_length <= BrotliDictionary.maxDictionaryWordLength) { 12322 var offset = BrotliDictionary.offsetsByLength[copy_length]; 12323 var word_id = distance - max_distance - 1; 12324 var shift = BrotliDictionary.sizeBitsByLength[copy_length]; 12325 var mask = (1 << shift) - 1; 12326 var word_idx = word_id & mask; 12327 var transform_idx = word_id >> shift; 12328 offset += word_idx * copy_length; 12329 if (transform_idx < Transform.kNumTransforms) { 12330 var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx); 12331 copy_dst += len; 12332 pos += len; 12333 meta_block_remaining_len -= len; 12334 if (copy_dst >= ringbuffer_end) { 12335 output.write(ringbuffer, ringbuffer_size); 12336 12337 for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++) 12338 ringbuffer[_x] = ringbuffer[ringbuffer_end + _x]; 12339 } 12340 } else { 12341 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + 12342 " len: " + copy_length + " bytes left: " + meta_block_remaining_len); 12343 } 12344 } else { 12345 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + 12346 " len: " + copy_length + " bytes left: " + meta_block_remaining_len); 12347 } 12348 } else { 12349 if (distance_code > 0) { 12350 dist_rb[dist_rb_idx & 3] = distance; 12351 ++dist_rb_idx; 12352 } 12353 12354 if (copy_length > meta_block_remaining_len) { 12355 throw new Error("Invalid backward reference. pos: " + pos + " distance: " + distance + 12356 " len: " + copy_length + " bytes left: " + meta_block_remaining_len); 12357 } 12358 12359 for (j = 0; j < copy_length; ++j) { 12360 ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask]; 12361 if ((pos & ringbuffer_mask) === ringbuffer_mask) { 12362 output.write(ringbuffer, ringbuffer_size); 12363 } 12364 ++pos; 12365 --meta_block_remaining_len; 12366 } 12367 } 12368 12369 /* When we get here, we must have inserted at least one literal and */ 12370 /* made a copy of at least length two, therefore accessing the last 2 */ 12371 /* bytes is valid. */ 12372 prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask]; 12373 prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask]; 12374 } 12375 12376 /* Protect pos from overflow, wrap it around at every GB of input data */ 12377 pos &= 0x3fffffff; 12378 } 12379 12380 output.write(ringbuffer, pos & ringbuffer_mask); 12381} 12382 12383exports.BrotliDecompress = BrotliDecompress; 12384 12385BrotliDictionary.init(); 12386 12387 12388/***/ }), 12389/* 118 */ 12390/***/ (function(module, exports) { 12391 12392function BrotliInput(buffer) { 12393 this.buffer = buffer; 12394 this.pos = 0; 12395} 12396 12397BrotliInput.prototype.read = function(buf, i, count) { 12398 if (this.pos + count > this.buffer.length) { 12399 count = this.buffer.length - this.pos; 12400 } 12401 12402 for (var p = 0; p < count; p++) 12403 buf[i + p] = this.buffer[this.pos + p]; 12404 12405 this.pos += count; 12406 return count; 12407} 12408 12409exports.BrotliInput = BrotliInput; 12410 12411function BrotliOutput(buf) { 12412 this.buffer = buf; 12413 this.pos = 0; 12414} 12415 12416BrotliOutput.prototype.write = function(buf, count) { 12417 if (this.pos + count > this.buffer.length) 12418 throw new Error('Output buffer is not large enough'); 12419 12420 this.buffer.set(buf.subarray(0, count), this.pos); 12421 this.pos += count; 12422 return count; 12423}; 12424 12425exports.BrotliOutput = BrotliOutput; 12426 12427 12428/***/ }), 12429/* 119 */ 12430/***/ (function(module, exports, __webpack_require__) { 12431 12432/* Copyright 2013 Google Inc. All Rights Reserved. 12433 12434 Licensed under the Apache License, Version 2.0 (the "License"); 12435 you may not use this file except in compliance with the License. 12436 You may obtain a copy of the License at 12437 12438 http://www.apache.org/licenses/LICENSE-2.0 12439 12440 Unless required by applicable law or agreed to in writing, software 12441 distributed under the License is distributed on an "AS IS" BASIS, 12442 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12443 See the License for the specific language governing permissions and 12444 limitations under the License. 12445 12446 Collection of static dictionary words. 12447*/ 12448 12449var data = __webpack_require__(286); 12450exports.init = function() { 12451 exports.dictionary = data.init(); 12452}; 12453 12454exports.offsetsByLength = new Uint32Array([ 12455 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 12456 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 12457 115968, 118528, 119872, 121280, 122016, 12458]); 12459
vendor: 5,906 bytes, lines 12460-12658
12460exports.sizeBitsByLength = new Uint8Array([ 12461 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 12462 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 12463 7, 6, 6, 5, 5, 12464]); 12465 12466exports.minDictionaryWordLength = 4; 12467exports.maxDictionaryWordLength = 24; 12468 12469 12470/***/ }), 12471/* 120 */ 12472/***/ (function(module, exports) { 12473 12474function HuffmanCode(bits, value) { 12475 this.bits = bits; /* number of bits used for this symbol */ 12476 this.value = value; /* symbol value or table offset */ 12477} 12478 12479exports.HuffmanCode = HuffmanCode; 12480 12481var MAX_LENGTH = 15; 12482 12483/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the 12484 bit-wise reversal of the len least significant bits of key. */ 12485function GetNextKey(key, len) { 12486 var step = 1 << (len - 1); 12487 while (key & step) { 12488 step >>= 1; 12489 } 12490 return (key & (step - 1)) + step; 12491} 12492 12493/* Stores code in table[0], table[step], table[2*step], ..., table[end] */ 12494/* Assumes that end is an integer multiple of step */ 12495function ReplicateValue(table, i, step, end, code) { 12496 do { 12497 end -= step; 12498 table[i + end] = new HuffmanCode(code.bits, code.value); 12499 } while (end > 0); 12500} 12501 12502/* Returns the table width of the next 2nd level table. count is the histogram 12503 of bit lengths for the remaining symbols, len is the code length of the next 12504 processed symbol */ 12505function NextTableBitSize(count, len, root_bits) { 12506 var left = 1 << (len - root_bits); 12507 while (len < MAX_LENGTH) { 12508 left -= count[len]; 12509 if (left <= 0) break; 12510 ++len; 12511 left <<= 1; 12512 } 12513 return len - root_bits; 12514} 12515 12516exports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) { 12517 var start_table = table; 12518 var code; /* current table entry */ 12519 var len; /* current code length */ 12520 var symbol; /* symbol index in original or sorted table */ 12521 var key; /* reversed prefix code */ 12522 var step; /* step size to replicate values in current table */ 12523 var low; /* low bits for current root entry */ 12524 var mask; /* mask for low bits */ 12525 var table_bits; /* key length of current table */ 12526 var table_size; /* size of current table */ 12527 var total_size; /* sum of root table size and 2nd level table sizes */ 12528 var sorted; /* symbols sorted by code length */ 12529 var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */ 12530 var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */ 12531 12532 sorted = new Int32Array(code_lengths_size); 12533 12534 /* build histogram of code lengths */ 12535 for (symbol = 0; symbol < code_lengths_size; symbol++) { 12536 count[code_lengths[symbol]]++; 12537 } 12538 12539 /* generate offsets into sorted symbol table by code length */ 12540 offset[1] = 0; 12541 for (len = 1; len < MAX_LENGTH; len++) { 12542 offset[len + 1] = offset[len] + count[len]; 12543 } 12544 12545 /* sort symbols by length, by symbol order within each length */ 12546 for (symbol = 0; symbol < code_lengths_size; symbol++) { 12547 if (code_lengths[symbol] !== 0) { 12548 sorted[offset[code_lengths[symbol]]++] = symbol; 12549 } 12550 } 12551 12552 table_bits = root_bits; 12553 table_size = 1 << table_bits; 12554 total_size = table_size; 12555 12556 /* special case code with only one value */ 12557 if (offset[MAX_LENGTH] === 1) { 12558 for (key = 0; key < total_size; ++key) { 12559 root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff); 12560 } 12561 12562 return total_size; 12563 } 12564 12565 /* fill in root table */ 12566 key = 0; 12567 symbol = 0; 12568 for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { 12569 for (; count[len] > 0; --count[len]) { 12570 code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff); 12571 ReplicateValue(root_table, table + key, step, table_size, code); 12572 key = GetNextKey(key, len); 12573 } 12574 } 12575 12576 /* fill in 2nd level tables and add pointers to root table */ 12577 mask = total_size - 1; 12578 low = -1; 12579 for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) { 12580 for (; count[len] > 0; --count[len]) { 12581 if ((key & mask) !== low) { 12582 table += table_size; 12583 table_bits = NextTableBitSize(count, len, root_bits); 12584 table_size = 1 << table_bits; 12585 total_size += table_size; 12586 low = key & mask; 12587 root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff); 12588 } 12589 code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff); 12590 ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code); 12591 key = GetNextKey(key, len); 12592 } 12593 } 12594 12595 return total_size; 12596} 12597 12598 12599/***/ }), 12600/* 121 */ 12601/***/ (function(module, exports, __webpack_require__) { 12602 12603/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 12604 12605/* 12606PDFImage - embeds images in PDF documents 12607By Devon Govett 12608 */ 12609 12610(function() { 12611 var Data, JPEG, PDFImage, PNG, fs; 12612 12613 fs = __webpack_require__(8); 12614 12615 Data = __webpack_require__(298); 12616 12617 JPEG = __webpack_require__(299); 12618 12619 PNG = __webpack_require__(300); 12620 12621 PDFImage = (function() { 12622 function PDFImage() {} 12623 12624 PDFImage.open = function(src, label) { 12625 var data, match; 12626 if (Buffer.isBuffer(src)) { 12627 data = src; 12628 } else if (src instanceof ArrayBuffer) { 12629 data = new Buffer(new Uint8Array(src)); 12630 } else { 12631 if (match = /^data:.+;base64,(.*)$/.exec(src)) { 12632 data = new Buffer(match[1], 'base64'); 12633 } else { 12634 data = fs.readFileSync(src); 12635 if (!data) { 12636 return; 12637 } 12638 } 12639 } 12640 if (data[0] === 0xff && data[1] === 0xd8) { 12641 return new JPEG(data, label); 12642 } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') { 12643 return new PNG(data, label); 12644 } else { 12645 throw new Error('Unknown image format.'); 12646 } 12647 }; 12648 12649 return PDFImage; 12650 12651 })(); 12652 12653 module.exports = PDFImage; 12654 12655}).call(this); 12656 12657/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 12658
12659/***/ }), 12660/* 122 */ 12661/***/ (function(module, exports, __webpack_require__) { 12662 12663/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["pdfMake"] = __webpack_require__(123); 12664/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) 12665 12666/***/ }), 12667/* 123 */ 12668/***/ (function(module, exports, __webpack_require__) { 12669 12670"use strict"; 12671/* WEBPACK VAR INJECTION */(function(Buffer, global) { 12672 12673var PdfPrinter = __webpack_require__(126); 12674var isFunction = __webpack_require__(0).isFunction; 12675var FileSaver = __webpack_require__(306); 12676var saveAs = FileSaver.saveAs; 12677 12678var defaultClientFonts = { 12679 Roboto: { 12680 normal: 'Roboto-Regular.ttf', 12681 bold: 'Roboto-Medium.ttf', 12682 italics: 'Roboto-Italic.ttf', 12683 bolditalics: 'Roboto-MediumItalic.ttf' 12684 } 12685}; 12686 12687function Document(docDefinition, tableLayouts, fonts, vfs) { 12688 this.docDefinition = docDefinition; 12689 this.tableLayouts = tableLayouts || null; 12690 this.fonts = fonts || defaultClientFonts; 12691 this.vfs = vfs; 12692} 12693 12694function canCreatePdf() { 12695 // Ensure the browser provides the level of support needed 12696 if (!Object.keys) { 12697 return false; 12698 } 12699 return true; 12700} 12701 12702Document.prototype._createDoc = function (options, callback) { 12703 options = options || {}; 12704 if (this.tableLayouts) { 12705 options.tableLayouts = this.tableLayouts; 12706 } 12707 12708 var printer = new PdfPrinter(this.fonts); 12709 __webpack_require__(8).bindFS(this.vfs); // bind virtual file system to file system 12710 12711 var doc = printer.createPdfKitDocument(this.docDefinition, options); 12712 var chunks = []; 12713 var result; 12714 12715 doc.on('readable', function () { 12716 var chunk; 12717 while ((chunk = doc.read(9007199254740991)) !== null) { 12718 chunks.push(chunk); 12719 } 12720 }); 12721 doc.on('end', function () { 12722 result = Buffer.concat(chunks); 12723 callback(result, doc._pdfMakePages); 12724 }); 12725 doc.end(); 12726}; 12727 12728Document.prototype._getPages = function (options, cb) { 12729 if (!cb) { 12730 throw '_getPages is an async method and needs a callback argument'; 12731 } 12732 this._createDoc(options, function (ignoreBuffer, pages) { 12733 cb(pages); 12734 }); 12735}; 12736 12737Document.prototype._bufferToBlob = function (buffer) { 12738 var blob; 12739 try { 12740 blob = new Blob([buffer], {type: 'application/pdf'}); 12741 } catch (e) { 12742 // Old browser which can't handle it without making it an byte array (ie10) 12743 if (e.name === 'InvalidStateError') { 12744 var byteArray = new Uint8Array(buffer); 12745 blob = new Blob([byteArray.buffer], {type: 'application/pdf'}); 12746 } 12747 } 12748 12749 if (!blob) { 12750 throw 'Could not generate blob'; 12751 } 12752 12753 return blob; 12754}; 12755 12756Document.prototype._openWindow = function () { 12757 // we have to open the window immediately and store the reference 12758 // otherwise popup blockers will stop us 12759 var win = window.open('', '_blank'); 12760 if (win === null) { 12761 throw 'Open PDF in new window blocked by browser'; 12762 } 12763 12764 return win; 12765}; 12766 12767Document.prototype._openPdf = function (options, win) { 12768 if (!win) { 12769 win = this._openWindow(); 12770 } 12771 try { 12772 this.getBlob(function (result) { 12773 var urlCreator = window.URL || window.webkitURL; 12774 var pdfUrl = urlCreator.createObjectURL(result); 12775 win.location.href = pdfUrl; 12776 }, options); 12777 } catch (e) { 12778 win.close(); 12779 throw e; 12780 } 12781}; 12782 12783Document.prototype.open = function (options, win) { 12784 options = options || {}; 12785 options.autoPrint = false; 12786 win = win || null; 12787 12788 this._openPdf(options, win); 12789}; 12790 12791 12792Document.prototype.print = function (options, win) { 12793 options = options || {}; 12794 options.autoPrint = true; 12795 win = win || null; 12796 12797 this._openPdf(options, win); 12798}; 12799 12800Document.prototype.download = function (defaultFileName, cb, options) { 12801 if (isFunction(defaultFileName)) { 12802 cb = defaultFileName; 12803 defaultFileName = null; 12804 } 12805 12806 defaultFileName = defaultFileName || 'file.pdf'; 12807 this.getBlob(function (result) { 12808 saveAs(result, defaultFileName); 12809 12810 if (isFunction(cb)) { 12811 cb(); 12812 } 12813 }, options); 12814}; 12815 12816Document.prototype.getBase64 = function (cb, options) { 12817 if (!cb) { 12818 throw 'getBase64 is an async method and needs a callback argument'; 12819 } 12820 this.getBuffer(function (buffer) { 12821 cb(buffer.toString('base64')); 12822 }, options); 12823}; 12824 12825Document.prototype.getDataUrl = function (cb, options) { 12826 if (!cb) { 12827 throw 'getDataUrl is an async method and needs a callback argument'; 12828 } 12829 this.getBuffer(function (buffer) { 12830 cb('data:application/pdf;base64,' + buffer.toString('base64')); 12831 }, options); 12832}; 12833 12834Document.prototype.getBlob = function (cb, options) { 12835 if (!cb) { 12836 throw 'getBlob is an async method and needs a callback argument'; 12837 } 12838 var that = this; 12839 this.getBuffer(function (result) { 12840 var blob = that._bufferToBlob(result);
vendor: 9,205 bytes, lines 12841-13158
12841 cb(blob); 12842 }, options); 12843}; 12844 12845Document.prototype.getBuffer = function (cb, options) { 12846 if (!cb) { 12847 throw 'getBuffer is an async method and needs a callback argument'; 12848 } 12849 this._createDoc(options, function (buffer) { 12850 cb(buffer); 12851 }); 12852}; 12853 12854module.exports = { 12855 createPdf: function (docDefinition) { 12856 if (!canCreatePdf()) { 12857 throw 'Your browser does not provide the level of support needed'; 12858 } 12859 return new Document(docDefinition, global.pdfMake.tableLayouts, global.pdfMake.fonts, global.pdfMake.vfs); 12860 } 12861}; 12862 12863/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(7))) 12864 12865/***/ }), 12866/* 124 */ 12867/***/ (function(module, exports, __webpack_require__) { 12868 12869"use strict"; 12870 12871 12872exports.byteLength = byteLength 12873exports.toByteArray = toByteArray 12874exports.fromByteArray = fromByteArray 12875 12876var lookup = [] 12877var revLookup = [] 12878var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array 12879 12880var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' 12881for (var i = 0, len = code.length; i < len; ++i) { 12882 lookup[i] = code[i] 12883 revLookup[code.charCodeAt(i)] = i 12884} 12885 12886// Support decoding URL-safe base64 strings, as Node.js does. 12887// See: https://en.wikipedia.org/wiki/Base64#URL_applications 12888revLookup['-'.charCodeAt(0)] = 62 12889revLookup['_'.charCodeAt(0)] = 63 12890 12891function placeHoldersCount (b64) { 12892 var len = b64.length 12893 if (len % 4 > 0) { 12894 throw new Error('Invalid string. Length must be a multiple of 4') 12895 } 12896 12897 // the number of equal signs (place holders) 12898 // if there are two placeholders, than the two characters before it 12899 // represent one byte 12900 // if there is only one, then the three characters before it represent 2 bytes 12901 // this is just a cheap hack to not do indexOf twice 12902 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 12903} 12904 12905function byteLength (b64) { 12906 // base64 is 4/3 + up to two characters of the original data 12907 return (b64.length * 3 / 4) - placeHoldersCount(b64) 12908} 12909 12910function toByteArray (b64) { 12911 var i, l, tmp, placeHolders, arr 12912 var len = b64.length 12913 placeHolders = placeHoldersCount(b64) 12914 12915 arr = new Arr((len * 3 / 4) - placeHolders) 12916 12917 // if there are placeholders, only get up to the last complete 4 chars 12918 l = placeHolders > 0 ? len - 4 : len 12919 12920 var L = 0 12921 12922 for (i = 0; i < l; i += 4) { 12923 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] 12924 arr[L++] = (tmp >> 16) & 0xFF 12925 arr[L++] = (tmp >> 8) & 0xFF 12926 arr[L++] = tmp & 0xFF 12927 } 12928 12929 if (placeHolders === 2) { 12930 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) 12931 arr[L++] = tmp & 0xFF 12932 } else if (placeHolders === 1) { 12933 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) 12934 arr[L++] = (tmp >> 8) & 0xFF 12935 arr[L++] = tmp & 0xFF 12936 } 12937 12938 return arr 12939} 12940 12941function tripletToBase64 (num) { 12942 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] 12943} 12944 12945function encodeChunk (uint8, start, end) { 12946 var tmp 12947 var output = [] 12948 for (var i = start; i < end; i += 3) { 12949 tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) 12950 output.push(tripletToBase64(tmp)) 12951 } 12952 return output.join('') 12953} 12954 12955function fromByteArray (uint8) { 12956 var tmp 12957 var len = uint8.length 12958 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes 12959 var output = '' 12960 var parts = [] 12961 var maxChunkLength = 16383 // must be multiple of 3 12962 12963 // go through the array every three bytes, we'll deal with trailing stuff later 12964 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { 12965 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) 12966 } 12967 12968 // pad the end with zeros, but make sure to not forget the extra bytes 12969 if (extraBytes === 1) { 12970 tmp = uint8[len - 1] 12971 output += lookup[tmp >> 2] 12972 output += lookup[(tmp << 4) & 0x3F] 12973 output += '==' 12974 } else if (extraBytes === 2) { 12975 tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) 12976 output += lookup[tmp >> 10] 12977 output += lookup[(tmp >> 4) & 0x3F] 12978 output += lookup[(tmp << 2) & 0x3F] 12979 output += '=' 12980 } 12981 12982 parts.push(output) 12983 12984 return parts.join('') 12985} 12986 12987 12988/***/ }), 12989/* 125 */ 12990/***/ (function(module, exports) { 12991 12992exports.read = function (buffer, offset, isLE, mLen, nBytes) { 12993 var e, m 12994 var eLen = nBytes * 8 - mLen - 1 12995 var eMax = (1 << eLen) - 1 12996 var eBias = eMax >> 1 12997 var nBits = -7 12998 var i = isLE ? (nBytes - 1) : 0 12999 var d = isLE ? -1 : 1 13000 var s = buffer[offset + i] 13001 13002 i += d 13003 13004 e = s & ((1 << (-nBits)) - 1) 13005 s >>= (-nBits) 13006 nBits += eLen 13007 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} 13008 13009 m = e & ((1 << (-nBits)) - 1) 13010 e >>= (-nBits) 13011 nBits += mLen 13012 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} 13013 13014 if (e === 0) { 13015 e = 1 - eBias 13016 } else if (e === eMax) { 13017 return m ? NaN : ((s ? -1 : 1) * Infinity) 13018 } else { 13019 m = m + Math.pow(2, mLen) 13020 e = e - eBias 13021 } 13022 return (s ? -1 : 1) * m * Math.pow(2, e - mLen) 13023} 13024 13025exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { 13026 var e, m, c 13027 var eLen = nBytes * 8 - mLen - 1 13028 var eMax = (1 << eLen) - 1 13029 var eBias = eMax >> 1 13030 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) 13031 var i = isLE ? 0 : (nBytes - 1) 13032 var d = isLE ? 1 : -1 13033 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 13034 13035 value = Math.abs(value) 13036 13037 if (isNaN(value) || value === Infinity) { 13038 m = isNaN(value) ? 1 : 0 13039 e = eMax 13040 } else { 13041 e = Math.floor(Math.log(value) / Math.LN2) 13042 if (value * (c = Math.pow(2, -e)) < 1) { 13043 e-- 13044 c *= 2 13045 } 13046 if (e + eBias >= 1) { 13047 value += rt / c 13048 } else { 13049 value += rt * Math.pow(2, 1 - eBias) 13050 } 13051 if (value * c >= 2) { 13052 e++ 13053 c /= 2 13054 } 13055 13056 if (e + eBias >= eMax) { 13057 m = 0 13058 e = eMax 13059 } else if (e + eBias >= 1) { 13060 m = (value * c - 1) * Math.pow(2, mLen) 13061 e = e + eBias 13062 } else { 13063 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) 13064 e = 0 13065 } 13066 } 13067 13068 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} 13069 13070 e = (e << mLen) | m 13071 eLen += mLen 13072 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} 13073 13074 buffer[offset + i - d] |= s * 128 13075} 13076 13077 13078/***/ }), 13079/* 126 */ 13080/***/ (function(module, exports, __webpack_require__) { 13081 13082"use strict"; 13083/*eslint no-unused-vars: ["error", {"args": "none"}]*/ 13084 13085 13086var FontProvider = __webpack_require__(127); 13087var LayoutBuilder = __webpack_require__(128); 13088var PdfKit = __webpack_require__(138); 13089var sizes = __webpack_require__(303); 13090var ImageMeasure = __webpack_require__(304); 13091var textDecorator = __webpack_require__(305); 13092var TextTools = __webpack_require__(42); 13093var isFunction = __webpack_require__(0).isFunction; 13094var isString = __webpack_require__(0).isString; 13095var isNumber = __webpack_require__(0).isNumber; 13096var isBoolean = __webpack_require__(0).isBoolean; 13097var isArray = __webpack_require__(0).isArray; 13098 13099//////////////////////////////////////// 13100// PdfPrinter 13101 13102/** 13103 * @class Creates an instance of a PdfPrinter which turns document definition into a pdf 13104 * 13105 * @param {Object} fontDescriptors font definition dictionary 13106 * 13107 * @example 13108 * var fontDescriptors = { 13109 * Roboto: { 13110 * normal: 'fonts/Roboto-Regular.ttf', 13111 * bold: 'fonts/Roboto-Medium.ttf', 13112 * italics: 'fonts/Roboto-Italic.ttf', 13113 * bolditalics: 'fonts/Roboto-MediumItalic.ttf' 13114 * } 13115 * }; 13116 * 13117 * var printer = new PdfPrinter(fontDescriptors); 13118 */ 13119function PdfPrinter(fontDescriptors) { 13120 this.fontDescriptors = fontDescriptors; 13121} 13122 13123/** 13124 * Executes layout engine for the specified document and renders it into a pdfkit document 13125 * ready to be saved. 13126 * 13127 * @param {Object} docDefinition document definition 13128 * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder) 13129 * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition 13130 * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document 13131 * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default) 13132 * @param {Number} docDefinition.pageSize.width width 13133 * @param {Number} docDefinition.pageSize.height height 13134 * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units) 13135 * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render 13136 * 13137 * @example 13138 * 13139 * var docDefinition = { 13140 * info: { 13141 * title: 'awesome Document', 13142 * author: 'john doe', 13143 * subject: 'subject of document', 13144 * keywords: 'keywords for document', 13145 * }, 13146 * content: [ 13147 * 'First paragraph', 13148 * 'Second paragraph, this time a little bit longer', 13149 * { text: 'Third paragraph, slightly bigger font size', fontSize: 20 }, 13150 * { text: 'Another paragraph using a named style', style: 'header' }, 13151 * { text: ['playing with ', 'inlines' ] }, 13152 * { text: ['and ', { text: 'restyling ', bold: true }, 'them'] }, 13153 * ], 13154 * styles: { 13155 * header: { fontSize: 30, bold: true } 13156 * } 13157 * } 13158 *
13159 * var pdfKitDoc = printer.createPdfKitDocument(docDefinition); 13160 * 13161 * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf')); 13162 * pdfKitDoc.end(); 13163 * 13164 * @return {Object} a pdfKit document object which can be saved or encode to data-url 13165 */ 13166PdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) { 13167 options = options || {}; 13168 13169 var pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation); 13170 var compressPdf = isBoolean(docDefinition.compress) ? docDefinition.compress : true; 13171 13172 this.pdfKitDoc = new PdfKit({size: [pageSize.width, pageSize.height], autoFirstPage: false, compress: compressPdf}); 13173 setMetadata(docDefinition, this.pdfKitDoc); 13174 13175 this.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc); 13176 13177 docDefinition.images = docDefinition.images || {}; 13178 13179 var builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins || 40), new ImageMeasure(this.pdfKitDoc, docDefinition.images)); 13180 13181 registerDefaultTableLayouts(builder); 13182 if (options.tableLayouts) { 13183 builder.registerTableLayouts(options.tableLayouts); 13184 } 13185 13186 var pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {fontSize: 12, font: 'Roboto'}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore); 13187 var maxNumberPages = docDefinition.maxPagesNumber || -1; 13188 if (isNumber(maxNumberPages) && maxNumberPages > -1) { 13189 pages = pages.slice(0, maxNumberPages); 13190 } 13191 13192 // if pageSize.height is set to Infinity, calculate the actual height of the page that 13193 // was laid out using the height of each of the items in the page. 13194 if (pageSize.height === Infinity) { 13195 var pageHeight = calculatePageHeight(pages, docDefinition.pageMargins); 13196 this.pdfKitDoc.options.size = [pageSize.width, pageHeight]; 13197 } 13198 13199 renderPages(pages, this.fontProvider, this.pdfKitDoc, options.progressCallback); 13200 13201 if (options.autoPrint) { 13202 var printActionRef = this.pdfKitDoc.ref({ 13203 Type: 'Action', 13204 S: 'Named', 13205 N: 'Print' 13206 }); 13207 this.pdfKitDoc._root.data.OpenAction = printActionRef; 13208 printActionRef.end(); 13209 } 13210 return this.pdfKitDoc; 13211}; 13212 13213function setMetadata(docDefinition, pdfKitDoc) { 13214 // PDF standard has these properties reserved: Title, Author, Subject, Keywords, 13215 // Creator, Producer, CreationDate, ModDate, Trapped. 13216 // To keep the pdfmake api consistent, the info field are defined lowercase. 13217 // Custom properties don't contain a space. 13218 function standardizePropertyKey(key) { 13219 var standardProperties = ['Title', 'Author', 'Subject', 'Keywords', 13220 'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped']; 13221 var standardizedKey = key.charAt(0).toUpperCase() + key.slice(1); 13222 if (standardProperties.indexOf(standardizedKey) !== -1) { 13223 return standardizedKey; 13224 } 13225 13226 return key.replace(/\s+/g, ''); 13227 } 13228 13229 pdfKitDoc.info.Producer = 'pdfmake'; 13230 pdfKitDoc.info.Creator = 'pdfmake'; 13231 13232 if (docDefinition.info) { 13233 for (var key in docDefinition.info) { 13234 var value = docDefinition.info[key]; 13235 if (value) { 13236 key = standardizePropertyKey(key); 13237 pdfKitDoc.info[key] = value; 13238 } 13239 } 13240 } 13241} 13242 13243function calculatePageHeight(pages, margins) { 13244 function getItemHeight(item) { 13245 if (isFunction(item.item.getHeight)) { 13246 return item.item.getHeight(); 13247 } else if (item.item._height) { 13248 return item.item._height; 13249 } else { 13250 // TODO: add support for next item types 13251 return 0; 13252 } 13253 } 13254 13255 var fixedMargins = fixPageMargins(margins || 40); 13256 var height = fixedMargins.top + fixedMargins.bottom; 13257 pages.forEach(function (page) { 13258 page.items.forEach(function (item) { 13259 height += getItemHeight(item); 13260 }); 13261 }); 13262 return height; 13263} 13264 13265function fixPageSize(pageSize, pageOrientation) { 13266 function isNeedSwapPageSizes(pageOrientation) { 13267 if (isString(pageOrientation)) { 13268 pageOrientation = pageOrientation.toLowerCase(); 13269 return ((pageOrientation === 'portrait') && (size.width > size.height)) || 13270 ((pageOrientation === 'landscape') && (size.width < size.height)); 13271 } 13272 return false; 13273 } 13274 13275 // if pageSize.height is set to auto, set the height to infinity so there are no page breaks. 13276 if (pageSize && pageSize.height === 'auto') { 13277 pageSize.height = Infinity; 13278 } 13279 13280 var size = pageSize2widthAndHeight(pageSize || 'A4'); 13281 if (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes 13282 size = {width: size.height, height: size.width}; 13283 } 13284 size.orientation = size.width > size.height ? 'landscape' : 'portrait'; 13285 return size; 13286} 13287 13288function fixPageMargins(margin) { 13289 if (!margin) { 13290 return null; 13291 } 13292 13293 if (isNumber(margin)) { 13294 margin = {left: margin, right: margin, top: margin, bottom: margin}; 13295 } else if (isArray(margin)) { 13296 if (margin.length === 2) { 13297 margin = {left: margin[0], top: margin[1], right: margin[0], bottom: margin[1]}; 13298 } else if (margin.length === 4) { 13299 margin = {left: margin[0], top: margin[1], right: margin[2], bottom: margin[3]}; 13300 } else { 13301 throw 'Invalid pageMargins definition'; 13302 } 13303 } 13304 13305 return margin; 13306} 13307
13308function registerDefaultTableLayouts(layoutBuilder) { 13309 layoutBuilder.registerTableLayouts({ 13310 noBorders: { 13311 hLineWidth: function (i) { 13312 return 0; 13313 }, 13314 vLineWidth: function (i) { 13315 return 0; 13316 }, 13317 paddingLeft: function (i) { 13318 return i && 4 || 0; 13319 }, 13320 paddingRight: function (i, node) { 13321 return (i < node.table.widths.length - 1) ? 4 : 0; 13322 } 13323 }, 13324 headerLineOnly: { 13325 hLineWidth: function (i, node) { 13326 if (i === 0 || i === node.table.body.length) { 13327 return 0; 13328 } 13329 return (i === node.table.headerRows) ? 2 : 0; 13330 }, 13331 vLineWidth: function (i) { 13332 return 0; 13333 }, 13334 paddingLeft: function (i) { 13335 return i === 0 ? 0 : 8; 13336 }, 13337 paddingRight: function (i, node) { 13338 return (i === node.table.widths.length - 1) ? 0 : 8; 13339 } 13340 }, 13341 lightHorizontalLines: { 13342 hLineWidth: function (i, node) { 13343 if (i === 0 || i === node.table.body.length) { 13344 return 0; 13345 } 13346 return (i === node.table.headerRows) ? 2 : 1; 13347 }, 13348 vLineWidth: function (i) { 13349 return 0; 13350 }, 13351 hLineColor: function (i) { 13352 return i === 1 ? 'black' : '#aaa'; 13353 }, 13354 paddingLeft: function (i) { 13355 return i === 0 ? 0 : 8; 13356 }, 13357 paddingRight: function (i, node) { 13358 return (i === node.table.widths.length - 1) ? 0 : 8; 13359 } 13360 } 13361 }); 13362} 13363 13364function pageSize2widthAndHeight(pageSize) { 13365 if (isString(pageSize)) { 13366 var size = sizes[pageSize.toUpperCase()]; 13367 if (!size) { 13368 throw 'Page size ' + pageSize + ' not recognized'; 13369 } 13370 return {width: size[0], height: size[1]}; 13371 } 13372 13373 return pageSize; 13374} 13375 13376function updatePageOrientationInOptions(currentPage, pdfKitDoc) { 13377 var previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait'; 13378 13379 if (currentPage.pageSize.orientation !== previousPageOrientation) { 13380 var width = pdfKitDoc.options.size[0]; 13381 var height = pdfKitDoc.options.size[1]; 13382 pdfKitDoc.options.size = [height, width]; 13383 } 13384} 13385 13386function renderPages(pages, fontProvider, pdfKitDoc, progressCallback) { 13387 pdfKitDoc._pdfMakePages = pages; 13388 pdfKitDoc.addPage(); 13389 13390 var totalItems = 0; 13391 if (progressCallback) { 13392 pages.forEach(function (page) { 13393 totalItems += page.items.length; 13394 }); 13395 } 13396 13397 var renderedItems = 0; 13398 progressCallback = progressCallback || function () {}; 13399 13400 for (var i = 0; i < pages.length; i++) { 13401 if (i > 0) { 13402 updatePageOrientationInOptions(pages[i], pdfKitDoc); 13403 pdfKitDoc.addPage(pdfKitDoc.options); 13404 } 13405 13406 var page = pages[i]; 13407 for (var ii = 0, il = page.items.length; ii < il; ii++) { 13408 var item = page.items[ii]; 13409 switch (item.type) { 13410 case 'vector': 13411 renderVector(item.item, pdfKitDoc); 13412 break; 13413 case 'line': 13414 renderLine(item.item, item.item.x, item.item.y, pdfKitDoc); 13415 break; 13416 case 'image': 13417 renderImage(item.item, item.item.x, item.item.y, pdfKitDoc); 13418 break; 13419 case 'beginClip': 13420 beginClip(item.item, pdfKitDoc); 13421 break; 13422 case 'endClip': 13423 endClip(pdfKitDoc); 13424 break; 13425 } 13426 renderedItems++; 13427 progressCallback(renderedItems / totalItems); 13428 } 13429 if (page.watermark) { 13430 renderWatermark(page, pdfKitDoc); 13431 } 13432 } 13433} 13434 13435function renderLine(line, x, y, pdfKitDoc) { 13436 if (line._pageNodeRef) { 13437 var newWidth; 13438 var diffWidth; 13439 var textTools = new TextTools(null); 13440 var pageNumber = line._pageNodeRef.positions[0].pageNumber.toString(); 13441 13442 line.inlines[0].text = pageNumber; 13443 line.inlines[0].linkToPage = pageNumber; 13444 newWidth = textTools.widthOfString(line.inlines[0].text, line.inlines[0].font, line.inlines[0].fontSize, line.inlines[0].characterSpacing, line.inlines[0].fontFeatures); 13445 diffWidth = line.inlines[0].width - newWidth; 13446 line.inlines[0].width = newWidth; 13447 13448 switch (line.inlines[0].alignment) { 13449 case 'right': 13450 line.inlines[0].x += diffWidth; 13451 break; 13452 case 'center': 13453 line.inlines[0].x += diffWidth / 2; 13454 break; 13455 } 13456 } 13457 13458 x = x || 0; 13459 y = y || 0; 13460 13461 var lineHeight = line.getHeight(); 13462 var ascenderHeight = line.getAscenderHeight(); 13463 var descent = lineHeight - ascenderHeight; 13464 13465 textDecorator.drawBackground(line, x, y, pdfKitDoc); 13466 13467 //TODO: line.optimizeInlines(); 13468 for (var i = 0, l = line.inlines.length; i < l; i++) { 13469 var inline = line.inlines[i]; 13470 var shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent; 13471 var options = { 13472 lineBreak: false, 13473 textWidth: inline.width, 13474 characterSpacing: inline.characterSpacing, 13475 wordCount: 1, 13476 link: inline.link 13477 }; 13478 13479 if (inline.fontFeatures) { 13480 options.features = inline.fontFeatures; 13481 } 13482 13483 pdfKitDoc.fill(inline.color || 'black'); 13484 13485 pdfKitDoc._font = inline.font; 13486 pdfKitDoc.fontSize(inline.fontSize); 13487 pdfKitDoc.text(inline.text, x + inline.x, y + shiftToBaseline, options); 13488 13489 if (inline.linkToPage) { 13490 var _ref = pdfKitDoc.ref({Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0]}).end(); 13491 pdfKitDoc.annotate(x + inline.x, y + shiftToBaseline, inline.width, inline.height, {Subtype: 'Link', Dest: [inline.linkToPage - 1, 'XYZ', null, null, null]}); 13492 } 13493 13494 } 13495
13496 textDecorator.drawDecorations(line, x, y, pdfKitDoc); 13497} 13498 13499function renderWatermark(page, pdfKitDoc) { 13500 var watermark = page.watermark; 13501 13502 pdfKitDoc.fill(watermark.color); 13503 pdfKitDoc.opacity(watermark.opacity); 13504 13505 pdfKitDoc.save(); 13506 13507 var angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * -180 / Math.PI; 13508 pdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2]}); 13509 13510 var x = pdfKitDoc.page.width / 2 - watermark.size.size.width / 2; 13511 var y = pdfKitDoc.page.height / 2 - watermark.size.size.height / 4; 13512 13513 pdfKitDoc._font = watermark.font; 13514 pdfKitDoc.fontSize(watermark.size.fontSize); 13515 pdfKitDoc.text(watermark.text, x, y, {lineBreak: false}); 13516 13517 pdfKitDoc.restore(); 13518} 13519 13520function renderVector(vector, pdfKitDoc) { 13521 //TODO: pdf optimization (there's no need to write all properties everytime) 13522 pdfKitDoc.lineWidth(vector.lineWidth || 1); 13523 if (vector.dash) { 13524 pdfKitDoc.dash(vector.dash.length, {space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0}); 13525 } else { 13526 pdfKitDoc.undash(); 13527 } 13528 pdfKitDoc.lineJoin(vector.lineJoin || 'miter'); 13529 pdfKitDoc.lineCap(vector.lineCap || 'butt'); 13530 13531 //TODO: clipping 13532 13533 switch (vector.type) { 13534 case 'ellipse': 13535 pdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2); 13536 break; 13537 case 'rect': 13538 if (vector.r) { 13539 pdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r); 13540 } else { 13541 pdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h); 13542 } 13543 13544 if (vector.linearGradient) { 13545 var gradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y); 13546 var step = 1 / (vector.linearGradient.length - 1); 13547 13548 for (var i = 0; i < vector.linearGradient.length; i++) { 13549 gradient.stop(i * step, vector.linearGradient[i]); 13550 } 13551 13552 vector.color = gradient; 13553 } 13554 break; 13555 case 'line': 13556 pdfKitDoc.moveTo(vector.x1, vector.y1); 13557 pdfKitDoc.lineTo(vector.x2, vector.y2); 13558 break; 13559 case 'polyline': 13560 if (vector.points.length === 0) { 13561 break; 13562 } 13563 13564 pdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y); 13565 for (var i = 1, l = vector.points.length; i < l; i++) { 13566 pdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y); 13567 } 13568 13569 if (vector.points.length > 1) { 13570 var p1 = vector.points[0]; 13571 var pn = vector.points[vector.points.length - 1]; 13572 13573 if (vector.closePath || p1.x === pn.x && p1.y === pn.y) { 13574 pdfKitDoc.closePath(); 13575 } 13576 } 13577 break; 13578 case 'path': 13579 pdfKitDoc.path(vector.d); 13580 break; 13581 } 13582 13583 if (vector.color && vector.lineColor) { 13584 pdfKitDoc.fillColor(vector.color, vector.fillOpacity || 1); 13585 pdfKitDoc.strokeColor(vector.lineColor, vector.strokeOpacity || 1); 13586 pdfKitDoc.fillAndStroke(); 13587 } else if (vector.color) { 13588 pdfKitDoc.fillColor(vector.color, vector.fillOpacity || 1); 13589 pdfKitDoc.fill(); 13590 } else { 13591 pdfKitDoc.strokeColor(vector.lineColor || 'black', vector.strokeOpacity || 1); 13592 pdfKitDoc.stroke(); 13593 } 13594} 13595 13596function renderImage(image, x, y, pdfKitDoc) { 13597 pdfKitDoc.image(image.image, image.x, image.y, {width: image._width, height: image._height}); 13598 if (image.link) { 13599 pdfKitDoc.link(image.x, image.y, image._width, image._height, image.link); 13600 } 13601} 13602 13603function beginClip(rect, pdfKitDoc) { 13604 pdfKitDoc.save(); 13605 pdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re'); 13606 pdfKitDoc.clip(); 13607} 13608 13609function endClip(pdfKitDoc) {
13610 pdfKitDoc.restore(); 13611} 13612 13613module.exports = PdfPrinter; 13614 13615 13616/***/ }), 13617/* 127 */ 13618/***/ (function(module, exports, __webpack_require__) { 13619 13620"use strict"; 13621 13622 13623var isArray = __webpack_require__(0).isArray; 13624 13625function typeName(bold, italics) { 13626 var type = 'normal'; 13627 if (bold && italics) { 13628 type = 'bolditalics'; 13629 } else if (bold) { 13630 type = 'bold'; 13631 } else if (italics) { 13632 type = 'italics'; 13633 } 13634 return type; 13635} 13636 13637function FontProvider(fontDescriptors, pdfKitDoc) { 13638 this.fonts = {}; 13639 this.pdfKitDoc = pdfKitDoc; 13640 this.fontCache = {}; 13641 13642 for (var font in fontDescriptors) { 13643 if (fontDescriptors.hasOwnProperty(font)) { 13644 var fontDef = fontDescriptors[font]; 13645 13646 this.fonts[font] = { 13647 normal: fontDef.normal, 13648 bold: fontDef.bold, 13649 italics: fontDef.italics, 13650 bolditalics: fontDef.bolditalics 13651 }; 13652 } 13653 } 13654} 13655 13656FontProvider.prototype.provideFont = function (familyName, bold, italics) { 13657 var type = typeName(bold, italics); 13658 if (!this.fonts[familyName] || !this.fonts[familyName][type]) { 13659 throw new Error('Font \'' + familyName + '\' in style \'' + type + '\' is not defined in the font section of the document definition.'); 13660 } 13661 13662 this.fontCache[familyName] = this.fontCache[familyName] || {}; 13663 13664 if (!this.fontCache[familyName][type]) { 13665 var def = this.fonts[familyName][type]; 13666 if (!isArray(def)) { 13667 def = [def]; 13668 } 13669 this.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font; 13670 } 13671 13672 return this.fontCache[familyName][type]; 13673}; 13674 13675module.exports = FontProvider; 13676 13677 13678/***/ }), 13679/* 128 */ 13680/***/ (function(module, exports, __webpack_require__) { 13681 13682"use strict"; 13683 13684 13685var TraversalTracker = __webpack_require__(77); 13686var DocPreprocessor = __webpack_require__(129); 13687var DocMeasure = __webpack_require__(130); 13688var DocumentContext = __webpack_require__(81); 13689var PageElementWriter = __webpack_require__(135); 13690var ColumnCalculator = __webpack_require__(44); 13691var TableProcessor = __webpack_require__(137); 13692var Line = __webpack_require__(82); 13693var isString = __webpack_require__(0).isString; 13694var isArray = __webpack_require__(0).isArray; 13695var pack = __webpack_require__(0).pack; 13696var offsetVector = __webpack_require__(0).offsetVector; 13697var fontStringify = __webpack_require__(0).fontStringify; 13698var isFunction = __webpack_require__(0).isFunction; 13699var TextTools = __webpack_require__(42); 13700var StyleContextStack = __webpack_require__(80); 13701 13702function addAll(target, otherArray) { 13703 otherArray.forEach(function (item) { 13704 target.push(item); 13705 }); 13706} 13707 13708/** 13709 * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object 13710 * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF 13711 * 13712 * @param {Object} pageSize - an object defining page width and height 13713 * @param {Object} pageMargins - an object defining top, left, right and bottom margins 13714 */ 13715function LayoutBuilder(pageSize, pageMargins, imageMeasure) { 13716 this.pageSize = pageSize; 13717 this.pageMargins = pageMargins; 13718 this.tracker = new TraversalTracker(); 13719 this.imageMeasure = imageMeasure; 13720 this.tableLayouts = {}; 13721} 13722 13723LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) { 13724 this.tableLayouts = pack(this.tableLayouts, tableLayouts); 13725}; 13726 13727/** 13728 * Executes layout engine on document-definition-object and creates an array of pages 13729 * containing positioned Blocks, Lines and inlines 13730 * 13731 * @param {Object} docStructure document-definition-object 13732 * @param {Object} fontProvider font provider 13733 * @param {Object} styleDictionary dictionary with style definitions 13734 * @param {Object} defaultStyle default style definition 13735 * @return {Array} an array of pages 13736 */ 13737LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) { 13738 13739 function addPageBreaksIfNecessary(linearNodeList, pages) { 13740 13741 if (!isFunction(pageBreakBeforeFct)) { 13742 return false; 13743 } 13744 13745 linearNodeList = linearNodeList.filter(function (node) { 13746 return node.positions.length > 0; 13747 }); 13748 13749 linearNodeList.forEach(function (node) { 13750 var nodeInfo = {}; 13751 [ 13752 'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns', 13753 'headlineLevel', 'style', 'pageBreak', 'pageOrientation', 13754 'width', 'height' 13755 ].forEach(function (key) { 13756 if (node[key] !== undefined) { 13757 nodeInfo[key] = node[key]; 13758 } 13759 }); 13760 nodeInfo.startPosition = node.positions[0]; 13761 nodeInfo.pageNumbers = node.positions.map(function (node) { 13762 return node.pageNumber; 13763 }).filter(function (element, position, array) { 13764 return array.indexOf(element) === position; 13765 }); 13766 nodeInfo.pages = pages.length; 13767 nodeInfo.stack = isArray(node.stack); 13768 13769 node.nodeInfo = nodeInfo; 13770 }); 13771 13772 return linearNodeList.some(function (node, index, followingNodeList) { 13773 if (node.pageBreak !== 'before' && !node.pageBreakCalculated) { 13774 node.pageBreakCalculated = true;
13775 var pageNumber = node.nodeInfo.pageNumbers[0]; 13776 13777 var followingNodesOnPage = followingNodeList.slice(index + 1).filter(function (node0) { 13778 return node0.nodeInfo.pageNumbers.indexOf(pageNumber) > -1; 13779 }); 13780 13781 var nodesOnNextPage = followingNodeList.slice(index + 1).filter(function (node0) { 13782 return node0.nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1; 13783 }); 13784 13785 var previousNodesOnPage = followingNodeList.slice(0, index).filter(function (node0) { 13786 return node0.nodeInfo.pageNumbers.indexOf(pageNumber) > -1; 13787 }); 13788 13789 if ( 13790 pageBreakBeforeFct( 13791 node.nodeInfo, 13792 followingNodesOnPage.map(function (node) { 13793 return node.nodeInfo; 13794 }), 13795 nodesOnNextPage.map(function (node) { 13796 return node.nodeInfo; 13797 }), 13798 previousNodesOnPage.map(function (node) { 13799 return node.nodeInfo; 13800 }))) { 13801 node.pageBreak = 'before'; 13802 return true; 13803 } 13804 } 13805 }); 13806 } 13807 13808 this.docPreprocessor = new DocPreprocessor(); 13809 this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images); 13810 13811 13812 function resetXYs(result) { 13813 result.linearNodeList.forEach(function (node) { 13814 node.resetXY(); 13815 }); 13816 } 13817 13818 var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark); 13819 while (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) { 13820 resetXYs(result); 13821 result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark); 13822 } 13823 13824 return result.pages; 13825}; 13826 13827LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) { 13828 13829 this.linearNodeList = []; 13830 docStructure = this.docPreprocessor.preprocessDocument(docStructure); 13831 docStructure = this.docMeasure.measureDocument(docStructure); 13832 13833 this.writer = new PageElementWriter( 13834 new DocumentContext(this.pageSize, this.pageMargins), this.tracker); 13835 13836 var _this = this; 13837 this.writer.context().tracker.startTracking('pageAdded', function () { 13838 _this.addBackground(background); 13839 }); 13840 13841 this.addBackground(background); 13842 this.processNode(docStructure); 13843 this.addHeadersAndFooters(header, footer); 13844 if (watermark != null) { 13845 this.addWatermark(watermark, fontProvider, defaultStyle); 13846 } 13847 13848 return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList}; 13849}; 13850 13851 13852LayoutBuilder.prototype.addBackground = function (background) { 13853 var backgroundGetter = isFunction(background) ? background : function () { 13854 return background; 13855 }; 13856
13857 var pageBackground = backgroundGetter(this.writer.context().page + 1); 13858 13859 if (pageBackground) { 13860 var pageSize = this.writer.context().getCurrentPage().pageSize; 13861 this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height); 13862 pageBackground = this.docPreprocessor.preprocessDocument(pageBackground); 13863 this.processNode(this.docMeasure.measureDocument(pageBackground)); 13864 this.writer.commitUnbreakableBlock(0, 0); 13865 this.writer.context().hasBackground = true; 13866 } 13867}; 13868 13869LayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) { 13870 this.addDynamicRepeatable(function () { 13871 return JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object 13872 }, sizeFunction); 13873}; 13874 13875LayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) { 13876 var pages = this.writer.context().pages; 13877 13878 for (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) { 13879 this.writer.context().page = pageIndex; 13880 13881 var node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize); 13882 13883 if (node) { 13884 var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins); 13885 this.writer.beginUnbreakableBlock(sizes.width, sizes.height); 13886 node = this.docPreprocessor.preprocessDocument(node); 13887 this.processNode(this.docMeasure.measureDocument(node)); 13888 this.writer.commitUnbreakableBlock(sizes.x, sizes.y); 13889 } 13890 } 13891}; 13892 13893LayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) { 13894 var headerSizeFct = function (pageSize, pageMargins) { 13895 return { 13896 x: 0, 13897 y: 0, 13898 width: pageSize.width, 13899 height: pageMargins.top 13900 }; 13901 }; 13902 13903 var footerSizeFct = function (pageSize, pageMargins) { 13904 return { 13905 x: 0, 13906 y: pageSize.height - pageMargins.bottom, 13907 width: pageSize.width, 13908 height: pageMargins.bottom 13909 }; 13910 }; 13911 13912 if (isFunction(header)) { 13913 this.addDynamicRepeatable(header, headerSizeFct); 13914 } else if (header) { 13915 this.addStaticRepeatable(header, headerSizeFct); 13916 } 13917 13918 if (isFunction(footer)) { 13919 this.addDynamicRepeatable(footer, footerSizeFct); 13920 } else if (footer) { 13921 this.addStaticRepeatable(footer, footerSizeFct); 13922 } 13923}; 13924 13925LayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) { 13926 if (isString(watermark)) { 13927 watermark = {'text': watermark}; 13928 } 13929 13930 if (!watermark.text) { // empty watermark text 13931 return; 13932 } 13933 13934 watermark.font = watermark.font || defaultStyle.font || 'Roboto'; 13935 watermark.color = watermark.color || 'black'; 13936 watermark.opacity = watermark.opacity || 0.6; 13937 watermark.bold = watermark.bold || false; 13938 watermark.italics = watermark.italics || false; 13939 13940 var watermarkObject = { 13941 text: watermark.text, 13942 font: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics), 13943 size: getSize(this.pageSize, watermark, fontProvider), 13944 color: watermark.color, 13945 opacity: watermark.opacity 13946 }; 13947 13948 var pages = this.writer.context().pages; 13949 for (var i = 0, l = pages.length; i < l; i++) { 13950 pages[i].watermark = watermarkObject; 13951 } 13952 13953 function getSize(pageSize, watermark, fontProvider) { 13954 var width = pageSize.width; 13955 var height = pageSize.height; 13956 var targetWidth = Math.sqrt(width * width + height * height) * 0.8; /* page diagonal * sample factor */ 13957 var textTools = new TextTools(fontProvider); 13958 var styleContextStack = new StyleContextStack(null, {font: watermark.font, bold: watermark.bold, italics: watermark.italics}); 13959 var size; 13960 13961 /** 13962 * Binary search the best font size. 13963 * Initial bounds [0, 1000] 13964 * Break when range < 1 13965 */ 13966 var a = 0; 13967 var b = 1000; 13968 var c = (a + b) / 2; 13969 while (Math.abs(a - b) > 1) { 13970 styleContextStack.push({ 13971 fontSize: c 13972 }); 13973 size = textTools.sizeOfString(watermark.text, styleContextStack); 13974 if (size.width > targetWidth) { 13975 b = c; 13976 c = (a + b) / 2; 13977 } else if (size.width < targetWidth) { 13978 a = c; 13979 c = (a + b) / 2; 13980 } 13981 styleContextStack.pop(); 13982 } 13983 /* 13984 End binary search 13985 */ 13986 return {size: size, fontSize: c}; 13987 } 13988}; 13989 13990function decorateNode(node) { 13991 var x = node.x, y = node.y; 13992 node.positions = []; 13993 13994 if (isArray(node.canvas)) { 13995 node.canvas.forEach(function (vector) { 13996 var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2; 13997 vector.resetXY = function () { 13998 vector.x = x; 13999 vector.y = y; 14000 vector.x1 = x1; 14001 vector.y1 = y1; 14002 vector.x2 = x2; 14003 vector.y2 = y2; 14004 }; 14005 }); 14006 } 14007 14008 node.resetXY = function () { 14009 node.x = x; 14010 node.y = y; 14011 if (isArray(node.canvas)) { 14012 node.canvas.forEach(function (vector) { 14013 vector.resetXY(); 14014 }); 14015 } 14016 }; 14017} 14018 14019LayoutBuilder.prototype.processNode = function (node) { 14020 var self = this; 14021 14022 this.linearNodeList.push(node); 14023 decorateNode(node); 14024 14025 applyMargins(function () { 14026 var unbreakable = node.unbreakable; 14027 if (unbreakable) { 14028 self.writer.beginUnbreakableBlock(); 14029 } 14030 14031 var absPosition = node.absolutePosition; 14032 if (absPosition) { 14033 self.writer.context().beginDetachedBlock(); 14034 self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0); 14035 } 14036 14037 var relPosition = node.relativePosition; 14038 if (relPosition) { 14039 self.writer.context().beginDetachedBlock(); 14040 self.writer.context().moveTo((relPosition.x || 0) + self.writer.context().x, (relPosition.y || 0) + self.writer.context().y); 14041 } 14042 14043 if (node.stack) { 14044 self.processVerticalContainer(node); 14045 } else if (node.columns) { 14046 self.processColumns(node); 14047 } else if (node.ul) { 14048 self.processList(false, node); 14049 } else if (node.ol) { 14050 self.processList(true, node); 14051 } else if (node.table) { 14052 self.processTable(node); 14053 } else if (node.text !== undefined) { 14054 self.processLeaf(node); 14055 } else if (node.toc) { 14056 self.processToc(node); 14057 } else if (node.image) { 14058 self.processImage(node); 14059 } else if (node.canvas) { 14060 self.processCanvas(node); 14061 } else if (node.qr) { 14062 self.processQr(node); 14063 } else if (!node._span) { 14064 throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify); 14065 } 14066 14067 if (absPosition || relPosition) { 14068 self.writer.context().endDetachedBlock(); 14069 } 14070 14071 if (unbreakable) { 14072 self.writer.commitUnbreakableBlock(); 14073 } 14074 }); 14075 14076 function applyMargins(callback) { 14077 var margin = node._margin; 14078 14079 if (node.pageBreak === 'before') { 14080 self.writer.moveToNextPage(node.pageOrientation); 14081 } 14082 14083 if (margin) { 14084 self.writer.context().moveDown(margin[1]); 14085 self.writer.context().addMargin(margin[0], margin[2]); 14086 } 14087 14088 callback(); 14089 14090 if (margin) { 14091 self.writer.context().addMargin(-margin[0], -margin[2]); 14092 self.writer.context().moveDown(margin[3]); 14093 } 14094 14095 if (node.pageBreak === 'after') { 14096 self.writer.moveToNextPage(node.pageOrientation); 14097 } 14098 } 14099}; 14100 14101// vertical container 14102LayoutBuilder.prototype.processVerticalContainer = function (node) { 14103 var self = this; 14104 node.stack.forEach(function (item) { 14105 self.processNode(item); 14106 addAll(node.positions, item.positions); 14107 14108 //TODO: paragraph gap 14109 }); 14110}; 14111 14112// columns 14113LayoutBuilder.prototype.processColumns = function (columnNode) { 14114 var columns = columnNode.columns; 14115 var availableWidth = this.writer.context().availableWidth; 14116 var gaps = gapArray(columnNode._gap); 14117 14118 if (gaps) { 14119 availableWidth -= (gaps.length - 1) * columnNode._gap; 14120 } 14121 14122 ColumnCalculator.buildColumnWidths(columns, availableWidth); 14123 var result = this.processRow(columns, columns, gaps); 14124 addAll(columnNode.positions, result.positions); 14125 14126 14127 function gapArray(gap) { 14128 if (!gap) { 14129 return null; 14130 } 14131 14132 var gaps = []; 14133 gaps.push(0); 14134 14135 for (var i = columns.length - 1; i > 0; i--) { 14136 gaps.push(gap); 14137 } 14138 14139 return gaps; 14140 } 14141}; 14142 14143LayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) { 14144 var self = this; 14145 var pageBreaks = [], positions = []; 14146 14147 this.tracker.auto('pageChanged', storePageBreakData, function () { 14148 widths = widths || columns; 14149 14150 self.writer.context().beginColumnGroup(); 14151 14152 for (var i = 0, l = columns.length; i < l; i++) { 14153 var column = columns[i]; 14154 var width = widths[i]._calcWidth; 14155 var leftOffset = colLeftOffset(i); 14156 14157 if (column.colSpan && column.colSpan > 1) { 14158 for (var j = 1; j < column.colSpan; j++) { 14159 width += widths[++i]._calcWidth + gaps[i]; 14160 } 14161 } 14162 14163 self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i)); 14164 if (!column._span) { 14165 self.processNode(column); 14166 addAll(positions, column.positions); 14167 } else if (column._columnEndingContext) { 14168 // row-span ending 14169 self.writer.context().markEnding(column); 14170 } 14171 } 14172 14173 self.writer.context().completeColumnGroup(height); 14174 }); 14175 14176 return {pageBreaks: pageBreaks, positions: positions}; 14177 14178 function storePageBreakData(data) { 14179 var pageDesc; 14180 14181 for (var i = 0, l = pageBreaks.length; i < l; i++) { 14182 var desc = pageBreaks[i]; 14183 if (desc.prevPage === data.prevPage) { 14184 pageDesc = desc; 14185 break; 14186 } 14187 } 14188 14189 if (!pageDesc) { 14190 pageDesc = data; 14191 pageBreaks.push(pageDesc); 14192 } 14193 pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY); 14194 pageDesc.y = Math.min(pageDesc.y, data.y); 14195 } 14196 14197 function colLeftOffset(i) { 14198 if (gaps && gaps.length > i) { 14199 return gaps[i]; 14200 } 14201 return 0; 14202 } 14203 14204 function getEndingCell(column, columnIndex) { 14205 if (column.rowSpan && column.rowSpan > 1) { 14206 var endingRow = tableRow + column.rowSpan - 1; 14207 if (endingRow >= tableBody.length) { 14208 throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count'; 14209 } 14210 return tableBody[endingRow][columnIndex]; 14211 } 14212 14213 return null; 14214 } 14215}; 14216 14217// lists 14218LayoutBuilder.prototype.processList = function (orderedList, node) { 14219 var self = this, 14220 items = orderedList ? node.ol : node.ul, 14221 gapSize = node._gapSize; 14222 14223 this.writer.context().addMargin(gapSize.width); 14224 14225 var nextMarker; 14226 this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {
14227 items.forEach(function (item) { 14228 nextMarker = item.listMarker; 14229 self.processNode(item); 14230 addAll(node.positions, item.positions); 14231 }); 14232 }); 14233 14234 this.writer.context().addMargin(-gapSize.width); 14235 14236 function addMarkerToFirstLeaf(line) { 14237 // I'm not very happy with the way list processing is implemented 14238 // (both code and algorithm should be rethinked) 14239 if (nextMarker) { 14240 var marker = nextMarker; 14241 nextMarker = null; 14242 14243 if (marker.canvas) { 14244 var vector = marker.canvas[0]; 14245 14246 offsetVector(vector, -marker._minWidth, 0); 14247 self.writer.addVector(vector); 14248 } else if (marker._inlines) { 14249 var markerLine = new Line(self.pageSize.width); 14250 markerLine.addInline(marker._inlines[0]); 14251 markerLine.x = -marker._minWidth; 14252 markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight(); 14253 self.writer.addLine(markerLine, true); 14254 } 14255 } 14256 } 14257}; 14258 14259// tables 14260LayoutBuilder.prototype.processTable = function (tableNode) { 14261 var processor = new TableProcessor(tableNode); 14262 14263 processor.beginTable(this.writer); 14264 14265 var rowHeights = tableNode.table.heights; 14266 for (var i = 0, l = tableNode.table.body.length; i < l; i++) { 14267 processor.beginRow(i, this.writer); 14268 14269 var height; 14270 if (isFunction(rowHeights)) { 14271 height = rowHeights(i); 14272 } else if (isArray(rowHeights)) { 14273 height = rowHeights[i]; 14274 } else { 14275 height = rowHeights; 14276 } 14277 14278 if (height === 'auto') { 14279 height = undefined; 14280 } 14281 14282 var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height); 14283 addAll(tableNode.positions, result.positions); 14284 14285 processor.endRow(i, this.writer, result.pageBreaks); 14286 } 14287 14288 processor.endTable(this.writer); 14289}; 14290 14291// leafs (texts) 14292LayoutBuilder.prototype.processLeaf = function (node) { 14293 var line = this.buildNextLine(node); 14294 var currentHeight = (line) ? line.getHeight() : 0; 14295 var maxHeight = node.maxHeight || -1; 14296 14297 if (node._tocItemRef) { 14298 line._pageNodeRef = node._tocItemRef; 14299 } 14300 14301 if (node._pageRef) { 14302 line._pageNodeRef = node._pageRef._nodeRef; 14303 } 14304 14305 while (line && (maxHeight === -1 || currentHeight < maxHeight)) { 14306 var positions = this.writer.addLine(line); 14307 node.positions.push(positions); 14308 line = this.buildNextLine(node); 14309 if (line) { 14310 currentHeight += line.getHeight(); 14311 } 14312 } 14313}; 14314 14315LayoutBuilder.prototype.processToc = function (node) { 14316 if (node.toc.title) { 14317 this.processNode(node.toc.title); 14318 } 14319 this.processNode(node.toc._table); 14320}; 14321 14322LayoutBuilder.prototype.buildNextLine = function (textNode) { 14323 14324 function cloneInline(inline) { 14325 var newInline = inline.constructor(); 14326 for (var key in inline) { 14327 newInline[key] = inline[key]; 14328 } 14329 return newInline; 14330 } 14331 14332 if (!textNode._inlines || textNode._inlines.length === 0) { 14333 return null; 14334 } 14335 14336 var line = new Line(this.writer.context().availableWidth); 14337 var textTools = new TextTools(null); 14338 14339 while (textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) { 14340 var inline = textNode._inlines.shift(); 14341 14342 if (!inline.noWrap && inline.text.length > 1 && inline.width > line.maxWidth) { 14343 var widthPerChar = inline.width / inline.text.length; 14344 var maxChars = Math.floor(line.maxWidth / widthPerChar); 14345 if (maxChars < 1) { 14346 maxChars = 1; 14347 } 14348 if (maxChars < inline.text.length) { 14349 var newInline = cloneInline(inline); 14350 14351 newInline.text = inline.text.substr(maxChars); 14352 inline.text = inline.text.substr(0, maxChars); 14353 14354 newInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures); 14355 inline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures); 14356 14357 textNode._inlines.unshift(newInline); 14358 } 14359 } 14360 14361 line.addInline(inline); 14362 } 14363 14364 line.lastLineInParagraph = textNode._inlines.length === 0; 14365 14366 return line; 14367}; 14368 14369// images 14370LayoutBuilder.prototype.processImage = function (node) { 14371 var position = this.writer.addImage(node); 14372 node.positions.push(position); 14373}; 14374 14375LayoutBuilder.prototype.processCanvas = function (node) { 14376 var height = node._minHeight; 14377 14378 if (node.absolutePosition === undefined && this.writer.context().availableHeight < height) { 14379 // TODO: support for canvas larger than a page 14380 // TODO: support for other overflow methods 14381 14382 this.writer.moveToNextPage(); 14383 } 14384 14385 this.writer.alignCanvas(node); 14386 14387 node.canvas.forEach(function (vector) { 14388 var position = this.writer.addVector(vector); 14389 node.positions.push(position); 14390 }, this); 14391 14392 this.writer.context().moveDown(height); 14393}; 14394 14395LayoutBuilder.prototype.processQr = function (node) { 14396 var position = this.writer.addQr(node); 14397 node.positions.push(position); 14398}; 14399 14400module.exports = LayoutBuilder; 14401 14402 14403/***/ }), 14404/* 129 */ 14405/***/ (function(module, exports, __webpack_require__) { 14406 14407"use strict"; 14408/* WEBPACK VAR INJECTION */(function(Buffer) { 14409 14410var isString = __webpack_require__(0).isString; 14411var isNumber = __webpack_require__(0).isNumber; 14412var isBoolean = __webpack_require__(0).isBoolean; 14413var isArray = __webpack_require__(0).isArray; 14414var isUndefined = __webpack_require__(0).isUndefined; 14415var fontStringify = __webpack_require__(0).fontStringify; 14416 14417function DocPreprocessor() { 14418 14419} 14420 14421DocPreprocessor.prototype.preprocessDocument = function (docStructure) { 14422 this.tocs = []; 14423 this.nodeReferences = []; 14424 return this.preprocessNode(docStructure); 14425}; 14426 14427DocPreprocessor.prototype.preprocessNode = function (node) { 14428 // expand shortcuts and casting values 14429 if (isArray(node)) { 14430 node = {stack: node}; 14431 } else if (isString(node)) { 14432 node = {text: node}; 14433 } else if (isNumber(node) || isBoolean(node)) { 14434 node = {text: node.toString()}; 14435 } else if (node === null) { 14436 node = {text: ''}; 14437 } else if (Object.keys(node).length === 0) { // empty object 14438 node = {text: ''}; 14439 } 14440 14441 if (node.columns) { 14442 return this.preprocessColumns(node); 14443 } else if (node.stack) { 14444 return this.preprocessVerticalContainer(node); 14445 } else if (node.ul) { 14446 return this.preprocessList(node); 14447 } else if (node.ol) { 14448 return this.preprocessList(node); 14449 } else if (node.table) { 14450 return this.preprocessTable(node); 14451 } else if (node.text !== undefined) { 14452 return this.preprocessText(node); 14453 } else if (node.toc) { 14454 return this.preprocessToc(node); 14455 } else if (node.image) { 14456 return this.preprocessImage(node); 14457 } else if (node.canvas) { 14458 return this.preprocessCanvas(node); 14459 } else if (node.qr) { 14460 return this.preprocessQr(node); 14461 } else if (node.pageReference || node.textReference) { 14462 return this.preprocessText(node); 14463 } else { 14464 throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify); 14465 } 14466}; 14467 14468DocPreprocessor.prototype.preprocessColumns = function (node) { 14469 var columns = node.columns; 14470 14471 for (var i = 0, l = columns.length; i < l; i++) { 14472 columns[i] = this.preprocessNode(columns[i]); 14473 } 14474 14475 return node; 14476}; 14477 14478DocPreprocessor.prototype.preprocessVerticalContainer = function (node) { 14479 var items = node.stack; 14480 14481 for (var i = 0, l = items.length; i < l; i++) { 14482 items[i] = this.preprocessNode(items[i]); 14483 } 14484 14485 return node; 14486}; 14487 14488DocPreprocessor.prototype.preprocessList = function (node) { 14489 var items = node.ul || node.ol; 14490 14491 for (var i = 0, l = items.length; i < l; i++) { 14492 items[i] = this.preprocessNode(items[i]); 14493 } 14494 14495 return node; 14496}; 14497 14498DocPreprocessor.prototype.preprocessTable = function (node) { 14499 var col, row, cols, rows; 14500 14501 for (col = 0, cols = node.table.body[0].length; col < cols; col++) { 14502 for (row = 0, rows = node.table.body.length; row < rows; row++) { 14503 var rowData = node.table.body[row]; 14504 var data = rowData[col]; 14505 if (data !== undefined) { 14506 if (data === null) { // transform to object 14507 data = ''; 14508 } 14509 if (!data._span) { 14510 rowData[col] = this.preprocessNode(data); 14511 } 14512 } 14513 } 14514 } 14515 14516 return node; 14517}; 14518 14519DocPreprocessor.prototype.preprocessText = function (node) { 14520 if (node.tocItem) { 14521 if (!isArray(node.tocItem)) { 14522 node.tocItem = [node.tocItem]; 14523 } 14524 14525 for (var i = 0, l = node.tocItem.length; i < l; i++) { 14526 if (!isString(node.tocItem[i])) { 14527 node.tocItem[i] = '_default_'; 14528 } 14529 14530 var tocItemId = node.tocItem[i]; 14531 14532 if (!this.tocs[tocItemId]) { 14533 this.tocs[tocItemId] = {toc: {_items: [], _pseudo: true}}; 14534 } 14535 14536 this.tocs[tocItemId].toc._items.push(node); 14537 } 14538 } 14539 14540 if (node.id) { 14541 if (this.nodeReferences[node.id]) { 14542 if (!this.nodeReferences[node.id]._pseudo) { 14543 throw "Node id '" + node.id + "' already exists"; 14544 } 14545 14546 this.nodeReferences[node.id]._nodeRef = node; 14547 this.nodeReferences[node.id]._pseudo = false;
14548 } else { 14549 this.nodeReferences[node.id] = {_nodeRef: node}; 14550 } 14551 } 14552 14553 if (node.pageReference) { 14554 if (!this.nodeReferences[node.pageReference]) { 14555 this.nodeReferences[node.pageReference] = {_nodeRef: {}, _pseudo: true}; 14556 } 14557 node.text = '00000'; 14558 node._pageRef = this.nodeReferences[node.pageReference]; 14559 } 14560 14561 if (node.textReference) { 14562 if (!this.nodeReferences[node.textReference]) { 14563 this.nodeReferences[node.textReference] = {_nodeRef: {}, _pseudo: true}; 14564 } 14565 14566 node.text = ''; 14567 node._textRef = this.nodeReferences[node.textReference]; 14568 } 14569 14570 if (node.text && node.text.text) { 14571 node.text = [this.preprocessNode(node.text)]; 14572 } 14573 14574 return node; 14575}; 14576 14577DocPreprocessor.prototype.preprocessToc = function (node) { 14578 if (!node.toc.id) { 14579 node.toc.id = '_default_'; 14580 } 14581 14582 node.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null; 14583 node.toc._items = []; 14584 14585 if (this.tocs[node.toc.id]) { 14586 if (!this.tocs[node.toc.id].toc._pseudo) { 14587 throw "TOC '" + node.toc.id + "' already exists"; 14588 } 14589 14590 node.toc._items = this.tocs[node.toc.id].toc._items; 14591 } 14592 14593 this.tocs[node.toc.id] = node; 14594 14595 return node; 14596}; 14597 14598DocPreprocessor.prototype.preprocessImage = function (node) { 14599 if (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) { 14600 node.image = Buffer.from(node.image.data); 14601 } 14602 return node; 14603}; 14604 14605DocPreprocessor.prototype.preprocessCanvas = function (node) { 14606 return node; 14607}; 14608 14609DocPreprocessor.prototype.preprocessQr = function (node) { 14610 return node; 14611}; 14612 14613module.exports = DocPreprocessor; 14614/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 14615 14616/***/ }), 14617/* 130 */ 14618/***/ (function(module, exports, __webpack_require__) { 14619 14620"use strict"; 14621/*eslint no-unused-vars: ["error", {"args": "none"}]*/ 14622 14623 14624 14625var TextTools = __webpack_require__(42); 14626var StyleContextStack = __webpack_require__(80); 14627var ColumnCalculator = __webpack_require__(44); 14628var isString = __webpack_require__(0).isString; 14629var isNumber = __webpack_require__(0).isNumber; 14630var isObject = __webpack_require__(0).isObject; 14631var isArray = __webpack_require__(0).isArray; 14632var fontStringify = __webpack_require__(0).fontStringify; 14633var pack = __webpack_require__(0).pack; 14634var qrEncoder = __webpack_require__(134); 14635 14636/** 14637 * @private 14638 */ 14639function DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, tableLayouts, images) { 14640 this.textTools = new TextTools(fontProvider); 14641 this.styleStack = new StyleContextStack(styleDictionary, defaultStyle); 14642 this.imageMeasure = imageMeasure; 14643 this.tableLayouts = tableLayouts; 14644 this.images = images; 14645 this.autoImageIndex = 1; 14646} 14647 14648/** 14649 * Measures all nodes and sets min/max-width properties required for the second 14650 * layout-pass. 14651 * @param {Object} docStructure document-definition-object 14652 * @return {Object} document-measurement-object 14653 */ 14654DocMeasure.prototype.measureDocument = function (docStructure) { 14655 return this.measureNode(docStructure); 14656}; 14657 14658DocMeasure.prototype.measureNode = function (node) { 14659 14660 var self = this; 14661 14662 return this.styleStack.auto(node, function () { 14663 // TODO: refactor + rethink whether this is the proper way to handle margins 14664 node._margin = getNodeMargin(node); 14665 14666 if (node.columns) { 14667 return extendMargins(self.measureColumns(node)); 14668 } else if (node.stack) { 14669 return extendMargins(self.measureVerticalContainer(node)); 14670 } else if (node.ul) { 14671 return extendMargins(self.measureUnorderedList(node)); 14672 } else if (node.ol) { 14673 return extendMargins(self.measureOrderedList(node)); 14674 } else if (node.table) { 14675 return extendMargins(self.measureTable(node)); 14676 } else if (node.text !== undefined) { 14677 return extendMargins(self.measureLeaf(node)); 14678 } else if (node.toc) { 14679 return extendMargins(self.measureToc(node)); 14680 } else if (node.image) { 14681 return extendMargins(self.measureImage(node)); 14682 } else if (node.canvas) { 14683 return extendMargins(self.measureCanvas(node)); 14684 } else if (node.qr) { 14685 return extendMargins(self.measureQr(node)); 14686 } else { 14687 throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify); 14688 } 14689 }); 14690 14691 function extendMargins(node) { 14692 var margin = node._margin; 14693 14694 if (margin) { 14695 node._minWidth += margin[0] + margin[2]; 14696 node._maxWidth += margin[0] + margin[2]; 14697 } 14698 14699 return node; 14700 } 14701 14702 function getNodeMargin() { 14703 14704 function processSingleMargins(node, currentMargin) { 14705 if (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) { 14706 return [ 14707 node.marginLeft || currentMargin[0] || 0, 14708 node.marginTop || currentMargin[1] || 0, 14709 node.marginRight || currentMargin[2] || 0, 14710 node.marginBottom || currentMargin[3] || 0 14711 ]; 14712 } 14713 return currentMargin; 14714 } 14715 14716 function flattenStyleArray(styleArray) { 14717 var flattenedStyles = {}; 14718 for (var i = styleArray.length - 1; i >= 0; i--) { 14719 var styleName = styleArray[i]; 14720 var style = self.styleStack.styleDictionary[styleName]; 14721 for (var key in style) { 14722 if (style.hasOwnProperty(key)) { 14723 flattenedStyles[key] = style[key]; 14724 } 14725 } 14726 } 14727 return flattenedStyles; 14728 } 14729 14730 function convertMargin(margin) { 14731 if (isNumber(margin)) { 14732 margin = [margin, margin, margin, margin]; 14733 } else if (isArray(margin)) { 14734 if (margin.length === 2) { 14735 margin = [margin[0], margin[1], margin[0], margin[1]]; 14736 } 14737 } 14738 return margin; 14739 } 14740 14741 var margin = [undefined, undefined, undefined, undefined]; 14742 14743 if (node.style) {
14744 var styleArray = isArray(node.style) ? node.style : [node.style]; 14745 var flattenedStyleArray = flattenStyleArray(styleArray); 14746 14747 if (flattenedStyleArray) { 14748 margin = processSingleMargins(flattenedStyleArray, margin); 14749 } 14750 14751 if (flattenedStyleArray.margin) { 14752 margin = convertMargin(flattenedStyleArray.margin); 14753 } 14754 } 14755 14756 margin = processSingleMargins(node, margin); 14757 14758 if (node.margin) { 14759 margin = convertMargin(node.margin); 14760 } 14761 14762 if (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) { 14763 return null; 14764 } else { 14765 return margin; 14766 } 14767 } 14768}; 14769 14770DocMeasure.prototype.convertIfBase64Image = function (node) { 14771 if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) { 14772 var label = '$$pdfmake$$' + this.autoImageIndex++; 14773 this.images[label] = node.image; 14774 node.image = label; 14775 } 14776}; 14777 14778DocMeasure.prototype.measureImage = function (node) { 14779 if (this.images) { 14780 this.convertIfBase64Image(node); 14781 } 14782 14783 var imageSize = this.imageMeasure.measureImage(node.image); 14784 14785 if (node.fit) { 14786 var factor = (imageSize.width / imageSize.height > node.fit[0] / node.fit[1]) ? node.fit[0] / imageSize.width : node.fit[1] / imageSize.height; 14787 node._width = node._minWidth = node._maxWidth = imageSize.width * factor; 14788 node._height = imageSize.height * factor; 14789 } else { 14790 node._width = node._minWidth = node._maxWidth = node.width || imageSize.width; 14791 node._height = node.height || (imageSize.height * node._width / imageSize.width); 14792 14793 if (isNumber(node.maxWidth) && node.maxWidth < node._width) { 14794 node._width = node._minWidth = node._maxWidth = node.maxWidth; 14795 node._height = node._width * imageSize.height / imageSize.width; 14796 } 14797 14798 if (isNumber(node.maxHeight) && node.maxHeight < node._height) { 14799 node._height = node.maxHeight; 14800 node._width = node._minWidth = node._maxWidth = node._height * imageSize.width / imageSize.height; 14801 } 14802 14803 if (isNumber(node.minWidth) && node.minWidth > node._width) { 14804 node._width = node._minWidth = node._maxWidth = node.minWidth; 14805 node._height = node._width * imageSize.height / imageSize.width; 14806 } 14807 14808 if (isNumber(node.minHeight) && node.minHeight > node._height) { 14809 node._height = node.minHeight; 14810 node._width = node._minWidth = node._maxWidth = node._height * imageSize.width / imageSize.height; 14811 } 14812 } 14813 14814 node._alignment = this.styleStack.getProperty('alignment'); 14815 return node; 14816}; 14817 14818DocMeasure.prototype.measureLeaf = function (node) { 14819 14820 if (node._textRef && node._textRef._nodeRef.text) { 14821 node.text = node._textRef._nodeRef.text; 14822 } 14823 14824 // Make sure style properties of the node itself are considered when building inlines. 14825 // We could also just pass [node] to buildInlines, but that fails for bullet points. 14826 var styleStack = this.styleStack.clone(); 14827 styleStack.push(node); 14828 14829 var data = this.textTools.buildInlines(node.text, styleStack); 14830 14831 node._inlines = data.items; 14832 node._minWidth = data.minWidth; 14833 node._maxWidth = data.maxWidth; 14834 14835 return node; 14836}; 14837 14838DocMeasure.prototype.measureToc = function (node) { 14839 if (node.toc.title) { 14840 node.toc.title = this.measureNode(node.toc.title); 14841 } 14842 14843 var body = []; 14844 var textStyle = node.toc.textStyle || {}; 14845 var numberStyle = node.toc.numberStyle || textStyle; 14846 var textMargin = node.toc.textMargin || [0, 0, 0, 0]; 14847 for (var i = 0, l = node.toc._items.length; i < l; i++) { 14848 var item = node.toc._items[i]; 14849 var lineStyle = node.toc._items[i].tocStyle || textStyle; 14850 var lineMargin = node.toc._items[i].tocMargin || textMargin; 14851 body.push([ 14852 {text: item.text, alignment: 'left', style: lineStyle, margin: lineMargin}, 14853 {text: '00000', alignment: 'right', _tocItemRef: item, style: numberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]]} 14854 ]); 14855 } 14856 14857 14858 node.toc._table = { 14859 table: { 14860 dontBreakRows: true, 14861 widths: ['*', 'auto'], 14862 body: body 14863 }, 14864 layout: 'noBorders' 14865 }; 14866 14867 node.toc._table = this.measureNode(node.toc._table); 14868 14869 return node; 14870}; 14871 14872DocMeasure.prototype.measureVerticalContainer = function (node) { 14873 var items = node.stack; 14874 14875 node._minWidth = 0; 14876 node._maxWidth = 0; 14877 14878 for (var i = 0, l = items.length; i < l; i++) { 14879 items[i] = this.measureNode(items[i]); 14880 14881 node._minWidth = Math.max(node._minWidth, items[i]._minWidth); 14882 node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth); 14883 } 14884 14885 return node; 14886}; 14887 14888DocMeasure.prototype.gapSizeForList = function () { 14889 return this.textTools.sizeOfString('9. ', this.styleStack); 14890}; 14891 14892DocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) { 14893 function buildDisc(gapSize, color) { 14894 // TODO: ascender-based calculations 14895 var radius = gapSize.fontSize / 6; 14896 return { 14897 canvas: [{ 14898 x: radius, 14899 y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3, 14900 r1: radius,
14901 r2: radius, 14902 type: 'ellipse', 14903 color: color 14904 }] 14905 }; 14906 } 14907 14908 function buildSquare(gapSize, color) { 14909 // TODO: ascender-based calculations 14910 var size = gapSize.fontSize / 3; 14911 return { 14912 canvas: [{ 14913 x: 0, 14914 y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2), 14915 h: size, 14916 w: size, 14917 type: 'rect', 14918 color: color 14919 }] 14920 }; 14921 } 14922 14923 function buildCircle(gapSize, color) { 14924 // TODO: ascender-based calculations 14925 var radius = gapSize.fontSize / 6; 14926 return { 14927 canvas: [{ 14928 x: radius, 14929 y: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3, 14930 r1: radius, 14931 r2: radius, 14932 type: 'ellipse', 14933 lineColor: color 14934 }] 14935 }; 14936 } 14937 14938 var marker; 14939 var color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black'; 14940 14941 switch (type) { 14942 case 'circle': 14943 marker = buildCircle(gapSize, color); 14944 break; 14945 14946 case 'square': 14947 marker = buildSquare(gapSize, color); 14948 break; 14949 14950 case 'none': 14951 marker = {}; 14952 break; 14953 14954 case 'disc': 14955 default: 14956 marker = buildDisc(gapSize, color); 14957 break; 14958 } 14959 14960 marker._minWidth = marker._maxWidth = gapSize.width; 14961 marker._minHeight = marker._maxHeight = gapSize.height; 14962 14963 return marker; 14964}; 14965 14966DocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) { 14967 function prepareAlpha(counter) { 14968 function toAlpha(num) { 14969 return (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0]; 14970 } 14971 14972 if (counter < 1) { 14973 return counter.toString(); 14974 } 14975 14976 return toAlpha(counter - 1); 14977 } 14978 14979 function prepareRoman(counter) { 14980 if (counter < 1 || counter > 4999) { 14981 return counter.toString(); 14982 } 14983 var num = counter; 14984 var lookup = {M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1}, roman = '', i; 14985 for (i in lookup) { 14986 while (num >= lookup[i]) { 14987 roman += i; 14988 num -= lookup[i]; 14989 } 14990 } 14991 return roman; 14992 } 14993 14994 function prepareDecimal(counter) { 14995 return counter.toString(); 14996 } 14997 14998 var counterText; 14999 switch (type) { 15000 case 'none': 15001 counterText = null; 15002 break; 15003 15004 case 'upper-alpha': 15005 counterText = prepareAlpha(counter).toUpperCase(); 15006 break; 15007 15008 case 'lower-alpha': 15009 counterText = prepareAlpha(counter); 15010 break; 15011 15012 case 'upper-roman': 15013 counterText = prepareRoman(counter); 15014 break; 15015 15016 case 'lower-roman': 15017 counterText = prepareRoman(counter).toLowerCase(); 15018 break; 15019 15020 case 'decimal': 15021 default: 15022 counterText = prepareDecimal(counter); 15023 break; 15024 } 15025 15026 if (counterText === null) { 15027 return {}; 15028 } 15029 15030 if (separator) { 15031 if (isArray(separator)) { 15032 if (separator[0]) { 15033 counterText = separator[0] + counterText; 15034 } 15035 15036 if (separator[1]) { 15037 counterText += separator[1]; 15038 } 15039 counterText += ' '; 15040 } else { 15041 counterText += separator + ' '; 15042 } 15043 } 15044 15045 var textArray = {text: counterText}; 15046 var markerColor = styleStack.getProperty('markerColor'); 15047 if (markerColor) { 15048 textArray.color = markerColor; 15049 } 15050 15051 return {_inlines: this.textTools.buildInlines(textArray, styleStack).items}; 15052}; 15053 15054DocMeasure.prototype.measureUnorderedList = function (node) { 15055 var style = this.styleStack.clone(); 15056 var items = node.ul; 15057 node.type = node.type || 'disc'; 15058 node._gapSize = this.gapSizeForList(); 15059 node._minWidth = 0; 15060 node._maxWidth = 0; 15061 15062 for (var i = 0, l = items.length; i < l; i++) { 15063 var item = items[i] = this.measureNode(items[i]); 15064 15065 if (!item.ol && !item.ul) { 15066 item.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type); 15067 } 15068 15069 node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width); 15070 node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width); 15071 } 15072 15073 return node; 15074}; 15075 15076DocMeasure.prototype.measureOrderedList = function (node) { 15077 var style = this.styleStack.clone(); 15078 var items = node.ol; 15079 node.type = node.type || 'decimal'; 15080 node.separator = node.separator || '.'; 15081 node.reversed = node.reversed || false; 15082 if (!node.start) { 15083 node.start = node.reversed ? items.length : 1; 15084 }
vendor: 7,195 bytes, lines 15085-15372
15085 node._gapSize = this.gapSizeForList(); 15086 node._minWidth = 0; 15087 node._maxWidth = 0; 15088 15089 var counter = node.start; 15090 for (var i = 0, l = items.length; i < l; i++) { 15091 var item = items[i] = this.measureNode(items[i]); 15092 15093 if (!item.ol && !item.ul) { 15094 item.listMarker = this.buildOrderedMarker(item.counter || counter, style, item.listType || node.type, node.separator); 15095 if (item.listMarker._inlines) { 15096 node._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width); 15097 } 15098 } // TODO: else - nested lists numbering 15099 15100 node._minWidth = Math.max(node._minWidth, items[i]._minWidth); 15101 node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth); 15102 15103 if (node.reversed) { 15104 counter--; 15105 } else { 15106 counter++; 15107 } 15108 } 15109 15110 node._minWidth += node._gapSize.width; 15111 node._maxWidth += node._gapSize.width; 15112 15113 for (var i = 0, l = items.length; i < l; i++) { 15114 var item = items[i]; 15115 if (!item.ol && !item.ul) { 15116 item.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width; 15117 } 15118 } 15119 15120 return node; 15121}; 15122 15123DocMeasure.prototype.measureColumns = function (node) { 15124 var columns = node.columns; 15125 node._gap = this.styleStack.getProperty('columnGap') || 0; 15126 15127 for (var i = 0, l = columns.length; i < l; i++) { 15128 columns[i] = this.measureNode(columns[i]); 15129 } 15130 15131 var measures = ColumnCalculator.measureMinMax(columns); 15132 15133 var numGaps = (columns.length > 0) ? (columns.length - 1) : 0; 15134 node._minWidth = measures.min + node._gap * numGaps; 15135 node._maxWidth = measures.max + node._gap * numGaps; 15136 15137 return node; 15138}; 15139 15140DocMeasure.prototype.measureTable = function (node) { 15141 extendTableWidths(node); 15142 node._layout = getLayout(this.tableLayouts); 15143 node._offsets = getOffsets(node._layout); 15144 15145 var colSpans = []; 15146 var col, row, cols, rows; 15147 15148 for (col = 0, cols = node.table.body[0].length; col < cols; col++) { 15149 var c = node.table.widths[col]; 15150 c._minWidth = 0; 15151 c._maxWidth = 0; 15152 15153 for (row = 0, rows = node.table.body.length; row < rows; row++) { 15154 var rowData = node.table.body[row]; 15155 var data = rowData[col]; 15156 if (data === undefined) { 15157 console.error('Malformed table row ', rowData, 'in node ', node); 15158 throw 'Malformed table row, a cell is undefined.'; 15159 } 15160 if (data === null) { // transform to object 15161 data = ''; 15162 } 15163 15164 if (!data._span) { 15165 data = rowData[col] = this.styleStack.auto(data, measureCb(this, data)); 15166 15167 if (data.colSpan && data.colSpan > 1) { 15168 markSpans(rowData, col, data.colSpan); 15169 colSpans.push({col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth}); 15170 } else { 15171 c._minWidth = Math.max(c._minWidth, data._minWidth); 15172 c._maxWidth = Math.max(c._maxWidth, data._maxWidth); 15173 } 15174 } 15175 15176 if (data.rowSpan && data.rowSpan > 1) { 15177 markVSpans(node.table, row, col, data.rowSpan); 15178 } 15179 } 15180 } 15181 15182 extendWidthsForColSpans(); 15183 15184 var measures = ColumnCalculator.measureMinMax(node.table.widths); 15185 15186 node._minWidth = measures.min + node._offsets.total; 15187 node._maxWidth = measures.max + node._offsets.total; 15188 15189 return node; 15190 15191 function measureCb(_this, data) { 15192 return function () { 15193 if (isObject(data)) { 15194 data.fillColor = _this.styleStack.getProperty('fillColor'); 15195 } 15196 return _this.measureNode(data); 15197 }; 15198 } 15199 15200 function getLayout(tableLayouts) { 15201 var layout = node.layout; 15202 15203 if (isString(layout)) { 15204 layout = tableLayouts[layout]; 15205 } 15206 15207 var defaultLayout = { 15208 hLineWidth: function (i, node) { 15209 return 1; 15210 }, 15211 vLineWidth: function (i, node) { 15212 return 1; 15213 }, 15214 hLineColor: function (i, node) { 15215 return 'black'; 15216 }, 15217 vLineColor: function (i, node) { 15218 return 'black'; 15219 }, 15220 paddingLeft: function (i, node) { 15221 return 4; 15222 }, 15223 paddingRight: function (i, node) { 15224 return 4; 15225 }, 15226 paddingTop: function (i, node) { 15227 return 2; 15228 }, 15229 paddingBottom: function (i, node) { 15230 return 2; 15231 }, 15232 fillColor: function (i, node) { 15233 return null; 15234 }, 15235 defaultBorder: true 15236 }; 15237 15238 return pack(defaultLayout, layout); 15239 } 15240 15241 function getOffsets(layout) { 15242 var offsets = []; 15243 var totalOffset = 0; 15244 var prevRightPadding = 0; 15245 15246 for (var i = 0, l = node.table.widths.length; i < l; i++) { 15247 var lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node); 15248 offsets.push(lOffset); 15249 totalOffset += lOffset; 15250 prevRightPadding = layout.paddingRight(i, node); 15251 } 15252 15253 totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node); 15254 15255 return { 15256 total: totalOffset, 15257 offsets: offsets 15258 }; 15259 } 15260 15261 function extendWidthsForColSpans() { 15262 var q, j; 15263 15264 for (var i = 0, l = colSpans.length; i < l; i++) { 15265 var span = colSpans[i]; 15266 15267 var currentMinMax = getMinMax(span.col, span.span, node._offsets); 15268 var minDifference = span.minWidth - currentMinMax.minWidth; 15269 var maxDifference = span.maxWidth - currentMinMax.maxWidth; 15270 15271 if (minDifference > 0) { 15272 q = minDifference / span.span; 15273 15274 for (j = 0; j < span.span; j++) { 15275 node.table.widths[span.col + j]._minWidth += q; 15276 } 15277 } 15278 15279 if (maxDifference > 0) { 15280 q = maxDifference / span.span; 15281 15282 for (j = 0; j < span.span; j++) { 15283 node.table.widths[span.col + j]._maxWidth += q; 15284 } 15285 } 15286 } 15287 } 15288 15289 function getMinMax(col, span, offsets) { 15290 var result = {minWidth: 0, maxWidth: 0}; 15291 15292 for (var i = 0; i < span; i++) { 15293 result.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0); 15294 result.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0); 15295 } 15296 15297 return result; 15298 } 15299 15300 function markSpans(rowData, col, span) { 15301 for (var i = 1; i < span; i++) { 15302 rowData[col + i] = { 15303 _span: true, 15304 _minWidth: 0, 15305 _maxWidth: 0, 15306 rowSpan: rowData[col].rowSpan 15307 }; 15308 } 15309 } 15310 15311 function markVSpans(table, row, col, span) { 15312 for (var i = 1; i < span; i++) { 15313 table.body[row + i][col] = { 15314 _span: true, 15315 _minWidth: 0, 15316 _maxWidth: 0, 15317 fillColor: table.body[row][col].fillColor 15318 }; 15319 } 15320 } 15321 15322 function extendTableWidths(node) { 15323 if (!node.table.widths) { 15324 node.table.widths = '*'; 15325 } 15326 15327 if (isString(node.table.widths)) { 15328 node.table.widths = [node.table.widths]; 15329 15330 while (node.table.widths.length < node.table.body[0].length) { 15331 node.table.widths.push(node.table.widths[node.table.widths.length - 1]); 15332 } 15333 } 15334 15335 for (var i = 0, l = node.table.widths.length; i < l; i++) { 15336 var w = node.table.widths[i]; 15337 if (isNumber(w) || isString(w)) { 15338 node.table.widths[i] = {width: w}; 15339 } 15340 } 15341 } 15342}; 15343 15344DocMeasure.prototype.measureCanvas = function (node) { 15345 var w = 0, h = 0; 15346 15347 for (var i = 0, l = node.canvas.length; i < l; i++) { 15348 var vector = node.canvas[i]; 15349 15350 switch (vector.type) { 15351 case 'ellipse': 15352 w = Math.max(w, vector.x + vector.r1); 15353 h = Math.max(h, vector.y + vector.r2); 15354 break; 15355 case 'rect': 15356 w = Math.max(w, vector.x + vector.w); 15357 h = Math.max(h, vector.y + vector.h); 15358 break; 15359 case 'line': 15360 w = Math.max(w, vector.x1, vector.x2); 15361 h = Math.max(h, vector.y1, vector.y2); 15362 break; 15363 case 'polyline': 15364 for (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) { 15365 w = Math.max(w, vector.points[i2].x); 15366 h = Math.max(h, vector.points[i2].y); 15367 } 15368 break; 15369 } 15370 } 15371 15372 node._minWidth = node._maxWidth = w;
vendor: 5,242 bytes, lines 15373-15610
15373 node._minHeight = node._maxHeight = h; 15374 node._alignment = this.styleStack.getProperty('alignment'); 15375 15376 return node; 15377}; 15378 15379DocMeasure.prototype.measureQr = function (node) { 15380 node = qrEncoder.measure(node); 15381 node._alignment = this.styleStack.getProperty('alignment'); 15382 return node; 15383}; 15384 15385module.exports = DocMeasure; 15386 15387 15388/***/ }), 15389/* 131 */ 15390/***/ (function(module, exports, __webpack_require__) { 15391 15392var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; 15393 15394;(function (exports) { 15395 'use strict'; 15396 15397 var Arr = (typeof Uint8Array !== 'undefined') 15398 ? Uint8Array 15399 : Array 15400 15401 var PLUS = '+'.charCodeAt(0) 15402 var SLASH = '/'.charCodeAt(0) 15403 var NUMBER = '0'.charCodeAt(0) 15404 var LOWER = 'a'.charCodeAt(0) 15405 var UPPER = 'A'.charCodeAt(0) 15406 var PLUS_URL_SAFE = '-'.charCodeAt(0) 15407 var SLASH_URL_SAFE = '_'.charCodeAt(0) 15408 15409 function decode (elt) { 15410 var code = elt.charCodeAt(0) 15411 if (code === PLUS || 15412 code === PLUS_URL_SAFE) 15413 return 62 // '+' 15414 if (code === SLASH || 15415 code === SLASH_URL_SAFE) 15416 return 63 // '/' 15417 if (code < NUMBER) 15418 return -1 //no match 15419 if (code < NUMBER + 10) 15420 return code - NUMBER + 26 + 26 15421 if (code < UPPER + 26) 15422 return code - UPPER 15423 if (code < LOWER + 26) 15424 return code - LOWER + 26 15425 } 15426 15427 function b64ToByteArray (b64) { 15428 var i, j, l, tmp, placeHolders, arr 15429 15430 if (b64.length % 4 > 0) { 15431 throw new Error('Invalid string. Length must be a multiple of 4') 15432 } 15433 15434 // the number of equal signs (place holders) 15435 // if there are two placeholders, than the two characters before it 15436 // represent one byte 15437 // if there is only one, then the three characters before it represent 2 bytes 15438 // this is just a cheap hack to not do indexOf twice 15439 var len = b64.length 15440 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 15441 15442 // base64 is 4/3 + up to two characters of the original data 15443 arr = new Arr(b64.length * 3 / 4 - placeHolders) 15444 15445 // if there are placeholders, only get up to the last complete 4 chars 15446 l = placeHolders > 0 ? b64.length - 4 : b64.length 15447 15448 var L = 0 15449 15450 function push (v) { 15451 arr[L++] = v 15452 } 15453 15454 for (i = 0, j = 0; i < l; i += 4, j += 3) { 15455 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) 15456 push((tmp & 0xFF0000) >> 16) 15457 push((tmp & 0xFF00) >> 8) 15458 push(tmp & 0xFF) 15459 } 15460 15461 if (placeHolders === 2) { 15462 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) 15463 push(tmp & 0xFF) 15464 } else if (placeHolders === 1) { 15465 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) 15466 push((tmp >> 8) & 0xFF) 15467 push(tmp & 0xFF) 15468 } 15469 15470 return arr 15471 } 15472 15473 function uint8ToBase64 (uint8) { 15474 var i, 15475 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes 15476 output = "", 15477 temp, length 15478 15479 function encode (num) { 15480 return lookup.charAt(num) 15481 } 15482 15483 function tripletToBase64 (num) { 15484 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) 15485 } 15486 15487 // go through the array every three bytes, we'll deal with trailing stuff later 15488 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { 15489 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) 15490 output += tripletToBase64(temp) 15491 } 15492 15493 // pad the end with zeros, but make sure to not forget the extra bytes 15494 switch (extraBytes) { 15495 case 1: 15496 temp = uint8[uint8.length - 1] 15497 output += encode(temp >> 2) 15498 output += encode((temp << 4) & 0x3F) 15499 output += '==' 15500 break 15501 case 2: 15502 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) 15503 output += encode(temp >> 10) 15504 output += encode((temp >> 4) & 0x3F) 15505 output += encode((temp << 2) & 0x3F) 15506 output += '=' 15507 break 15508 } 15509 15510 return output 15511 } 15512 15513 exports.toByteArray = b64ToByteArray 15514 exports.fromByteArray = uint8ToBase64 15515}( false ? (this.base64js = {}) : exports)) 15516 15517 15518/***/ }), 15519/* 132 */ 15520/***/ (function(module, exports) { 15521 15522// Generated by CoffeeScript 1.7.1 15523(function() { 15524 var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW; 15525 15526 exports.OP = OP = 0; 15527 15528 exports.CL = CL = 1; 15529 15530 exports.CP = CP = 2; 15531 15532 exports.QU = QU = 3; 15533 15534 exports.GL = GL = 4; 15535 15536 exports.NS = NS = 5; 15537 15538 exports.EX = EX = 6; 15539 15540 exports.SY = SY = 7; 15541 15542 exports.IS = IS = 8; 15543 15544 exports.PR = PR = 9; 15545 15546 exports.PO = PO = 10; 15547 15548 exports.NU = NU = 11; 15549 15550 exports.AL = AL = 12; 15551 15552 exports.HL = HL = 13; 15553 15554 exports.ID = ID = 14; 15555 15556 exports.IN = IN = 15; 15557 15558 exports.HY = HY = 16; 15559 15560 exports.BA = BA = 17; 15561 15562 exports.BB = BB = 18; 15563 15564 exports.B2 = B2 = 19; 15565 15566 exports.ZW = ZW = 20; 15567 15568 exports.CM = CM = 21; 15569 15570 exports.WJ = WJ = 22; 15571 15572 exports.H2 = H2 = 23; 15573 15574 exports.H3 = H3 = 24; 15575 15576 exports.JL = JL = 25; 15577 15578 exports.JV = JV = 26; 15579 15580 exports.JT = JT = 27; 15581 15582 exports.RI = RI = 28; 15583 15584 exports.AI = AI = 29; 15585 15586 exports.BK = BK = 30; 15587 15588 exports.CB = CB = 31; 15589 15590 exports.CJ = CJ = 32; 15591 15592 exports.CR = CR = 33; 15593 15594 exports.LF = LF = 34; 15595 15596 exports.NL = NL = 35; 15597 15598 exports.SA = SA = 36; 15599 15600 exports.SG = SG = 37; 15601 15602 exports.SP = SP = 38; 15603 15604 exports.XX = XX = 39; 15605 15606}).call(this); 15607 15608 15609/***/ }), 15610/* 133 */
15611/***/ (function(module, exports) { 15612 15613// Generated by CoffeeScript 1.7.1 15614(function() { 15615 var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK; 15616 15617 exports.DI_BRK = DI_BRK = 0; 15618 15619 exports.IN_BRK = IN_BRK = 1; 15620 15621 exports.CI_BRK = CI_BRK = 2; 15622 15623 exports.CP_BRK = CP_BRK = 3; 15624 15625 exports.PR_BRK = PR_BRK = 4; 15626 15627 exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]]; 15628 15629}).call(this); 15630 15631 15632/***/ }), 15633/* 134 */ 15634/***/ (function(module, exports, __webpack_require__) { 15635 15636"use strict"; 15637/*eslint no-unused-vars: ["error", {"args": "none"}]*/ 15638/*eslint no-redeclare: "off"*/ 15639 15640 15641/* qr.js -- QR code generator in Javascript (revision 2011-01-19) 15642 * Written by Kang Seonghoon <[email protected]>. 15643 * 15644 * This source code is in the public domain; if your jurisdiction does not
vendor: 28,189 bytes, lines 15645-16506
15645 * recognize the public domain the terms of Creative Commons CC0 license 15646 * apply. In the other words, you can always do what you want. 15647 */ 15648 15649 15650// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71) 15651// 15652// [0]: the degree of generator polynomial by ECC levels 15653// [1]: # of code blocks by ECC levels 15654// [2]: left-top positions of alignment patterns 15655// 15656// the number in this table (in particular, [0]) does not exactly match with 15657// the numbers in the specficiation. see augumenteccs below for the reason. 15658var VERSIONS = [ 15659 null, 15660 [[10, 7, 17, 13], [1, 1, 1, 1], []], 15661 [[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]], 15662 [[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]], 15663 [[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]], 15664 [[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]], 15665 [[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]], 15666 [[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]], 15667 [[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]], 15668 [[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]], 15669 [[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]], 15670 [[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]], 15671 [[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]], 15672 [[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]], 15673 [[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]], 15674 [[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]], 15675 [[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]], 15676 [[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]], 15677 [[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]], 15678 [[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]], 15679 [[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]], 15680 [[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]], 15681 [[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]], 15682 [[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]], 15683 [[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]], 15684 [[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]], 15685 [[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]], 15686 [[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]], 15687 [[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]], 15688 [[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]], 15689 [[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]], 15690 [[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]], 15691 [[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]], 15692 [[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]], 15693 [[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]], 15694 [[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]], 15695 [[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]], 15696 [[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]], 15697 [[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]], 15698 [[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]], 15699 [[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]]; 15700 15701// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16) 15702var MODE_TERMINATOR = 0; 15703var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8; 15704 15705// validation regexps 15706var NUMERIC_REGEXP = /^\d*$/; 15707var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:]*$/; 15708var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:]*$/; 15709 15710// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45) 15711var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2; 15712 15713// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1 15714// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256) 15715var GF256_MAP = [], GF256_INVMAP = [-1]; 15716for (var i = 0, v = 1; i < 255; ++i) { 15717 GF256_MAP.push(v); 15718 GF256_INVMAP[v] = i; 15719 v = (v * 2) ^ (v >= 128 ? 0x11d : 0); 15720} 15721 15722// generator polynomials up to degree 30 15723// (should match with polynomials in JIS X 0510:2004 Appendix A) 15724// 15725// generator polynomial of degree K is product of (x-\alpha^0), (x-\alpha^1), 15726// ..., (x-\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1) 15727// from the result; also other coefficients are written in terms of the exponent 15728// to \alpha to avoid the redundant calculation. (see also calculateecc below.) 15729var GF256_GENPOLY = [[]]; 15730for (var i = 0; i < 30; ++i) { 15731 var prevpoly = GF256_GENPOLY[i], poly = []; 15732 for (var j = 0; j <= i; ++j) { 15733 var a = (j < i ? GF256_MAP[prevpoly[j]] : 0); 15734 var b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255]; 15735 poly.push(GF256_INVMAP[a ^ b]); 15736 } 15737 GF256_GENPOLY.push(poly); 15738} 15739 15740// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19) 15741var ALPHANUMERIC_MAP = {}; 15742for (var i = 0; i < 45; ++i) { 15743 ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i; 15744} 15745 15746// mask functions in terms of row # and column # 15747// (cf. Table 20 in JIS X 0510:2004 p. 42) 15748/*jshint unused: false */ 15749var MASKFUNCS = [ 15750 function (i, j) { 15751 return (i + j) % 2 === 0; 15752 }, 15753 function (i, j) { 15754 return i % 2 === 0; 15755 }, 15756 function (i, j) { 15757 return j % 3 === 0; 15758 }, 15759 function (i, j) { 15760 return (i + j) % 3 === 0; 15761 }, 15762 function (i, j) { 15763 return (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0; 15764 }, 15765 function (i, j) { 15766 return (i * j) % 2 + (i * j) % 3 === 0; 15767 }, 15768 function (i, j) { 15769 return ((i * j) % 2 + (i * j) % 3) % 2 === 0; 15770 }, 15771 function (i, j) { 15772 return ((i + j) % 2 + (i * j) % 3) % 2 === 0; 15773 }]; 15774 15775// returns true when the version information has to be embeded. 15776var needsverinfo = function (ver) { 15777 return ver > 6; 15778}; 15779 15780// returns the size of entire QR code for given version. 15781var getsizebyver = function (ver) { 15782 return 4 * ver + 17; 15783}; 15784 15785// returns the number of bits available for code words in this version. 15786var nfullbits = function (ver) { 15787 /* 15788 * |<--------------- n --------------->| 15789 * | |<----- n-17 ---->| | 15790 * +-------+ ///+-------+ ---- 15791 * | | ///| | ^ 15792 * | 9x9 | @@@@@ ///| 9x8 | | 15793 * | | # # # @5x5@ # # # | | | 15794 * +-------+ @@@@@ +-------+ | 15795 * # ---| 15796 * ^ | 15797 * # | 15798 * @@@@@ @@@@@ @@@@@ | n 15799 * @5x5@ @5x5@ @5x5@ n-17 15800 * @@@@@ @@@@@ @@@@@ | | 15801 * # | | 15802 * ////// v | 15803 * //////# ---| 15804 * +-------+ @@@@@ @@@@@ | 15805 * | | @5x5@ @5x5@ | 15806 * | 8x9 | @@@@@ @@@@@ | 15807 * | | v 15808 * +-------+ ---- 15809 * 15810 * when the entire code has n^2 modules and there are m^2-3 alignment 15811 * patterns, we have: 15812 * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and 15813 * format information; 15814 * - 2n-34 (= 2(n-17)) modules for timing patterns; 15815 * - 36 (= 3x6 + 6x3) modules for version information, if any; 15816 * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns 15817 * if any, but 10m-20 (= 2(m-2)x5) of them overlaps with 15818 * timing patterns. 15819 */ 15820 var v = VERSIONS[ver]; 15821 var nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info. 15822 if (needsverinfo(ver)) 15823 nbits -= 36; // version information 15824 if (v[2].length) { // alignment patterns 15825 nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55; 15826 } 15827 return nbits; 15828}; 15829 15830// returns the number of bits available for data portions (i.e. excludes ECC 15831// bits but includes mode and length bits) in this version and ECC level. 15832var ndatabits = function (ver, ecclevel) { 15833 var nbits = nfullbits(ver) & ~7; // no sub-octet code words 15834 var v = VERSIONS[ver]; 15835 nbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits 15836 return nbits; 15837}; 15838 15839// returns the number of bits required for the length of data. 15840// (cf. Table 3 in JIS X 0510:2004 p. 16) 15841var ndatalenbits = function (ver, mode) { 15842 switch (mode) { 15843 case MODE_NUMERIC: 15844 return (ver < 10 ? 10 : ver < 27 ? 12 : 14); 15845 case MODE_ALPHANUMERIC: 15846 return (ver < 10 ? 9 : ver < 27 ? 11 : 13); 15847 case MODE_OCTET: 15848 return (ver < 10 ? 8 : 16); 15849 case MODE_KANJI: 15850 return (ver < 10 ? 8 : ver < 27 ? 10 : 12); 15851 } 15852}; 15853 15854// returns the maximum length of data possible in given configuration. 15855var getmaxdatalen = function (ver, mode, ecclevel) { 15856 var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits 15857 switch (mode) { 15858 case MODE_NUMERIC: 15859 return ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2); 15860 case MODE_ALPHANUMERIC: 15861 return ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1); 15862 case MODE_OCTET: 15863 return (nbits / 8) | 0; 15864 case MODE_KANJI: 15865 return (nbits / 13) | 0; 15866 } 15867}; 15868 15869// checks if the given data can be encoded in given mode, and returns 15870// the converted data for the further processing if possible. otherwise 15871// returns null. 15872// 15873// this function does not check the length of data; it is a duty of 15874// encode function below (as it depends on the version and ECC level too). 15875var validatedata = function (mode, data) { 15876 switch (mode) { 15877 case MODE_NUMERIC: 15878 if (!data.match(NUMERIC_REGEXP)) 15879 return null; 15880 return data; 15881 15882 case MODE_ALPHANUMERIC: 15883 if (!data.match(ALPHANUMERIC_REGEXP)) 15884 return null; 15885 return data.toUpperCase(); 15886 15887 case MODE_OCTET: 15888 if (typeof data === 'string') { // encode as utf-8 string 15889 var newdata = []; 15890 for (var i = 0; i < data.length; ++i) { 15891 var ch = data.charCodeAt(i); 15892 if (ch < 0x80) { 15893 newdata.push(ch); 15894 } else if (ch < 0x800) { 15895 newdata.push(0xc0 | (ch >> 6), 15896 0x80 | (ch & 0x3f)); 15897 } else if (ch < 0x10000) { 15898 newdata.push(0xe0 | (ch >> 12), 15899 0x80 | ((ch >> 6) & 0x3f), 15900 0x80 | (ch & 0x3f)); 15901 } else { 15902 newdata.push(0xf0 | (ch >> 18), 15903 0x80 | ((ch >> 12) & 0x3f), 15904 0x80 | ((ch >> 6) & 0x3f), 15905 0x80 | (ch & 0x3f)); 15906 } 15907 } 15908 return newdata; 15909 } else { 15910 return data; 15911 } 15912 } 15913}; 15914 15915// returns the code words (sans ECC bits) for given data and configurations. 15916// requires data to be preprocessed by validatedata. no length check is 15917// performed, and everything has to be checked before calling this function. 15918var encode = function (ver, mode, data, maxbuflen) { 15919 var buf = []; 15920 var bits = 0, remaining = 8; 15921 var datalen = data.length; 15922 15923 // this function is intentionally no-op when n=0. 15924 var pack = function (x, n) { 15925 if (n >= remaining) { 15926 buf.push(bits | (x >> (n -= remaining))); 15927 while (n >= 8) 15928 buf.push((x >> (n -= 8)) & 255); 15929 bits = 0; 15930 remaining = 8; 15931 } 15932 if (n > 0) 15933 bits |= (x & ((1 << n) - 1)) << (remaining -= n); 15934 }; 15935 15936 var nlenbits = ndatalenbits(ver, mode); 15937 pack(mode, 4); 15938 pack(datalen, nlenbits); 15939 15940 switch (mode) { 15941 case MODE_NUMERIC: 15942 for (var i = 2; i < datalen; i += 3) { 15943 pack(parseInt(data.substring(i - 2, i + 1), 10), 10); 15944 } 15945 pack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]); 15946 break; 15947 15948 case MODE_ALPHANUMERIC: 15949 for (var i = 1; i < datalen; i += 2) { 15950 pack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 + 15951 ALPHANUMERIC_MAP[data.charAt(i)], 11); 15952 } 15953 if (datalen % 2 == 1) { 15954 pack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6); 15955 } 15956 break; 15957 15958 case MODE_OCTET: 15959 for (var i = 0; i < datalen; ++i) { 15960 pack(data[i], 8); 15961 } 15962 break; 15963 } 15964 15965 // final bits. it is possible that adding terminator causes the buffer 15966 // to overflow, but then the buffer truncated to the maximum size will 15967 // be valid as the truncated terminator mode bits and padding is 15968 // identical in appearance (cf. JIS X 0510:2004 sec 8.4.8). 15969 pack(MODE_TERMINATOR, 4); 15970 if (remaining < 8) 15971 buf.push(bits); 15972 15973 // the padding to fill up the remaining space. we should not add any 15974 // words when the overflow already occurred. 15975 while (buf.length + 1 < maxbuflen) 15976 buf.push(0xec, 0x11); 15977 if (buf.length < maxbuflen) 15978 buf.push(0xec); 15979 return buf; 15980}; 15981 15982// calculates ECC code words for given code words and generator polynomial. 15983// 15984// this is quite similar to CRC calculation as both Reed-Solomon and CRC use 15985// the certain kind of cyclic codes, which is effectively the division of 15986// zero-augumented polynomial by the generator polynomial. the only difference 15987// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon 15988// uses the different generator polynomial than CRC's. 15989var calculateecc = function (poly, genpoly) { 15990 var modulus = poly.slice(0); 15991 var polylen = poly.length, genpolylen = genpoly.length; 15992 for (var i = 0; i < genpolylen; ++i) 15993 modulus.push(0); 15994 for (var i = 0; i < polylen; ) { 15995 var quotient = GF256_INVMAP[modulus[i++]]; 15996 if (quotient >= 0) { 15997 for (var j = 0; j < genpolylen; ++j) { 15998 modulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255]; 15999 } 16000 } 16001 } 16002 return modulus.slice(polylen); 16003}; 16004 16005// auguments ECC code words to given code words. the resulting words are 16006// ready to be encoded in the matrix. 16007// 16008// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7. 16009// the code is simplified using the fact that the size of each code & ECC 16010// blocks is almost same; for example, when we have 4 blocks and 46 data words 16011// the number of code words in those blocks are 11, 11, 12, 12 respectively. 16012var augumenteccs = function (poly, nblocks, genpoly) { 16013 var subsizes = []; 16014 var subsize = (poly.length / nblocks) | 0, subsize0 = 0; 16015 var pivot = nblocks - poly.length % nblocks; 16016 for (var i = 0; i < pivot; ++i) { 16017 subsizes.push(subsize0); 16018 subsize0 += subsize; 16019 } 16020 for (var i = pivot; i < nblocks; ++i) { 16021 subsizes.push(subsize0); 16022 subsize0 += subsize + 1; 16023 } 16024 subsizes.push(subsize0); 16025 16026 var eccs = []; 16027 for (var i = 0; i < nblocks; ++i) { 16028 eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly)); 16029 } 16030 16031 var result = []; 16032 var nitemsperblock = (poly.length / nblocks) | 0; 16033 for (var i = 0; i < nitemsperblock; ++i) { 16034 for (var j = 0; j < nblocks; ++j) { 16035 result.push(poly[subsizes[j] + i]); 16036 } 16037 } 16038 for (var j = pivot; j < nblocks; ++j) { 16039 result.push(poly[subsizes[j + 1] - 1]); 16040 } 16041 for (var i = 0; i < genpoly.length; ++i) { 16042 for (var j = 0; j < nblocks; ++j) { 16043 result.push(eccs[j][i]); 16044 } 16045 } 16046 return result; 16047}; 16048 16049// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper 16050// genpoly. the both input and output are in binary numbers, and unlike 16051// calculateecc genpoly should include the 1 bit for the highest degree. 16052// 16053// actual polynomials used for this procedure are as follows: 16054// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C) 16055// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D) 16056var augumentbch = function (poly, p, genpoly, q) { 16057 var modulus = poly << q; 16058 for (var i = p - 1; i >= 0; --i) { 16059 if ((modulus >> (q + i)) & 1) 16060 modulus ^= genpoly << i; 16061 } 16062 return (poly << q) | modulus; 16063}; 16064 16065// creates the base matrix for given version. it returns two matrices, one of 16066// them is the actual one and the another represents the "reserved" portion 16067// (e.g. finder and timing patterns) of the matrix. 16068// 16069// some entries in the matrix may be undefined, rather than 0 or 1. this is 16070// intentional (no initialization needed!), and putdata below will fill 16071// the remaining ones. 16072var makebasematrix = function (ver) { 16073 var v = VERSIONS[ver], n = getsizebyver(ver); 16074 var matrix = [], reserved = []; 16075 for (var i = 0; i < n; ++i) { 16076 matrix.push([]); 16077 reserved.push([]); 16078 } 16079 16080 var blit = function (y, x, h, w, bits) { 16081 for (var i = 0; i < h; ++i) { 16082 for (var j = 0; j < w; ++j) { 16083 matrix[y + i][x + j] = (bits[i] >> j) & 1; 16084 reserved[y + i][x + j] = 1; 16085 } 16086 } 16087 }; 16088 16089 // finder patterns and a part of timing patterns 16090 // will also mark the format information area (not yet written) as reserved. 16091 blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]); 16092 blit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]); 16093 blit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]); 16094 16095 // the rest of timing patterns 16096 for (var i = 9; i < n - 8; ++i) { 16097 matrix[6][i] = matrix[i][6] = ~i & 1; 16098 reserved[6][i] = reserved[i][6] = 1; 16099 } 16100 16101 // alignment patterns 16102 var aligns = v[2], m = aligns.length; 16103 for (var i = 0; i < m; ++i) { 16104 var minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m); 16105 for (var j = minj; j < maxj; ++j) { 16106 blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]); 16107 } 16108 } 16109 16110 // version information 16111 if (needsverinfo(ver)) { 16112 var code = augumentbch(ver, 6, 0x1f25, 12); 16113 var k = 0; 16114 for (var i = 0; i < 6; ++i) { 16115 for (var j = 0; j < 3; ++j) { 16116 matrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1; 16117 reserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1; 16118 } 16119 } 16120 } 16121 16122 return {matrix: matrix, reserved: reserved}; 16123}; 16124 16125// fills the data portion (i.e. unmarked in reserved) of the matrix with given 16126// code words. the size of code words should be no more than available bits, 16127// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3). 16128var putdata = function (matrix, reserved, buf) { 16129 var n = matrix.length; 16130 var k = 0, dir = -1; 16131 for (var i = n - 1; i >= 0; i -= 2) { 16132 if (i == 6) 16133 --i; // skip the entire timing pattern column 16134 var jj = (dir < 0 ? n - 1 : 0); 16135 for (var j = 0; j < n; ++j) { 16136 for (var ii = i; ii > i - 2; --ii) { 16137 if (!reserved[jj][ii]) { 16138 // may overflow, but (undefined >> x) 16139 // is 0 so it will auto-pad to zero. 16140 matrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1; 16141 ++k; 16142 } 16143 } 16144 jj += dir; 16145 } 16146 dir = -dir; 16147 } 16148 return matrix; 16149}; 16150 16151// XOR-masks the data portion of the matrix. repeating the call with the same 16152// arguments will revert the prior call (convenient in the matrix evaluation). 16153var maskdata = function (matrix, reserved, mask) { 16154 var maskf = MASKFUNCS[mask]; 16155 var n = matrix.length; 16156 for (var i = 0; i < n; ++i) { 16157 for (var j = 0; j < n; ++j) { 16158 if (!reserved[i][j]) 16159 matrix[i][j] ^= maskf(i, j); 16160 } 16161 } 16162 return matrix; 16163}; 16164 16165// puts the format information. 16166var putformatinfo = function (matrix, reserved, ecclevel, mask) { 16167 var n = matrix.length; 16168 var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412; 16169 for (var i = 0; i < 15; ++i) { 16170 var r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i]; 16171 var c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i]; 16172 matrix[r][8] = matrix[8][c] = (code >> i) & 1; 16173 // we don't have to mark those bits reserved; always done 16174 // in makebasematrix above. 16175 } 16176 return matrix; 16177}; 16178 16179// evaluates the resulting matrix and returns the score (lower is better). 16180// (cf. JIS X 0510:2004 sec 8.8.2) 16181// 16182// the evaluation procedure tries to avoid the problematic patterns naturally 16183// occuring from the original matrix. for example, it penaltizes the patterns 16184// which just look like the finder pattern which will confuse the decoder. 16185// we choose the mask which results in the lowest score among 8 possible ones. 16186// 16187// note: zxing seems to use the same procedure and in many cases its choice 16188// agrees to ours, but sometimes it does not. practically it doesn't matter. 16189var evaluatematrix = function (matrix) { 16190 // N1+(k-5) points for each consecutive row of k same-colored modules, 16191 // where k >= 5. no overlapping row counts. 16192 var PENALTY_CONSECUTIVE = 3; 16193 // N2 points for each 2x2 block of same-colored modules. 16194 // overlapping block does count. 16195 var PENALTY_TWOBYTWO = 3; 16196 // N3 points for each pattern with >4W:1B:1W:3B:1W:1B or 16197 // 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely, 16198 // but 13W:3B:3W:9B:3W:3B counts). 16199 var PENALTY_FINDERLIKE = 40; 16200 // N4*k points for every (5*k)% deviation from 50% black density. 16201 // i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc. 16202 var PENALTY_DENSITY = 10; 16203 16204 var evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W] 16205 var score = 0; 16206 for (var i = 0; i < groups.length; ++i) { 16207 if (groups[i] >= 5) 16208 score += PENALTY_CONSECUTIVE + (groups[i] - 5); 16209 } 16210 for (var i = 5; i < groups.length; i += 2) { 16211 var p = groups[i]; 16212 if (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p && 16213 groups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) { 16214 // this part differs from zxing... 16215 score += PENALTY_FINDERLIKE; 16216 } 16217 } 16218 return score; 16219 }; 16220 16221 var n = matrix.length; 16222 var score = 0, nblacks = 0; 16223 for (var i = 0; i < n; ++i) { 16224 var row = matrix[i]; 16225 var groups; 16226 16227 // evaluate the current row 16228 groups = [0]; // the first empty group of white 16229 for (var j = 0; j < n; ) { 16230 var k; 16231 for (k = 0; j < n && row[j]; ++k) 16232 ++j; 16233 groups.push(k); 16234 for (k = 0; j < n && !row[j]; ++k) 16235 ++j; 16236 groups.push(k); 16237 } 16238 score += evaluategroup(groups); 16239 16240 // evaluate the current column 16241 groups = [0]; 16242 for (var j = 0; j < n; ) { 16243 var k; 16244 for (k = 0; j < n && matrix[j][i]; ++k) 16245 ++j; 16246 groups.push(k); 16247 for (k = 0; j < n && !matrix[j][i]; ++k) 16248 ++j; 16249 groups.push(k); 16250 } 16251 score += evaluategroup(groups); 16252 16253 // check the 2x2 box and calculate the density 16254 var nextrow = matrix[i + 1] || []; 16255 nblacks += row[0]; 16256 for (var j = 1; j < n; ++j) { 16257 var p = row[j]; 16258 nblacks += p; 16259 // at least comparison with next row should be strict... 16260 if (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) { 16261 score += PENALTY_TWOBYTWO; 16262 } 16263 } 16264 } 16265 16266 score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0); 16267 return score; 16268}; 16269 16270// returns the fully encoded QR code matrix which contains given data. 16271// it also chooses the best mask automatically when mask is -1. 16272var generate = function (data, ver, mode, ecclevel, mask) { 16273 var v = VERSIONS[ver]; 16274 var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3); 16275 buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]); 16276 16277 var result = makebasematrix(ver); 16278 var matrix = result.matrix, reserved = result.reserved; 16279 putdata(matrix, reserved, buf); 16280 16281 if (mask < 0) { 16282 // find the best mask 16283 maskdata(matrix, reserved, 0); 16284 putformatinfo(matrix, reserved, ecclevel, 0); 16285 var bestmask = 0, bestscore = evaluatematrix(matrix); 16286 maskdata(matrix, reserved, 0); 16287 for (mask = 1; mask < 8; ++mask) { 16288 maskdata(matrix, reserved, mask); 16289 putformatinfo(matrix, reserved, ecclevel, mask); 16290 var score = evaluatematrix(matrix); 16291 if (bestscore > score) { 16292 bestscore = score; 16293 bestmask = mask; 16294 } 16295 maskdata(matrix, reserved, mask); 16296 } 16297 mask = bestmask; 16298 } 16299 16300 maskdata(matrix, reserved, mask); 16301 putformatinfo(matrix, reserved, ecclevel, mask); 16302 return matrix; 16303}; 16304 16305// the public interface is trivial; the options available are as follows: 16306// 16307// - version: an integer in [1,40]. when omitted (or -1) the smallest possible 16308// version is chosen. 16309// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest 16310// possible mode is chosen. 16311// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'. 16312// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen. 16313// 16314 16315function generateFrame(data, options) { 16316 var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC, 16317 'octet': MODE_OCTET}; 16318 var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q, 16319 'H': ECCLEVEL_H}; 16320 16321 options = options || {}; 16322 var ver = options.version || -1; 16323 var ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()]; 16324 var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1; 16325 var mask = 'mask' in options ? options.mask : -1; 16326 16327 if (mode < 0) { 16328 if (typeof data === 'string') { 16329 if (data.match(NUMERIC_REGEXP)) { 16330 mode = MODE_NUMERIC; 16331 } else if (data.match(ALPHANUMERIC_OUT_REGEXP)) { 16332 // while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode. 16333 mode = MODE_ALPHANUMERIC; 16334 } else { 16335 mode = MODE_OCTET; 16336 } 16337 } else { 16338 mode = MODE_OCTET; 16339 } 16340 } else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC || 16341 mode == MODE_OCTET)) { 16342 throw 'invalid or unsupported mode'; 16343 } 16344 16345 data = validatedata(mode, data); 16346 if (data === null) 16347 throw 'invalid data format'; 16348 16349 if (ecclevel < 0 || ecclevel > 3) 16350 throw 'invalid ECC level'; 16351 16352 if (ver < 0) { 16353 for (ver = 1; ver <= 40; ++ver) { 16354 if (data.length <= getmaxdatalen(ver, mode, ecclevel)) 16355 break; 16356 } 16357 if (ver > 40) 16358 throw 'too large data for the Qr format'; 16359 } else if (ver < 1 || ver > 40) { 16360 throw 'invalid Qr version! should be between 1 and 40'; 16361 } 16362 16363 if (mask != -1 && (mask < 0 || mask > 8)) 16364 throw 'invalid mask'; 16365 //console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask ) 16366 return generate(data, ver, mode, ecclevel, mask); 16367} 16368 16369 16370// options 16371// - modulesize: a number. this is a size of each modules in pixels, and 16372// defaults to 5px. 16373// - margin: a number. this is a size of margin in *modules*, and defaults to 16374// 4 (white modules). the specficiation mandates the margin no less than 4 16375// modules, so it is better not to alter this value unless you know what 16376// you're doing. 16377function buildCanvas(data, options) { 16378 16379 var canvas = []; 16380 var background = options.background || '#fff'; 16381 var foreground = options.foreground || '#000'; 16382 //var margin = options.margin || 4; 16383 var matrix = generateFrame(data, options); 16384 var n = matrix.length; 16385 var modSize = Math.floor(options.fit ? options.fit / n : 5); 16386 var size = n * modSize; 16387 16388 canvas.push({ 16389 type: 'rect', 16390 x: 0, y: 0, w: size, h: size, lineWidth: 0, color: background 16391 }); 16392 16393 for (var i = 0; i < n; ++i) { 16394 for (var j = 0; j < n; ++j) { 16395 if (matrix[i][j]) { 16396 canvas.push({ 16397 type: 'rect', 16398 x: modSize * j, 16399 y: modSize * i, 16400 w: modSize, 16401 h: modSize, 16402 lineWidth: 0, 16403 color: foreground 16404 }); 16405 } 16406 } 16407 } 16408 16409 return { 16410 canvas: canvas, 16411 size: size 16412 }; 16413 16414} 16415 16416function measure(node) { 16417 var cd = buildCanvas(node.qr, node); 16418 node._canvas = cd.canvas; 16419 node._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size; 16420 return node; 16421} 16422 16423module.exports = { 16424 measure: measure 16425}; 16426 16427/***/ }), 16428/* 135 */ 16429/***/ (function(module, exports, __webpack_require__) { 16430 16431"use strict"; 16432 16433 16434var ElementWriter = __webpack_require__(136); 16435 16436/** 16437 * Creates an instance of PageElementWriter - an extended ElementWriter 16438 * which can handle: 16439 * - page-breaks (it adds new pages when there's not enough space left), 16440 * - repeatable fragments (like table-headers, which are repeated everytime 16441 * a page-break occurs) 16442 * - transactions (used for unbreakable-blocks when we want to make sure 16443 * whole block will be rendered on the same page) 16444 */ 16445function PageElementWriter(context, tracker) { 16446 this.transactionLevel = 0; 16447 this.repeatables = []; 16448 this.tracker = tracker; 16449 this.writer = new ElementWriter(context, tracker); 16450} 16451 16452function fitOnPage(self, addFct) { 16453 var position = addFct(self); 16454 if (!position) { 16455 self.moveToNextPage(); 16456 position = addFct(self); 16457 } 16458 return position; 16459} 16460 16461PageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) { 16462 return fitOnPage(this, function (self) { 16463 return self.writer.addLine(line, dontUpdateContextPosition, index); 16464 }); 16465}; 16466 16467PageElementWriter.prototype.addImage = function (image, index) { 16468 return fitOnPage(this, function (self) { 16469 return self.writer.addImage(image, index); 16470 }); 16471}; 16472 16473PageElementWriter.prototype.addQr = function (qr, index) { 16474 return fitOnPage(this, function (self) { 16475 return self.writer.addQr(qr, index); 16476 }); 16477}; 16478 16479PageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) { 16480 return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index); 16481}; 16482 16483PageElementWriter.prototype.beginClip = function (width, height) { 16484 return this.writer.beginClip(width, height); 16485}; 16486 16487PageElementWriter.prototype.endClip = function () { 16488 return this.writer.endClip(); 16489}; 16490 16491PageElementWriter.prototype.alignCanvas = function (node) { 16492 this.writer.alignCanvas(node); 16493}; 16494 16495PageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) { 16496 if (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) { 16497 this.moveToNextPage(); 16498 this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition); 16499 } 16500}; 16501 16502PageElementWriter.prototype.moveToNextPage = function (pageOrientation) { 16503 16504 var nextPage = this.writer.context.moveToNextPage(pageOrientation); 16505 16506 if (nextPage.newPageCreated) {
16507 this.repeatables.forEach(function (rep) { 16508 this.writer.addFragment(rep, true); 16509 }, this); 16510 } else { 16511 this.repeatables.forEach(function (rep) { 16512 this.writer.context.moveDown(rep.height); 16513 }, this); 16514 } 16515 16516 this.writer.tracker.emit('pageChanged', { 16517 prevPage: nextPage.prevPage, 16518 prevY: nextPage.prevY, 16519 y: nextPage.y 16520 }); 16521}; 16522 16523PageElementWriter.prototype.beginUnbreakableBlock = function (width, height) { 16524 if (this.transactionLevel++ === 0) { 16525 this.originalX = this.writer.context.x; 16526 this.writer.pushContext(width, height); 16527 } 16528}; 16529 16530PageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) { 16531 if (--this.transactionLevel === 0) { 16532 var unbreakableContext = this.writer.context; 16533 this.writer.popContext(); 16534 16535 var nbPages = unbreakableContext.pages.length; 16536 if (nbPages > 0) { 16537 // no support for multi-page unbreakableBlocks 16538 var fragment = unbreakableContext.pages[0]; 16539 fragment.xOffset = forcedX; 16540 fragment.yOffset = forcedY; 16541 16542 //TODO: vectors can influence height in some situations 16543 if (nbPages > 1) { 16544 // on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height 16545 if (forcedX !== undefined || forcedY !== undefined) { 16546 fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom; 16547 } else { 16548 fragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom; 16549 for (var i = 0, l = this.repeatables.length; i < l; i++) { 16550 fragment.height -= this.repeatables[i].height; 16551 } 16552 } 16553 } else { 16554 fragment.height = unbreakableContext.y; 16555 } 16556 16557 if (forcedX !== undefined || forcedY !== undefined) { 16558 this.writer.addFragment(fragment, true, true, true); 16559 } else { 16560 this.addFragment(fragment); 16561 } 16562 } 16563 } 16564}; 16565 16566PageElementWriter.prototype.currentBlockToRepeatable = function () { 16567 var unbreakableContext = this.writer.context; 16568 var rep = {items: []}; 16569 16570 unbreakableContext.pages[0].items.forEach(function (item) { 16571 rep.items.push(item); 16572 }); 16573 16574 rep.xOffset = this.originalX; 16575 16576 //TODO: vectors can influence height in some situations 16577 rep.height = unbreakableContext.y; 16578 16579 return rep; 16580}; 16581 16582PageElementWriter.prototype.pushToRepeatables = function (rep) { 16583 this.repeatables.push(rep); 16584}; 16585 16586PageElementWriter.prototype.popFromRepeatables = function () { 16587 this.repeatables.pop(); 16588}; 16589 16590PageElementWriter.prototype.context = function () { 16591 return this.writer.context; 16592}; 16593 16594module.exports = PageElementWriter; 16595 16596 16597/***/ }), 16598/* 136 */ 16599/***/ (function(module, exports, __webpack_require__) { 16600 16601"use strict"; 16602 16603 16604var Line = __webpack_require__(82); 16605var isNumber = __webpack_require__(0).isNumber; 16606var pack = __webpack_require__(0).pack; 16607var offsetVector = __webpack_require__(0).offsetVector; 16608var DocumentContext = __webpack_require__(81); 16609 16610/** 16611 * Creates an instance of ElementWriter - a line/vector writer, which adds 16612 * elements to current page and sets their positions based on the context 16613 */ 16614function ElementWriter(context, tracker) { 16615 this.context = context; 16616 this.contextStack = []; 16617 this.tracker = tracker; 16618} 16619 16620function addPageItem(page, item, index) { 16621 if (index === null || index === undefined || index < 0 || index > page.items.length) { 16622 page.items.push(item); 16623 } else { 16624 page.items.splice(index, 0, item); 16625 } 16626} 16627 16628ElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) { 16629 var height = line.getHeight(); 16630 var context = this.context; 16631 var page = context.getCurrentPage(), 16632 position = this.getCurrentPositionOnPage(); 16633 16634 if (context.availableHeight < height || !page) { 16635 return false; 16636 } 16637 16638 line.x = context.x + (line.x || 0); 16639 line.y = context.y + (line.y || 0); 16640 16641 this.alignLine(line); 16642 16643 addPageItem(page, { 16644 type: 'line', 16645 item: line 16646 }, index); 16647 this.tracker.emit('lineAdded', line); 16648 16649 if (!dontUpdateContextPosition) { 16650 context.moveDown(height); 16651 } 16652 16653 return position; 16654}; 16655 16656ElementWriter.prototype.alignLine = function (line) { 16657 var width = this.context.availableWidth; 16658 var lineWidth = line.getWidth(); 16659 16660 var alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment; 16661 16662 var offset = 0; 16663 switch (alignment) { 16664 case 'right': 16665 offset = width - lineWidth; 16666 break; 16667 case 'center': 16668 offset = (width - lineWidth) / 2; 16669 break; 16670 } 16671 16672 if (offset) { 16673 line.x = (line.x || 0) + offset; 16674 } 16675 16676 if (alignment === 'justify' && 16677 !line.newLineForced && 16678 !line.lastLineInParagraph && 16679 line.inlines.length > 1) { 16680 var additionalSpacing = (width - lineWidth) / (line.inlines.length - 1); 16681 16682 for (var i = 1, l = line.inlines.length; i < l; i++) { 16683 offset = i * additionalSpacing; 16684 16685 line.inlines[i].x += offset; 16686 line.inlines[i].justifyShift = additionalSpacing; 16687 } 16688 } 16689}; 16690 16691ElementWriter.prototype.addImage = function (image, index) { 16692 var context = this.context; 16693 var page = context.getCurrentPage(), 16694 position = this.getCurrentPositionOnPage(); 16695 16696 if (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) { 16697 return false;
16698 } 16699 16700 if (image._x === undefined) { 16701 image._x = image.x || 0; 16702 } 16703 16704 image.x = context.x + image._x; 16705 image.y = context.y; 16706 16707 this.alignImage(image); 16708 16709 addPageItem(page, { 16710 type: 'image', 16711 item: image 16712 }, index); 16713 16714 context.moveDown(image._height); 16715 16716 return position; 16717}; 16718 16719ElementWriter.prototype.addQr = function (qr, index) { 16720 var context = this.context; 16721 var page = context.getCurrentPage(), 16722 position = this.getCurrentPositionOnPage(); 16723 16724 if (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) { 16725 return false; 16726 } 16727 16728 if (qr._x === undefined) { 16729 qr._x = qr.x || 0; 16730 } 16731 16732 qr.x = context.x + qr._x; 16733 qr.y = context.y; 16734 16735 this.alignImage(qr); 16736 16737 for (var i = 0, l = qr._canvas.length; i < l; i++) { 16738 var vector = qr._canvas[i]; 16739 vector.x += qr.x; 16740 vector.y += qr.y; 16741 this.addVector(vector, true, true, index); 16742 } 16743 16744 context.moveDown(qr._height); 16745 16746 return position; 16747}; 16748 16749ElementWriter.prototype.alignImage = function (image) { 16750 var width = this.context.availableWidth; 16751 var imageWidth = image._minWidth; 16752 var offset = 0; 16753 switch (image._alignment) { 16754 case 'right': 16755 offset = width - imageWidth; 16756 break; 16757 case 'center': 16758 offset = (width - imageWidth) / 2; 16759 break; 16760 } 16761 16762 if (offset) { 16763 image.x = (image.x || 0) + offset; 16764 } 16765}; 16766 16767ElementWriter.prototype.alignCanvas = function (node) { 16768 var width = this.context.availableWidth; 16769 var canvasWidth = node._minWidth; 16770 var offset = 0; 16771 switch (node._alignment) { 16772 case 'right': 16773 offset = width - canvasWidth; 16774 break; 16775 case 'center': 16776 offset = (width - canvasWidth) / 2; 16777 break; 16778 } 16779 if (offset) { 16780 node.canvas.forEach(function (vector) { 16781 offsetVector(vector, offset, 0); 16782 }); 16783 } 16784}; 16785 16786ElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) { 16787 var context = this.context; 16788 var page = context.getCurrentPage(), 16789 position = this.getCurrentPositionOnPage(); 16790 16791 if (page) { 16792 offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y); 16793 addPageItem(page, { 16794 type: 'vector', 16795 item: vector 16796 }, index); 16797 return position; 16798 } 16799}; 16800 16801ElementWriter.prototype.beginClip = function (width, height) { 16802 var ctx = this.context; 16803 var page = ctx.getCurrentPage(); 16804 page.items.push({ 16805 type: 'beginClip', 16806 item: {x: ctx.x, y: ctx.y, width: width, height: height} 16807 }); 16808 return true; 16809}; 16810 16811ElementWriter.prototype.endClip = function () { 16812 var ctx = this.context; 16813 var page = ctx.getCurrentPage(); 16814 page.items.push({ 16815 type: 'endClip' 16816 }); 16817 return true; 16818}; 16819 16820function cloneLine(line) { 16821 var result = new Line(line.maxWidth); 16822 16823 for (var key in line) { 16824 if (line.hasOwnProperty(key)) { 16825 result[key] = line[key]; 16826 } 16827 } 16828 16829 return result; 16830} 16831 16832ElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) { 16833 var ctx = this.context; 16834 var page = ctx.getCurrentPage(); 16835 16836 if (!useBlockXOffset && block.height > ctx.availableHeight) { 16837 return false; 16838 } 16839 16840 block.items.forEach(function (item) { 16841 switch (item.type) { 16842 case 'line': 16843 var l = cloneLine(item.item); 16844 16845 l.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x); 16846 l.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y); 16847 16848 page.items.push({ 16849 type: 'line', 16850 item: l 16851 }); 16852 break; 16853 16854 case 'vector': 16855 var v = pack(item.item); 16856 16857 offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y); 16858 page.items.push({ 16859 type: 'vector', 16860 item: v 16861 }); 16862 break; 16863 16864 case 'image': 16865 var img = pack(item.item); 16866 16867 img.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x); 16868 img.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y); 16869 16870 page.items.push({ 16871 type: 'image', 16872 item: img 16873 }); 16874 break; 16875 } 16876 }); 16877 16878 if (!dontUpdateContextPosition) { 16879 ctx.moveDown(block.height); 16880 } 16881 16882 return true; 16883}; 16884 16885/** 16886 * Pushes the provided context onto the stack or creates a new one 16887 * 16888 * pushContext(context) - pushes the provided context and makes it current 16889 * pushContext(width, height) - creates and pushes a new context with the specified width and height 16890 * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height) 16891 */ 16892ElementWriter.prototype.pushContext = function (contextOrWidth, height) { 16893 if (contextOrWidth === undefined) { 16894 height = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom; 16895 contextOrWidth = this.context.availableWidth; 16896 } 16897 16898 if (isNumber(contextOrWidth)) { 16899 contextOrWidth = new DocumentContext({width: contextOrWidth, height: height}, {left: 0, right: 0, top: 0, bottom: 0}); 16900 } 16901 16902 this.contextStack.push(this.context); 16903 this.context = contextOrWidth; 16904}; 16905 16906ElementWriter.prototype.popContext = function () { 16907 this.context = this.contextStack.pop(); 16908}; 16909 16910ElementWriter.prototype.getCurrentPositionOnPage = function () { 16911 return (this.contextStack[0] || this.context).getCurrentPosition(); 16912}; 16913 16914 16915module.exports = ElementWriter; 16916 16917 16918/***/ }), 16919/* 137 */ 16920/***/ (function(module, exports, __webpack_require__) { 16921 16922"use strict"; 16923 16924 16925var ColumnCalculator = __webpack_require__(44); 16926var isFunction = __webpack_require__(0).isFunction; 16927 16928function TableProcessor(tableNode) { 16929 this.tableNode = tableNode; 16930} 16931 16932TableProcessor.prototype.beginTable = function (writer) { 16933 var tableNode; 16934 var availableWidth; 16935 var self = this; 16936 16937 tableNode = this.tableNode; 16938 this.offsets = tableNode._offsets; 16939 this.layout = tableNode._layout; 16940 16941 availableWidth = writer.context().availableWidth - this.offsets.total; 16942 ColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth); 16943 16944 this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth(); 16945 this.rowSpanData = prepareRowSpanData(); 16946 this.cleanUpRepeatables = false;
16947 16948 this.headerRows = tableNode.table.headerRows || 0; 16949 this.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0); 16950 this.dontBreakRows = tableNode.table.dontBreakRows || false; 16951 16952 if (this.rowsWithoutPageBreak) { 16953 writer.beginUnbreakableBlock(); 16954 } 16955 16956 // update the border properties of all cells before drawing any lines 16957 prepareCellBorders(this.tableNode.table.body); 16958 16959 this.drawHorizontalLine(0, writer); 16960 16961 function getTableInnerContentWidth() { 16962 var width = 0; 16963 16964 tableNode.table.widths.forEach(function (w) { 16965 width += w._calcWidth; 16966 }); 16967 16968 return width; 16969 } 16970 16971 function prepareRowSpanData() { 16972 var rsd = []; 16973 var x = 0; 16974 var lastWidth = 0; 16975 16976 rsd.push({left: 0, rowSpan: 0}); 16977 16978 for (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) { 16979 var paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode); 16980 var lBorder = self.layout.vLineWidth(i, self.tableNode); 16981 lastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth; 16982 rsd[rsd.length - 1].width = lastWidth; 16983 x += lastWidth; 16984 rsd.push({left: x, rowSpan: 0, width: 0}); 16985 } 16986 16987 return rsd; 16988 } 16989 16990 // Iterate through all cells. If the current cell is the start of a 16991 // rowSpan/colSpan, update the border property of the cells on its 16992 // bottom/right accordingly. This is needed since each iteration of the 16993 // line-drawing loops draws lines for a single cell, not for an entire 16994 // rowSpan/colSpan. 16995 function prepareCellBorders(body) { 16996 for (var rowIndex = 0; rowIndex < body.length; rowIndex++) { 16997 var row = body[rowIndex]; 16998 16999 for (var colIndex = 0; colIndex < row.length; colIndex++) { 17000 var cell = row[colIndex]; 17001 17002 if (cell.border) { 17003 var rowSpan = cell.rowSpan || 1; 17004 var colSpan = cell.colSpan || 1; 17005 17006 for (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) { 17007 // set left border 17008 if (cell.border[0] !== undefined && rowOffset > 0) { 17009 setBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]); 17010 } 17011 17012 // set right border 17013 if (cell.border[2] !== undefined) { 17014 setBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]); 17015 } 17016 } 17017 17018 for (var colOffset = 0; colOffset < colSpan; colOffset++) { 17019 // set top border 17020 if (cell.border[1] !== undefined && colOffset > 0) { 17021 setBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]); 17022 } 17023 17024 // set bottom border 17025 if (cell.border[3] !== undefined) { 17026 setBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]); 17027 } 17028 } 17029 } 17030 } 17031 } 17032 17033 // helper function to set the border for a given cell 17034 function setBorder(rowIndex, colIndex, borderIndex, borderValue) { 17035 var cell = body[rowIndex][colIndex]; 17036 cell.border = cell.border || {}; 17037 cell.border[borderIndex] = borderValue; 17038 } 17039 } 17040}; 17041 17042TableProcessor.prototype.onRowBreak = function (rowIndex, writer) { 17043 var self = this; 17044 return function () { 17045 var offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0); 17046 writer.context().availableHeight -= self.reservedAtBottom; 17047 writer.context().moveDown(offset); 17048 }; 17049}; 17050 17051TableProcessor.prototype.beginRow = function (rowIndex, writer) { 17052 this.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode); 17053 this.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode); 17054 this.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode); 17055 this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode); 17056 17057 this.rowCallback = this.onRowBreak(rowIndex, writer); 17058 writer.tracker.startTracking('pageChanged', this.rowCallback); 17059 if (this.dontBreakRows) { 17060 writer.beginUnbreakableBlock(); 17061 } 17062 this.rowTopY = writer.context().y; 17063 this.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom; 17064 17065 writer.context().availableHeight -= this.reservedAtBottom; 17066 17067 writer.context().moveDown(this.rowPaddingTop); 17068}; 17069 17070TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) { 17071 var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode); 17072 if (lineWidth) { 17073 var offset = lineWidth / 2; 17074 var currentLine = null; 17075 var body = this.tableNode.table.body; 17076 17077 for (var i = 0, l = this.rowSpanData.length; i < l; i++) { 17078 var data = this.rowSpanData[i]; 17079 var shouldDrawLine = !data.rowSpan; 17080 17081 // draw only if the current cell requires a top border or the cell in the 17082 // row above requires a bottom border 17083 if (shouldDrawLine && i < l - 1) { 17084 var topBorder = false, bottomBorder = false;
17085 17086 // the current cell 17087 if (lineIndex < body.length) { 17088 var cell = body[lineIndex][i]; 17089 topBorder = cell.border ? cell.border[1] : this.layout.defaultBorder; 17090 } 17091 17092 // the cell in the row above 17093 if (lineIndex > 0) { 17094 var cellAbove = body[lineIndex - 1][i]; 17095 bottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder; 17096 } 17097 17098 shouldDrawLine = topBorder || bottomBorder; 17099 } 17100 17101 if (!currentLine && shouldDrawLine) { 17102 currentLine = {left: data.left, width: 0}; 17103 } 17104 17105 if (shouldDrawLine) { 17106 currentLine.width += (data.width || 0); 17107 } 17108 17109 var y = (overrideY || 0) + offset; 17110 17111 if (!shouldDrawLine || i === l - 1) { 17112 if (currentLine && currentLine.width) { 17113 writer.addVector({ 17114 type: 'line', 17115 x1: currentLine.left, 17116 x2: currentLine.left + currentLine.width, 17117 y1: y, 17118 y2: y, 17119 lineWidth: lineWidth, 17120 lineColor: isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode) : this.layout.hLineColor 17121 }, false, overrideY); 17122 currentLine = null; 17123 } 17124 } 17125 } 17126 17127 writer.context().moveDown(lineWidth); 17128 } 17129}; 17130 17131TableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineIndex, writer) { 17132 var width = this.layout.vLineWidth(vLineIndex, this.tableNode); 17133 if (width === 0) { 17134 return; 17135 } 17136 writer.addVector({ 17137 type: 'line', 17138 x1: x + width / 2, 17139 x2: x + width / 2, 17140 y1: y0, 17141 y2: y1, 17142 lineWidth: width, 17143 lineColor: isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineIndex, this.tableNode) : this.layout.vLineColor 17144 }, false, true); 17145}; 17146 17147TableProcessor.prototype.endTable = function (writer) { 17148 if (this.cleanUpRepeatables) { 17149 writer.popFromRepeatables(); 17150 this.headerRepeatableHeight = null; 17151 } 17152}; 17153 17154TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) { 17155 var l, i; 17156 var self = this; 17157 writer.tracker.stopTracking('pageChanged', this.rowCallback); 17158 writer.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode)); 17159 writer.context().availableHeight += this.reservedAtBottom; 17160 17161 var endingPage = writer.context().page; 17162 var endingY = writer.context().y; 17163 17164 var xs = getLineXs(); 17165 17166 var ys = []; 17167 17168 var hasBreaks = pageBreaks && pageBreaks.length > 0; 17169 var body = this.tableNode.table.body; 17170 17171 ys.push({ 17172 y0: this.rowTopY, 17173 page: hasBreaks ? pageBreaks[0].prevPage : endingPage 17174 }); 17175 17176 if (hasBreaks) { 17177 for (i = 0, l = pageBreaks.length; i < l; i++) { 17178 var pageBreak = pageBreaks[i]; 17179 ys[ys.length - 1].y1 = pageBreak.prevY; 17180 17181 ys.push({y0: pageBreak.y, page: pageBreak.prevPage + 1}); 17182 17183 if (this.headerRepeatableHeight) { 17184 ys[ys.length - 1].y0 += this.headerRepeatableHeight; 17185 } 17186 } 17187 } 17188 17189 ys[ys.length - 1].y1 = endingY; 17190 17191 var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop); 17192 for (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) { 17193 var willBreak = yi < ys.length - 1; 17194 var rowBreakWithoutHeader = (yi > 0 && !this.headerRows); 17195 var hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth; 17196 var y1 = ys[yi].y0; 17197 var y2 = ys[yi].y1; 17198 17199 if (willBreak) { 17200 y2 = y2 + this.rowPaddingBottom; 17201 } 17202 17203 if (writer.context().page != ys[yi].page) { 17204 writer.context().page = ys[yi].page; 17205 17206 //TODO: buggy, availableHeight should be updated on every pageChanged event 17207 // TableProcessor should be pageChanged listener, instead of processRow 17208 this.reservedAtBottom = 0; 17209 } 17210 17211 for (i = 0, l = xs.length; i < l; i++) { 17212 var leftBorder = false, rightBorder = false; 17213 var colIndex = xs[i].index; 17214 17215 // the current cell 17216 if (colIndex < body[rowIndex].length) { 17217 var cell = body[rowIndex][colIndex]; 17218 leftBorder = cell.border ? cell.border[0] : this.layout.defaultBorder; 17219 } 17220 17221 // the cell from before column 17222 if (colIndex > 0) { 17223 var cell = body[rowIndex][colIndex - 1]; 17224 rightBorder = cell.border ? cell.border[2] : this.layout.defaultBorder; 17225 } 17226 17227 if (leftBorder || rightBorder) { 17228 this.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer); 17229 } 17230 17231 if (i < l - 1) { 17232 var fillColor = body[rowIndex][colIndex].fillColor; 17233 if (!fillColor) { 17234 fillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor; 17235 } 17236 if (fillColor) { 17237 var wBorder = (leftBorder || rightBorder) ? this.layout.vLineWidth(colIndex, this.tableNode) : 0; 17238 var xf = xs[i].x + wBorder; 17239 var yf = this.dontBreakRows ? y1 : y1 - hzLineOffset; 17240 writer.addVector({ 17241 type: 'rect', 17242 x: xf, 17243 y: yf, 17244 w: xs[i + 1].x - xf, 17245 h: y2 + this.bottomLineWidth - yf, 17246 lineWidth: 0, 17247 color: fillColor 17248 }
17248, false, true, writer.context().hasBackground ? 1 : 0); 17249 } 17250 } 17251 } 17252 17253 if (willBreak && this.layout.hLineWhenBroken !== false) { 17254 this.drawHorizontalLine(rowIndex + 1, writer, y2); 17255 } 17256 if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) { 17257 this.drawHorizontalLine(rowIndex, writer, y1); 17258 } 17259 } 17260 17261 writer.context().page = endingPage; 17262 writer.context().y = endingY; 17263 17264 var row = this.tableNode.table.body[rowIndex]; 17265 for (i = 0, l = row.length; i < l; i++) { 17266 if (row[i].rowSpan) { 17267 this.rowSpanData[i].rowSpan = row[i].rowSpan; 17268 17269 // fix colSpans 17270 if (row[i].colSpan && row[i].colSpan > 1) { 17271 for (var j = 1; j < row[i].rowSpan; j++) { 17272 this.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan; 17273 } 17274 } 17275 } 17276 17277 if (this.rowSpanData[i].rowSpan > 0) { 17278 this.rowSpanData[i].rowSpan--; 17279 } 17280 } 17281 17282 this.drawHorizontalLine(rowIndex + 1, writer); 17283 17284 if (this.headerRows && rowIndex === this.headerRows - 1) { 17285 this.headerRepeatable = writer.currentBlockToRepeatable(); 17286 } 17287 17288 if (this.dontBreakRows) { 17289 writer.tracker.auto('pageChanged', 17290 function () { 17291 if (!self.headerRows && self.layout.hLineWhenBroken !== false) { 17292 self.drawHorizontalLine(rowIndex, writer); 17293 } 17294 }, 17295 function () { 17296 writer.commitUnbreakableBlock(); 17297 } 17298 ); 17299 } 17300 17301 if (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) { 17302 this.headerRepeatableHeight = this.headerRepeatable.height; 17303 writer.commitUnbreakableBlock(); 17304 writer.pushToRepeatables(this.headerRepeatable); 17305 this.cleanUpRepeatables = true; 17306 this.headerRepeatable = null; 17307 } 17308 17309 function getLineXs() { 17310 var result = []; 17311 var cols = 0; 17312 17313 for (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) { 17314 if (!cols) { 17315 result.push({x: self.rowSpanData[i].left, index: i}); 17316 17317 var item = self.tableNode.table.body[rowIndex][i]; 17318 cols = (item._colSpan || item.colSpan || 0); 17319 } 17320 if (cols > 0) { 17321 cols--; 17322 } 17323 } 17324 17325 result.push({x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1}); 17326 17327 return result; 17328 } 17329}; 17330 17331module.exports = TableProcessor; 17332 17333 17334/***/ }), 17335/* 138 */ 17336/***/ (function(module, exports, __webpack_require__) { 17337 17338/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 17339 17340/* 17341PDFDocument - represents an entire PDF document 17342By Devon Govett 17343 */ 17344 17345(function() { 17346 var PDFDocument, PDFObject, PDFPage, PDFReference, fs, stream, 17347 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 17348 hasProp = {}.hasOwnProperty; 17349 17350 stream = __webpack_require__(15); 17351 17352 fs = __webpack_require__(8); 17353 17354 PDFObject = __webpack_require__(26); 17355 17356 PDFReference = __webpack_require__(87); 17357 17358 PDFPage = __webpack_require__(161); 17359 17360 PDFDocument = (function(superClass) { 17361 var mixin; 17362 17363 extend(PDFDocument, superClass); 17364 17365 function PDFDocument(options1) { 17366 var key, ref1, ref2, val; 17367 this.options = options1 != null ? options1 : {}; 17368 PDFDocument.__super__.constructor.apply(this, arguments); 17369 this.version = 1.3; 17370 this.compress = (ref1 = this.options.compress) != null ? ref1 : true; 17371 this._pageBuffer = []; 17372 this._pageBufferStart = 0; 17373 this._offsets = []; 17374 this._waiting = 0; 17375 this._ended = false; 17376 this._offset = 0; 17377 this._root = this.ref({ 17378 Type: 'Catalog', 17379 Pages: this.ref({ 17380 Type: 'Pages', 17381 Count: 0, 17382 Kids: [] 17383 }) 17384 }); 17385 this.page = null; 17386 this.initColor(); 17387 this.initVector(); 17388 this.initFonts(); 17389 this.initText(); 17390 this.initImages(); 17391 this.info = { 17392 Producer: 'PDFKit', 17393 Creator: 'PDFKit', 17394 CreationDate: new Date() 17395 }; 17396 if (this.options.info) { 17397 ref2 = this.options.info; 17398 for (key in ref2) { 17399 val = ref2[key]; 17400 this.info[key] = val; 17401 } 17402 } 17403 this._write("%PDF-" + this.version); 17404 this._write("%\xFF\xFF\xFF\xFF"); 17405 if (this.options.autoFirstPage !== false) { 17406 this.addPage(); 17407 } 17408 } 17409
17410 mixin = function(methods) { 17411 var method, name, results; 17412 results = []; 17413 for (name in methods) { 17414 method = methods[name]; 17415 results.push(PDFDocument.prototype[name] = method); 17416 } 17417 return results; 17418 }; 17419 17420 mixin(__webpack_require__(162)); 17421 17422 mixin(__webpack_require__(164)); 17423 17424 mixin(__webpack_require__(166)); 17425 17426 mixin(__webpack_require__(295)); 17427 17428 mixin(__webpack_require__(297)); 17429 17430 mixin(__webpack_require__(302)); 17431 17432 PDFDocument.prototype.addPage = function(options) { 17433 var pages; 17434 if (options == null) { 17435 options = this.options; 17436 } 17437 if (!this.options.bufferPages) { 17438 this.flushPages(); 17439 } 17440 this.page = new PDFPage(this, options); 17441 this._pageBuffer.push(this.page); 17442 pages = this._root.data.Pages.data; 17443 pages.Kids.push(this.page.dictionary); 17444 pages.Count++; 17445 this.x = this.page.margins.left; 17446 this.y = this.page.margins.top; 17447 this._ctm = [1, 0, 0, 1, 0, 0]; 17448 this.transform(1, 0, 0, -1, 0, this.page.height); 17449 this.emit('pageAdded'); 17450 return this; 17451 }; 17452 17453 PDFDocument.prototype.bufferedPageRange = function() { 17454 return { 17455 start: this._pageBufferStart, 17456 count: this._pageBuffer.length 17457 }; 17458 }; 17459 17460 PDFDocument.prototype.switchToPage = function(n) { 17461 var page; 17462 if (!(page = this._pageBuffer[n - this._pageBufferStart])) { 17463 throw new Error("switchToPage(" + n + ") out of bounds, current buffer covers pages " + this._pageBufferStart + " to " + (this._pageBufferStart + this._pageBuffer.length - 1)); 17464 } 17465 return this.page = page; 17466 }; 17467 17468 PDFDocument.prototype.flushPages = function() { 17469 var i, len, page, pages; 17470 pages = this._pageBuffer; 17471 this._pageBuffer = []; 17472 this._pageBufferStart += pages.length; 17473 for (i = 0, len = pages.length; i < len; i++) { 17474 page = pages[i]; 17475 page.end(); 17476 } 17477 }; 17478 17479 PDFDocument.prototype.ref = function(data) { 17480 var ref; 17481 ref = new PDFReference(this, this._offsets.length + 1, data); 17482 this._offsets.push(null); 17483 this._waiting++; 17484 return ref; 17485 }; 17486 17487 PDFDocument.prototype._read = function() {}; 17488 17489 PDFDocument.prototype._write = function(data) { 17490 if (!Buffer.isBuffer(data)) { 17491 data = new Buffer(data + '\n', 'binary'); 17492 } 17493 this.push(data); 17494 return this._offset += data.length; 17495 }; 17496 17497 PDFDocument.prototype.addContent = function(data) { 17498 this.page.write(data); 17499 return this; 17500 }; 17501 17502 PDFDocument.prototype._refEnd = function(ref) { 17503 this._offsets[ref.id - 1] = ref.offset; 17504 if (--this._waiting === 0 && this._ended) { 17505 this._finalize(); 17506 return this._ended = false; 17507 } 17508 }; 17509 17510 PDFDocument.prototype.write = function(filename, fn) { 17511 var err; 17512 err = new Error('PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.'); 17513 console.warn(err.stack); 17514 this.pipe(fs.createWriteStream(filename)); 17515 this.end(); 17516 return this.once('end', fn); 17517 }; 17518 17519 PDFDocument.prototype.output = function(fn) { 17520 throw new Error('PDFDocument#output is deprecated, and has been removed from PDFKit. Please pipe the document into a Node stream.'); 17521 }; 17522 17523 PDFDocument.prototype.end = function() { 17524 var font, key, name, ref1, ref2, val; 17525 this.flushPages(); 17526 this._info = this.ref(); 17527 ref1 = this.info; 17528 for (key in ref1) { 17529 val = ref1[key]; 17530 if (typeof val === 'string') { 17531 val = new String(val); 17532 } 17533 this._info.data[key] = val; 17534 } 17535 this._info.end(); 17536 ref2 = this._fontFamilies; 17537 for (name in ref2) { 17538 font = ref2[name]; 17539 font.finalize(); 17540 } 17541 this._root.end(); 17542 this._root.data.Pages.end(); 17543 if (this._waiting === 0) { 17544 return this._finalize(); 17545 } else { 17546 return this._ended = true; 17547 } 17548 }; 17549 17550 PDFDocument.prototype._finalize = function(fn) { 17551 var i, len, offset, ref1, xRefOffset; 17552 xRefOffset = this._offset; 17553 this._write("xref"); 17554 this._write("0 " + (this._offsets.length + 1)); 17555 this._write("0000000000 65535 f "); 17556 ref1 = this._offsets; 17557 for (i = 0, len = ref1.length; i < len; i++) { 17558 offset = ref1[i]; 17559 offset = ('0000000000' + offset).slice(-10); 17560 this._write(offset + ' 00000 n '); 17561 } 17562 this._write('trailer'); 17563 this._write(PDFObject.convert({ 17564 Size: this._offsets.length + 1, 17565 Root: this._root, 17566 Info: this._info 17567 })); 17568 this._write('startxref'); 17569 this._write("" + xRefOffset); 17570 this._write('%%EOF'); 17571 return this.push(null); 17572 }; 17573 17574 PDFDocument.prototype.toString = function() { 17575 return "[object PDFDocument]"; 17576 }; 17577 17578 return PDFDocument; 17579 17580 })(stream.Readable); 17581 17582 module.exports = PDFDocument; 17583 17584}).call(this); 17585 17586/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 17587
vendor: 4,743 bytes, lines 17588-17765
17588/***/ }), 17589/* 139 */ 17590/***/ (function(module, exports) { 17591 17592/* (ignored) */ 17593 17594/***/ }), 17595/* 140 */ 17596/***/ (function(module, exports, __webpack_require__) { 17597 17598"use strict"; 17599 17600 17601function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 17602 17603var Buffer = __webpack_require__(33).Buffer; 17604var util = __webpack_require__(141); 17605 17606function copyBuffer(src, target, offset) { 17607 src.copy(target, offset); 17608} 17609 17610module.exports = function () { 17611 function BufferList() { 17612 _classCallCheck(this, BufferList); 17613 17614 this.head = null; 17615 this.tail = null; 17616 this.length = 0; 17617 } 17618 17619 BufferList.prototype.push = function push(v) { 17620 var entry = { data: v, next: null }; 17621 if (this.length > 0) this.tail.next = entry;else this.head = entry; 17622 this.tail = entry; 17623 ++this.length; 17624 }; 17625 17626 BufferList.prototype.unshift = function unshift(v) { 17627 var entry = { data: v, next: this.head }; 17628 if (this.length === 0) this.tail = entry; 17629 this.head = entry; 17630 ++this.length; 17631 }; 17632 17633 BufferList.prototype.shift = function shift() { 17634 if (this.length === 0) return; 17635 var ret = this.head.data; 17636 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; 17637 --this.length; 17638 return ret; 17639 }; 17640 17641 BufferList.prototype.clear = function clear() { 17642 this.head = this.tail = null; 17643 this.length = 0; 17644 }; 17645 17646 BufferList.prototype.join = function join(s) { 17647 if (this.length === 0) return ''; 17648 var p = this.head; 17649 var ret = '' + p.data; 17650 while (p = p.next) { 17651 ret += s + p.data; 17652 }return ret; 17653 }; 17654 17655 BufferList.prototype.concat = function concat(n) { 17656 if (this.length === 0) return Buffer.alloc(0); 17657 if (this.length === 1) return this.head.data; 17658 var ret = Buffer.allocUnsafe(n >>> 0); 17659 var p = this.head; 17660 var i = 0; 17661 while (p) { 17662 copyBuffer(p.data, ret, i); 17663 i += p.data.length; 17664 p = p.next; 17665 } 17666 return ret; 17667 }; 17668 17669 return BufferList; 17670}(); 17671 17672if (util && util.inspect && util.inspect.custom) { 17673 module.exports.prototype[util.inspect.custom] = function () { 17674 var obj = util.inspect({ length: this.length }); 17675 return this.constructor.name + ' ' + obj; 17676 }; 17677} 17678 17679/***/ }), 17680/* 141 */ 17681/***/ (function(module, exports) { 17682 17683/* (ignored) */ 17684 17685/***/ }), 17686/* 142 */ 17687/***/ (function(module, exports, __webpack_require__) { 17688 17689/* WEBPACK VAR INJECTION */(function(global) {var apply = Function.prototype.apply; 17690 17691// DOM APIs, for completeness 17692 17693exports.setTimeout = function() { 17694 return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); 17695}; 17696exports.setInterval = function() { 17697 return new Timeout(apply.call(setInterval, window, arguments), clearInterval); 17698}; 17699exports.clearTimeout = 17700exports.clearInterval = function(timeout) { 17701 if (timeout) { 17702 timeout.close(); 17703 } 17704}; 17705 17706function Timeout(id, clearFn) { 17707 this._id = id; 17708 this._clearFn = clearFn; 17709} 17710Timeout.prototype.unref = Timeout.prototype.ref = function() {}; 17711Timeout.prototype.close = function() { 17712 this._clearFn.call(window, this._id); 17713}; 17714 17715// Does not start the time, just sets up the members needed. 17716exports.enroll = function(item, msecs) { 17717 clearTimeout(item._idleTimeoutId); 17718 item._idleTimeout = msecs; 17719}; 17720 17721exports.unenroll = function(item) { 17722 clearTimeout(item._idleTimeoutId); 17723 item._idleTimeout = -1; 17724}; 17725 17726exports._unrefActive = exports.active = function(item) { 17727 clearTimeout(item._idleTimeoutId); 17728 17729 var msecs = item._idleTimeout; 17730 if (msecs >= 0) { 17731 item._idleTimeoutId = setTimeout(function onTimeout() { 17732 if (item._onTimeout) 17733 item._onTimeout(); 17734 }, msecs); 17735 } 17736}; 17737 17738// setimmediate attaches itself to the global object 17739__webpack_require__(143); 17740// On some exotic environments, it's not clear which object `setimmeidate` was 17741// able to install onto. Search each possibility in the same order as the 17742// `setimmediate` library. 17743exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) || 17744 (typeof global !== "undefined" && global.setImmediate) || 17745 (this && this.setImmediate); 17746exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || 17747 (typeof global !== "undefined" && global.clearImmediate) || 17748 (this && this.clearImmediate); 17749 17750/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) 17751 17752/***/ }), 17753/* 143 */ 17754/***/ (function(module, exports, __webpack_require__) { 17755 17756/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { 17757 "use strict"; 17758 17759 if (global.setImmediate) { 17760 return; 17761 } 17762 17763 var nextHandle = 1; // Spec says greater than zero 17764 var tasksByHandle = {}; 17765 var currentlyRunningATask = false;
vendor: 5,701 bytes, lines 17766-17926
17766 var doc = global.document; 17767 var registerImmediate; 17768 17769 function setImmediate(callback) { 17770 // Callback can either be a function or a string 17771 if (typeof callback !== "function") { 17772 callback = new Function("" + callback); 17773 } 17774 // Copy function arguments 17775 var args = new Array(arguments.length - 1); 17776 for (var i = 0; i < args.length; i++) { 17777 args[i] = arguments[i + 1]; 17778 } 17779 // Store and register the task 17780 var task = { callback: callback, args: args }; 17781 tasksByHandle[nextHandle] = task; 17782 registerImmediate(nextHandle); 17783 return nextHandle++; 17784 } 17785 17786 function clearImmediate(handle) { 17787 delete tasksByHandle[handle]; 17788 } 17789 17790 function run(task) { 17791 var callback = task.callback; 17792 var args = task.args; 17793 switch (args.length) { 17794 case 0: 17795 callback(); 17796 break; 17797 case 1: 17798 callback(args[0]); 17799 break; 17800 case 2: 17801 callback(args[0], args[1]); 17802 break; 17803 case 3: 17804 callback(args[0], args[1], args[2]); 17805 break; 17806 default: 17807 callback.apply(undefined, args); 17808 break; 17809 } 17810 } 17811 17812 function runIfPresent(handle) { 17813 // From the spec: "Wait until any invocations of this algorithm started before this one have completed." 17814 // So if we're currently running a task, we'll need to delay this invocation. 17815 if (currentlyRunningATask) { 17816 // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a 17817 // "too much recursion" error. 17818 setTimeout(runIfPresent, 0, handle); 17819 } else { 17820 var task = tasksByHandle[handle]; 17821 if (task) { 17822 currentlyRunningATask = true; 17823 try { 17824 run(task); 17825 } finally { 17826 clearImmediate(handle); 17827 currentlyRunningATask = false; 17828 } 17829 } 17830 } 17831 } 17832 17833 function installNextTickImplementation() { 17834 registerImmediate = function(handle) { 17835 process.nextTick(function () { runIfPresent(handle); }); 17836 }; 17837 } 17838 17839 function canUsePostMessage() { 17840 // The test against `importScripts` prevents this implementation from being installed inside a web worker, 17841 // where `global.postMessage` means something completely different and can't be used for this purpose. 17842 if (global.postMessage && !global.importScripts) { 17843 var postMessageIsAsynchronous = true; 17844 var oldOnMessage = global.onmessage; 17845 global.onmessage = function() { 17846 postMessageIsAsynchronous = false; 17847 }; 17848 global.postMessage("", "*"); 17849 global.onmessage = oldOnMessage; 17850 return postMessageIsAsynchronous; 17851 } 17852 } 17853 17854 function installPostMessageImplementation() { 17855 // Installs an event handler on `global` for the `message` event: see 17856 // * https://developer.mozilla.org/en/DOM/window.postMessage 17857 // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages 17858 17859 var messagePrefix = "setImmediate$" + Math.random() + "$"; 17860 var onGlobalMessage = function(event) { 17861 if (event.source === global && 17862 typeof event.data === "string" && 17863 event.data.indexOf(messagePrefix) === 0) { 17864 runIfPresent(+event.data.slice(messagePrefix.length)); 17865 } 17866 }; 17867 17868 if (global.addEventListener) { 17869 global.addEventListener("message", onGlobalMessage, false); 17870 } else { 17871 global.attachEvent("onmessage", onGlobalMessage); 17872 } 17873 17874 registerImmediate = function(handle) { 17875 global.postMessage(messagePrefix + handle, "*"); 17876 }; 17877 } 17878 17879 function installMessageChannelImplementation() { 17880 var channel = new MessageChannel(); 17881 channel.port1.onmessage = function(event) { 17882 var handle = event.data; 17883 runIfPresent(handle); 17884 }; 17885 17886 registerImmediate = function(handle) { 17887 channel.port2.postMessage(handle); 17888 }; 17889 } 17890 17891 function installReadyStateChangeImplementation() { 17892 var html = doc.documentElement; 17893 registerImmediate = function(handle) { 17894 // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted 17895 // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. 17896 var script = doc.createElement("script"); 17897 script.onreadystatechange = function () { 17898 runIfPresent(handle); 17899 script.onreadystatechange = null; 17900 html.removeChild(script); 17901 script = null; 17902 }; 17903 html.appendChild(script); 17904 }; 17905 } 17906 17907 function installSetTimeoutImplementation() { 17908 registerImmediate = function(handle) { 17909 setTimeout(runIfPresent, 0, handle); 17910 }; 17911 } 17912 17913 // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live. 17914 var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global); 17915 attachTo = attachTo && attachTo.setTimeout ? attachTo : global; 17916 17917 // Don't get fooled by e.g. browserify environments. 17918 if ({}.toString.call(global.process) === "[object process]") { 17919 // For Node.js before 0.9 17920 installNextTickImplementation(); 17921 17922 } else if (canUsePostMessage()) { 17923 // For non-IE10 modern browsers 17924 installPostMessageImplementation(); 17925 17926 }
vendor: 2,540 bytes, lines 17926-18023
17926 else if (global.MessageChannel) { 17927 // For web workers, where supported 17928 installMessageChannelImplementation(); 17929 17930 } else if (doc && "onreadystatechange" in doc.createElement("script")) { 17931 // For IE 6â8 17932 installReadyStateChangeImplementation(); 17933 17934 } else { 17935 // For older browsers 17936 installSetTimeoutImplementation(); 17937 } 17938 17939 attachTo.setImmediate = setImmediate; 17940 attachTo.clearImmediate = clearImmediate; 17941}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self)); 17942 17943/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7), __webpack_require__(11))) 17944 17945/***/ }), 17946/* 144 */ 17947/***/ (function(module, exports, __webpack_require__) { 17948 17949/* WEBPACK VAR INJECTION */(function(global) { 17950/** 17951 * Module exports. 17952 */ 17953 17954module.exports = deprecate; 17955 17956/** 17957 * Mark that a method should not be used. 17958 * Returns a modified function which warns once by default. 17959 * 17960 * If `localStorage.noDeprecation = true` is set, then it is a no-op. 17961 * 17962 * If `localStorage.throwDeprecation = true` is set, then deprecated functions 17963 * will throw an Error when invoked. 17964 * 17965 * If `localStorage.traceDeprecation = true` is set, then deprecated functions 17966 * will invoke `console.trace()` instead of `console.error()`. 17967 * 17968 * @param {Function} fn - the function to deprecate 17969 * @param {String} msg - the string to print to the console when `fn` is invoked 17970 * @returns {Function} a new "deprecated" version of `fn` 17971 * @api public 17972 */ 17973 17974function deprecate (fn, msg) { 17975 if (config('noDeprecation')) { 17976 return fn; 17977 } 17978 17979 var warned = false; 17980 function deprecated() { 17981 if (!warned) { 17982 if (config('throwDeprecation')) { 17983 throw new Error(msg); 17984 } else if (config('traceDeprecation')) { 17985 console.trace(msg); 17986 } else { 17987 console.warn(msg); 17988 } 17989 warned = true; 17990 } 17991 return fn.apply(this, arguments); 17992 } 17993 17994 return deprecated; 17995} 17996 17997/** 17998 * Checks `localStorage` for boolean values for the given `name`. 17999 * 18000 * @param {String} name 18001 * @returns {Boolean} 18002 * @api private 18003 */ 18004 18005function config (name) { 18006 // accessing global.localStorage can trigger a DOMException in sandboxed iframes 18007 try { 18008 if (!global.localStorage) return false; 18009 } catch (_) { 18010 return false; 18011 } 18012 var val = global.localStorage[name]; 18013 if (null == val) return false; 18014 return String(val).toLowerCase() === 'true'; 18015} 18016 18017/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7))) 18018 18019/***/ }), 18020/* 145 */ 18021/***/ (function(module, exports, __webpack_require__) { 18022 18023"use strict";
vendor: 17,603 bytes, lines 18024-18640
18024// Copyright Joyent, Inc. and other Node contributors. 18025// 18026// Permission is hereby granted, free of charge, to any person obtaining a 18027// copy of this software and associated documentation files (the 18028// "Software"), to deal in the Software without restriction, including 18029// without limitation the rights to use, copy, modify, merge, publish, 18030// distribute, sublicense, and/or sell copies of the Software, and to permit 18031// persons to whom the Software is furnished to do so, subject to the 18032// following conditions: 18033// 18034// The above copyright notice and this permission notice shall be included 18035// in all copies or substantial portions of the Software. 18036// 18037// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18038// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18039// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 18040// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18041// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 18042// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 18043// USE OR OTHER DEALINGS IN THE SOFTWARE. 18044 18045// a passthrough stream. 18046// basically just the most minimal sort of Transform stream. 18047// Every written chunk gets output as-is. 18048 18049 18050 18051module.exports = PassThrough; 18052 18053var Transform = __webpack_require__(86); 18054 18055/*<replacement>*/ 18056var util = __webpack_require__(25); 18057util.inherits = __webpack_require__(21); 18058/*</replacement>*/ 18059 18060util.inherits(PassThrough, Transform); 18061 18062function PassThrough(options) { 18063 if (!(this instanceof PassThrough)) return new PassThrough(options); 18064 18065 Transform.call(this, options); 18066} 18067 18068PassThrough.prototype._transform = function (chunk, encoding, cb) { 18069 cb(null, chunk); 18070}; 18071 18072/***/ }), 18073/* 146 */ 18074/***/ (function(module, exports, __webpack_require__) { 18075 18076module.exports = __webpack_require__(46); 18077 18078 18079/***/ }), 18080/* 147 */ 18081/***/ (function(module, exports, __webpack_require__) { 18082 18083module.exports = __webpack_require__(16); 18084 18085 18086/***/ }), 18087/* 148 */ 18088/***/ (function(module, exports, __webpack_require__) { 18089 18090module.exports = __webpack_require__(45).Transform 18091 18092 18093/***/ }), 18094/* 149 */ 18095/***/ (function(module, exports, __webpack_require__) { 18096 18097module.exports = __webpack_require__(45).PassThrough 18098 18099 18100/***/ }), 18101/* 150 */ 18102/***/ (function(module, exports, __webpack_require__) { 18103 18104"use strict"; 18105/* WEBPACK VAR INJECTION */(function(Buffer, process) { 18106/* eslint camelcase: "off" */ 18107 18108var assert = __webpack_require__(88); 18109 18110var Zstream = __webpack_require__(153); 18111var zlib_deflate = __webpack_require__(154); 18112var zlib_inflate = __webpack_require__(157); 18113var constants = __webpack_require__(160); 18114 18115for (var key in constants) { 18116 exports[key] = constants[key]; 18117} 18118 18119// zlib modes 18120exports.NONE = 0; 18121exports.DEFLATE = 1; 18122exports.INFLATE = 2; 18123exports.GZIP = 3; 18124exports.GUNZIP = 4; 18125exports.DEFLATERAW = 5; 18126exports.INFLATERAW = 6; 18127exports.UNZIP = 7; 18128 18129var GZIP_HEADER_ID1 = 0x1f; 18130var GZIP_HEADER_ID2 = 0x8b; 18131 18132/** 18133 * Emulate Node's zlib C++ layer for use by the JS layer in index.js 18134 */ 18135function Zlib(mode) { 18136 if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) { 18137 throw new TypeError('Bad argument'); 18138 } 18139 18140 this.dictionary = null; 18141 this.err = 0; 18142 this.flush = 0; 18143 this.init_done = false; 18144 this.level = 0; 18145 this.memLevel = 0; 18146 this.mode = mode; 18147 this.strategy = 0; 18148 this.windowBits = 0; 18149 this.write_in_progress = false; 18150 this.pending_close = false; 18151 this.gzip_id_bytes_read = 0; 18152} 18153 18154Zlib.prototype.close = function () { 18155 if (this.write_in_progress) { 18156 this.pending_close = true; 18157 return; 18158 } 18159 18160 this.pending_close = false; 18161 18162 assert(this.init_done, 'close before init'); 18163 assert(this.mode <= exports.UNZIP); 18164 18165 if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) { 18166 zlib_deflate.deflateEnd(this.strm); 18167 } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) { 18168 zlib_inflate.inflateEnd(this.strm); 18169 } 18170 18171 this.mode = exports.NONE; 18172 18173 this.dictionary = null; 18174}; 18175 18176Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) { 18177 return this._write(true, flush, input, in_off, in_len, out, out_off, out_len); 18178}; 18179 18180Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) { 18181 return this._write(false, flush, input, in_off, in_len, out, out_off, out_len); 18182}; 18183 18184Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) { 18185 assert.equal(arguments.length, 8); 18186 18187 assert(this.init_done, 'write before init'); 18188 assert(this.mode !== exports.NONE, 'already finalized'); 18189 assert.equal(false, this.write_in_progress, 'write already in progress'); 18190 assert.equal(false, this.pending_close, 'close is pending'); 18191 18192 this.write_in_progress = true; 18193 18194 assert.equal(false, flush === undefined, 'must provide flush value'); 18195 18196 this.write_in_progress = true; 18197 18198 if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) { 18199 throw new Error('Invalid flush value'); 18200 } 18201 18202 if (input == null) { 18203 input = Buffer.alloc(0); 18204 in_len = 0; 18205 in_off = 0; 18206 } 18207 18208 this.strm.avail_in = in_len; 18209 this.strm.input = input; 18210 this.strm.next_in = in_off; 18211 this.strm.avail_out = out_len; 18212 this.strm.output = out; 18213 this.strm.next_out = out_off; 18214 this.flush = flush; 18215 18216 if (!async) { 18217 // sync version 18218 this._process(); 18219 18220 if (this._checkError()) { 18221 return this._afterSync(); 18222 } 18223 return; 18224 } 18225 18226 // async version 18227 var self = this; 18228 process.nextTick(function () { 18229 self._process(); 18230 self._after(); 18231 }); 18232 18233 return this; 18234}; 18235 18236Zlib.prototype._afterSync = function () { 18237 var avail_out = this.strm.avail_out; 18238 var avail_in = this.strm.avail_in; 18239 18240 this.write_in_progress = false; 18241 18242 return [avail_in, avail_out]; 18243}; 18244 18245Zlib.prototype._process = function () { 18246 var next_expected_header_byte = null; 18247 18248 // If the avail_out is left at 0, then it means that it ran out 18249 // of room. If there was avail_out left over, then it means 18250 // that all of the input was consumed. 18251 switch (this.mode) { 18252 case exports.DEFLATE: 18253 case exports.GZIP: 18254 case exports.DEFLATERAW: 18255 this.err = zlib_deflate.deflate(this.strm, this.flush); 18256 break; 18257 case exports.UNZIP: 18258 if (this.strm.avail_in > 0) { 18259 next_expected_header_byte = this.strm.next_in; 18260 } 18261 18262 switch (this.gzip_id_bytes_read) { 18263 case 0: 18264 if (next_expected_header_byte === null) { 18265 break; 18266 } 18267 18268 if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) { 18269 this.gzip_id_bytes_read = 1; 18270 next_expected_header_byte++; 18271 18272 if (this.strm.avail_in === 1) { 18273 // The only available byte was already read. 18274 break; 18275 } 18276 } else { 18277 this.mode = exports.INFLATE; 18278 break; 18279 } 18280 18281 // fallthrough 18282 case 1: 18283 if (next_expected_header_byte === null) { 18284 break; 18285 } 18286 18287 if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) { 18288 this.gzip_id_bytes_read = 2; 18289 this.mode = exports.GUNZIP; 18290 } else { 18291 // There is no actual difference between INFLATE and INFLATERAW 18292 // (after initialization). 18293 this.mode = exports.INFLATE; 18294 } 18295 18296 break; 18297 default: 18298 throw new Error('invalid number of gzip magic number bytes read'); 18299 } 18300 18301 // fallthrough 18302 case exports.INFLATE: 18303 case exports.GUNZIP: 18304 case exports.INFLATERAW: 18305 this.err = zlib_inflate.inflate(this.strm, this.flush 18306 18307 // If data was encoded with dictionary 18308 );if (this.err === exports.Z_NEED_DICT && this.dictionary) { 18309 // Load it 18310 this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary); 18311 if (this.err === exports.Z_OK) { 18312 // And try to decode again 18313 this.err = zlib_inflate.inflate(this.strm, this.flush); 18314 } else if (this.err === exports.Z_DATA_ERROR) { 18315 // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR. 18316 // Make it possible for After() to tell a bad dictionary from bad 18317 // input. 18318 this.err = exports.Z_NEED_DICT; 18319 } 18320 } 18321 while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) { 18322 // Bytes remain in input buffer. Perhaps this is another compressed 18323 // member in the same archive, or just trailing garbage. 18324 // Trailing zero bytes are okay, though, since they are frequently 18325 // used for padding. 18326 18327 this.reset(); 18328 this.err = zlib_inflate.inflate(this.strm, this.flush); 18329 } 18330 break; 18331 default: 18332 throw new Error('Unknown mode ' + this.mode); 18333 } 18334}; 18335 18336Zlib.prototype._checkError = function () { 18337 // Acceptable error states depend on the type of zlib stream. 18338 switch (this.err) { 18339 case exports.Z_OK: 18340 case exports.Z_BUF_ERROR: 18341 if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) { 18342 this._error('unexpected end of file'); 18343 return false; 18344 } 18345 break; 18346 case exports.Z_STREAM_END: 18347 // normal statuses, not fatal 18348 break; 18349 case exports.Z_NEED_DICT: 18350 if (this.dictionary == null) { 18351 this._error('Missing dictionary'); 18352 } else { 18353 this._error('Bad dictionary'); 18354 } 18355 return false; 18356 default: 18357 // something else. 18358 this._error('Zlib error'); 18359 return false; 18360 } 18361 18362 return true; 18363}; 18364 18365Zlib.prototype._after = function () { 18366 if (!this._checkError()) { 18367 return; 18368 } 18369 18370 var avail_out = this.strm.avail_out; 18371 var avail_in = this.strm.avail_in; 18372 18373 this.write_in_progress = false; 18374 18375 // call the write() cb 18376 this.callback(avail_in, avail_out); 18377 18378 if (this.pending_close) { 18379 this.close(); 18380 } 18381}; 18382 18383Zlib.prototype._error = function (message) { 18384 if (this.strm.msg) { 18385 message = this.strm.msg; 18386 } 18387 this.onerror(message, this.err 18388 18389 // no hope of rescue. 18390 );this.write_in_progress = false; 18391 if (this.pending_close) { 18392 this.close(); 18393 } 18394}; 18395 18396Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) { 18397 assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])'); 18398 18399 assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits'); 18400 assert(level >= -1 && level <= 9, 'invalid compression level'); 18401 18402 assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel'); 18403 18404 assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy'); 18405 18406 this._init(level, windowBits, memLevel, strategy, dictionary); 18407 this._setDictionary(); 18408}; 18409 18410Zlib.prototype.params = function () { 18411 throw new Error('deflateParams Not supported'); 18412}; 18413 18414Zlib.prototype.reset = function () { 18415 this._reset(); 18416 this._setDictionary(); 18417}; 18418 18419Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) { 18420 this.level = level; 18421 this.windowBits = windowBits; 18422 this.memLevel = memLevel; 18423 this.strategy = strategy; 18424 18425 this.flush = exports.Z_NO_FLUSH; 18426 18427 this.err = exports.Z_OK; 18428 18429 if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) { 18430 this.windowBits += 16; 18431 } 18432 18433 if (this.mode === exports.UNZIP) { 18434 this.windowBits += 32; 18435 } 18436 18437 if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) { 18438 this.windowBits = -1 * this.windowBits; 18439 } 18440 18441 this.strm = new Zstream(); 18442 18443 switch (this.mode) { 18444 case exports.DEFLATE: 18445 case exports.GZIP: 18446 case exports.DEFLATERAW: 18447 this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy); 18448 break; 18449 case exports.INFLATE: 18450 case exports.GUNZIP: 18451 case exports.INFLATERAW: 18452 case exports.UNZIP: 18453 this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits); 18454 break; 18455 default: 18456 throw new Error('Unknown mode ' + this.mode); 18457 } 18458 18459 if (this.err !== exports.Z_OK) { 18460 this._error('Init error'); 18461 } 18462 18463 this.dictionary = dictionary; 18464 18465 this.write_in_progress = false; 18466 this.init_done = true; 18467}; 18468 18469Zlib.prototype._setDictionary = function () { 18470 if (this.dictionary == null) { 18471 return; 18472 } 18473 18474 this.err = exports.Z_OK; 18475 18476 switch (this.mode) { 18477 case exports.DEFLATE: 18478 case exports.DEFLATERAW: 18479 this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary); 18480 break; 18481 default: 18482 break; 18483 } 18484 18485 if (this.err !== exports.Z_OK) { 18486 this._error('Failed to set dictionary'); 18487 } 18488}; 18489 18490Zlib.prototype._reset = function () { 18491 this.err = exports.Z_OK; 18492 18493 switch (this.mode) { 18494 case exports.DEFLATE: 18495 case exports.DEFLATERAW: 18496 case exports.GZIP: 18497 this.err = zlib_deflate.deflateReset(this.strm); 18498 break; 18499 case exports.INFLATE: 18500 case exports.INFLATERAW: 18501 case exports.GUNZIP: 18502 this.err = zlib_inflate.inflateReset(this.strm); 18503 break; 18504 default: 18505 break; 18506 } 18507 18508 if (this.err !== exports.Z_OK) { 18509 this._error('Failed to reset stream'); 18510 } 18511}; 18512 18513exports.Zlib = Zlib; 18514/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(11))) 18515 18516/***/ }), 18517/* 151 */ 18518/***/ (function(module, exports) { 18519 18520module.exports = function isBuffer(arg) { 18521 return arg && typeof arg === 'object' 18522 && typeof arg.copy === 'function' 18523 && typeof arg.fill === 'function' 18524 && typeof arg.readUInt8 === 'function'; 18525} 18526 18527/***/ }), 18528/* 152 */ 18529/***/ (function(module, exports) { 18530 18531if (typeof Object.create === 'function') { 18532 // implementation from standard node.js 'util' module 18533 module.exports = function inherits(ctor, superCtor) { 18534 ctor.super_ = superCtor 18535 ctor.prototype = Object.create(superCtor.prototype, { 18536 constructor: { 18537 value: ctor, 18538 enumerable: false, 18539 writable: true, 18540 configurable: true 18541 } 18542 }); 18543 }; 18544} else { 18545 // old school shim for old browsers 18546 module.exports = function inherits(ctor, superCtor) { 18547 ctor.super_ = superCtor 18548 var TempCtor = function () {} 18549 TempCtor.prototype = superCtor.prototype 18550 ctor.prototype = new TempCtor() 18551 ctor.prototype.constructor = ctor 18552 } 18553} 18554 18555 18556/***/ }), 18557/* 153 */ 18558/***/ (function(module, exports, __webpack_require__) { 18559 18560"use strict"; 18561 18562 18563// (C) 1995-2013 Jean-loup Gailly and Mark Adler 18564// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 18565// 18566// This software is provided 'as-is', without any express or implied 18567// warranty. In no event will the authors be held liable for any damages 18568// arising from the use of this software. 18569// 18570// Permission is granted to anyone to use this software for any purpose, 18571// including commercial applications, and to alter it and redistribute it 18572// freely, subject to the following restrictions: 18573// 18574// 1. The origin of this software must not be misrepresented; you must not 18575// claim that you wrote the original software. If you use this software 18576// in a product, an acknowledgment in the product documentation would be 18577// appreciated but is not required. 18578// 2. Altered source versions must be plainly marked as such, and must not be 18579// misrepresented as being the original software. 18580// 3. This notice may not be removed or altered from any source distribution. 18581 18582function ZStream() { 18583 /* next input byte */ 18584 this.input = null; // JS specific, because we have no pointers 18585 this.next_in = 0; 18586 /* number of bytes available at input */ 18587 this.avail_in = 0; 18588 /* total number of input bytes read so far */ 18589 this.total_in = 0; 18590 /* next output byte should be put there */ 18591 this.output = null; // JS specific, because we have no pointers 18592 this.next_out = 0; 18593 /* remaining free space at output */ 18594 this.avail_out = 0; 18595 /* total number of bytes output so far */ 18596 this.total_out = 0; 18597 /* last error message, NULL if no error */ 18598 this.msg = ''/*Z_NULL*/; 18599 /* not visible by applications */ 18600 this.state = null; 18601 /* best guess about the data type: binary or text */ 18602 this.data_type = 2/*Z_UNKNOWN*/; 18603 /* adler32 value of the uncompressed data */ 18604 this.adler = 0; 18605} 18606 18607module.exports = ZStream; 18608 18609 18610/***/ }), 18611/* 154 */ 18612/***/ (function(module, exports, __webpack_require__) { 18613 18614"use strict"; 18615 18616 18617// (C) 1995-2013 Jean-loup Gailly and Mark Adler 18618// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 18619// 18620// This software is provided 'as-is', without any express or implied 18621// warranty. In no event will the authors be held liable for any damages 18622// arising from the use of this software. 18623// 18624// Permission is granted to anyone to use this software for any purpose, 18625// including commercial applications, and to alter it and redistribute it 18626// freely, subject to the following restrictions: 18627// 18628// 1. The origin of this software must not be misrepresented; you must not 18629// claim that you wrote the original software. If you use this software 18630// in a product, an acknowledgment in the product documentation would be 18631// appreciated but is not required. 18632// 2. Altered source versions must be plainly marked as such, and must not be 18633// misrepresented as being the original software. 18634// 3. This notice may not be removed or altered from any source distribution. 18635 18636var utils = __webpack_require__(34); 18637var trees = __webpack_require__(155); 18638var adler32 = __webpack_require__(89); 18639var crc32 = __webpack_require__(90); 18640var msg = __webpack_require__(156
vendor: 45,423 bytes, lines 18640-19995
18640); 18641 18642/* Public constants ==========================================================*/ 18643/* ===========================================================================*/ 18644 18645 18646/* Allowed flush values; see deflate() and inflate() below for details */ 18647var Z_NO_FLUSH = 0; 18648var Z_PARTIAL_FLUSH = 1; 18649//var Z_SYNC_FLUSH = 2; 18650var Z_FULL_FLUSH = 3; 18651var Z_FINISH = 4; 18652var Z_BLOCK = 5; 18653//var Z_TREES = 6; 18654 18655 18656/* Return codes for the compression/decompression functions. Negative values 18657 * are errors, positive values are used for special but normal events. 18658 */ 18659var Z_OK = 0; 18660var Z_STREAM_END = 1; 18661//var Z_NEED_DICT = 2; 18662//var Z_ERRNO = -1; 18663var Z_STREAM_ERROR = -2; 18664var Z_DATA_ERROR = -3; 18665//var Z_MEM_ERROR = -4; 18666var Z_BUF_ERROR = -5; 18667//var Z_VERSION_ERROR = -6; 18668 18669 18670/* compression levels */ 18671//var Z_NO_COMPRESSION = 0; 18672//var Z_BEST_SPEED = 1; 18673//var Z_BEST_COMPRESSION = 9; 18674var Z_DEFAULT_COMPRESSION = -1; 18675 18676 18677var Z_FILTERED = 1; 18678var Z_HUFFMAN_ONLY = 2; 18679var Z_RLE = 3; 18680var Z_FIXED = 4; 18681var Z_DEFAULT_STRATEGY = 0; 18682 18683/* Possible values of the data_type field (though see inflate()) */ 18684//var Z_BINARY = 0; 18685//var Z_TEXT = 1; 18686//var Z_ASCII = 1; // = Z_TEXT 18687var Z_UNKNOWN = 2; 18688 18689 18690/* The deflate compression method */ 18691var Z_DEFLATED = 8; 18692 18693/*============================================================================*/ 18694 18695 18696var MAX_MEM_LEVEL = 9; 18697/* Maximum value for memLevel in deflateInit2 */ 18698var MAX_WBITS = 15; 18699/* 32K LZ77 window */ 18700var DEF_MEM_LEVEL = 8; 18701 18702 18703var LENGTH_CODES = 29; 18704/* number of length codes, not counting the special END_BLOCK code */ 18705var LITERALS = 256; 18706/* number of literal bytes 0..255 */ 18707var L_CODES = LITERALS + 1 + LENGTH_CODES; 18708/* number of Literal or Length codes, including the END_BLOCK code */ 18709var D_CODES = 30; 18710/* number of distance codes */ 18711var BL_CODES = 19; 18712/* number of codes used to transfer the bit lengths */ 18713var HEAP_SIZE = 2 * L_CODES + 1; 18714/* maximum heap size */ 18715var MAX_BITS = 15; 18716/* All codes must not exceed MAX_BITS bits */ 18717 18718var MIN_MATCH = 3; 18719var MAX_MATCH = 258; 18720var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); 18721 18722var PRESET_DICT = 0x20; 18723 18724var INIT_STATE = 42; 18725var EXTRA_STATE = 69; 18726var NAME_STATE = 73; 18727var COMMENT_STATE = 91; 18728var HCRC_STATE = 103; 18729var BUSY_STATE = 113; 18730var FINISH_STATE = 666; 18731 18732var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ 18733var BS_BLOCK_DONE = 2; /* block flush performed */ 18734var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ 18735var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ 18736 18737var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. 18738 18739function err(strm, errorCode) { 18740 strm.msg = msg[errorCode]; 18741 return errorCode; 18742} 18743 18744function rank(f) { 18745 return ((f) << 1) - ((f) > 4 ? 9 : 0); 18746} 18747 18748function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } 18749 18750 18751/* ========================================================================= 18752 * Flush as much pending output as possible. All deflate() output goes 18753 * through this function so some applications may wish to modify it 18754 * to avoid allocating a large strm->output buffer and copying into it. 18755 * (See also read_buf()). 18756 */ 18757function flush_pending(strm) { 18758 var s = strm.state; 18759 18760 //_tr_flush_bits(s); 18761 var len = s.pending; 18762 if (len > strm.avail_out) { 18763 len = strm.avail_out; 18764 } 18765 if (len === 0) { return; } 18766 18767 utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); 18768 strm.next_out += len; 18769 s.pending_out += len; 18770 strm.total_out += len; 18771 strm.avail_out -= len; 18772 s.pending -= len; 18773 if (s.pending === 0) { 18774 s.pending_out = 0; 18775 } 18776} 18777 18778 18779function flush_block_only(s, last) { 18780 trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); 18781 s.block_start = s.strstart; 18782 flush_pending(s.strm); 18783} 18784 18785 18786function put_byte(s, b) { 18787 s.pending_buf[s.pending++] = b; 18788} 18789 18790 18791/* ========================================================================= 18792 * Put a short in the pending buffer. The 16-bit value is put in MSB order. 18793 * IN assertion: the stream state is correct and there is enough room in 18794 * pending_buf. 18795 */ 18796function putShortMSB(s, b) { 18797// put_byte(s, (Byte)(b >> 8)); 18798// put_byte(s, (Byte)(b & 0xff)); 18799 s.pending_buf[s.pending++] = (b >>> 8) & 0xff; 18800 s.pending_buf[s.pending++] = b & 0xff; 18801} 18802 18803 18804/* =========================================================================== 18805 * Read a new buffer from the current input stream, update the adler32 18806 * and total number of bytes read. All deflate() input goes through 18807 * this function so some applications may wish to modify it to avoid 18808 * allocating a large strm->input buffer and copying from it. 18809 * (See also flush_pending()). 18810 */ 18811function read_buf(strm, buf, start, size) { 18812 var len = strm.avail_in; 18813 18814 if (len > size) { len = size; } 18815 if (len === 0) { return 0; } 18816 18817 strm.avail_in -= len; 18818 18819 // zmemcpy(buf, strm->next_in, len); 18820 utils.arraySet(buf, strm.input, strm.next_in, len, start); 18821 if (strm.state.wrap === 1) { 18822 strm.adler = adler32(strm.adler, buf, len, start); 18823 } 18824 18825 else if (strm.state.wrap === 2) { 18826 strm.adler = crc32(strm.adler, buf, len, start); 18827 } 18828 18829 strm.next_in += len; 18830 strm.total_in += len; 18831 18832 return len; 18833} 18834 18835 18836/* =========================================================================== 18837 * Set match_start to the longest match starting at the given string and 18838 * return its length. Matches shorter or equal to prev_length are discarded, 18839 * in which case the result is equal to prev_length and match_start is 18840 * garbage. 18841 * IN assertions: cur_match is the head of the hash chain for the current 18842 * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 18843 * OUT assertion: the match length is not greater than s->lookahead. 18844 */ 18845function longest_match(s, cur_match) { 18846 var chain_length = s.max_chain_length; /* max hash chain length */ 18847 var scan = s.strstart; /* current string */ 18848 var match; /* matched string */ 18849 var len; /* length of current match */ 18850 var best_len = s.prev_length; /* best match length so far */ 18851 var nice_match = s.nice_match; /* stop if match long enough */ 18852 var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? 18853 s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; 18854 18855 var _win = s.window; // shortcut 18856 18857 var wmask = s.w_mask; 18858 var prev = s.prev; 18859 18860 /* Stop when cur_match becomes <= limit. To simplify the code, 18861 * we prevent matches with the string of window index 0. 18862 */ 18863 18864 var strend = s.strstart + MAX_MATCH; 18865 var scan_end1 = _win[scan + best_len - 1]; 18866 var scan_end = _win[scan + best_len]; 18867 18868 /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. 18869 * It is easy to get rid of this optimization if necessary. 18870 */ 18871 // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); 18872 18873 /* Do not waste too much time if we already have a good match: */ 18874 if (s.prev_length >= s.good_match) { 18875 chain_length >>= 2; 18876 } 18877 /* Do not look for matches beyond the end of the input. This is necessary 18878 * to make deflate deterministic. 18879 */ 18880 if (nice_match > s.lookahead) { nice_match = s.lookahead; } 18881 18882 // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); 18883 18884 do { 18885 // Assert(cur_match < s->strstart, "no future"); 18886 match = cur_match; 18887 18888 /* Skip to next match if the match length cannot increase 18889 * or if the match length is less than 2. Note that the checks below 18890 * for insufficient lookahead only occur occasionally for performance 18891 * reasons. Therefore uninitialized memory will be accessed, and 18892 * conditional jumps will be made that depend on those values. 18893 * However the length of the match is limited to the lookahead, so 18894 * the output of deflate is not affected by the uninitialized values. 18895 */ 18896 18897 if (_win[match + best_len] !== scan_end || 18898 _win[match + best_len - 1] !== scan_end1 || 18899 _win[match] !== _win[scan] || 18900 _win[++match] !== _win[scan + 1]) { 18901 continue; 18902 } 18903 18904 /* The check at best_len-1 can be removed because it will be made 18905 * again later. (This heuristic is not always a win.) 18906 * It is not necessary to compare scan[2] and match[2] since they 18907 * are always equal when the other bytes match, given that 18908 * the hash keys are equal and that HASH_BITS >= 8. 18909 */ 18910 scan += 2; 18911 match++; 18912 // Assert(*scan == *match, "match[2]?"); 18913 18914 /* We check for insufficient lookahead only every 8th comparison; 18915 * the 256th check will be made at strstart+258. 18916 */ 18917 do { 18918 /*jshint noempty:false*/ 18919 } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && 18920 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && 18921 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && 18922 _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && 18923 scan < strend); 18924 18925 // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); 18926 18927 len = MAX_MATCH - (strend - scan); 18928 scan = strend - MAX_MATCH; 18929 18930 if (len > best_len) { 18931 s.match_start = cur_match; 18932 best_len = len; 18933 if (len >= nice_match) { 18934 break; 18935 } 18936 scan_end1 = _win[scan + best_len - 1]; 18937 scan_end = _win[scan + best_len]; 18938 } 18939 } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); 18940 18941 if (best_len <= s.lookahead) { 18942 return best_len; 18943 } 18944 return s.lookahead; 18945} 18946 18947 18948/* =========================================================================== 18949 * Fill the window when the lookahead becomes insufficient. 18950 * Updates strstart and lookahead. 18951 * 18952 * IN assertion: lookahead < MIN_LOOKAHEAD 18953 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD 18954 * At least one byte has been read, or avail_in == 0; reads are 18955 * performed for at least two bytes (required for the zip translate_eol 18956 * option -- not supported here). 18957 */ 18958function fill_window(s) { 18959 var _w_size = s.w_size; 18960 var p, n, m, more, str; 18961 18962 //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); 18963 18964 do { 18965 more = s.window_size - s.lookahead - s.strstart; 18966 18967 // JS ints have 32 bit, block below not needed 18968 /* Deal with !@#$% 64K limit: */ 18969 //if (sizeof(int) <= 2) { 18970 // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { 18971 // more = wsize; 18972 // 18973 // } else if (more == (unsigned)(-1)) { 18974 // /* Very unlikely, but possible on 16 bit machine if 18975 // * strstart == 0 && lookahead == 1 (input done a byte at time) 18976 // */ 18977 // more--; 18978 // } 18979 //} 18980 18981 18982 /* If the window is almost full and there is insufficient lookahead, 18983 * move the upper half to the lower one to make room in the upper half. 18984 */ 18985 if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { 18986 18987 utils.arraySet(s.window, s.window, _w_size, _w_size, 0); 18988 s.match_start -= _w_size; 18989 s.strstart -= _w_size; 18990 /* we now have strstart >= MAX_DIST */ 18991 s.block_start -= _w_size; 18992 18993 /* Slide the hash table (could be avoided with 32 bit values 18994 at the expense of memory usage). We slide even when level == 0 18995 to keep the hash table consistent if we switch back to level > 0 18996 later. (Using level 0 permanently is not an optimal usage of 18997 zlib, so we don't care about this pathological case.) 18998 */ 18999 19000 n = s.hash_size; 19001 p = n; 19002 do { 19003 m = s.head[--p]; 19004 s.head[p] = (m >= _w_size ? m - _w_size : 0); 19005 } while (--n); 19006 19007 n = _w_size; 19008 p = n; 19009 do { 19010 m = s.prev[--p]; 19011 s.prev[p] = (m >= _w_size ? m - _w_size : 0); 19012 /* If n is not on any hash chain, prev[n] is garbage but 19013 * its value will never be used. 19014 */ 19015 } while (--n); 19016 19017 more += _w_size; 19018 } 19019 if (s.strm.avail_in === 0) { 19020 break; 19021 } 19022 19023 /* If there was no sliding: 19024 * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && 19025 * more == window_size - lookahead - strstart 19026 * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) 19027 * => more >= window_size - 2*WSIZE + 2 19028 * In the BIG_MEM or MMAP case (not yet supported), 19029 * window_size == input_size + MIN_LOOKAHEAD && 19030 * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. 19031 * Otherwise, window_size == 2*WSIZE so more >= 2. 19032 * If there was sliding, more >= WSIZE. So in all cases, more >= 2. 19033 */ 19034 //Assert(more >= 2, "more < 2"); 19035 n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); 19036 s.lookahead += n; 19037 19038 /* Initialize the hash value now that we have some input: */ 19039 if (s.lookahead + s.insert >= MIN_MATCH) { 19040 str = s.strstart - s.insert; 19041 s.ins_h = s.window[str]; 19042 19043 /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ 19044 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; 19045//#if MIN_MATCH != 3 19046// Call update_hash() MIN_MATCH-3 more times 19047//#endif 19048 while (s.insert) { 19049 /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ 19050 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; 19051 19052 s.prev[str & s.w_mask] = s.head[s.ins_h]; 19053 s.head[s.ins_h] = str; 19054 str++; 19055 s.insert--; 19056 if (s.lookahead + s.insert < MIN_MATCH) { 19057 break; 19058 } 19059 } 19060 } 19061 /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, 19062 * but this is not important since only literal bytes will be emitted. 19063 */ 19064 19065 } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); 19066 19067 /* If the WIN_INIT bytes after the end of the current data have never been 19068 * written, then zero those bytes in order to avoid memory check reports of 19069 * the use of uninitialized (or uninitialised as Julian writes) bytes by 19070 * the longest match routines. Update the high water mark for the next 19071 * time through here. WIN_INIT is set to MAX_MATCH since the longest match 19072 * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. 19073 */ 19074// if (s.high_water < s.window_size) { 19075// var curr = s.strstart + s.lookahead; 19076// var init = 0; 19077// 19078// if (s.high_water < curr) { 19079// /* Previous high water mark below current data -- zero WIN_INIT 19080// * bytes or up to end of window, whichever is less. 19081// */ 19082// init = s.window_size - curr; 19083// if (init > WIN_INIT) 19084// init = WIN_INIT; 19085// zmemzero(s->window + curr, (unsigned)init); 19086// s->high_water = curr + init; 19087// } 19088// else if (s->high_water < (ulg)curr + WIN_INIT) { 19089// /* High water mark at or above current data, but below current data 19090// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up 19091// * to end of window, whichever is less. 19092// */ 19093// init = (ulg)curr + WIN_INIT - s->high_water; 19094// if (init > s->window_size - s->high_water) 19095// init = s->window_size - s->high_water; 19096// zmemzero(s->window + s->high_water, (unsigned)init); 19097// s->high_water += init; 19098// } 19099// } 19100// 19101// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, 19102// "not enough room for search"); 19103} 19104 19105/* =========================================================================== 19106 * Copy without compression as much as possible from the input stream, return 19107 * the current block state. 19108 * This function does not insert new strings in the dictionary since 19109 * uncompressible data is probably not useful. This function is used 19110 * only for the level=0 compression option. 19111 * NOTE: this function should be optimized to avoid extra copying from 19112 * window to pending_buf. 19113 */ 19114function deflate_stored(s, flush) { 19115 /* Stored blocks are limited to 0xffff bytes, pending_buf is limited 19116 * to pending_buf_size, and each stored block has a 5 byte header: 19117 */ 19118 var max_block_size = 0xffff; 19119 19120 if (max_block_size > s.pending_buf_size - 5) { 19121 max_block_size = s.pending_buf_size - 5; 19122 } 19123 19124 /* Copy as much as possible from input to output: */ 19125 for (;;) { 19126 /* Fill the window as much as possible: */ 19127 if (s.lookahead <= 1) { 19128 19129 //Assert(s->strstart < s->w_size+MAX_DIST(s) || 19130 // s->block_start >= (long)s->w_size, "slide too late"); 19131// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || 19132// s.block_start >= s.w_size)) { 19133// throw new Error("slide too late"); 19134// } 19135 19136 fill_window(s); 19137 if (s.lookahead === 0 && flush === Z_NO_FLUSH) { 19138 return BS_NEED_MORE; 19139 } 19140 19141 if (s.lookahead === 0) { 19142 break; 19143 } 19144 /* flush the current block */ 19145 } 19146 //Assert(s->block_start >= 0L, "block gone"); 19147// if (s.block_start < 0) throw new Error("block gone"); 19148 19149 s.strstart += s.lookahead; 19150 s.lookahead = 0; 19151 19152 /* Emit a stored block if pending_buf will be full: */ 19153 var max_start = s.block_start + max_block_size; 19154 19155 if (s.strstart === 0 || s.strstart >= max_start) { 19156 /* strstart == 0 is possible when wraparound on 16-bit machine */ 19157 s.lookahead = s.strstart - max_start; 19158 s.strstart = max_start; 19159 /*** FLUSH_BLOCK(s, 0); ***/ 19160 flush_block_only(s, false); 19161 if (s.strm.avail_out === 0) { 19162 return BS_NEED_MORE; 19163 } 19164 /***/ 19165 19166 19167 } 19168 /* Flush if we may have to slide, otherwise block_start may become 19169 * negative and the data will be gone: 19170 */ 19171 if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { 19172 /*** FLUSH_BLOCK(s, 0); ***/ 19173 flush_block_only(s, false); 19174 if (s.strm.avail_out === 0) { 19175 return BS_NEED_MORE; 19176 } 19177 /***/ 19178 } 19179 } 19180 19181 s.insert = 0; 19182 19183 if (flush === Z_FINISH) { 19184 /*** FLUSH_BLOCK(s, 1); ***/ 19185 flush_block_only(s, true); 19186 if (s.strm.avail_out === 0) { 19187 return BS_FINISH_STARTED; 19188 } 19189 /***/ 19190 return BS_FINISH_DONE; 19191 } 19192 19193 if (s.strstart > s.block_start) { 19194 /*** FLUSH_BLOCK(s, 0); ***/ 19195 flush_block_only(s, false); 19196 if (s.strm.avail_out === 0) { 19197 return BS_NEED_MORE; 19198 } 19199 /***/ 19200 } 19201 19202 return BS_NEED_MORE; 19203} 19204 19205/* =========================================================================== 19206 * Compress as much as possible from the input stream, return the current 19207 * block state. 19208 * This function does not perform lazy evaluation of matches and inserts 19209 * new strings in the dictionary only for unmatched strings or for short 19210 * matches. It is used only for the fast compression options. 19211 */ 19212function deflate_fast(s, flush) { 19213 var hash_head; /* head of the hash chain */ 19214 var bflush; /* set if current block must be flushed */ 19215 19216 for (;;) { 19217 /* Make sure that we always have enough lookahead, except 19218 * at the end of the input file. We need MAX_MATCH bytes 19219 * for the next match, plus MIN_MATCH bytes to insert the 19220 * string following the next match. 19221 */ 19222 if (s.lookahead < MIN_LOOKAHEAD) { 19223 fill_window(s); 19224 if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { 19225 return BS_NEED_MORE; 19226 } 19227 if (s.lookahead === 0) { 19228 break; /* flush the current block */ 19229 } 19230 } 19231 19232 /* Insert the string window[strstart .. strstart+2] in the 19233 * dictionary, and set hash_head to the head of the hash chain: 19234 */ 19235 hash_head = 0/*NIL*/; 19236 if (s.lookahead >= MIN_MATCH) { 19237 /*** INSERT_STRING(s, s.strstart, hash_head); ***/ 19238 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; 19239 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; 19240 s.head[s.ins_h] = s.strstart; 19241 /***/ 19242 } 19243 19244 /* Find the longest match, discarding those <= prev_length. 19245 * At this point we have always match_length < MIN_MATCH 19246 */ 19247 if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { 19248 /* To simplify the code, we prevent matches with the string 19249 * of window index 0 (in particular we have to avoid a match 19250 * of the string with itself at the start of the input file). 19251 */ 19252 s.match_length = longest_match(s, hash_head); 19253 /* longest_match() sets match_start */ 19254 } 19255 if (s.match_length >= MIN_MATCH) { 19256 // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only 19257 19258 /*** _tr_tally_dist(s, s.strstart - s.match_start, 19259 s.match_length - MIN_MATCH, bflush); ***/ 19260 bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); 19261 19262 s.lookahead -= s.match_length; 19263 19264 /* Insert new strings in the hash table only if the match length 19265 * is not too large. This saves time but degrades compression. 19266 */ 19267 if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { 19268 s.match_length--; /* string at strstart already in table */ 19269 do { 19270 s.strstart++; 19271 /*** INSERT_STRING(s, s.strstart, hash_head); ***/ 19272 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; 19273 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; 19274 s.head[s.ins_h] = s.strstart; 19275 /***/ 19276 /* strstart never exceeds WSIZE-MAX_MATCH, so there are 19277 * always MIN_MATCH bytes ahead. 19278 */ 19279 } while (--s.match_length !== 0); 19280 s.strstart++; 19281 } else 19282 { 19283 s.strstart += s.match_length; 19284 s.match_length = 0; 19285 s.ins_h = s.window[s.strstart]; 19286 /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ 19287 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; 19288 19289//#if MIN_MATCH != 3 19290// Call UPDATE_HASH() MIN_MATCH-3 more times 19291//#endif 19292 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not 19293 * matter since it will be recomputed at next deflate call. 19294 */ 19295 } 19296 } else { 19297 /* No match, output a literal byte */ 19298 //Tracevv((stderr,"%c", s.window[s.strstart])); 19299 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ 19300 bflush = trees._tr_tally(s, 0, s.window[s.strstart]); 19301 19302 s.lookahead--; 19303 s.strstart++; 19304 } 19305 if (bflush) { 19306 /*** FLUSH_BLOCK(s, 0); ***/ 19307 flush_block_only(s, false); 19308 if (s.strm.avail_out === 0) { 19309 return BS_NEED_MORE; 19310 } 19311 /***/ 19312 } 19313 } 19314 s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); 19315 if (flush === Z_FINISH) { 19316 /*** FLUSH_BLOCK(s, 1); ***/ 19317 flush_block_only(s, true); 19318 if (s.strm.avail_out === 0) { 19319 return BS_FINISH_STARTED; 19320 } 19321 /***/ 19322 return BS_FINISH_DONE; 19323 } 19324 if (s.last_lit) { 19325 /*** FLUSH_BLOCK(s, 0); ***/ 19326 flush_block_only(s, false); 19327 if (s.strm.avail_out === 0) { 19328 return BS_NEED_MORE; 19329 } 19330 /***/ 19331 } 19332 return BS_BLOCK_DONE; 19333} 19334 19335/* =========================================================================== 19336 * Same as above, but achieves better compression. We use a lazy 19337 * evaluation for matches: a match is finally adopted only if there is 19338 * no better match at the next window position. 19339 */ 19340function deflate_slow(s, flush) { 19341 var hash_head; /* head of hash chain */ 19342 var bflush; /* set if current block must be flushed */ 19343 19344 var max_insert; 19345 19346 /* Process the input block. */ 19347 for (;;) { 19348 /* Make sure that we always have enough lookahead, except 19349 * at the end of the input file. We need MAX_MATCH bytes 19350 * for the next match, plus MIN_MATCH bytes to insert the 19351 * string following the next match. 19352 */ 19353 if (s.lookahead < MIN_LOOKAHEAD) { 19354 fill_window(s); 19355 if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { 19356 return BS_NEED_MORE; 19357 } 19358 if (s.lookahead === 0) { break; } /* flush the current block */ 19359 } 19360 19361 /* Insert the string window[strstart .. strstart+2] in the 19362 * dictionary, and set hash_head to the head of the hash chain: 19363 */ 19364 hash_head = 0/*NIL*/; 19365 if (s.lookahead >= MIN_MATCH) { 19366 /*** INSERT_STRING(s, s.strstart, hash_head); ***/ 19367 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; 19368 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; 19369 s.head[s.ins_h] = s.strstart; 19370 /***/ 19371 } 19372 19373 /* Find the longest match, discarding those <= prev_length. 19374 */ 19375 s.prev_length = s.match_length; 19376 s.prev_match = s.match_start; 19377 s.match_length = MIN_MATCH - 1; 19378 19379 if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && 19380 s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { 19381 /* To simplify the code, we prevent matches with the string 19382 * of window index 0 (in particular we have to avoid a match 19383 * of the string with itself at the start of the input file). 19384 */ 19385 s.match_length = longest_match(s, hash_head); 19386 /* longest_match() sets match_start */ 19387 19388 if (s.match_length <= 5 && 19389 (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { 19390 19391 /* If prev_match is also MIN_MATCH, match_start is garbage 19392 * but we will ignore the current match anyway. 19393 */ 19394 s.match_length = MIN_MATCH - 1; 19395 } 19396 } 19397 /* If there was a match at the previous step and the current 19398 * match is not better, output the previous match: 19399 */ 19400 if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { 19401 max_insert = s.strstart + s.lookahead - MIN_MATCH; 19402 /* Do not insert strings in hash table beyond this. */ 19403 19404 //check_match(s, s.strstart-1, s.prev_match, s.prev_length); 19405 19406 /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, 19407 s.prev_length - MIN_MATCH, bflush);***/ 19408 bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); 19409 /* Insert in hash table all strings up to the end of the match. 19410 * strstart-1 and strstart are already inserted. If there is not 19411 * enough lookahead, the last two strings are not inserted in 19412 * the hash table. 19413 */ 19414 s.lookahead -= s.prev_length - 1; 19415 s.prev_length -= 2; 19416 do { 19417 if (++s.strstart <= max_insert) { 19418 /*** INSERT_STRING(s, s.strstart, hash_head); ***/ 19419 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; 19420 hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; 19421 s.head[s.ins_h] = s.strstart; 19422 /***/ 19423 } 19424 } while (--s.prev_length !== 0); 19425 s.match_available = 0; 19426 s.match_length = MIN_MATCH - 1; 19427 s.strstart++; 19428 19429 if (bflush) { 19430 /*** FLUSH_BLOCK(s, 0); ***/ 19431 flush_block_only(s, false); 19432 if (s.strm.avail_out === 0) { 19433 return BS_NEED_MORE; 19434 } 19435 /***/ 19436 } 19437 19438 } else if (s.match_available) { 19439 /* If there was no match at the previous position, output a 19440 * single literal. If there was a match but the current match 19441 * is longer, truncate the previous match to a single literal. 19442 */ 19443 //Tracevv((stderr,"%c", s->window[s->strstart-1])); 19444 /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ 19445 bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); 19446 19447 if (bflush) { 19448 /*** FLUSH_BLOCK_ONLY(s, 0) ***/ 19449 flush_block_only(s, false); 19450 /***/ 19451 } 19452 s.strstart++; 19453 s.lookahead--; 19454 if (s.strm.avail_out === 0) { 19455 return BS_NEED_MORE; 19456 } 19457 } else { 19458 /* There is no previous match to compare with, wait for 19459 * the next step to decide. 19460 */ 19461 s.match_available = 1; 19462 s.strstart++; 19463 s.lookahead--; 19464 } 19465 } 19466 //Assert (flush != Z_NO_FLUSH, "no flush?"); 19467 if (s.match_available) { 19468 //Tracevv((stderr,"%c", s->window[s->strstart-1])); 19469 /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ 19470 bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); 19471 19472 s.match_available = 0; 19473 } 19474 s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; 19475 if (flush === Z_FINISH) { 19476 /*** FLUSH_BLOCK(s, 1); ***/ 19477 flush_block_only(s, true); 19478 if (s.strm.avail_out === 0) { 19479 return BS_FINISH_STARTED; 19480 } 19481 /***/ 19482 return BS_FINISH_DONE; 19483 } 19484 if (s.last_lit) { 19485 /*** FLUSH_BLOCK(s, 0); ***/ 19486 flush_block_only(s, false); 19487 if (s.strm.avail_out === 0) { 19488 return BS_NEED_MORE; 19489 } 19490 /***/ 19491 } 19492 19493 return BS_BLOCK_DONE; 19494} 19495 19496 19497/* =========================================================================== 19498 * For Z_RLE, simply look for runs of bytes, generate matches only of distance 19499 * one. Do not maintain a hash table. (It will be regenerated if this run of 19500 * deflate switches away from Z_RLE.) 19501 */ 19502function deflate_rle(s, flush) { 19503 var bflush; /* set if current block must be flushed */ 19504 var prev; /* byte at distance one to match */ 19505 var scan, strend; /* scan goes up to strend for length of run */ 19506 19507 var _win = s.window; 19508 19509 for (;;) { 19510 /* Make sure that we always have enough lookahead, except 19511 * at the end of the input file. We need MAX_MATCH bytes 19512 * for the longest run, plus one for the unrolled loop. 19513 */ 19514 if (s.lookahead <= MAX_MATCH) { 19515 fill_window(s); 19516 if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { 19517 return BS_NEED_MORE; 19518 } 19519 if (s.lookahead === 0) { break; } /* flush the current block */ 19520 } 19521 19522 /* See how many times the previous byte repeats */ 19523 s.match_length = 0; 19524 if (s.lookahead >= MIN_MATCH && s.strstart > 0) { 19525 scan = s.strstart - 1; 19526 prev = _win[scan]; 19527 if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { 19528 strend = s.strstart + MAX_MATCH; 19529 do { 19530 /*jshint noempty:false*/ 19531 } while (prev === _win[++scan] && prev === _win[++scan] && 19532 prev === _win[++scan] && prev === _win[++scan] && 19533 prev === _win[++scan] && prev === _win[++scan] && 19534 prev === _win[++scan] && prev === _win[++scan] && 19535 scan < strend); 19536 s.match_length = MAX_MATCH - (strend - scan); 19537 if (s.match_length > s.lookahead) { 19538 s.match_length = s.lookahead; 19539 } 19540 } 19541 //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); 19542 } 19543 19544 /* Emit match if have run of MIN_MATCH or longer, else emit literal */ 19545 if (s.match_length >= MIN_MATCH) { 19546 //check_match(s, s.strstart, s.strstart - 1, s.match_length); 19547 19548 /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ 19549 bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); 19550 19551 s.lookahead -= s.match_length; 19552 s.strstart += s.match_length; 19553 s.match_length = 0; 19554 } else { 19555 /* No match, output a literal byte */ 19556 //Tracevv((stderr,"%c", s->window[s->strstart])); 19557 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ 19558 bflush = trees._tr_tally(s, 0, s.window[s.strstart]); 19559 19560 s.lookahead--; 19561 s.strstart++; 19562 } 19563 if (bflush) { 19564 /*** FLUSH_BLOCK(s, 0); ***/ 19565 flush_block_only(s, false); 19566 if (s.strm.avail_out === 0) { 19567 return BS_NEED_MORE; 19568 } 19569 /***/ 19570 } 19571 } 19572 s.insert = 0; 19573 if (flush === Z_FINISH) { 19574 /*** FLUSH_BLOCK(s, 1); ***/ 19575 flush_block_only(s, true); 19576 if (s.strm.avail_out === 0) { 19577 return BS_FINISH_STARTED; 19578 } 19579 /***/ 19580 return BS_FINISH_DONE; 19581 } 19582 if (s.last_lit) { 19583 /*** FLUSH_BLOCK(s, 0); ***/ 19584 flush_block_only(s, false); 19585 if (s.strm.avail_out === 0) { 19586 return BS_NEED_MORE; 19587 } 19588 /***/ 19589 } 19590 return BS_BLOCK_DONE; 19591} 19592 19593/* =========================================================================== 19594 * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. 19595 * (It will be regenerated if this run of deflate switches away from Huffman.) 19596 */ 19597function deflate_huff(s, flush) { 19598 var bflush; /* set if current block must be flushed */ 19599 19600 for (;;) { 19601 /* Make sure that we have a literal to write. */ 19602 if (s.lookahead === 0) { 19603 fill_window(s); 19604 if (s.lookahead === 0) { 19605 if (flush === Z_NO_FLUSH) { 19606 return BS_NEED_MORE; 19607 } 19608 break; /* flush the current block */ 19609 } 19610 } 19611 19612 /* Output a literal byte */ 19613 s.match_length = 0; 19614 //Tracevv((stderr,"%c", s->window[s->strstart])); 19615 /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ 19616 bflush = trees._tr_tally(s, 0, s.window[s.strstart]); 19617 s.lookahead--; 19618 s.strstart++; 19619 if (bflush) { 19620 /*** FLUSH_BLOCK(s, 0); ***/ 19621 flush_block_only(s, false); 19622 if (s.strm.avail_out === 0) { 19623 return BS_NEED_MORE; 19624 } 19625 /***/ 19626 } 19627 } 19628 s.insert = 0; 19629 if (flush === Z_FINISH) { 19630 /*** FLUSH_BLOCK(s, 1); ***/ 19631 flush_block_only(s, true); 19632 if (s.strm.avail_out === 0) { 19633 return BS_FINISH_STARTED; 19634 } 19635 /***/ 19636 return BS_FINISH_DONE; 19637 } 19638 if (s.last_lit) { 19639 /*** FLUSH_BLOCK(s, 0); ***/ 19640 flush_block_only(s, false); 19641 if (s.strm.avail_out === 0) { 19642 return BS_NEED_MORE; 19643 } 19644 /***/ 19645 } 19646 return BS_BLOCK_DONE; 19647} 19648 19649/* Values for max_lazy_match, good_match and max_chain_length, depending on 19650 * the desired pack level (0..9). The values given below have been tuned to 19651 * exclude worst case performance for pathological files. Better values may be 19652 * found for specific files. 19653 */ 19654function Config(good_length, max_lazy, nice_length, max_chain, func) { 19655 this.good_length = good_length; 19656 this.max_lazy = max_lazy; 19657 this.nice_length = nice_length; 19658 this.max_chain = max_chain; 19659 this.func = func; 19660} 19661 19662var configuration_table; 19663 19664configuration_table = [ 19665 /* good lazy nice chain */ 19666 new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ 19667 new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ 19668 new Config(4, 5, 16, 8, deflate_fast), /* 2 */ 19669 new Config(4, 6, 32, 32, deflate_fast), /* 3 */ 19670 19671 new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ 19672 new Config(8, 16, 32, 32, deflate_slow), /* 5 */ 19673 new Config(8, 16, 128, 128, deflate_slow), /* 6 */ 19674 new Config(8, 32, 128, 256, deflate_slow), /* 7 */ 19675 new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ 19676 new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ 19677]; 19678 19679 19680/* =========================================================================== 19681 * Initialize the "longest match" routines for a new zlib stream 19682 */ 19683function lm_init(s) { 19684 s.window_size = 2 * s.w_size; 19685 19686 /*** CLEAR_HASH(s); ***/ 19687 zero(s.head); // Fill with NIL (= 0); 19688 19689 /* Set the default configuration parameters: 19690 */ 19691 s.max_lazy_match = configuration_table[s.level].max_lazy; 19692 s.good_match = configuration_table[s.level].good_length; 19693 s.nice_match = configuration_table[s.level].nice_length; 19694 s.max_chain_length = configuration_table[s.level].max_chain; 19695 19696 s.strstart = 0; 19697 s.block_start = 0; 19698 s.lookahead = 0; 19699 s.insert = 0; 19700 s.match_length = s.prev_length = MIN_MATCH - 1; 19701 s.match_available = 0; 19702 s.ins_h = 0; 19703} 19704 19705 19706function DeflateState() { 19707 this.strm = null; /* pointer back to this zlib stream */ 19708 this.status = 0; /* as the name implies */ 19709 this.pending_buf = null; /* output still pending */ 19710 this.pending_buf_size = 0; /* size of pending_buf */ 19711 this.pending_out = 0; /* next pending byte to output to the stream */ 19712 this.pending = 0; /* nb of bytes in the pending buffer */ 19713 this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ 19714 this.gzhead = null; /* gzip header information to write */ 19715 this.gzindex = 0; /* where in extra, name, or comment */ 19716 this.method = Z_DEFLATED; /* can only be DEFLATED */ 19717 this.last_flush = -1; /* value of flush param for previous deflate call */ 19718 19719 this.w_size = 0; /* LZ77 window size (32K by default) */ 19720 this.w_bits = 0; /* log2(w_size) (8..16) */ 19721 this.w_mask = 0; /* w_size - 1 */ 19722 19723 this.window = null; 19724 /* Sliding window. Input bytes are read into the second half of the window, 19725 * and move to the first half later to keep a dictionary of at least wSize 19726 * bytes. With this organization, matches are limited to a distance of 19727 * wSize-MAX_MATCH bytes, but this ensures that IO is always 19728 * performed with a length multiple of the block size. 19729 */ 19730 19731 this.window_size = 0; 19732 /* Actual size of window: 2*wSize, except when the user input buffer 19733 * is directly used as sliding window. 19734 */ 19735 19736 this.prev = null; 19737 /* Link to older string with same hash index. To limit the size of this 19738 * array to 64K, this link is maintained only for the last 32K strings. 19739 * An index in this array is thus a window index modulo 32K. 19740 */ 19741 19742 this.head = null; /* Heads of the hash chains or NIL. */ 19743 19744 this.ins_h = 0; /* hash index of string to be inserted */ 19745 this.hash_size = 0; /* number of elements in hash table */ 19746 this.hash_bits = 0; /* log2(hash_size) */ 19747 this.hash_mask = 0; /* hash_size-1 */ 19748 19749 this.hash_shift = 0; 19750 /* Number of bits by which ins_h must be shifted at each input 19751 * step. It must be such that after MIN_MATCH steps, the oldest 19752 * byte no longer takes part in the hash key, that is: 19753 * hash_shift * MIN_MATCH >= hash_bits 19754 */ 19755 19756 this.block_start = 0; 19757 /* Window position at the beginning of the current output block. Gets 19758 * negative when the window is moved backwards. 19759 */ 19760 19761 this.match_length = 0; /* length of best match */ 19762 this.prev_match = 0; /* previous match */ 19763 this.match_available = 0; /* set if previous match exists */ 19764 this.strstart = 0; /* start of string to insert */ 19765 this.match_start = 0; /* start of matching string */ 19766 this.lookahead = 0; /* number of valid bytes ahead in window */ 19767 19768 this.prev_length = 0; 19769 /* Length of the best match at previous step. Matches not greater than this 19770 * are discarded. This is used in the lazy match evaluation. 19771 */ 19772 19773 this.max_chain_length = 0; 19774 /* To speed up deflation, hash chains are never searched beyond this 19775 * length. A higher limit improves compression ratio but degrades the 19776 * speed. 19777 */ 19778 19779 this.max_lazy_match = 0; 19780 /* Attempt to find a better match only when the current match is strictly 19781 * smaller than this value. This mechanism is used only for compression 19782 * levels >= 4. 19783 */ 19784 // That's alias to max_lazy_match, don't use directly 19785 //this.max_insert_length = 0; 19786 /* Insert new strings in the hash table only if the match length is not 19787 * greater than this length. This saves time but degrades compression. 19788 * max_insert_length is used only for compression levels <= 3. 19789 */ 19790 19791 this.level = 0; /* compression level (1..9) */ 19792 this.strategy = 0; /* favor or force Huffman coding*/ 19793 19794 this.good_match = 0; 19795 /* Use a faster search when the previous match is longer than this */ 19796 19797 this.nice_match = 0; /* Stop searching when current match exceeds this */ 19798 19799 /* used by trees.c: */ 19800 19801 /* Didn't use ct_data typedef below to suppress compiler warning */ 19802 19803 // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ 19804 // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ 19805 // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ 19806 19807 // Use flat array of DOUBLE size, with interleaved fata, 19808 // because JS does not support effective 19809 this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); 19810 this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); 19811 this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); 19812 zero(this.dyn_ltree); 19813 zero(this.dyn_dtree); 19814 zero(this.bl_tree); 19815 19816 this.l_desc = null; /* desc. for literal tree */ 19817 this.d_desc = null; /* desc. for distance tree */ 19818 this.bl_desc = null; /* desc. for bit length tree */ 19819 19820 //ush bl_count[MAX_BITS+1]; 19821 this.bl_count = new utils.Buf16(MAX_BITS + 1); 19822 /* number of codes at each bit length for an optimal tree */ 19823 19824 //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ 19825 this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ 19826 zero(this.heap); 19827 19828 this.heap_len = 0; /* number of elements in the heap */ 19829 this.heap_max = 0; /* element of largest frequency */ 19830 /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. 19831 * The same heap array is used to build all trees. 19832 */ 19833 19834 this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; 19835 zero(this.depth); 19836 /* Depth of each subtree used as tie breaker for trees of equal frequency 19837 */ 19838 19839 this.l_buf = 0; /* buffer index for literals or lengths */ 19840 19841 this.lit_bufsize = 0; 19842 /* Size of match buffer for literals/lengths. There are 4 reasons for 19843 * limiting lit_bufsize to 64K: 19844 * - frequencies can be kept in 16 bit counters 19845 * - if compression is not successful for the first block, all input 19846 * data is still in the window so we can still emit a stored block even 19847 * when input comes from standard input. (This can also be done for 19848 * all blocks if lit_bufsize is not greater than 32K.) 19849 * - if compression is not successful for a file smaller than 64K, we can 19850 * even emit a stored file instead of a stored block (saving 5 bytes). 19851 * This is applicable only for zip (not gzip or zlib). 19852 * - creating new Huffman trees less frequently may not provide fast 19853 * adaptation to changes in the input data statistics. (Take for 19854 * example a binary file with poorly compressible code followed by 19855 * a highly compressible string table.) Smaller buffer sizes give 19856 * fast adaptation but have of course the overhead of transmitting 19857 * trees more frequently. 19858 * - I can't count above 4 19859 */ 19860 19861 this.last_lit = 0; /* running index in l_buf */ 19862 19863 this.d_buf = 0; 19864 /* Buffer index for distances. To simplify the code, d_buf and l_buf have 19865 * the same number of elements. To use different lengths, an extra flag 19866 * array would be necessary. 19867 */ 19868 19869 this.opt_len = 0; /* bit length of current block with optimal trees */ 19870 this.static_len = 0; /* bit length of current block with static trees */ 19871 this.matches = 0; /* number of string matches in current block */ 19872 this.insert = 0; /* bytes at end of window left to insert */ 19873 19874 19875 this.bi_buf = 0; 19876 /* Output buffer. bits are inserted starting at the bottom (least 19877 * significant bits). 19878 */ 19879 this.bi_valid = 0; 19880 /* Number of valid bits in bi_buf. All bits above the last valid bit 19881 * are always zero. 19882 */ 19883 19884 // Used for window memory init. We safely ignore it for JS. That makes 19885 // sense only for pointers and memory check tools. 19886 //this.high_water = 0; 19887 /* High water mark offset in window for initialized bytes -- bytes above 19888 * this are set to zero in order to avoid memory check warnings when 19889 * longest match routines access bytes past the input. This is then 19890 * updated to the new high water mark. 19891 */ 19892} 19893 19894 19895function deflateResetKeep(strm) { 19896 var s; 19897 19898 if (!strm || !strm.state) { 19899 return err(strm, Z_STREAM_ERROR); 19900 } 19901 19902 strm.total_in = strm.total_out = 0; 19903 strm.data_type = Z_UNKNOWN; 19904 19905 s = strm.state; 19906 s.pending = 0; 19907 s.pending_out = 0; 19908 19909 if (s.wrap < 0) { 19910 s.wrap = -s.wrap; 19911 /* was made negative by deflate(..., Z_FINISH); */ 19912 } 19913 s.status = (s.wrap ? INIT_STATE : BUSY_STATE); 19914 strm.adler = (s.wrap === 2) ? 19915 0 // crc32(0, Z_NULL, 0) 19916 : 19917 1; // adler32(0, Z_NULL, 0) 19918 s.last_flush = Z_NO_FLUSH; 19919 trees._tr_init(s); 19920 return Z_OK; 19921} 19922 19923 19924function deflateReset(strm) { 19925 var ret = deflateResetKeep(strm); 19926 if (ret === Z_OK) { 19927 lm_init(strm.state); 19928 } 19929 return ret; 19930} 19931 19932 19933function deflateSetHeader(strm, head) { 19934 if (!strm || !strm.state) { return Z_STREAM_ERROR; } 19935 if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } 19936 strm.state.gzhead = head; 19937 return Z_OK; 19938} 19939 19940 19941function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { 19942 if (!strm) { // === Z_NULL 19943 return Z_STREAM_ERROR; 19944 } 19945 var wrap = 1; 19946 19947 if (level === Z_DEFAULT_COMPRESSION) { 19948 level = 6; 19949 } 19950 19951 if (windowBits < 0) { /* suppress zlib wrapper */ 19952 wrap = 0; 19953 windowBits = -windowBits; 19954 } 19955 19956 else if (windowBits > 15) { 19957 wrap = 2; /* write gzip wrapper instead */ 19958 windowBits -= 16; 19959 } 19960 19961 19962 if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || 19963 windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || 19964 strategy < 0 || strategy > Z_FIXED) { 19965 return err(strm, Z_STREAM_ERROR); 19966 } 19967 19968 19969 if (windowBits === 8) { 19970 windowBits = 9; 19971 } 19972 /* until 256-byte window bug fixed */ 19973 19974 var s = new DeflateState(); 19975 19976 strm.state = s; 19977 s.strm = strm; 19978 19979 s.wrap = wrap; 19980 s.gzhead = null; 19981 s.w_bits = windowBits; 19982 s.w_size = 1 << s.w_bits; 19983 s.w_mask = s.w_size - 1; 19984 19985 s.hash_bits = memLevel + 7; 19986 s.hash_size = 1 << s.hash_bits; 19987 s.hash_mask = s.hash_size - 1; 19988 s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); 19989 19990 s.window = new utils.Buf8(s.w_size * 2); 19991 s.head = new utils.Buf16(s.hash_size); 19992 s.prev = new utils.Buf16(s.w_size); 19993 19994 // Don't need mem init magic for JS. 19995 //s.high_water = 0;
vendor: 14,614 bytes, lines 19995-20489
19995 /* nothing written to s->window yet */ 19996 19997 s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ 19998 19999 s.pending_buf_size = s.lit_bufsize * 4; 20000 20001 //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); 20002 //s->pending_buf = (uchf *) overlay; 20003 s.pending_buf = new utils.Buf8(s.pending_buf_size); 20004 20005 // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) 20006 //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); 20007 s.d_buf = 1 * s.lit_bufsize; 20008 20009 //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; 20010 s.l_buf = (1 + 2) * s.lit_bufsize; 20011 20012 s.level = level; 20013 s.strategy = strategy; 20014 s.method = method; 20015 20016 return deflateReset(strm); 20017} 20018 20019function deflateInit(strm, level) { 20020 return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); 20021} 20022 20023 20024function deflate(strm, flush) { 20025 var old_flush, s; 20026 var beg, val; // for gzip header write only 20027 20028 if (!strm || !strm.state || 20029 flush > Z_BLOCK || flush < 0) { 20030 return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; 20031 } 20032 20033 s = strm.state; 20034 20035 if (!strm.output || 20036 (!strm.input && strm.avail_in !== 0) || 20037 (s.status === FINISH_STATE && flush !== Z_FINISH)) { 20038 return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); 20039 } 20040 20041 s.strm = strm; /* just in case */ 20042 old_flush = s.last_flush; 20043 s.last_flush = flush; 20044 20045 /* Write the header */ 20046 if (s.status === INIT_STATE) { 20047 20048 if (s.wrap === 2) { // GZIP header 20049 strm.adler = 0; //crc32(0L, Z_NULL, 0); 20050 put_byte(s, 31); 20051 put_byte(s, 139); 20052 put_byte(s, 8); 20053 if (!s.gzhead) { // s->gzhead == Z_NULL 20054 put_byte(s, 0); 20055 put_byte(s, 0); 20056 put_byte(s, 0); 20057 put_byte(s, 0); 20058 put_byte(s, 0); 20059 put_byte(s, s.level === 9 ? 2 : 20060 (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 20061 4 : 0)); 20062 put_byte(s, OS_CODE); 20063 s.status = BUSY_STATE; 20064 } 20065 else { 20066 put_byte(s, (s.gzhead.text ? 1 : 0) + 20067 (s.gzhead.hcrc ? 2 : 0) + 20068 (!s.gzhead.extra ? 0 : 4) + 20069 (!s.gzhead.name ? 0 : 8) + 20070 (!s.gzhead.comment ? 0 : 16) 20071 ); 20072 put_byte(s, s.gzhead.time & 0xff); 20073 put_byte(s, (s.gzhead.time >> 8) & 0xff); 20074 put_byte(s, (s.gzhead.time >> 16) & 0xff); 20075 put_byte(s, (s.gzhead.time >> 24) & 0xff); 20076 put_byte(s, s.level === 9 ? 2 : 20077 (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 20078 4 : 0)); 20079 put_byte(s, s.gzhead.os & 0xff); 20080 if (s.gzhead.extra && s.gzhead.extra.length) { 20081 put_byte(s, s.gzhead.extra.length & 0xff); 20082 put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); 20083 } 20084 if (s.gzhead.hcrc) { 20085 strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); 20086 } 20087 s.gzindex = 0; 20088 s.status = EXTRA_STATE; 20089 } 20090 } 20091 else // DEFLATE header 20092 { 20093 var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; 20094 var level_flags = -1; 20095 20096 if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { 20097 level_flags = 0; 20098 } else if (s.level < 6) { 20099 level_flags = 1; 20100 } else if (s.level === 6) { 20101 level_flags = 2; 20102 } else { 20103 level_flags = 3; 20104 } 20105 header |= (level_flags << 6); 20106 if (s.strstart !== 0) { header |= PRESET_DICT; } 20107 header += 31 - (header % 31); 20108 20109 s.status = BUSY_STATE; 20110 putShortMSB(s, header); 20111 20112 /* Save the adler32 of the preset dictionary: */ 20113 if (s.strstart !== 0) { 20114 putShortMSB(s, strm.adler >>> 16); 20115 putShortMSB(s, strm.adler & 0xffff); 20116 } 20117 strm.adler = 1; // adler32(0L, Z_NULL, 0); 20118 } 20119 } 20120 20121//#ifdef GZIP 20122 if (s.status === EXTRA_STATE) { 20123 if (s.gzhead.extra/* != Z_NULL*/) { 20124 beg = s.pending; /* start of bytes to update crc */ 20125 20126 while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { 20127 if (s.pending === s.pending_buf_size) { 20128 if (s.gzhead.hcrc && s.pending > beg) { 20129 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20130 } 20131 flush_pending(strm); 20132 beg = s.pending; 20133 if (s.pending === s.pending_buf_size) { 20134 break; 20135 } 20136 } 20137 put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); 20138 s.gzindex++; 20139 } 20140 if (s.gzhead.hcrc && s.pending > beg) { 20141 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20142 } 20143 if (s.gzindex === s.gzhead.extra.length) { 20144 s.gzindex = 0; 20145 s.status = NAME_STATE; 20146 } 20147 } 20148 else { 20149 s.status = NAME_STATE; 20150 } 20151 } 20152 if (s.status === NAME_STATE) { 20153 if (s.gzhead.name/* != Z_NULL*/) { 20154 beg = s.pending; /* start of bytes to update crc */ 20155 //int val; 20156 20157 do { 20158 if (s.pending === s.pending_buf_size) { 20159 if (s.gzhead.hcrc && s.pending > beg) { 20160 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20161 } 20162 flush_pending(strm); 20163 beg = s.pending; 20164 if (s.pending === s.pending_buf_size) { 20165 val = 1; 20166 break; 20167 } 20168 } 20169 // JS specific: little magic to add zero terminator to end of string 20170 if (s.gzindex < s.gzhead.name.length) { 20171 val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; 20172 } else { 20173 val = 0; 20174 } 20175 put_byte(s, val); 20176 } while (val !== 0); 20177 20178 if (s.gzhead.hcrc && s.pending > beg) { 20179 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20180 } 20181 if (val === 0) { 20182 s.gzindex = 0; 20183 s.status = COMMENT_STATE; 20184 } 20185 } 20186 else { 20187 s.status = COMMENT_STATE; 20188 } 20189 } 20190 if (s.status === COMMENT_STATE) { 20191 if (s.gzhead.comment/* != Z_NULL*/) { 20192 beg = s.pending; /* start of bytes to update crc */ 20193 //int val; 20194 20195 do { 20196 if (s.pending === s.pending_buf_size) { 20197 if (s.gzhead.hcrc && s.pending > beg) { 20198 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20199 } 20200 flush_pending(strm); 20201 beg = s.pending; 20202 if (s.pending === s.pending_buf_size) { 20203 val = 1; 20204 break; 20205 } 20206 } 20207 // JS specific: little magic to add zero terminator to end of string 20208 if (s.gzindex < s.gzhead.comment.length) { 20209 val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; 20210 } else { 20211 val = 0; 20212 } 20213 put_byte(s, val); 20214 } while (val !== 0); 20215 20216 if (s.gzhead.hcrc && s.pending > beg) { 20217 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); 20218 } 20219 if (val === 0) { 20220 s.status = HCRC_STATE; 20221 } 20222 } 20223 else { 20224 s.status = HCRC_STATE; 20225 } 20226 } 20227 if (s.status === HCRC_STATE) { 20228 if (s.gzhead.hcrc) { 20229 if (s.pending + 2 > s.pending_buf_size) { 20230 flush_pending(strm); 20231 } 20232 if (s.pending + 2 <= s.pending_buf_size) { 20233 put_byte(s, strm.adler & 0xff); 20234 put_byte(s, (strm.adler >> 8) & 0xff); 20235 strm.adler = 0; //crc32(0L, Z_NULL, 0); 20236 s.status = BUSY_STATE; 20237 } 20238 } 20239 else { 20240 s.status = BUSY_STATE; 20241 } 20242 } 20243//#endif 20244 20245 /* Flush as much pending output as possible */ 20246 if (s.pending !== 0) { 20247 flush_pending(strm); 20248 if (strm.avail_out === 0) { 20249 /* Since avail_out is 0, deflate will be called again with 20250 * more output space, but possibly with both pending and 20251 * avail_in equal to zero. There won't be anything to do, 20252 * but this is not an error situation so make sure we 20253 * return OK instead of BUF_ERROR at next call of deflate: 20254 */ 20255 s.last_flush = -1; 20256 return Z_OK; 20257 } 20258 20259 /* Make sure there is something to do and avoid duplicate consecutive 20260 * flushes. For repeated and useless calls with Z_FINISH, we keep 20261 * returning Z_STREAM_END instead of Z_BUF_ERROR. 20262 */ 20263 } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && 20264 flush !== Z_FINISH) { 20265 return err(strm, Z_BUF_ERROR); 20266 } 20267 20268 /* User must not provide more input after the first FINISH: */ 20269 if (s.status === FINISH_STATE && strm.avail_in !== 0) { 20270 return err(strm, Z_BUF_ERROR); 20271 } 20272 20273 /* Start a new block or continue the current one. 20274 */ 20275 if (strm.avail_in !== 0 || s.lookahead !== 0 || 20276 (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { 20277 var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : 20278 (s.strategy === Z_RLE ? deflate_rle(s, flush) : 20279 configuration_table[s.level].func(s, flush)); 20280 20281 if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { 20282 s.status = FINISH_STATE; 20283 } 20284 if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { 20285 if (strm.avail_out === 0) { 20286 s.last_flush = -1; 20287 /* avoid BUF_ERROR next call, see above */ 20288 } 20289 return Z_OK; 20290 /* If flush != Z_NO_FLUSH && avail_out == 0, the next call 20291 * of deflate should use the same flush parameter to make sure 20292 * that the flush is complete. So we don't have to output an 20293 * empty block here, this will be done at next call. This also 20294 * ensures that for a very small output buffer, we emit at most 20295 * one empty block. 20296 */ 20297 } 20298 if (bstate === BS_BLOCK_DONE) { 20299 if (flush === Z_PARTIAL_FLUSH) { 20300 trees._tr_align(s); 20301 } 20302 else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ 20303 20304 trees._tr_stored_block(s, 0, 0, false); 20305 /* For a full flush, this empty block will be recognized 20306 * as a special marker by inflate_sync(). 20307 */ 20308 if (flush === Z_FULL_FLUSH) { 20309 /*** CLEAR_HASH(s); ***/ /* forget history */ 20310 zero(s.head); // Fill with NIL (= 0); 20311 20312 if (s.lookahead === 0) { 20313 s.strstart = 0; 20314 s.block_start = 0; 20315 s.insert = 0; 20316 } 20317 } 20318 } 20319 flush_pending(strm); 20320 if (strm.avail_out === 0) { 20321 s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ 20322 return Z_OK; 20323 } 20324 } 20325 } 20326 //Assert(strm->avail_out > 0, "bug2"); 20327 //if (strm.avail_out <= 0) { throw new Error("bug2");} 20328 20329 if (flush !== Z_FINISH) { return Z_OK; } 20330 if (s.wrap <= 0) { return Z_STREAM_END; } 20331 20332 /* Write the trailer */ 20333 if (s.wrap === 2) { 20334 put_byte(s, strm.adler & 0xff); 20335 put_byte(s, (strm.adler >> 8) & 0xff); 20336 put_byte(s, (strm.adler >> 16) & 0xff); 20337 put_byte(s, (strm.adler >> 24) & 0xff); 20338 put_byte(s, strm.total_in & 0xff); 20339 put_byte(s, (strm.total_in >> 8) & 0xff); 20340 put_byte(s, (strm.total_in >> 16) & 0xff); 20341 put_byte(s, (strm.total_in >> 24) & 0xff); 20342 } 20343 else 20344 { 20345 putShortMSB(s, strm.adler >>> 16); 20346 putShortMSB(s, strm.adler & 0xffff); 20347 } 20348 20349 flush_pending(strm); 20350 /* If avail_out is zero, the application will call deflate again 20351 * to flush the rest. 20352 */ 20353 if (s.wrap > 0) { s.wrap = -s.wrap; } 20354 /* write the trailer only once! */ 20355 return s.pending !== 0 ? Z_OK : Z_STREAM_END; 20356} 20357 20358function deflateEnd(strm) { 20359 var status; 20360 20361 if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { 20362 return Z_STREAM_ERROR; 20363 } 20364 20365 status = strm.state.status; 20366 if (status !== INIT_STATE && 20367 status !== EXTRA_STATE && 20368 status !== NAME_STATE && 20369 status !== COMMENT_STATE && 20370 status !== HCRC_STATE && 20371 status !== BUSY_STATE && 20372 status !== FINISH_STATE 20373 ) { 20374 return err(strm, Z_STREAM_ERROR); 20375 } 20376 20377 strm.state = null; 20378 20379 return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; 20380} 20381 20382 20383/* ========================================================================= 20384 * Initializes the compression dictionary from the given byte 20385 * sequence without producing any compressed output. 20386 */ 20387function deflateSetDictionary(strm, dictionary) { 20388 var dictLength = dictionary.length; 20389 20390 var s; 20391 var str, n; 20392 var wrap; 20393 var avail; 20394 var next; 20395 var input; 20396 var tmpDict; 20397 20398 if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { 20399 return Z_STREAM_ERROR; 20400 } 20401 20402 s = strm.state; 20403 wrap = s.wrap; 20404 20405 if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { 20406 return Z_STREAM_ERROR; 20407 } 20408 20409 /* when using zlib wrappers, compute Adler-32 for provided dictionary */ 20410 if (wrap === 1) { 20411 /* adler32(strm->adler, dictionary, dictLength); */ 20412 strm.adler = adler32(strm.adler, dictionary, dictLength, 0); 20413 } 20414 20415 s.wrap = 0; /* avoid computing Adler-32 in read_buf */ 20416 20417 /* if dictionary would fill window, just replace the history */ 20418 if (dictLength >= s.w_size) { 20419 if (wrap === 0) { /* already empty otherwise */ 20420 /*** CLEAR_HASH(s); ***/ 20421 zero(s.head); // Fill with NIL (= 0); 20422 s.strstart = 0; 20423 s.block_start = 0; 20424 s.insert = 0; 20425 } 20426 /* use the tail */ 20427 // dictionary = dictionary.slice(dictLength - s.w_size); 20428 tmpDict = new utils.Buf8(s.w_size); 20429 utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); 20430 dictionary = tmpDict; 20431 dictLength = s.w_size; 20432 } 20433 /* insert dictionary into window and hash */ 20434 avail = strm.avail_in; 20435 next = strm.next_in; 20436 input = strm.input; 20437 strm.avail_in = dictLength; 20438 strm.next_in = 0; 20439 strm.input = dictionary; 20440 fill_window(s); 20441 while (s.lookahead >= MIN_MATCH) { 20442 str = s.strstart; 20443 n = s.lookahead - (MIN_MATCH - 1); 20444 do { 20445 /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ 20446 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; 20447 20448 s.prev[str & s.w_mask] = s.head[s.ins_h]; 20449 20450 s.head[s.ins_h] = str; 20451 str++; 20452 } while (--n); 20453 s.strstart = str; 20454 s.lookahead = MIN_MATCH - 1; 20455 fill_window(s); 20456 } 20457 s.strstart += s.lookahead; 20458 s.block_start = s.strstart; 20459 s.insert = s.lookahead; 20460 s.lookahead = 0; 20461 s.match_length = s.prev_length = MIN_MATCH - 1; 20462 s.match_available = 0; 20463 strm.next_in = next; 20464 strm.input = input; 20465 strm.avail_in = avail; 20466 s.wrap = wrap; 20467 return Z_OK; 20468} 20469 20470 20471exports.deflateInit = deflateInit; 20472exports.deflateInit2 = deflateInit2; 20473exports.deflateReset = deflateReset; 20474exports.deflateResetKeep = deflateResetKeep; 20475exports.deflateSetHeader = deflateSetHeader; 20476exports.deflate = deflate; 20477exports.deflateEnd = deflateEnd; 20478exports.deflateSetDictionary = deflateSetDictionary; 20479exports.deflateInfo = 'pako deflate (from Nodeca project)'; 20480 20481/* Not implemented 20482exports.deflateBound = deflateBound; 20483exports.deflateCopy = deflateCopy; 20484exports.deflateParams = deflateParams; 20485exports.deflatePending = deflatePending; 20486exports.deflatePrime = deflatePrime; 20487exports.deflateTune = deflateTune; 20488*/ 20489
20490 20491/***/ }), 20492/* 155 */ 20493/***/ (function(module, exports, __webpack_require__) { 20494 20495"use strict"; 20496 20497 20498// (C) 1995-2013 Jean-loup Gailly and Mark Adler 20499// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 20500// 20501// This software is provided 'as-is', without any express or implied 20502// warranty. In no event will the authors be held liable for any damages 20503// arising from the use of this software. 20504// 20505// Permission is granted to anyone to use this software for any purpose, 20506// including commercial applications, and to alter it and redistribute it 20507// freely, subject to the following restrictions: 20508// 20509// 1. The origin of this software must not be misrepresented; you must not 20510// claim that you wrote the original software. If you use this software 20511// in a product, an acknowledgment in the product documentation would be 20512// appreciated but is not required. 20513// 2. Altered source versions must be plainly marked as such, and must not be 20514// misrepresented as being the original software. 20515// 3. This notice may not be removed or altered from any source distribution. 20516 20517var utils = __webpack_require__(34);
vendor: 5,572 bytes, lines 20517-20699
20517 20518 20519/* Public constants ==========================================================*/ 20520/* ===========================================================================*/ 20521 20522 20523//var Z_FILTERED = 1; 20524//var Z_HUFFMAN_ONLY = 2; 20525//var Z_RLE = 3; 20526var Z_FIXED = 4; 20527//var Z_DEFAULT_STRATEGY = 0; 20528 20529/* Possible values of the data_type field (though see inflate()) */ 20530var Z_BINARY = 0; 20531var Z_TEXT = 1; 20532//var Z_ASCII = 1; // = Z_TEXT 20533var Z_UNKNOWN = 2; 20534 20535/*============================================================================*/ 20536 20537 20538function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } 20539 20540// From zutil.h 20541 20542var STORED_BLOCK = 0; 20543var STATIC_TREES = 1; 20544var DYN_TREES = 2; 20545/* The three kinds of block type */ 20546 20547var MIN_MATCH = 3; 20548var MAX_MATCH = 258; 20549/* The minimum and maximum match lengths */ 20550 20551// From deflate.h 20552/* =========================================================================== 20553 * Internal compression state. 20554 */ 20555 20556var LENGTH_CODES = 29; 20557/* number of length codes, not counting the special END_BLOCK code */ 20558 20559var LITERALS = 256; 20560/* number of literal bytes 0..255 */ 20561 20562var L_CODES = LITERALS + 1 + LENGTH_CODES; 20563/* number of Literal or Length codes, including the END_BLOCK code */ 20564 20565var D_CODES = 30; 20566/* number of distance codes */ 20567 20568var BL_CODES = 19; 20569/* number of codes used to transfer the bit lengths */ 20570 20571var HEAP_SIZE = 2 * L_CODES + 1; 20572/* maximum heap size */ 20573 20574var MAX_BITS = 15; 20575/* All codes must not exceed MAX_BITS bits */ 20576 20577var Buf_size = 16; 20578/* size of bit buffer in bi_buf */ 20579 20580 20581/* =========================================================================== 20582 * Constants 20583 */ 20584 20585var MAX_BL_BITS = 7; 20586/* Bit length codes must not exceed MAX_BL_BITS bits */ 20587 20588var END_BLOCK = 256; 20589/* end of block literal code */ 20590 20591var REP_3_6 = 16; 20592/* repeat previous bit length 3-6 times (2 bits of repeat count) */ 20593 20594var REPZ_3_10 = 17; 20595/* repeat a zero length 3-10 times (3 bits of repeat count) */ 20596 20597var REPZ_11_138 = 18; 20598/* repeat a zero length 11-138 times (7 bits of repeat count) */ 20599 20600/* eslint-disable comma-spacing,array-bracket-spacing */ 20601var extra_lbits = /* extra bits for each length code */ 20602 [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; 20603 20604var extra_dbits = /* extra bits for each distance code */ 20605 [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; 20606 20607var extra_blbits = /* extra bits for each bit length code */ 20608 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; 20609 20610var bl_order = 20611 [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; 20612/* eslint-enable comma-spacing,array-bracket-spacing */ 20613 20614/* The lengths of the bit length codes are sent in order of decreasing 20615 * probability, to avoid transmitting the lengths for unused bit length codes. 20616 */ 20617 20618/* =========================================================================== 20619 * Local data. These are initialized only once. 20620 */ 20621 20622// We pre-fill arrays with 0 to avoid uninitialized gaps 20623 20624var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ 20625 20626// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 20627var static_ltree = new Array((L_CODES + 2) * 2); 20628zero(static_ltree); 20629/* The static literal tree. Since the bit lengths are imposed, there is no 20630 * need for the L_CODES extra codes used during heap construction. However 20631 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init 20632 * below). 20633 */ 20634 20635var static_dtree = new Array(D_CODES * 2); 20636zero(static_dtree); 20637/* The static distance tree. (Actually a trivial tree since all codes use 20638 * 5 bits.) 20639 */ 20640 20641var _dist_code = new Array(DIST_CODE_LEN); 20642zero(_dist_code); 20643/* Distance codes. The first 256 values correspond to the distances 20644 * 3 .. 258, the last 256 values correspond to the top 8 bits of 20645 * the 15 bit distances. 20646 */ 20647 20648var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); 20649zero(_length_code); 20650/* length code for each normalized match length (0 == MIN_MATCH) */ 20651 20652var base_length = new Array(LENGTH_CODES); 20653zero(base_length); 20654/* First normalized length for each code (0 = MIN_MATCH) */ 20655 20656var base_dist = new Array(D_CODES); 20657zero(base_dist); 20658/* First normalized distance for each code (0 = distance of 1) */ 20659 20660 20661function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { 20662 20663 this.static_tree = static_tree; /* static tree or NULL */ 20664 this.extra_bits = extra_bits; /* extra bits for each code or NULL */ 20665 this.extra_base = extra_base; /* base index for extra_bits */ 20666 this.elems = elems; /* max number of elements in the tree */ 20667 this.max_length = max_length; /* max bit length for the codes */ 20668 20669 // show if `static_tree` has data or dummy - needed for monomorphic objects 20670 this.has_stree = static_tree && static_tree.length; 20671} 20672 20673 20674var static_l_desc; 20675var static_d_desc; 20676var static_bl_desc; 20677 20678 20679function TreeDesc(dyn_tree, stat_desc) { 20680 this.dyn_tree = dyn_tree; /* the dynamic tree */ 20681 this.max_code = 0; /* largest code with non zero frequency */ 20682 this.stat_desc = stat_desc; /* the corresponding static tree */ 20683} 20684 20685 20686 20687function d_code(dist) { 20688 return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; 20689} 20690 20691 20692/* =========================================================================== 20693 * Output a short LSB first on the stream. 20694 * IN assertion: there is enough room in pendingBuf. 20695 */ 20696function put_short(s, w) { 20697// put_byte(s, (uch)((w) & 0xff)); 20698// put_byte(s, (uch)((ush)(w) >> 8)); 20699 s.pending_buf[s.pending++] = (w) & 0xff;
vendor: 4,312 bytes, lines 20700-20837
20700 s.pending_buf[s.pending++] = (w >>> 8) & 0xff; 20701} 20702 20703 20704/* =========================================================================== 20705 * Send a value on a given number of bits. 20706 * IN assertion: length <= 16 and value fits in length bits. 20707 */ 20708function send_bits(s, value, length) { 20709 if (s.bi_valid > (Buf_size - length)) { 20710 s.bi_buf |= (value << s.bi_valid) & 0xffff; 20711 put_short(s, s.bi_buf); 20712 s.bi_buf = value >> (Buf_size - s.bi_valid); 20713 s.bi_valid += length - Buf_size; 20714 } else { 20715 s.bi_buf |= (value << s.bi_valid) & 0xffff; 20716 s.bi_valid += length; 20717 } 20718} 20719 20720 20721function send_code(s, c, tree) { 20722 send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); 20723} 20724 20725 20726/* =========================================================================== 20727 * Reverse the first len bits of a code, using straightforward code (a faster 20728 * method would use a table) 20729 * IN assertion: 1 <= len <= 15 20730 */ 20731function bi_reverse(code, len) { 20732 var res = 0; 20733 do { 20734 res |= code & 1; 20735 code >>>= 1; 20736 res <<= 1; 20737 } while (--len > 0); 20738 return res >>> 1; 20739} 20740 20741 20742/* =========================================================================== 20743 * Flush the bit buffer, keeping at most 7 bits in it. 20744 */ 20745function bi_flush(s) { 20746 if (s.bi_valid === 16) { 20747 put_short(s, s.bi_buf); 20748 s.bi_buf = 0; 20749 s.bi_valid = 0; 20750 20751 } else if (s.bi_valid >= 8) { 20752 s.pending_buf[s.pending++] = s.bi_buf & 0xff; 20753 s.bi_buf >>= 8; 20754 s.bi_valid -= 8; 20755 } 20756} 20757 20758 20759/* =========================================================================== 20760 * Compute the optimal bit lengths for a tree and update the total bit length 20761 * for the current block. 20762 * IN assertion: the fields freq and dad are set, heap[heap_max] and 20763 * above are the tree nodes sorted by increasing frequency. 20764 * OUT assertions: the field len is set to the optimal bit length, the 20765 * array bl_count contains the frequencies for each bit length. 20766 * The length opt_len is updated; static_len is also updated if stree is 20767 * not null. 20768 */ 20769function gen_bitlen(s, desc) 20770// deflate_state *s; 20771// tree_desc *desc; /* the tree descriptor */ 20772{ 20773 var tree = desc.dyn_tree; 20774 var max_code = desc.max_code; 20775 var stree = desc.stat_desc.static_tree; 20776 var has_stree = desc.stat_desc.has_stree; 20777 var extra = desc.stat_desc.extra_bits; 20778 var base = desc.stat_desc.extra_base; 20779 var max_length = desc.stat_desc.max_length; 20780 var h; /* heap index */ 20781 var n, m; /* iterate over the tree elements */ 20782 var bits; /* bit length */ 20783 var xbits; /* extra bits */ 20784 var f; /* frequency */ 20785 var overflow = 0; /* number of elements with bit length too large */ 20786 20787 for (bits = 0; bits <= MAX_BITS; bits++) { 20788 s.bl_count[bits] = 0; 20789 } 20790 20791 /* In a first pass, compute the optimal bit lengths (which may 20792 * overflow in the case of the bit length tree). 20793 */ 20794 tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ 20795 20796 for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { 20797 n = s.heap[h]; 20798 bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; 20799 if (bits > max_length) { 20800 bits = max_length; 20801 overflow++; 20802 } 20803 tree[n * 2 + 1]/*.Len*/ = bits; 20804 /* We overwrite tree[n].Dad which is no longer needed */ 20805 20806 if (n > max_code) { continue; } /* not a leaf node */ 20807 20808 s.bl_count[bits]++; 20809 xbits = 0; 20810 if (n >= base) { 20811 xbits = extra[n - base]; 20812 } 20813 f = tree[n * 2]/*.Freq*/; 20814 s.opt_len += f * (bits + xbits); 20815 if (has_stree) { 20816 s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); 20817 } 20818 } 20819 if (overflow === 0) { return; } 20820 20821 // Trace((stderr,"\nbit length overflow\n")); 20822 /* This happens for example on obj2 and pic of the Calgary corpus */ 20823 20824 /* Find the first bit length which could increase: */ 20825 do { 20826 bits = max_length - 1; 20827 while (s.bl_count[bits] === 0) { bits--; } 20828 s.bl_count[bits]--; /* move one leaf down the tree */ 20829 s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ 20830 s.bl_count[max_length]--; 20831 /* The brother of the overflow item also moves one step up, 20832 * but this does not affect bl_count[max_length] 20833 */ 20834 overflow -= 2; 20835 } while (overflow > 0); 20836 20837 /* Now recompute all bit lengths, scanning in increasing frequency.
vendor: 28,951 bytes, lines 20838-21718
20838 * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all 20839 * lengths instead of fixing only the wrong ones. This idea is taken 20840 * from 'ar' written by Haruhiko Okumura.) 20841 */ 20842 for (bits = max_length; bits !== 0; bits--) { 20843 n = s.bl_count[bits]; 20844 while (n !== 0) { 20845 m = s.heap[--h]; 20846 if (m > max_code) { continue; } 20847 if (tree[m * 2 + 1]/*.Len*/ !== bits) { 20848 // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); 20849 s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; 20850 tree[m * 2 + 1]/*.Len*/ = bits; 20851 } 20852 n--; 20853 } 20854 } 20855} 20856 20857 20858/* =========================================================================== 20859 * Generate the codes for a given tree and bit counts (which need not be 20860 * optimal). 20861 * IN assertion: the array bl_count contains the bit length statistics for 20862 * the given tree and the field len is set for all tree elements. 20863 * OUT assertion: the field code is set for all tree elements of non 20864 * zero code length. 20865 */ 20866function gen_codes(tree, max_code, bl_count) 20867// ct_data *tree; /* the tree to decorate */ 20868// int max_code; /* largest code with non zero frequency */ 20869// ushf *bl_count; /* number of codes at each bit length */ 20870{ 20871 var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ 20872 var code = 0; /* running code value */ 20873 var bits; /* bit index */ 20874 var n; /* code index */ 20875 20876 /* The distribution counts are first used to generate the code values 20877 * without bit reversal. 20878 */ 20879 for (bits = 1; bits <= MAX_BITS; bits++) { 20880 next_code[bits] = code = (code + bl_count[bits - 1]) << 1; 20881 } 20882 /* Check that the bit counts in bl_count are consistent. The last code 20883 * must be all ones. 20884 */ 20885 //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1, 20886 // "inconsistent bit counts"); 20887 //Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); 20888 20889 for (n = 0; n <= max_code; n++) { 20890 var len = tree[n * 2 + 1]/*.Len*/; 20891 if (len === 0) { continue; } 20892 /* Now reverse the bits */ 20893 tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len); 20894 20895 //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", 20896 // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1)); 20897 } 20898} 20899 20900 20901/* =========================================================================== 20902 * Initialize the various 'constant' tables. 20903 */ 20904function tr_static_init() { 20905 var n; /* iterates over tree elements */ 20906 var bits; /* bit counter */ 20907 var length; /* length value */ 20908 var code; /* code value */ 20909 var dist; /* distance index */ 20910 var bl_count = new Array(MAX_BITS + 1); 20911 /* number of codes at each bit length for an optimal tree */ 20912 20913 // do check in _tr_init() 20914 //if (static_init_done) return; 20915 20916 /* For some embedded targets, global variables are not initialized: */ 20917/*#ifdef NO_INIT_GLOBAL_POINTERS 20918 static_l_desc.static_tree = static_ltree; 20919 static_l_desc.extra_bits = extra_lbits; 20920 static_d_desc.static_tree = static_dtree; 20921 static_d_desc.extra_bits = extra_dbits; 20922 static_bl_desc.extra_bits = extra_blbits; 20923#endif*/ 20924 20925 /* Initialize the mapping length (0..255) -> length code (0..28) */ 20926 length = 0; 20927 for (code = 0; code < LENGTH_CODES - 1; code++) { 20928 base_length[code] = length; 20929 for (n = 0; n < (1 << extra_lbits[code]); n++) { 20930 _length_code[length++] = code; 20931 } 20932 } 20933 //Assert (length == 256, "tr_static_init: length != 256"); 20934 /* Note that the length 255 (match length 258) can be represented 20935 * in two different ways: code 284 + 5 bits or code 285, so we 20936 * overwrite length_code[255] to use the best encoding: 20937 */ 20938 _length_code[length - 1] = code; 20939 20940 /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ 20941 dist = 0; 20942 for (code = 0; code < 16; code++) { 20943 base_dist[code] = dist; 20944 for (n = 0; n < (1 << extra_dbits[code]); n++) { 20945 _dist_code[dist++] = code; 20946 } 20947 } 20948 //Assert (dist == 256, "tr_static_init: dist != 256"); 20949 dist >>= 7; /* from now on, all distances are divided by 128 */ 20950 for (; code < D_CODES; code++) { 20951 base_dist[code] = dist << 7; 20952 for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { 20953 _dist_code[256 + dist++] = code; 20954 } 20955 } 20956 //Assert (dist == 256, "tr_static_init: 256+dist != 512"); 20957 20958 /* Construct the codes of the static literal tree */ 20959 for (bits = 0; bits <= MAX_BITS; bits++) { 20960 bl_count[bits] = 0; 20961 } 20962 20963 n = 0; 20964 while (n <= 143) { 20965 static_ltree[n * 2 + 1]/*.Len*/ = 8; 20966 n++; 20967 bl_count[8]++; 20968 } 20969 while (n <= 255) { 20970 static_ltree[n * 2 + 1]/*.Len*/ = 9; 20971 n++; 20972 bl_count[9]++; 20973 } 20974 while (n <= 279) { 20975 static_ltree[n * 2 + 1]/*.Len*/ = 7; 20976 n++; 20977 bl_count[7]++; 20978 } 20979 while (n <= 287) { 20980 static_ltree[n * 2 + 1]/*.Len*/ = 8; 20981 n++; 20982 bl_count[8]++; 20983 } 20984 /* Codes 286 and 287 do not exist, but we must include them in the 20985 * tree construction to get a canonical Huffman tree (longest code 20986 * all ones) 20987 */ 20988 gen_codes(static_ltree, L_CODES + 1, bl_count); 20989 20990 /* The static distance tree is trivial: */ 20991 for (n = 0; n < D_CODES; n++) { 20992 static_dtree[n * 2 + 1]/*.Len*/ = 5; 20993 static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); 20994 } 20995 20996 // Now data ready and we can init static trees 20997 static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); 20998 static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); 20999 static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); 21000 21001 //static_init_done = true; 21002} 21003 21004 21005/* =========================================================================== 21006 * Initialize a new block. 21007 */ 21008function init_block(s) { 21009 var n; /* iterates over tree elements */ 21010 21011 /* Initialize the trees. */ 21012 for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } 21013 for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } 21014 for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } 21015 21016 s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; 21017 s.opt_len = s.static_len = 0; 21018 s.last_lit = s.matches = 0; 21019} 21020 21021 21022/* =========================================================================== 21023 * Flush the bit buffer and align the output on a byte boundary 21024 */ 21025function bi_windup(s) 21026{ 21027 if (s.bi_valid > 8) { 21028 put_short(s, s.bi_buf); 21029 } else if (s.bi_valid > 0) { 21030 //put_byte(s, (Byte)s->bi_buf); 21031 s.pending_buf[s.pending++] = s.bi_buf; 21032 } 21033 s.bi_buf = 0; 21034 s.bi_valid = 0; 21035} 21036 21037/* =========================================================================== 21038 * Copy a stored block, storing first the length and its 21039 * one's complement if requested. 21040 */ 21041function copy_block(s, buf, len, header) 21042//DeflateState *s; 21043//charf *buf; /* the input data */ 21044//unsigned len; /* its length */ 21045//int header; /* true if block header must be written */ 21046{ 21047 bi_windup(s); /* align on byte boundary */ 21048 21049 if (header) { 21050 put_short(s, len); 21051 put_short(s, ~len); 21052 } 21053// while (len--) { 21054// put_byte(s, *buf++); 21055// } 21056 utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); 21057 s.pending += len; 21058} 21059 21060/* =========================================================================== 21061 * Compares to subtrees, using the tree depth as tie breaker when 21062 * the subtrees have equal frequency. This minimizes the worst case length. 21063 */ 21064function smaller(tree, n, m, depth) { 21065 var _n2 = n * 2; 21066 var _m2 = m * 2; 21067 return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || 21068 (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); 21069} 21070 21071/* =========================================================================== 21072 * Restore the heap property by moving down the tree starting at node k, 21073 * exchanging a node with the smallest of its two sons if necessary, stopping 21074 * when the heap property is re-established (each father smaller than its 21075 * two sons). 21076 */ 21077function pqdownheap(s, tree, k) 21078// deflate_state *s; 21079// ct_data *tree; /* the tree to restore */ 21080// int k; /* node to move down */ 21081{ 21082 var v = s.heap[k]; 21083 var j = k << 1; /* left son of k */ 21084 while (j <= s.heap_len) { 21085 /* Set j to the smallest of the two sons: */ 21086 if (j < s.heap_len && 21087 smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { 21088 j++; 21089 } 21090 /* Exit if v is smaller than both sons */ 21091 if (smaller(tree, v, s.heap[j], s.depth)) { break; } 21092 21093 /* Exchange v with the smallest son */ 21094 s.heap[k] = s.heap[j]; 21095 k = j; 21096 21097 /* And continue down the tree, setting j to the left son of k */ 21098 j <<= 1; 21099 } 21100 s.heap[k] = v; 21101} 21102 21103 21104// inlined manually 21105// var SMALLEST = 1; 21106 21107/* =========================================================================== 21108 * Send the block data compressed using the given Huffman trees 21109 */ 21110function compress_block(s, ltree, dtree) 21111// deflate_state *s; 21112// const ct_data *ltree; /* literal tree */ 21113// const ct_data *dtree; /* distance tree */ 21114{ 21115 var dist; /* distance of matched string */ 21116 var lc; /* match length or unmatched char (if dist == 0) */ 21117 var lx = 0; /* running index in l_buf */ 21118 var code; /* the code to send */ 21119 var extra; /* number of extra bits to send */ 21120 21121 if (s.last_lit !== 0) { 21122 do { 21123 dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); 21124 lc = s.pending_buf[s.l_buf + lx]; 21125 lx++; 21126 21127 if (dist === 0) { 21128 send_code(s, lc, ltree); /* send a literal byte */ 21129 //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); 21130 } else { 21131 /* Here, lc is the match length - MIN_MATCH */ 21132 code = _length_code[lc]; 21133 send_code(s, code + LITERALS + 1, ltree); /* send the length code */ 21134 extra = extra_lbits[code]; 21135 if (extra !== 0) { 21136 lc -= base_length[code]; 21137 send_bits(s, lc, extra); /* send the extra length bits */ 21138 } 21139 dist--; /* dist is now the match distance - 1 */ 21140 code = d_code(dist); 21141 //Assert (code < D_CODES, "bad d_code"); 21142 21143 send_code(s, code, dtree); /* send the distance code */ 21144 extra = extra_dbits[code]; 21145 if (extra !== 0) { 21146 dist -= base_dist[code]; 21147 send_bits(s, dist, extra); /* send the extra distance bits */ 21148 } 21149 } /* literal or match pair ? */ 21150 21151 /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ 21152 //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, 21153 // "pendingBuf overflow"); 21154 21155 } while (lx < s.last_lit); 21156 } 21157 21158 send_code(s, END_BLOCK, ltree); 21159} 21160 21161 21162/* =========================================================================== 21163 * Construct one Huffman tree and assigns the code bit strings and lengths. 21164 * Update the total bit length for the current block. 21165 * IN assertion: the field freq is set for all tree elements. 21166 * OUT assertions: the fields len and code are set to the optimal bit length 21167 * and corresponding code. The length opt_len is updated; static_len is 21168 * also updated if stree is not null. The field max_code is set. 21169 */ 21170function build_tree(s, desc) 21171// deflate_state *s; 21172// tree_desc *desc; /* the tree descriptor */ 21173{ 21174 var tree = desc.dyn_tree; 21175 var stree = desc.stat_desc.static_tree; 21176 var has_stree = desc.stat_desc.has_stree; 21177 var elems = desc.stat_desc.elems; 21178 var n, m; /* iterate over heap elements */ 21179 var max_code = -1; /* largest code with non zero frequency */ 21180 var node; /* new node being created */ 21181 21182 /* Construct the initial heap, with least frequent element in 21183 * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. 21184 * heap[0] is not used. 21185 */ 21186 s.heap_len = 0; 21187 s.heap_max = HEAP_SIZE; 21188 21189 for (n = 0; n < elems; n++) { 21190 if (tree[n * 2]/*.Freq*/ !== 0) { 21191 s.heap[++s.heap_len] = max_code = n; 21192 s.depth[n] = 0; 21193 21194 } else { 21195 tree[n * 2 + 1]/*.Len*/ = 0; 21196 } 21197 } 21198 21199 /* The pkzip format requires that at least one distance code exists, 21200 * and that at least one bit should be sent even if there is only one 21201 * possible code. So to avoid special checks later on we force at least 21202 * two codes of non zero frequency. 21203 */ 21204 while (s.heap_len < 2) { 21205 node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); 21206 tree[node * 2]/*.Freq*/ = 1; 21207 s.depth[node] = 0; 21208 s.opt_len--; 21209 21210 if (has_stree) { 21211 s.static_len -= stree[node * 2 + 1]/*.Len*/; 21212 } 21213 /* node is 0 or 1 so it does not have extra bits */ 21214 } 21215 desc.max_code = max_code; 21216 21217 /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, 21218 * establish sub-heaps of increasing lengths: 21219 */ 21220 for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } 21221 21222 /* Construct the Huffman tree by repeatedly combining the least two 21223 * frequent nodes. 21224 */ 21225 node = elems; /* next internal node of the tree */ 21226 do { 21227 //pqremove(s, tree, n); /* n = node of least frequency */ 21228 /*** pqremove ***/ 21229 n = s.heap[1/*SMALLEST*/]; 21230 s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; 21231 pqdownheap(s, tree, 1/*SMALLEST*/); 21232 /***/ 21233 21234 m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ 21235 21236 s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ 21237 s.heap[--s.heap_max] = m; 21238 21239 /* Create a new node father of n and m */ 21240 tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; 21241 s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; 21242 tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; 21243 21244 /* and insert the new node in the heap */ 21245 s.heap[1/*SMALLEST*/] = node++; 21246 pqdownheap(s, tree, 1/*SMALLEST*/); 21247 21248 } while (s.heap_len >= 2); 21249 21250 s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; 21251 21252 /* At this point, the fields freq and dad are set. We can now 21253 * generate the bit lengths. 21254 */ 21255 gen_bitlen(s, desc); 21256 21257 /* The field len is now set, we can generate the bit codes */ 21258 gen_codes(tree, max_code, s.bl_count); 21259} 21260 21261 21262/* =========================================================================== 21263 * Scan a literal or distance tree to determine the frequencies of the codes 21264 * in the bit length tree. 21265 */ 21266function scan_tree(s, tree, max_code) 21267// deflate_state *s; 21268// ct_data *tree; /* the tree to be scanned */ 21269// int max_code; /* and its largest code of non zero frequency */ 21270{ 21271 var n; /* iterates over all tree elements */ 21272 var prevlen = -1; /* last emitted length */ 21273 var curlen; /* length of current code */ 21274 21275 var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ 21276 21277 var count = 0; /* repeat count of the current code */ 21278 var max_count = 7; /* max repeat count */ 21279 var min_count = 4; /* min repeat count */ 21280 21281 if (nextlen === 0) { 21282 max_count = 138; 21283 min_count = 3; 21284 } 21285 tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ 21286 21287 for (n = 0; n <= max_code; n++) { 21288 curlen = nextlen; 21289 nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; 21290 21291 if (++count < max_count && curlen === nextlen) { 21292 continue; 21293 21294 } else if (count < min_count) { 21295 s.bl_tree[curlen * 2]/*.Freq*/ += count; 21296 21297 } else if (curlen !== 0) { 21298 21299 if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } 21300 s.bl_tree[REP_3_6 * 2]/*.Freq*/++; 21301 21302 } else if (count <= 10) { 21303 s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; 21304 21305 } else { 21306 s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; 21307 } 21308 21309 count = 0; 21310 prevlen = curlen; 21311 21312 if (nextlen === 0) { 21313 max_count = 138; 21314 min_count = 3; 21315 21316 } else if (curlen === nextlen) { 21317 max_count = 6; 21318 min_count = 3; 21319 21320 } else { 21321 max_count = 7; 21322 min_count = 4; 21323 } 21324 } 21325} 21326 21327 21328/* =========================================================================== 21329 * Send a literal or distance tree in compressed form, using the codes in 21330 * bl_tree. 21331 */ 21332function send_tree(s, tree, max_code) 21333// deflate_state *s; 21334// ct_data *tree; /* the tree to be scanned */ 21335// int max_code; /* and its largest code of non zero frequency */ 21336{ 21337 var n; /* iterates over all tree elements */ 21338 var prevlen = -1; /* last emitted length */ 21339 var curlen; /* length of current code */ 21340 21341 var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ 21342 21343 var count = 0; /* repeat count of the current code */ 21344 var max_count = 7; /* max repeat count */ 21345 var min_count = 4; /* min repeat count */ 21346 21347 /* tree[max_code+1].Len = -1; */ /* guard already set */ 21348 if (nextlen === 0) { 21349 max_count = 138; 21350 min_count = 3; 21351 } 21352 21353 for (n = 0; n <= max_code; n++) { 21354 curlen = nextlen; 21355 nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; 21356 21357 if (++count < max_count && curlen === nextlen) { 21358 continue; 21359 21360 } else if (count < min_count) { 21361 do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); 21362 21363 } else if (curlen !== 0) { 21364 if (curlen !== prevlen) { 21365 send_code(s, curlen, s.bl_tree); 21366 count--; 21367 } 21368 //Assert(count >= 3 && count <= 6, " 3_6?"); 21369 send_code(s, REP_3_6, s.bl_tree); 21370 send_bits(s, count - 3, 2); 21371 21372 } else if (count <= 10) { 21373 send_code(s, REPZ_3_10, s.bl_tree); 21374 send_bits(s, count - 3, 3); 21375 21376 } else { 21377 send_code(s, REPZ_11_138, s.bl_tree); 21378 send_bits(s, count - 11, 7); 21379 } 21380 21381 count = 0; 21382 prevlen = curlen; 21383 if (nextlen === 0) { 21384 max_count = 138; 21385 min_count = 3; 21386 21387 } else if (curlen === nextlen) { 21388 max_count = 6; 21389 min_count = 3; 21390 21391 } else { 21392 max_count = 7; 21393 min_count = 4; 21394 } 21395 } 21396} 21397 21398 21399/* =========================================================================== 21400 * Construct the Huffman tree for the bit lengths and return the index in 21401 * bl_order of the last bit length code to send. 21402 */ 21403function build_bl_tree(s) { 21404 var max_blindex; /* index of last bit length code of non zero freq */ 21405 21406 /* Determine the bit length frequencies for literal and distance trees */ 21407 scan_tree(s, s.dyn_ltree, s.l_desc.max_code); 21408 scan_tree(s, s.dyn_dtree, s.d_desc.max_code); 21409 21410 /* Build the bit length tree: */ 21411 build_tree(s, s.bl_desc); 21412 /* opt_len now includes the length of the tree representations, except 21413 * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. 21414 */ 21415 21416 /* Determine the number of bit length codes to send. The pkzip format 21417 * requires that at least 4 bit length codes be sent. (appnote.txt says 21418 * 3 but the actual value used is 4.) 21419 */ 21420 for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { 21421 if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { 21422 break; 21423 } 21424 } 21425 /* Update opt_len to include the bit length tree and counts */ 21426 s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; 21427 //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", 21428 // s->opt_len, s->static_len)); 21429 21430 return max_blindex; 21431} 21432 21433 21434/* =========================================================================== 21435 * Send the header for a block using dynamic Huffman trees: the counts, the 21436 * lengths of the bit length codes, the literal tree and the distance tree. 21437 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. 21438 */ 21439function send_all_trees(s, lcodes, dcodes, blcodes) 21440// deflate_state *s; 21441// int lcodes, dcodes, blcodes; /* number of codes for each tree */ 21442{ 21443 var rank; /* index in bl_order */ 21444 21445 //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); 21446 //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, 21447 // "too many codes"); 21448 //Tracev((stderr, "\nbl counts: ")); 21449 send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ 21450 send_bits(s, dcodes - 1, 5); 21451 send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ 21452 for (rank = 0; rank < blcodes; rank++) { 21453 //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); 21454 send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); 21455 } 21456 //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); 21457 21458 send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ 21459 //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); 21460 21461 send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ 21462 //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); 21463} 21464 21465 21466/* =========================================================================== 21467 * Check if the data type is TEXT or BINARY, using the following algorithm: 21468 * - TEXT if the two conditions below are satisfied: 21469 * a) There are no non-portable control characters belonging to the 21470 * "black list" (0..6, 14..25, 28..31). 21471 * b) There is at least one printable character belonging to the 21472 * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). 21473 * - BINARY otherwise. 21474 * - The following partially-portable control characters form a 21475 * "gray list" that is ignored in this detection algorithm: 21476 * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). 21477 * IN assertion: the fields Freq of dyn_ltree are set. 21478 */ 21479function detect_data_type(s) { 21480 /* black_mask is the bit mask of black-listed bytes 21481 * set bits 0..6, 14..25, and 28..31 21482 * 0xf3ffc07f = binary 11110011111111111100000001111111 21483 */ 21484 var black_mask = 0xf3ffc07f; 21485 var n; 21486 21487 /* Check for non-textual ("black-listed") bytes. */ 21488 for (n = 0; n <= 31; n++, black_mask >>>= 1) { 21489 if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { 21490 return Z_BINARY; 21491 } 21492 } 21493 21494 /* Check for textual ("white-listed") bytes. */ 21495 if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || 21496 s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { 21497 return Z_TEXT; 21498 } 21499 for (n = 32; n < LITERALS; n++) { 21500 if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { 21501 return Z_TEXT; 21502 } 21503 } 21504 21505 /* There are no "black-listed" or "white-listed" bytes: 21506 * this stream either is empty or has tolerated ("gray-listed") bytes only. 21507 */ 21508 return Z_BINARY; 21509} 21510 21511 21512var static_init_done = false; 21513 21514/* =========================================================================== 21515 * Initialize the tree data structures for a new zlib stream. 21516 */ 21517function _tr_init(s) 21518{ 21519 21520 if (!static_init_done) { 21521 tr_static_init(); 21522 static_init_done = true; 21523 } 21524 21525 s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); 21526 s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); 21527 s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); 21528 21529 s.bi_buf = 0; 21530 s.bi_valid = 0; 21531 21532 /* Initialize the first block of the first file: */ 21533 init_block(s); 21534} 21535 21536 21537/* =========================================================================== 21538 * Send a stored block 21539 */ 21540function _tr_stored_block(s, buf, stored_len, last) 21541//DeflateState *s; 21542//charf *buf; /* input block */ 21543//ulg stored_len; /* length of input block */ 21544//int last; /* one if this is the last block for a file */ 21545{ 21546 send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ 21547 copy_block(s, buf, stored_len, true); /* with header */ 21548} 21549 21550 21551/* =========================================================================== 21552 * Send one empty static block to give enough lookahead for inflate. 21553 * This takes 10 bits, of which 7 may remain in the bit buffer. 21554 */ 21555function _tr_align(s) { 21556 send_bits(s, STATIC_TREES << 1, 3); 21557 send_code(s, END_BLOCK, static_ltree); 21558 bi_flush(s); 21559} 21560 21561 21562/* =========================================================================== 21563 * Determine the best encoding for the current block: dynamic trees, static 21564 * trees or store, and output the encoded block to the zip file. 21565 */ 21566function _tr_flush_block(s, buf, stored_len, last) 21567//DeflateState *s; 21568//charf *buf; /* input block, or NULL if too old */ 21569//ulg stored_len; /* length of input block */ 21570//int last; /* one if this is the last block for a file */ 21571{ 21572 var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ 21573 var max_blindex = 0; /* index of last bit length code of non zero freq */ 21574 21575 /* Build the Huffman trees unless a stored block is forced */ 21576 if (s.level > 0) { 21577 21578 /* Check if the file is binary or text */ 21579 if (s.strm.data_type === Z_UNKNOWN) { 21580 s.strm.data_type = detect_data_type(s); 21581 } 21582 21583 /* Construct the literal and distance trees */ 21584 build_tree(s, s.l_desc); 21585 // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, 21586 // s->static_len)); 21587 21588 build_tree(s, s.d_desc); 21589 // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, 21590 // s->static_len)); 21591 /* At this point, opt_len and static_len are the total bit lengths of 21592 * the compressed block data, excluding the tree representations. 21593 */ 21594 21595 /* Build the bit length tree for the above two trees, and get the index 21596 * in bl_order of the last bit length code to send. 21597 */ 21598 max_blindex = build_bl_tree(s); 21599 21600 /* Determine the best encoding. Compute the block lengths in bytes. */ 21601 opt_lenb = (s.opt_len + 3 + 7) >>> 3; 21602 static_lenb = (s.static_len + 3 + 7) >>> 3; 21603 21604 // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", 21605 // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, 21606 // s->last_lit)); 21607 21608 if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } 21609 21610 } else { 21611 // Assert(buf != (char*)0, "lost buf"); 21612 opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ 21613 } 21614 21615 if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { 21616 /* 4: two words for the lengths */ 21617 21618 /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. 21619 * Otherwise we can't have processed more than WSIZE input bytes since 21620 * the last block flush, because compression would have been 21621 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to 21622 * transform a block into a stored block. 21623 */ 21624 _tr_stored_block(s, buf, stored_len, last); 21625 21626 } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { 21627 21628 send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); 21629 compress_block(s, static_ltree, static_dtree); 21630 21631 } else { 21632 send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); 21633 send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); 21634 compress_block(s, s.dyn_ltree, s.dyn_dtree); 21635 } 21636 // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); 21637 /* The above check is made mod 2^32, for files larger than 512 MB 21638 * and uLong implemented on 32 bits. 21639 */ 21640 init_block(s); 21641 21642 if (last) { 21643 bi_windup(s); 21644 } 21645 // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, 21646 // s->compressed_len-7*last)); 21647} 21648 21649/* =========================================================================== 21650 * Save the match info and tally the frequency counts. Return true if 21651 * the current block must be flushed. 21652 */ 21653function _tr_tally(s, dist, lc) 21654// deflate_state *s; 21655// unsigned dist; /* distance of matched string */ 21656// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ 21657{ 21658 //var out_length, in_length, dcode; 21659 21660 s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; 21661 s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; 21662 21663 s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; 21664 s.last_lit++; 21665 21666 if (dist === 0) { 21667 /* lc is the unmatched char */ 21668 s.dyn_ltree[lc * 2]/*.Freq*/++; 21669 } else { 21670 s.matches++; 21671 /* Here, lc is the match length - MIN_MATCH */ 21672 dist--; /* dist = match distance - 1 */ 21673 //Assert((ush)dist < (ush)MAX_DIST(s) && 21674 // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && 21675 // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); 21676 21677 s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; 21678 s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; 21679 } 21680 21681// (!) This block is disabled in zlib defaults, 21682// don't enable it for binary compatibility 21683 21684//#ifdef TRUNCATE_BLOCK 21685// /* Try to guess if it is profitable to stop the current block here */ 21686// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { 21687// /* Compute an upper bound for the compressed length */ 21688// out_length = s.last_lit*8; 21689// in_length = s.strstart - s.block_start; 21690// 21691// for (dcode = 0; dcode < D_CODES; dcode++) { 21692// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); 21693// } 21694// out_length >>>= 3; 21695// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", 21696// // s->last_lit, in_length, out_length, 21697// // 100L - out_length*100L/in_length)); 21698// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { 21699// return true; 21700// } 21701// } 21702//#endif 21703 21704 return (s.last_lit === s.lit_bufsize - 1); 21705 /* We avoid equality with lit_bufsize because of wraparound at 64K 21706 * on 16 bit machines and because stored blocks are restricted to 21707 * 64K-1 bytes. 21708 */ 21709} 21710 21711exports._tr_init = _tr_init; 21712exports._tr_stored_block = _tr_stored_block; 21713exports._tr_flush_block = _tr_flush_block; 21714exports._tr_tally = _tr_tally; 21715exports._tr_align = _tr_align; 21716 21717 21718/***/ }
21718), 21719/* 156 */ 21720/***/ (function(module, exports, __webpack_require__) { 21721 21722"use strict"; 21723 21724 21725// (C) 1995-2013 Jean-loup Gailly and Mark Adler 21726// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 21727// 21728// This software is provided 'as-is', without any express or implied 21729// warranty. In no event will the authors be held liable for any damages 21730// arising from the use of this software. 21731// 21732// Permission is granted to anyone to use this software for any purpose, 21733// including commercial applications, and to alter it and redistribute it 21734// freely, subject to the following restrictions: 21735// 21736// 1. The origin of this software must not be misrepresented; you must not 21737// claim that you wrote the original software. If you use this software 21738// in a product, an acknowledgment in the product documentation would be 21739// appreciated but is not required. 21740// 2. Altered source versions must be plainly marked as such, and must not be 21741// misrepresented as being the original software. 21742// 3. This notice may not be removed or altered from any source distribution. 21743 21744module.exports = { 21745 2: 'need dictionary', /* Z_NEED_DICT 2 */ 21746 1: 'stream end', /* Z_STREAM_END 1 */ 21747 0: '', /* Z_OK 0 */ 21748 '-1': 'file error', /* Z_ERRNO (-1) */ 21749 '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ 21750 '-3': 'data error', /* Z_DATA_ERROR (-3) */ 21751 '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ 21752 '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ 21753 '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ 21754}; 21755 21756 21757/***/ }), 21758/* 157 */ 21759/***/ (function(module, exports, __webpack_require__) { 21760 21761"use strict"; 21762 21763 21764// (C) 1995-2013 Jean-loup Gailly and Mark Adler 21765// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 21766// 21767// This software is provided 'as-is', without any express or implied 21768// warranty. In no event will the authors be held liable for any damages 21769// arising from the use of this software. 21770// 21771// Permission is granted to anyone to use this software for any purpose, 21772// including commercial applications, and to alter it and redistribute it 21773// freely, subject to the following restrictions: 21774// 21775// 1. The origin of this software must not be misrepresented; you must not 21776// claim that you wrote the original software. If you use this software 21777// in a product, an acknowledgment in the product documentation would be 21778// appreciated but is not required. 21779// 2. Altered source versions must be plainly marked as such, and must not be 21780// misrepresented as being the original software. 21781// 3. This notice may not be removed or altered from any source distribution. 21782 21783var utils = __webpack_require__(34); 21784var adler32 = __webpack_require__(89); 21785var crc32 = __webpack_require__(90); 21786var inflate_fast = __webpack_require__(158); 21787var inflate_table = __webpack_require__(159
vendor: 34,763 bytes, lines 21787-22852
21787); 21788 21789var CODES = 0; 21790var LENS = 1; 21791var DISTS = 2; 21792 21793/* Public constants ==========================================================*/ 21794/* ===========================================================================*/ 21795 21796 21797/* Allowed flush values; see deflate() and inflate() below for details */ 21798//var Z_NO_FLUSH = 0; 21799//var Z_PARTIAL_FLUSH = 1; 21800//var Z_SYNC_FLUSH = 2; 21801//var Z_FULL_FLUSH = 3; 21802var Z_FINISH = 4; 21803var Z_BLOCK = 5; 21804var Z_TREES = 6; 21805 21806 21807/* Return codes for the compression/decompression functions. Negative values 21808 * are errors, positive values are used for special but normal events. 21809 */ 21810var Z_OK = 0; 21811var Z_STREAM_END = 1; 21812var Z_NEED_DICT = 2; 21813//var Z_ERRNO = -1; 21814var Z_STREAM_ERROR = -2; 21815var Z_DATA_ERROR = -3; 21816var Z_MEM_ERROR = -4; 21817var Z_BUF_ERROR = -5; 21818//var Z_VERSION_ERROR = -6; 21819 21820/* The deflate compression method */ 21821var Z_DEFLATED = 8; 21822 21823 21824/* STATES ====================================================================*/ 21825/* ===========================================================================*/ 21826 21827 21828var HEAD = 1; /* i: waiting for magic header */ 21829var FLAGS = 2; /* i: waiting for method and flags (gzip) */ 21830var TIME = 3; /* i: waiting for modification time (gzip) */ 21831var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ 21832var EXLEN = 5; /* i: waiting for extra length (gzip) */ 21833var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ 21834var NAME = 7; /* i: waiting for end of file name (gzip) */ 21835var COMMENT = 8; /* i: waiting for end of comment (gzip) */ 21836var HCRC = 9; /* i: waiting for header crc (gzip) */ 21837var DICTID = 10; /* i: waiting for dictionary check value */ 21838var DICT = 11; /* waiting for inflateSetDictionary() call */ 21839var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ 21840var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ 21841var STORED = 14; /* i: waiting for stored size (length and complement) */ 21842var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ 21843var COPY = 16; /* i/o: waiting for input or output to copy stored block */ 21844var TABLE = 17; /* i: waiting for dynamic block table lengths */ 21845var LENLENS = 18; /* i: waiting for code length code lengths */ 21846var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ 21847var LEN_ = 20; /* i: same as LEN below, but only first time in */ 21848var LEN = 21; /* i: waiting for length/lit/eob code */ 21849var LENEXT = 22; /* i: waiting for length extra bits */ 21850var DIST = 23; /* i: waiting for distance code */ 21851var DISTEXT = 24; /* i: waiting for distance extra bits */ 21852var MATCH = 25; /* o: waiting for output space to copy string */ 21853var LIT = 26; /* o: waiting for output space to write literal */ 21854var CHECK = 27; /* i: waiting for 32-bit check value */ 21855var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ 21856var DONE = 29; /* finished check, done -- remain here until reset */ 21857var BAD = 30; /* got a data error -- remain here until reset */ 21858var MEM = 31; /* got an inflate() memory error -- remain here until reset */ 21859var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ 21860 21861/* ===========================================================================*/ 21862 21863 21864 21865var ENOUGH_LENS = 852; 21866var ENOUGH_DISTS = 592; 21867//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); 21868 21869var MAX_WBITS = 15; 21870/* 32K LZ77 window */ 21871var DEF_WBITS = MAX_WBITS; 21872 21873 21874function zswap32(q) { 21875 return (((q >>> 24) & 0xff) + 21876 ((q >>> 8) & 0xff00) + 21877 ((q & 0xff00) << 8) + 21878 ((q & 0xff) << 24)); 21879} 21880 21881 21882function InflateState() { 21883 this.mode = 0; /* current inflate mode */ 21884 this.last = false; /* true if processing last block */ 21885 this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ 21886 this.havedict = false; /* true if dictionary provided */ 21887 this.flags = 0; /* gzip header method and flags (0 if zlib) */ 21888 this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ 21889 this.check = 0; /* protected copy of check value */ 21890 this.total = 0; /* protected copy of output count */ 21891 // TODO: may be {} 21892 this.head = null; /* where to save gzip header information */ 21893 21894 /* sliding window */ 21895 this.wbits = 0; /* log base 2 of requested window size */ 21896 this.wsize = 0; /* window size or zero if not using window */ 21897 this.whave = 0; /* valid bytes in the window */ 21898 this.wnext = 0; /* window write index */ 21899 this.window = null; /* allocated sliding window, if needed */ 21900 21901 /* bit accumulator */ 21902 this.hold = 0; /* input bit accumulator */ 21903 this.bits = 0; /* number of bits in "in" */ 21904 21905 /* for string and stored block copying */ 21906 this.length = 0; /* literal or length of data to copy */ 21907 this.offset = 0; /* distance back to copy string from */ 21908 21909 /* for table and code decoding */ 21910 this.extra = 0; /* extra bits needed */ 21911 21912 /* fixed and dynamic code tables */ 21913 this.lencode = null; /* starting table for length/literal codes */ 21914 this.distcode = null; /* starting table for distance codes */ 21915 this.lenbits = 0; /* index bits for lencode */ 21916 this.distbits = 0; /* index bits for distcode */ 21917 21918 /* dynamic table building */ 21919 this.ncode = 0; /* number of code length code lengths */ 21920 this.nlen = 0; /* number of length code lengths */ 21921 this.ndist = 0; /* number of distance code lengths */ 21922 this.have = 0; /* number of code lengths in lens[] */ 21923 this.next = null; /* next available space in codes[] */ 21924 21925 this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ 21926 this.work = new utils.Buf16(288); /* work area for code table building */ 21927 21928 /* 21929 because we don't have pointers in js, we use lencode and distcode directly 21930 as buffers so we don't need codes 21931 */ 21932 //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ 21933 this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ 21934 this.distdyn = null; /* dynamic table for distance codes (JS specific) */ 21935 this.sane = 0; /* if false, allow invalid distance too far */ 21936 this.back = 0; /* bits back of last unprocessed length/lit */ 21937 this.was = 0; /* initial length of match */ 21938} 21939 21940function inflateResetKeep(strm) { 21941 var state; 21942 21943 if (!strm || !strm.state) { return Z_STREAM_ERROR; } 21944 state = strm.state; 21945 strm.total_in = strm.total_out = state.total = 0; 21946 strm.msg = ''; /*Z_NULL*/ 21947 if (state.wrap) { /* to support ill-conceived Java test suite */ 21948 strm.adler = state.wrap & 1; 21949 } 21950 state.mode = HEAD; 21951 state.last = 0; 21952 state.havedict = 0; 21953 state.dmax = 32768; 21954 state.head = null/*Z_NULL*/; 21955 state.hold = 0; 21956 state.bits = 0; 21957 //state.lencode = state.distcode = state.next = state.codes; 21958 state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); 21959 state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); 21960 21961 state.sane = 1; 21962 state.back = -1; 21963 //Tracev((stderr, "inflate: reset\n")); 21964 return Z_OK; 21965} 21966 21967function inflateReset(strm) { 21968 var state; 21969 21970 if (!strm || !strm.state) { return Z_STREAM_ERROR; } 21971 state = strm.state; 21972 state.wsize = 0; 21973 state.whave = 0; 21974 state.wnext = 0; 21975 return inflateResetKeep(strm); 21976 21977} 21978 21979function inflateReset2(strm, windowBits) { 21980 var wrap; 21981 var state; 21982 21983 /* get the state */ 21984 if (!strm || !strm.state) { return Z_STREAM_ERROR; } 21985 state = strm.state; 21986 21987 /* extract wrap request from windowBits parameter */ 21988 if (windowBits < 0) { 21989 wrap = 0; 21990 windowBits = -windowBits; 21991 } 21992 else { 21993 wrap = (windowBits >> 4) + 1; 21994 if (windowBits < 48) { 21995 windowBits &= 15; 21996 } 21997 } 21998 21999 /* set number of window bits, free window if different */ 22000 if (windowBits && (windowBits < 8 || windowBits > 15)) { 22001 return Z_STREAM_ERROR; 22002 } 22003 if (state.window !== null && state.wbits !== windowBits) { 22004 state.window = null; 22005 } 22006 22007 /* update state and reset the rest of it */ 22008 state.wrap = wrap; 22009 state.wbits = windowBits; 22010 return inflateReset(strm); 22011} 22012 22013function inflateInit2(strm, windowBits) { 22014 var ret; 22015 var state; 22016 22017 if (!strm) { return Z_STREAM_ERROR; } 22018 //strm.msg = Z_NULL; /* in case we return an error */ 22019 22020 state = new InflateState(); 22021 22022 //if (state === Z_NULL) return Z_MEM_ERROR; 22023 //Tracev((stderr, "inflate: allocated\n")); 22024 strm.state = state; 22025 state.window = null/*Z_NULL*/; 22026 ret = inflateReset2(strm, windowBits); 22027 if (ret !== Z_OK) { 22028 strm.state = null/*Z_NULL*/; 22029 } 22030 return ret; 22031} 22032 22033function inflateInit(strm) { 22034 return inflateInit2(strm, DEF_WBITS); 22035} 22036 22037 22038/* 22039 Return state with length and distance decoding tables and index sizes set to 22040 fixed code decoding. Normally this returns fixed tables from inffixed.h. 22041 If BUILDFIXED is defined, then instead this routine builds the tables the 22042 first time it's called, and returns those tables the first time and 22043 thereafter. This reduces the size of the code by about 2K bytes, in 22044 exchange for a little execution time. However, BUILDFIXED should not be 22045 used for threaded applications, since the rewriting of the tables and virgin 22046 may not be thread-safe. 22047 */ 22048var virgin = true; 22049 22050var lenfix, distfix; // We have no pointers in JS, so keep tables separate 22051 22052function fixedtables(state) { 22053 /* build fixed huffman tables if first call (may not be thread safe) */ 22054 if (virgin) { 22055 var sym; 22056 22057 lenfix = new utils.Buf32(512); 22058 distfix = new utils.Buf32(32); 22059 22060 /* literal/length table */ 22061 sym = 0; 22062 while (sym < 144) { state.lens[sym++] = 8; } 22063 while (sym < 256) { state.lens[sym++] = 9; } 22064 while (sym < 280) { state.lens[sym++] = 7; } 22065 while (sym < 288) { state.lens[sym++] = 8; } 22066 22067 inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); 22068 22069 /* distance table */ 22070 sym = 0; 22071 while (sym < 32) { state.lens[sym++] = 5; } 22072 22073 inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); 22074 22075 /* do this just once */ 22076 virgin = false; 22077 } 22078 22079 state.lencode = lenfix; 22080 state.lenbits = 9; 22081 state.distcode = distfix; 22082 state.distbits = 5; 22083} 22084 22085 22086/* 22087 Update the window with the last wsize (normally 32K) bytes written before 22088 returning. If window does not exist yet, create it. This is only called 22089 when a window is already in use, or when output has been written during this 22090 inflate call, but the end of the deflate stream has not been reached yet. 22091 It is also called to create a window for dictionary data when a dictionary 22092 is loaded. 22093 22094 Providing output buffers larger than 32K to inflate() should provide a speed 22095 advantage, since only the last 32K of output is copied to the sliding window 22096 upon return from inflate(), and since all distances after the first 32K of 22097 output will fall in the output data, making match copies simpler and faster. 22098 The advantage may be dependent on the size of the processor's data caches. 22099 */ 22100function updatewindow(strm, src, end, copy) { 22101 var dist; 22102 var state = strm.state; 22103 22104 /* if it hasn't been done already, allocate space for the window */ 22105 if (state.window === null) { 22106 state.wsize = 1 << state.wbits; 22107 state.wnext = 0; 22108 state.whave = 0; 22109 22110 state.window = new utils.Buf8(state.wsize); 22111 } 22112 22113 /* copy state->wsize or less output bytes into the circular window */ 22114 if (copy >= state.wsize) { 22115 utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); 22116 state.wnext = 0; 22117 state.whave = state.wsize; 22118 } 22119 else { 22120 dist = state.wsize - state.wnext; 22121 if (dist > copy) { 22122 dist = copy; 22123 } 22124 //zmemcpy(state->window + state->wnext, end - copy, dist); 22125 utils.arraySet(state.window, src, end - copy, dist, state.wnext); 22126 copy -= dist; 22127 if (copy) { 22128 //zmemcpy(state->window, end - copy, copy); 22129 utils.arraySet(state.window, src, end - copy, copy, 0); 22130 state.wnext = copy; 22131 state.whave = state.wsize; 22132 } 22133 else { 22134 state.wnext += dist; 22135 if (state.wnext === state.wsize) { state.wnext = 0; } 22136 if (state.whave < state.wsize) { state.whave += dist; } 22137 } 22138 } 22139 return 0; 22140} 22141 22142function inflate(strm, flush) { 22143 var state; 22144 var input, output; // input/output buffers 22145 var next; /* next input INDEX */ 22146 var put; /* next output INDEX */ 22147 var have, left; /* available input and output */ 22148 var hold; /* bit buffer */ 22149 var bits; /* bits in bit buffer */ 22150 var _in, _out; /* save starting available input and output */ 22151 var copy; /* number of stored or match bytes to copy */ 22152 var from; /* where to copy match bytes from */ 22153 var from_source; 22154 var here = 0; /* current decoding table entry */ 22155 var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) 22156 //var last; /* parent table entry */ 22157 var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) 22158 var len; /* length to copy for repeats, bits to drop */ 22159 var ret; /* return code */ 22160 var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ 22161 var opts; 22162 22163 var n; // temporary var for NEED_BITS 22164 22165 var order = /* permutation of code lengths */ 22166 [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; 22167 22168 22169 if (!strm || !strm.state || !strm.output || 22170 (!strm.input && strm.avail_in !== 0)) { 22171 return Z_STREAM_ERROR; 22172 } 22173 22174 state = strm.state; 22175 if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ 22176 22177 22178 //--- LOAD() --- 22179 put = strm.next_out; 22180 output = strm.output; 22181 left = strm.avail_out; 22182 next = strm.next_in; 22183 input = strm.input; 22184 have = strm.avail_in; 22185 hold = state.hold; 22186 bits = state.bits; 22187 //--- 22188 22189 _in = have; 22190 _out = left; 22191 ret = Z_OK; 22192 22193 inf_leave: // goto emulation 22194 for (;;) { 22195 switch (state.mode) { 22196 case HEAD: 22197 if (state.wrap === 0) { 22198 state.mode = TYPEDO; 22199 break; 22200 } 22201 //=== NEEDBITS(16); 22202 while (bits < 16) { 22203 if (have === 0) { break inf_leave; } 22204 have--; 22205 hold += input[next++] << bits; 22206 bits += 8; 22207 } 22208 //===// 22209 if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ 22210 state.check = 0/*crc32(0L, Z_NULL, 0)*/; 22211 //=== CRC2(state.check, hold); 22212 hbuf[0] = hold & 0xff; 22213 hbuf[1] = (hold >>> 8) & 0xff; 22214 state.check = crc32(state.check, hbuf, 2, 0); 22215 //===// 22216 22217 //=== INITBITS(); 22218 hold = 0; 22219 bits = 0; 22220 //===// 22221 state.mode = FLAGS; 22222 break; 22223 } 22224 state.flags = 0; /* expect zlib header */ 22225 if (state.head) { 22226 state.head.done = false; 22227 } 22228 if (!(state.wrap & 1) || /* check if zlib header allowed */ 22229 (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { 22230 strm.msg = 'incorrect header check'; 22231 state.mode = BAD; 22232 break; 22233 } 22234 if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { 22235 strm.msg = 'unknown compression method'; 22236 state.mode = BAD; 22237 break; 22238 } 22239 //--- DROPBITS(4) ---// 22240 hold >>>= 4; 22241 bits -= 4; 22242 //---// 22243 len = (hold & 0x0f)/*BITS(4)*/ + 8; 22244 if (state.wbits === 0) { 22245 state.wbits = len; 22246 } 22247 else if (len > state.wbits) { 22248 strm.msg = 'invalid window size'; 22249 state.mode = BAD; 22250 break; 22251 } 22252 state.dmax = 1 << len; 22253 //Tracev((stderr, "inflate: zlib header ok\n")); 22254 strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; 22255 state.mode = hold & 0x200 ? DICTID : TYPE; 22256 //=== INITBITS(); 22257 hold = 0; 22258 bits = 0; 22259 //===// 22260 break; 22261 case FLAGS: 22262 //=== NEEDBITS(16); */ 22263 while (bits < 16) { 22264 if (have === 0) { break inf_leave; } 22265 have--; 22266 hold += input[next++] << bits; 22267 bits += 8; 22268 } 22269 //===// 22270 state.flags = hold; 22271 if ((state.flags & 0xff) !== Z_DEFLATED) { 22272 strm.msg = 'unknown compression method'; 22273 state.mode = BAD; 22274 break; 22275 } 22276 if (state.flags & 0xe000) { 22277 strm.msg = 'unknown header flags set'; 22278 state.mode = BAD; 22279 break; 22280 } 22281 if (state.head) { 22282 state.head.text = ((hold >> 8) & 1); 22283 } 22284 if (state.flags & 0x0200) { 22285 //=== CRC2(state.check, hold); 22286 hbuf[0] = hold & 0xff; 22287 hbuf[1] = (hold >>> 8) & 0xff; 22288 state.check = crc32(state.check, hbuf, 2, 0); 22289 //===// 22290 } 22291 //=== INITBITS(); 22292 hold = 0; 22293 bits = 0; 22294 //===// 22295 state.mode = TIME; 22296 /* falls through */ 22297 case TIME: 22298 //=== NEEDBITS(32); */ 22299 while (bits < 32) { 22300 if (have === 0) { break inf_leave; } 22301 have--; 22302 hold += input[next++] << bits; 22303 bits += 8; 22304 } 22305 //===// 22306 if (state.head) { 22307 state.head.time = hold; 22308 } 22309 if (state.flags & 0x0200) { 22310 //=== CRC4(state.check, hold) 22311 hbuf[0] = hold & 0xff; 22312 hbuf[1] = (hold >>> 8) & 0xff; 22313 hbuf[2] = (hold >>> 16) & 0xff; 22314 hbuf[3] = (hold >>> 24) & 0xff; 22315 state.check = crc32(state.check, hbuf, 4, 0); 22316 //=== 22317 } 22318 //=== INITBITS(); 22319 hold = 0; 22320 bits = 0; 22321 //===// 22322 state.mode = OS; 22323 /* falls through */ 22324 case OS: 22325 //=== NEEDBITS(16); */ 22326 while (bits < 16) { 22327 if (have === 0) { break inf_leave; } 22328 have--; 22329 hold += input[next++] << bits; 22330 bits += 8; 22331 } 22332 //===// 22333 if (state.head) { 22334 state.head.xflags = (hold & 0xff); 22335 state.head.os = (hold >> 8); 22336 } 22337 if (state.flags & 0x0200) { 22338 //=== CRC2(state.check, hold); 22339 hbuf[0] = hold & 0xff; 22340 hbuf[1] = (hold >>> 8) & 0xff; 22341 state.check = crc32(state.check, hbuf, 2, 0); 22342 //===// 22343 } 22344 //=== INITBITS(); 22345 hold = 0; 22346 bits = 0; 22347 //===// 22348 state.mode = EXLEN; 22349 /* falls through */ 22350 case EXLEN: 22351 if (state.flags & 0x0400) { 22352 //=== NEEDBITS(16); */ 22353 while (bits < 16) { 22354 if (have === 0) { break inf_leave; } 22355 have--; 22356 hold += input[next++] << bits; 22357 bits += 8; 22358 } 22359 //===// 22360 state.length = hold; 22361 if (state.head) { 22362 state.head.extra_len = hold; 22363 } 22364 if (state.flags & 0x0200) { 22365 //=== CRC2(state.check, hold); 22366 hbuf[0] = hold & 0xff; 22367 hbuf[1] = (hold >>> 8) & 0xff; 22368 state.check = crc32(state.check, hbuf, 2, 0); 22369 //===// 22370 } 22371 //=== INITBITS(); 22372 hold = 0; 22373 bits = 0; 22374 //===// 22375 } 22376 else if (state.head) { 22377 state.head.extra = null/*Z_NULL*/; 22378 } 22379 state.mode = EXTRA; 22380 /* falls through */ 22381 case EXTRA: 22382 if (state.flags & 0x0400) { 22383 copy = state.length; 22384 if (copy > have) { copy = have; } 22385 if (copy) { 22386 if (state.head) { 22387 len = state.head.extra_len - state.length; 22388 if (!state.head.extra) { 22389 // Use untyped array for more convenient processing later 22390 state.head.extra = new Array(state.head.extra_len); 22391 } 22392 utils.arraySet( 22393 state.head.extra, 22394 input, 22395 next, 22396 // extra field is limited to 65536 bytes 22397 // - no need for additional size check 22398 copy, 22399 /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ 22400 len 22401 ); 22402 //zmemcpy(state.head.extra + len, next, 22403 // len + copy > state.head.extra_max ? 22404 // state.head.extra_max - len : copy); 22405 } 22406 if (state.flags & 0x0200) { 22407 state.check = crc32(state.check, input, copy, next); 22408 } 22409 have -= copy; 22410 next += copy; 22411 state.length -= copy; 22412 } 22413 if (state.length) { break inf_leave; } 22414 } 22415 state.length = 0; 22416 state.mode = NAME; 22417 /* falls through */ 22418 case NAME: 22419 if (state.flags & 0x0800) { 22420 if (have === 0) { break inf_leave; } 22421 copy = 0; 22422 do { 22423 // TODO: 2 or 1 bytes? 22424 len = input[next + copy++]; 22425 /* use constant limit because in js we should not preallocate memory */ 22426 if (state.head && len && 22427 (state.length < 65536 /*state.head.name_max*/)) { 22428 state.head.name += String.fromCharCode(len); 22429 } 22430 } while (len && copy < have); 22431 22432 if (state.flags & 0x0200) { 22433 state.check = crc32(state.check, input, copy, next); 22434 } 22435 have -= copy; 22436 next += copy; 22437 if (len) { break inf_leave; } 22438 } 22439 else if (state.head) { 22440 state.head.name = null; 22441 } 22442 state.length = 0; 22443 state.mode = COMMENT; 22444 /* falls through */ 22445 case COMMENT: 22446 if (state.flags & 0x1000) { 22447 if (have === 0) { break inf_leave; } 22448 copy = 0; 22449 do { 22450 len = input[next + copy++]; 22451 /* use constant limit because in js we should not preallocate memory */ 22452 if (state.head && len && 22453 (state.length < 65536 /*state.head.comm_max*/)) { 22454 state.head.comment += String.fromCharCode(len); 22455 } 22456 } while (len && copy < have); 22457 if (state.flags & 0x0200) { 22458 state.check = crc32(state.check, input, copy, next); 22459 } 22460 have -= copy; 22461 next += copy; 22462 if (len) { break inf_leave; } 22463 } 22464 else if (state.head) { 22465 state.head.comment = null; 22466 } 22467 state.mode = HCRC; 22468 /* falls through */ 22469 case HCRC: 22470 if (state.flags & 0x0200) { 22471 //=== NEEDBITS(16); */ 22472 while (bits < 16) { 22473 if (have === 0) { break inf_leave; } 22474 have--; 22475 hold += input[next++] << bits; 22476 bits += 8; 22477 } 22478 //===// 22479 if (hold !== (state.check & 0xffff)) { 22480 strm.msg = 'header crc mismatch'; 22481 state.mode = BAD; 22482 break; 22483 } 22484 //=== INITBITS(); 22485 hold = 0; 22486 bits = 0; 22487 //===// 22488 } 22489 if (state.head) { 22490 state.head.hcrc = ((state.flags >> 9) & 1); 22491 state.head.done = true; 22492 } 22493 strm.adler = state.check = 0; 22494 state.mode = TYPE; 22495 break; 22496 case DICTID: 22497 //=== NEEDBITS(32); */ 22498 while (bits < 32) { 22499 if (have === 0) { break inf_leave; } 22500 have--; 22501 hold += input[next++] << bits; 22502 bits += 8; 22503 } 22504 //===// 22505 strm.adler = state.check = zswap32(hold); 22506 //=== INITBITS(); 22507 hold = 0; 22508 bits = 0; 22509 //===// 22510 state.mode = DICT; 22511 /* falls through */ 22512 case DICT: 22513 if (state.havedict === 0) { 22514 //--- RESTORE() --- 22515 strm.next_out = put; 22516 strm.avail_out = left; 22517 strm.next_in = next; 22518 strm.avail_in = have; 22519 state.hold = hold; 22520 state.bits = bits; 22521 //--- 22522 return Z_NEED_DICT; 22523 } 22524 strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; 22525 state.mode = TYPE; 22526 /* falls through */ 22527 case TYPE: 22528 if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } 22529 /* falls through */ 22530 case TYPEDO: 22531 if (state.last) { 22532 //--- BYTEBITS() ---// 22533 hold >>>= bits & 7; 22534 bits -= bits & 7; 22535 //---// 22536 state.mode = CHECK; 22537 break; 22538 } 22539 //=== NEEDBITS(3); */ 22540 while (bits < 3) { 22541 if (have === 0) { break inf_leave; } 22542 have--; 22543 hold += input[next++] << bits; 22544 bits += 8; 22545 } 22546 //===// 22547 state.last = (hold & 0x01)/*BITS(1)*/; 22548 //--- DROPBITS(1) ---// 22549 hold >>>= 1; 22550 bits -= 1; 22551 //---// 22552 22553 switch ((hold & 0x03)/*BITS(2)*/) { 22554 case 0: /* stored block */ 22555 //Tracev((stderr, "inflate: stored block%s\n", 22556 // state.last ? " (last)" : "")); 22557 state.mode = STORED; 22558 break; 22559 case 1: /* fixed block */ 22560 fixedtables(state); 22561 //Tracev((stderr, "inflate: fixed codes block%s\n", 22562 // state.last ? " (last)" : "")); 22563 state.mode = LEN_; /* decode codes */ 22564 if (flush === Z_TREES) { 22565 //--- DROPBITS(2) ---// 22566 hold >>>= 2; 22567 bits -= 2; 22568 //---// 22569 break inf_leave; 22570 } 22571 break; 22572 case 2: /* dynamic block */ 22573 //Tracev((stderr, "inflate: dynamic codes block%s\n", 22574 // state.last ? " (last)" : "")); 22575 state.mode = TABLE; 22576 break; 22577 case 3: 22578 strm.msg = 'invalid block type'; 22579 state.mode = BAD; 22580 } 22581 //--- DROPBITS(2) ---// 22582 hold >>>= 2; 22583 bits -= 2; 22584 //---// 22585 break; 22586 case STORED: 22587 //--- BYTEBITS() ---// /* go to byte boundary */ 22588 hold >>>= bits & 7; 22589 bits -= bits & 7; 22590 //---// 22591 //=== NEEDBITS(32); */ 22592 while (bits < 32) { 22593 if (have === 0) { break inf_leave; } 22594 have--; 22595 hold += input[next++] << bits; 22596 bits += 8; 22597 } 22598 //===// 22599 if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { 22600 strm.msg = 'invalid stored block lengths'; 22601 state.mode = BAD; 22602 break; 22603 } 22604 state.length = hold & 0xffff; 22605 //Tracev((stderr, "inflate: stored length %u\n", 22606 // state.length)); 22607 //=== INITBITS(); 22608 hold = 0; 22609 bits = 0; 22610 //===// 22611 state.mode = COPY_; 22612 if (flush === Z_TREES) { break inf_leave; } 22613 /* falls through */ 22614 case COPY_: 22615 state.mode = COPY; 22616 /* falls through */ 22617 case COPY: 22618 copy = state.length; 22619 if (copy) { 22620 if (copy > have) { copy = have; } 22621 if (copy > left) { copy = left; } 22622 if (copy === 0) { break inf_leave; } 22623 //--- zmemcpy(put, next, copy); --- 22624 utils.arraySet(output, input, next, copy, put); 22625 //---// 22626 have -= copy; 22627 next += copy; 22628 left -= copy; 22629 put += copy; 22630 state.length -= copy; 22631 break; 22632 } 22633 //Tracev((stderr, "inflate: stored end\n")); 22634 state.mode = TYPE; 22635 break; 22636 case TABLE: 22637 //=== NEEDBITS(14); */ 22638 while (bits < 14) { 22639 if (have === 0) { break inf_leave; } 22640 have--; 22641 hold += input[next++] << bits; 22642 bits += 8; 22643 } 22644 //===// 22645 state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; 22646 //--- DROPBITS(5) ---// 22647 hold >>>= 5; 22648 bits -= 5; 22649 //---// 22650 state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; 22651 //--- DROPBITS(5) ---// 22652 hold >>>= 5; 22653 bits -= 5; 22654 //---// 22655 state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; 22656 //--- DROPBITS(4) ---// 22657 hold >>>= 4; 22658 bits -= 4; 22659 //---// 22660//#ifndef PKZIP_BUG_WORKAROUND 22661 if (state.nlen > 286 || state.ndist > 30) { 22662 strm.msg = 'too many length or distance symbols'; 22663 state.mode = BAD; 22664 break; 22665 } 22666//#endif 22667 //Tracev((stderr, "inflate: table sizes ok\n")); 22668 state.have = 0; 22669 state.mode = LENLENS; 22670 /* falls through */ 22671 case LENLENS: 22672 while (state.have < state.ncode) { 22673 //=== NEEDBITS(3); 22674 while (bits < 3) { 22675 if (have === 0) { break inf_leave; } 22676 have--; 22677 hold += input[next++] << bits; 22678 bits += 8; 22679 } 22680 //===// 22681 state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); 22682 //--- DROPBITS(3) ---// 22683 hold >>>= 3; 22684 bits -= 3; 22685 //---// 22686 } 22687 while (state.have < 19) { 22688 state.lens[order[state.have++]] = 0; 22689 } 22690 // We have separate tables & no pointers. 2 commented lines below not needed. 22691 //state.next = state.codes; 22692 //state.lencode = state.next; 22693 // Switch to use dynamic table 22694 state.lencode = state.lendyn; 22695 state.lenbits = 7; 22696 22697 opts = { bits: state.lenbits }; 22698 ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); 22699 state.lenbits = opts.bits; 22700 22701 if (ret) { 22702 strm.msg = 'invalid code lengths set'; 22703 state.mode = BAD; 22704 break; 22705 } 22706 //Tracev((stderr, "inflate: code lengths ok\n")); 22707 state.have = 0; 22708 state.mode = CODELENS; 22709 /* falls through */ 22710 case CODELENS: 22711 while (state.have < state.nlen + state.ndist) { 22712 for (;;) { 22713 here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ 22714 here_bits = here >>> 24; 22715 here_op = (here >>> 16) & 0xff; 22716 here_val = here & 0xffff; 22717 22718 if ((here_bits) <= bits) { break; } 22719 //--- PULLBYTE() ---// 22720 if (have === 0) { break inf_leave; } 22721 have--; 22722 hold += input[next++] << bits; 22723 bits += 8; 22724 //---// 22725 } 22726 if (here_val < 16) { 22727 //--- DROPBITS(here.bits) ---// 22728 hold >>>= here_bits; 22729 bits -= here_bits; 22730 //---// 22731 state.lens[state.have++] = here_val; 22732 } 22733 else { 22734 if (here_val === 16) { 22735 //=== NEEDBITS(here.bits + 2); 22736 n = here_bits + 2; 22737 while (bits < n) { 22738 if (have === 0) { break inf_leave; } 22739 have--; 22740 hold += input[next++] << bits; 22741 bits += 8; 22742 } 22743 //===// 22744 //--- DROPBITS(here.bits) ---// 22745 hold >>>= here_bits; 22746 bits -= here_bits; 22747 //---// 22748 if (state.have === 0) { 22749 strm.msg = 'invalid bit length repeat'; 22750 state.mode = BAD; 22751 break; 22752 } 22753 len = state.lens[state.have - 1]; 22754 copy = 3 + (hold & 0x03);//BITS(2); 22755 //--- DROPBITS(2) ---// 22756 hold >>>= 2; 22757 bits -= 2; 22758 //---// 22759 } 22760 else if (here_val === 17) { 22761 //=== NEEDBITS(here.bits + 3); 22762 n = here_bits + 3; 22763 while (bits < n) { 22764 if (have === 0) { break inf_leave; } 22765 have--; 22766 hold += input[next++] << bits; 22767 bits += 8; 22768 } 22769 //===// 22770 //--- DROPBITS(here.bits) ---// 22771 hold >>>= here_bits; 22772 bits -= here_bits; 22773 //---// 22774 len = 0; 22775 copy = 3 + (hold & 0x07);//BITS(3); 22776 //--- DROPBITS(3) ---// 22777 hold >>>= 3; 22778 bits -= 3; 22779 //---// 22780 } 22781 else { 22782 //=== NEEDBITS(here.bits + 7); 22783 n = here_bits + 7; 22784 while (bits < n) { 22785 if (have === 0) { break inf_leave; } 22786 have--; 22787 hold += input[next++] << bits; 22788 bits += 8; 22789 } 22790 //===// 22791 //--- DROPBITS(here.bits) ---// 22792 hold >>>= here_bits; 22793 bits -= here_bits; 22794 //---// 22795 len = 0; 22796 copy = 11 + (hold & 0x7f);//BITS(7); 22797 //--- DROPBITS(7) ---// 22798 hold >>>= 7; 22799 bits -= 7; 22800 //---// 22801 } 22802 if (state.have + copy > state.nlen + state.ndist) { 22803 strm.msg = 'invalid bit length repeat'; 22804 state.mode = BAD; 22805 break; 22806 } 22807 while (copy--) { 22808 state.lens[state.have++] = len; 22809 } 22810 } 22811 } 22812 22813 /* handle error breaks in while */ 22814 if (state.mode === BAD) { break; } 22815 22816 /* check for end-of-block code (better have one) */ 22817 if (state.lens[256] === 0) { 22818 strm.msg = 'invalid code -- missing end-of-block'; 22819 state.mode = BAD; 22820 break; 22821 } 22822 22823 /* build code tables -- note: do not change the lenbits or distbits 22824 values here (9 and 6) without reading the comments in inftrees.h 22825 concerning the ENOUGH constants, which depend on those values */ 22826 state.lenbits = 9; 22827 22828 opts = { bits: state.lenbits }; 22829 ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); 22830 // We have separate tables & no pointers. 2 commented lines below not needed. 22831 // state.next_index = opts.table_index; 22832 state.lenbits = opts.bits; 22833 // state.lencode = state.next; 22834 22835 if (ret) { 22836 strm.msg = 'invalid literal/lengths set'; 22837 state.mode = BAD; 22838 break; 22839 } 22840 22841 state.distbits = 6; 22842 //state.distcode.copy(state.codes); 22843 // Switch to use dynamic table 22844 state.distcode = state.distdyn; 22845 opts = { bits: state.distbits }; 22846 ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); 22847 // We have separate tables & no pointers. 2 commented lines below not needed. 22848 // state.next_index = opts.table_index; 22849 state.distbits = opts.bits; 22850 // state.distcode = state.next; 22851 22852 if (ret) {
vendor: 4,188 bytes, lines 22853-22984
22853 strm.msg = 'invalid distances set'; 22854 state.mode = BAD; 22855 break; 22856 } 22857 //Tracev((stderr, 'inflate: codes ok\n')); 22858 state.mode = LEN_; 22859 if (flush === Z_TREES) { break inf_leave; } 22860 /* falls through */ 22861 case LEN_: 22862 state.mode = LEN; 22863 /* falls through */ 22864 case LEN: 22865 if (have >= 6 && left >= 258) { 22866 //--- RESTORE() --- 22867 strm.next_out = put; 22868 strm.avail_out = left; 22869 strm.next_in = next; 22870 strm.avail_in = have; 22871 state.hold = hold; 22872 state.bits = bits; 22873 //--- 22874 inflate_fast(strm, _out); 22875 //--- LOAD() --- 22876 put = strm.next_out; 22877 output = strm.output; 22878 left = strm.avail_out; 22879 next = strm.next_in; 22880 input = strm.input; 22881 have = strm.avail_in; 22882 hold = state.hold; 22883 bits = state.bits; 22884 //--- 22885 22886 if (state.mode === TYPE) { 22887 state.back = -1; 22888 } 22889 break; 22890 } 22891 state.back = 0; 22892 for (;;) { 22893 here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ 22894 here_bits = here >>> 24; 22895 here_op = (here >>> 16) & 0xff; 22896 here_val = here & 0xffff; 22897 22898 if (here_bits <= bits) { break; } 22899 //--- PULLBYTE() ---// 22900 if (have === 0) { break inf_leave; } 22901 have--; 22902 hold += input[next++] << bits; 22903 bits += 8; 22904 //---// 22905 } 22906 if (here_op && (here_op & 0xf0) === 0) { 22907 last_bits = here_bits; 22908 last_op = here_op; 22909 last_val = here_val; 22910 for (;;) { 22911 here = state.lencode[last_val + 22912 ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; 22913 here_bits = here >>> 24; 22914 here_op = (here >>> 16) & 0xff; 22915 here_val = here & 0xffff; 22916 22917 if ((last_bits + here_bits) <= bits) { break; } 22918 //--- PULLBYTE() ---// 22919 if (have === 0) { break inf_leave; } 22920 have--; 22921 hold += input[next++] << bits; 22922 bits += 8; 22923 //---// 22924 } 22925 //--- DROPBITS(last.bits) ---// 22926 hold >>>= last_bits; 22927 bits -= last_bits; 22928 //---// 22929 state.back += last_bits; 22930 } 22931 //--- DROPBITS(here.bits) ---// 22932 hold >>>= here_bits; 22933 bits -= here_bits; 22934 //---// 22935 state.back += here_bits; 22936 state.length = here_val; 22937 if (here_op === 0) { 22938 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? 22939 // "inflate: literal '%c'\n" : 22940 // "inflate: literal 0x%02x\n", here.val)); 22941 state.mode = LIT; 22942 break; 22943 } 22944 if (here_op & 32) { 22945 //Tracevv((stderr, "inflate: end of block\n")); 22946 state.back = -1; 22947 state.mode = TYPE; 22948 break; 22949 } 22950 if (here_op & 64) { 22951 strm.msg = 'invalid literal/length code'; 22952 state.mode = BAD; 22953 break; 22954 } 22955 state.extra = here_op & 15; 22956 state.mode = LENEXT; 22957 /* falls through */ 22958 case LENEXT: 22959 if (state.extra) { 22960 //=== NEEDBITS(state.extra); 22961 n = state.extra; 22962 while (bits < n) { 22963 if (have === 0) { break inf_leave; } 22964 have--; 22965 hold += input[next++] << bits; 22966 bits += 8; 22967 } 22968 //===// 22969 state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; 22970 //--- DROPBITS(state.extra) ---// 22971 hold >>>= state.extra; 22972 bits -= state.extra; 22973 //---// 22974 state.back += state.extra; 22975 } 22976 //Tracevv((stderr, "inflate: length %u\n", state.length)); 22977 state.was = state.length; 22978 state.mode = DIST; 22979 /* falls through */ 22980 case DIST: 22981 for (;;) { 22982 here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ 22983 here_bits = here >>> 24; 22984 here_op = (here >>> 16) & 0xff;
vendor: 10,154 bytes, lines 22985-23320
22985 here_val = here & 0xffff; 22986 22987 if ((here_bits) <= bits) { break; } 22988 //--- PULLBYTE() ---// 22989 if (have === 0) { break inf_leave; } 22990 have--; 22991 hold += input[next++] << bits; 22992 bits += 8; 22993 //---// 22994 } 22995 if ((here_op & 0xf0) === 0) { 22996 last_bits = here_bits; 22997 last_op = here_op; 22998 last_val = here_val; 22999 for (;;) { 23000 here = state.distcode[last_val + 23001 ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; 23002 here_bits = here >>> 24; 23003 here_op = (here >>> 16) & 0xff; 23004 here_val = here & 0xffff; 23005 23006 if ((last_bits + here_bits) <= bits) { break; } 23007 //--- PULLBYTE() ---// 23008 if (have === 0) { break inf_leave; } 23009 have--; 23010 hold += input[next++] << bits; 23011 bits += 8; 23012 //---// 23013 } 23014 //--- DROPBITS(last.bits) ---// 23015 hold >>>= last_bits; 23016 bits -= last_bits; 23017 //---// 23018 state.back += last_bits; 23019 } 23020 //--- DROPBITS(here.bits) ---// 23021 hold >>>= here_bits; 23022 bits -= here_bits; 23023 //---// 23024 state.back += here_bits; 23025 if (here_op & 64) { 23026 strm.msg = 'invalid distance code'; 23027 state.mode = BAD; 23028 break; 23029 } 23030 state.offset = here_val; 23031 state.extra = (here_op) & 15; 23032 state.mode = DISTEXT; 23033 /* falls through */ 23034 case DISTEXT: 23035 if (state.extra) { 23036 //=== NEEDBITS(state.extra); 23037 n = state.extra; 23038 while (bits < n) { 23039 if (have === 0) { break inf_leave; } 23040 have--; 23041 hold += input[next++] << bits; 23042 bits += 8; 23043 } 23044 //===// 23045 state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; 23046 //--- DROPBITS(state.extra) ---// 23047 hold >>>= state.extra; 23048 bits -= state.extra; 23049 //---// 23050 state.back += state.extra; 23051 } 23052//#ifdef INFLATE_STRICT 23053 if (state.offset > state.dmax) { 23054 strm.msg = 'invalid distance too far back'; 23055 state.mode = BAD; 23056 break; 23057 } 23058//#endif 23059 //Tracevv((stderr, "inflate: distance %u\n", state.offset)); 23060 state.mode = MATCH; 23061 /* falls through */ 23062 case MATCH: 23063 if (left === 0) { break inf_leave; } 23064 copy = _out - left; 23065 if (state.offset > copy) { /* copy from window */ 23066 copy = state.offset - copy; 23067 if (copy > state.whave) { 23068 if (state.sane) { 23069 strm.msg = 'invalid distance too far back'; 23070 state.mode = BAD; 23071 break; 23072 } 23073// (!) This block is disabled in zlib defaults, 23074// don't enable it for binary compatibility 23075//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR 23076// Trace((stderr, "inflate.c too far\n")); 23077// copy -= state.whave; 23078// if (copy > state.length) { copy = state.length; } 23079// if (copy > left) { copy = left; } 23080// left -= copy; 23081// state.length -= copy; 23082// do { 23083// output[put++] = 0; 23084// } while (--copy); 23085// if (state.length === 0) { state.mode = LEN; } 23086// break; 23087//#endif 23088 } 23089 if (copy > state.wnext) { 23090 copy -= state.wnext; 23091 from = state.wsize - copy; 23092 } 23093 else { 23094 from = state.wnext - copy; 23095 } 23096 if (copy > state.length) { copy = state.length; } 23097 from_source = state.window; 23098 } 23099 else { /* copy from output */ 23100 from_source = output; 23101 from = put - state.offset; 23102 copy = state.length; 23103 } 23104 if (copy > left) { copy = left; } 23105 left -= copy; 23106 state.length -= copy; 23107 do { 23108 output[put++] = from_source[from++]; 23109 } while (--copy); 23110 if (state.length === 0) { state.mode = LEN; } 23111 break; 23112 case LIT: 23113 if (left === 0) { break inf_leave; } 23114 output[put++] = state.length; 23115 left--; 23116 state.mode = LEN; 23117 break; 23118 case CHECK: 23119 if (state.wrap) { 23120 //=== NEEDBITS(32); 23121 while (bits < 32) { 23122 if (have === 0) { break inf_leave; } 23123 have--; 23124 // Use '|' instead of '+' to make sure that result is signed 23125 hold |= input[next++] << bits; 23126 bits += 8; 23127 } 23128 //===// 23129 _out -= left; 23130 strm.total_out += _out; 23131 state.total += _out; 23132 if (_out) { 23133 strm.adler = state.check = 23134 /*UPDATE(state.check, put - _out, _out);*/ 23135 (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); 23136 23137 } 23138 _out = left; 23139 // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too 23140 if ((state.flags ? hold : zswap32(hold)) !== state.check) { 23141 strm.msg = 'incorrect data check'; 23142 state.mode = BAD; 23143 break; 23144 } 23145 //=== INITBITS(); 23146 hold = 0; 23147 bits = 0; 23148 //===// 23149 //Tracev((stderr, "inflate: check matches trailer\n")); 23150 } 23151 state.mode = LENGTH; 23152 /* falls through */ 23153 case LENGTH: 23154 if (state.wrap && state.flags) { 23155 //=== NEEDBITS(32); 23156 while (bits < 32) { 23157 if (have === 0) { break inf_leave; } 23158 have--; 23159 hold += input[next++] << bits; 23160 bits += 8; 23161 } 23162 //===// 23163 if (hold !== (state.total & 0xffffffff)) { 23164 strm.msg = 'incorrect length check'; 23165 state.mode = BAD; 23166 break; 23167 } 23168 //=== INITBITS(); 23169 hold = 0; 23170 bits = 0; 23171 //===// 23172 //Tracev((stderr, "inflate: length matches trailer\n")); 23173 } 23174 state.mode = DONE; 23175 /* falls through */ 23176 case DONE: 23177 ret = Z_STREAM_END; 23178 break inf_leave; 23179 case BAD: 23180 ret = Z_DATA_ERROR; 23181 break inf_leave; 23182 case MEM: 23183 return Z_MEM_ERROR; 23184 case SYNC: 23185 /* falls through */ 23186 default: 23187 return Z_STREAM_ERROR; 23188 } 23189 } 23190 23191 // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" 23192 23193 /* 23194 Return from inflate(), updating the total counts and the check value. 23195 If there was no progress during the inflate() call, return a buffer 23196 error. Call updatewindow() to create and/or update the window state. 23197 Note: a memory error from inflate() is non-recoverable. 23198 */ 23199 23200 //--- RESTORE() --- 23201 strm.next_out = put; 23202 strm.avail_out = left; 23203 strm.next_in = next; 23204 strm.avail_in = have; 23205 state.hold = hold; 23206 state.bits = bits; 23207 //--- 23208 23209 if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && 23210 (state.mode < CHECK || flush !== Z_FINISH))) { 23211 if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { 23212 state.mode = MEM; 23213 return Z_MEM_ERROR; 23214 } 23215 } 23216 _in -= strm.avail_in; 23217 _out -= strm.avail_out; 23218 strm.total_in += _in; 23219 strm.total_out += _out; 23220 state.total += _out; 23221 if (state.wrap && _out) { 23222 strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ 23223 (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); 23224 } 23225 strm.data_type = state.bits + (state.last ? 64 : 0) + 23226 (state.mode === TYPE ? 128 : 0) + 23227 (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); 23228 if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { 23229 ret = Z_BUF_ERROR; 23230 } 23231 return ret; 23232} 23233 23234function inflateEnd(strm) { 23235 23236 if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { 23237 return Z_STREAM_ERROR; 23238 } 23239 23240 var state = strm.state; 23241 if (state.window) { 23242 state.window = null; 23243 } 23244 strm.state = null; 23245 return Z_OK; 23246} 23247 23248function inflateGetHeader(strm, head) { 23249 var state; 23250 23251 /* check state */ 23252 if (!strm || !strm.state) { return Z_STREAM_ERROR; } 23253 state = strm.state; 23254 if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } 23255 23256 /* save header structure */ 23257 state.head = head; 23258 head.done = false; 23259 return Z_OK; 23260} 23261 23262function inflateSetDictionary(strm, dictionary) { 23263 var dictLength = dictionary.length; 23264 23265 var state; 23266 var dictid; 23267 var ret; 23268 23269 /* check state */ 23270 if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } 23271 state = strm.state; 23272 23273 if (state.wrap !== 0 && state.mode !== DICT) { 23274 return Z_STREAM_ERROR; 23275 } 23276 23277 /* check for correct dictionary identifier */ 23278 if (state.mode === DICT) { 23279 dictid = 1; /* adler32(0, null, 0)*/ 23280 /* dictid = adler32(dictid, dictionary, dictLength); */ 23281 dictid = adler32(dictid, dictionary, dictLength, 0); 23282 if (dictid !== state.check) { 23283 return Z_DATA_ERROR; 23284 } 23285 } 23286 /* copy dictionary to window using updatewindow(), which will amend the 23287 existing dictionary if appropriate */ 23288 ret = updatewindow(strm, dictionary, dictLength, dictLength); 23289 if (ret) { 23290 state.mode = MEM; 23291 return Z_MEM_ERROR; 23292 } 23293 state.havedict = 1; 23294 // Tracev((stderr, "inflate: dictionary set\n")); 23295 return Z_OK; 23296} 23297 23298exports.inflateReset = inflateReset; 23299exports.inflateReset2 = inflateReset2; 23300exports.inflateResetKeep = inflateResetKeep; 23301exports.inflateInit = inflateInit; 23302exports.inflateInit2 = inflateInit2; 23303exports.inflate = inflate; 23304exports.inflateEnd = inflateEnd; 23305exports.inflateGetHeader = inflateGetHeader; 23306exports.inflateSetDictionary = inflateSetDictionary; 23307exports.inflateInfo = 'pako inflate (from Nodeca project)'; 23308 23309/* Not implemented 23310exports.inflateCopy = inflateCopy; 23311exports.inflateGetDictionary = inflateGetDictionary; 23312exports.inflateMark = inflateMark; 23313exports.inflatePrime = inflatePrime; 23314exports.inflateSync = inflateSync; 23315exports.inflateSyncPoint = inflateSyncPoint; 23316exports.inflateUndermine = inflateUndermine; 23317*/ 23318 23319 23320/***/ }
23320), 23321/* 158 */ 23322/***/ (function(module, exports, __webpack_require__
vendor: 12,683 bytes, lines 23322-23672
23322) { 23323 23324"use strict"; 23325 23326 23327// (C) 1995-2013 Jean-loup Gailly and Mark Adler 23328// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 23329// 23330// This software is provided 'as-is', without any express or implied 23331// warranty. In no event will the authors be held liable for any damages 23332// arising from the use of this software. 23333// 23334// Permission is granted to anyone to use this software for any purpose, 23335// including commercial applications, and to alter it and redistribute it 23336// freely, subject to the following restrictions: 23337// 23338// 1. The origin of this software must not be misrepresented; you must not 23339// claim that you wrote the original software. If you use this software 23340// in a product, an acknowledgment in the product documentation would be 23341// appreciated but is not required. 23342// 2. Altered source versions must be plainly marked as such, and must not be 23343// misrepresented as being the original software. 23344// 3. This notice may not be removed or altered from any source distribution. 23345 23346// See state defs from inflate.js 23347var BAD = 30; /* got a data error -- remain here until reset */ 23348var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ 23349 23350/* 23351 Decode literal, length, and distance codes and write out the resulting 23352 literal and match bytes until either not enough input or output is 23353 available, an end-of-block is encountered, or a data error is encountered. 23354 When large enough input and output buffers are supplied to inflate(), for 23355 example, a 16K input buffer and a 64K output buffer, more than 95% of the 23356 inflate execution time is spent in this routine. 23357 23358 Entry assumptions: 23359 23360 state.mode === LEN 23361 strm.avail_in >= 6 23362 strm.avail_out >= 258 23363 start >= strm.avail_out 23364 state.bits < 8 23365 23366 On return, state.mode is one of: 23367 23368 LEN -- ran out of enough output space or enough available input 23369 TYPE -- reached end of block code, inflate() to interpret next block 23370 BAD -- error in block data 23371 23372 Notes: 23373 23374 - The maximum input bits used by a length/distance pair is 15 bits for the 23375 length code, 5 bits for the length extra, 15 bits for the distance code, 23376 and 13 bits for the distance extra. This totals 48 bits, or six bytes. 23377 Therefore if strm.avail_in >= 6, then there is enough input to avoid 23378 checking for available input while decoding. 23379 23380 - The maximum bytes that a single length/distance pair can output is 258 23381 bytes, which is the maximum length that can be coded. inflate_fast() 23382 requires strm.avail_out >= 258 for each loop to avoid checking for 23383 output space. 23384 */ 23385module.exports = function inflate_fast(strm, start) { 23386 var state; 23387 var _in; /* local strm.input */ 23388 var last; /* have enough input while in < last */ 23389 var _out; /* local strm.output */ 23390 var beg; /* inflate()'s initial strm.output */ 23391 var end; /* while out < end, enough space available */ 23392//#ifdef INFLATE_STRICT 23393 var dmax; /* maximum distance from zlib header */ 23394//#endif 23395 var wsize; /* window size or zero if not using window */ 23396 var whave; /* valid bytes in the window */ 23397 var wnext; /* window write index */ 23398 // Use `s_window` instead `window`, avoid conflict with instrumentation tools 23399 var s_window; /* allocated sliding window, if wsize != 0 */ 23400 var hold; /* local strm.hold */ 23401 var bits; /* local strm.bits */ 23402 var lcode; /* local strm.lencode */ 23403 var dcode; /* local strm.distcode */ 23404 var lmask; /* mask for first level of length codes */ 23405 var dmask; /* mask for first level of distance codes */ 23406 var here; /* retrieved table entry */ 23407 var op; /* code bits, operation, extra bits, or */ 23408 /* window position, window bytes to copy */ 23409 var len; /* match length, unused bytes */ 23410 var dist; /* match distance */ 23411 var from; /* where to copy match from */ 23412 var from_source; 23413 23414 23415 var input, output; // JS specific, because we have no pointers 23416 23417 /* copy state to local variables */ 23418 state = strm.state; 23419 //here = state.here; 23420 _in = strm.next_in; 23421 input = strm.input; 23422 last = _in + (strm.avail_in - 5); 23423 _out = strm.next_out; 23424 output = strm.output; 23425 beg = _out - (start - strm.avail_out); 23426 end = _out + (strm.avail_out - 257); 23427//#ifdef INFLATE_STRICT 23428 dmax = state.dmax; 23429//#endif 23430 wsize = state.wsize; 23431 whave = state.whave; 23432 wnext = state.wnext; 23433 s_window = state.window; 23434 hold = state.hold; 23435 bits = state.bits; 23436 lcode = state.lencode; 23437 dcode = state.distcode; 23438 lmask = (1 << state.lenbits) - 1; 23439 dmask = (1 << state.distbits) - 1; 23440 23441 23442 /* decode literals and length/distances until end-of-block or not enough 23443 input data or output space */ 23444 23445 top: 23446 do { 23447 if (bits < 15) { 23448 hold += input[_in++] << bits; 23449 bits += 8; 23450 hold += input[_in++] << bits; 23451 bits += 8; 23452 } 23453 23454 here = lcode[hold & lmask]; 23455 23456 dolen: 23457 for (;;) { // Goto emulation 23458 op = here >>> 24/*here.bits*/; 23459 hold >>>= op; 23460 bits -= op; 23461 op = (here >>> 16) & 0xff/*here.op*/; 23462 if (op === 0) { /* literal */ 23463 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? 23464 // "inflate: literal '%c'\n" : 23465 // "inflate: literal 0x%02x\n", here.val)); 23466 output[_out++] = here & 0xffff/*here.val*/; 23467 } 23468 else if (op & 16) { /* length base */ 23469 len = here & 0xffff/*here.val*/; 23470 op &= 15; /* number of extra bits */ 23471 if (op) { 23472 if (bits < op) { 23473 hold += input[_in++] << bits; 23474 bits += 8; 23475 } 23476 len += hold & ((1 << op) - 1); 23477 hold >>>= op; 23478 bits -= op; 23479 } 23480 //Tracevv((stderr, "inflate: length %u\n", len)); 23481 if (bits < 15) { 23482 hold += input[_in++] << bits; 23483 bits += 8; 23484 hold += input[_in++] << bits; 23485 bits += 8; 23486 } 23487 here = dcode[hold & dmask]; 23488 23489 dodist: 23490 for (;;) { // goto emulation 23491 op = here >>> 24/*here.bits*/; 23492 hold >>>= op; 23493 bits -= op; 23494 op = (here >>> 16) & 0xff/*here.op*/; 23495 23496 if (op & 16) { /* distance base */ 23497 dist = here & 0xffff/*here.val*/; 23498 op &= 15; /* number of extra bits */ 23499 if (bits < op) { 23500 hold += input[_in++] << bits; 23501 bits += 8; 23502 if (bits < op) { 23503 hold += input[_in++] << bits; 23504 bits += 8; 23505 } 23506 } 23507 dist += hold & ((1 << op) - 1); 23508//#ifdef INFLATE_STRICT 23509 if (dist > dmax) { 23510 strm.msg = 'invalid distance too far back'; 23511 state.mode = BAD; 23512 break top; 23513 } 23514//#endif 23515 hold >>>= op; 23516 bits -= op; 23517 //Tracevv((stderr, "inflate: distance %u\n", dist)); 23518 op = _out - beg; /* max distance in output */ 23519 if (dist > op) { /* see if copy from window */ 23520 op = dist - op; /* distance back in window */ 23521 if (op > whave) { 23522 if (state.sane) { 23523 strm.msg = 'invalid distance too far back'; 23524 state.mode = BAD; 23525 break top; 23526 } 23527 23528// (!) This block is disabled in zlib defaults, 23529// don't enable it for binary compatibility 23530//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR 23531// if (len <= op - whave) { 23532// do { 23533// output[_out++] = 0; 23534// } while (--len); 23535// continue top; 23536// } 23537// len -= op - whave; 23538// do { 23539// output[_out++] = 0; 23540// } while (--op > whave); 23541// if (op === 0) { 23542// from = _out - dist; 23543// do { 23544// output[_out++] = output[from++]; 23545// } while (--len); 23546// continue top; 23547// } 23548//#endif 23549 } 23550 from = 0; // window index 23551 from_source = s_window; 23552 if (wnext === 0) { /* very common case */ 23553 from += wsize - op; 23554 if (op < len) { /* some from window */ 23555 len -= op; 23556 do { 23557 output[_out++] = s_window[from++]; 23558 } while (--op); 23559 from = _out - dist; /* rest from output */ 23560 from_source = output; 23561 } 23562 } 23563 else if (wnext < op) { /* wrap around window */ 23564 from += wsize + wnext - op; 23565 op -= wnext; 23566 if (op < len) { /* some from end of window */ 23567 len -= op; 23568 do { 23569 output[_out++] = s_window[from++]; 23570 } while (--op); 23571 from = 0; 23572 if (wnext < len) { /* some from start of window */ 23573 op = wnext; 23574 len -= op; 23575 do { 23576 output[_out++] = s_window[from++]; 23577 } while (--op); 23578 from = _out - dist; /* rest from output */ 23579 from_source = output; 23580 } 23581 } 23582 } 23583 else { /* contiguous in window */ 23584 from += wnext - op; 23585 if (op < len) { /* some from window */ 23586 len -= op; 23587 do { 23588 output[_out++] = s_window[from++]; 23589 } while (--op); 23590 from = _out - dist; /* rest from output */ 23591 from_source = output; 23592 } 23593 } 23594 while (len > 2) { 23595 output[_out++] = from_source[from++]; 23596 output[_out++] = from_source[from++]; 23597 output[_out++] = from_source[from++]; 23598 len -= 3; 23599 } 23600 if (len) { 23601 output[_out++] = from_source[from++]; 23602 if (len > 1) { 23603 output[_out++] = from_source[from++]; 23604 } 23605 } 23606 } 23607 else { 23608 from = _out - dist; /* copy direct from output */ 23609 do { /* minimum length is three */ 23610 output[_out++] = output[from++]; 23611 output[_out++] = output[from++]; 23612 output[_out++] = output[from++]; 23613 len -= 3; 23614 } while (len > 2); 23615 if (len) { 23616 output[_out++] = output[from++]; 23617 if (len > 1) { 23618 output[_out++] = output[from++]; 23619 } 23620 } 23621 } 23622 } 23623 else if ((op & 64) === 0) { /* 2nd level distance code */ 23624 here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; 23625 continue dodist; 23626 } 23627 else { 23628 strm.msg = 'invalid distance code'; 23629 state.mode = BAD; 23630 break top; 23631 } 23632 23633 break; // need to emulate goto via "continue" 23634 } 23635 } 23636 else if ((op & 64) === 0) { /* 2nd level length code */ 23637 here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; 23638 continue dolen; 23639 } 23640 else if (op & 32) { /* end-of-block */ 23641 //Tracevv((stderr, "inflate: end of block\n")); 23642 state.mode = TYPE; 23643 break top; 23644 } 23645 else { 23646 strm.msg = 'invalid literal/length code'; 23647 state.mode = BAD; 23648 break top; 23649 } 23650 23651 break; // need to emulate goto via "continue" 23652 } 23653 } while (_in < last && _out < end); 23654 23655 /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ 23656 len = bits >> 3; 23657 _in -= len; 23658 bits -= len << 3; 23659 hold &= (1 << bits) - 1; 23660 23661 /* update state and return */ 23662 strm.next_in = _in; 23663 strm.next_out = _out; 23664 strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); 23665 strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); 23666 state.hold = hold; 23667 state.bits = bits; 23668 return; 23669}; 23670 23671 23672/***/ }
23672), 23673/* 159 */ 23674/***/ (function(module, exports, __webpack_require__) { 23675 23676"use strict"; 23677 23678 23679// (C) 1995-2013 Jean-loup Gailly and Mark Adler 23680// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 23681// 23682// This software is provided 'as-is', without any express or implied 23683// warranty. In no event will the authors be held liable for any damages 23684// arising from the use of this software. 23685// 23686// Permission is granted to anyone to use this software for any purpose, 23687// including commercial applications, and to alter it and redistribute it 23688// freely, subject to the following restrictions: 23689// 23690// 1. The origin of this software must not be misrepresented; you must not 23691// claim that you wrote the original software. If you use this software 23692// in a product, an acknowledgment in the product documentation would be 23693// appreciated but is not required. 23694// 2. Altered source versions must be plainly marked as such, and must not be 23695// misrepresented as being the original software. 23696// 3. This notice may not be removed or altered from any source distribution. 23697 23698var utils = __webpack_require__(34
vendor: 11,496 bytes, lines 23698-24022
23698); 23699 23700var MAXBITS = 15; 23701var ENOUGH_LENS = 852; 23702var ENOUGH_DISTS = 592; 23703//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); 23704 23705var CODES = 0; 23706var LENS = 1; 23707var DISTS = 2; 23708 23709var lbase = [ /* Length codes 257..285 base */ 23710 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 23711 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 23712]; 23713 23714var lext = [ /* Length codes 257..285 extra */ 23715 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 23716 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 23717]; 23718 23719var dbase = [ /* Distance codes 0..29 base */ 23720 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 23721 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 23722 8193, 12289, 16385, 24577, 0, 0 23723]; 23724 23725var dext = [ /* Distance codes 0..29 extra */ 23726 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23727 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 23728 28, 28, 29, 29, 64, 64 23729]; 23730 23731module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) 23732{ 23733 var bits = opts.bits; 23734 //here = opts.here; /* table entry for duplication */ 23735 23736 var len = 0; /* a code's length in bits */ 23737 var sym = 0; /* index of code symbols */ 23738 var min = 0, max = 0; /* minimum and maximum code lengths */ 23739 var root = 0; /* number of index bits for root table */ 23740 var curr = 0; /* number of index bits for current table */ 23741 var drop = 0; /* code bits to drop for sub-table */ 23742 var left = 0; /* number of prefix codes available */ 23743 var used = 0; /* code entries in table used */ 23744 var huff = 0; /* Huffman code */ 23745 var incr; /* for incrementing code, index */ 23746 var fill; /* index for replicating entries */ 23747 var low; /* low bits for current root entry */ 23748 var mask; /* mask for low root bits */ 23749 var next; /* next available space in table */ 23750 var base = null; /* base value table to use */ 23751 var base_index = 0; 23752// var shoextra; /* extra bits table to use */ 23753 var end; /* use base and extra for symbol > end */ 23754 var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ 23755 var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ 23756 var extra = null; 23757 var extra_index = 0; 23758 23759 var here_bits, here_op, here_val; 23760 23761 /* 23762 Process a set of code lengths to create a canonical Huffman code. The 23763 code lengths are lens[0..codes-1]. Each length corresponds to the 23764 symbols 0..codes-1. The Huffman code is generated by first sorting the 23765 symbols by length from short to long, and retaining the symbol order 23766 for codes with equal lengths. Then the code starts with all zero bits 23767 for the first code of the shortest length, and the codes are integer 23768 increments for the same length, and zeros are appended as the length 23769 increases. For the deflate format, these bits are stored backwards 23770 from their more natural integer increment ordering, and so when the 23771 decoding tables are built in the large loop below, the integer codes 23772 are incremented backwards. 23773 23774 This routine assumes, but does not check, that all of the entries in 23775 lens[] are in the range 0..MAXBITS. The caller must assure this. 23776 1..MAXBITS is interpreted as that code length. zero means that that 23777 symbol does not occur in this code. 23778 23779 The codes are sorted by computing a count of codes for each length, 23780 creating from that a table of starting indices for each length in the 23781 sorted table, and then entering the symbols in order in the sorted 23782 table. The sorted table is work[], with that space being provided by 23783 the caller. 23784 23785 The length counts are used for other purposes as well, i.e. finding 23786 the minimum and maximum length codes, determining if there are any 23787 codes at all, checking for a valid set of lengths, and looking ahead 23788 at length counts to determine sub-table sizes when building the 23789 decoding tables. 23790 */ 23791 23792 /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ 23793 for (len = 0; len <= MAXBITS; len++) { 23794 count[len] = 0; 23795 } 23796 for (sym = 0; sym < codes; sym++) { 23797 count[lens[lens_index + sym]]++; 23798 } 23799 23800 /* bound code lengths, force root to be within code lengths */ 23801 root = bits; 23802 for (max = MAXBITS; max >= 1; max--) { 23803 if (count[max] !== 0) { break; } 23804 } 23805 if (root > max) { 23806 root = max; 23807 } 23808 if (max === 0) { /* no symbols to code at all */ 23809 //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ 23810 //table.bits[opts.table_index] = 1; //here.bits = (var char)1; 23811 //table.val[opts.table_index++] = 0; //here.val = (var short)0; 23812 table[table_index++] = (1 << 24) | (64 << 16) | 0; 23813 23814 23815 //table.op[opts.table_index] = 64; 23816 //table.bits[opts.table_index] = 1; 23817 //table.val[opts.table_index++] = 0; 23818 table[table_index++] = (1 << 24) | (64 << 16) | 0; 23819 23820 opts.bits = 1; 23821 return 0; /* no symbols, but wait for decoding to report error */ 23822 } 23823 for (min = 1; min < max; min++) { 23824 if (count[min] !== 0) { break; } 23825 } 23826 if (root < min) { 23827 root = min; 23828 } 23829 23830 /* check for an over-subscribed or incomplete set of lengths */ 23831 left = 1; 23832 for (len = 1; len <= MAXBITS; len++) { 23833 left <<= 1; 23834 left -= count[len]; 23835 if (left < 0) { 23836 return -1; 23837 } /* over-subscribed */ 23838 } 23839 if (left > 0 && (type === CODES || max !== 1)) { 23840 return -1; /* incomplete set */ 23841 } 23842 23843 /* generate offsets into symbol table for each length for sorting */ 23844 offs[1] = 0; 23845 for (len = 1; len < MAXBITS; len++) { 23846 offs[len + 1] = offs[len] + count[len]; 23847 } 23848 23849 /* sort symbols by length, by symbol order within each length */ 23850 for (sym = 0; sym < codes; sym++) { 23851 if (lens[lens_index + sym] !== 0) { 23852 work[offs[lens[lens_index + sym]]++] = sym; 23853 } 23854 } 23855 23856 /* 23857 Create and fill in decoding tables. In this loop, the table being 23858 filled is at next and has curr index bits. The code being used is huff 23859 with length len. That code is converted to an index by dropping drop 23860 bits off of the bottom. For codes where len is less than drop + curr, 23861 those top drop + curr - len bits are incremented through all values to 23862 fill the table with replicated entries. 23863 23864 root is the number of index bits for the root table. When len exceeds 23865 root, sub-tables are created pointed to by the root entry with an index 23866 of the low root bits of huff. This is saved in low to check for when a 23867 new sub-table should be started. drop is zero when the root table is 23868 being filled, and drop is root when sub-tables are being filled. 23869 23870 When a new sub-table is needed, it is necessary to look ahead in the 23871 code lengths to determine what size sub-table is needed. The length 23872 counts are used for this, and so count[] is decremented as codes are 23873 entered in the tables. 23874 23875 used keeps track of how many table entries have been allocated from the 23876 provided *table space. It is checked for LENS and DIST tables against 23877 the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in 23878 the initial root table size constants. See the comments in inftrees.h 23879 for more information. 23880 23881 sym increments through all symbols, and the loop terminates when 23882 all codes of length max, i.e. all codes, have been processed. This 23883 routine permits incomplete codes, so another loop after this one fills 23884 in the rest of the decoding tables with invalid code markers. 23885 */ 23886 23887 /* set up for code type */ 23888 // poor man optimization - use if-else instead of switch, 23889 // to avoid deopts in old v8 23890 if (type === CODES) { 23891 base = extra = work; /* dummy value--not used */ 23892 end = 19; 23893 23894 } else if (type === LENS) { 23895 base = lbase; 23896 base_index -= 257; 23897 extra = lext; 23898 extra_index -= 257; 23899 end = 256; 23900 23901 } else { /* DISTS */ 23902 base = dbase; 23903 extra = dext; 23904 end = -1; 23905 } 23906 23907 /* initialize opts for loop */ 23908 huff = 0; /* starting code */ 23909 sym = 0; /* starting code symbol */ 23910 len = min; /* starting code length */ 23911 next = table_index; /* current table to fill in */ 23912 curr = root; /* current table index bits */ 23913 drop = 0; /* current bits to drop from code for index */ 23914 low = -1; /* trigger new sub-table when len > root */ 23915 used = 1 << root; /* use root table entries */ 23916 mask = used - 1; /* mask for comparing low */ 23917 23918 /* check available table space */ 23919 if ((type === LENS && used > ENOUGH_LENS) || 23920 (type === DISTS && used > ENOUGH_DISTS)) { 23921 return 1; 23922 } 23923 23924 /* process all codes and make table entries */ 23925 for (;;) { 23926 /* create table entry */ 23927 here_bits = len - drop; 23928 if (work[sym] < end) { 23929 here_op = 0; 23930 here_val = work[sym]; 23931 } 23932 else if (work[sym] > end) { 23933 here_op = extra[extra_index + work[sym]]; 23934 here_val = base[base_index + work[sym]]; 23935 } 23936 else { 23937 here_op = 32 + 64; /* end of block */ 23938 here_val = 0; 23939 } 23940 23941 /* replicate for those indices with low len bits equal to huff */ 23942 incr = 1 << (len - drop); 23943 fill = 1 << curr; 23944 min = fill; /* save offset to next table */ 23945 do { 23946 fill -= incr; 23947 table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; 23948 } while (fill !== 0); 23949 23950 /* backwards increment the len-bit code huff */ 23951 incr = 1 << (len - 1); 23952 while (huff & incr) { 23953 incr >>= 1; 23954 } 23955 if (incr !== 0) { 23956 huff &= incr - 1; 23957 huff += incr; 23958 } else { 23959 huff = 0; 23960 } 23961 23962 /* go to next symbol, update count, len */ 23963 sym++; 23964 if (--count[len] === 0) { 23965 if (len === max) { break; } 23966 len = lens[lens_index + work[sym]]; 23967 } 23968 23969 /* create new sub-table if needed */ 23970 if (len > root && (huff & mask) !== low) { 23971 /* if first time, transition to sub-tables */ 23972 if (drop === 0) { 23973 drop = root; 23974 } 23975 23976 /* increment past last table */ 23977 next += min; /* here min is 1 << curr */ 23978 23979 /* determine length of next table */ 23980 curr = len - drop; 23981 left = 1 << curr; 23982 while (curr + drop < max) { 23983 left -= count[curr + drop]; 23984 if (left <= 0) { break; } 23985 curr++; 23986 left <<= 1; 23987 } 23988 23989 /* check for enough space */ 23990 used += 1 << curr; 23991 if ((type === LENS && used > ENOUGH_LENS) || 23992 (type === DISTS && used > ENOUGH_DISTS)) { 23993 return 1; 23994 } 23995 23996 /* point entry in root table to sub-table */ 23997 low = huff & mask; 23998 /*table.op[low] = curr; 23999 table.bits[low] = root; 24000 table.val[low] = next - opts.table_index;*/ 24001 table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; 24002 } 24003 } 24004 24005 /* fill in remaining table entry if code is incomplete (guaranteed to have 24006 at most one remaining entry, since if the code is incomplete, the 24007 maximum code length that was allowed to get this far is one bit) */ 24008 if (huff !== 0) { 24009 //table.op[next + huff] = 64; /* invalid code marker */ 24010 //table.bits[next + huff] = len - drop; 24011 //table.val[next + huff] = 0; 24012 table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; 24013 } 24014 24015 /* set return parameters */ 24016 //opts.table_index += used; 24017 opts.bits = root; 24018 return 0; 24019}; 24020 24021 24022/***/ }
24022), 24023/* 160 */ 24024/***/ (function(module, exports, __webpack_require__) { 24025 24026"use strict"; 24027 24028 24029// (C) 1995-2013 Jean-loup Gailly and Mark Adler 24030// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin 24031// 24032// This software is provided 'as-is', without any express or implied 24033// warranty. In no event will the authors be held liable for any damages 24034// arising from the use of this software. 24035// 24036// Permission is granted to anyone to use this software for any purpose, 24037// including commercial applications, and to alter it and redistribute it 24038// freely, subject to the following restrictions: 24039// 24040// 1. The origin of this software must not be misrepresented; you must not 24041// claim that you wrote the original software. If you use this software 24042// in a product, an acknowledgment in the product documentation would be 24043// appreciated but is not required. 24044// 2. Altered source versions must be plainly marked as such, and must not be 24045// misrepresented as being the original software. 24046// 3. This notice may not be removed or altered from any source distribution. 24047 24048module.exports = { 24049 24050 /* Allowed flush values; see deflate() and inflate() below for details */ 24051 Z_NO_FLUSH: 0, 24052 Z_PARTIAL_FLUSH: 1, 24053 Z_SYNC_FLUSH: 2, 24054 Z_FULL_FLUSH: 3, 24055 Z_FINISH: 4, 24056 Z_BLOCK: 5, 24057 Z_TREES: 6, 24058 24059 /* Return codes for the compression/decompression functions. Negative values 24060 * are errors, positive values are used for special but normal events. 24061 */ 24062 Z_OK: 0, 24063 Z_STREAM_END: 1, 24064 Z_NEED_DICT: 2, 24065 Z_ERRNO: -1, 24066 Z_STREAM_ERROR: -2, 24067 Z_DATA_ERROR: -3, 24068 //Z_MEM_ERROR: -4, 24069 Z_BUF_ERROR: -5, 24070 //Z_VERSION_ERROR: -6, 24071 24072 /* compression levels */ 24073 Z_NO_COMPRESSION: 0, 24074 Z_BEST_SPEED: 1, 24075 Z_BEST_COMPRESSION: 9, 24076 Z_DEFAULT_COMPRESSION: -1, 24077 24078 24079 Z_FILTERED: 1, 24080 Z_HUFFMAN_ONLY: 2, 24081 Z_RLE: 3, 24082 Z_FIXED: 4, 24083 Z_DEFAULT_STRATEGY: 0, 24084 24085 /* Possible values of the data_type field (though see inflate()) */ 24086 Z_BINARY: 0, 24087 Z_TEXT: 1, 24088 //Z_ASCII: 1, // = Z_TEXT (deprecated) 24089 Z_UNKNOWN: 2, 24090 24091 /* The deflate compression method */ 24092 Z_DEFLATED: 8 24093 //Z_NULL: null // Use -1 or null inline, depending on var type 24094}; 24095 24096 24097/***/ }), 24098/* 161 */ 24099/***/ (function(module, exports) { 24100 24101// Generated by CoffeeScript 1.12.6 24102 24103/* 24104PDFPage - represents a single page in the PDF document 24105By Devon Govett 24106 */ 24107 24108(function() { 24109 var PDFPage; 24110 24111 PDFPage = (function() { 24112 var DEFAULT_MARGINS, SIZES; 24113 24114 function PDFPage(document, options) { 24115 var dimensions; 24116 this.document = document; 24117 if (options == null) { 24118 options = {}; 24119 } 24120 this.size = options.size || 'letter'; 24121 this.layout = options.layout || 'portrait'; 24122 if (typeof options.margin === 'number') { 24123 this.margins = { 24124 top: options.margin, 24125 left: options.margin, 24126 bottom: options.margin, 24127 right: options.margin 24128 }; 24129 } else { 24130 this.margins = options.margins || DEFAULT_MARGINS; 24131 } 24132 dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()]; 24133 this.width = dimensions[this.layout === 'portrait' ? 0 : 1]; 24134 this.height = dimensions[this.layout === 'portrait' ? 1 : 0]; 24135 this.content = this.document.ref(); 24136 this.resources = this.document.ref({ 24137 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'] 24138 }); 24139 Object.defineProperties(this, { 24140 fonts: { 24141 get: (function(_this) { 24142 return function() { 24143 var base; 24144 return (base = _this.resources.data).Font != null ? base.Font : base.Font = {}; 24145 }; 24146 })(this) 24147 }, 24148 xobjects: { 24149 get: (function(_this) { 24150 return function() { 24151 var base; 24152 return (base = _this.resources.data).XObject != null ? base.XObject : base.XObject = {}; 24153 }; 24154 })(this) 24155 }, 24156 ext_gstates: { 24157 get: (function(_this) { 24158 return function() { 24159 var base;
24160 return (base = _this.resources.data).ExtGState != null ? base.ExtGState : base.ExtGState = {}; 24161 }; 24162 })(this) 24163 }, 24164 patterns: { 24165 get: (function(_this) { 24166 return function() { 24167 var base; 24168 return (base = _this.resources.data).Pattern != null ? base.Pattern : base.Pattern = {}; 24169 }; 24170 })(this) 24171 }, 24172 annotations: { 24173 get: (function(_this) { 24174 return function() { 24175 var base; 24176 return (base = _this.dictionary.data).Annots != null ? base.Annots : base.Annots = []; 24177 }; 24178 })(this) 24179 } 24180 }); 24181 this.dictionary = this.document.ref({ 24182 Type: 'Page', 24183 Parent: this.document._root.data.Pages, 24184 MediaBox: [0, 0, this.width, this.height], 24185 Contents: this.content, 24186 Resources: this.resources 24187 }); 24188 } 24189 24190 PDFPage.prototype.maxY = function() { 24191 return this.height - this.margins.bottom; 24192 }; 24193 24194 PDFPage.prototype.write = function(chunk) { 24195 return this.content.write(chunk); 24196 }; 24197 24198 PDFPage.prototype.end = function() { 24199 this.dictionary.end(); 24200 this.resources.end(); 24201 return this.content.end(); 24202 }; 24203 24204 DEFAULT_MARGINS = { 24205 top: 72, 24206 left: 72, 24207 bottom: 72, 24208 right: 72 24209 }; 24210 24211 SIZES = { 24212 '4A0': [4767.87, 6740.79], 24213 '2A0': [3370.39, 4767.87], 24214 A0: [2383.94, 3370.39], 24215 A1: [1683.78, 2383.94], 24216 A2: [1190.55, 1683.78], 24217 A3: [841.89, 1190.55], 24218 A4: [595.28, 841.89], 24219 A5: [419.53, 595.28], 24220 A6: [297.64, 419.53], 24221 A7: [209.76, 297.64], 24222 A8: [147.40, 209.76], 24223 A9: [104.88, 147.40], 24224 A10: [73.70, 104.88], 24225 B0: [2834.65, 4008.19], 24226 B1: [2004.09, 2834.65], 24227 B2: [1417.32, 2004.09], 24228 B3: [1000.63, 1417.32], 24229 B4: [708.66, 1000.63], 24230 B5: [498.90, 708.66], 24231 B6: [354.33, 498.90], 24232 B7: [249.45, 354.33], 24233 B8: [175.75, 249.45], 24234 B9: [124.72, 175.75], 24235 B10: [87.87, 124.72], 24236 C0: [2599.37, 3676.54], 24237 C1: [1836.85, 2599.37], 24238 C2: [1298.27, 1836.85], 24239 C3: [918.43, 1298.27], 24240 C4: [649.13, 918.43], 24241 C5: [459.21, 649.13], 24242 C6: [323.15, 459.21], 24243 C7: [229.61, 323.15], 24244 C8: [161.57, 229.61], 24245 C9: [113.39, 161.57], 24246 C10: [79.37, 113.39], 24247 RA0: [2437.80, 3458.27], 24248 RA1: [1729.13, 2437.80], 24249 RA2: [1218.90, 1729.13], 24250 RA3: [864.57, 1218.90], 24251 RA4: [609.45, 864.57], 24252 SRA0: [2551.18, 3628.35], 24253 SRA1: [1814.17, 2551.18], 24254 SRA2: [1275.59, 1814.17], 24255 SRA3: [907.09, 1275.59], 24256 SRA4: [637.80, 907.09], 24257 EXECUTIVE: [521.86, 756.00], 24258 FOLIO: [612.00, 936.00], 24259 LEGAL: [612.00, 1008.00], 24260 LETTER: [612.00, 792.00], 24261 TABLOID: [792.00, 1224.00] 24262 }; 24263 24264 return PDFPage; 24265 24266 })(); 24267 24268 module.exports = PDFPage; 24269 24270}).call(this); 24271 24272 24273/***/ }), 24274/* 162 */ 24275/***/ (function(module, exports, __webpack_require__) { 24276 24277// Generated by CoffeeScript 1.12.6 24278(function() { 24279 var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, ref; 24280 24281 ref = __webpack_require__(163), PDFGradient = ref.PDFGradient, PDFLinearGradient = ref.PDFLinearGradient, PDFRadialGradient = ref.PDFRadialGradient; 24282 24283 module.exports = { 24284 initColor: function() { 24285 this._opacityRegistry = {}; 24286 this._opacityCount = 0; 24287 return this._gradCount = 0; 24288 }, 24289 _normalizeColor: function(color) { 24290 var hex, part; 24291 if (color instanceof PDFGradient) { 24292 return color; 24293 } 24294 if (typeof color === 'string') { 24295 if (color.charAt(0) === '#') { 24296 if (color.length === 4) { 24297 color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3"); 24298 } 24299 hex = parseInt(color.slice(1), 16); 24300 color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; 24301 } else if (namedColors[color]) { 24302 color = namedColors[color]; 24303 } 24304 } 24305 if (Array.isArray(color)) { 24306 if (color.length === 3) { 24307 color = (function() { 24308 var i, len, results; 24309 results = []; 24310 for (i = 0, len = color.length; i < len; i++) { 24311 part = color[i]; 24312 results.push(part / 255); 24313 } 24314 return results; 24315 })(); 24316 } else if (color.length === 4) { 24317 color = (function() { 24318 var i, len, results; 24319 results = []; 24320 for (i = 0, len = color.length; i < len; i++) { 24321 part = color[i]; 24322 results.push(part / 100); 24323 } 24324 return results; 24325 })(); 24326 } 24327 return color; 24328 } 24329 return null; 24330 }, 24331 _setColor: function(color, stroke) { 24332 var op, space; 24333 color = this._normalizeColor(color); 24334 if (!color) { 24335 return false;
24336 } 24337 op = stroke ? 'SCN' : 'scn'; 24338 if (color instanceof PDFGradient) { 24339 this._setColorSpace('Pattern', stroke); 24340 color.apply(op); 24341 } else { 24342 space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; 24343 this._setColorSpace(space, stroke); 24344 color = color.join(' '); 24345 this.addContent(color + " " + op); 24346 } 24347 return true; 24348 }, 24349 _setColorSpace: function(space, stroke) { 24350 var op; 24351 op = stroke ? 'CS' : 'cs'; 24352 return this.addContent("/" + space + " " + op); 24353 }, 24354 fillColor: function(color, opacity) { 24355 var set; 24356 set = this._setColor(color, false); 24357 if (set) { 24358 this.fillOpacity(opacity); 24359 } 24360 this._fillColor = [color, opacity]; 24361 return this; 24362 }, 24363 strokeColor: function(color, opacity) { 24364 var set; 24365 set = this._setColor(color, true); 24366 if (set) { 24367 this.strokeOpacity(opacity); 24368 } 24369 return this; 24370 }, 24371 opacity: function(opacity) { 24372 this._doOpacity(opacity, opacity); 24373 return this; 24374 }, 24375 fillOpacity: function(opacity) { 24376 this._doOpacity(opacity, null); 24377 return this; 24378 }, 24379 strokeOpacity: function(opacity) { 24380 this._doOpacity(null, opacity); 24381 return this; 24382 }, 24383 _doOpacity: function(fillOpacity, strokeOpacity) { 24384 var dictionary, id, key, name, ref1; 24385 if (!((fillOpacity != null) || (strokeOpacity != null))) { 24386 return; 24387 } 24388 if (fillOpacity != null) { 24389 fillOpacity = Math.max(0, Math.min(1, fillOpacity)); 24390 } 24391 if (strokeOpacity != null) { 24392 strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); 24393 } 24394 key = fillOpacity + "_" + strokeOpacity; 24395 if (this._opacityRegistry[key]) { 24396 ref1 = this._opacityRegistry[key], dictionary = ref1[0], name = ref1[1]; 24397 } else { 24398 dictionary = { 24399 Type: 'ExtGState' 24400 }; 24401 if (fillOpacity != null) { 24402 dictionary.ca = fillOpacity; 24403 } 24404 if (strokeOpacity != null) { 24405 dictionary.CA = strokeOpacity; 24406 } 24407 dictionary = this.ref(dictionary); 24408 dictionary.end(); 24409 id = ++this._opacityCount; 24410 name = "Gs" + id; 24411 this._opacityRegistry[key] = [dictionary, name]; 24412 } 24413 this.page.ext_gstates[name] = dictionary; 24414 return this.addContent("/" + name + " gs"); 24415 }, 24416 linearGradient: function(x1, y1, x2, y2) { 24417 return new PDFLinearGradient(this, x1, y1, x2, y2); 24418 }, 24419 radialGradient: function(x1, y1, r1, x2, y2, r2) { 24420 return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2); 24421 } 24422 }; 24423 24424 namedColors = { 24425 aliceblue: [240, 248, 255], 24426 antiquewhite: [250, 235, 215], 24427 aqua: [0, 255, 255], 24428 aquamarine: [127, 255, 212], 24429 azure: [240, 255, 255], 24430 beige: [245, 245, 220], 24431 bisque: [255, 228, 196], 24432 black: [0, 0, 0], 24433 blanchedalmond: [255, 235, 205], 24434 blue: [0, 0, 255], 24435 blueviolet: [138, 43, 226], 24436 brown: [165, 42, 42], 24437 burlywood: [222, 184, 135], 24438 cadetblue: [95, 158, 160], 24439 chartreuse: [127, 255, 0], 24440 chocolate: [210, 105, 30], 24441 coral: [255, 127, 80], 24442 cornflowerblue: [100, 149, 237], 24443 cornsilk: [255, 248, 220], 24444 crimson: [220, 20, 60], 24445 cyan: [0, 255, 255], 24446 darkblue: [0, 0, 139], 24447 darkcyan: [0, 139, 139], 24448 darkgoldenrod: [184, 134, 11], 24449 darkgray: [169, 169, 169], 24450 darkgreen: [0, 100, 0], 24451 darkgrey: [169, 169, 169], 24452 darkkhaki: [189, 183, 107], 24453 darkmagenta: [139, 0, 139], 24454 darkolivegreen: [85, 107, 47], 24455 darkorange: [255, 140, 0], 24456 darkorchid: [153, 50, 204], 24457 darkred: [139, 0, 0], 24458 darksalmon: [233, 150, 122], 24459 darkseagreen: [143, 188, 143], 24460 darkslateblue: [72, 61, 139], 24461 darkslategray: [47, 79, 79], 24462 darkslategrey: [47, 79, 79], 24463 darkturquoise: [0, 206, 209], 24464 darkviolet: [148, 0, 211], 24465 deeppink: [255, 20, 147], 24466 deepskyblue: [0, 191, 255], 24467 dimgray: [105, 105, 105], 24468 dimgrey: [105, 105, 105], 24469 dodgerblue: [30, 144, 255], 24470 firebrick: [178, 34, 34], 24471 floralwhite: [255, 250, 240], 24472 forestgreen: [34, 139, 34], 24473 fuchsia: [255, 0, 255], 24474 gainsboro: [220, 220, 220], 24475 ghostwhite: [248, 248, 255], 24476 gold: [255, 215, 0], 24477 goldenrod: [218, 165, 32], 24478 gray: [128, 128, 128], 24479 grey: [128, 128, 128], 24480 green: [0, 128, 0], 24481 greenyellow: [173, 255, 47], 24482 honeydew: [240, 255, 240], 24483 hotpink: [255, 105, 180], 24484 indianred: [205, 92, 92], 24485 indigo: [75, 0, 130], 24486 ivory: [255, 255, 240], 24487 khaki: [240, 230, 140], 24488 lavender: [230, 230, 250], 24489 lavenderblush: [255, 240, 245], 24490 lawngreen: [124, 252, 0], 24491 lemonchiffon: [255, 250, 205], 24492 lightblue: [173, 216, 230], 24493 lightcoral: [240, 128, 128], 24494 lightcyan: [224, 255, 255], 24495 lightgoldenrodyellow: [250, 250, 210], 24496 lightgray: [211, 211, 211], 24497 lightgreen: [144, 238, 144], 24498 lightgrey: [211, 211, 211], 24499 lightpink: [255, 182, 193], 24500 lightsalmon: [255, 160, 122], 24501 lightseagreen: [32, 178, 170], 24502 lightskyblue: [135, 206, 250], 24503 lightslategray: [119, 136, 153], 24504 lightslategrey: [119, 136, 153], 24505 lightsteelblue: [176, 196, 222], 24506 lightyellow: [255, 255, 224], 24507 lime: [0, 255, 0], 24508 limegreen: [50, 205, 50], 24509 linen: [250, 240, 230], 24510 magenta: [255, 0, 255], 24511 maroon: [128, 0, 0], 24512 mediumaquamarine: [102, 205, 170], 24513 mediumblue: [0, 0, 205], 24514 mediumorchid: [186, 85, 211], 24515 mediumpurple: [147, 112, 219], 24516 mediumseagreen: [60, 179, 113], 24517 mediumslateblue: [123, 104, 238], 24518 mediumspringgreen: [0, 250, 154], 24519 mediumturquoise: [72, 209, 204], 24520 mediumvioletred: [199, 21, 133], 24521 midnightblue: [25, 25, 112], 24522 mintcream: [245, 255, 250], 24523 mistyrose: [255, 228, 225], 24524 moccasin: [255, 228, 181], 24525 navajowhite: [255, 222, 173], 24526 navy: [0, 0, 128], 24527 oldlace: [253, 245, 230], 24528 olive: [128, 128, 0], 24529 olivedrab: [107, 142, 35], 24530 orange: [255, 165, 0], 24531 orangered: [255, 69, 0], 24532 orchid: [218, 112, 214], 24533 palegoldenrod: [238, 232, 170], 24534 palegreen: [152, 251, 152], 24535 paleturquoise: [175, 238, 238], 24536 palevioletred: [219, 112, 147], 24537 papayawhip: [255, 239, 213], 24538 peachpuff: [255, 218, 185], 24539 peru: [205, 133, 63], 24540 pink: [255, 192, 203], 24541 plum: [221, 160, 221], 24542 powderblue: [176, 224, 230], 24543 purple: [128, 0, 128], 24544 red: [255, 0, 0], 24545 rosybrown: [188, 143, 143], 24546 royalblue: [65, 105, 225], 24547 saddlebrown: [139, 69, 19], 24548 salmon: [250, 128, 114], 24549 sandybrown: [244, 164, 96], 24550 seagreen: [46, 139, 87], 24551 seashell: [255, 245, 238], 24552 sienna: [160, 82, 45], 24553 silver: [192, 192, 192], 24554 skyblue: [135, 206, 235], 24555 slateblue: [106, 90, 205], 24556 slategray: [112, 128, 144], 24557 slategrey: [112, 128, 144], 24558 snow: [255, 250, 250], 24559 springgreen: [0, 255, 127], 24560 steelblue: [70, 130, 180], 24561 tan: [210, 180, 140], 24562 teal: [0, 128, 128], 24563 thistle: [216, 191, 216], 24564 tomato: [255, 99, 71], 24565 turquoise: [64, 224, 208], 24566 violet: [238, 130, 238], 24567 wheat: [245, 222, 179], 24568 white: [255, 255, 255], 24569 whitesmoke: [245, 245, 245], 24570 yellow: [255, 255, 0], 24571 yellowgreen: [154, 205, 50] 24572 }; 24573 24574}).call(this); 24575 24576 24577/***/ }), 24578/* 163 */
24579/***/ (function(module, exports) { 24580 24581// Generated by CoffeeScript 1.12.6 24582(function() { 24583 var PDFGradient, PDFLinearGradient, PDFRadialGradient, 24584 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 24585 hasProp = {}.hasOwnProperty; 24586 24587 PDFGradient = (function() { 24588 function PDFGradient(doc) { 24589 this.doc = doc; 24590 this.stops = []; 24591 this.embedded = false; 24592 this.transform = [1, 0, 0, 1, 0, 0]; 24593 this._colorSpace = 'DeviceRGB'; 24594 } 24595 24596 PDFGradient.prototype.stop = function(pos, color, opacity) { 24597 if (opacity == null) { 24598 opacity = 1; 24599 } 24600 opacity = Math.max(0, Math.min(1, opacity)); 24601 this.stops.push([pos, this.doc._normalizeColor(color), opacity]); 24602 return this; 24603 }; 24604 24605 PDFGradient.prototype.setTransform = function(m11, m12, m21, m22, dx, dy) { 24606 this.transform = [m11, m12, m21, m22, dx, dy]; 24607 return this; 24608 }; 24609 24610 PDFGradient.prototype.embed = function(m) { 24611 var bounds, encode, fn, form, grad, gstate, i, j, k, last, len, opacityPattern, pageBBox, pattern, ref, ref1, shader, stop, stops, v; 24612 if (this.stops.length === 0) { 24613 return; 24614 } 24615 this.embedded = true; 24616 this.matrix = m; 24617 last = this.stops[this.stops.length - 1]; 24618 if (last[0] < 1) { 24619 this.stops.push([1, last[1], last[2]]); 24620 } 24621 bounds = []; 24622 encode = []; 24623 stops = []; 24624 for (i = j = 0, ref = this.stops.length - 1; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 24625 encode.push(0, 1); 24626 if (i + 2 !== this.stops.length) { 24627 bounds.push(this.stops[i + 1][0]); 24628 } 24629 fn = this.doc.ref({ 24630 FunctionType: 2, 24631 Domain: [0, 1], 24632 C0: this.stops[i + 0][1], 24633 C1: this.stops[i + 1][1], 24634 N: 1 24635 }); 24636 stops.push(fn); 24637 fn.end(); 24638 } 24639 if (stops.length === 1) { 24640 fn = stops[0]; 24641 } else { 24642 fn = this.doc.ref({ 24643 FunctionType: 3, 24644 Domain: [0, 1], 24645 Functions: stops, 24646 Bounds: bounds, 24647 Encode: encode 24648 }); 24649 fn.end(); 24650 } 24651 this.id = 'Sh' + (++this.doc._gradCount); 24652 shader = this.shader(fn); 24653 shader.end(); 24654 pattern = this.doc.ref({ 24655 Type: 'Pattern', 24656 PatternType: 2, 24657 Shading: shader, 24658 Matrix: (function() { 24659 var k, len, ref1, results; 24660 ref1 = this.matrix; 24661 results = []; 24662 for (k = 0, len = ref1.length; k < len; k++) { 24663 v = ref1[k]; 24664 results.push(+v.toFixed(5)); 24665 } 24666 return results; 24667 }).call(this) 24668 }); 24669 pattern.end(); 24670 if (this.stops.some(function(stop) { 24671 return stop[2] < 1; 24672 })) { 24673 grad = this.opacityGradient(); 24674 grad._colorSpace = 'DeviceGray'; 24675 ref1 = this.stops; 24676 for (k = 0, len = ref1.length; k < len; k++) { 24677 stop = ref1[k]; 24678 grad.stop(stop[0], [stop[2]]); 24679 } 24680 grad = grad.embed(this.matrix); 24681 pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; 24682 form = this.doc.ref({ 24683 Type: 'XObject', 24684 Subtype: 'Form', 24685 FormType: 1, 24686 BBox: pageBBox, 24687 Group: { 24688 Type: 'Group', 24689 S: 'Transparency', 24690 CS: 'DeviceGray' 24691 }, 24692 Resources: { 24693 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], 24694 Pattern: { 24695 Sh1: grad 24696 } 24697 } 24698 }); 24699 form.write("/Pattern cs /Sh1 scn"); 24700 form.end((pageBBox.join(" ")) + " re f"); 24701 gstate = this.doc.ref({ 24702 Type: 'ExtGState', 24703 SMask: { 24704 Type: 'Mask', 24705 S: 'Luminosity', 24706 G: form 24707 } 24708 }); 24709 gstate.end(); 24710 opacityPattern = this.doc.ref({ 24711 Type: 'Pattern', 24712 PatternType: 1, 24713 PaintType: 1, 24714 TilingType: 2, 24715 BBox: pageBBox, 24716 XStep: pageBBox[2], 24717 YStep: pageBBox[3], 24718 Resources: { 24719 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], 24720 Pattern: { 24721 Sh1: pattern 24722 }, 24723 ExtGState: {
24724 Gs1: gstate 24725 } 24726 } 24727 }); 24728 opacityPattern.write("/Gs1 gs /Pattern cs /Sh1 scn"); 24729 opacityPattern.end((pageBBox.join(" ")) + " re f"); 24730 this.doc.page.patterns[this.id] = opacityPattern; 24731 } else { 24732 this.doc.page.patterns[this.id] = pattern; 24733 } 24734 return pattern; 24735 }; 24736 24737 PDFGradient.prototype.apply = function(op) { 24738 var dx, dy, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, ref, ref1; 24739 ref = this.doc._ctm.slice(), m0 = ref[0], m1 = ref[1], m2 = ref[2], m3 = ref[3], m4 = ref[4], m5 = ref[5]; 24740 ref1 = this.transform, m11 = ref1[0], m12 = ref1[1], m21 = ref1[2], m22 = ref1[3], dx = ref1[4], dy = ref1[5]; 24741 m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; 24742 if (!(this.embedded && m.join(" ") === this.matrix.join(" "))) { 24743 this.embed(m); 24744 } 24745 return this.doc.addContent("/" + this.id + " " + op); 24746 }; 24747 24748 return PDFGradient; 24749 24750 })(); 24751 24752 PDFLinearGradient = (function(superClass) { 24753 extend(PDFLinearGradient, superClass); 24754 24755 function PDFLinearGradient(doc, x1, y1, x2, y2) { 24756 this.doc = doc; 24757 this.x1 = x1; 24758 this.y1 = y1; 24759 this.x2 = x2; 24760 this.y2 = y2; 24761 PDFLinearGradient.__super__.constructor.apply(this, arguments); 24762 } 24763 24764 PDFLinearGradient.prototype.shader = function(fn) { 24765 return this.doc.ref({ 24766 ShadingType: 2, 24767 ColorSpace: this._colorSpace, 24768 Coords: [this.x1, this.y1, this.x2, this.y2], 24769 Function: fn, 24770 Extend: [true, true] 24771 }); 24772 }; 24773 24774 PDFLinearGradient.prototype.opacityGradient = function() { 24775 return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2); 24776 }; 24777 24778 return PDFLinearGradient; 24779 24780 })(PDFGradient); 24781 24782 PDFRadialGradient = (function(superClass) { 24783 extend(PDFRadialGradient, superClass); 24784 24785 function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) { 24786 this.doc = doc; 24787 this.x1 = x1; 24788 this.y1 = y1; 24789 this.r1 = r1; 24790 this.x2 = x2; 24791 this.y2 = y2; 24792 this.r2 = r2; 24793 PDFRadialGradient.__super__.constructor.apply(this, arguments); 24794 } 24795 24796 PDFRadialGradient.prototype.shader = function(fn) { 24797 return this.doc.ref({ 24798 ShadingType: 3, 24799 ColorSpace: this._colorSpace, 24800 Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], 24801 Function: fn, 24802 Extend: [true, true] 24803 }); 24804 }; 24805 24806 PDFRadialGradient.prototype.opacityGradient = function() { 24807 return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); 24808 }; 24809 24810 return PDFRadialGradient; 24811 24812 })(PDFGradient); 24813 24814 module.exports = { 24815 PDFGradient: PDFGradient, 24816 PDFLinearGradient: PDFLinearGradient, 24817 PDFRadialGradient: PDFRadialGradient 24818 }; 24819 24820}).call(this); 24821 24822 24823/***/ }), 24824/* 164 */ 24825/***/ (function(module, exports, __webpack_require__) { 24826 24827// Generated by CoffeeScript 1.12.6 24828(function() { 24829 var KAPPA, SVGPath, number, 24830 slice = [].slice; 24831 24832 SVGPath = __webpack_require__(165); 24833 24834 number = __webpack_require__(26).number; 24835 24836 KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0); 24837 24838 module.exports = { 24839 initVector: function() { 24840 this._ctm = [1, 0, 0, 1, 0, 0]; 24841 return this._ctmStack = []; 24842 }, 24843 save: function() { 24844 this._ctmStack.push(this._ctm.slice()); 24845 return this.addContent('q'); 24846 }, 24847 restore: function() { 24848 this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0]; 24849 return this.addContent('Q'); 24850 }, 24851 closePath: function() { 24852 return this.addContent('h'); 24853 }, 24854 lineWidth: function(w) { 24855 return this.addContent((number(w)) + " w"); 24856 }, 24857 _CAP_STYLES: { 24858 BUTT: 0, 24859 ROUND: 1, 24860 SQUARE: 2 24861 }, 24862 lineCap: function(c) { 24863 if (typeof c === 'string') { 24864 c = this._CAP_STYLES[c.toUpperCase()]; 24865 } 24866 return this.addContent(c + " J"); 24867 }, 24868 _JOIN_STYLES: { 24869 MITER: 0, 24870 ROUND: 1, 24871 BEVEL: 2 24872 }, 24873 lineJoin: function(j) { 24874 if (typeof j === 'string') { 24875 j = this._JOIN_STYLES[j.toUpperCase()]; 24876 } 24877 return this.addContent(j + " j"); 24878 }, 24879 miterLimit: function(m) { 24880 return this.addContent((number(m)) + " M"); 24881 }, 24882 dash: function(length, options) { 24883 var phase, ref, space, v; 24884 if (options == null) { 24885 options = {}; 24886 } 24887 if (length == null) { 24888 return this; 24889 } 24890 if (Array.isArray(length)) { 24891 length = ((function() { 24892 var i, len, results; 24893 results = []; 24894 for (i = 0, len = length.length; i < len; i++) { 24895 v = length[i]; 24896 results.push(number(v)); 24897 } 24898 return results; 24899 })()).join(' '); 24900 phase = options.phase || 0; 24901 return this.addContent("[" + length + "] " + (number(phase)) + " d"); 24902 } else { 24903 space = (ref = options.space) != null ? ref : length; 24904 phase = options.phase || 0; 24905 return this.addContent("[" + (number(length)) + " " + (number(space)) + "] " + (number(phase)) + " d"); 24906 } 24907 }, 24908 undash: function() { 24909 return this.addContent("[] 0 d"); 24910 }, 24911 moveTo: function(x, y) { 24912 return this.addContent((number(x)) + " " + (number(y)) + " m"); 24913 }, 24914 lineTo: function(x, y) { 24915 return this.addContent((number(x)) + " " + (number(y)) + " l"); 24916 }, 24917 bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y) { 24918 return this.addContent((number(cp1x)) + " " + (number(cp1y)) + " " + (number(cp2x)) + " " + (number(cp2y)) + " " + (number(x)) + " " + (number(y)) + " c"); 24919 }, 24920 quadraticCurveTo: function(cpx, cpy, x, y) { 24921 return this.addContent((number(cpx)) + " " + (number(cpy)) + " " + (number(x)) + " " + (number(y)) + " v"); 24922 }, 24923 rect: function(x, y, w, h) { 24924 return this.addContent((number(x)) + " " + (number(y)) + " " + (number(w)) + " " + (number(h)) + " re"); 24925 }, 24926 roundedRect: function(x, y, w, h, r) { 24927 var c; 24928 if (r == null) { 24929 r = 0; 24930 } 24931 r = Math.min(r, 0.5 * w, 0.5 * h); 24932 c = r * (1.0 - KAPPA); 24933 this.moveTo(x + r, y); 24934 this.lineTo(x + w - r, y); 24935 this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r); 24936 this.lineTo(x + w, y + h - r); 24937 this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h); 24938 this.lineTo(x + r, y + h); 24939 this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r); 24940 this.lineTo(x, y + r); 24941 this.bezierCurveTo(x, y + c, x + c, y, x + r, y); 24942 return this.closePath(); 24943 }, 24944 ellipse: function(x, y, r1, r2) { 24945 var ox, oy, xe, xm, ye, ym; 24946 if (r2 == null) { 24947 r2 = r1; 24948 } 24949 x -= r1; 24950 y -= r2; 24951 ox = r1 * KAPPA; 24952 oy = r2 * KAPPA; 24953 xe = x + r1 * 2; 24954 ye = y + r2 * 2; 24955 xm = x + r1; 24956 ym = y + r2; 24957 this.moveTo(x, ym); 24958 this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); 24959 this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); 24960 this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); 24961 this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); 24962 return this.closePath(); 24963 }, 24964 circle: function(x, y, radius) { 24965 return this.ellipse(x, y, radius); 24966 }, 24967 arc: function(x, y, radius, startAngle, endAngle, anticlockwise) { 24968 var HALF_PI, TWO_PI, ax, ay, cp1x, cp1y, cp2x, cp2y, curAng, deltaAng, deltaCx, deltaCy, dir, handleLen, i, numSegs, ref, segAng, segIdx; 24969 if (anticlockwise == null) { 24970 anticlockwise = false;
24971 } 24972 TWO_PI = 2.0 * Math.PI; 24973 HALF_PI = 0.5 * Math.PI; 24974 deltaAng = endAngle - startAngle; 24975 if (Math.abs(deltaAng) > TWO_PI) { 24976 deltaAng = TWO_PI; 24977 } else if (deltaAng !== 0 && anticlockwise !== (deltaAng < 0)) { 24978 dir = anticlockwise ? -1 : 1; 24979 deltaAng = dir * TWO_PI + deltaAng; 24980 } 24981 numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI); 24982 segAng = deltaAng / numSegs; 24983 handleLen = (segAng / HALF_PI) * KAPPA * radius; 24984 curAng = startAngle; 24985 deltaCx = -Math.sin(curAng) * handleLen; 24986 deltaCy = Math.cos(curAng) * handleLen; 24987 ax = x + Math.cos(curAng) * radius; 24988 ay = y + Math.sin(curAng) * radius; 24989 this.moveTo(ax, ay); 24990 for (segIdx = i = 0, ref = numSegs; 0 <= ref ? i < ref : i > ref; segIdx = 0 <= ref ? ++i : --i) { 24991 cp1x = ax + deltaCx; 24992 cp1y = ay + deltaCy; 24993 curAng += segAng; 24994 ax = x + Math.cos(curAng) * radius; 24995 ay = y + Math.sin(curAng) * radius; 24996 deltaCx = -Math.sin(curAng) * handleLen; 24997 deltaCy = Math.cos(curAng) * handleLen; 24998 cp2x = ax - deltaCx; 24999 cp2y = ay - deltaCy; 25000 this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay); 25001 } 25002 return this; 25003 }, 25004 polygon: function() { 25005 var i, len, point, points; 25006 points = 1 <= arguments.length ? slice.call(arguments, 0) : []; 25007 this.moveTo.apply(this, points.shift()); 25008 for (i = 0, len = points.length; i < len; i++) { 25009 point = points[i]; 25010 this.lineTo.apply(this, point); 25011 } 25012 return this.closePath(); 25013 }, 25014 path: function(path) { 25015 SVGPath.apply(this, path); 25016 return this; 25017 }, 25018 _windingRule: function(rule) { 25019 if (/even-?odd/.test(rule)) { 25020 return '*'; 25021 } 25022 return ''; 25023 }, 25024 fill: function(color, rule) { 25025 if (/(even-?odd)|(non-?zero)/.test(color)) { 25026 rule = color; 25027 color = null; 25028 } 25029 if (color) { 25030 this.fillColor(color); 25031 } 25032 return this.addContent('f' + this._windingRule(rule)); 25033 }, 25034 stroke: function(color) { 25035 if (color) { 25036 this.strokeColor(color); 25037 } 25038 return this.addContent('S'); 25039 }, 25040 fillAndStroke: function(fillColor, strokeColor, rule) { 25041 var isFillRule; 25042 if (strokeColor == null) { 25043 strokeColor = fillColor; 25044 } 25045 isFillRule = /(even-?odd)|(non-?zero)/; 25046 if (isFillRule.test(fillColor)) { 25047 rule = fillColor; 25048 fillColor = null; 25049 } 25050 if (isFillRule.test(strokeColor)) { 25051 rule = strokeColor; 25052 strokeColor = fillColor; 25053 } 25054 if (fillColor) { 25055 this.fillColor(fillColor); 25056 this.strokeColor(strokeColor); 25057 } 25058 return this.addContent('B' + this._windingRule(rule)); 25059 }, 25060 clip: function(rule) { 25061 return this.addContent('W' + this._windingRule(rule) + ' n'); 25062 }, 25063 transform: function(m11, m12, m21, m22, dx, dy) { 25064 var m, m0, m1, m2, m3, m4, m5, v, values; 25065 m = this._ctm; 25066 m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5]; 25067 m[0] = m0 * m11 + m2 * m12; 25068 m[1] = m1 * m11 + m3 * m12; 25069 m[2] = m0 * m21 + m2 * m22; 25070 m[3] = m1 * m21 + m3 * m22; 25071 m[4] = m0 * dx + m2 * dy + m4; 25072 m[5] = m1 * dx + m3 * dy + m5; 25073 values = ((function() { 25074 var i, len, ref, results; 25075 ref = [m11, m12, m21, m22, dx, dy]; 25076 results = []; 25077 for (i = 0, len = ref.length; i < len; i++) { 25078 v = ref[i]; 25079 results.push(number(v)); 25080 } 25081 return results; 25082 })()).join(' '); 25083 return this.addContent(values + " cm"); 25084 }, 25085 translate: function(x, y) { 25086 return this.transform(1, 0, 0, 1, x, y); 25087 }, 25088 rotate: function(angle, options) { 25089 var cos, rad, ref, sin, x, x1, y, y1; 25090 if (options == null) { 25091 options = {}; 25092 } 25093 rad = angle * Math.PI / 180; 25094 cos = Math.cos(rad); 25095 sin = Math.sin(rad); 25096 x = y = 0; 25097 if (options.origin != null) { 25098 ref = options.origin, x = ref[0], y = ref[1]; 25099 x1 = x * cos - y * sin; 25100 y1 = x * sin + y * cos; 25101 x -= x1; 25102 y -= y1; 25103 } 25104 return this.transform(cos, sin, -sin, cos, x, y); 25105 }, 25106 scale: function(xFactor, yFactor, options) { 25107 var ref, x, y; 25108 if (yFactor == null) { 25109 yFactor = xFactor; 25110 } 25111 if (options == null) { 25112 options = {}; 25113 } 25114 if (typeof yFactor === "object") { 25115 options = yFactor; 25116 yFactor = xFactor; 25117 } 25118 x = y = 0; 25119 if (options.origin != null) { 25120 ref = options.origin, x = ref[0], y = ref[1]; 25121 x -= xFactor * x; 25122 y -= yFactor * y; 25123 } 25124 return this.transform(xFactor, 0, 0, yFactor, x, y); 25125 } 25126 }; 25127 25128}).call(this); 25129 25130 25131/***/ }), 25132/* 165 */
25133/***/ (function(module, exports) { 25134 25135// Generated by CoffeeScript 1.12.6 25136(function() { 25137 var SVGPath; 25138 25139 SVGPath = (function() { 25140 var apply, arcToSegments, cx, cy, parameters, parse, px, py, runners, segmentToBezier, solveArc, sx, sy; 25141 25142 function SVGPath() {} 25143 25144 SVGPath.apply = function(doc, path) { 25145 var commands; 25146 commands = parse(path); 25147 return apply(commands, doc); 25148 }; 25149 25150 parameters = { 25151 A: 7, 25152 a: 7, 25153 C: 6, 25154 c: 6, 25155 H: 1, 25156 h: 1, 25157 L: 2, 25158 l: 2, 25159 M: 2, 25160 m: 2, 25161 Q: 4, 25162 q: 4, 25163 S: 4, 25164 s: 4, 25165 T: 2, 25166 t: 2, 25167 V: 1, 25168 v: 1, 25169 Z: 0, 25170 z: 0 25171 }; 25172 25173 parse = function(path) { 25174 var args, c, cmd, curArg, foundDecimal, j, len, params, ret; 25175 ret = []; 25176 args = []; 25177 curArg = ""; 25178 foundDecimal = false; 25179 params = 0; 25180 for (j = 0, len = path.length; j < len; j++) { 25181 c = path[j]; 25182 if (parameters[c] != null) { 25183 params = parameters[c]; 25184 if (cmd) { 25185 if (curArg.length > 0) { 25186 args[args.length] = +curArg; 25187 } 25188 ret[ret.length] = { 25189 cmd: cmd, 25190 args: args 25191 }; 25192 args = []; 25193 curArg = ""; 25194 foundDecimal = false; 25195 } 25196 cmd = c; 25197 } else if ((c === " " || c === ",") || (c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') || (c === "." && foundDecimal)) { 25198 if (curArg.length === 0) { 25199 continue; 25200 } 25201 if (args.length === params) { 25202 ret[ret.length] = { 25203 cmd: cmd, 25204 args: args 25205 }; 25206 args = [+curArg]; 25207 if (cmd === "M") { 25208 cmd = "L"; 25209 } 25210 if (cmd === "m") { 25211 cmd = "l"; 25212 } 25213 } else { 25214 args[args.length] = +curArg; 25215 } 25216 foundDecimal = c === "."; 25217 curArg = c === '-' || c === '.' ? c : ''; 25218 } else { 25219 curArg += c; 25220 if (c === '.') { 25221 foundDecimal = true; 25222 } 25223 } 25224 } 25225 if (curArg.length > 0) { 25226 if (args.length === params) { 25227 ret[ret.length] = { 25228 cmd: cmd, 25229 args: args 25230 }; 25231 args = [+curArg]; 25232 if (cmd === "M") { 25233 cmd = "L"; 25234 } 25235 if (cmd === "m") { 25236 cmd = "l"; 25237 } 25238 } else { 25239 args[args.length] = +curArg; 25240 } 25241 } 25242 ret[ret.length] = { 25243 cmd: cmd, 25244 args: args 25245 }; 25246 return ret; 25247 }; 25248 25249 cx = cy = px = py = sx = sy = 0; 25250 25251 apply = function(commands, doc) { 25252 var c, i, j, len, name; 25253 cx = cy = px = py = sx = sy = 0; 25254 for (i = j = 0, len = commands.length; j < len; i = ++j) { 25255 c = commands[i]; 25256 if (typeof runners[name = c.cmd] === "function") { 25257 runners[name](doc, c.args); 25258 } 25259 } 25260 return cx = cy = px = py = 0; 25261 }; 25262 25263 runners = { 25264 M: function(doc, a) { 25265 cx = a[0]; 25266 cy = a[1]; 25267 px = py = null; 25268 sx = cx; 25269 sy = cy; 25270 return doc.moveTo(cx, cy); 25271 }, 25272 m: function(doc, a) { 25273 cx += a[0]; 25274 cy += a[1]; 25275 px = py = null; 25276 sx = cx; 25277 sy = cy; 25278 return doc.moveTo(cx, cy); 25279 }, 25280 C: function(doc, a) { 25281 cx = a[4]; 25282 cy = a[5]; 25283 px = a[2]; 25284 py = a[3]; 25285 return doc.bezierCurveTo.apply(doc, a); 25286 }, 25287 c: function(doc, a) { 25288 doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy); 25289 px = cx + a[2]; 25290 py = cy + a[3]; 25291 cx += a[4]; 25292 return cy += a[5]; 25293 }, 25294 S: function(doc, a) { 25295 if (px === null) { 25296 px = cx; 25297 py = cy; 25298 } 25299 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]); 25300 px = a[0]; 25301 py = a[1]; 25302 cx = a[2]; 25303 return cy = a[3]; 25304 }, 25305 s: function(doc, a) { 25306 if (px === null) { 25307 px = cx; 25308 py = cy; 25309 } 25310 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]); 25311 px = cx + a[0]; 25312 py = cy + a[1]; 25313 cx += a[2]; 25314 return cy += a[3]; 25315 }, 25316 Q: function(doc, a) { 25317 px = a[0]; 25318 py = a[1]; 25319 cx = a[2]; 25320 cy = a[3]; 25321 return doc.quadraticCurveTo(a[0], a[1], cx, cy); 25322 }, 25323 q: function(doc, a) { 25324 doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy); 25325 px = cx + a[0]; 25326 py = cy + a[1]; 25327 cx += a[2]; 25328 return cy += a[3]; 25329 }, 25330 T: function(doc, a) { 25331 if (px === null) { 25332 px = cx; 25333 py = cy; 25334 } else { 25335 px = cx - (px - cx); 25336 py = cy - (py - cy); 25337 } 25338 doc.quadraticCurveTo(px, py, a[0], a[1]); 25339 px = cx - (px - cx); 25340 py = cy - (py - cy); 25341 cx = a[0]; 25342 return cy = a[1]; 25343 }, 25344 t: function(doc, a) { 25345 if (px === null) { 25346 px = cx; 25347 py = cy; 25348 } else { 25349 px = cx - (px - cx); 25350 py = cy - (py - cy); 25351 } 25352 doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]); 25353 cx += a[0]; 25354 return cy += a[1]; 25355 }, 25356 A: function(doc, a) { 25357 solveArc(doc, cx, cy, a); 25358 cx = a[5]; 25359 return cy = a[6]; 25360 }, 25361 a: function(doc, a) { 25362 a[5] += cx; 25363 a[6] += cy; 25364 solveArc(doc, cx, cy, a); 25365 cx = a[5]; 25366 return cy = a[6]; 25367 }, 25368 L: function(doc, a) { 25369 cx = a[0]; 25370 cy = a[1]; 25371 px = py = null; 25372 return doc.lineTo(cx, cy); 25373 }, 25374 l: function(doc, a) { 25375 cx += a[0]; 25376 cy += a[1]; 25377 px = py = null; 25378 return doc.lineTo(cx, cy); 25379 }, 25380 H: function(doc, a) { 25381 cx = a[0]; 25382 px = py = null; 25383 return doc.lineTo(cx, cy); 25384 }, 25385 h: function(doc, a) { 25386 cx += a[0]; 25387 px = py = null; 25388 return doc.lineTo(cx, cy); 25389 }, 25390 V: function(doc, a) { 25391 cy = a[0]; 25392 px = py = null; 25393 return doc.lineTo(cx, cy); 25394 }, 25395 v: function(doc, a) { 25396 cy += a[0]; 25397 px = py = null; 25398 return doc.lineTo(cx, cy); 25399 }, 25400 Z: function(doc) { 25401 doc.closePath(); 25402 cx = sx; 25403 return cy = sy; 25404 }, 25405 z: function(doc) { 25406 doc.closePath(); 25407 cx = sx; 25408 return cy = sy; 25409 } 25410 }; 25411 25412 solveArc = function(doc, x, y, coords) { 25413 var bez, ex, ey, j, large, len, results, rot, rx, ry, seg, segs, sweep; 25414 rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6]; 25415 segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); 25416 results = []; 25417 for (j = 0, len = segs.length; j < len; j++) { 25418 seg = segs[j]; 25419 bez = segmentToBezier.apply(null, seg); 25420 results.push(doc.bezierCurveTo.apply(doc, bez)); 25421 } 25422 return results; 25423 }; 25424 25425 arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) { 25426 var a00, a01, a10, a11, cos_th, d, i, j, pl, ref, result, segments, sfactor, sfactor_sq, sin_th, th, th0, th1, th2, th3, th_arc, x0, x1, xc, y0, y1, yc; 25427 th = rotateX * (Math.PI / 180); 25428 sin_th = Math.sin(th); 25429 cos_th = Math.cos(th); 25430 rx = Math.abs(rx); 25431 ry = Math.abs(ry); 25432 px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5; 25433 py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5; 25434 pl = (px * px) / (rx * rx) + (py * py) / (ry * ry); 25435 if (pl > 1) { 25436 pl = Math.sqrt(pl); 25437 rx *= pl; 25438 ry *= pl; 25439 } 25440 a00 = cos_th / rx; 25441 a01 = sin_th / rx; 25442 a10 = (-sin_th) / ry; 25443 a11 = cos_th / ry; 25444 x0 = a00 * ox + a01 * oy; 25445 y0 = a10 * ox + a11 * oy; 25446 x1 = a00 * x + a01 * y; 25447 y1 = a10 * x + a11 * y;
25448 d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); 25449 sfactor_sq = 1 / d - 0.25; 25450 if (sfactor_sq < 0) { 25451 sfactor_sq = 0; 25452 } 25453 sfactor = Math.sqrt(sfactor_sq); 25454 if (sweep === large) { 25455 sfactor = -sfactor; 25456 } 25457 xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); 25458 yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); 25459 th0 = Math.atan2(y0 - yc, x0 - xc); 25460 th1 = Math.atan2(y1 - yc, x1 - xc); 25461 th_arc = th1 - th0; 25462 if (th_arc < 0 && sweep === 1) { 25463 th_arc += 2 * Math.PI; 25464 } else if (th_arc > 0 && sweep === 0) { 25465 th_arc -= 2 * Math.PI; 25466 } 25467 segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001))); 25468 result = []; 25469 for (i = j = 0, ref = segments; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 25470 th2 = th0 + i * th_arc / segments; 25471 th3 = th0 + (i + 1) * th_arc / segments; 25472 result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th]; 25473 } 25474 return result; 25475 }; 25476 25477 segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) { 25478 var a00, a01, a10, a11, t, th_half, x1, x2, x3, y1, y2, y3; 25479 a00 = cos_th * rx; 25480 a01 = -sin_th * ry; 25481 a10 = sin_th * rx; 25482 a11 = cos_th * ry; 25483 th_half = 0.5 * (th1 - th0); 25484 t = (8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half); 25485 x1 = cx + Math.cos(th0) - t * Math.sin(th0); 25486 y1 = cy + Math.sin(th0) + t * Math.cos(th0); 25487 x3 = cx + Math.cos(th1); 25488 y3 = cy + Math.sin(th1); 25489 x2 = x3 + t * Math.sin(th1); 25490 y2 = y3 - t * Math.cos(th1); 25491 return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3]; 25492 }; 25493 25494 return SVGPath; 25495 25496 })(); 25497 25498 module.exports = SVGPath; 25499 25500}).call(this); 25501 25502 25503/***/ }), 25504/* 166 */ 25505/***/ (function(module, exports, __webpack_require__) { 25506 25507// Generated by CoffeeScript 1.12.6 25508(function() { 25509 var PDFFont; 25510 25511 PDFFont = __webpack_require__(50); 25512 25513 module.exports = { 25514 initFonts: function() { 25515 this._fontFamilies = {}; 25516 this._fontCount = 0; 25517 this._fontSize = 12; 25518 this._font = null; 25519 this._registeredFonts = {}; 25520 25521 }, 25522 font: function(src, family, size) { 25523 var cacheKey, font, id, ref; 25524 if (typeof family === 'number') { 25525 size = family; 25526 family = null; 25527 } 25528 if (typeof src === 'string' && this._registeredFonts[src]) { 25529 cacheKey = src; 25530 ref = this._registeredFonts[src], src = ref.src, family = ref.family; 25531 } else { 25532 cacheKey = family || src; 25533 if (typeof cacheKey !== 'string') { 25534 cacheKey = null; 25535 } 25536 } 25537 if (size != null) { 25538 this.fontSize(size); 25539 } 25540 if (font = this._fontFamilies[cacheKey]) { 25541 this._font = font; 25542 return this; 25543 } 25544 id = 'F' + (++this._fontCount); 25545 this._font = PDFFont.open(this, src, family, id); 25546 if (font = this._fontFamilies[this._font.name]) { 25547 this._font = font; 25548 return this; 25549 } 25550 if (cacheKey) { 25551 this._fontFamilies[cacheKey] = this._font; 25552 } 25553 if (this._font.name) { 25554 this._fontFamilies[this._font.name] = this._font; 25555 } 25556 return this; 25557 }, 25558 fontSize: function(_fontSize) { 25559 this._fontSize = _fontSize; 25560 return this; 25561 }, 25562 currentLineHeight: function(includeGap) { 25563 if (includeGap == null) { 25564 includeGap = false; 25565 } 25566 return this._font.lineHeight(this._fontSize, includeGap); 25567 }, 25568 registerFont: function(name, src, family) { 25569 this._registeredFonts[name] = { 25570 src: src, 25571 family: family 25572 }; 25573 return this; 25574 } 25575 }; 25576 25577}).call(this); 25578 25579 25580/***/ }), 25581/* 167 */ 25582/***/ (function(module, exports, __webpack_require__) { 25583 25584"use strict"; 25585/* WEBPACK VAR INJECTION */(function(Buffer, process) { 25586 25587function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 25588 25589var r = _interopDefault(__webpack_require__(168)); 25590var _Object$getOwnPropertyDescriptor = _interopDefault(__webpack_require__(197)); 25591var _getIterator = _interopDefault(__webpack_require__(60)); 25592var _Object$freeze = _interopDefault(__webpack_require__(209)); 25593var _Object$keys = _interopDefault(__webpack_require__(212)); 25594var _typeof = _interopDefault(__webpack_require__(69)); 25595var _Object$defineProperty = _interopDefault(__webpack_require__(74)); 25596var _classCallCheck = _interopDefault(__webpack_require__(106)); 25597var _createClass = _interopDefault(__webpack_require__(107)); 25598var _Map = _interopDefault(__webpack_require__(225)); 25599var _possibleConstructorReturn = _interopDefault(__webpack_require__(236)); 25600var _inherits = _interopDefault(__webpack_require__(237)); 25601var restructure_src_utils = __webpack_require__(12); 25602var _Object$defineProperties = _interopDefault(__webpack_require__(245)); 25603var isEqual = _interopDefault(__webpack_require__(248)); 25604var _Object$assign = _interopDefault(__webpack_require__(251)); 25605var _String$fromCodePoint = _interopDefault(__webpack_require__(255)); 25606var _Array$from = _interopDefault(__webpack_require__(258)); 25607var _Set = _interopDefault(__webpack_require__(263)); 25608var unicode = _interopDefault(__webpack_require__(269)); 25609var UnicodeTrie = _interopDefault(__webpack_require__(43)); 25610var StateMachine = _interopDefault(__webpack_require__(271)); 25611var _Number$EPSILON = _interopDefault(__webpack_require__(280)); 25612var cloneDeep = _interopDefault(__webpack_require__(283)); 25613var inflate = _interopDefault(__webpack_require__(79)); 25614var brotli = _interopDefault(__webpack_require__(284)); 25615 25616 25617 25618var fontkit = {}; 25619fontkit.logErrors = false;
25620 25621var formats = []; 25622fontkit.registerFormat = function (format) { 25623 formats.push(format); 25624}; 25625 25626fontkit.openSync = function (filename, postscriptName) { 25627 var buffer = __webpack_require__(8).readFileSync(filename); 25628 return fontkit.create(buffer, postscriptName); 25629}; 25630 25631fontkit.open = function (filename, postscriptName, callback) { 25632 if (typeof postscriptName === 'function') { 25633 callback = postscriptName; 25634 postscriptName = null; 25635 } 25636 25637 __webpack_require__(8).readFile(filename, function (err, buffer) { 25638 if (err) { 25639 return callback(err); 25640 } 25641 25642 try { 25643 var font = fontkit.create(buffer, postscriptName); 25644 } catch (e) { 25645 return callback(e); 25646 } 25647 25648 return callback(null, font); 25649 }); 25650 25651 return; 25652}; 25653 25654fontkit.create = function (buffer, postscriptName) { 25655 for (var i = 0; i < formats.length; i++) { 25656 var format = formats[i]; 25657 if (format.probe(buffer)) { 25658 var font = new format(new r.DecodeStream(buffer)); 25659 if (postscriptName) { 25660 return font.getFont(postscriptName); 25661 } 25662 25663 return font; 25664 } 25665 } 25666 25667 throw new Error('Unknown font format'); 25668}; 25669 25670/** 25671 * This decorator caches the results of a getter or method such that 25672 * the results are lazily computed once, and then cached. 25673 * @private 25674 */ 25675function cache(target, key, descriptor) { 25676 if (descriptor.get) { 25677 var get = descriptor.get; 25678 descriptor.get = function () { 25679 var value = get.call(this); 25680 _Object$defineProperty(this, key, { value: value }); 25681 return value; 25682 }; 25683 } else if (typeof descriptor.value === 'function') { 25684 var fn = descriptor.value; 25685 25686 return { 25687 get: function get() { 25688 var cache = new _Map(); 25689 function memoized() { 25690 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 25691 args[_key] = arguments[_key]; 25692 } 25693 25694 var key = args.length > 0 ? args[0] : 'value'; 25695 if (cache.has(key)) { 25696 return cache.get(key); 25697 } 25698 25699 var result = fn.apply(this, args); 25700 cache.set(key, result); 25701 return result; 25702 }; 25703 25704 _Object$defineProperty(this, key, { value: memoized }); 25705 return memoized; 25706 } 25707 }; 25708 } 25709} 25710 25711var SubHeader = new r.Struct({ 25712 firstCode: r.uint16, 25713 entryCount: r.uint16, 25714 idDelta: r.int16, 25715 idRangeOffset: r.uint16 25716}); 25717 25718var CmapGroup = new r.Struct({ 25719 startCharCode: r.uint32, 25720 endCharCode: r.uint32, 25721 glyphID: r.uint32 25722}); 25723 25724var UnicodeValueRange = new r.Struct({ 25725 startUnicodeValue: r.uint24, 25726 additionalCount: r.uint8 25727}); 25728 25729var UVSMapping = new r.Struct({ 25730 unicodeValue: r.uint24, 25731 glyphID: r.uint16 25732}); 25733 25734var DefaultUVS = new r.Array(UnicodeValueRange, r.uint32); 25735var NonDefaultUVS = new r.Array(UVSMapping, r.uint32); 25736 25737var VarSelectorRecord = new r.Struct({ 25738 varSelector: r.uint24, 25739 defaultUVS: new r.Pointer(r.uint32, DefaultUVS, { type: 'parent' }), 25740 nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, { type: 'parent' }) 25741}); 25742 25743var CmapSubtable = new r.VersionedStruct(r.uint16, { 25744 0: { // Byte encoding 25745 length: r.uint16, // Total table length in bytes (set to 262 for format 0) 25746 language: r.uint16, // Language code for this encoding subtable, or zero if language-independent 25747 codeMap: new r.LazyArray(r.uint8, 256) 25748 }, 25749 25750 2: { // High-byte mapping (CJK) 25751 length: r.uint16, 25752 language: r.uint16, 25753 subHeaderKeys: new r.Array(r.uint16, 256), 25754 subHeaderCount: function subHeaderCount(t) { 25755 return Math.max.apply(Math, t.subHeaderKeys); 25756 }, 25757 subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'), 25758 glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount') 25759 }, 25760 25761 4: { // Segment mapping to delta values 25762 length: r.uint16, // Total table length in bytes 25763 language: r.uint16, // Language code 25764 segCountX2: r.uint16, 25765 segCount: function segCount(t) { 25766 return t.segCountX2 >> 1; 25767 }, 25768 searchRange: r.uint16, 25769 entrySelector: r.uint16, 25770 rangeShift: r.uint16, 25771 endCode: new r.LazyArray(r.uint16, 'segCount'), 25772 reservedPad: new r.Reserved(r.uint16), // This value should be zero 25773 startCode: new r.LazyArray(r.uint16, 'segCount'), 25774 idDelta: new r.LazyArray(r.int16, 'segCount'), 25775 idRangeOffset: new r.LazyArray(r.uint16, 'segCount'), 25776 glyphIndexArray: new r.LazyArray(r.uint16, function (t) { 25777 return (t.length - t._currentOffset) / 2; 25778 }) 25779 }, 25780 25781 6: { // Trimmed table 25782 length: r.uint16, 25783 language: r.uint16, 25784 firstCode: r.uint16, 25785 entryCount: r.uint16, 25786 glyphIndices: new r.LazyArray(r.uint16, 'entryCount') 25787 }, 25788 25789 8: { // mixed 16-bit and 32-bit coverage 25790 reserved: new r.Reserved(r.uint16), 25791 length: r.uint32, 25792 language: r.uint16, 25793 is32: new r.LazyArray(r.uint8, 8192), 25794 nGroups: r.uint32, 25795 groups: new r.LazyArray(CmapGroup, 'nGroups') 25796 }, 25797 25798 10: { // Trimmed Array 25799 reserved: new r.Reserved(r.uint16), 25800 length: r.uint32, 25801 language: r.uint32, 25802 firstCode: r.uint32, 25803 entryCount: r.uint32, 25804 glyphIndices: new r.LazyArray(r.uint16, 'numChars') 25805 }, 25806 25807 12: { // Segmented coverage 25808 reserved: new r.Reserved(r.uint16), 25809 length: r.uint32, 25810 language: r.uint32, 25811 nGroups: r.uint32, 25812 groups: new r.LazyArray(CmapGroup, 'nGroups') 25813 }, 25814 25815 13: { // Many-to-one range mappings (same as 12 except for group.startGlyphID) 25816 reserved: new r.Reserved(r.uint16), 25817 length: r.uint32, 25818 language: r.uint32, 25819 nGroups: r.uint32, 25820 groups: new r.LazyArray(CmapGroup, 'nGroups') 25821 }, 25822 25823 14: { // Unicode Variation Sequences 25824 length: r.uint32, 25825 numRecords: r.uint32, 25826 varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords') 25827 } 25828}); 25829 25830var CmapEntry = new r.Struct({ 25831 platformID: r.uint16, // Platform identifier 25832 encodingID: r.uint16, // Platform-specific encoding identifier 25833 table: new r.Pointer(r.uint32, CmapSubtable, { type: 'parent', lazy: true }) 25834}); 25835 25836// character to glyph mapping 25837var cmap = new r.Struct({ 25838 version: r.uint16, 25839 numSubtables: r.uint16, 25840 tables: new r.Array(CmapEntry, 'numSubtables') 25841}); 25842 25843// font header 25844var head = new r.Struct({ 25845 version: r.int32, // 0x00010000 (version 1.0) 25846 revision: r.int32, // set by font manufacturer 25847 checkSumAdjustment: r.uint32, 25848 magicNumber: r.uint32, // set to 0x5F0F3CF5 25849 flags: r.uint16, 25850 unitsPerEm: r.uint16, // range from 64 to 16384 25851 created: new r.Array(r.int32, 2), 25852 modified: new r.Array(r.int32, 2), 25853 xMin: r.int16, // for all glyph bounding boxes 25854 yMin: r.int16, // for all glyph bounding boxes 25855 xMax: r.int16, // for all glyph bounding boxes 25856 yMax: r.int16, // for all glyph bounding boxes 25857 macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']), 25858 lowestRecPPEM: r.uint16, // smallest readable size in pixels 25859 fontDirectionHint: r.int16, 25860 indexToLocFormat: r.int16, // 0 for short offsets, 1 for long 25861 glyphDataFormat: r.int16 // 0 for current format 25862}); 25863 25864// horizontal header 25865var hhea = new r.Struct({ 25866 version: r.int32,
25867 ascent: r.int16, // Distance from baseline of highest ascender 25868 descent: r.int16, // Distance from baseline of lowest descender 25869 lineGap: r.int16, // Typographic line gap 25870 advanceWidthMax: r.uint16, // Maximum advance width value in 'hmtx' table 25871 minLeftSideBearing: r.int16, // Maximum advance width value in 'hmtx' table 25872 minRightSideBearing: r.int16, // Minimum right sidebearing value 25873 xMaxExtent: r.int16, 25874 caretSlopeRise: r.int16, // Used to calculate the slope of the cursor (rise/run); 1 for vertical 25875 caretSlopeRun: r.int16, // 0 for vertical 25876 caretOffset: r.int16, // Set to 0 for non-slanted fonts 25877 reserved: new r.Reserved(r.int16, 4), 25878 metricDataFormat: r.int16, // 0 for current format 25879 numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table 25880}); 25881 25882var HmtxEntry = new r.Struct({ 25883 advance: r.uint16, 25884 bearing: r.int16 25885}); 25886 25887var hmtx = new r.Struct({ 25888 metrics: new r.LazyArray(HmtxEntry, function (t) { 25889 return t.parent.hhea.numberOfMetrics; 25890 }), 25891 bearings: new r.LazyArray(r.int16, function (t) { 25892 return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics; 25893 }) 25894}); 25895 25896// maxiumum profile 25897var maxp = new r.Struct({ 25898 version: r.int32, 25899 numGlyphs: r.uint16, // The number of glyphs in the font 25900 maxPoints: r.uint16, // Maximum points in a non-composite glyph 25901 maxContours: r.uint16, // Maximum contours in a non-composite glyph 25902 maxComponentPoints: r.uint16, // Maximum points in a composite glyph 25903 maxComponentContours: r.uint16, // Maximum contours in a composite glyph 25904 maxZones: r.uint16, // 1 if instructions do not use the twilight zone, 2 otherwise 25905 maxTwilightPoints: r.uint16, // Maximum points used in Z0 25906 maxStorage: r.uint16, // Number of Storage Area locations 25907 maxFunctionDefs: r.uint16, // Number of FDEFs 25908 maxInstructionDefs: r.uint16, // Number of IDEFs 25909 maxStackElements: r.uint16, // Maximum stack depth 25910 maxSizeOfInstructions: r.uint16, // Maximum byte count for glyph instructions 25911 maxComponentElements: r.uint16, // Maximum number of components referenced at âtop levelâ for any composite glyph 25912 maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components 25913}); 25914 25915/** 25916 * Gets an encoding name from platform, encoding, and language ids. 25917 * Returned encoding names can be used in iconv-lite to decode text. 25918 */ 25919function getEncoding(platformID, encodingID) { 25920 var languageID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 25921 25922 if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) { 25923 return MAC_LANGUAGE_ENCODINGS[languageID]; 25924 } 25925 25926 return ENCODINGS[platformID][encodingID]; 25927} 25928 25929// Map of platform ids to encoding ids. 25930var ENCODINGS = [ 25931// unicode 25932['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'], 25933 25934// macintosh 25935// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ 25936// 0 Roman 17 Malayalam 25937// 1 Japanese 18 Sinhalese 25938// 2 Traditional Chinese 19 Burmese 25939// 3 Korean 20 Khmer 25940// 4 Arabic 21 Thai 25941// 5 Hebrew 22 Laotian 25942// 6 Greek 23 Georgian 25943// 7 Russian 24 Armenian 25944// 8 RSymbol 25 Simplified Chinese 25945// 9 Devanagari 26 Tibetan 25946// 10 Gurmukhi 27 Mongolian 25947// 11 Gujarati 28 Geez 25948// 12 Oriya 29 Slavic 25949// 13 Bengali 30 Vietnamese 25950// 14 Tamil 31 Sindhi 25951// 15 Telugu 32 (Uninterpreted) 25952// 16 Kannada 25953['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'], 25954 25955// ISO (deprecated) 25956['ascii'], 25957 25958// windows 25959// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx 25960['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; 25961 25962// Overrides for Mac scripts by language id. 25963// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt 25964var MAC_LANGUAGE_ENCODINGS = { 25965 15: 'maciceland', 25966 17: 'macturkish', 25967 18: 'maccroatian', 25968 24: 'maccenteuro', 25969 25: 'maccenteuro', 25970 26: 'maccenteuro', 25971 27: 'maccenteuro', 25972 28: 'maccenteuro', 25973 30: 'maciceland', 25974 37: 'macromania', 25975 38: 'maccenteuro', 25976 39: 'maccenteuro', 25977 40: 'maccenteuro', 25978 143: 'macinuit', // Unsupported by iconv-lite 25979 146: 'macgaelic' // Unsupported by iconv-lite 25980}; 25981 25982// Map of platform ids to BCP-47 language codes. 25983var LANGUAGES = [ 25984// unicode 25985[], { // macintosh 25986 0: 'en', 30: 'fo', 60: 'ks', 90: 'rw', 25987 1: 'fr', 31: 'fa', 61: 'ku', 91: 'rn', 25988 2: 'de', 32: 'ru', 62: 'sd', 92: 'ny', 25989 3: 'it', 33: 'zh', 63: 'bo', 93: 'mg', 25990 4: 'nl', 34: 'nl-BE', 64: 'ne', 94: 'eo', 25991 5: 'sv', 35: 'ga', 65: 'sa', 128: 'cy', 25992 6: 'es', 36: 'sq', 66: 'mr', 129: 'eu', 25993 7: 'da', 37: 'ro', 67: 'bn', 130: 'ca', 25994 8: 'pt', 38: 'cz', 68: 'as', 131: 'la', 25995 9: 'no', 39: 'sk', 69: 'gu', 132: 'qu', 25996 10: 'he', 40: 'si', 70: 'pa', 133: 'gn', 25997 11: 'ja', 41: 'yi', 71: 'or', 134: 'ay', 25998 12: 'ar', 42: 'sr', 72: 'ml', 135: 'tt', 25999 13: 'fi', 43: 'mk', 73: 'kn', 136: 'ug', 26000 14: 'el', 44: 'bg', 74: 'ta', 137: 'dz', 26001 15: 'is', 45: 'uk', 75: 'te', 138: 'jv', 26002 16: 'mt', 46: 'be', 76: 'si', 139: 'su', 26003 17: 'tr', 47: 'uz', 77: 'my', 140: 'gl', 26004 18: 'hr', 48: 'kk', 78: 'km', 141: 'af', 26005 19: 'zh-Hant', 49: 'az-Cyrl', 79: 'lo', 142: 'br', 26006 20: 'ur', 50: 'az-Arab', 80: 'vi', 143: 'iu', 26007 21: 'hi', 51: 'hy', 81: 'id', 144: 'gd', 26008 22: 'th', 52: 'ka', 82: 'tl', 145: 'gv', 26009 23: 'ko', 53: 'mo', 83: 'ms', 146: 'ga', 26010 24: 'lt', 54: 'ky', 84: 'ms-Arab', 147: 'to', 26011 25: 'pl', 55: 'tg', 85: 'am', 148: 'el-polyton', 26012 26: 'hu', 56: 'tk', 86: 'ti', 149: 'kl', 26013 27: 'es', 57: 'mn-CN', 87: 'om', 150: 'az', 26014 28: 'lv', 58: 'mn', 88: 'so', 151: 'nn', 26015 29: 'se', 59: 'ps', 89: 'sw' 26016}, 26017 26018// ISO (deprecated) 26019[], { // windows 26020 0x0436: 'af', 0x4009: 'en-IN', 0x0487: 'rw', 0x0432: 'tn', 26021 0x041C: 'sq', 0x1809: 'en-IE', 0x0441: 'sw', 0x045B: 'si', 26022 0x0484: 'gsw', 0x2009: 'en-JM', 0x0457: 'kok', 0x041B: 'sk', 26023 0x045E: 'am', 0x4409: 'en-MY', 0x0412: 'ko', 0x0424: 'sl', 26024 0x1401: 'ar-DZ', 0x1409: 'en-NZ', 0x0440: 'ky', 0x2C0A: 'es-AR', 26025 0x3C01: 'ar-BH', 0x3409: 'en-PH', 0x0454: 'lo', 0x400A: 'es-BO', 26026 0x0C01: 'ar', 0x4809: 'en-SG', 0x0426: 'lv', 0x340A: 'es-CL', 26027 0x0801: 'ar-IQ', 0x1C09: 'en-ZA', 0x0427: 'lt', 0x240A: 'es-CO', 26028 0x2C01: 'ar-JO', 0x2C09: 'en-TT', 0x082E: 'dsb', 0x140A: 'es-CR', 26029 0x3401: 'ar-KW', 0x0809: 'en-GB', 0x046E: 'lb', 0x1C0A: 'es-DO', 26030 0x3001: 'ar-LB', 0x0409: 'en', 0x042F: 'mk', 0x300A: 'es-EC', 26031 0x1001: 'ar-LY', 0x3009: 'en-ZW', 0x083E: 'ms-BN', 0x440A: 'es-SV', 26032 0x1801: 'ary', 0x0425: 'et', 0x043E: 'ms', 0x100A: 'es-GT', 26033 0x2001: 'ar-OM', 0x0438: 'fo', 0x044C: 'ml', 0x480A: 'es-HN', 26034 0x4001: 'ar-QA', 0x0464: 'fil', 0x043A: 'mt', 0x080A: 'es-MX', 26035 0x0401: 'ar-SA', 0x040B: 'fi', 0x0481: 'mi', 0x4C0A: 'es-NI', 26036 0x2801: 'ar-SY', 0x080C: 'fr-BE', 0x047A: 'arn', 0x180A: 'es-PA', 26037 0x1C01: 'aeb', 0x0C0C: 'fr-CA', 0x044E: 'mr', 0x3C0A: 'es-PY', 26038 0x3801: 'ar-AE', 0x040C: 'fr', 0x047C: 'moh', 0x280A: 'es-PE', 26039 0x2401: 'ar-YE', 0x140C: 'fr-LU', 0x0450: 'mn', 0x500A: 'es-PR', 26040 0x042B: 'hy', 0x180C: 'fr-MC', 0x0850: 'mn-CN', 0x0C0A: 'es', 26041 0x044D: 'as', 0x100C: 'fr-CH', 0x0461: 'ne', 0x040A: 'es', 26042 0x082C: 'az-Cyrl', 0x0462: 'fy', 0x0414: 'nb', 0x540A: 'es-US', 26043 0x042C: 'az', 0x0456: 'gl', 0x0814: 'nn', 0x380A: 'es-UY', 26044 0x046D: 'ba', 0x0437: 'ka', 0x0482: 'oc', 0x200A: 'es-VE', 26045 0x042D: 'eu', 0x0C07: 'de-AT', 0x0448: 'or', 0x081D: 'sv-FI', 26046 0x0423: 'be', 0x0407: 'de', 0x0463: 'ps', 0x041D: 'sv', 26047 0x0845: 'bn', 0x1407: 'de-LI', 0x0415: 'pl', 0x045A: 'syr', 26048 0x0445: 'bn-IN', 0x1007: 'de-LU', 0x0416: 'pt', 0x0428: 'tg', 26049 0x201A: 'bs-Cyrl', 0x0807: 'de-CH', 0x0816: 'pt-PT', 0x085F: 'tzm', 26050 0x141A: 'bs', 0x0408: 'el', 0x0446: 'pa', 0x0449: 'ta', 26051 0x047E: 'br', 0x046F: 'kl', 0x046B: 'qu-BO', 0x0444: 'tt', 26052 0x0402: 'bg', 0x0447: 'gu', 0x086B: 'qu-EC', 0x044A: 'te', 26053 0x0403: 'ca', 0x0468: 'ha', 0x0C6B: 'qu', 0x041E: 'th', 26054 0x0C04: 'zh-HK', 0x040D: 'he', 0x0418: 'ro', 0x0451: 'bo', 26055 0x1404: 'zh-MO', 0x0439: 'hi', 0x0417: 'rm', 0x041F: 'tr', 26056 0x0804: 'zh', 0x040E: 'hu', 0x0419: 'ru', 0x0442: 'tk', 26057 0x1004: 'zh-SG', 0x040F: 'is', 0x243B: 'smn', 0x0480: 'ug', 26058 0x0404: 'zh-TW', 0x0470: 'ig', 0x103B: 'smj-NO', 0x0422: 'uk',
26059 0x0483: 'co', 0x0421: 'id', 0x143B: 'smj', 0x042E: 'hsb', 26060 0x041A: 'hr', 0x045D: 'iu', 0x0C3B: 'se-FI', 0x0420: 'ur', 26061 0x101A: 'hr-BA', 0x085D: 'iu-Latn', 0x043B: 'se', 0x0843: 'uz-Cyrl', 26062 0x0405: 'cs', 0x083C: 'ga', 0x083B: 'se-SE', 0x0443: 'uz', 26063 0x0406: 'da', 0x0434: 'xh', 0x203B: 'sms', 0x042A: 'vi', 26064 0x048C: 'prs', 0x0435: 'zu', 0x183B: 'sma-NO', 0x0452: 'cy', 26065 0x0465: 'dv', 0x0410: 'it', 0x1C3B: 'sms', 0x0488: 'wo', 26066 0x0813: 'nl-BE', 0x0810: 'it-CH', 0x044F: 'sa', 0x0485: 'sah', 26067 0x0413: 'nl', 0x0411: 'ja', 0x1C1A: 'sr-Cyrl-BA', 0x0478: 'ii', 26068 0x0C09: 'en-AU', 0x044B: 'kn', 0x0C1A: 'sr', 0x046A: 'yo', 26069 0x2809: 'en-BZ', 0x043F: 'kk', 0x181A: 'sr-Latn-BA', 26070 0x1009: 'en-CA', 0x0453: 'km', 0x081A: 'sr-Latn', 26071 0x2409: 'en-029', 0x0486: 'quc', 0x046C: 'nso' 26072}]; 26073 26074var NameRecord = new r.Struct({ 26075 platformID: r.uint16, 26076 encodingID: r.uint16, 26077 languageID: r.uint16, 26078 nameID: r.uint16, 26079 length: r.uint16, 26080 string: new r.Pointer(r.uint16, new r.String('length', function (t) { 26081 return getEncoding(t.platformID, t.encodingID, t.languageID); 26082 }), { type: 'parent', relativeTo: 'parent.stringOffset', allowNull: false }) 26083}); 26084 26085var LangTagRecord = new r.Struct({ 26086 length: r.uint16, 26087 tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), { type: 'parent', relativeTo: 'stringOffset' }) 26088}); 26089 26090var NameTable = new r.VersionedStruct(r.uint16, { 26091 0: { 26092 count: r.uint16, 26093 stringOffset: r.uint16, 26094 records: new r.Array(NameRecord, 'count') 26095 }, 26096 1: { 26097 count: r.uint16, 26098 stringOffset: r.uint16, 26099 records: new r.Array(NameRecord, 'count'), 26100 langTagCount: r.uint16, 26101 langTags: new r.Array(LangTagRecord, 'langTagCount') 26102 } 26103}); 26104 26105var NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName', // Note: A font may have only one PostScript name and that name must be ASCII. 26106'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null, // reserved 26107'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName']; 26108 26109NameTable.process = function (stream) { 26110 var records = {}; 26111 for (var _iterator = this.records, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 26112 var _ref; 26113 26114 if (_isArray) { 26115 if (_i >= _iterator.length) break; 26116 _ref = _iterator[_i++]; 26117 } else { 26118 _i = _iterator.next(); 26119 if (_i.done) break; 26120 _ref = _i.value; 26121 } 26122 26123 var record = _ref; 26124 26125 // find out what language this is for 26126 var language = LANGUAGES[record.platformID][record.languageID]; 26127 26128 if (language == null && this.langTags != null && record.languageID >= 0x8000) { 26129 language = this.langTags[record.languageID - 0x8000].tag; 26130 } 26131 26132 if (language == null) { 26133 language = record.platformID + '-' + record.languageID; 26134 } 26135 26136 // if the nameID is >= 256, it is a font feature record (AAT) 26137 var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID; 26138 if (records[key] == null) { 26139 records[key] = {}; 26140 } 26141 26142 var obj = records[key]; 26143 if (record.nameID >= 256) { 26144 obj = obj[record.nameID] || (obj[record.nameID] = {}); 26145 } 26146 26147 if (typeof record.string === 'string' || typeof obj[language] !== 'string') { 26148 obj[language] = record.string; 26149 } 26150 } 26151 26152 this.records = records; 26153}; 26154 26155NameTable.preEncode = function () { 26156 if (Array.isArray(this.records)) return; 26157 this.version = 0; 26158 26159 var records = []; 26160 for (var key in this.records) { 26161 var val = this.records[key]; 26162 if (key === 'fontFeatures') continue; 26163 26164 records.push({ 26165 platformID: 3, 26166 encodingID: 1, 26167 languageID: 0x409, 26168 nameID: NAMES.indexOf(key), 26169 length: Buffer.byteLength(val.en, 'utf16le'), 26170 string: val.en 26171 }); 26172 26173 if (key === 'postscriptName') { 26174 records.push({ 26175 platformID: 1, 26176 encodingID: 0, 26177 languageID: 0, 26178 nameID: NAMES.indexOf(key), 26179 length: val.en.length, 26180 string: val.en 26181 }); 26182 } 26183 } 26184 26185 this.records = records; 26186 this.count = records.length; 26187 this.stringOffset = NameTable.size(this, null, false); 26188}; 26189 26190var OS2 = new r.VersionedStruct(r.uint16, { 26191 header: { 26192 xAvgCharWidth: r.int16, // average weighted advance width of lower case letters and space 26193 usWeightClass: r.uint16, // visual weight of stroke in glyphs 26194 usWidthClass: r.uint16, // relative change from the normal aspect ratio (width to height ratio) 26195 fsType: new r.Bitfield(r.uint16, [// Indicates font embedding licensing rights 26196 null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']), 26197 ySubscriptXSize: r.int16, // recommended horizontal size in pixels for subscripts 26198 ySubscriptYSize: r.int16, // recommended vertical size in pixels for subscripts 26199 ySubscriptXOffset: r.int16, // recommended horizontal offset for subscripts 26200 ySubscriptYOffset: r.int16, // recommended vertical offset form the baseline for subscripts 26201 ySuperscriptXSize: r.int16, // recommended horizontal size in pixels for superscripts 26202 ySuperscriptYSize: r.int16, // recommended vertical size in pixels for superscripts 26203 ySuperscriptXOffset: r.int16, // recommended horizontal offset for superscripts 26204 ySuperscriptYOffset: r.int16, // recommended vertical offset from the baseline for superscripts 26205 yStrikeoutSize: r.int16, // width of the strikeout stroke 26206 yStrikeoutPosition: r.int16, // position of the strikeout stroke relative to the baseline 26207 sFamilyClass: r.int16, // classification of font-family design 26208 panose: new r.Array(r.uint8, 10), // describe the visual characteristics of a given typeface 26209 ulCharRange: new r.Array(r.uint32, 4),
vendor: 1,525 bytes, lines 26210-26264
26210 vendorID: new r.String(4), // four character identifier for the font vendor 26211 fsSelection: new r.Bitfield(r.uint16, [// bit field containing information about the font 26212 'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']), 26213 usFirstCharIndex: r.uint16, // The minimum Unicode index in this font 26214 usLastCharIndex: r.uint16 // The maximum Unicode index in this font 26215 }, 26216 26217 // The Apple version of this table ends here, but the Microsoft one continues on... 26218 0: {}, 26219 26220 1: { 26221 typoAscender: r.int16, 26222 typoDescender: r.int16, 26223 typoLineGap: r.int16, 26224 winAscent: r.uint16, 26225 winDescent: r.uint16, 26226 codePageRange: new r.Array(r.uint32, 2) 26227 }, 26228 26229 2: { 26230 // these should be common with version 1 somehow 26231 typoAscender: r.int16, 26232 typoDescender: r.int16, 26233 typoLineGap: r.int16, 26234 winAscent: r.uint16, 26235 winDescent: r.uint16, 26236 codePageRange: new r.Array(r.uint32, 2), 26237 26238 xHeight: r.int16, 26239 capHeight: r.int16, 26240 defaultChar: r.uint16, 26241 breakChar: r.uint16, 26242 maxContent: r.uint16 26243 }, 26244 26245 5: { 26246 typoAscender: r.int16, 26247 typoDescender: r.int16, 26248 typoLineGap: r.int16, 26249 winAscent: r.uint16, 26250 winDescent: r.uint16, 26251 codePageRange: new r.Array(r.uint32, 2), 26252 26253 xHeight: r.int16, 26254 capHeight: r.int16, 26255 defaultChar: r.uint16, 26256 breakChar: r.uint16, 26257 maxContent: r.uint16, 26258 26259 usLowerOpticalPointSize: r.uint16, 26260 usUpperOpticalPointSize: r.uint16 26261 } 26262}); 26263 26264var versions = OS2.versions;
26265versions[3] = versions[4] = versions[2]; 26266 26267// PostScript information 26268var post = new r.VersionedStruct(r.fixed32, { 26269 header: { // these fields exist at the top of all versions 26270 italicAngle: r.fixed32, // Italic angle in counter-clockwise degrees from the vertical. 26271 underlinePosition: r.int16, // Suggested distance of the top of the underline from the baseline 26272 underlineThickness: r.int16, // Suggested values for the underline thickness 26273 isFixedPitch: r.uint32, // Whether the font is monospaced 26274 minMemType42: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 42 font 26275 maxMemType42: r.uint32, // Maximum memory usage when a TrueType font is downloaded as a Type 42 font 26276 minMemType1: r.uint32, // Minimum memory usage when a TrueType font is downloaded as a Type 1 font 26277 maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font 26278 }, 26279 26280 1: {}, // version 1 has no additional fields 26281 26282 2: { 26283 numberOfGlyphs: r.uint16, 26284 glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'), 26285 names: new r.Array(new r.String(r.uint8)) 26286 }, 26287 26288 2.5: { 26289 numberOfGlyphs: r.uint16, 26290 offsets: new r.Array(r.uint8, 'numberOfGlyphs') 26291 }, 26292 26293 3: {}, // version 3 has no additional fields 26294 26295 4: { 26296 map: new r.Array(r.uint32, function (t) { 26297 return t.parent.maxp.numGlyphs; 26298 }) 26299 } 26300}); 26301 26302// An array of predefined values accessible by instructions 26303var cvt = new r.Struct({ 26304 controlValues: new r.Array(r.int16) 26305}); 26306 26307// A list of instructions that are executed once when a font is first used. 26308// These instructions are known as the font program. The main use of this table 26309// is for the definition of functions that are used in many different glyph programs. 26310var fpgm = new r.Struct({ 26311 instructions: new r.Array(r.uint8) 26312}); 26313 26314var loca = new r.VersionedStruct('head.indexToLocFormat', { 26315 0: { 26316 offsets: new r.Array(r.uint16) 26317 }, 26318 1: { 26319 offsets: new r.Array(r.uint32) 26320 } 26321}); 26322 26323loca.process = function () { 26324 if (this.version === 0) { 26325 for (var i = 0; i < this.offsets.length; i++) { 26326 this.offsets[i] <<= 1; 26327 } 26328 } 26329}; 26330 26331loca.preEncode = function () { 26332 if (this.version != null) return; 26333 26334 // assume this.offsets is a sorted array 26335 this.version = this.offsets[this.offsets.length - 1] > 0xffff ? 1 : 0; 26336 26337 if (this.version === 0) { 26338 for (var i = 0; i < this.offsets.length; i++) { 26339 this.offsets[i] >>>= 1; 26340 } 26341 } 26342}; 26343 26344// Set of instructions executed whenever the point size or font transformation change 26345var prep = new r.Struct({ 26346 controlValueProgram: new r.Array(r.uint8) 26347}); 26348 26349// only used for encoding 26350var glyf = new r.Array(new r.Buffer()); 26351 26352var CFFIndex = function () { 26353 function CFFIndex(type) { 26354 _classCallCheck(this, CFFIndex); 26355 26356 this.type = type; 26357 } 26358 26359 CFFIndex.prototype.getCFFVersion = function getCFFVersion(ctx) { 26360 while (ctx && !ctx.hdrSize) { 26361 ctx = ctx.parent; 26362 } 26363 26364 return ctx ? ctx.version : -1; 26365 }; 26366 26367 CFFIndex.prototype.decode = function decode(stream, parent) { 26368 var version = this.getCFFVersion(parent); 26369 var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE(); 26370 26371 if (count === 0) { 26372 return []; 26373 } 26374 26375 var offSize = stream.readUInt8(); 26376 var offsetType = void 0; 26377 if (offSize === 1) { 26378 offsetType = r.uint8; 26379 } else if (offSize === 2) { 26380 offsetType = r.uint16; 26381 } else if (offSize === 3) { 26382 offsetType = r.uint24; 26383 } else if (offSize === 4) { 26384 offsetType = r.uint32; 26385 } else { 26386 throw new Error("Bad offset size in CFFIndex: " + offSize + " " + stream.pos); 26387 } 26388 26389 var ret = []; 26390 var startPos = stream.pos + (count + 1) * offSize - 1; 26391 26392 var start = offsetType.decode(stream); 26393 for (var i = 0; i < count; i++) { 26394 var end = offsetType.decode(stream); 26395 26396 if (this.type != null) { 26397 var pos = stream.pos; 26398 stream.pos = startPos + start; 26399 26400 parent.length = end - start; 26401 ret.push(this.type.decode(stream, parent)); 26402 stream.pos = pos; 26403 } else { 26404 ret.push({ 26405 offset: startPos + start, 26406 length: end - start 26407 }); 26408 } 26409 26410 start = end; 26411 } 26412 26413 stream.pos = startPos + start; 26414 return ret; 26415 }; 26416 26417 CFFIndex.prototype.size = function size(arr, parent) { 26418 var size = 2; 26419 if (arr.length === 0) { 26420 return size; 26421 } 26422 26423 var type = this.type || new r.Buffer(); 26424 26425 // find maximum offset to detminine offset type 26426 var offset = 1; 26427 for (var i = 0; i < arr.length; i++) { 26428 var item = arr[i]; 26429 offset += type.size(item, parent); 26430 } 26431 26432 var offsetType = void 0; 26433 if (offset <= 0xff) { 26434 offsetType = r.uint8; 26435 } else if (offset <= 0xffff) { 26436 offsetType = r.uint16; 26437 } else if (offset <= 0xffffff) { 26438 offsetType = r.uint24; 26439 } else if (offset <= 0xffffffff) { 26440 offsetType = r.uint32; 26441 } else { 26442 throw new Error("Bad offset in CFFIndex"); 26443 } 26444 26445 size += 1 + offsetType.size() * (arr.length + 1); 26446 size += offset - 1; 26447 26448 return size; 26449 }; 26450 26451 CFFIndex.prototype.encode = function encode(stream, arr, parent) { 26452 stream.writeUInt16BE(arr.length); 26453 if (arr.length === 0) { 26454 return; 26455 } 26456 26457 var type = this.type || new r.Buffer(); 26458 26459 // find maximum offset to detminine offset type 26460 var sizes = []; 26461 var offset = 1; 26462 for (var _iterator = arr, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 26463 var _ref; 26464 26465 if (_isArray) { 26466 if (_i >= _iterator.length) break; 26467 _ref = _iterator[_i++]; 26468 } else { 26469 _i = _iterator.next(); 26470 if (_i.done) break; 26471 _ref = _i.value; 26472 } 26473 26474 var item = _ref;
26475 26476 var s = type.size(item, parent); 26477 sizes.push(s); 26478 offset += s; 26479 } 26480 26481 var offsetType = void 0; 26482 if (offset <= 0xff) { 26483 offsetType = r.uint8; 26484 } else if (offset <= 0xffff) { 26485 offsetType = r.uint16; 26486 } else if (offset <= 0xffffff) { 26487 offsetType = r.uint24; 26488 } else if (offset <= 0xffffffff) { 26489 offsetType = r.uint32; 26490 } else { 26491 throw new Error("Bad offset in CFFIndex"); 26492 } 26493 26494 // write offset size 26495 stream.writeUInt8(offsetType.size()); 26496 26497 // write elements 26498 offset = 1; 26499 offsetType.encode(stream, offset); 26500 26501 for (var _iterator2 = sizes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 26502 var _ref2; 26503 26504 if (_isArray2) { 26505 if (_i2 >= _iterator2.length) break; 26506 _ref2 = _iterator2[_i2++]; 26507 } else { 26508 _i2 = _iterator2.next(); 26509 if (_i2.done) break; 26510 _ref2 = _i2.value; 26511 } 26512 26513 var size = _ref2; 26514 26515 offset += size; 26516 offsetType.encode(stream, offset); 26517 } 26518 26519 for (var _iterator3 = arr, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 26520 var _ref3; 26521 26522 if (_isArray3) { 26523 if (_i3 >= _iterator3.length) break; 26524 _ref3 = _iterator3[_i3++]; 26525 } else { 26526 _i3 = _iterator3.next(); 26527 if (_i3.done) break; 26528 _ref3 = _i3.value; 26529 } 26530 26531 var _item = _ref3; 26532 26533 type.encode(stream, _item, parent); 26534 } 26535 26536 return; 26537 }; 26538 26539 return CFFIndex; 26540}(); 26541 26542var FLOAT_EOF = 0xf; 26543var FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-']; 26544 26545var FLOAT_ENCODE_LOOKUP = { 26546 '.': 10, 26547 'E': 11, 26548 'E-': 12, 26549 '-': 14 26550}; 26551 26552var CFFOperand = function () { 26553 function CFFOperand() { 26554 _classCallCheck(this, CFFOperand); 26555 } 26556 26557 CFFOperand.decode = function decode(stream, value) { 26558 if (32 <= value && value <= 246) { 26559 return value - 139; 26560 } 26561 26562 if (247 <= value && value <= 250) { 26563 return (value - 247) * 256 + stream.readUInt8() + 108; 26564 } 26565 26566 if (251 <= value && value <= 254) { 26567 return -(value - 251) * 256 - stream.readUInt8() - 108; 26568 } 26569 26570 if (value === 28) { 26571 return stream.readInt16BE(); 26572 } 26573 26574 if (value === 29) { 26575 return stream.readInt32BE(); 26576 } 26577 26578 if (value === 30) { 26579 var str = ''; 26580 while (true) { 26581 var b = stream.readUInt8(); 26582 26583 var n1 = b >> 4; 26584 if (n1 === FLOAT_EOF) { 26585 break; 26586 } 26587 str += FLOAT_LOOKUP[n1]; 26588 26589 var n2 = b & 15; 26590 if (n2 === FLOAT_EOF) { 26591 break; 26592 } 26593 str += FLOAT_LOOKUP[n2]; 26594 } 26595 26596 return parseFloat(str); 26597 } 26598 26599 return null; 26600 }; 26601 26602 CFFOperand.size = function size(value) { 26603 // if the value needs to be forced to the largest size (32 bit) 26604 // e.g. for unknown pointers, set to 32768 26605 if (value.forceLarge) { 26606 value = 32768; 26607 } 26608 26609 if ((value | 0) !== value) { 26610 // floating point 26611 var str = '' + value; 26612 return 1 + Math.ceil((str.length + 1) / 2); 26613 } else if (-107 <= value && value <= 107) { 26614 return 1; 26615 } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) { 26616 return 2; 26617 } else if (-32768 <= value && value <= 32767) { 26618 return 3; 26619 } else { 26620 return 5; 26621 } 26622 }; 26623 26624 CFFOperand.encode = function encode(stream, value) { 26625 // if the value needs to be forced to the largest size (32 bit) 26626 // e.g. for unknown pointers, save the old value and set to 32768 26627 var val = Number(value); 26628 26629 if (value.forceLarge) { 26630 stream.writeUInt8(29); 26631 return stream.writeInt32BE(val); 26632 } else if ((val | 0) !== val) { 26633 // floating point 26634 stream.writeUInt8(30); 26635 26636 var str = '' + val; 26637 for (var i = 0; i < str.length; i += 2) { 26638 var c1 = str[i]; 26639 var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1; 26640 26641 if (i === str.length - 1) { 26642 var n2 = FLOAT_EOF; 26643 } else { 26644 var c2 = str[i + 1]; 26645 var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2; 26646 } 26647 26648 stream.writeUInt8(n1 << 4 | n2 & 15); 26649 } 26650 26651 if (n2 !== FLOAT_EOF) { 26652 return stream.writeUInt8(FLOAT_EOF << 4); 26653 } 26654 } else if (-107 <= val && val <= 107) { 26655 return stream.writeUInt8(val + 139); 26656 } else if (108 <= val && val <= 1131) { 26657 val -= 108; 26658 stream.writeUInt8((val >> 8) + 247); 26659 return stream.writeUInt8(val & 0xff); 26660 } else if (-1131 <= val && val <= -108) { 26661 val = -val - 108; 26662 stream.writeUInt8((val >> 8) + 251); 26663 return stream.writeUInt8(val & 0xff); 26664 } else if (-32768 <= val && val <= 32767) { 26665 stream.writeUInt8(28); 26666 return stream.writeInt16BE(val); 26667 } else { 26668 stream.writeUInt8(29); 26669 return stream.writeInt32BE(val); 26670 } 26671 }; 26672 26673 return CFFOperand; 26674}(); 26675 26676var CFFDict = function () { 26677 function CFFDict() { 26678 var ops = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; 26679 26680 _classCallCheck(this, CFFDict); 26681 26682 this.ops = ops; 26683 this.fields = {}; 26684 for (var _iterator = ops, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 26685 var _ref; 26686 26687 if (_isArray) { 26688 if (_i >= _iterator.length) break; 26689 _ref = _iterator[_i++]; 26690 } else { 26691 _i = _iterator.next(); 26692 if (_i.done) break; 26693 _ref = _i.value; 26694 } 26695 26696 var field = _ref; 26697 26698 var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0]; 26699 this.fields[key] = field; 26700 } 26701 } 26702 26703 CFFDict.prototype.decodeOperands = function decodeOperands(type, stream, ret, operands) { 26704 var _this = this; 26705 26706 if (Array.isArray(type)) { 26707 return operands.map(function (op, i) { 26708 return _this.decodeOperands(type[i], stream, ret, [op]); 26709 }); 26710 } else if (type.decode != null) { 26711 return type.decode(stream, ret, operands); 26712 } else { 26713 switch (type) { 26714 case 'number': 26715 case 'offset': 26716 case 'sid': 26717 return operands[0]; 26718 case 'boolean': 26719 return !!operands[0]; 26720 default: 26721 return operands; 26722 } 26723 } 26724 }; 26725 26726 CFFDict.prototype.encodeOperands = function encodeOperands(type, stream, ctx, operands) { 26727 var _this2 = this; 26728 26729 if (Array.isArray(type)) { 26730 return operands.map(function (op, i) { 26731 return _this2.encodeOperands(type[i], stream, ctx, op)[0]; 26732 }); 26733 } else if (type.encode != null) { 26734 return type.encode(stream, operands, ctx); 26735 } else if (typeof operands === 'number') { 26736 return [operands]; 26737 } else if (typeof operands === 'boolean') { 26738 return [+operands]; 26739 } else if (Array.isArray(operands)) { 26740 return operands; 26741 } else { 26742 return [operands]; 26743 } 26744 }; 26745 26746 CFFDict.prototype.decode = function decode(stream, parent) { 26747 var end = stream.pos + parent.length; 26748 var ret = {}; 26749 var operands = []; 26750 26751 // define hidden properties 26752 _Object$defineProperties(ret, { 26753 parent: { value: parent }, 26754 _startOffset: { value: stream.pos } 26755 }); 26756 26757 // fill in defaults 26758 for (var key in this.fields) { 26759 var field = this.fields[key]; 26760 ret[field[1]] = field[3]; 26761 } 26762 26763 while (stream.pos < end) { 26764 var b = stream.readUInt8(); 26765 if (b < 28) { 26766 if (b === 12) { 26767 b = b << 8 | stream.readUInt8(); 26768 } 26769 26770 var _field = this.fields[b]; 26771 if (!_field) { 26772 throw new Error('Unknown operator ' + b); 26773 } 26774 26775 var val = this.decodeOperands(_field[2], stream, ret, operands); 26776 if (val != null) { 26777 if (val instanceof restructure_src_utils.PropertyDescriptor) { 26778 _Object$defineProperty(ret, _field[1], val); 26779 } else { 26780 ret[_field[1]] = val; 26781 } 26782 } 26783 26784 operands = []; 26785 } else { 26786 operands.push(CFFOperand.decode(stream, b)); 26787 } 26788 } 26789 26790 return ret; 26791 }; 26792 26793 CFFDict.prototype.size = function size(dict, parent) { 26794 var includePointers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; 26795 26796 var ctx = { 26797 parent: parent, 26798 val: dict, 26799 pointerSize: 0, 26800 startOffset: parent.startOffset || 0 26801 }; 26802 26803 var len = 0; 26804 26805 for (var k in this.fields) { 26806 var field = this.fields[k]; 26807 var val = dict[field[1]]; 26808 if (val == null || isEqual(val, field[3])) { 26809 continue; 26810 } 26811 26812 var operands = this.encodeOperands(field[2], null, ctx, val); 26813 for (var _iterator2 = operands, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 26814 var _ref2; 26815 26816 if (_isArray2) { 26817 if (_i2 >= _iterator2.length) break; 26818 _ref2 = _iterator2[_i2++]; 26819 } else { 26820 _i2 = _iterator2.next(); 26821 if (_i2.done) break; 26822 _ref2 = _i2.value; 26823 } 26824 26825 var op = _ref2; 26826 26827 len += CFFOperand.size(op); 26828 } 26829 26830 var key = Array.isArray(field[0]) ? field[0] : [field[0]]; 26831 len += key.length; 26832 } 26833 26834 if (includePointers) { 26835 len += ctx.pointerSize; 26836 } 26837 26838 return len; 26839 }; 26840 26841 CFFDict.prototype.encode = function encode(stream, dict, parent) { 26842 var ctx = { 26843 pointers: [], 26844 startOffset: stream.pos, 26845 parent: parent, 26846 val: dict, 26847 pointerSize: 0 26848 }; 26849 26850 ctx.pointerOffset = stream.pos + this.size(dict, ctx, false); 26851 26852 for (var _iterator3 = this.ops, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 26853 var _ref3; 26854 26855 if (_isArray3) { 26856 if (_i3 >= _iterator3.length) break; 26857 _ref3 = _iterator3[_i3++]; 26858 } else { 26859 _i3 = _iterator3.next(); 26860 if (_i3.done) break; 26861 _ref3 = _i3.value; 26862 } 26863 26864 var field = _ref3; 26865 26866 var val = dict[field[1]]; 26867 if (val == null || isEqual(val, field[3])) { 26868 continue; 26869 } 26870 26871 var operands = this.encodeOperands(field[2], stream, ctx, val); 26872 for (var _iterator4 = operands, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 26873 var _ref4; 26874 26875 if (_isArray4) { 26876 if (_i4 >= _iterator4.length) break; 26877 _ref4 = _iterator4[_i4++]; 26878 } else { 26879 _i4 = _iterator4.next(); 26880 if (_i4.done) break; 26881 _ref4 = _i4.value; 26882 } 26883 26884 var op = _ref4; 26885 26886 CFFOperand.encode(stream, op); 26887 } 26888 26889 var key = Array.isArray(field[0]) ? field[0] : [field[0]]; 26890 for (var _iterator5 = key, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) { 26891 var _ref5; 26892 26893 if (_isArray5) { 26894 if (_i5 >= _iterator5.length) break; 26895 _ref5 = _iterator5[_i5++]; 26896 } else { 26897 _i5 = _iterator5.next(); 26898 if (_i5.done) break; 26899 _ref5 = _i5.value; 26900 } 26901 26902 var _op = _ref5; 26903 26904 stream.writeUInt8(_op); 26905 } 26906 } 26907 26908 var i = 0; 26909 while (i < ctx.pointers.length) { 26910 var ptr = ctx.pointers[i++]; 26911 ptr.type.encode(stream, ptr.val, ptr.parent); 26912 } 26913 26914 return; 26915 }; 26916 26917 return CFFDict; 26918}(); 26919 26920var CFFPointer = function (_r$Pointer) { 26921 _inherits(CFFPointer, _r$Pointer); 26922 26923 function CFFPointer(type) { 26924 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 26925 26926 _classCallCheck(this, CFFPointer); 26927 26928 if (options.type == null) { 26929 options.type = 'global'; 26930 } 26931 26932 return _possibleConstructorReturn(this, _r$Pointer.call(this, null, type, options)); 26933 } 26934 26935 CFFPointer.prototype.decode = function decode(stream, parent, operands) { 26936 this.offsetType = { 26937 decode: function decode() { 26938 return operands[0]; 26939 } 26940 }; 26941 26942 return _r$Pointer.prototype.decode.call(this, stream, parent, operands); 26943 }; 26944 26945 CFFPointer.prototype.encode = function encode(stream, value, ctx) { 26946 if (!stream) { 26947 // compute the size (so ctx.pointerSize is correct) 26948 this.offsetType = { 26949 size: function size() { 26950 return 0; 26951 } 26952 }; 26953 26954 this.size(value, ctx); 26955 return [new Ptr(0)]; 26956 } 26957 26958 var ptr = null; 26959 this.offsetType = { 26960 encode: function encode(stream, val) { 26961 return ptr = val; 26962 } 26963 }; 26964 26965 _r$Pointer.prototype.encode.call(this, stream, value, ctx); 26966 return [new Ptr(ptr)]; 26967 }; 26968 26969 return CFFPointer; 26970}(r.Pointer); 26971 26972var Ptr = function () { 26973 function Ptr(val) { 26974 _classCallCheck(this, Ptr); 26975 26976 this.val = val; 26977 this.forceLarge = true; 26978 } 26979 26980 Ptr.prototype.valueOf = function valueOf() { 26981 return this.val; 26982 }; 26983 26984 return Ptr; 26985}(); 26986
26987var CFFBlendOp = function () { 26988 function CFFBlendOp() { 26989 _classCallCheck(this, CFFBlendOp); 26990 } 26991 26992 CFFBlendOp.decode = function decode(stream, parent, operands) { 26993 var numBlends = operands.pop(); 26994 26995 // TODO: actually blend. For now just consume the deltas 26996 // since we don't use any of the values anyway. 26997 while (operands.length > numBlends) { 26998 operands.pop(); 26999 } 27000 }; 27001 27002 return CFFBlendOp; 27003}(); 27004 27005var CFFPrivateDict = new CFFDict([ 27006// key name type default 27007[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), { type: 'local' }), null]]); 27008 27009// Automatically generated from Appendix A of the CFF specification; do 27010// not edit. Length should be 391. 27011var standardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodce
27011ntered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; 27012 27013var StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodce
27013ntered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls']; 27014 27015var ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall']; 27016 27017var ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodce
27017ntered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron']; 27018 27019var ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall']; 27020 27021var ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior']; 27022 27023//######################## 27024// Scripts and Languages # 27025//######################## 27026 27027var LangSysTable = new r.Struct({ 27028 reserved: new r.Reserved(r.uint16), 27029 reqFeatureIndex: r.uint16, 27030 featureCount: r.uint16, 27031 featureIndexes: new r.Array(r.uint16, 'featureCount') 27032}); 27033 27034var LangSysRecord = new r.Struct({ 27035 tag: new r.String(4), 27036 langSys: new r.Pointer(r.uint16, LangSysTable, { type: 'parent' }) 27037}); 27038 27039var Script = new r.Struct({ 27040 defaultLangSys: new r.Pointer(r.uint16, LangSysTable), 27041 count: r.uint16, 27042 langSysRecords: new r.Array(LangSysRecord, 'count') 27043}); 27044 27045var ScriptRecord = new r.Struct({ 27046 tag: new r.String(4), 27047 script: new r.Pointer(r.uint16, Script, { type: 'parent' }) 27048}); 27049 27050var ScriptList = new r.Array(ScriptRecord, r.uint16); 27051 27052//####################### 27053// Features and Lookups # 27054//####################### 27055 27056var Feature = new r.Struct({
27057 featureParams: r.uint16, // pointer 27058 lookupCount: r.uint16, 27059 lookupListIndexes: new r.Array(r.uint16, 'lookupCount') 27060}); 27061 27062var FeatureRecord = new r.Struct({ 27063 tag: new r.String(4), 27064 feature: new r.Pointer(r.uint16, Feature, { type: 'parent' }) 27065}); 27066 27067var FeatureList = new r.Array(FeatureRecord, r.uint16); 27068 27069var LookupFlags = new r.Struct({ 27070 markAttachmentType: r.uint8, 27071 flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet']) 27072}); 27073 27074function LookupList(SubTable) { 27075 var Lookup = new r.Struct({ 27076 lookupType: r.uint16, 27077 flags: LookupFlags, 27078 subTableCount: r.uint16, 27079 subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'), 27080 markFilteringSet: new r.Optional(r.uint16, function (t) { 27081 return t.flags.flags.useMarkFilteringSet; 27082 }) 27083 }); 27084 27085 return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16); 27086} 27087 27088//################# 27089// Coverage Table # 27090//################# 27091 27092var RangeRecord = new r.Struct({ 27093 start: r.uint16, 27094 end: r.uint16, 27095 startCoverageIndex: r.uint16 27096}); 27097 27098var Coverage = new r.VersionedStruct(r.uint16, { 27099 1: { 27100 glyphCount: r.uint16, 27101 glyphs: new r.Array(r.uint16, 'glyphCount') 27102 }, 27103 2: { 27104 rangeCount: r.uint16, 27105 rangeRecords: new r.Array(RangeRecord, 'rangeCount') 27106 } 27107}); 27108 27109//######################### 27110// Class Definition Table # 27111//######################### 27112 27113var ClassRangeRecord = new r.Struct({ 27114 start: r.uint16, 27115 end: r.uint16, 27116 class: r.uint16 27117}); 27118 27119var ClassDef = new r.VersionedStruct(r.uint16, { 27120 1: { // Class array 27121 startGlyph: r.uint16, 27122 glyphCount: r.uint16, 27123 classValueArray: new r.Array(r.uint16, 'glyphCount') 27124 }, 27125 2: { // Class ranges 27126 classRangeCount: r.uint16, 27127 classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount') 27128 } 27129}); 27130 27131//############### 27132// Device Table # 27133//############### 27134 27135var Device = new r.Struct({ 27136 a: r.uint16, // startSize for hinting Device, outerIndex for VariationIndex 27137 b: r.uint16, // endSize for Device, innerIndex for VariationIndex 27138 deltaFormat: r.uint16 27139}); 27140 27141//############################################# 27142// Contextual Substitution/Positioning Tables # 27143//############################################# 27144 27145var LookupRecord = new r.Struct({ 27146 sequenceIndex: r.uint16, 27147 lookupListIndex: r.uint16 27148}); 27149 27150var Rule = new r.Struct({ 27151 glyphCount: r.uint16, 27152 lookupCount: r.uint16, 27153 input: new r.Array(r.uint16, function (t) { 27154 return t.glyphCount - 1; 27155 }), 27156 lookupRecords: new r.Array(LookupRecord, 'lookupCount') 27157}); 27158 27159var RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16); 27160 27161var ClassRule = new r.Struct({ 27162 glyphCount: r.uint16, 27163 lookupCount: r.uint16, 27164 classes: new r.Array(r.uint16, function (t) { 27165 return t.glyphCount - 1; 27166 }), 27167 lookupRecords: new r.Array(LookupRecord, 'lookupCount') 27168}); 27169 27170var ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16); 27171 27172var Context = new r.VersionedStruct(r.uint16, { 27173 1: { // Simple context 27174 coverage: new r.Pointer(r.uint16, Coverage), 27175 ruleSetCount: r.uint16, 27176 ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount') 27177 }, 27178 2: { // Class-based context 27179 coverage: new r.Pointer(r.uint16, Coverage), 27180 classDef: new r.Pointer(r.uint16, ClassDef), 27181 classSetCnt: r.uint16, 27182 classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt') 27183 }, 27184 3: { 27185 glyphCount: r.uint16, 27186 lookupCount: r.uint16, 27187 coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'), 27188 lookupRecords: new r.Array(LookupRecord, 'lookupCount') 27189 } 27190}); 27191 27192//###################################################### 27193// Chaining Contextual Substitution/Positioning Tables # 27194//###################################################### 27195 27196var ChainRule = new r.Struct({ 27197 backtrackGlyphCount: r.uint16, 27198 backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'), 27199 inputGlyphCount: r.uint16, 27200 input: new r.Array(r.uint16, function (t) { 27201 return t.inputGlyphCount - 1; 27202 }), 27203 lookaheadGlyphCount: r.uint16, 27204 lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'), 27205 lookupCount: r.uint16, 27206 lookupRecords: new r.Array(LookupRecord, 'lookupCount') 27207}); 27208 27209var ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16); 27210 27211var ChainingContext = new r.VersionedStruct(r.uint16, {
27212 1: { // Simple context glyph substitution 27213 coverage: new r.Pointer(r.uint16, Coverage), 27214 chainCount: r.uint16, 27215 chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount') 27216 }, 27217 27218 2: { // Class-based chaining context 27219 coverage: new r.Pointer(r.uint16, Coverage), 27220 backtrackClassDef: new r.Pointer(r.uint16, ClassDef), 27221 inputClassDef: new r.Pointer(r.uint16, ClassDef), 27222 lookaheadClassDef: new r.Pointer(r.uint16, ClassDef), 27223 chainCount: r.uint16, 27224 chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount') 27225 }, 27226 27227 3: { // Coverage-based chaining context 27228 backtrackGlyphCount: r.uint16, 27229 backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'), 27230 inputGlyphCount: r.uint16, 27231 inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'), 27232 lookaheadGlyphCount: r.uint16, 27233 lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'), 27234 lookupCount: r.uint16, 27235 lookupRecords: new r.Array(LookupRecord, 'lookupCount') 27236 } 27237}); 27238 27239var _; 27240 27241/******************* 27242 * Variation Store * 27243 *******************/ 27244 27245var F2DOT14 = new r.Fixed(16, 'BE', 14); 27246var RegionAxisCoordinates = new r.Struct({ 27247 startCoord: F2DOT14, 27248 peakCoord: F2DOT14, 27249 endCoord: F2DOT14 27250}); 27251 27252var VariationRegionList = new r.Struct({ 27253 axisCount: r.uint16, 27254 regionCount: r.uint16, 27255 variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount') 27256}); 27257 27258var DeltaSet = new r.Struct({ 27259 shortDeltas: new r.Array(r.int16, function (t) { 27260 return t.parent.shortDeltaCount; 27261 }), 27262 regionDeltas: new r.Array(r.int8, function (t) { 27263 return t.parent.regionIndexCount - t.parent.shortDeltaCount; 27264 }), 27265 deltas: function deltas(t) { 27266 return t.shortDeltas.concat(t.regionDeltas); 27267 } 27268}); 27269 27270var ItemVariationData = new r.Struct({ 27271 itemCount: r.uint16, 27272 shortDeltaCount: r.uint16, 27273 regionIndexCount: r.uint16, 27274 regionIndexes: new r.Array(r.uint16, 'regionIndexCount'), 27275 deltaSets: new r.Array(DeltaSet, 'itemCount') 27276}); 27277 27278var ItemVariationStore = new r.Struct({ 27279 format: r.uint16, 27280 variationRegionList: new r.Pointer(r.uint32, VariationRegionList), 27281 variationDataCount: r.uint16, 27282 itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount') 27283}); 27284 27285/********************** 27286 * Feature Variations * 27287 **********************/ 27288 27289var ConditionTable = new r.VersionedStruct(r.uint16, { 27290 1: (_ = { 27291 axisIndex: r.uint16 27292 }, _['axisIndex'] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _) 27293}); 27294 27295var ConditionSet = new r.Struct({ 27296 conditionCount: r.uint16, 27297 conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount') 27298}); 27299 27300var FeatureTableSubstitutionRecord = new r.Struct({ 27301 featureIndex: r.uint16, 27302 alternateFeatureTable: new r.Pointer(r.uint32, Feature, { type: 'parent' }) 27303}); 27304 27305var FeatureTableSubstitution = new r.Struct({ 27306 version: r.fixed32, 27307 substitutionCount: r.uint16, 27308 substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount') 27309}); 27310 27311var FeatureVariationRecord = new r.Struct({ 27312 conditionSet: new r.Pointer(r.uint32, ConditionSet, { type: 'parent' }), 27313 featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, { type: 'parent' }) 27314}); 27315 27316var FeatureVariations = new r.Struct({ 27317 majorVersion: r.uint16, 27318 minorVersion: r.uint16, 27319 featureVariationRecordCount: r.uint32, 27320 featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount') 27321}); 27322 27323// Checks if an operand is an index of a predefined value, 27324// otherwise delegates to the provided type. 27325 27326var PredefinedOp = function () { 27327 function PredefinedOp(predefinedOps, type) { 27328 _classCallCheck(this, PredefinedOp); 27329 27330 this.predefinedOps = predefinedOps; 27331 this.type = type; 27332 } 27333 27334 PredefinedOp.prototype.decode = function decode(stream, parent, operands) { 27335 if (this.predefinedOps[operands[0]]) { 27336 return this.predefinedOps[operands[0]]; 27337 } 27338 27339 return this.type.decode(stream, parent, operands); 27340 }; 27341 27342 PredefinedOp.prototype.size = function size(value, ctx) { 27343 return this.type.size(value, ctx); 27344 }; 27345 27346 PredefinedOp.prototype.encode = function encode(stream, value, ctx) { 27347 var index = this.predefinedOps.indexOf(value); 27348 if (index !== -1) { 27349 return index; 27350 } 27351 27352 return this.type.encode(stream, value, ctx); 27353 }; 27354 27355 return PredefinedOp; 27356}(); 27357 27358var CFFEncodingVersion = function (_r$Number) { 27359 _inherits(CFFEncodingVersion, _r$Number); 27360 27361 function CFFEncodingVersion() { 27362 _classCallCheck(this, CFFEncodingVersion); 27363 27364 return _possibleConstructorReturn(this, _r$Number.call(this, '
27364UInt8')); 27365 } 27366 27367 CFFEncodingVersion.prototype.decode = function decode(stream) { 27368 return r.uint8.decode(stream) & 0x7f; 27369 }; 27370 27371 return CFFEncodingVersion; 27372}(r.Number); 27373 27374var Range1 = new r.Struct({ 27375 first: r.uint16, 27376 nLeft: r.uint8 27377}); 27378 27379var Range2 = new r.Struct({ 27380 first: r.uint16, 27381 nLeft: r.uint16 27382}); 27383 27384var CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), { 27385 0: { 27386 nCodes: r.uint8, 27387 codes: new r.Array(r.uint8, 'nCodes') 27388 }, 27389 27390 1: { 27391 nRanges: r.uint8, 27392 ranges: new r.Array(Range1, 'nRanges') 27393 } 27394 27395 // TODO: supplement? 27396}); 27397 27398var CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, { lazy: true })); 27399 27400// Decodes an array of ranges until the total 27401// length is equal to the provided length. 27402 27403var RangeArray = function (_r$Array) { 27404 _inherits(RangeArray, _r$Array); 27405 27406 function RangeArray() { 27407 _classCallCheck(this, RangeArray); 27408 27409 return _possibleConstructorReturn(this, _r$Array.apply(this, arguments)); 27410 } 27411 27412 RangeArray.prototype.decode = function decode(stream, parent) { 27413 var length = restructure_src_utils.resolveLength(this.length, stream, parent); 27414 var count = 0; 27415 var res = []; 27416 while (count < length) { 27417 var range = this.type.decode(stream, parent); 27418 range.offset = count; 27419 count += range.nLeft + 1; 27420 res.push(range); 27421 } 27422 27423 return res; 27424 }; 27425 27426 return RangeArray; 27427}(r.Array); 27428 27429var CFFCustomCharset = new r.VersionedStruct(r.uint8, { 27430 0: { 27431 glyphs: new r.Array(r.uint16, function (t) { 27432 return t.parent.CharStrings.length - 1; 27433 }) 27434 }, 27435 27436 1: { 27437 ranges: new RangeArray(Range1, function (t) { 27438 return t.parent.CharStrings.length - 1; 27439 }) 27440 }, 27441 27442 2: { 27443 ranges: new RangeArray(Range2, function (t) { 27444 return t.parent.CharStrings.length - 1; 27445 }) 27446 } 27447}); 27448 27449var CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, { lazy: true })); 27450 27451var FDRange3 = new r.Struct({ 27452 first: r.uint16, 27453 fd: r.uint8 27454}); 27455 27456var FDRange4 = new r.Struct({ 27457 first: r.uint32, 27458 fd: r.uint16 27459}); 27460 27461var FDSelect = new r.VersionedStruct(r.uint8, { 27462 0: { 27463 fds: new r.Array(r.uint8, function (t) { 27464 return t.parent.CharStrings.length; 27465 }) 27466 }, 27467 27468 3: { 27469 nRanges: r.uint16, 27470 ranges: new r.Array(FDRange3, 'nRanges'), 27471 sentinel: r.uint16 27472 }, 27473 27474 4: { 27475 nRanges: r.uint32, 27476 ranges: new r.Array(FDRange4, 'nRanges'), 27477 sentinel: r.uint32 27478 } 27479}); 27480 27481var ptr = new CFFPointer(CFFPrivateDict); 27482 27483var CFFPrivateOp = function () { 27484 function CFFPrivateOp() { 27485 _classCallCheck(this, CFFPrivateOp); 27486 } 27487 27488 CFFPrivateOp.prototype.decode = function decode(stream, parent, operands) { 27489 parent.length = operands[0]; 27490 return ptr.decode(stream, parent, [operands[1]]); 27491 }; 27492 27493 CFFPrivateOp.prototype.size = function size(dict, ctx) { 27494 return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]]; 27495 }; 27496 27497 CFFPrivateOp.prototype.encode = function encode(stream, dict, ctx) { 27498 return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]]; 27499 }; 27500 27501 return CFFPrivateOp; 27502}(); 27503 27504var FontDict = new CFFDict([ 27505// key name type(s) default 27506[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null]]); 27507 27508var CFFTopDict = new CFFDict([ 27509// key name type(s) default 27510[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null], 27511 27512// CID font specific 27513[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]); 27514 27515var VariationStore = new r.Struct({ 27516 length: r.uint16,
27517 itemVariationStore: ItemVariationStore 27518}); 27519 27520var CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]); 27521 27522var CFFTop = new r.VersionedStruct(r.fixed16, { 27523 1: { 27524 hdrSize: r.uint8, 27525 offSize: r.uint8, 27526 nameIndex: new CFFIndex(new r.String('length')), 27527 topDictIndex: new CFFIndex(CFFTopDict), 27528 stringIndex: new CFFIndex(new r.String('length')), 27529 globalSubrIndex: new CFFIndex() 27530 }, 27531 27532 2: { 27533 hdrSize: r.uint8, 27534 length: r.uint16, 27535 topDict: CFF2TopDict, 27536 globalSubrIndex: new CFFIndex() 27537 } 27538}); 27539 27540var CFFFont = function () { 27541 function CFFFont(stream) { 27542 _classCallCheck(this, CFFFont); 27543 27544 this.stream = stream; 27545 this.decode(); 27546 } 27547 27548 CFFFont.decode = function decode(stream) { 27549 return new CFFFont(stream); 27550 }; 27551 27552 CFFFont.prototype.decode = function decode() { 27553 var start = this.stream.pos; 27554 var top = CFFTop.decode(this.stream); 27555 for (var key in top) { 27556 var val = top[key]; 27557 this[key] = val; 27558 } 27559 27560 if (this.version < 2) { 27561 if (this.topDictIndex.length !== 1) { 27562 throw new Error("Only a single font is allowed in CFF"); 27563 } 27564 27565 this.topDict = this.topDictIndex[0]; 27566 } 27567 27568 this.isCIDFont = this.topDict.ROS != null; 27569 return this; 27570 }; 27571 27572 CFFFont.prototype.string = function string(sid) { 27573 if (this.version >= 2) { 27574 return null; 27575 } 27576 27577 if (sid < standardStrings.length) { 27578 return standardStrings[sid]; 27579 } 27580 27581 return this.stringIndex[sid - standardStrings.length]; 27582 }; 27583 27584 CFFFont.prototype.getCharString = function getCharString(glyph) { 27585 this.stream.pos = this.topDict.CharStrings[glyph].offset; 27586 return this.stream.readBuffer(this.topDict.CharStrings[glyph].length); 27587 }; 27588 27589 CFFFont.prototype.getGlyphName = function getGlyphName(gid) { 27590 // CFF2 glyph names are in the post table. 27591 if (this.version >= 2) { 27592 return null; 27593 } 27594 27595 // CID-keyed fonts don't have glyph names 27596 if (this.isCIDFont) { 27597 return null; 27598 } 27599 27600 var charset = this.topDict.charset; 27601 27602 if (Array.isArray(charset)) { 27603 return charset[gid]; 27604 } 27605 27606 if (gid === 0) { 27607 return '.notdef'; 27608 } 27609 27610 gid -= 1; 27611 27612 switch (charset.version) { 27613 case 0: 27614 return this.string(charset.glyphs[gid]); 27615 27616 case 1: 27617 case 2: 27618 for (var i = 0; i < charset.ranges.length; i++) { 27619 var range = charset.ranges[i]; 27620 if (range.offset <= gid && gid <= range.offset + range.nLeft) { 27621 return this.string(range.first + (gid - range.offset)); 27622 } 27623 } 27624 break; 27625 } 27626 27627 return null; 27628 }; 27629 27630 CFFFont.prototype.fdForGlyph = function fdForGlyph(gid) { 27631 if (!this.topDict.FDSelect) { 27632 return null; 27633 } 27634 27635 switch (this.topDict.FDSelect.version) { 27636 case 0: 27637 return this.topDict.FDSelect.fds[gid]; 27638 27639 case 3: 27640 case 4: 27641 var ranges = this.topDict.FDSelect.ranges; 27642 27643 var low = 0; 27644 var high = ranges.length - 1; 27645 27646 while (low <= high) { 27647 var mid = low + high >> 1; 27648 27649 if (gid < ranges[mid].first) { 27650 high = mid - 1; 27651 } else if (mid < high && gid > ranges[mid + 1].first) { 27652 low = mid + 1; 27653 } else { 27654 return ranges[mid].fd; 27655 } 27656 } 27657 default: 27658 throw new Error('Unknown FDSelect version: ' + this.topDict.FDSelect.version); 27659 } 27660 }; 27661 27662 CFFFont.prototype.privateDictForGlyph = function privateDictForGlyph(gid) { 27663 if (this.topDict.FDSelect) { 27664 var fd = this.fdForGlyph(gid); 27665 if (this.topDict.FDArray[fd]) { 27666 return this.topDict.FDArray[fd].Private; 27667 } 27668 27669 return null; 27670 } 27671 27672 if (this.version < 2) { 27673 return this.topDict.Private; 27674 } 27675 27676 return this.topDict.FDArray[0].Private; 27677 }; 27678 27679 _createClass(CFFFont, [{ 27680 key: 'postscriptName', 27681 get: function get() { 27682 if (this.version < 2) { 27683 return this.nameIndex[0]; 27684 } 27685 27686 return null; 27687 } 27688 }, { 27689 key: 'fullName', 27690 get: function get() { 27691 return this.string(this.topDict.FullName); 27692 } 27693 }, { 27694 key: 'familyName', 27695 get: function get() { 27696 return this.string(this.topDict.FamilyName); 27697 } 27698 }]); 27699 27700 return CFFFont; 27701}(); 27702 27703var VerticalOrigin = new r.Struct({ 27704 glyphIndex: r.uint16, 27705 vertOriginY: r.int16 27706}); 27707 27708var VORG = new r.Struct({ 27709 majorVersion: r.uint16, 27710 minorVersion: r.uint16, 27711 defaultVertOriginY: r.int16, 27712 numVertOriginYMetrics: r.uint16, 27713 metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics') 27714}); 27715 27716var BigMetrics = new r.Struct({ 27717 height: r.uint8, 27718 width: r.uint8, 27719 horiBearingX: r.int8, 27720 horiBearingY: r.int8, 27721 horiAdvance: r.uint8, 27722 vertBearingX: r.int8, 27723 vertBearingY: r.int8, 27724 vertAdvance: r.uint8 27725}); 27726 27727var SmallMetrics = new r.Struct({ 27728 height: r.uint8, 27729 width: r.uint8, 27730 bearingX: r.int8, 27731 bearingY: r.int8, 27732 advance: r.uint8 27733}); 27734 27735var EBDTComponent = new r.Struct({ 27736 glyph: r.uint16, 27737 xOffset: r.int8, 27738 yOffset: r.int8 27739}); 27740 27741var ByteAligned = function ByteAligned() { 27742 _classCallCheck(this, ByteAligned); 27743}; 27744 27745var BitAligned = function BitAligned() { 27746 _classCallCheck(this, BitAligned); 27747}; 27748 27749var glyph = new r.VersionedStruct('version', { 27750 1: { 27751 metrics: SmallMetrics, 27752 data: ByteAligned 27753 }, 27754 27755 2: { 27756 metrics: SmallMetrics, 27757 data: BitAligned 27758 }, 27759 27760 // format 3 is deprecated 27761 // format 4 is not supported by Microsoft 27762 27763 5: { 27764 data: BitAligned 27765 }, 27766 27767 6: { 27768 metrics: BigMetrics, 27769 data: ByteAligned 27770 }, 27771 27772 7: { 27773 metrics: BigMetrics, 27774 data: BitAligned 27775 }, 27776 27777 8: { 27778 metrics: SmallMetrics, 27779 pad: new r.Reserved(r.uint8), 27780 numComponents: r.uint16, 27781 components: new r.Array(EBDTComponent, 'numComponents') 27782 }, 27783 27784 9: { 27785 metrics: BigMetrics, 27786 pad: new r.Reserved(r.uint8), 27787 numComponents: r.uint16, 27788 components: new r.Array(EBDTComponent, 'numComponents') 27789 }, 27790 27791 17: { 27792 metrics: SmallMetrics, 27793 dataLen: r.uint32, 27794 data: new r.Buffer('dataLen') 27795 }, 27796 27797 18: { 27798 metrics: BigMetrics, 27799 dataLen: r.uint32, 27800 data: new r.Buffer('dataLen') 27801 }, 27802 27803 19: { 27804 dataLen: r.uint32, 27805 data: new r.Buffer('dataLen') 27806 } 27807}); 27808 27809var SBitLineMetrics = new r.Struct({ 27810 ascender: r.int8, 27811 descender: r.int8, 27812 widthMax: r.uint8, 27813 caretSlopeNumerator: r.int8, 27814 caretSlopeDenominator: r.int8, 27815 caretOffset: r.int8, 27816 minOriginSB: r.int8, 27817 minAdvanceSB: r.int8, 27818 maxBeforeBL: r.int8, 27819 minAfterBL: r.int8, 27820 pad: new r.Reserved(r.int8, 2) 27821}); 27822 27823var CodeOffsetPair = new r.Struct({ 27824 glyphCode: r.uint16, 27825 offset: r.uint16 27826}); 27827 27828var IndexSubtable = new r.VersionedStruct(r.uint16, { 27829 header: { 27830 imageFormat: r.uint16, 27831 imageDataOffset: r.uint32 27832 }, 27833 27834 1: { 27835 offsetArray: new r.Array(r.uint32, function (t) { 27836 return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1; 27837 }) 27838 }, 27839 27840 2: { 27841 imageSize: r.uint32, 27842 bigMetrics: BigMetrics 27843 }, 27844 27845 3: { 27846 offsetArray: new r.Array(r.uint16, function (t) { 27847 return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1; 27848 }) 27849 }, 27850 27851 4: { 27852 numGlyphs: r.uint32, 27853 glyphArray: new r.Array(CodeOffsetPair, function (t) { 27854 return t.numGlyphs + 1; 27855 }) 27856 }, 27857 27858 5: { 27859 imageSize: r.uint32, 27860 bigMetrics: BigMetrics, 27861 numGlyphs: r.uint32, 27862 glyphCodeArray: new r.Array(r.uint16, 'numGlyphs') 27863 } 27864}); 27865 27866var IndexSubtableArray = new r.Struct({ 27867 firstGlyphIndex: r.uint16, 27868 lastGlyphIndex: r.uint16, 27869 subtable: new r.Pointer(r.uint32, IndexSubtable) 27870}); 27871 27872var BitmapSizeTable = new r.Struct({ 27873 indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), { type: 'parent' }), 27874 indexTablesSize: r.uint32, 27875 numberOfIndexSubTables: r.uint32, 27876 colorRef: r.uint32, 27877 hori: SBitLineMetrics, 27878 vert: SBitLineMetrics, 27879 startGlyphIndex: r.uint16, 27880 endGlyphIndex: r.uint16, 27881 ppemX: r.uint8, 27882 ppemY: r.uint8, 27883 bitDepth: r.uint8, 27884 flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical']) 27885}); 27886 27887var EBLC = new r.Struct({ 27888 version: r.uint32, // 0x00020000 27889 numSizes: r.uint32, 27890 sizes: new r.Array(BitmapSizeTable, 'numSizes') 27891}); 27892 27893var ImageTable = new r.Struct({ 27894 ppem: r.uint16, 27895 resolution: r.uint16, 27896 imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) { 27897 return t.parent.parent.maxp.numGlyphs + 1; 27898 }) 27899}); 27900 27901// This is the Apple sbix table, used by the "Apple Color Emoji" font. 27902// It includes several image tables with images for each bitmap glyph 27903// of several different sizes. 27904var sbix = new r.Struct({ 27905 version: r.uint16, 27906 flags: new r.Bitfield(r.uint16, ['renderOutlines']), 27907 numImgTables: r.uint32, 27908 imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables') 27909}); 27910 27911var LayerRecord = new r.Struct({ 27912 gid: r.uint16, // Glyph ID of layer glyph (must be in z-order from bottom to top). 27913 paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must 27914}); // be less than numPaletteEntries in the CPAL table, except for 27915// the special case noted below. Each palette entry is 16 bits. 27916// A palette index of 0xFFFF is a special case indicating that 27917// the text foreground color should be used. 27918 27919var BaseGlyphRecord = new r.Struct({ 27920 gid: r.uint16, // Glyph ID of reference glyph. This glyph is for reference only 27921 // and is not rendered for color. 27922 firstLayerIndex: r.uint16, // Index (from beginning of the Layer Records) to the layer record. 27923 // There will be numLayers consecutive entries for this base glyph. 27924 numLayers: r.uint16 27925}); 27926 27927var COLR = new r.Struct({ 27928 version: r.uint16, 27929 numBaseGlyphRecords: r.uint16, 27930 baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')), 27931 layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), { lazy: true }), 27932 numLayerRecords: r.uint16 27933}); 27934 27935var ColorRecord = new r.Struct({ 27936 blue: r.uint8, 27937 green: r.uint8, 27938 red: r.uint8, 27939 alpha: r.uint8 27940}); 27941 27942var CPAL = new r.VersionedStruct(r.uint16, { 27943 header: { 27944 numPaletteEntries: r.uint16, 27945 numPalettes: r.uint16, 27946 numColorRecords: r.uint16, 27947 colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')), 27948 colorRecordIndices: new r.Array(r.uint16, 'numPalettes') 27949 }, 27950 0: {}, 27951 1: { 27952 offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')), 27953 offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')), 27954 offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries')) 27955 } 27956}); 27957 27958var BaseCoord = new r.VersionedStruct(r.uint16, { 27959 1: { // Design units only 27960 coordinate: r.int16 // X or Y value, in design units 27961 }, 27962 27963 2: { // Design units plus contour point 27964 coordinate: r.int16, // X or Y value, in design units 27965 referenceGlyph: r.uint16, // GlyphID of control glyph 27966 baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph 27967 }, 27968 27969 3: { // Design units plus Device table 27970 coordinate: r.int16, // X or Y value, in design units 27971 deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value 27972 } 27973}); 27974 27975var BaseValues = new r.Struct({ 27976 defaultIndex: r.uint16, // Index of default baseline for this script-same index in the BaseTagList 27977 baseCoordCount: r.uint16, 27978 baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCo
27978ordCount') 27979}); 27980 27981var FeatMinMaxRecord = new r.Struct({ 27982 tag: new r.String(4), // 4-byte feature identification tag-must match FeatureTag in FeatureList 27983 minCoord: new r.Pointer(r.uint16, BaseCoord, { type: 'parent' }), // May be NULL 27984 maxCoord: new r.Pointer(r.uint16, BaseCoord, { type: 'parent' }) // May be NULL 27985}); 27986 27987var MinMax = new r.Struct({ 27988 minCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL 27989 maxCoord: new r.Pointer(r.uint16, BaseCoord), // May be NULL 27990 featMinMaxCount: r.uint16, // May be 0 27991 featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order 27992}); 27993 27994var BaseLangSysRecord = new r.Struct({ 27995 tag: new r.String(4), // 4-byte language system identification tag 27996 minMax: new r.Pointer(r.uint16, MinMax, { type: 'parent' }) 27997}); 27998 27999var BaseScript = new r.Struct({ 28000 baseValues: new r.Pointer(r.uint16, BaseValues), // May be NULL 28001 defaultMinMax: new r.Pointer(r.uint16, MinMax), // May be NULL 28002 baseLangSysCount: r.uint16, // May be 0 28003 baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag 28004}); 28005 28006var BaseScriptRecord = new r.Struct({ 28007 tag: new r.String(4), // 4-byte script identification tag 28008 script: new r.Pointer(r.uint16, BaseScript, { type: 'parent' }) 28009}); 28010 28011var BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); 28012 28013// Array of 4-byte baseline identification tags-must be in alphabetical order 28014var BaseTagList = new r.Array(new r.String(4), r.uint16); 28015 28016var Axis = new r.Struct({ 28017 baseTagList: new r.Pointer(r.uint16, BaseTagList), // May be NULL 28018 baseScriptList: new r.Pointer(r.uint16, BaseScriptList) 28019}); 28020 28021var BASE = new r.VersionedStruct(r.uint32, { 28022 header: { 28023 horizAxis: new r.Pointer(r.uint16, Axis), // May be NULL 28024 vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL 28025 }, 28026 28027 0x00010000: {}, 28028 0x00010001: { 28029 itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) 28030 } 28031}); 28032 28033var AttachPoint = new r.Array(r.uint16, r.uint16); 28034var AttachList = new r.Struct({ 28035 coverage: new r.Pointer(r.uint16, Coverage), 28036 glyphCount: r.uint16, 28037 attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount') 28038}); 28039 28040var CaretValue = new r.VersionedStruct(r.uint16, { 28041 1: { // Design units only 28042 coordinate: r.int16 28043 }, 28044 28045 2: { // Contour point 28046 caretValuePoint: r.uint16 28047 }, 28048 28049 3: { // Design units plus Device table 28050 coordinate: r.int16, 28051 deviceTable: new r.Pointer(r.uint16, Device) 28052 } 28053}); 28054 28055var LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16); 28056 28057var LigCaretList = new r.Struct({ 28058 coverage: new r.Pointer(r.uint16, Coverage), 28059 ligGlyphCount: r.uint16, 28060 ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount') 28061}); 28062 28063var MarkGlyphSetsDef = new r.Struct({ 28064 markSetTableFormat: r.uint16, 28065 markSetCount: r.uint16, 28066 coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount') 28067}); 28068 28069var GDEF = new r.VersionedStruct(r.uint32, { 28070 header: { 28071 glyphClassDef: new r.Pointer(r.uint16, ClassDef), 28072 attachList: new r.Pointer(r.uint16, AttachList), 28073 ligCaretList: new r.Pointer(r.uint16, LigCaretList), 28074 markAttachClassDef: new r.Pointer(r.uint16, ClassDef) 28075 }, 28076 28077 0x00010000: {}, 28078 0x00010002: { 28079 markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef) 28080 }, 28081 0x00010003: { 28082 markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef), 28083 itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore) 28084 } 28085}); 28086 28087var ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']); 28088 28089var types = { 28090 xPlacement: r.int16, 28091 yPlacement: r.int16, 28092 xAdvance: r.int16, 28093 yAdvance: r.int16, 28094 xPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }), 28095 yPlaDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }), 28096 xAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }), 28097 yAdvDevice: new r.Pointer(r.uint16, Device, { type: 'global', relativeTo: 'rel' }) 28098}; 28099 28100var ValueRecord = function () { 28101 function ValueRecord() { 28102 var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'valueFormat'; 28103 28104 _classCallCheck(this, ValueRecord); 28105 28106 this.key = key; 28107 } 28108 28109 ValueRecord.prototype.buildStruct = function buildStruct(parent) { 28110 var struct = parent;
28111 while (!struct[this.key] && struct.parent) { 28112 struct = struct.parent; 28113 } 28114 28115 if (!struct[this.key]) return; 28116 28117 var fields = {}; 28118 fields.rel = function () { 28119 return struct._startOffset; 28120 }; 28121 28122 var format = struct[this.key]; 28123 for (var key in format) { 28124 if (format[key]) { 28125 fields[key] = types[key]; 28126 } 28127 } 28128 28129 return new r.Struct(fields); 28130 }; 28131 28132 ValueRecord.prototype.size = function size(val, ctx) { 28133 return this.buildStruct(ctx).size(val, ctx); 28134 }; 28135 28136 ValueRecord.prototype.decode = function decode(stream, parent) { 28137 var res = this.buildStruct(parent).decode(stream, parent); 28138 delete res.rel; 28139 return res; 28140 }; 28141 28142 return ValueRecord; 28143}(); 28144 28145var PairValueRecord = new r.Struct({ 28146 secondGlyph: r.uint16, 28147 value1: new ValueRecord('valueFormat1'), 28148 value2: new ValueRecord('valueFormat2') 28149}); 28150 28151var PairSet = new r.Array(PairValueRecord, r.uint16); 28152 28153var Class2Record = new r.Struct({ 28154 value1: new ValueRecord('valueFormat1'), 28155 value2: new ValueRecord('valueFormat2') 28156}); 28157 28158var Anchor = new r.VersionedStruct(r.uint16, { 28159 1: { // Design units only 28160 xCoordinate: r.int16, 28161 yCoordinate: r.int16 28162 }, 28163 28164 2: { // Design units plus contour point 28165 xCoordinate: r.int16, 28166 yCoordinate: r.int16, 28167 anchorPoint: r.uint16 28168 }, 28169 28170 3: { // Design units plus Device tables 28171 xCoordinate: r.int16, 28172 yCoordinate: r.int16, 28173 xDeviceTable: new r.Pointer(r.uint16, Device), 28174 yDeviceTable: new r.Pointer(r.uint16, Device) 28175 } 28176}); 28177 28178var EntryExitRecord = new r.Struct({ 28179 entryAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' }), 28180 exitAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' }) 28181}); 28182 28183var MarkRecord = new r.Struct({ 28184 class: r.uint16, 28185 markAnchor: new r.Pointer(r.uint16, Anchor, { type: 'parent' }) 28186}); 28187 28188var MarkArray = new r.Array(MarkRecord, r.uint16); 28189 28190var BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) { 28191 return t.parent.classCount; 28192}); 28193var BaseArray = new r.Array(BaseRecord, r.uint16); 28194 28195var ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) { 28196 return t.parent.parent.classCount; 28197}); 28198var LigatureAttach = new r.Array(ComponentRecord, r.uint16); 28199var LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16); 28200 28201var GPOSLookup = new r.VersionedStruct('lookupType', { 28202 1: new r.VersionedStruct(r.uint16, { // Single Adjustment 28203 1: { // Single positioning value 28204 coverage: new r.Pointer(r.uint16, Coverage), 28205 valueFormat: ValueFormat, 28206 value: new ValueRecord() 28207 }, 28208 2: { 28209 coverage: new r.Pointer(r.uint16, Coverage), 28210 valueFormat: ValueFormat, 28211 valueCount: r.uint16, 28212 values: new r.LazyArray(new ValueRecord(), 'valueCount') 28213 } 28214 }), 28215 28216 2: new r.VersionedStruct(r.uint16, { // Pair Adjustment Positioning 28217 1: { // Adjustments for glyph pairs 28218 coverage: new r.Pointer(r.uint16, Coverage), 28219 valueFormat1: ValueFormat, 28220 valueFormat2: ValueFormat, 28221 pairSetCount: r.uint16, 28222 pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount') 28223 }, 28224 28225 2: { // Class pair adjustment 28226 coverage: new r.Pointer(r.uint16, Coverage), 28227 valueFormat1: ValueFormat, 28228 valueFormat2: ValueFormat, 28229 classDef1: new r.Pointer(r.uint16, ClassDef), 28230 classDef2: new r.Pointer(r.uint16, ClassDef), 28231 class1Count: r.uint16, 28232 class2Count: r.uint16, 28233 classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count') 28234 } 28235 }), 28236 28237 3: { // Cursive Attachment Positioning 28238 format: r.uint16, 28239 coverage: new r.Pointer(r.uint16, Coverage), 28240 entryExitCount: r.uint16, 28241 entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount') 28242 }, 28243 28244 4: { // MarkToBase Attachment Positioning 28245 format: r.uint16, 28246 markCoverage: new r.Pointer(r.uint16, Coverage), 28247 baseCoverage: new r.Pointer(r.uint16, Coverage), 28248 classCount: r.uint16, 28249 markArray: new r.Pointer(r.uint16, MarkArray), 28250 baseArray: new r.Pointer(r.uint16, BaseArray) 28251 }, 28252 28253 5: { // MarkToLigature Attachment Positioning 28254 format: r.uint16, 28255 markCoverage: new r.Pointer(r.uint16, Coverage), 28256 ligatureCoverage: new r.Pointer(r.uint16, Coverage), 28257 classCount: r.uint16, 28258 markArray: new r.Pointer(r.uint16, MarkArray), 28259 ligatureArray: new r.Pointer(r.uint16, LigatureArray) 28260 }, 28261 28262 6: { // MarkToMark Attachment Positioning 28263 format: r.uint16, 28264 mark1Coverage: new r.Pointer(r.uint16, Coverage), 28265 mark2Coverage: new r.Pointer(r.uint16, Coverage), 28266 classCount: r.uint16, 28267 mark1Array: new r.Pointer(r.uint16, MarkArray), 28268 mark2Array: new r.Pointer(r.uint16, BaseArray) 28269 }, 28270 28271 7: Context, // Contextual positioning 28272 8: ChainingContext, // Chaining contextual positioning 28273 28274 9: { // Extension Positioning 28275 posFormat: r.uint16, 28276 lookupType: r.uint16, // cannot also be 9 28277 extension: new r.Pointer(r.uint32, GPOSLookup) 28278 } 28279}); 28280 28281// Fix circular reference 28282GPOSLookup.versions[9].extension.type = GPOSLookup; 28283 28284var GPOS = new r.VersionedStruct(r.uint32, { 28285 header: { 28286 scriptList: new r.Pointer(r.uint16, ScriptList), 28287 featureList: new r.Pointer(r.uint16, FeatureList), 28288 lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup)) 28289 }, 28290 28291 0x00010000: {}, 28292 0x00010001: { 28293 featureVariations: new r.Pointer(r.uint32, FeatureVariations) 28294 } 28295}); 28296 28297var Sequence = new r.Array(r.uint16, r.uint16); 28298var AlternateSet = Sequence; 28299 28300var Ligature = new r.Struct({ 28301 glyph: r.uint16, 28302 compCount: r.uint16, 28303 components: new r.Array(r.uint16, function (t) { 28304 return t.compCount - 1; 28305 }) 28306}); 28307 28308var LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16); 28309 28310var GSUBLookup = new r.VersionedStruct('lookupType', { 28311 1: new r.VersionedStruct(r.uint16, { // Single Substitution 28312 1: { 28313 coverage: new r.Pointer(r.uint16, Coverage), 28314 deltaGlyphID: r.int16 28315 }, 28316 2: { 28317 coverage: new r.Pointer(r.uint16, Coverage), 28318 glyphCount: r.uint16, 28319 substitute: new r.LazyArray(r.uint16, 'glyphCount') 28320 } 28321 }), 28322 28323 2: { // Multiple Substitution 28324 substFormat: r.uint16, 28325 coverage: new r.Pointer(r.uint16, Coverage), 28326 count: r.uint16, 28327 sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count') 28328 }, 28329 28330 3: { // Alternate Substitution 28331 substFormat: r.uint16, 28332 coverage: new r.Pointer(r.uint16, Coverage), 28333 count: r.uint16, 28334 alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count') 28335 }, 28336 28337 4: { // Ligature Substitution 28338 substFormat: r.uint16, 28339 coverage: new r.Pointer(r.uint16, Coverage), 28340 count: r.uint16, 28341 ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count') 28342 }, 28343 28344 5: Context, // Contextual Substitution 28345 6: ChainingContext, // Chaining Contextual Substitution 28346 28347 7: { // Extension Substitution 28348 substFormat: r.uint16, 28349 lookupType: r.uint16, // cannot also be 7 28350 extension: new r.Pointer(r.uint32, GSUBLookup) 28351 }, 28352 28353 8: { // Reverse Chaining Contextual Single Substitution 28354 substFormat: r.uint16, 28355 coverage: new r.Pointer(r.uint16, Coverage), 28356 backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'), 28357 lookaheadGlyphCount: r.uint16, 28358 lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'), 28359 glyphCount: r.uint16, 28360 substitutes: new r.Array(r.uint16, 'glyphCount') 28361 } 28362}); 28363 28364// Fix circular reference 28365GSUBLookup.versions[7].extension.type = GSUBLookup; 28366 28367var GSUB = new r.VersionedStruct(r.uint32, { 28368 header: { 28369 scriptList: new r.Pointer(r.uint16, ScriptList), 28370 featureList: new r.Pointer(r.uint16, FeatureList), 28371 lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup)) 28372 }, 28373 28374 0x00010000: {}, 28375 0x00010001: { 28376 featureVariations: new r.Pointer(r.uint32, FeatureVariations) 28377 } 28378}); 28379 28380var JstfGSUBModList = new r.Array(r.uint16, r.uint16); 28381 28382var JstfPriority = new r.Struct({ 28383 shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), 28384 shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), 28385 shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), 28386 shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), 28387 shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)), 28388 extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), 28389 extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList), 28390 extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), 28391 extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList), 28392 extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)) 28393}); 28394 28395var JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16); 28396 28397var JstfLangSysRecord = new r.Struct({ 28398 tag: new r.String(4), 28399 jstfLangSys: new r.Pointer(r.uint16, JstfLangSys) 28400}); 28401 28402var JstfScript = new r.Struct({ 28403 extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)), // array of glyphs to extend line length 28404 defaultLangSys: new r.Pointer(r.uint16, JstfLangSys), 28405 langSysCount: r.uint16, 28406 langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount') 28407}); 28408 28409var JstfScriptRecord = new r.Struct({ 28410 tag: new r.String(4), 28411 script: new r.Pointer(r.uint16, JstfScript, { type: 'parent' }) 28412}); 28413 28414var JSTF = new r.Struct({ 28415 version: r.uint32, // should be 0x00010000 28416 scriptCount: r.uint16, 28417 scriptList: new r.Array(JstfScriptRecord, 'scriptCount') 28418}); 28419 28420// TODO: add this to restructure 28421 28422var VariableSizeNumber = function () { 28423 function VariableSizeNumber(size) { 28424 _classCallCheck(this, VariableSizeNumber); 28425 28426 this._size = size; 28427 } 28428 28429 VariableSizeNumber.prototype.decode = function decode(stream, parent) { 28430 switch (this.size(0, parent)) { 28431 case 1: 28432 return stream.readUInt8(); 28433 case 2: 28434 return stream.readUInt16BE(); 28435 case 3: 28436 return stream.readUInt24BE(); 28437 case 4: 28438 return stream.readUInt32BE(); 28439 } 28440 }; 28441 28442 VariableSizeNumber.prototype.size = function size(val, parent) { 28443 return restructure_src_utils.resolveLength(this._size, null, parent); 28444 }; 28445 28446 return VariableSizeNumber; 28447}(); 28448 28449var MapDataEntry = new r.Struct({ 28450 entry: new VariableSizeNumber(function (t) { 28451 return ((t.parent.entryFormat & 0x0030) >> 4) + 1; 28452 }), 28453 outerIndex: function outerIndex(t) { 28454 return t.entry >> (t.parent.entryFormat & 0x000F) + 1; 28455 }, 28456 innerIndex: function innerIndex(t) { 28457 return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1; 28458 } 28459}); 28460 28461var DeltaSetIndexMap = new r.Struct({ 28462 entryFormat: r.uint16, 28463 mapCount: r.uint16, 28464 mapData: new r.Array(MapDataEntry, 'mapCount') 28465}); 28466 28467var HVAR = new r.Struct({ 28468 majorVersion: r.uint16, 28469 minorVersion: r.uint16, 28470 itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),
vendor: 6,857 bytes, lines 28471-28685
28471 advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap), 28472 LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap), 28473 RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap) 28474}); 28475 28476var Signature = new r.Struct({ 28477 format: r.uint32, 28478 length: r.uint32, 28479 offset: r.uint32 28480}); 28481 28482var SignatureBlock = new r.Struct({ 28483 reserved: new r.Reserved(r.uint16, 2), 28484 cbSignature: r.uint32, // Length (in bytes) of the PKCS#7 packet in pbSignature 28485 signature: new r.Buffer('cbSignature') 28486}); 28487 28488var DSIG = new r.Struct({ 28489 ulVersion: r.uint32, // Version number of the DSIG table (0x00000001) 28490 usNumSigs: r.uint16, // Number of signatures in the table 28491 usFlag: r.uint16, // Permission flags 28492 signatures: new r.Array(Signature, 'usNumSigs'), 28493 signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs') 28494}); 28495 28496var GaspRange = new r.Struct({ 28497 rangeMaxPPEM: r.uint16, // Upper limit of range, in ppem 28498 rangeGaspBehavior: new r.Bitfield(r.uint16, [// Flags describing desired rasterizer behavior 28499 'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType 28500 ]) 28501}); 28502 28503var gasp = new r.Struct({ 28504 version: r.uint16, // set to 0 28505 numRanges: r.uint16, 28506 gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem 28507}); 28508 28509var DeviceRecord = new r.Struct({ 28510 pixelSize: r.uint8, 28511 maximumWidth: r.uint8, 28512 widths: new r.Array(r.uint8, function (t) { 28513 return t.parent.parent.maxp.numGlyphs; 28514 }) 28515}); 28516 28517// The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes 28518var hdmx = new r.Struct({ 28519 version: r.uint16, 28520 numRecords: r.int16, 28521 sizeDeviceRecord: r.int32, 28522 records: new r.Array(DeviceRecord, 'numRecords') 28523}); 28524 28525var KernPair = new r.Struct({ 28526 left: r.uint16, 28527 right: r.uint16, 28528 value: r.int16 28529}); 28530 28531var ClassTable = new r.Struct({ 28532 firstGlyph: r.uint16, 28533 nGlyphs: r.uint16, 28534 offsets: new r.Array(r.uint16, 'nGlyphs'), 28535 max: function max(t) { 28536 return t.offsets.length && Math.max.apply(Math, t.offsets); 28537 } 28538}); 28539 28540var Kern2Array = new r.Struct({ 28541 off: function off(t) { 28542 return t._startOffset - t.parent.parent._startOffset; 28543 }, 28544 len: function len(t) { 28545 return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2); 28546 }, 28547 values: new r.LazyArray(r.int16, 'len') 28548}); 28549 28550var KernSubtable = new r.VersionedStruct('format', { 28551 0: { 28552 nPairs: r.uint16, 28553 searchRange: r.uint16, 28554 entrySelector: r.uint16, 28555 rangeShift: r.uint16, 28556 pairs: new r.Array(KernPair, 'nPairs') 28557 }, 28558 28559 2: { 28560 rowWidth: r.uint16, 28561 leftTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }), 28562 rightTable: new r.Pointer(r.uint16, ClassTable, { type: 'parent' }), 28563 array: new r.Pointer(r.uint16, Kern2Array, { type: 'parent' }) 28564 }, 28565 28566 3: { 28567 glyphCount: r.uint16, 28568 kernValueCount: r.uint8, 28569 leftClassCount: r.uint8, 28570 rightClassCount: r.uint8, 28571 flags: r.uint8, 28572 kernValue: new r.Array(r.int16, 'kernValueCount'), 28573 leftClass: new r.Array(r.uint8, 'glyphCount'), 28574 rightClass: new r.Array(r.uint8, 'glyphCount'), 28575 kernIndex: new r.Array(r.uint8, function (t) { 28576 return t.leftClassCount * t.rightClassCount; 28577 }) 28578 } 28579}); 28580 28581var KernTable = new r.VersionedStruct('version', { 28582 0: { // Microsoft uses this format 28583 subVersion: r.uint16, // Microsoft has an extra sub-table version number 28584 length: r.uint16, // Length of the subtable, in bytes 28585 format: r.uint8, // Format of subtable 28586 coverage: new r.Bitfield(r.uint8, ['horizontal', // 1 if table has horizontal data, 0 if vertical 28587 'minimum', // If set to 1, the table has minimum values. If set to 0, the table has kerning values. 28588 'crossStream', // If set to 1, kerning is perpendicular to the flow of the text 28589 'override' // If set to 1 the value in this table replaces the accumulated value 28590 ]), 28591 subtable: KernSubtable, 28592 padding: new r.Reserved(r.uint8, function (t) { 28593 return t.length - t._currentOffset; 28594 }) 28595 }, 28596 1: { // Apple uses this format 28597 length: r.uint32, 28598 coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation', // Set if table has variation kerning values 28599 'crossStream', // Set if table has cross-stream kerning values 28600 'vertical' // Set if table has vertical kerning values 28601 ]), 28602 format: r.uint8, 28603 tupleIndex: r.uint16, 28604 subtable: KernSubtable, 28605 padding: new r.Reserved(r.uint8, function (t) { 28606 return t.length - t._currentOffset; 28607 }) 28608 } 28609}); 28610 28611var kern = new r.VersionedStruct(r.uint16, { 28612 0: { // Microsoft Version 28613 nTables: r.uint16, 28614 tables: new r.Array(KernTable, 'nTables') 28615 }, 28616 28617 1: { // Apple Version 28618 reserved: new r.Reserved(r.uint16), // the other half of the version number 28619 nTables: r.uint32, 28620 tables: new r.Array(KernTable, 'nTables') 28621 } 28622}); 28623 28624// Linear Threshold table 28625// Records the ppem for each glyph at which the scaling becomes linear again, 28626// despite instructions effecting the advance width 28627var LTSH = new r.Struct({ 28628 version: r.uint16, 28629 numGlyphs: r.uint16, 28630 yPels: new r.Array(r.uint8, 'numGlyphs') 28631}); 28632 28633// PCL 5 Table 28634// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines 28635var PCLT = new r.Struct({ 28636 version: r.uint16, 28637 fontNumber: r.uint32, 28638 pitch: r.uint16, 28639 xHeight: r.uint16, 28640 style: r.uint16, 28641 typeFamily: r.uint16, 28642 capHeight: r.uint16, 28643 symbolSet: r.uint16, 28644 typeface: new r.String(16), 28645 characterComplement: new r.String(8), 28646 fileName: new r.String(6), 28647 strokeWeight: new r.String(1), 28648 widthType: new r.String(1), 28649 serifStyle: r.uint8, 28650 reserved: new r.Reserved(r.uint8) 28651}); 28652 28653// VDMX tables contain ascender/descender overrides for certain (usually small) 28654// sizes. This is needed in order to match font metrics on Windows. 28655 28656var Ratio = new r.Struct({ 28657 bCharSet: r.uint8, // Character set 28658 xRatio: r.uint8, // Value to use for x-Ratio 28659 yStartRatio: r.uint8, // Starting y-Ratio value 28660 yEndRatio: r.uint8 // Ending y-Ratio value 28661}); 28662 28663var vTable = new r.Struct({ 28664 yPelHeight: r.uint16, // yPelHeight to which values apply 28665 yMax: r.int16, // Maximum value (in pels) for this yPelHeight 28666 yMin: r.int16 // Minimum value (in pels) for this yPelHeight 28667}); 28668 28669var VdmxGroup = new r.Struct({ 28670 recs: r.uint16, // Number of height records in this group 28671 startsz: r.uint8, // Starting yPelHeight 28672 endsz: r.uint8, // Ending yPelHeight 28673 entries: new r.Array(vTable, 'recs') // The VDMX records 28674}); 28675 28676var VDMX = new r.Struct({ 28677 version: r.uint16, // Version number (0 or 1) 28678 numRecs: r.uint16, // Number of VDMX groups present 28679 numRatios: r.uint16, // Number of aspect ratio groupings 28680 ratioRanges: new r.Array(Ratio, 'numRatios'), // Ratio ranges 28681 offsets: new r.Array(r.uint16, 'numRatios'), // Offset to the VDMX group for this ratio range 28682 groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings 28683}); 28684 28685// Vertical Header Table
28686var vhea = new r.Struct({ 28687 version: r.uint16, // Version number of the Vertical Header Table 28688 ascent: r.int16, // The vertical typographic ascender for this font 28689 descent: r.int16, // The vertical typographic descender for this font 28690 lineGap: r.int16, // The vertical typographic line gap for this font 28691 advanceHeightMax: r.int16, // The maximum advance height measurement found in the font 28692 minTopSideBearing: r.int16, // The minimum top side bearing measurement found in the font 28693 minBottomSideBearing: r.int16, // The minimum bottom side bearing measurement found in the font 28694 yMaxExtent: r.int16, 28695 caretSlopeRise: r.int16, // Caret slope (rise/run) 28696 caretSlopeRun: r.int16, 28697 caretOffset: r.int16, // Set value equal to 0 for nonslanted fonts 28698 reserved: new r.Reserved(r.int16, 4), 28699 metricDataFormat: r.int16, // Set to 0 28700 numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table 28701}); 28702 28703var VmtxEntry = new r.Struct({ 28704 advance: r.uint16, // The advance height of the glyph 28705 bearing: r.int16 // The top sidebearing of the glyph 28706}); 28707 28708// Vertical Metrics Table 28709var vmtx = new r.Struct({ 28710 metrics: new r.LazyArray(VmtxEntry, function (t) { 28711 return t.parent.vhea.numberOfMetrics; 28712 }), 28713 bearings: new r.LazyArray(r.int16, function (t) { 28714 return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics; 28715 }) 28716}); 28717 28718var shortFrac = new r.Fixed(16, 'BE', 14); 28719 28720var Correspondence = new r.Struct({ 28721 fromCoord: shortFrac, 28722 toCoord: shortFrac 28723}); 28724 28725var Segment = new r.Struct({ 28726 pairCount: r.uint16, 28727 correspondence: new r.Array(Correspondence, 'pairCount') 28728}); 28729 28730var avar = new r.Struct({ 28731 version: r.fixed32, 28732 axisCount: r.uint32, 28733 segment: new r.Array(Segment, 'axisCount') 28734}); 28735 28736var UnboundedArrayAccessor = function () { 28737 function UnboundedArrayAccessor(type, stream, parent) { 28738 _classCallCheck(this, UnboundedArrayAccessor); 28739 28740 this.type = type; 28741 this.stream = stream; 28742 this.parent = parent; 28743 this.base = this.stream.pos; 28744 this._items = []; 28745 } 28746 28747 UnboundedArrayAccessor.prototype.getItem = function getItem(index) { 28748 if (this._items[index] == null) { 28749 var pos = this.stream.pos; 28750 this.stream.pos = this.base + this.type.size(null, this.parent) * index; 28751 this._items[index] = this.type.decode(this.stream, this.parent); 28752 this.stream.pos = pos; 28753 } 28754 28755 return this._items[index]; 28756 }; 28757 28758 UnboundedArrayAccessor.prototype.inspect = function inspect() { 28759 return '[UnboundedArray ' + this.type.constructor.name + ']'; 28760 }; 28761 28762 return UnboundedArrayAccessor; 28763}(); 28764 28765var UnboundedArray = function (_r$Array) { 28766 _inherits(UnboundedArray, _r$Array); 28767 28768 function UnboundedArray(type) { 28769 _classCallCheck(this, UnboundedArray); 28770 28771 return _possibleConstructorReturn(this, _r$Array.call(this, type, 0)); 28772 } 28773 28774 UnboundedArray.prototype.decode = function decode(stream, parent) { 28775 return new UnboundedArrayAccessor(this.type, stream, parent); 28776 }; 28777 28778 return UnboundedArray; 28779}(r.Array); 28780 28781var LookupTable = function LookupTable() { 28782 var ValueType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : r.uint16; 28783 28784 // Helper class that makes internal structures invisible to pointers 28785 var Shadow = function () { 28786 function Shadow(type) { 28787 _classCallCheck(this, Shadow); 28788 28789 this.type = type; 28790 } 28791 28792 Shadow.prototype.decode = function decode(stream, ctx) { 28793 ctx = ctx.parent.parent; 28794 return this.type.decode(stream, ctx); 28795 }; 28796 28797 Shadow.prototype.size = function size(val, ctx) { 28798 ctx = ctx.parent.parent; 28799 return this.type.size(val, ctx); 28800 }; 28801 28802 Shadow.prototype.encode = function encode(stream, val, ctx) { 28803 ctx = ctx.parent.parent; 28804 return this.type.encode(stream, val, ctx); 28805 }; 28806 28807 return Shadow; 28808 }(); 28809 28810 ValueType = new Shadow(ValueType); 28811 28812 var BinarySearchHeader = new r.Struct({ 28813 unitSize: r.uint16, 28814 nUnits: r.uint16, 28815 searchRange: r.uint16, 28816 entrySelector: r.uint16, 28817 rangeShift: r.uint16 28818 }); 28819 28820 var LookupSegmentSingle = new r.Struct({ 28821 lastGlyph: r.uint16, 28822 firstGlyph: r.uint16, 28823 value: ValueType 28824 }); 28825 28826 var LookupSegmentArray = new r.Struct({ 28827 lastGlyph: r.uint16, 28828 firstGlyph: r.uint16, 28829 values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) { 28830 return t.lastGlyph - t.firstGlyph + 1; 28831 }), { type: 'parent' }) 28832 }); 28833 28834 var LookupSingle = new r.Struct({ 28835 glyph: r.uint16, 28836 value: ValueType 28837 }); 28838 28839 return new r.VersionedStruct(r.uint16, { 28840 0: { 28841 values: new UnboundedArray(ValueType) // length == number of glyphs maybe? 28842 }, 28843 2: { 28844 binarySearchHeader: BinarySearchHeader, 28845 segments: new r.Array(LookupSegmentSingle, function (t) { 28846 return t.binarySearchHeader.nUnits; 28847 }) 28848 }, 28849 4: { 28850 binarySearchHeader: BinarySearchHeader, 28851 segments: new r.Array(LookupSegmentArray, function (t) { 28852 return t.binarySearchHeader.nUnits; 28853 }) 28854 }, 28855 6: { 28856 binarySearchHeader: BinarySearchHeader, 28857 segments: new r.Array(LookupSingle, function (t) { 28858 return t.binarySearchHeader.nUnits; 28859 }) 28860 }, 28861 8: { 28862 firstGlyph: r.uint16, 28863 count: r.uint16, 28864 values: new r.Array(ValueType, 'count') 28865 } 28866 }); 28867}; 28868 28869function StateTable() { 28870 var entryData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 28871 var lookupType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : r.uint16; 28872 28873 var entry = _Object$assign({ 28874 newState: r.uint16, 28875 flags: r.uint16 28876 }, entryData); 28877 28878 var Entry = new r.Struct(entry); 28879 var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) { 28880 return t.nClasses; 28881 })); 28882 28883 var StateHeader = new r.Struct({ 28884 nClasses: r.uint32, 28885 classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)), 28886 stateArray: new r.Pointer(r.uint32, StateArray), 28887 entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry)) 28888 }); 28889 28890 return StateHeader; 28891} 28892 28893// This is the old version of the StateTable structure 28894function StateTable1() { 28895 var entryData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 28896 var lookupType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : r.uint16; 28897 28898 var ClassLookupTable = new r.Struct({ 28899 version: function version() { 28900 return 8; 28901 }, 28902 // simulate LookupTable 28903 firstGlyph: r.uint16, 28904 values: new r.Array(r.uint8, r.uint16) 28905 }); 28906 28907 var entry = _Object$assign({ 28908 newStateOffset: r.uint16, 28909 // convert offset to stateArray index 28910 newState: function newState(t) { 28911 return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses; 28912 }, 28913 flags: r.uint16 28914 }, entryData); 28915 28916 var Entry = new r.Struct(entry); 28917 var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) { 28918 return t.nClasses; 28919 })); 28920 28921 var StateHeader1 = new r.Struct({ 28922 nClasses: r.uint16, 28923 classTable: new r.Pointer(r.uint16, ClassLookupTable), 28924 stateArray: new r.Pointer(r.uint16, StateArray), 28925 entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry)) 28926 }); 28927 28928 return StateHeader1; 28929} 28930 28931var BslnSubtable = new r.VersionedStruct('format', { 28932 0: { // Distance-based, no mapping 28933 deltas: new r.Array(r.int16, 32) 28934 }, 28935 28936 1: { // Distance-based, with mapping 28937 deltas: new r.Array(r.int16, 32), 28938 mappingData: new LookupTable(r.uint16) 28939 }, 28940 28941 2: { // Control point-based, no mapping 28942 standardGlyph: r.uint16, 28943 controlPoints: new r.Array(r.uint16, 32) 28944 }, 28945 28946 3: { // Control point-based, with mapping 28947 standardGlyph: r.uint16, 28948 controlPoints: new r.Array(r.uint16, 32), 28949 mappingData: new LookupTable(r.uint16) 28950 } 28951}); 28952 28953var bsln = new r.Struct({ 28954 version: r.fixed32, 28955 format: r.uint16, 28956 defaultBaseline: r.uint16, 28957 subtable: BslnSubtable 28958}); 28959 28960var Setting = new r.Struct({ 28961 setting: r.uint16, 28962 nameIndex: r.int16, 28963 name: function name(t) { 28964 return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex]; 28965 } 28966}); 28967 28968var FeatureName = new r.Struct({ 28969 feature: r.uint16,
28970 nSettings: r.uint16, 28971 settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), { type: 'parent' }), 28972 featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']), 28973 defaultSetting: r.uint8, 28974 nameIndex: r.int16, 28975 name: function name(t) { 28976 return t.parent.parent.name.records.fontFeatures[t.nameIndex]; 28977 } 28978}); 28979 28980var feat = new r.Struct({ 28981 version: r.fixed32, 28982 featureNameCount: r.uint16, 28983 reserved1: new r.Reserved(r.uint16), 28984 reserved2: new r.Reserved(r.uint32), 28985 featureNames: new r.Array(FeatureName, 'featureNameCount') 28986}); 28987 28988var Axis$1 = new r.Struct({ 28989 axisTag: new r.String(4), 28990 minValue: r.fixed32, 28991 defaultValue: r.fixed32, 28992 maxValue: r.fixed32, 28993 flags: r.uint16, 28994 nameID: r.uint16, 28995 name: function name(t) { 28996 return t.parent.parent.name.records.fontFeatures[t.nameID]; 28997 } 28998}); 28999 29000var Instance = new r.Struct({ 29001 nameID: r.uint16, 29002 name: function name(t) { 29003 return t.parent.parent.name.records.fontFeatures[t.nameID]; 29004 }, 29005 flags: r.uint16, 29006 coord: new r.Array(r.fixed32, function (t) { 29007 return t.parent.axisCount; 29008 }), 29009 postscriptNameID: new r.Optional(r.uint16, function (t) { 29010 return t.parent.instanceSize - t._currentOffset > 0; 29011 }) 29012}); 29013 29014var fvar = new r.Struct({ 29015 version: r.fixed32, 29016 offsetToData: r.uint16, 29017 countSizePairs: r.uint16, 29018 axisCount: r.uint16, 29019 axisSize: r.uint16, 29020 instanceCount: r.uint16, 29021 instanceSize: r.uint16, 29022 axis: new r.Array(Axis$1, 'axisCount'), 29023 instance: new r.Array(Instance, 'instanceCount') 29024}); 29025 29026var shortFrac$1 = new r.Fixed(16, 'BE', 14); 29027 29028var Offset = function () { 29029 function Offset() { 29030 _classCallCheck(this, Offset); 29031 } 29032 29033 Offset.decode = function decode(stream, parent) { 29034 // In short format, offsets are multiplied by 2. 29035 // This doesn't seem to be documented by Apple, but it 29036 // is implemented this way in Freetype. 29037 return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2; 29038 }; 29039 29040 return Offset; 29041}(); 29042 29043var gvar = new r.Struct({ 29044 version: r.uint16, 29045 reserved: new r.Reserved(r.uint16), 29046 axisCount: r.uint16, 29047 globalCoordCount: r.uint16, 29048 globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')), 29049 glyphCount: r.uint16, 29050 flags: r.uint16, 29051 offsetToData: r.uint32, 29052 offsets: new r.Array(new r.Pointer(Offset, 'void', { relativeTo: 'offsetToData', allowNull: false }), function (t) { 29053 return t.glyphCount + 1; 29054 }) 29055}); 29056 29057var ClassTable$1 = new r.Struct({ 29058 length: r.uint16, 29059 coverage: r.uint16, 29060 subFeatureFlags: r.uint32, 29061 stateTable: new StateTable1() 29062}); 29063 29064var WidthDeltaRecord = new r.Struct({ 29065 justClass: r.uint32, 29066 beforeGrowLimit: r.fixed32, 29067 beforeShrinkLimit: r.fixed32, 29068 afterGrowLimit: r.fixed32, 29069 afterShrinkLimit: r.fixed32, 29070 growFlags: r.uint16, 29071 shrinkFlags: r.uint16 29072}); 29073 29074var WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32); 29075 29076var ActionData = new r.VersionedStruct('actionType', { 29077 0: { // Decomposition action 29078 lowerLimit: r.fixed32, 29079 upperLimit: r.fixed32, 29080 order: r.uint16, 29081 glyphs: new r.Array(r.uint16, r.uint16) 29082 }, 29083 29084 1: { // Unconditional add glyph action 29085 addGlyph: r.uint16 29086 }, 29087 29088 2: { // Conditional add glyph action 29089 substThreshold: r.fixed32, 29090 addGlyph: r.uint16, 29091 substGlyph: r.uint16 29092 }, 29093 29094 3: {}, // Stretch glyph action (no data, not supported by CoreText) 29095 29096 4: { // Ductile glyph action (not supported by CoreText) 29097 variationAxis: r.uint32, 29098 minimumLimit: r.fixed32, 29099 noStretchValue: r.fixed32, 29100 maximumLimit: r.fixed32 29101 }, 29102 29103 5: { // Repeated add glyph action 29104 flags: r.uint16, 29105 glyph: r.uint16 29106 } 29107}); 29108 29109var Action = new r.Struct({ 29110 actionClass: r.uint16, 29111 actionType: r.uint16, 29112 actionLength: r.uint32, 29113 actionData: ActionData, 29114 padding: new r.Reserved(r.uint8, function (t) { 29115 return t.actionLength - t._currentOffset; 29116 }) 29117}); 29118 29119var PostcompensationAction = new r.Array(Action, r.uint32); 29120var PostCompensationTable = new r.Struct({ 29121 lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction)) 29122}); 29123 29124var JustificationTable = new r.Struct({ 29125 classTable: new r.Pointer(r.uint16, ClassTable$1, { type: 'parent' }), 29126 wdcOffset: r.uint16, 29127 postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, { type: 'parent' }), 29128 widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, { type: 'parent', relativeTo: 'wdcOffset' })) 29129}); 29130 29131var just = new r.Struct({ 29132 version: r.uint32, 29133 format: r.uint16, 29134 horizontal: new r.Pointer(r.uint16, JustificationTable), 29135 vertical: new r.Pointer(r.uint16, JustificationTable) 29136}); 29137 29138var LigatureData = { 29139 action: r.uint16 29140}; 29141 29142var ContextualData = { 29143 markIndex: r.uint16, 29144 currentIndex: r.uint16 29145}; 29146 29147var InsertionData = { 29148 currentInsertIndex: r.uint16, 29149 markedInsertIndex: r.uint16 29150}; 29151 29152var SubstitutionTable = new r.Struct({ 29153 items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable())) 29154}); 29155 29156var SubtableData = new r.VersionedStruct('type', { 29157 0: { // Indic Rearrangement Subtable 29158 stateTable: new StateTable() 29159 }, 29160 29161 1: { // Contextual Glyph Substitution Subtable 29162 stateTable: new StateTable(ContextualData), 29163 substitutionTable: new r.Pointer(r.uint32, SubstitutionTable) 29164 }, 29165 29166 2: { // Ligature subtable 29167 stateTable: new StateTable(LigatureData), 29168 ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)), 29169 components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)), 29170 ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)) 29171 }, 29172 29173 4: { // Non-contextual Glyph Substitution Subtable 29174 lookupTable: new LookupTable() 29175 }, 29176 29177 5: { // Glyph Insertion Subtable 29178 stateTable: new StateTable(InsertionData), 29179 insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)) 29180 } 29181}); 29182 29183var Subtable = new r.Struct({ 29184 length: r.uint32, 29185 coverage: r.uint24, 29186 type: r.uint8, 29187 subFeatureFlags: r.uint32, 29188 table: SubtableData, 29189 padding: new r.Reserved(r.uint8, function (t) { 29190 return t.length - t._currentOffset; 29191 }) 29192}); 29193 29194var FeatureEntry = new r.Struct({ 29195 featureType: r.uint16, 29196 featureSetting: r.uint16, 29197 enableFlags: r.uint32, 29198 disableFlags: r.uint32 29199}); 29200 29201var MorxChain = new r.Struct({ 29202 defaultFlags: r.uint32, 29203 chainLength: r.uint32, 29204 nFeatureEntries: r.uint32, 29205 nSubtables: r.uint32, 29206 features: new r.Array(FeatureEntry, 'nFeatureEntries'), 29207 subtables: new r.Array(Subtable, 'nSubtables') 29208}); 29209 29210var morx = new r.Struct({ 29211 version: r.uint16, 29212 unused: new r.Reserved(r.uint16), 29213 nChains: r.uint32, 29214 chains: new r.Array(MorxChain, 'nChains') 29215}); 29216 29217var OpticalBounds = new r.Struct({ 29218 left: r.int16, 29219 top: r.int16, 29220 right: r.int16, 29221 bottom: r.int16 29222}); 29223 29224var opbd = new r.Struct({ 29225 version: r.fixed32, 29226 format: r.uint16, 29227 lookupTable: new LookupTable(OpticalBounds) 29228}
29228); 29229 29230var tables = {}; 29231// Required Tables 29232tables.cmap = cmap; 29233tables.head = head; 29234tables.hhea = hhea; 29235tables.hmtx = hmtx; 29236tables.maxp = maxp; 29237tables.name = NameTable; 29238tables['OS/2'] = OS2; 29239tables.post = post; 29240 29241// TrueType Outlines 29242tables.fpgm = fpgm; 29243tables.loca = loca; 29244tables.prep = prep; 29245tables['cvt '] = cvt; 29246tables.glyf = glyf; 29247 29248// PostScript Outlines 29249tables['CFF '] = CFFFont; 29250tables['CFF2'] = CFFFont; 29251tables.VORG = VORG; 29252 29253// Bitmap Glyphs 29254tables.EBLC = EBLC; 29255tables.CBLC = tables.EBLC; 29256tables.sbix = sbix; 29257tables.COLR = COLR; 29258tables.CPAL = CPAL; 29259 29260// Advanced OpenType Tables 29261tables.BASE = BASE; 29262tables.GDEF = GDEF; 29263tables.GPOS = GPOS; 29264tables.GSUB = GSUB; 29265tables.JSTF = JSTF; 29266 29267// OpenType variations tables 29268tables.HVAR = HVAR; 29269 29270// Other OpenType Tables 29271tables.DSIG = DSIG; 29272tables.gasp = gasp; 29273tables.hdmx = hdmx; 29274tables.kern = kern; 29275tables.LTSH = LTSH; 29276tables.PCLT = PCLT; 29277tables.VDMX = VDMX; 29278tables.vhea = vhea; 29279tables.vmtx = vmtx; 29280 29281// Apple Advanced Typography Tables 29282tables.avar = avar; 29283tables.bsln = bsln; 29284tables.feat = feat; 29285tables.fvar = fvar; 29286tables.gvar = gvar; 29287tables.just = just; 29288tables.morx = morx; 29289tables.opbd = opbd; 29290 29291var TableEntry = new r.Struct({ 29292 tag: new r.String(4), 29293 checkSum: r.uint32, 29294 offset: new r.Pointer(r.uint32, 'void', { type: 'global' }), 29295 length: r.uint32 29296}); 29297 29298var Directory = new r.Struct({ 29299 tag: new r.String(4), 29300 numTables: r.uint16, 29301 searchRange: r.uint16, 29302 entrySelector: r.uint16, 29303 rangeShift: r.uint16, 29304 tables: new r.Array(TableEntry, 'numTables') 29305}); 29306 29307Directory.process = function () { 29308 var tables = {}; 29309 for (var _iterator = this.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 29310 var _ref; 29311 29312 if (_isArray) { 29313 if (_i >= _iterator.length) break; 29314 _ref = _iterator[_i++]; 29315 } else { 29316 _i = _iterator.next(); 29317 if (_i.done) break; 29318 _ref = _i.value; 29319 } 29320 29321 var table = _ref; 29322 29323 tables[table.tag] = table; 29324 } 29325 29326 this.tables = tables; 29327}; 29328 29329Directory.preEncode = function (stream) { 29330 var tables$$ = []; 29331 for (var tag in this.tables) { 29332 var table = this.tables[tag]; 29333 if (table) { 29334 tables$$.push({ 29335 tag: tag, 29336 checkSum: 0, 29337 offset: new r.VoidPointer(tables[tag], table), 29338 length: tables[tag].size(table) 29339 }); 29340 } 29341 } 29342 29343 this.tag = 'true'; 29344 this.numTables = tables$$.length; 29345 this.tables = tables$$; 29346 29347 this.searchRange = Math.floor(Math.log(this.numTables) / Math.LN2) * 16; 29348 this.entrySelector = Math.floor(this.searchRange / Math.LN2); 29349 this.rangeShift = this.numTables * 16 - this.searchRange; 29350}; 29351 29352function binarySearch(arr, cmp) { 29353 var min = 0; 29354 var max = arr.length - 1; 29355 while (min <= max) { 29356 var mid = min + max >> 1; 29357 var res = cmp(arr[mid]); 29358 29359 if (res < 0) { 29360 max = mid - 1; 29361 } else if (res > 0) { 29362 min = mid + 1; 29363 } else { 29364 return mid; 29365 } 29366 } 29367 29368 return -1; 29369} 29370 29371function range(index, end) { 29372 var range = []; 29373 while (index < end) { 29374 range.push(index++); 29375 } 29376 return range; 29377} 29378 29379var _class$1; 29380function _applyDecoratedDescriptor$1(target, property, decorators, descriptor, context) { 29381 var desc = {}; 29382 Object['ke' + 'ys'](descriptor).forEach(function (key) { 29383 desc[key] = descriptor[key]; 29384 }); 29385 desc.enumerable = !!desc.enumerable; 29386 desc.configurable = !!desc.configurable; 29387 29388 if ('value' in desc || desc.initializer) { 29389 desc.writable = true; 29390 } 29391 29392 desc = decorators.slice().reverse().reduce(function (desc, decorator) { 29393 return decorator(target, property, desc) || desc; 29394 }, desc); 29395 29396 if (context && desc.initializer !== void 0) { 29397 desc.value = desc.initializer ? desc.initializer.call(context) : void 0; 29398 desc.initializer = undefined; 29399 } 29400 29401 if (desc.initializer === void 0) { 29402 Object['define' + 'Property'](target, property, desc); 29403 desc = null; 29404 } 29405 29406 return desc; 29407} 29408 29409// iconv-lite is an optional dependency. 29410try { 29411 var iconv = __webpack_require__(52); 29412} catch (err) {} 29413 29414var CmapProcessor = (_class$1 = function () { 29415 function CmapProcessor(cmapTable) { 29416 _classCallCheck(this, CmapProcessor); 29417 29418 // Attempt to find a Unicode cmap first 29419 this.encoding = null; 29420 this.cmap = this.findSubtable(cmapTable, [ 29421 // 32-bit subtables 29422 [3, 10], [0, 6], [0, 4], 29423 29424 // 16-bit subtables 29425 [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); 29426 29427 // If not unicode cmap was found, and iconv-lite is installed, 29428 // take the first table with a supported encoding. 29429 if (!this.cmap && iconv) { 29430 for (var _iterator = cmapTable.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 29431 var _ref; 29432 29433 if (_isArray) { 29434 if (_i >= _iterator.length) break; 29435 _ref = _iterator[_i++]; 29436 } else { 29437 _i = _iterator.next(); 29438 if (_i.done) break; 29439 _ref = _i.value; 29440 } 29441 29442 var cmap = _ref; 29443 29444 var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1); 29445 if (iconv.encodingExists(encoding)) { 29446 this.cmap = cmap.table; 29447 this.encoding = encoding; 29448 } 29449 } 29450 } 29451 29452 if (!this.cmap) {
29453 throw new Error("Could not find a supported cmap table"); 29454 } 29455 29456 this.uvs = this.findSubtable(cmapTable, [[0, 5]]); 29457 if (this.uvs && this.uvs.version !== 14) { 29458 this.uvs = null; 29459 } 29460 } 29461 29462 CmapProcessor.prototype.findSubtable = function findSubtable(cmapTable, pairs) { 29463 for (var _iterator2 = pairs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 29464 var _ref2; 29465 29466 if (_isArray2) { 29467 if (_i2 >= _iterator2.length) break; 29468 _ref2 = _iterator2[_i2++]; 29469 } else { 29470 _i2 = _iterator2.next(); 29471 if (_i2.done) break; 29472 _ref2 = _i2.value; 29473 } 29474 29475 var _ref3 = _ref2, 29476 platformID = _ref3[0], 29477 encodingID = _ref3[1]; 29478 29479 for (var _iterator3 = cmapTable.tables, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 29480 var _ref4; 29481 29482 if (_isArray3) { 29483 if (_i3 >= _iterator3.length) break; 29484 _ref4 = _iterator3[_i3++]; 29485 } else { 29486 _i3 = _iterator3.next(); 29487 if (_i3.done) break; 29488 _ref4 = _i3.value; 29489 } 29490 29491 var cmap = _ref4; 29492 29493 if (cmap.platformID === platformID && cmap.encodingID === encodingID) { 29494 return cmap.table; 29495 } 29496 } 29497 } 29498 29499 return null; 29500 }; 29501 29502 CmapProcessor.prototype.lookup = function lookup(codepoint, variationSelector) { 29503 // If there is no Unicode cmap in this font, we need to re-encode 29504 // the codepoint in the encoding that the cmap supports. 29505 if (this.encoding) { 29506 var buf = iconv.encode(_String$fromCodePoint(codepoint), this.encoding); 29507 codepoint = 0; 29508 for (var i = 0; i < buf.length; i++) { 29509 codepoint = codepoint << 8 | buf[i]; 29510 } 29511 29512 // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided. 29513 } else if (variationSelector) { 29514 var gid = this.getVariationSelector(codepoint, variationSelector); 29515 if (gid) { 29516 return gid; 29517 } 29518 } 29519 29520 var cmap = this.cmap; 29521 switch (cmap.version) { 29522 case 0: 29523 return cmap.codeMap.get(codepoint) || 0; 29524 29525 case 4: 29526 { 29527 var min = 0; 29528 var max = cmap.segCount - 1; 29529 while (min <= max) { 29530 var mid = min + max >> 1; 29531 29532 if (codepoint < cmap.startCode.get(mid)) { 29533 max = mid - 1; 29534 } else if (codepoint > cmap.endCode.get(mid)) { 29535 min = mid + 1; 29536 } else { 29537 var rangeOffset = cmap.idRangeOffset.get(mid); 29538 var _gid = void 0; 29539 29540 if (rangeOffset === 0) { 29541 _gid = codepoint + cmap.idDelta.get(mid); 29542 } else { 29543 var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid); 29544 _gid = cmap.glyphIndexArray.get(index) || 0; 29545 if (_gid !== 0) { 29546 _gid += cmap.idDelta.get(mid); 29547 } 29548 } 29549 29550 return _gid & 0xffff; 29551 } 29552 } 29553 29554 return 0; 29555 } 29556 29557 case 8: 29558 throw new Error('TODO: cmap format 8'); 29559 29560 case 6: 29561 case 10: 29562 return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0; 29563 29564 case 12: 29565 case 13: 29566 { 29567 var _min = 0; 29568 var _max = cmap.nGroups - 1; 29569 while (_min <= _max) { 29570 var _mid = _min + _max >> 1; 29571 var group = cmap.groups.get(_mid); 29572 29573 if (codepoint < group.startCharCode) { 29574 _max = _mid - 1; 29575 } else if (codepoint > group.endCharCode) { 29576 _min = _mid + 1; 29577 } else { 29578 if (cmap.version === 12) { 29579 return group.glyphID + (codepoint - group.startCharCode); 29580 } else { 29581 return group.glyphID; 29582 } 29583 } 29584 } 29585 29586 return 0; 29587 } 29588 29589 case 14: 29590 throw new Error('TODO: cmap format 14'); 29591 29592 default: 29593 throw new Error('Unknown cmap format ' + cmap.version); 29594 } 29595 }; 29596 29597 CmapProcessor.prototype.getVariationSelector = function getVariationSelector(codepoint, variationSelector) { 29598 if (!this.uvs) { 29599 return 0; 29600 } 29601 29602 var selectors = this.uvs.varSelectors.toArray(); 29603 var i = binarySearch(selectors, function (x) { 29604 return variationSelector - x.varSelector; 29605 }); 29606 var sel = selectors[i]; 29607 29608 if (i !== -1 && sel.defaultUVS) { 29609 i = binarySearch(sel.defaultUVS, function (x) { 29610 return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0; 29611 }); 29612 } 29613 29614 if (i !== -1 && sel.nonDefaultUVS) { 29615 i = binarySearch(sel.nonDefaultUVS, function (x) { 29616 return codepoint - x.unicodeValue; 29617 }); 29618 if (i !== -1) { 29619 return sel.nonDefaultUVS[i].glyphID; 29620 } 29621 } 29622 29623 return 0; 29624 }; 29625 29626 CmapProcessor.prototype.getCharacterSet = function getCharacterSet() { 29627 var cmap = this.cmap; 29628 switch (cmap.version) { 29629 case 0: 29630 return range(0, cmap.codeMap.length); 29631 29632 case 4: 29633 { 29634 var res = []; 29635 var endCodes = cmap.endCode.toArray(); 29636 for (var i = 0; i < endCodes.length; i++) { 29637 var tail = endCodes[i] + 1; 29638 var start = cmap.startCode.get(i); 29639 res.push.apply(res, range(start, tail)); 29640 } 29641 29642 return res; 29643 } 29644 29645 case 8: 29646 throw new Error('TODO: cmap format 8'); 29647 29648 case 6: 29649 case 10: 29650 return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length); 29651 29652 case 12: 29653 case 13: 29654 { 29655 var _res = []; 29656 for (var _iterator4 = cmap.groups.toArray(), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 29657 var _ref5; 29658 29659 if (_isArray4) { 29660 if (_i4 >= _iterator4.length) break; 29661 _ref5 = _iterator4[_i4++]; 29662 } else { 29663 _i4 = _iterator4.next(); 29664 if (_i4.done) break; 29665 _ref5 = _i4.value; 29666 } 29667 29668 var group = _ref5; 29669 29670 _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1)); 29671 } 29672 29673 return _res; 29674 } 29675 29676 case 14: 29677 throw new Error('TODO: cmap format 14'); 29678 29679 default: 29680 throw new Error('Unknown cmap format ' + cmap.version); 29681 } 29682 }; 29683 29684 CmapProcessor.prototype.codePointsForGlyph = function codePointsForGlyph(gid) { 29685 var cmap = this.cmap; 29686 switch (cmap.version) { 29687 case 0: 29688 { 29689 var res = []; 29690 for (var i = 0; i < 256; i++) { 29691 if (cmap.codeMap.get(i) === gid) { 29692 res.push(i); 29693 } 29694 } 29695 29696 return res; 29697 } 29698 29699 case 4: 29700 { 29701 var _res2 = []; 29702 for (var _i5 = 0; _i5 < cmap.segCount; _i5++) { 29703 var end = cmap.endCode.get(_i5); 29704 var start = cmap.startCode.get(_i5); 29705 var rangeOffset = cmap.idRangeOffset.get(_i5); 29706 var delta = cmap.idDelta.get(_i5); 29707 29708 for (var c = start; c <= end; c++) { 29709 var g = 0; 29710 if (rangeOffset === 0) { 29711 g = c + delta; 29712 } else { 29713 var index = rangeOffset / 2 + (c - start) - (cma
29713p.segCount - _i5); 29714 g = cmap.glyphIndexArray.get(index) || 0; 29715 if (g !== 0) { 29716 g += delta; 29717 } 29718 } 29719 29720 if (g === gid) { 29721 _res2.push(c); 29722 } 29723 } 29724 } 29725 29726 return _res2; 29727 } 29728 29729 case 12: 29730 { 29731 var _res3 = []; 29732 for (var _iterator5 = cmap.groups.toArray(), _isArray5 = Array.isArray(_iterator5), _i6 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) { 29733 var _ref6; 29734 29735 if (_isArray5) { 29736 if (_i6 >= _iterator5.length) break; 29737 _ref6 = _iterator5[_i6++]; 29738 } else { 29739 _i6 = _iterator5.next(); 29740 if (_i6.done) break; 29741 _ref6 = _i6.value; 29742 } 29743 29744 var group = _ref6; 29745 29746 if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) { 29747 _res3.push(group.startCharCode + (gid - group.glyphID)); 29748 } 29749 } 29750 29751 return _res3; 29752 } 29753 29754 case 13: 29755 { 29756 var _res4 = []; 29757 for (var _iterator6 = cmap.groups.toArray(), _isArray6 = Array.isArray(_iterator6), _i7 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) { 29758 var _ref7; 29759 29760 if (_isArray6) { 29761 if (_i7 >= _iterator6.length) break; 29762 _ref7 = _iterator6[_i7++]; 29763 } else { 29764 _i7 = _iterator6.next(); 29765 if (_i7.done) break; 29766 _ref7 = _i7.value; 29767 } 29768 29769 var _group = _ref7; 29770 29771 if (gid === _group.glyphID) { 29772 _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1)); 29773 } 29774 } 29775 29776 return _res4; 29777 } 29778 29779 default: 29780 throw new Error('Unknown cmap format ' + cmap.version); 29781 } 29782 }; 29783 29784 return CmapProcessor; 29785}(), (_applyDecoratedDescriptor$1(_class$1.prototype, 'getCharacterSet', [cache], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'getCharacterSet'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'codePointsForGlyph', [cache], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'codePointsForGlyph'), _class$1.prototype)), _class$1); 29786 29787var KernProcessor = function () { 29788 function KernProcessor(font) { 29789 _classCallCheck(this, KernProcessor); 29790 29791 this.kern = font.kern; 29792 } 29793 29794 KernProcessor.prototype.process = function process(glyphs, positions) { 29795 for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) { 29796 var left = glyphs[glyphIndex].id; 29797 var right = glyphs[glyphIndex + 1].id; 29798 positions[glyphIndex].xAdvance += this.getKerning(left, right); 29799 } 29800 }; 29801 29802 KernProcessor.prototype.getKerning = function getKerning(left, right) { 29803 var res = 0; 29804 29805 for (var _iterator = this.kern.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 29806 var _ref; 29807 29808 if (_isArray) { 29809 if (_i >= _iterator.length) break; 29810 _ref = _iterator[_i++]; 29811 } else { 29812 _i = _iterator.next(); 29813 if (_i.done) break; 29814 _ref = _i.value; 29815 } 29816 29817 var table = _ref; 29818 29819 if (table.coverage.crossStream) { 29820 continue; 29821 } 29822 29823 switch (table.version) { 29824 case 0: 29825 if (!table.coverage.horizontal) { 29826 continue; 29827 } 29828 29829 break; 29830 case 1: 29831 if (table.coverage.vertical || table.coverage.variation) { 29832 continue; 29833 } 29834 29835 break; 29836 default: 29837 throw new Error('Unsupported kerning table version ' + table.version); 29838 } 29839 29840 var val = 0; 29841 var s = table.subtable; 29842 switch (table.format) { 29843 case 0: 29844 var pairIdx = binarySearch(s.pairs, function (pair) { 29845 return left - pair.left || right - pair.right; 29846 }); 29847 29848 if (pairIdx >= 0) { 29849 val = s.pairs[pairIdx].value; 29850 } 29851 29852 break; 29853 29854 case 2: 29855 var leftOffset = 0, 29856 rightOffset = 0; 29857 if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) { 29858 leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph]; 29859 } else { 29860 leftOffset = s.array.off; 29861 } 29862 29863 if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) { 29864 rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph]; 29865 } 29866 29867 var index = (leftOffset + rightOffset - s.array.off) / 2; 29868 val = s.array.values.get(index); 29869 break; 29870 29871 case 3: 29872 if (left >= s.glyphCount || right >= s.glyphCount) { 29873 return 0; 29874 } 29875 29876 val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]]; 29877 break; 29878 29879 default: 29880 throw new Error('Unsupported kerning sub-table format ' + table.format); 29881 } 29882 29883 // Microsoft supports the override flag, which resets the result 29884 // Otherwise, the sum of the results from all subtables is returned 29885 if (table.coverage.override) { 29886 res = val; 29887 } else { 29888 res += val; 29889 } 29890 } 29891 29892 return res; 29893 }; 29894 29895 return KernProcessor; 29896}(); 29897 29898/** 29899 * This class is used when GPOS does not define 'mark' or 'mkmk' features 29900 * for positioning marks relative to base glyphs. It uses the unicode 29901 * combining class property to position marks. 29902 * 29903 * Based on code from Harfbuzz, thanks! 29904 * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc 29905 */ 29906 29907var UnicodeLayoutEngine = function () { 29908 function UnicodeLayoutEngine(font) { 29909 _classCallCheck(this, UnicodeLayoutEngine); 29910 29911 this.font = font; 29912 } 29913 29914 UnicodeLayoutEngine.prototype.positionGlyphs = function positionGlyphs(glyphs, positions) { 29915 // find each base + mark cluster, and position the marks relative to the base 29916 var clusterStart = 0; 29917 var clusterEnd = 0; 29918 for (var index = 0; index < glyphs.length; index++) { 29919 var glyph = glyphs[index]; 29920 if (glyph.isMark) { 29921 // TODO: handle ligatures 29922 clusterEnd = index; 29923 } else { 29924 if (clusterStart !== clusterEnd) { 29925 this.positionCluster(glyphs, positions, clusterStart, clusterEnd); 29926 } 29927 29928 clusterStart = clusterEnd = index; 29929 } 29930 } 29931 29932 if (clusterStart !== clusterEnd) { 29933 this.positionCluster(glyphs, positions, clusterStart, clusterEnd); 29934 } 29935 29936 return positions; 29937 }; 29938 29939 UnicodeLayoutEngine.prototype.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) { 29940 var base = glyphs[clusterStart]; 29941 var baseBox = base.cbox.copy(); 29942 29943 // adjust bounding box for ligature glyphs 29944 if (base.codePoints.length > 1) { 29945 // LTR. TODO: RTL support. 29946 baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length; 29947 } 29948 29949 var xOffset = -positions[clusterStart].xAdvance; 29950 var yOffset = 0; 29951 var yGap = this.font.unitsPerEm / 16; 29952 29953 // position each of the mark glyphs relative to the base glyph 29954 for (var index = clusterStart + 1; index <= clusterEnd; index++) { 29955 var mark = glyphs[index]; 29956 var markBox = mark.cbox; 29957 var position = positions[index]; 29958 29959 var combiningClass = this.getCombiningClass(mark.codePoints[0]); 29960 29961 if (combiningClass !== 'Not_Reordered') { 29962 position.xOffset = position.yOffset = 0; 29963 29964 // x positioning 29965 switch (combiningClass) { 29966 case 'Double_Above': 29967 case 'Double_Below': 29968 // LTR. TODO: RTL support. 29969 position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX; 29970 break; 29971 29972 case 'Attached_Below_Left': 29973 case 'Below_Left': 29974 case 'Above_Left': 29975 // left align 29976 position.xOffset += baseBox.minX - markBox.minX; 29977 break; 29978 29979 case 'Attached_Above_Right': 29980 case 'Below_Right': 29981 case 'Above_Right': 29982 // right align 29983 position.xOffset += baseBox.maxX - markBox.width - markBox.minX; 29984 break; 29985 29986 default: 29987 // Attached_Below, Attached_Above, Below, Above, other 29988 // center align 29989 position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX; 29990 } 29991 29992 // y positioning 29993 switch (combiningClass) { 29994 case 'Double_Below': 29995 case 'Below_Left': 29996 case 'Below': 29997 case 'Below_Right': 29998 case 'Attached_Below_Left': 29999 case 'Attached_Below': 30000 // add a small gap between the glyphs if they are not attached 30001 if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') { 30002 baseBox.minY += yGap; 30003 } 30004 30005 position.yOffset = -baseBox.minY - markBox.maxY; 30006 baseBox.minY += markBox.height; 30007 break; 30008 30009 case 'Double_Above': 30010 case 'Above_Left': 30011 case 'Above': 30012 case 'Above_Right': 30013 case 'Attached_Above': 30014 case 'Attached_Above_Right': 30015 // add a small gap between the glyphs if they are not attached 30016 if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') { 30017 baseBox.maxY += yGap; 30018 } 30019 30020 position.yOffset = baseBox.maxY - markBox.minY; 30021 baseBox.maxY += markBox.height; 30022 break; 30023 } 30024 30025 position.xAdvance = position.yAdvance = 0; 30026 position.xOffset += xOffset; 30027 position.yOffset += yOffset; 30028 } else { 30029 xOffset -= position.xAdvance; 30030 yOffset -= position.yAdvance; 30031 } 30032 } 30033 30034 return; 30035 }; 30036 30037 UnicodeLayoutEngine.prototype.getCombiningClass = function getCombiningClass(codePoint) { 30038 var combiningClass = unicode.getCombiningClass(codePoint); 30039
30040 // Thai / Lao need some per-character work 30041 if ((codePoint & ~0xff) === 0x0e00) { 30042 if (combiningClass === 'Not_Reordered') { 30043 switch (codePoint) { 30044 case 0x0e31: 30045 case 0x0e34: 30046 case 0x0e35: 30047 case 0x0e36: 30048 case 0x0e37: 30049 case 0x0e47: 30050 case 0x0e4c: 30051 case 0x0e3d: 30052 case 0x0e4e: 30053 return 'Above_Right'; 30054 30055 case 0x0eb1: 30056 case 0x0eb4: 30057 case 0x0eb5: 30058 case 0x0eb6: 30059 case 0x0eb7: 30060 case 0x0ebb: 30061 case 0x0ecc: 30062 case 0x0ecd: 30063 return 'Above'; 30064 30065 case 0x0ebc: 30066 return 'Below'; 30067 } 30068 } else if (codePoint === 0x0e3a) { 30069 // virama 30070 return 'Below_Right'; 30071 } 30072 } 30073 30074 switch (combiningClass) { 30075 // Hebrew 30076 30077 case 'CCC10': // sheva 30078 case 'CCC11': // hataf segol 30079 case 'CCC12': // hataf patah 30080 case 'CCC13': // hataf qamats 30081 case 'CCC14': // hiriq 30082 case 'CCC15': // tsere 30083 case 'CCC16': // segol 30084 case 'CCC17': // patah 30085 case 'CCC18': // qamats 30086 case 'CCC20': // qubuts 30087 case 'CCC22': 30088 // meteg 30089 return 'Below'; 30090 30091 case 'CCC23': 30092 // rafe 30093 return 'Attached_Above'; 30094 30095 case 'CCC24': 30096 // shin dot 30097 return 'Above_Right'; 30098 30099 case 'CCC25': // sin dot 30100 case 'CCC19': 30101 // holam 30102 return 'Above_Left'; 30103 30104 case 'CCC26': 30105 // point varika 30106 return 'Above'; 30107 30108 case 'CCC21': 30109 // dagesh 30110 break; 30111 30112 // Arabic and Syriac 30113 30114 case 'CCC27': // fathatan 30115 case 'CCC28': // dammatan 30116 case 'CCC30': // fatha 30117 case 'CCC31': // damma 30118 case 'CCC33': // shadda 30119 case 'CCC34': // sukun 30120 case 'CCC35': // superscript alef 30121 case 'CCC36': 30122 // superscript alaph 30123 return 'Above'; 30124 30125 case 'CCC29': // kasratan 30126 case 'CCC32': 30127 // kasra 30128 return 'Below'; 30129 30130 // Thai 30131 30132 case 'CCC103': 30133 // sara u / sara uu 30134 return 'Below_Right'; 30135 30136 case 'CCC107': 30137 // mai 30138 return 'Above_Right'; 30139 30140 // Lao 30141 30142 case 'CCC118': 30143 // sign u / sign uu 30144 return 'Below'; 30145 30146 case 'CCC122': 30147 // mai 30148 return 'Above'; 30149 30150 // Tibetan 30151 30152 case 'CCC129': // sign aa 30153 case 'CCC132': 30154 // sign u 30155 return 'Below'; 30156 30157 case 'CCC130': 30158 // sign i 30159 return 'Above'; 30160 } 30161 30162 return combiningClass; 30163 }; 30164 30165 return UnicodeLayoutEngine; 30166}(); 30167 30168/** 30169 * Represents a glyph bounding box 30170 */ 30171var BBox = function () { 30172 function BBox() { 30173 var minX = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity; 30174 var minY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity; 30175 var maxX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Infinity; 30176 var maxY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -Infinity; 30177 30178 _classCallCheck(this, BBox); 30179 30180 /** 30181 * The minimum X position in the bounding box 30182 * @type {number} 30183 */ 30184 this.minX = minX; 30185 30186 /** 30187 * The minimum Y position in the bounding box 30188 * @type {number} 30189 */ 30190 this.minY = minY; 30191 30192 /** 30193 * The maxmimum X position in the bounding box 30194 * @type {number} 30195 */ 30196 this.maxX = maxX; 30197 30198 /** 30199 * The maxmimum Y position in the bounding box 30200 * @type {number} 30201 */ 30202 this.maxY = maxY; 30203 } 30204 30205 /** 30206 * The width of the bounding box 30207 * @type {number} 30208 */ 30209 30210 30211 BBox.prototype.addPoint = function addPoint(x, y) { 30212 if (Math.abs(x) !== Infinity) { 30213 if (x < this.minX) { 30214 this.minX = x; 30215 } 30216 30217 if (x > this.maxX) { 30218 this.maxX = x; 30219 } 30220 } 30221 30222 if (Math.abs(y) !== Infinity) { 30223 if (y < this.minY) { 30224 this.minY = y; 30225 } 30226 30227 if (y > this.maxY) { 30228 this.maxY = y; 30229 } 30230 } 30231 }; 30232 30233 BBox.prototype.copy = function copy() { 30234 return new BBox(this.minX, this.minY, this.maxX, this.maxY); 30235 }; 30236 30237 _createClass(BBox, [{ 30238 key: "width", 30239 get: function get() { 30240 return this.maxX - this.minX; 30241 } 30242 30243 /** 30244 * The height of the bounding box 30245 * @type {number} 30246 */ 30247 30248 }, { 30249 key: "height", 30250 get: function get() { 30251 return this.maxY - this.minY; 30252 } 30253 }]); 30254 30255 return BBox; 30256}(); 30257 30258// This maps the Unicode Script property to an OpenType script tag 30259// Data from http://www.microsoft.com/typography/otspec/scripttags.htm 30260// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt. 30261var UNICODE_SCRIPTS = { 30262 Caucasian_Albanian: 'aghb', 30263 Arabic: 'arab', 30264 Imperial_Aramaic: 'armi', 30265 Armenian: 'armn', 30266 Avestan: 'avst', 30267 Balinese: 'bali', 30268 Bamum: 'bamu', 30269 Bassa_Vah: 'bass', 30270 Batak: 'batk', 30271 Bengali: ['bng2', 'beng'], 30272 Bopomofo: 'bopo', 30273 Brahmi: 'brah', 30274 Braille: 'brai', 30275 Buginese: 'bugi', 30276 Buhid: 'buhd', 30277 Chakma: 'cakm', 30278 Canadian_Aboriginal: 'cans', 30279 Carian: 'cari', 30280 Cham: 'cham', 30281 Cherokee: 'cher', 30282 Coptic: 'copt', 30283 Cypriot: 'cprt', 30284 Cyrillic: 'cyrl', 30285 Devanagari: ['dev2', 'deva'], 30286 Deseret: 'dsrt', 30287 Duployan: 'dupl', 30288 Egyptian_Hieroglyphs: 'egyp', 30289 Elbasan: 'elba', 30290 Ethiopic: 'ethi', 30291 Georgian: 'geor', 30292 Glagolitic: 'glag', 30293 Gothic: 'goth', 30294 Grantha: 'gran', 30295 Greek: 'grek', 30296 Gujarati: ['gjr2', 'gujr'], 30297 Gurmukhi: ['gur2', 'guru'], 30298 Hangul: 'hang', 30299 Han: 'hani', 30300 Hanunoo: 'hano', 30301 Hebrew: 'hebr', 30302 Hiragana: 'hira', 30303 Pahawh_Hmong: 'hmng', 30304 Katakana_Or_Hiragana: 'hrkt', 30305 Old_Italic: 'ital', 30306 Javanese: 'java', 30307 Kayah_Li: 'kali', 30308 Katakana: 'kana', 30309 Kharoshthi: 'khar', 30310 Khmer: 'khmr', 30311 Khojki: 'khoj', 30312 Kannada: ['knd2', 'knda'], 30313 Kaithi: 'kthi', 30314 Tai_Tham: 'lana', 30315 Lao: 'lao ', 30316 Latin: 'latn', 30317 Lepcha: 'lepc', 30318 Limbu: 'limb', 30319 Linear_A: 'lina', 30320 Linear_B: 'linb', 30321 Lisu: 'lisu', 30322 Lycian: 'lyci', 30323 Lydian: 'lydi', 30324 Mahajani: 'mahj', 30325 Mandaic: 'mand', 30326 Manichaean: 'mani', 30327 Mende_Kikakui: 'mend', 30328 Meroitic_Cursive: 'merc', 30329 Meroitic_Hieroglyphs: 'mero', 30330 Malayalam: ['mlm2', 'mlym'], 30331 Modi: 'modi', 30332 Mongolian: 'mong', 30333 Mro: 'mroo', 30334 Meetei_Mayek: 'mtei', 30335 Myanmar: ['mym2', 'mymr'], 30336 Old_North_Arabian: 'narb', 30337 Nabataean: 'nbat', 30338 Nko: 'nko ', 30339 Ogham: 'ogam', 30340 Ol_Chiki: 'olck', 30341 Old_Turkic: 'orkh', 30342 Oriya: ['ory2', 'orya'], 30343 Osmanya: 'osma', 30344 Palmyrene: 'palm', 30345 Pau_Cin_Hau: 'pauc', 30346 Old_Permic: 'perm', 30347 Phags_Pa: 'phag', 30348 Inscriptional_Pahlavi: 'phli', 30349 Psalter_Pahlavi: 'phlp', 30350 Phoenician: 'phnx', 30351 Miao: 'plrd', 30352 Inscriptional_Parthian: 'prti', 30353 Rejang: 'rjng', 30354 Runic: 'runr', 30355 Samaritan: 'samr', 30356 Old_South_Arabian: 'sarb', 30357 Saurashtra: 'saur', 30358 Shavian: 'shaw', 30359 Sharada: 'shrd', 30360 Siddham: 'sidd', 30361 Khudawadi: 'sind', 30362 Sinhala: 'sinh', 30363 Sora_Sompeng: 'sora', 30364 Sundanese: 'sund', 30365 Syloti_Nagri: 'sylo', 30366 Syriac: 'syrc', 30367 Tagbanwa: 'tagb', 30368 Takri: 'takr', 30369 Tai_Le: 'tale', 30370 New_Tai_Lue: 'talu', 30371 Tamil: ['tml2', 'taml'], 30372 Tai_Viet: 'tavt', 30373 Telugu: ['tel2', 'telu'], 30374 Tifinagh: 'tfng', 30375 Tagalog: 'tglg', 30376 Thaana: 'thaa', 30377 Thai: 'thai', 30378 Tibetan: 'tibt', 30379 Tirhuta: 'tirh', 30380 Ugaritic: 'ugar', 30381 Vai: 'vai ', 30382 Warang_Citi: 'wara', 30383 Old_Persian: 'xpeo', 30384 Cuneiform: 'xsux', 30385 Yi: 'yi ', 30386 Inherited: 'zinh', 30387 Common: 'zyyy', 30388 Unknown: 'zzzz' 30389}; 30390 30391var OPENTYPE_SCRIPTS = {}; 30392for (var script in UNICODE_SCRIPTS) { 30393 var tag = UNICODE_SCRIPTS[script]; 30394 if (Array.isArray(tag)) { 30395 for (var _iterator = tag, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 30396 var _ref; 30397 30398 if (_isArray) { 30399 if (_i >= _iterator.length) break; 30400 _ref = _iterator[_i++]; 30401 } else { 30402 _i = _iterator.next(); 30403 if (_i.done) break; 30404 _ref = _i.value; 30405 } 30406 30407 var t = _ref;
30408 30409 OPENTYPE_SCRIPTS[t] = script; 30410 } 30411 } else { 30412 OPENTYPE_SCRIPTS[tag] = script; 30413 } 30414} 30415 30416function fromOpenType(tag) { 30417 return OPENTYPE_SCRIPTS[tag]; 30418} 30419 30420function forString(string) { 30421 var len = string.length; 30422 var idx = 0; 30423 while (idx < len) { 30424 var code = string.charCodeAt(idx++); 30425 30426 // Check if this is a high surrogate 30427 if (0xd800 <= code && code <= 0xdbff && idx < len) { 30428 var next = string.charCodeAt(idx); 30429 30430 // Check if this is a low surrogate 30431 if (0xdc00 <= next && next <= 0xdfff) { 30432 idx++; 30433 code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000; 30434 } 30435 } 30436 30437 var _script = unicode.getScript(code); 30438 if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') { 30439 return UNICODE_SCRIPTS[_script]; 30440 } 30441 } 30442 30443 return UNICODE_SCRIPTS.Unknown; 30444} 30445 30446function forCodePoints(codePoints) { 30447 for (var i = 0; i < codePoints.length; i++) { 30448 var codePoint = codePoints[i]; 30449 var _script2 = unicode.getScript(codePoint); 30450 if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') { 30451 return UNICODE_SCRIPTS[_script2]; 30452 } 30453 } 30454 30455 return UNICODE_SCRIPTS.Unknown; 30456} 30457 30458// The scripts in this map are written from right to left 30459var RTL = { 30460 arab: true, // Arabic 30461 hebr: true, // Hebrew 30462 syrc: true, // Syriac 30463 thaa: true, // Thaana 30464 cprt: true, // Cypriot Syllabary 30465 khar: true, // Kharosthi 30466 phnx: true, // Phoenician 30467 'nko ': true, // N'Ko 30468 lydi: true, // Lydian 30469 avst: true, // Avestan 30470 armi: true, // Imperial Aramaic 30471 phli: true, // Inscriptional Pahlavi 30472 prti: true, // Inscriptional Parthian 30473 sarb: true, // Old South Arabian 30474 orkh: true, // Old Turkic, Orkhon Runic 30475 samr: true, // Samaritan 30476 mand: true, // Mandaic, Mandaean 30477 merc: true, // Meroitic Cursive 30478 mero: true, // Meroitic Hieroglyphs 30479 30480 // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm) 30481 mani: true, // Manichaean 30482 mend: true, // Mende Kikakui 30483 nbat: true, // Nabataean 30484 narb: true, // Old North Arabian 30485 palm: true, // Palmyrene 30486 phlp: true // Psalter Pahlavi 30487}; 30488 30489function direction(script) { 30490 if (RTL[script]) { 30491 return 'rtl'; 30492 } 30493 30494 return 'ltr'; 30495} 30496 30497/** 30498 * Represents a run of Glyph and GlyphPosition objects. 30499 * Returned by the font layout method. 30500 */ 30501 30502var GlyphRun = function () { 30503 function GlyphRun(glyphs, features, script, language, direction$$) { 30504 _classCallCheck(this, GlyphRun); 30505 30506 /** 30507 * An array of Glyph objects in the run 30508 * @type {Glyph[]} 30509 */ 30510 this.glyphs = glyphs; 30511 30512 /** 30513 * An array of GlyphPosition objects for each glyph in the run 30514 * @type {GlyphPosition[]} 30515 */ 30516 this.positions = null; 30517 30518 /** 30519 * The script that was requested for shaping. This was either passed in or detected automatically. 30520 * @type {string} 30521 */ 30522 this.script = script; 30523 30524 /** 30525 * The language requested for shaping, as passed in. If `null`, the default language for the 30526 * script was used. 30527 * @type {string} 30528 */ 30529 this.language = language || null; 30530 30531 /** 30532 * The direction requested for shaping, as passed in (either ltr or rtl). 30533 * If `null`, the default direction of the script is used. 30534 * @type {string} 30535 */ 30536 this.direction = direction$$ || direction(script); 30537 30538 /** 30539 * The features requested during shaping. This is a combination of user 30540 * specified features and features chosen by the shaper. 30541 * @type {object} 30542 */ 30543 this.features = {}; 30544 30545 // Convert features to an object 30546 if (Array.isArray(features)) { 30547 for (var _iterator = features, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 30548 var _ref; 30549 30550 if (_isArray) { 30551 if (_i >= _iterator.length) break; 30552 _ref = _iterator[_i++]; 30553 } else { 30554 _i = _iterator.next(); 30555 if (_i.done) break; 30556 _ref = _i.value; 30557 } 30558 30559 var tag = _ref; 30560
30561 this.features[tag] = true; 30562 } 30563 } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') { 30564 this.features = features; 30565 } 30566 } 30567 30568 /** 30569 * The total advance width of the run. 30570 * @type {number} 30571 */ 30572 30573 30574 _createClass(GlyphRun, [{ 30575 key: 'advanceWidth', 30576 get: function get() { 30577 var width = 0; 30578 for (var _iterator2 = this.positions, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 30579 var _ref2; 30580 30581 if (_isArray2) { 30582 if (_i2 >= _iterator2.length) break; 30583 _ref2 = _iterator2[_i2++]; 30584 } else { 30585 _i2 = _iterator2.next(); 30586 if (_i2.done) break; 30587 _ref2 = _i2.value; 30588 } 30589 30590 var position = _ref2; 30591 30592 width += position.xAdvance; 30593 } 30594 30595 return width; 30596 } 30597 30598 /** 30599 * The total advance height of the run. 30600 * @type {number} 30601 */ 30602 30603 }, { 30604 key: 'advanceHeight', 30605 get: function get() { 30606 var height = 0; 30607 for (var _iterator3 = this.positions, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 30608 var _ref3; 30609 30610 if (_isArray3) { 30611 if (_i3 >= _iterator3.length) break; 30612 _ref3 = _iterator3[_i3++]; 30613 } else { 30614 _i3 = _iterator3.next(); 30615 if (_i3.done) break; 30616 _ref3 = _i3.value; 30617 } 30618 30619 var position = _ref3; 30620 30621 height += position.yAdvance; 30622 } 30623 30624 return height; 30625 } 30626 30627 /** 30628 * The bounding box containing all glyphs in the run. 30629 * @type {BBox} 30630 */ 30631 30632 }, { 30633 key: 'bbox', 30634 get: function get() { 30635 var bbox = new BBox(); 30636 30637 var x = 0; 30638 var y = 0; 30639 for (var index = 0; index < this.glyphs.length; index++) { 30640 var glyph = this.glyphs[index]; 30641 var p = this.positions[index]; 30642 var b = glyph.bbox; 30643 30644 bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset); 30645 bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset); 30646 30647 x += p.xAdvance; 30648 y += p.yAdvance; 30649 } 30650 30651 return bbox; 30652 } 30653 }]); 30654 30655 return GlyphRun; 30656}(); 30657 30658/** 30659 * Represents positioning information for a glyph in a GlyphRun. 30660 */ 30661var GlyphPosition = function GlyphPosition() { 30662 var xAdvance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 30663 var yAdvance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 30664 var xOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 30665 var yOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; 30666 30667 _classCallCheck(this, GlyphPosition); 30668 30669 /** 30670 * The amount to move the virtual pen in the X direction after rendering this glyph. 30671 * @type {number} 30672 */ 30673 this.xAdvance = xAdvance; 30674 30675 /** 30676 * The amount to move the virtual pen in the Y direction after rendering this glyph. 30677 * @type {number} 30678 */ 30679 this.yAdvance = yAdvance; 30680 30681 /** 30682 * The offset from the pen position in the X direction at which to render this glyph. 30683 * @type {number} 30684 */ 30685 this.xOffset = xOffset; 30686 30687 /** 30688 * The offset from the pen position in the Y direction at which to render this glyph. 30689 * @type {number} 30690 */ 30691 this.yOffset = yOffset; 30692}; 30693 30694// see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html 30695// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac 30696var features = { 30697 allTypographicFeatures: { 30698 code: 0, 30699 exclusive: false, 30700 allTypeFeatures: 0 30701 }, 30702 ligatures: { 30703 code: 1, 30704 exclusive: false, 30705 requiredLigatures: 0, 30706 commonLigatures: 2, 30707 rareLigatures: 4, 30708 // logos: 6 30709 rebusPictures: 8, 30710 diphthongLigatures: 10, 30711 squaredLigatures: 12, 30712 abbrevSquaredLigatures: 14, 30713 symbolLigatures: 16, 30714 contextualLigatures: 18, 30715 historicalLigatures: 20 30716 }, 30717 cursiveConnection: { 30718 code: 2, 30719 exclusive: true, 30720 unconnected: 0, 30721 partiallyConnected: 1, 30722 cursive: 2 30723 }, 30724 letterCase: { 30725 code: 3, 30726 exclusive: true 30727 }, 30728 // upperAndLowerCase: 0 # deprecated 30729 // allCaps: 1 # deprecated 30730 // allLowerCase: 2 # deprecated 30731 // smallCaps: 3 # deprecated 30732 // initialCaps: 4 # deprecated 30733 // initialCapsAndSmallCaps: 5 # deprecated 30734 verticalSubstitution: { 30735 code: 4, 30736 exclusive: false, 30737 substituteVerticalForms: 0 30738 }, 30739 linguisticRearrangement: { 30740 code: 5, 30741 exclusive: false, 30742 linguisticRearrangement: 0 30743 }, 30744 numberSpacing: { 30745 code: 6, 30746 exclusive: true, 30747 monospacedNumbers: 0, 30748 proportionalNumbers: 1, 30749 thirdWidthNumbers: 2, 30750 quarterWidthNumbers: 3 30751 }, 30752 smartSwash: { 30753 code: 8, 30754 exclusive: false, 30755 wordInitialSwashes: 0, 30756 wordFinalSwashes: 2, 30757 // lineInitialSwashes: 4 30758 // lineFinalSwashes: 6 30759 nonFinalSwashes: 8 30760 }, 30761 diacritics: { 30762 code: 9, 30763 exclusive: true, 30764 showDiacritics: 0, 30765 hideDiacritics: 1, 30766 decomposeDiacritics: 2 30767 }, 30768 verticalPosition: { 30769 code: 10, 30770 exclusive: true, 30771 normalPosition: 0, 30772 superiors: 1, 30773 inferiors: 2, 30774 ordinals: 3, 30775 scientificInferiors: 4 30776 }, 30777 fractions: { 30778 code: 11, 30779 exclusive: true, 30780 noFractions: 0, 30781 verticalFractions: 1, 30782 diagonalFractions: 2 30783 }, 30784 overlappingCharacters: { 30785 code: 13, 30786 exclusive: false, 30787 preventOverlap: 0 30788 }, 30789 typographicExtras: { 30790 code: 14, 30791 exclusive: false, 30792 // hyphensToEmDash: 0 30793 // hyphenToEnDash: 2 30794 slashedZero: 4 30795 }, 30796 // formInterrobang: 6 30797 // smartQuotes: 8
30798 // periodsToEllipsis: 10 30799 mathematicalExtras: { 30800 code: 15, 30801 exclusive: false, 30802 // hyphenToMinus: 0 30803 // asteristoMultiply: 2 30804 // slashToDivide: 4 30805 // inequalityLigatures: 6 30806 // exponents: 8 30807 mathematicalGreek: 10 30808 }, 30809 ornamentSets: { 30810 code: 16, 30811 exclusive: true, 30812 noOrnaments: 0, 30813 dingbats: 1, 30814 piCharacters: 2, 30815 fleurons: 3, 30816 decorativeBorders: 4, 30817 internationalSymbols: 5, 30818 mathSymbols: 6 30819 }, 30820 characterAlternatives: { 30821 code: 17, 30822 exclusive: true, 30823 noAlternates: 0 30824 }, 30825 // user defined options 30826 designComplexity: { 30827 code: 18, 30828 exclusive: true, 30829 designLevel1: 0, 30830 designLevel2: 1, 30831 designLevel3: 2, 30832 designLevel4: 3, 30833 designLevel5: 4 30834 }, 30835 styleOptions: { 30836 code: 19, 30837 exclusive: true, 30838 noStyleOptions: 0, 30839 displayText: 1, 30840 engravedText: 2, 30841 illuminatedCaps: 3, 30842 titlingCaps: 4, 30843 tallCaps: 5 30844 }, 30845 characterShape: { 30846 code: 20, 30847 exclusive: true, 30848 traditionalCharacters: 0, 30849 simplifiedCharacters: 1, 30850 JIS1978Characters: 2, 30851 JIS1983Characters: 3, 30852 JIS1990Characters: 4, 30853 traditionalAltOne: 5, 30854 traditionalAltTwo: 6, 30855 traditionalAltThree: 7, 30856 traditionalAltFour: 8, 30857 traditionalAltFive: 9, 30858 expertCharacters: 10, 30859 JIS2004Characters: 11, 30860 hojoCharacters: 12, 30861 NLCCharacters: 13, 30862 traditionalNamesCharacters: 14 30863 }, 30864 numberCase: { 30865 code: 21, 30866 exclusive: true, 30867 lowerCaseNumbers: 0, 30868 upperCaseNumbers: 1 30869 }, 30870 textSpacing: { 30871 code: 22, 30872 exclusive: true, 30873 proportionalText: 0, 30874 monospacedText: 1, 30875 halfWidthText: 2, 30876 thirdWidthText: 3, 30877 quarterWidthText: 4, 30878 altProportionalText: 5, 30879 altHalfWidthText: 6 30880 }, 30881 transliteration: { 30882 code: 23, 30883 exclusive: true, 30884 noTransliteration: 0 30885 }, 30886 // hanjaToHangul: 1 30887 // hiraganaToKatakana: 2 30888 // katakanaToHiragana: 3 30889 // kanaToRomanization: 4 30890 // romanizationToHiragana: 5 30891 // romanizationToKatakana: 6 30892 // hanjaToHangulAltOne: 7 30893 // hanjaToHangulAltTwo: 8 30894 // hanjaToHangulAltThree: 9 30895 annotation: { 30896 code: 24, 30897 exclusive: true, 30898 noAnnotation: 0, 30899 boxAnnotation: 1, 30900 roundedBoxAnnotation: 2, 30901 circleAnnotation: 3, 30902 invertedCircleAnnotation: 4, 30903 parenthesisAnnotation: 5, 30904 periodAnnotation: 6, 30905 romanNumeralAnnotation: 7, 30906 diamondAnnotation: 8, 30907 invertedBoxAnnotation: 9, 30908 invertedRoundedBoxAnnotation: 10 30909 }, 30910 kanaSpacing: { 30911 code: 25, 30912 exclusive: true, 30913 fullWidthKana: 0, 30914 proportionalKana: 1 30915 }, 30916 ideographicSpacing: { 30917 code: 26, 30918 exclusive: true, 30919 fullWidthIdeographs: 0, 30920 proportionalIdeographs: 1, 30921 halfWidthIdeographs: 2 30922 }, 30923 unicodeDecomposition: { 30924 code: 27, 30925 exclusive: false, 30926 canonicalComposition: 0, 30927 compatibilityComposition: 2, 30928 transcodingComposition: 4 30929 }, 30930 rubyKana: { 30931 code: 28, 30932 exclusive: false, 30933 // noRubyKana: 0 # deprecated - use rubyKanaOff instead 30934 // rubyKana: 1 # deprecated - use rubyKanaOn instead 30935 rubyKana: 2 30936 }, 30937 CJKSymbolAlternatives: { 30938 code: 29, 30939 exclusive: true, 30940 noCJKSymbolAlternatives: 0, 30941 CJKSymbolAltOne: 1, 30942 CJKSymbolAltTwo: 2, 30943 CJKSymbolAltThree: 3, 30944 CJKSymbolAltFour: 4, 30945 CJKSymbolAltFive: 5 30946 }, 30947 ideographicAlternatives: { 30948 code: 30, 30949 exclusive: true, 30950 noIdeographicAlternatives: 0, 30951 ideographicAltOne: 1, 30952 ideographicAltTwo: 2, 30953 ideographicAltThree: 3, 30954 ideographicAltFour: 4, 30955 ideographicAltFive: 5 30956 }, 30957 CJKVerticalRomanPlacement: { 30958 code: 31, 30959 exclusive: true, 30960 CJKVerticalRomanCentered: 0, 30961 CJKVerticalRomanHBaseline: 1 30962 }, 30963 italicCJKRoman: { 30964 code: 32, 30965 exclusive: false, 30966 // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead 30967 // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead 30968 CJKItalicRoman: 2 30969 }, 30970 caseSensitiveLayout: { 30971 code: 33, 30972 exclusive: false, 30973 caseSensitiveLayout: 0, 30974 caseSensitiveSpacing: 2 30975 }, 30976 alternateKana: { 30977 code: 34, 30978 exclusive: false, 30979 alternateHorizKana: 0, 30980 alternateVertKana: 2 30981 }, 30982 stylisticAlternatives: { 30983 code: 35, 30984 exclusive: false, 30985 noStylisticAlternates: 0, 30986 stylisticAltOne: 2, 30987 stylisticAltTwo: 4, 30988 stylisticAltThree: 6, 30989 stylisticAltFour: 8, 30990 stylisticAltFive: 10, 30991 stylisticAltSix: 12, 30992 stylisticAltSeven: 14, 30993 stylisticAltEight: 16, 30994 stylisticAltNine: 18, 30995 stylisticAltTen: 20, 30996 stylisticAltEleven: 22, 30997 stylisticAltTwelve: 24, 30998 stylisticAltThirteen: 26, 30999 stylisticAltFourteen: 28, 31000 stylisticAltFifteen: 30, 31001 stylisticAltSixteen: 32, 31002 stylisticAltSeventeen: 34, 31003 stylisticAltEighteen: 36, 31004 stylisticAltNineteen: 38, 31005 stylisticAltTwenty: 40 31006 }, 31007 contextualAlternates: { 31008 code: 36, 31009 exclusive: false, 31010 contextualAlternates: 0, 31011 swashAlternates: 2, 31012 contextualSwashAlternates: 4 31013 }, 31014 lowerCase: { 31015 code: 37, 31016 exclusive: true, 31017 defaultLowerCase: 0, 31018 lowerCaseSmallCaps: 1, 31019 lowerCasePetiteCaps: 2 31020 }, 31021 upperCase: { 31022 code: 38, 31023 exclusive: true, 31024 defaultUpperCase: 0, 31025 upperCaseSmallCaps: 1, 31026 upperCasePetiteCaps: 2 31027 }, 31028 languageTag: { // indices into ltag table 31029 code: 39, 31030 exclusive: true 31031 }, 31032 CJKRomanSpacing: { 31033 code: 103, 31034 exclusive: true, 31035 halfWidthCJKRoman: 0,
31036 proportionalCJKRoman: 1, 31037 defaultCJKRoman: 2, 31038 fullWidthCJKRoman: 3 31039 } 31040}; 31041 31042var feature = function feature(name, selector) { 31043 return [features[name].code, features[name][selector]]; 31044}; 31045 31046var OTMapping = { 31047 rlig: feature('ligatures', 'requiredLigatures'), 31048 clig: feature('ligatures', 'contextualLigatures'), 31049 dlig: feature('ligatures', 'rareLigatures'), 31050 hlig: feature('ligatures', 'historicalLigatures'), 31051 liga: feature('ligatures', 'commonLigatures'), 31052 hist: feature('ligatures', 'historicalLigatures'), // ?? 31053 31054 smcp: feature('lowerCase', 'lowerCaseSmallCaps'), 31055 pcap: feature('lowerCase', 'lowerCasePetiteCaps'), 31056 31057 frac: feature('fractions', 'diagonalFractions'), 31058 dnom: feature('fractions', 'diagonalFractions'), // ?? 31059 numr: feature('fractions', 'diagonalFractions'), // ?? 31060 afrc: feature('fractions', 'verticalFractions'), 31061 // aalt 31062 // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset? 31063 // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum? 31064 // unic, vatu, vhal, vjmo, vpal, vrt2 31065 // dist -> trak table? 31066 // kern, vkrn -> kern table 31067 // lfbd + opbd + rtbd -> opbd table? 31068 // mark, mkmk -> acnt table? 31069 // locl -> languageTag + ltag table 31070 31071 case: feature('caseSensitiveLayout', 'caseSensitiveLayout'), // also caseSensitiveSpacing 31072 ccmp: feature('unicodeDecomposition', 'canonicalComposition'), // compatibilityComposition? 31073 cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), // guess..., probably not given below 31074 valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'), 31075 swsh: feature('contextualAlternates', 'swashAlternates'), 31076 cswh: feature('contextualAlternates', 'contextualSwashAlternates'), 31077 curs: feature('cursiveConnection', 'cursive'), // ?? 31078 c2pc: feature('upperCase', 'upperCasePetiteCaps'), 31079 c2sc: feature('upperCase', 'upperCaseSmallCaps'), 31080 31081 init: feature('smartSwash', 'wordInitialSwashes'), // ?? 31082 fin2: feature('smartSwash', 'wordFinalSwashes'), // ?? 31083 medi: feature('smartSwash', 'nonFinalSwashes'), // ?? 31084 med2: feature('smartSwash', 'nonFinalSwashes'), // ?? 31085 fin3: feature('smartSwash', 'wordFinalSwashes'), // ?? 31086 fina: feature('smartSwash', 'wordFinalSwashes'), // ?? 31087 31088 pkna: feature('kanaSpacing', 'proportionalKana'), 31089 half: feature('textSpacing', 'halfWidthText'), // also HalfWidthCJKRoman, HalfWidthIdeographs? 31090 halt: feature('textSpacing', 'altHalfWidthText'), 31091 31092 hkna: feature('alternateKana', 'alternateHorizKana'), 31093 vkna: feature('alternateKana', 'alternateVertKana'), 31094 // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated 31095 31096 ital: feature('italicCJKRoman', 'CJKItalicRoman'), 31097 lnum: feature('numberCase', 'upperCaseNumbers'), 31098 onum: feature('numberCase', 'lowerCaseNumbers'), 31099 mgrk: feature('mathematicalExtras', 'mathematicalGreek'), 31100 31101 // nalt: not enough info. what type of annotation? 31102 // ornm: ditto, which ornament style? 31103 31104 calt: feature('contextualAlternates', 'contextualAlternates'), // or more? 31105 vrt2: feature('verticalSubstitution', 'substituteVerticalForms'), // oh... below? 31106 vert: feature('verticalSubstitution', 'substituteVerticalForms'), 31107 tnum: feature('numberSpacing', 'monospacedNumbers'), 31108 pnum: feature('numberSpacing', 'proportionalNumbers'), 31109 sups: feature('verticalPosition', 'superiors'), 31110 subs: feature('verticalPosition', 'inferiors'), 31111 ordn: feature('verticalPosition', 'ordinals'), 31112 pwid: feature('textSpacing', 'proportionalText'), 31113 hwid: feature('textSpacing', 'halfWidthText'), 31114 qwid: feature('textSpacing', 'quarterWidthText'), // also QuarterWidthNumbers? 31115 twid: feature('textSpacing', 'thirdWidthText'), // also ThirdWidthNumbers? 31116 fwid: feature('textSpacing', 'proportionalText'), //?? 31117 palt: feature('textSpacing', 'altProportionalText'), 31118 trad: feature('characterShape', 'traditionalCharacters'), 31119 smpl: feature('characterShape', 'simplifiedCharacters'), 31120 jp78: feature('characterShape', 'JIS1978Characters'), 31121 jp83: feature('characterShape', 'JIS1983Characters'), 31122 jp90: feature('characterShape', 'JIS1990Characters'), 31123 jp04: feature('characterShape', 'JIS2004Characters'), 31124 expt: feature('characterShape', 'expertCharacters'), 31125 hojo: feature('characterShape', 'hojoCharacters'), 31126 nlck: feature('characterShape', 'NLCCharacters'), 31127 tnam: feature('characterShape', 'traditionalNamesCharacters'), 31128 ruby: feature('rubyKana', 'rubyKana'), 31129 titl: feature('styleOptions', 'titlingCaps'), 31130 zero: feature('typographicExtras', 'slashedZero'), 31131 31132 ss01: feature('stylisticAlternatives', 'stylisticAltOne'), 31133 ss02: feature('stylisticAlternatives', 'stylisticAltTwo'), 31134 ss03: feature('stylisticAlternatives', 'stylisticAltThree'), 31135 ss04: feature('stylisticAlternatives', 'stylisticAltFour'), 31136 ss05: feature('stylisticAlternatives', 'stylisticAltFive'), 31137 ss06: feature('stylisticAlternatives', 'stylisticAltSix'), 31138 ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),
31139 ss08: feature('stylisticAlternatives', 'stylisticAltEight'), 31140 ss09: feature('stylisticAlternatives', 'stylisticAltNine'), 31141 ss10: feature('stylisticAlternatives', 'stylisticAltTen'), 31142 ss11: feature('stylisticAlternatives', 'stylisticAltEleven'), 31143 ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'), 31144 ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'), 31145 ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'), 31146 ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'), 31147 ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'), 31148 ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'), 31149 ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'), 31150 ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'), 31151 ss20: feature('stylisticAlternatives', 'stylisticAltTwenty') 31152}; 31153 31154// salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose 31155 31156// Add cv01-cv99 features 31157for (var i = 1; i <= 99; i++) { 31158 OTMapping['cv' + ('00' + i).slice(-2)] = [features.characterAlternatives.code, i]; 31159} 31160 31161// create inverse mapping 31162var AATMapping = {}; 31163for (var ot in OTMapping) { 31164 var aat = OTMapping[ot]; 31165 if (AATMapping[aat[0]] == null) { 31166 AATMapping[aat[0]] = {}; 31167 } 31168 31169 AATMapping[aat[0]][aat[1]] = ot; 31170} 31171 31172// Maps an array of OpenType features to AAT features 31173// in the form of {featureType:{featureSetting:true}} 31174function mapOTToAAT(features) { 31175 var res = {}; 31176 for (var k in features) { 31177 var r = void 0; 31178 if (r = OTMapping[k]) { 31179 if (res[r[0]] == null) { 31180 res[r[0]] = {}; 31181 } 31182 31183 res[r[0]][r[1]] = features[k]; 31184 } 31185 } 31186 31187 return res; 31188} 31189 31190// Maps strings in a [featureType, featureSetting] 31191// to their equivalent number codes 31192function mapFeatureStrings(f) { 31193 var type = f[0], 31194 setting = f[1]; 31195 31196 if (isNaN(type)) { 31197 var typeCode = features[type] && features[type].code; 31198 } else { 31199 var typeCode = type; 31200 } 31201 31202 if (isNaN(setting)) { 31203 var settingCode = features[type] && features[type][setting]; 31204 } else { 31205 var settingCode = setting; 31206 } 31207 31208 return [typeCode, settingCode]; 31209} 31210 31211// Maps AAT features to an array of OpenType features 31212// Supports both arrays in the form of [[featureType, featureSetting]] 31213// and objects in the form of {featureType:{featureSetting:true}} 31214// featureTypes and featureSettings can be either strings or number codes 31215function mapAATToOT(features) { 31216 var res = {}; 31217 if (Array.isArray(features)) { 31218 for (var k = 0; k < features.length; k++) { 31219 var r = void 0; 31220 var f = mapFeatureStrings(features[k]); 31221 if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) { 31222 res[r] = true; 31223 } 31224 } 31225 } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') { 31226 for (var type in features) { 31227 var _feature = features[type]; 31228 for (var setting in _feature) { 31229 var _r = void 0; 31230 var _f = mapFeatureStrings([type, setting]); 31231 if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) { 31232 res[_r] = true; 31233 } 31234 } 31235 } 31236 } 31237 31238 return _Object$keys(res); 31239} 31240 31241var _class$3; 31242function _applyDecoratedDescriptor$3(target, property, decorators, descriptor, context) { 31243 var desc = {}; 31244 Object['ke' + 'ys'](descriptor).forEach(function (key) { 31245 desc[key] = descriptor[key]; 31246 }); 31247 desc.enumerable = !!desc.enumerable; 31248 desc.configurable = !!desc.configurable; 31249 31250 if ('value' in desc || desc.initializer) { 31251 desc.writable = true; 31252 } 31253 31254 desc = decorators.slice().reverse().reduce(function (desc, decorator) { 31255 return decorator(target, property, desc) || desc; 31256 }, desc); 31257 31258 if (context && desc.initializer !== void 0) { 31259 desc.value = desc.initializer ? desc.initializer.call(context) : void 0; 31260 desc.initializer = undefined; 31261 } 31262 31263 if (desc.initializer === void 0) { 31264 Object['define' + 'Property'](target, property, desc); 31265 desc = null; 31266 } 31267 31268 return desc; 31269} 31270 31271var AATLookupTable = (_class$3 = function () { 31272 function AATLookupTable(table) { 31273 _classCallCheck(this, AATLookupTable); 31274 31275 this.table = table; 31276 } 31277 31278 AATLookupTable.prototype.lookup = function lookup(glyph) {
31279 switch (this.table.version) { 31280 case 0: 31281 // simple array format 31282 return this.table.values.getItem(glyph); 31283 31284 case 2: // segment format 31285 case 4: 31286 { 31287 var min = 0; 31288 var max = this.table.binarySearchHeader.nUnits - 1; 31289 31290 while (min <= max) { 31291 var mid = min + max >> 1; 31292 var seg = this.table.segments[mid]; 31293 31294 // special end of search value 31295 if (seg.firstGlyph === 0xffff) { 31296 return null; 31297 } 31298 31299 if (glyph < seg.firstGlyph) { 31300 max = mid - 1; 31301 } else if (glyph > seg.lastGlyph) { 31302 min = mid + 1; 31303 } else { 31304 if (this.table.version === 2) { 31305 return seg.value; 31306 } else { 31307 return seg.values[glyph - seg.firstGlyph]; 31308 } 31309 } 31310 } 31311 31312 return null; 31313 } 31314 31315 case 6: 31316 { 31317 // lookup single 31318 var _min = 0; 31319 var _max = this.table.binarySearchHeader.nUnits - 1; 31320 31321 while (_min <= _max) { 31322 var mid = _min + _max >> 1; 31323 var seg = this.table.segments[mid]; 31324 31325 // special end of search value 31326 if (seg.glyph === 0xffff) { 31327 return null; 31328 } 31329 31330 if (glyph < seg.glyph) { 31331 _max = mid - 1; 31332 } else if (glyph > seg.glyph) { 31333 _min = mid + 1; 31334 } else { 31335 return seg.value; 31336 } 31337 } 31338 31339 return null; 31340 } 31341 31342 case 8: 31343 // lookup trimmed 31344 return this.table.values[glyph - this.table.firstGlyph]; 31345 31346 default: 31347 throw new Error('Unknown lookup table format: ' + this.table.version); 31348 } 31349 }; 31350 31351 AATLookupTable.prototype.glyphsForValue = function glyphsForValue(classValue) { 31352 var res = []; 31353 31354 switch (this.table.version) { 31355 case 2: // segment format 31356 case 4: 31357 { 31358 for (var _iterator = this.table.segments, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 31359 var _ref; 31360 31361 if (_isArray) { 31362 if (_i >= _iterator.length) break; 31363 _ref = _iterator[_i++]; 31364 } else { 31365 _i = _iterator.next(); 31366 if (_i.done) break; 31367 _ref = _i.value; 31368 } 31369 31370 var segment = _ref; 31371 31372 if (this.table.version === 2 && segment.value === classValue) { 31373 res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1)); 31374 } else { 31375 for (var index = 0; index < segment.values.length; index++) { 31376 if (segment.values[index] === classValue) { 31377 res.push(segment.firstGlyph + index); 31378 } 31379 } 31380 } 31381 } 31382 31383 break; 31384 } 31385 31386 case 6: 31387 { 31388 // lookup single 31389 for (var _iterator2 = this.table.segments, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 31390 var _ref2; 31391 31392 if (_isArray2) { 31393 if (_i2 >= _iterator2.length) break; 31394 _ref2 = _iterator2[_i2++]; 31395 } else { 31396 _i2 = _iterator2.next(); 31397 if (_i2.done) break; 31398 _ref2 = _i2.value; 31399 } 31400 31401 var _segment = _ref2; 31402 31403 if (_segment.value === classValue) { 31404 res.push(_segment.glyph); 31405 } 31406 } 31407 31408 break; 31409 } 31410 31411 case 8: 31412 { 31413 // lookup trimmed 31414 for (var i = 0; i < this.table.values.length; i++) { 31415 if (this.table.values[i] === classValue) { 31416 res.push(this.table.firstGlyph + i); 31417 } 31418 } 31419 31420 break; 31421 } 31422 31423 default: 31424 throw new Error('Unknown lookup table format: ' + this.table.version); 31425 } 31426 31427 return res; 31428 }; 31429 31430 return AATLookupTable; 31431}(), (_applyDecoratedDescriptor$3(_class$3.prototype, 'glyphsForValue', [cache], _Object$getOwnPropertyDescriptor(_class$3.prototype, 'glyphsForValue'), _class$3.prototype)), _class$3); 31432 31433var START_OF_TEXT_STATE = 0; 31434var END_OF_TEXT_CLASS = 0; 31435var OUT_OF_BOUNDS_CLASS = 1; 31436var DELETED_GLYPH_CLASS = 2; 31437var DONT_ADVANCE = 0x4000; 31438 31439var AATStateMachine = function () { 31440 function AATStateMachine(stateTable) { 31441 _classCallCheck(this, AATStateMachine); 31442 31443 this.stateTable = stateTable; 31444 this.lookupTable = new AATLookupTable(stateTable.classTable); 31445 } 31446 31447 AATStateMachine.prototype.process = function process(glyphs, reverse, processEntry) { 31448 var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think? 31449 var index = reverse ? glyphs.length - 1 : 0; 31450 var dir = reverse ? -1 : 1; 31451 31452 while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) { 31453 var glyph = null; 31454 var classCode = OUT_OF_BOUNDS_CLASS; 31455 var shouldAdvance = true; 31456 31457 if (index === glyphs.length || index === -1) { 31458 classCode = END_OF_TEXT_CLASS; 31459 } else { 31460 glyph = glyphs[index]; 31461 if (glyph.id === 0xffff) { 31462 // deleted glyph
31463 classCode = DELETED_GLYPH_CLASS; 31464 } else { 31465 classCode = this.lookupTable.lookup(glyph.id); 31466 if (classCode == null) { 31467 classCode = OUT_OF_BOUNDS_CLASS; 31468 } 31469 } 31470 } 31471 31472 var row = this.stateTable.stateArray.getItem(currentState); 31473 var entryIndex = row[classCode]; 31474 var entry = this.stateTable.entryTable.getItem(entryIndex); 31475 31476 if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) { 31477 processEntry(glyph, entry, index); 31478 shouldAdvance = !(entry.flags & DONT_ADVANCE); 31479 } 31480 31481 currentState = entry.newState; 31482 if (shouldAdvance) { 31483 index += dir; 31484 } 31485 } 31486 31487 return glyphs; 31488 }; 31489 31490 /** 31491 * Performs a depth-first traversal of the glyph strings 31492 * represented by the state machine. 31493 */ 31494 31495 31496 AATStateMachine.prototype.traverse = function traverse(opts) { 31497 var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 31498 var visited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new _Set(); 31499 31500 if (visited.has(state)) { 31501 return; 31502 } 31503 31504 visited.add(state); 31505 31506 var _stateTable = this.stateTable, 31507 nClasses = _stateTable.nClasses, 31508 stateArray = _stateTable.stateArray, 31509 entryTable = _stateTable.entryTable; 31510 31511 var row = stateArray.getItem(state); 31512 31513 // Skip predefined classes 31514 for (var classCode = 4; classCode < nClasses; classCode++) { 31515 var entryIndex = row[classCode]; 31516 var entry = entryTable.getItem(entryIndex); 31517 31518 // Try all glyphs in the class 31519 for (var _iterator = this.lookupTable.glyphsForValue(classCode), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 31520 var _ref; 31521 31522 if (_isArray) { 31523 if (_i >= _iterator.length) break; 31524 _ref = _iterator[_i++]; 31525 } else { 31526 _i = _iterator.next(); 31527 if (_i.done) break; 31528 _ref = _i.value; 31529 } 31530 31531 var glyph = _ref; 31532 31533 if (opts.enter) { 31534 opts.enter(glyph, entry); 31535 } 31536 31537 if (entry.newState !== 0) { 31538 this.traverse(opts, entry.newState, visited); 31539 } 31540 31541 if (opts.exit) { 31542 opts.exit(glyph, entry); 31543 } 31544 } 31545 } 31546 }; 31547 31548 return AATStateMachine; 31549}(); 31550 31551var _class$2; 31552function _applyDecoratedDescriptor$2(target, property, decorators, descriptor, context) { 31553 var desc = {}; 31554 Object['ke' + 'ys'](descriptor).forEach(function (key) { 31555 desc[key] = descriptor[key]; 31556 }); 31557 desc.enumerable = !!desc.enumerable; 31558 desc.configurable = !!desc.configurable; 31559 31560 if ('value' in desc || desc.initializer) { 31561 desc.writable = true; 31562 } 31563 31564 desc = decorators.slice().reverse().reduce(function (desc, decorator) { 31565 return decorator(target, property, desc) || desc; 31566 }, desc); 31567 31568 if (context && desc.initializer !== void 0) { 31569 desc.value = desc.initializer ? desc.initializer.call(context) : void 0; 31570 desc.initializer = undefined; 31571 } 31572 31573 if (desc.initializer === void 0) { 31574 Object['define' + 'Property'](target, property, desc); 31575 desc = null; 31576 } 31577 31578 return desc; 31579} 31580 31581// indic replacement flags 31582var MARK_FIRST = 0x8000; 31583var MARK_LAST = 0x2000; 31584var VERB = 0x000F; 31585 31586// contextual substitution and glyph insertion flag 31587var SET_MARK = 0x8000; 31588 31589// ligature entry flags 31590var SET_COMPONENT = 0x8000; 31591var PERFORM_ACTION = 0x2000; 31592 31593// ligature action masks 31594var LAST_MASK = 0x80000000; 31595var STORE_MASK = 0x40000000; 31596var OFFSET_MASK = 0x3FFFFFFF; 31597 31598var REVERSE_DIRECTION = 0x400000; 31599var CURRENT_INSERT_BEFORE = 0x0800; 31600var MARKED_INSERT_BEFORE = 0x0400; 31601var CURRENT_INSERT_COUNT = 0x03E0; 31602var MARKED_INSERT_COUNT = 0x001F; 31603 31604var AATMorxProcessor = (_class$2 = function () { 31605 function AATMorxProcessor(font) { 31606 _classCallCheck(this, AATMorxProcessor); 31607 31608 this.processIndicRearragement = this.processIndicRearragement.bind(this); 31609 this.processContextualSubstitution = this.processContextualSubstitution.bind(this); 31610 this.processLigature = this.processLigature.bind(this); 31611 this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this); 31612 this.processGlyphInsertion = this.processGlyphInsertion.bind(this); 31613 this.font = font; 31614 this.morx = font.morx; 31615 this.inputCache = null; 31616 } 31617 31618 // Processes an array of glyphs and applies the specified features 31619 // Features should be in the form of {featureType:{featureSetting:true}} 31620 31621 31622 AATMorxProcessor.prototype.process = function process(glyphs) { 31623 var features = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 31624 31625 for (var _iterator = this.morx.chains, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 31626 var _ref; 31627 31628 if (_isArray) { 31629 if (_i >= _iterator.length) break; 31630 _ref = _iterator[_i++]; 31631 } else { 31632 _i = _iterator.next(); 31633 if (_i.done) break; 31634 _ref = _i.value; 31635 } 31636 31637 var chain = _ref; 31638 31639 var flags = chain.defaultFlags; 31640 31641 // enable/disable the requested features 31642 for (var _iterator2 = chain.features, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 31643 var _ref2; 31644 31645 if (_isArray2) { 31646 if (_i2 >= _iterator2.length) break; 31647 _ref2 = _iterator2[_i2++]; 31648 } else { 31649 _i2 = _iterator2.next(); 31650 if (_i2.done) break; 31651 _ref2 = _i2.value; 31652 } 31653 31654 var feature = _ref2; 31655 31656 var f = void 0; 31657 if ((f = features[feature.featureType]) && f[feature.featureSetting]) { 31658 flags &= feature.disableFlags; 31659 flags |= feature.enableFlags; 31660 } 31661 } 31662 31663 for (var _iterator3 = chain.subtables, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 31664 var _ref3; 31665 31666 if (_isArray3) { 31667 if (_i3 >= _iterator3.length) break; 31668 _ref3 = _iterator3[_i3++]; 31669 } else { 31670 _i3 = _iterator3.next(); 31671 if (_i3.done) break; 31672 _ref3 = _i3.value; 31673 } 31674 31675 var subtable = _ref3; 31676 31677 if (subtable.subFeatureFlags & flags) { 31678 this.processSubtable(subtable, glyphs); 31679 } 31680 } 31681 } 31682 31683 // remove deleted glyphs 31684 var index = glyphs.length - 1; 31685 while (index >= 0) { 31686 if (glyphs[index].id === 0xffff) { 31687 glyphs.splice(index, 1); 31688 } 31689 31690 index--; 31691 } 31692 31693 return glyphs; 31694 }; 31695 31696 AATMorxProcessor.prototype.processSubtable = function processSubtable(subtable, glyphs) { 31697 this.subtable = subtable; 31698 this.glyphs = glyphs; 31699 if (this.subtable.type === 4) { 31700 this.processNoncontextualSubstitutions(this.subtable, this.glyphs); 31701 return; 31702 } 31703 31704 this.ligatureStack = []; 31705 this.markedGlyph = null; 31706 this.firstGlyph = null; 31707 this.lastGlyph = null; 31708 this.markedIndex = null; 31709
31710 var stateMachine = this.getStateMachine(subtable); 31711 var process = this.getProcessor(); 31712 31713 var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION); 31714 return stateMachine.process(this.glyphs, reverse, process); 31715 }; 31716 31717 AATMorxProcessor.prototype.getStateMachine = function getStateMachine(subtable) { 31718 return new AATStateMachine(subtable.table.stateTable); 31719 }; 31720 31721 AATMorxProcessor.prototype.getProcessor = function getProcessor() { 31722 switch (this.subtable.type) { 31723 case 0: 31724 return this.processIndicRearragement; 31725 case 1: 31726 return this.processContextualSubstitution; 31727 case 2: 31728 return this.processLigature; 31729 case 4: 31730 return this.processNoncontextualSubstitutions; 31731 case 5: 31732 return this.processGlyphInsertion; 31733 default: 31734 throw new Error('Invalid morx subtable type: ' + this.subtable.type); 31735 } 31736 }; 31737 31738 AATMorxProcessor.prototype.processIndicRearragement = function processIndicRearragement(glyph, entry, index) { 31739 if (entry.flags & MARK_FIRST) { 31740 this.firstGlyph = index; 31741 } 31742 31743 if (entry.flags & MARK_LAST) { 31744 this.lastGlyph = index; 31745 } 31746 31747 reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph); 31748 }; 31749 31750 AATMorxProcessor.prototype.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) { 31751 var subsitutions = this.subtable.table.substitutionTable.items; 31752 if (entry.markIndex !== 0xffff) { 31753 var lookup = subsitutions.getItem(entry.markIndex); 31754 var lookupTable = new AATLookupTable(lookup); 31755 glyph = this.glyphs[this.markedGlyph]; 31756 var gid = lookupTable.lookup(glyph.id); 31757 if (gid) { 31758 this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints); 31759 } 31760 } 31761 31762 if (entry.currentIndex !== 0xffff) { 31763 var _lookup = subsitutions.getItem(entry.currentIndex); 31764 var _lookupTable = new AATLookupTable(_lookup); 31765 glyph = this.glyphs[index]; 31766 var gid = _lookupTable.lookup(glyph.id); 31767 if (gid) { 31768 this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); 31769 } 31770 } 31771 31772 if (entry.flags & SET_MARK) { 31773 this.markedGlyph = index; 31774 } 31775 }; 31776 31777 AATMorxProcessor.prototype.processLigature = function processLigature(glyph, entry, index) { 31778 if (entry.flags & SET_COMPONENT) { 31779 this.ligatureStack.push(index); 31780 } 31781 31782 if (entry.flags & PERFORM_ACTION) { 31783 var _ligatureStack; 31784 31785 var actions = this.subtable.table.ligatureActions; 31786 var components = this.subtable.table.components; 31787 var ligatureList = this.subtable.table.ligatureList; 31788 31789 var actionIndex = entry.action; 31790 var last = false; 31791 var ligatureIndex = 0; 31792 var codePoints = []; 31793 var ligatureGlyphs = []; 31794 31795 while (!last) { 31796 var _codePoints; 31797 31798 var componentGlyph = this.ligatureStack.pop(); 31799 (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints); 31800 31801 var action = actions.getItem(actionIndex++); 31802 last = !!(action & LAST_MASK); 31803 var store = !!(action & STORE_MASK); 31804 var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits 31805 offset += this.glyphs[componentGlyph].id; 31806 31807 var component = components.getItem(offset); 31808 ligatureIndex += component; 31809 31810 if (last || store) { 31811 var ligatureEntry = ligatureList.getItem(ligatureIndex); 31812 this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints); 31813 ligatureGlyphs.push(componentGlyph); 31814 ligatureIndex = 0; 31815 codePoints = []; 31816 } else { 31817 this.glyphs[componentGlyph] = this.font.getGlyph(0xffff); 31818 } 31819 } 31820 31821 // Put ligature glyph indexes back on the stack 31822 (_ligatureStack = this.ligatureStack).push.apply(_ligatureStack, ligatureGlyphs); 31823 } 31824 }; 31825 31826 AATMorxProcessor.prototype.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) { 31827 var lookupTable = new AATLookupTable(subtable.table.lookupTable); 31828 31829 for (index = 0; index < glyphs.length; index++) { 31830 var glyph = glyphs[index]; 31831 if (glyph.id !== 0xffff) { 31832 var gid = lookupTable.lookup(glyph.id); 31833 if (gid) { 31834 // 0 means do nothing 31835 glyphs[index] = this.font.getGlyph(gid, glyph.codePoints); 31836 } 31837 } 31838 } 31839 }; 31840 31841 AATMorxProcessor.prototype._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) { 31842 var _glyphs; 31843 31844 var insertions = []; 31845 while (count--) { 31846 var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++); 31847 insertions.push(this.font.getGlyph(gid)); 31848 } 31849 31850 if (!isBefore) { 31851 glyphIndex++; 31852 } 31853 31854 (_glyphs = this.glyphs).splice.apply(_glyphs, [glyphIndex, 0].concat(insertions)); 31855 }; 31856 31857 AATMorxProcessor.prototype.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) { 31858 if (entry.flags & SET_MARK) { 31859 this.markedIndex = index; 31860 } 31861 31862 if (entry.markedInsertIndex !== 0xffff) { 31863 var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5; 31864 var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE); 31865 this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore); 31866 } 31867 31868 if (entry.currentInsertIndex !== 0xffff) { 31869 var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5; 31870 var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE); 31871 this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore); 31872 } 31873 }; 31874
31875 AATMorxProcessor.prototype.getSupportedFeatures = function getSupportedFeatures() { 31876 var features = []; 31877 for (var _iterator4 = this.morx.chains, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 31878 var _ref4; 31879 31880 if (_isArray4) { 31881 if (_i4 >= _iterator4.length) break; 31882 _ref4 = _iterator4[_i4++]; 31883 } else { 31884 _i4 = _iterator4.next(); 31885 if (_i4.done) break; 31886 _ref4 = _i4.value; 31887 } 31888 31889 var chain = _ref4; 31890 31891 for (var _iterator5 = chain.features, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) { 31892 var _ref5; 31893 31894 if (_isArray5) { 31895 if (_i5 >= _iterator5.length) break; 31896 _ref5 = _iterator5[_i5++]; 31897 } else { 31898 _i5 = _iterator5.next(); 31899 if (_i5.done) break; 31900 _ref5 = _i5.value; 31901 } 31902 31903 var feature = _ref5; 31904 31905 features.push([feature.featureType, feature.featureSetting]); 31906 } 31907 } 31908 31909 return features; 31910 }; 31911 31912 AATMorxProcessor.prototype.generateInputs = function generateInputs(gid) { 31913 if (!this.inputCache) { 31914 this.generateInputCache(); 31915 } 31916 31917 return this.inputCache[gid] || []; 31918 }; 31919 31920 AATMorxProcessor.prototype.generateInputCache = function generateInputCache() { 31921 this.inputCache = {}; 31922 31923 for (var _iterator6 = this.morx.chains, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) { 31924 var _ref6; 31925 31926 if (_isArray6) { 31927 if (_i6 >= _iterator6.length) break; 31928 _ref6 = _iterator6[_i6++]; 31929 } else { 31930 _i6 = _iterator6.next(); 31931 if (_i6.done) break; 31932 _ref6 = _i6.value; 31933 } 31934 31935 var chain = _ref6; 31936 31937 var flags = chain.defaultFlags; 31938 31939 for (var _iterator7 = chain.subtables, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _getIterator(_iterator7);;) { 31940 var _ref7; 31941 31942 if (_isArray7) { 31943 if (_i7 >= _iterator7.length) break; 31944 _ref7 = _iterator7[_i7++]; 31945 } else { 31946 _i7 = _iterator7.next(); 31947 if (_i7.done) break; 31948 _ref7 = _i7.value; 31949 } 31950 31951 var subtable = _ref7; 31952 31953 if (subtable.subFeatureFlags & flags) { 31954 this.generateInputsForSubtable(subtable); 31955 } 31956 } 31957 } 31958 }; 31959 31960 AATMorxProcessor.prototype.generateInputsForSubtable = function generateInputsForSubtable(subtable) { 31961 var _this = this; 31962 31963 // Currently, only supporting ligature subtables. 31964 if (subtable.type !== 2) { 31965 return; 31966 } 31967 31968 var reverse = !!(subtable.coverage & REVERSE_DIRECTION); 31969 if (reverse) { 31970 throw new Error('Reverse subtable, not supported.'); 31971 } 31972 31973 this.subtable = subtable; 31974 this.ligatureStack = []; 31975 31976 var stateMachine = this.getStateMachine(subtable); 31977 var process = this.getProcessor(); 31978 31979 var input = []; 31980 var stack = []; 31981 this.glyphs = []; 31982 31983 stateMachine.traverse({ 31984 enter: function enter(glyph, entry) { 31985 var glyphs = _this.glyphs; 31986 stack.push({ 31987 glyphs: glyphs.slice(), 31988 ligatureStack: _this.ligatureStack.slice() 31989 }); 31990 31991 // Add glyph to input and glyphs to process. 31992 var g = _this.font.getGlyph(glyph); 31993 input.push(g); 31994 glyphs.push(input[input.length - 1]); 31995 31996 // Process ligature substitution 31997 process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); 31998 31999 // Add input to result if only one matching (non-deleted) glyph remains. 32000 var count = 0; 32001 var found = 0; 32002 for (var i = 0; i < glyphs.length && count <= 1; i++) { 32003 if (glyphs[i].id !== 0xffff) { 32004 count++; 32005 found = glyphs[i].id; 32006 } 32007 } 32008 32009 if (count === 1) { 32010 var result = input.map(function (g) { 32011 return g.id; 32012 }); 32013 var _cache = _this.inputCache[found]; 32014 if (_cache) { 32015 _cache.push(result); 32016 } else { 32017 _this.inputCache[found] = [result]; 32018 } 32019 } 32020 }, 32021 32022 exit: function exit() { 32023 var _stack$pop = stack.pop(); 32024 32025 _this.glyphs = _stack$pop.glyphs; 32026 _this.ligatureStack = _stack$pop.ligatureStack; 32027 32028 input.pop(); 32029 } 32030 }); 32031 }; 32032 32033 return AATMorxProcessor; 32034}(), (_applyDecoratedDescriptor$2(_class$2.prototype, 'getStateMachine', [cache], _Object$getOwnPropertyDescriptor(_class$2.prototype, 'getStateMachine'), _class$2.prototype)), _class$2); 32035 32036function swap(glyphs, rangeA, rangeB) { 32037 var reverseA = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
32038 var reverseB = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 32039 32040 var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]); 32041 if (reverseB) { 32042 end.reverse(); 32043 } 32044 32045 var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end)); 32046 if (reverseA) { 32047 start.reverse(); 32048 } 32049 32050 glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start)); 32051 return glyphs; 32052} 32053 32054function reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) { 32055 var length = lastGlyph - firstGlyph + 1; 32056 switch (verb) { 32057 case 0: 32058 // no change 32059 return glyphs; 32060 32061 case 1: 32062 // Ax => xA 32063 return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]); 32064 32065 case 2: 32066 // xD => Dx 32067 return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]); 32068 32069 case 3: 32070 // AxD => DxA 32071 return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]); 32072 32073 case 4: 32074 // ABx => xAB 32075 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]); 32076 32077 case 5: 32078 // ABx => xBA 32079 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false); 32080 32081 case 6: 32082 // xCD => CDx 32083 return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]); 32084 32085 case 7: 32086 // xCD => DCx 32087 return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true); 32088 32089 case 8: 32090 // AxCD => CDxA 32091 return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]); 32092 32093 case 9: 32094 // AxCD => DCxA 32095 return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true); 32096 32097 case 10: 32098 // ABxD => DxAB 32099 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]); 32100 32101 case 11: 32102 // ABxD => DxBA 32103 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false); 32104 32105 case 12: 32106 // ABxCD => CDxAB 32107 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]); 32108 32109 case 13: 32110 // ABxCD => CDxBA 32111 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false); 32112 32113 case 14: 32114 // ABxCD => DCxAB 32115 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true); 32116 32117 case 15: 32118 // ABxCD => DCxBA 32119 return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true); 32120 32121 default: 32122 throw new Error('Unknown verb: ' + verb); 32123 } 32124} 32125 32126var AATLayoutEngine = function () { 32127 function AATLayoutEngine(font) { 32128 _classCallCheck(this, AATLayoutEngine); 32129 32130 this.font = font; 32131 this.morxProcessor = new AATMorxProcessor(font); 32132 this.fallbackPosition = false; 32133 } 32134 32135 AATLayoutEngine.prototype.substitute = function substitute(glyphRun) { 32136 // AAT expects the glyphs to be in visual order prior to morx processing, 32137 // so reverse the glyphs if the script is right-to-left. 32138 if (glyphRun.direction === 'rtl') { 32139 glyphRun.glyphs.reverse(); 32140 } 32141 32142 this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features)); 32143 }; 32144 32145 AATLayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) { 32146 return mapAATToOT(this.morxProcessor.getSupportedFeatures()); 32147 }; 32148 32149 AATLayoutEngine.prototype.stringsForGlyph = function stringsForGlyph(gid) { 32150 var glyphStrings = this.morxProcessor.generateInputs(gid); 32151 var result = new _Set(); 32152 32153 for (var _iterator = glyphStrings, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 32154 var _ref; 32155 32156 if (_isArray) { 32157 if (_i >= _iterator.length) break; 32158 _ref = _iterator[_i++]; 32159 } else { 32160 _i = _iterator.next(); 32161 if (_i.done) break; 32162 _ref = _i.value; 32163 } 32164 32165 var glyphs = _ref; 32166 32167 this._addStrings(glyphs, 0, result, ''); 32168 } 32169 32170 return result; 32171 }; 32172 32173 AATLayoutEngine.prototype._addStrings = function _addStrings(glyphs, index, strings, string) { 32174 var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]); 32175 32176 for (var _iterator2 = codePoints, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 32177 var _ref2; 32178 32179 if (_isArray2) { 32180 if (_i2 >= _iterator2.length) break; 32181 _ref2 = _iterator2[_i2++]; 32182 } else { 32183 _i2 = _iterator2.next(); 32184 if (_i2.done) break; 32185 _ref2 = _i2.value; 32186 } 32187 32188 var codePoint = _ref2; 32189 32190 var s = string + _String$fromCodePoint(codePoint); 32191 if (index < glyphs.length - 1) {
32192 this._addStrings(glyphs, index + 1, strings, s); 32193 } else { 32194 strings.add(s); 32195 } 32196 } 32197 }; 32198 32199 return AATLayoutEngine; 32200}(); 32201 32202/** 32203 * ShapingPlans are used by the OpenType shapers to store which 32204 * features should by applied, and in what order to apply them. 32205 * The features are applied in groups called stages. A feature 32206 * can be applied globally to all glyphs, or locally to only 32207 * specific glyphs. 32208 * 32209 * @private 32210 */ 32211 32212var ShapingPlan = function () { 32213 function ShapingPlan(font, script, direction) { 32214 _classCallCheck(this, ShapingPlan); 32215 32216 this.font = font; 32217 this.script = script; 32218 this.direction = direction; 32219 this.stages = []; 32220 this.globalFeatures = {}; 32221 this.allFeatures = {}; 32222 } 32223 32224 /** 32225 * Adds the given features to the last stage. 32226 * Ignores features that have already been applied. 32227 */ 32228 32229 32230 ShapingPlan.prototype._addFeatures = function _addFeatures(features, global) { 32231 var stageIndex = this.stages.length - 1; 32232 var stage = this.stages[stageIndex]; 32233 for (var _iterator = features, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 32234 var _ref; 32235 32236 if (_isArray) { 32237 if (_i >= _iterator.length) break; 32238 _ref = _iterator[_i++]; 32239 } else { 32240 _i = _iterator.next(); 32241 if (_i.done) break; 32242 _ref = _i.value; 32243 } 32244 32245 var feature = _ref; 32246 32247 if (this.allFeatures[feature] == null) { 32248 stage.push(feature); 32249 this.allFeatures[feature] = stageIndex; 32250 32251 if (global) { 32252 this.globalFeatures[feature] = true; 32253 } 32254 } 32255 } 32256 }; 32257 32258 /** 32259 * Add features to the last stage 32260 */ 32261 32262 32263 ShapingPlan.prototype.add = function add(arg) { 32264 var global = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; 32265 32266 if (this.stages.length === 0) { 32267 this.stages.push([]); 32268 } 32269 32270 if (typeof arg === 'string') { 32271 arg = [arg]; 32272 } 32273 32274 if (Array.isArray(arg)) { 32275 this._addFeatures(arg, global); 32276 } else if ((typeof arg === 'undefined' ? 'undefined' : _typeof(arg)) === 'object') { 32277 this._addFeatures(arg.global || [], true); 32278 this._addFeatures(arg.local || [], false); 32279 } else { 32280 throw new Error("Unsupported argument to ShapingPlan#add"); 32281 } 32282 }; 32283 32284 /** 32285 * Add a new stage 32286 */ 32287 32288 32289 ShapingPlan.prototype.addStage = function addStage(arg, global) { 32290 if (typeof arg === 'function') { 32291 this.stages.push(arg, []); 32292 } else { 32293 this.stages.push([]); 32294 this.add(arg, global); 32295 } 32296 }; 32297 32298 ShapingPlan.prototype.setFeatureOverrides = function setFeatureOverrides(features) { 32299 if (Array.isArray(features)) { 32300 this.add(features); 32301 } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') { 32302 for (var tag in features) { 32303 if (features[tag]) { 32304 this.add(tag); 32305 } else if (this.allFeatures[tag] != null) { 32306 var stage = this.stages[this.allFeatures[tag]]; 32307 stage.splice(stage.indexOf(tag), 1); 32308 delete this.allFeatures[tag]; 32309 delete this.globalFeatures[tag]; 32310 } 32311 } 32312 } 32313 }; 32314 32315 /** 32316 * Assigns the global features to the given glyphs 32317 */ 32318 32319 32320 ShapingPlan.prototype.assignGlobalFeatures = function assignGlobalFeatures(glyphs) { 32321 for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 32322 var _ref2; 32323 32324 if (_isArray2) { 32325 if (_i2 >= _iterator2.length) break; 32326 _ref2 = _iterator2[_i2++]; 32327 } else { 32328 _i2 = _iterator2.next(); 32329 if (_i2.done) break; 32330 _ref2 = _i2.value; 32331 } 32332 32333 var glyph = _ref2; 32334 32335 for (var feature in this.globalFeatures) { 32336 glyph.features[feature] = true; 32337 } 32338 } 32339 }; 32340 32341 /** 32342 * Executes the planned stages using the given OTProcessor 32343 */ 32344 32345 32346 ShapingPlan.prototype.process = function process(processor, glyphs, positions) { 32347 for (var _iterator3 = this.stages, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 32348 var _ref3; 32349 32350 if (_isArray3) { 32351 if (_i3 >= _iterator3.length) break; 32352 _ref3 = _iterator3[_i3++]; 32353 } else { 32354 _i3 = _iterator3.next(); 32355 if (_i3.done) break; 32356 _ref3 = _i3.value; 32357 } 32358 32359 var stage = _ref3; 32360 32361 if (typeof stage === 'function') { 32362 if (!positions) { 32363 stage(this.font, glyphs, this); 32364 } 32365 } else if (stage.length > 0) { 32366 processor.applyFeatures(stage, glyphs, positions); 32367 } 32368 } 32369 }; 32370 32371 return ShapingPlan; 32372}(); 32373 32374var _class$4; 32375var _temp; 32376var VARIATION_FEATURES = ['rvrn']; 32377var COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk']; 32378var FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom']; 32379var HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern']; 32380var DIRECTIONAL_FEATURES = { 32381 ltr: ['ltra', 'ltrm'], 32382 rtl: ['rtla', 'rtlm'] 32383}; 32384 32385var DefaultShaper = (_temp = _class$4 = function () { 32386 function DefaultShaper() { 32387 _classCallCheck(this, DefaultShaper); 32388 } 32389 32390 DefaultShaper.plan = function plan(_plan, glyphs, features) { 32391 // Plan the features we want to apply 32392 this.planPreprocessing(_plan); 32393 this.planFeatures(_plan); 32394 this.planPostprocessing(_plan, features); 32395 32396 // Assign the global features to all the glyphs 32397 _plan.assignGlobalFeatures(glyphs); 32398 32399 // Assign local features to glyphs 32400 this.assignFeatures(_plan, glyphs); 32401 }; 32402 32403 DefaultShaper.planPreprocessing = function planPreprocessing(plan) { 32404 plan.add({ 32405 global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]), 32406 local: FRACTIONAL_FEATURES 32407 }); 32408 }; 32409 32410 DefaultShaper.planFeatures = function planFeatures(plan) {
32411 // Do nothing by default. Let subclasses override this. 32412 }; 32413 32414 DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) { 32415 plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES)); 32416 plan.setFeatureOverrides(userFeatures); 32417 }; 32418 32419 DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) { 32420 // Enable contextual fractions 32421 for (var i = 0; i < glyphs.length; i++) { 32422 var glyph = glyphs[i]; 32423 if (glyph.codePoints[0] === 0x2044) { 32424 // fraction slash 32425 var start = i; 32426 var end = i + 1; 32427 32428 // Apply numerator 32429 while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) { 32430 glyphs[start - 1].features.numr = true; 32431 glyphs[start - 1].features.frac = true; 32432 start--; 32433 } 32434 32435 // Apply denominator 32436 while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) { 32437 glyphs[end].features.dnom = true; 32438 glyphs[end].features.frac = true; 32439 end++; 32440 } 32441 32442 // Apply fraction slash 32443 glyph.features.frac = true; 32444 i = end - 1; 32445 } 32446 } 32447 }; 32448 32449 return DefaultShaper; 32450}(), _class$4.zeroMarkWidths = 'AFTER_GPOS', _temp); 32451 32452var trie = new UnicodeTrie(Buffer("AAEQAAAAAAAAADGgAZUBav7t2CtPA0EUBeDZB00pin9AJZIEgyUEj0QhweDAgQOJxCBRBElQSBwSicLgkOAwnNKZ5GaY2c7uzj4o5yZfZrrbefbuIx2nSq3CGmzAWH/+K+UO7MIe7MMhHMMpnMMFXMIVXIt2t3CnP088iPqjqNN8e4Ij7Rle4LUH82rLm6i/92A+RERERERERERNmfz/89GDeRARERERzbN8ceps2Iwt9H0C9/AJ6yOlDkbTczcot5VSm8Pm1vcFWfb7+BKOLTuOd2UlTX4wGP85Eg953lWPFbnuN7PkjtLmalOWbNenkHOSa7T3KmR9MVTZ2zZkVj1kHa68MueVKH0R4zqQ44WEXLM8VjcWHP0PtKLfPzQnMtGn3W4QYf6qxFxceVI394r2xnV+1rih0fV1Vzf3fO1n3evL5J78ruvZ5ptX2Rwy92Tfb1wlEqut3U+sZ3HXOeJ7/zDrbyuP6+Zz0fqa6Nv3vhY7Yu1xWnGevmsvsUpTT/RYIe8waUH/rvHMWKFzLfN8L+rTfp645mfX7ftlnfDtYxN59w0=","base64"));
32453var FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init']; 32454 32455var ShapingClasses = { 32456 Non_Joining: 0, 32457 Left_Joining: 1, 32458 Right_Joining: 2, 32459 Dual_Joining: 3, 32460 Join_Causing: 3, 32461 ALAPH: 4, 32462 'DALATH RISH': 5, 32463 Transparent: 6 32464}; 32465 32466var ISOL = 'isol'; 32467var FINA = 'fina'; 32468var FIN2 = 'fin2'; 32469var FIN3 = 'fin3'; 32470var MEDI = 'medi'; 32471var MED2 = 'med2'; 32472var INIT = 'init'; 32473var NONE = null; 32474 32475// Each entry is [prevAction, curAction, nextState] 32476var STATE_TABLE = [ 32477// Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH 32478// State 0: prev was U, not willing to join. 32479[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]], 32480 32481// State 1: prev was R or ISOL/ALAPH, not willing to join. 32482[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]], 32483 32484// State 2: prev was D/L in ISOL form, willing to join. 32485[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]], 32486 32487// State 3: prev was D in FINA form, willing to join. 32488[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]], 32489 32490// State 4: prev was FINA ALAPH, not willing to join. 32491[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]], 32492 32493// State 5: prev was FIN2/FIN3 ALAPH, not willing to join. 32494[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]], 32495 32496// State 6: prev was DALATH/RISH, not willing to join. 32497[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]]; 32498 32499/** 32500 * This is a shaper for Arabic, and other cursive scripts. 32501 * It uses data from ArabicShaping.txt in the Unicode database, 32502 * compiled to a UnicodeTrie by generate-data.coffee. 32503 * 32504 * The shaping state machine was ported from Harfbuzz. 32505 * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc 32506 */ 32507 32508var ArabicShaper = function (_DefaultShaper) { 32509 _inherits(ArabicShaper, _DefaultShaper); 32510 32511 function ArabicShaper() { 32512 _classCallCheck(this, ArabicShaper); 32513 32514 return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments)); 32515 } 32516 32517 ArabicShaper.planFeatures = function planFeatures(plan) { 32518 plan.add(['ccmp', 'locl']); 32519 for (var i = 0; i < FEATURES.length; i++) { 32520 var feature = FEATURES[i]; 32521 plan.addStage(feature, false); 32522 } 32523 32524 plan.addStage('mset'); 32525 }; 32526 32527 ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) { 32528 _DefaultShaper.assignFeatures.call(this, plan, glyphs); 32529 32530 var prev = -1; 32531 var state = 0; 32532 var actions = []; 32533 32534 // Apply the state machine to map glyphs to features 32535 for (var i = 0; i < glyphs.length; i++) { 32536 var curAction = void 0, 32537 prevAction = void 0; 32538 var glyph = glyphs[i]; 32539 var type = getShapingClass(glyph.codePoints[0]); 32540 if (type === ShapingClasses.Transparent) { 32541 actions[i] = NONE; 32542 continue; 32543 } 32544 32545 var _STATE_TABLE$state$ty = STATE_TABLE[state][type]; 32546 prevAction = _STATE_TABLE$state$ty[0]; 32547 curAction = _STATE_TABLE$state$ty[1]; 32548 state = _STATE_TABLE$state$ty[2]; 32549 32550 32551 if (prevAction !== NONE && prev !== -1) { 32552 actions[prev] = prevAction; 32553 } 32554 32555 actions[i] = curAction; 32556 prev = i; 32557 } 32558 32559 // Apply the chosen features to their respective glyphs 32560 for (var index = 0; index < glyphs.length; index++) { 32561 var feature = void 0; 32562 var glyph = glyphs[index]; 32563 if (feature = actions[index]) { 32564 glyph.features[feature] = true; 32565 } 32566 } 32567 }; 32568 32569 return ArabicShaper; 32570}(DefaultShaper); 32571 32572function getShapingClass(codePoint) { 32573 var res = trie.get(codePoint); 32574 if (res) { 32575 return res - 1; 32576 } 32577 32578 var category = unicode.getCategory(codePoint); 32579 if (category === 'Mn' || category === 'Me' || category === 'Cf') { 32580 return ShapingClasses.Transparent; 32581 } 32582 32583 return ShapingClasses.Non_Joining; 32584} 32585 32586var GlyphIterator = function () { 32587 function GlyphIterator(glyphs, options) { 32588 _classCallCheck(this, GlyphIterator); 32589 32590 this.glyphs = glyphs; 32591 this.reset(options); 32592 } 32593 32594 GlyphIterator.prototype.reset = function reset() { 32595 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 32596 var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 32597 32598 this.options = options; 32599 this.flags = options.flags || {}; 32600 this.markAttachmentType = options.markAttachmentType || 0; 32601 this.index = index; 32602 }; 32603 32604 GlyphIterator.prototype.shouldIgnore = function shouldIgnore(glyph) { 32605 return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType; 32606 }; 32607 32608 GlyphIterator.prototype.move = function move(dir) { 32609 this.index += dir; 32610 while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) { 32611 this.index += dir; 32612 } 32613 32614 if (0 > this.index || this.index >= this.glyphs.length) { 32615 return null; 32616 } 32617 32618 return this.glyphs[this.index]; 32619 }; 32620 32621 GlyphIterator.prototype.next = function next() { 32622 return this.move(+1); 32623 }; 32624 32625 GlyphIterator.prototype.prev = function prev() { 32626 return this.move(-1); 32627 }; 32628 32629 GlyphIterator.prototype.peek = function peek() { 32630 var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; 32631 32632 var idx = this.index; 32633 var res = this.increment(count); 32634 this.index = idx; 32635 return res; 32636 }; 32637 32638 GlyphIterator.prototype.peekIndex = function peekIndex() { 32639 var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; 32640 32641 var idx = this.index; 32642 this.increment(count); 32643 var res = this.index; 32644 this.index = idx; 32645 return res; 32646 }; 32647 32648 GlyphIterator.prototype.increment = function increment() { 32649 var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; 32650 32651 var dir = count < 0 ? -1 : 1; 32652 count = Math.abs(count); 32653 while (count--) { 32654 this.move(dir); 32655 } 32656 32657 return this.glyphs[this.index]; 32658 }; 32659 32660 _createClass(GlyphIterator, [{ 32661 key: "cur", 32662 get: function get() { 32663 return this.glyphs[this.index] || null; 32664 } 32665 }]); 32666 32667 return GlyphIterator; 32668}(); 32669 32670var DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn']; 32671 32672var OTProcessor = function () { 32673 function OTProcessor(font, table) { 32674 _classCallCheck(this, OTProcessor); 32675 32676 this.font = font; 32677 this.table = table; 32678 32679 this.script = null; 32680 this.scriptTag = null; 32681 32682 this.language = null; 32683 this.languageTag = null; 32684 32685 this.features = {}; 32686 this.lookups = {}; 32687 32688 // Setup variation substitutions 32689 this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; 32690 32691 // initialize to default script + language 32692 this.selectScript(); 32693 32694 // current context (set by applyFeatures) 32695 this.glyphs = []; 32696 this.positions = []; // only used by GPOS 32697 this.ligatureID = 1; 32698 this.currentFeature = null; 32699 } 32700 32701 OTProcessor.prototype.findScript = function findScript(script) { 32702 if (this.table.scriptList == null) { 32703 return null; 32704 } 32705 32706 if (!Array.isArray(script)) { 32707 script = [script]; 32708 } 32709 32710 for (var _iterator = script, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 32711 var _ref; 32712 32713 if (_isArray) { 32714 if (_i >= _iterator.length) break; 32715 _ref = _iterator[_i++]; 32716 } else { 32717 _i = _iterator.next(); 32718 if (_i.done) break; 32719 _ref = _i.value; 32720 } 32721 32722 var s = _ref; 32723 32724 for (var _iterator2 = this.table.scriptList, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 32725 var _ref2; 32726 32727 if (_isArray2) { 32728 if (_i2 >= _iterator2.length) break; 32729 _ref2 = _iterator2[_i2++]; 32730 } else { 32731 _i2 = _iterator2.next(); 32732 if (_i2.done) break; 32733 _ref2 = _i2.value; 32734 } 32735 32736 var entry = _ref2; 32737 32738 if (entry.tag === s) { 32739 return entry; 32740 } 32741 } 32742 } 32743 32744 return null; 32745 }; 32746 32747 OTProcessor.prototype.selectScript = function selectScript(script, language, direction$$) { 32748 var changed = false;
32749 var entry = void 0; 32750 if (!this.script || script !== this.scriptTag) { 32751 entry = this.findScript(script); 32752 if (!entry) { 32753 entry = this.findScript(DEFAULT_SCRIPTS); 32754 } 32755 32756 if (!entry) { 32757 return this.scriptTag; 32758 } 32759 32760 this.scriptTag = entry.tag; 32761 this.script = entry.script; 32762 this.language = null; 32763 this.languageTag = null; 32764 changed = true; 32765 } 32766 32767 if (!direction$$ || direction$$ !== this.direction) { 32768 this.direction = direction$$ || direction(script); 32769 } 32770 32771 if (language && language.length < 4) { 32772 language += ' '.repeat(4 - language.length); 32773 } 32774 32775 if (!language || language !== this.languageTag) { 32776 this.language = null; 32777 32778 for (var _iterator3 = this.script.langSysRecords, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 32779 var _ref3; 32780 32781 if (_isArray3) { 32782 if (_i3 >= _iterator3.length) break; 32783 _ref3 = _iterator3[_i3++]; 32784 } else { 32785 _i3 = _iterator3.next(); 32786 if (_i3.done) break; 32787 _ref3 = _i3.value; 32788 } 32789 32790 var lang = _ref3; 32791 32792 if (lang.tag === language) { 32793 this.language = lang.langSys; 32794 this.languageTag = lang.tag; 32795 break; 32796 } 32797 } 32798 32799 if (!this.language) { 32800 this.language = this.script.defaultLangSys; 32801 this.languageTag = null; 32802 } 32803 32804 changed = true; 32805 } 32806 32807 // Build a feature lookup table 32808 if (changed) { 32809 this.features = {}; 32810 if (this.language) { 32811 for (var _iterator4 = this.language.featureIndexes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 32812 var _ref4; 32813 32814 if (_isArray4) { 32815 if (_i4 >= _iterator4.length) break; 32816 _ref4 = _iterator4[_i4++]; 32817 } else { 32818 _i4 = _iterator4.next(); 32819 if (_i4.done) break; 32820 _ref4 = _i4.value; 32821 } 32822 32823 var featureIndex = _ref4; 32824 32825 var record = this.table.featureList[featureIndex]; 32826 var substituteFeature = this.substituteFeatureForVariations(featureIndex); 32827 this.features[record.tag] = substituteFeature || record.feature; 32828 } 32829 } 32830 } 32831 32832 return this.scriptTag; 32833 }; 32834 32835 OTProcessor.prototype.lookupsForFeatures = function lookupsForFeatures() { 32836 var userFeatures = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; 32837 var exclude = arguments[1]; 32838 32839 var lookups = []; 32840 for (var _iterator5 = userFeatures, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) { 32841 var _ref5; 32842 32843 if (_isArray5) { 32844 if (_i5 >= _iterator5.length) break; 32845 _ref5 = _iterator5[_i5++]; 32846 } else { 32847 _i5 = _iterator5.next(); 32848 if (_i5.done) break; 32849 _ref5 = _i5.value; 32850 } 32851 32852 var tag = _ref5; 32853 32854 var feature = this.features[tag]; 32855 if (!feature) { 32856 continue; 32857 } 32858 32859 for (var _iterator6 = feature.lookupListIndexes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _getIterator(_iterator6);;) { 32860 var _ref6; 32861 32862 if (_isArray6) { 32863 if (_i6 >= _iterator6.length) break; 32864 _ref6 = _iterator6[_i6++]; 32865 } else { 32866 _i6 = _iterator6.next(); 32867 if (_i6.done) break; 32868 _ref6 = _i6.value; 32869 } 32870 32871 var lookupIndex = _ref6; 32872 32873 if (exclude && exclude.indexOf(lookupIndex) !== -1) { 32874 continue; 32875 } 32876 32877 lookups.push({ 32878 feature: tag, 32879 index: lookupIndex, 32880 lookup: this.table.lookupList.get(lookupIndex) 32881 }); 32882 } 32883 } 32884 32885 lookups.sort(function (a, b) { 32886 return a.index - b.index; 32887 }); 32888 return lookups; 32889 }; 32890 32891 OTProcessor.prototype.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) { 32892 if (this.variationsIndex === -1) { 32893 return null; 32894 } 32895 32896 var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex]; 32897 var substitutions = record.featureTableSubstitution.substitutions; 32898 for (var _iterator7 = substitutions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _getIterator(_iterator7);;) { 32899 var _ref7; 32900 32901 if (_isArray7) { 32902 if (_i7 >= _iterator7.length) break; 32903 _ref7 = _iterator7[_i7++]; 32904 } else { 32905 _i7 = _iterator7.next(); 32906 if (_i7.done) break; 32907 _ref7 = _i7.value; 32908 } 32909 32910 var substitution = _ref7; 32911 32912 if (substitution.featureIndex === featureIndex) { 32913 return substitution.alternateFeatureTable; 32914 } 32915 } 32916 32917 return null; 32918 }; 32919 32920 OTProcessor.prototype.findVariationsIndex = function findVariationsIndex(coords) { 32921 var variations = this.table.featureVariations; 32922 if (!variations) { 32923 return -1; 32924 } 32925 32926 var records = variations.featureVariationRecords; 32927 for (var i = 0; i < records.length; i++) { 32928 var conditions = records[i].conditionSet.conditionTable; 32929 if (this.variationConditionsMatch(conditions, coords)) { 32930 return i; 32931 } 32932 } 32933 32934 return -1; 32935 }; 32936 32937 OTProcessor.prototype.variationConditionsMatch = function variationConditionsMatch(conditions, coords) { 32938 return conditions.every(function (condition) { 32939 var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0; 32940 return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue; 32941 }); 32942 }; 32943 32944 OTProcessor.prototype.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) { 32945 var lookups = this.lookupsForFeatures(userFeatures); 32946 this.applyLookups(lookups, glyphs, advances); 32947 }; 32948 32949 OTProcessor.prototype.applyLookups = function applyLookups(lookups, glyphs, positions) { 32950 this.glyphs = glyphs; 32951 this.positions = positions; 32952 this.glyphIterator = new GlyphIterator(glyphs); 32953 32954 for (var _iterator8 = lookups, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _getIterator(_iterator8);;) { 32955 var _ref8; 32956 32957 if (_isArray8) { 32958 if (_i8 >= _iterator8.length) break; 32959 _ref8 = _iterator8[_i8++]; 32960 } else { 32961 _i8 = _iterator8.next(); 32962 if (_i8.done) break; 32963 _ref8 = _i8.value; 32964 } 32965 32966 var _ref9 = _ref8, 32967 feature = _ref9.feature, 32968 lookup = _ref9.lookup; 32969 32970 this.currentFeature = feature; 32971 this.glyphIterator.reset(lookup.flags); 32972 32973 while (this.glyphIterator.index < glyphs.length) { 32974 if (!(feature in this.glyphIterator.cur.features)) { 32975 this.glyphIterator.next(); 32976 continue; 32977 } 32978 32979 for (var _iterator9 = lookup.subTables, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _getIterator(_iterator9);;) { 32980 var _ref10; 32981 32982 if (_isArray9) { 32983 if (_i9 >= _iterator9.length) break; 32984 _ref10 = _iterator9[_i9++]; 32985 } else { 32986 _i9 = _iterator9.next(); 32987 if (_i9.done) break; 32988 _ref10 = _i9.value; 32989 } 32990 32991 var table = _ref10; 32992 32993 var res = this.applyLookup(lookup.lookupType, table); 32994 if (res) { 32995 break; 32996 } 32997 } 32998 32999 this.glyphIterator.next(); 33000 } 33001 } 33002 }; 33003 33004 OTProcessor.prototype.applyLookup = function applyLookup(lookup, table) { 33005 throw new Error("applyLookup must be implemented by subclasses"); 33006 }; 33007 33008 OTProcessor.prototype.applyLookupList = function applyLookupList(lookupRecords) { 33009 var options = this.glyphIterator.options; 33010 var glyphIndex = this.glyphIterator.index; 33011 33012 for (var _iterator10 = lookupRecords, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10
33012: _getIterator(_iterator10);;) { 33013 var _ref11; 33014 33015 if (_isArray10) { 33016 if (_i10 >= _iterator10.length) break; 33017 _ref11 = _iterator10[_i10++]; 33018 } else { 33019 _i10 = _iterator10.next(); 33020 if (_i10.done) break; 33021 _ref11 = _i10.value; 33022 } 33023 33024 var lookupRecord = _ref11; 33025 33026 // Reset flags and find glyph index for this lookup record 33027 this.glyphIterator.reset(options, glyphIndex); 33028 this.glyphIterator.increment(lookupRecord.sequenceIndex); 33029 33030 // Get the lookup and setup flags for subtables 33031 var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex); 33032 this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); 33033 33034 // Apply lookup subtables until one matches 33035 for (var _iterator11 = lookup.subTables, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _getIterator(_iterator11);;) { 33036 var _ref12; 33037 33038 if (_isArray11) { 33039 if (_i11 >= _iterator11.length) break; 33040 _ref12 = _iterator11[_i11++]; 33041 } else { 33042 _i11 = _iterator11.next(); 33043 if (_i11.done) break; 33044 _ref12 = _i11.value; 33045 } 33046 33047 var table = _ref12; 33048 33049 if (this.applyLookup(lookup.lookupType, table)) { 33050 break; 33051 } 33052 } 33053 } 33054 33055 this.glyphIterator.reset(options, glyphIndex); 33056 return true; 33057 }; 33058 33059 OTProcessor.prototype.coverageIndex = function coverageIndex(coverage, glyph) { 33060 if (glyph == null) { 33061 glyph = this.glyphIterator.cur.id; 33062 } 33063 33064 switch (coverage.version) { 33065 case 1: 33066 return coverage.glyphs.indexOf(glyph); 33067 33068 case 2: 33069 for (var _iterator12 = coverage.rangeRecords, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _getIterator(_iterator12);;) { 33070 var _ref13; 33071 33072 if (_isArray12) { 33073 if (_i12 >= _iterator12.length) break; 33074 _ref13 = _iterator12[_i12++]; 33075 } else { 33076 _i12 = _iterator12.next(); 33077 if (_i12.done) break; 33078 _ref13 = _i12.value; 33079 } 33080 33081 var range = _ref13; 33082 33083 if (range.start <= glyph && glyph <= range.end) { 33084 return range.startCoverageIndex + glyph - range.start; 33085 } 33086 } 33087 33088 break; 33089 } 33090 33091 return -1; 33092 }; 33093 33094 OTProcessor.prototype.match = function match(sequenceIndex, sequence, fn, matched) { 33095 var pos = this.glyphIterator.index; 33096 var glyph = this.glyphIterator.increment(sequenceIndex); 33097 var idx = 0; 33098 33099 while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) { 33100 if (matched) { 33101 matched.push(this.glyphIterator.index); 33102 } 33103 33104 idx++; 33105 glyph = this.glyphIterator.next(); 33106 } 33107 33108 this.glyphIterator.index = pos; 33109 if (idx < sequence.length) { 33110 return false; 33111 } 33112 33113 return matched || true; 33114 }; 33115 33116 OTProcessor.prototype.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) { 33117 return this.match(sequenceIndex, sequence, function (component, glyph) { 33118 return component === glyph.id; 33119 }); 33120 }; 33121 33122 OTProcessor.prototype.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) { 33123 var _this = this; 33124 33125 return this.match(sequenceIndex, sequence, function (component, glyph) { 33126 // If the current feature doesn't apply to this glyph, 33127 if (!(_this.currentFeature in glyph.features)) { 33128 return false; 33129 } 33130 33131 return component === glyph.id; 33132 }, []); 33133 }; 33134 33135 OTProcessor.prototype.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) { 33136 var _this2 = this; 33137 33138 return this.match(sequenceIndex, sequence, function (coverage, glyph) { 33139 return _this2.coverageIndex(coverage, glyph.id) >= 0; 33140 }); 33141 }; 33142 33143 OTProcessor.prototype.getClassID = function getClassID(glyph, classDef) { 33144 switch (classDef.version) { 33145 case 1: 33146 // Class array 33147 var i = glyph - classDef.startGlyph; 33148 if (i >= 0 && i < classDef.classValueArray.length) { 33149 return classDef.classValueArray[i]; 33150 } 33151 33152 break; 33153 33154 case 2: 33155 for (var _iterator13 = classDef.classRangeRecord, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _getIterator(_iterator13);;) { 33156 var _ref14; 33157 33158 if (_isArray13) { 33159 if (_i13 >= _iterator13.length) break; 33160 _ref14 = _iterator13[_i13++]; 33161 } else { 33162 _i13 = _iterator13.next(); 33163 if (_i13.done) break; 33164 _ref14 = _i13.value; 33165 } 33166 33167 var range = _ref14; 33168 33169 if (range.start <= glyph && glyph <= range.end) { 33170 return range.class; 33171 } 33172 } 33173 33174 break; 33175 } 33176 33177 return 0; 33178 }; 33179 33180 OTProcessor.prototype.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) { 33181 var _this3 = this; 33182 33183 return this.match(sequenceIndex, sequence, function (classID, glyph) { 33184 return classID === _this3.getClassID(glyph.id, classDef); 33185 }); 33186 }; 33187 33188 OTProcessor.prototype.applyContext = function applyContext(table) {
33189 switch (table.version) { 33190 case 1: 33191 var index = this.coverageIndex(table.coverage); 33192 if (index === -1) { 33193 return false; 33194 } 33195 33196 var set = table.ruleSets[index]; 33197 for (var _iterator14 = set, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _getIterator(_iterator14);;) { 33198 var _ref15; 33199 33200 if (_isArray14) { 33201 if (_i14 >= _iterator14.length) break; 33202 _ref15 = _iterator14[_i14++]; 33203 } else { 33204 _i14 = _iterator14.next(); 33205 if (_i14.done) break; 33206 _ref15 = _i14.value; 33207 } 33208 33209 var rule = _ref15; 33210 33211 if (this.sequenceMatches(1, rule.input)) { 33212 return this.applyLookupList(rule.lookupRecords); 33213 } 33214 } 33215 33216 break; 33217 33218 case 2: 33219 if (this.coverageIndex(table.coverage) === -1) { 33220 return false; 33221 } 33222 33223 index = this.getClassID(this.glyphIterator.cur.id, table.classDef); 33224 if (index === -1) { 33225 return false; 33226 } 33227 33228 set = table.classSet[index]; 33229 for (var _iterator15 = set, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _getIterator(_iterator15);;) { 33230 var _ref16; 33231 33232 if (_isArray15) { 33233 if (_i15 >= _iterator15.length) break; 33234 _ref16 = _iterator15[_i15++]; 33235 } else { 33236 _i15 = _iterator15.next(); 33237 if (_i15.done) break; 33238 _ref16 = _i15.value; 33239 } 33240 33241 var _rule = _ref16; 33242 33243 if (this.classSequenceMatches(1, _rule.classes, table.classDef)) { 33244 return this.applyLookupList(_rule.lookupRecords); 33245 } 33246 } 33247 33248 break; 33249 33250 case 3: 33251 if (this.coverageSequenceMatches(0, table.coverages)) { 33252 return this.applyLookupList(table.lookupRecords); 33253 } 33254 33255 break; 33256 } 33257 33258 return false; 33259 }; 33260 33261 OTProcessor.prototype.applyChainingContext = function applyChainingContext(table) { 33262 switch (table.version) { 33263 case 1: 33264 var index = this.coverageIndex(table.coverage); 33265 if (index === -1) { 33266 return false; 33267 } 33268 33269 var set = table.chainRuleSets[index]; 33270 for (var _iterator16 = set, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _getIterator(_iterator16);;) { 33271 var _ref17; 33272 33273 if (_isArray16) { 33274 if (_i16 >= _iterator16.length) break; 33275 _ref17 = _iterator16[_i16++]; 33276 } else { 33277 _i16 = _iterator16.next(); 33278 if (_i16.done) break; 33279 _ref17 = _i16.value; 33280 } 33281 33282 var rule = _ref17; 33283 33284 if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) { 33285 return this.applyLookupList(rule.lookupRecords); 33286 } 33287 } 33288 33289 break; 33290 33291 case 2: 33292 if (this.coverageIndex(table.coverage) === -1) { 33293 return false; 33294 } 33295 33296 index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef); 33297 var rules = table.chainClassSet[index]; 33298 if (!rules) { 33299 return false; 33300 } 33301 33302 for (var _iterator17 = rules, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _getIterator(_iterator17);;) { 33303 var _ref18; 33304 33305 if (_isArray17) { 33306 if (_i17 >= _iterator17.length) break; 33307 _ref18 = _iterator17[_i17++]; 33308 } else { 33309 _i17 = _iterator17.next(); 33310 if (_i17.done) break; 33311 _ref18 = _i17.value; 33312 } 33313 33314 var _rule2 = _ref18; 33315 33316 if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) { 33317 return this.applyLookupList(_rule2.lookupRecords); 33318 } 33319 } 33320 33321 break; 33322 33323 case 3: 33324 if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) { 33325 return this.applyLookupList(table.lookupRecords); 33326 } 33327 33328 break; 33329 } 33330 33331 return false;
33332 }; 33333 33334 return OTProcessor; 33335}(); 33336 33337var GlyphInfo = function () { 33338 function GlyphInfo(font, id) { 33339 var codePoints = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; 33340 var features = arguments[3]; 33341 33342 _classCallCheck(this, GlyphInfo); 33343 33344 this._font = font; 33345 this.codePoints = codePoints; 33346 this.id = id; 33347 33348 this.features = {}; 33349 if (Array.isArray(features)) { 33350 for (var i = 0; i < features.length; i++) { 33351 var feature = features[i]; 33352 this.features[feature] = true; 33353 } 33354 } else if ((typeof features === 'undefined' ? 'undefined' : _typeof(features)) === 'object') { 33355 _Object$assign(this.features, features); 33356 } 33357 33358 this.ligatureID = null; 33359 this.ligatureComponent = null; 33360 this.isLigated = false; 33361 this.cursiveAttachment = null; 33362 this.markAttachment = null; 33363 this.shaperInfo = null; 33364 this.substituted = false; 33365 this.isMultiplied = false; 33366 } 33367 33368 GlyphInfo.prototype.copy = function copy() { 33369 return new GlyphInfo(this._font, this.id, this.codePoints, this.features); 33370 }; 33371 33372 _createClass(GlyphInfo, [{ 33373 key: 'id', 33374 get: function get() { 33375 return this._id; 33376 }, 33377 set: function set(id) { 33378 this._id = id; 33379 this.substituted = true; 33380 33381 var GDEF = this._font.GDEF; 33382 if (GDEF && GDEF.glyphClassDef) { 33383 // TODO: clean this up 33384 var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef); 33385 this.isBase = classID === 1; 33386 this.isLigature = classID === 2; 33387 this.isMark = classID === 3; 33388 this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0; 33389 } else { 33390 this.isMark = this.codePoints.every(unicode.isMark); 33391 this.isBase = !this.isMark; 33392 this.isLigature = this.codePoints.length > 1; 33393 this.markAttachmentType = 0; 33394 } 33395 } 33396 }]); 33397 33398 return GlyphInfo; 33399}(); 33400 33401var _class$5; 33402var _temp$1; 33403/** 33404 * This is a shaper for the Hangul script, used by the Korean language. 33405 * It does the following: 33406 * - decompose if unsupported by the font: 33407 * <LV> -> <L,V> 33408 * <LVT> -> <L,V,T> 33409 * <LV,T> -> <L,V,T> 33410 * 33411 * - compose if supported by the font: 33412 * <L,V> -> <LV> 33413 * <L,V,T> -> <LVT> 33414 * <LV,T> -> <LVT> 33415 * 33416 * - reorder tone marks (S is any valid syllable): 33417 * <S, M> -> <M, S> 33418 * 33419 * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences. 33420 * 33421 * This logic is based on the following documents: 33422 * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm 33423 * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf 33424 */ 33425var HangulShaper = (_temp$1 = _class$5 = function (_DefaultShaper) { 33426 _inherits(HangulShaper, _DefaultShaper); 33427 33428 function HangulShaper() { 33429 _classCallCheck(this, HangulShaper); 33430 33431 return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments)); 33432 } 33433 33434 HangulShaper.planFeatures = function planFeatures(plan) { 33435 plan.add(['ljmo', 'vjmo', 'tjmo'], false); 33436 }; 33437 33438 HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) { 33439 var state = 0; 33440 var i = 0; 33441 while (i < glyphs.length) { 33442 var action = void 0; 33443 var glyph = glyphs[i]; 33444 var code = glyph.codePoints[0]; 33445 var type = getType(code); 33446 33447 var _STATE_TABLE$state$ty = STATE_TABLE$1[state][type]; 33448 action = _STATE_TABLE$state$ty[0]; 33449 state = _STATE_TABLE$state$ty[1]; 33450 33451 33452 switch (action) { 33453 case DECOMPOSE: 33454 // Decompose the composed syllable if it is not supported by the font. 33455 if (!plan.font.hasGlyphForCodePoint(code)) { 33456 i = decompose(glyphs, i, plan.font); 33457 } 33458 break; 33459 33460 case COMPOSE: 33461 // Found a decomposed syllable. Try to compose if supported by the font. 33462 i = compose(glyphs, i, plan.font); 33463 break; 33464 33465 case TONE_MARK: 33466 // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable. 33467 reorderToneMark(glyphs, i, plan.font); 33468 break; 33469 33470 case INVALID: 33471 // Tone mark has no valid syllable to attach to, so insert a dotted circle 33472 i = insertDottedCircle(glyphs, i, plan.font); 33473 break; 33474 } 33475 33476 i++; 33477 } 33478 }; 33479 33480 return HangulShaper; 33481}(DefaultShaper), _class$5.zeroMarkWidths = 'NONE', _temp$1); 33482var HANGUL_BASE = 0xac00; 33483var HANGUL_END = 0xd7a4; 33484var HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1; 33485var L_BASE = 0x1100; // lead 33486var V_BASE = 0x1161; // vowel 33487var T_BASE = 0x11a7; // trail 33488var L_COUNT = 19; 33489var V_COUNT = 21; 33490var T_COUNT = 28; 33491var L_END = L_BASE + L_COUNT - 1; 33492var V_END = V_BASE + V_COUNT - 1; 33493var T_END = T_BASE + T_COUNT - 1; 33494var DOTTED_CIRCLE = 0x25cc; 33495 33496var isL = function isL(code) { 33497 return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c; 33498}; 33499var isV = function isV(code) { 33500 return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6; 33501}; 33502var isT = function isT(code) { 33503 return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb; 33504}; 33505var isTone = function isTone(code) { 33506 return 0x302e <= code && code <= 0x302f; 33507}; 33508var isLVT = function isLVT(code) { 33509 return HANGUL_BASE <= code && code <= HANGUL_END; 33510}; 33511var isLV = function isLV(code) { 33512 return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0; 33513}; 33514var isCombiningL = function isCombiningL(code) { 33515 return L_BASE <= code && code <= L_END; 33516}; 33517var isCombiningV = function isCombiningV(code) { 33518 return V_BASE <= code && code <= V_END; 33519}; 33520var isCombiningT = function isCombiningT(code) { 33521 return T_BASE + 1 && 1 <= code && code <= T_END; 33522}; 33523 33524// Character categories 33525var X = 0; // Other character 33526var L = 1; // Leading consonant 33527var V = 2; // Medial vowel 33528var T = 3; // Trailing consonant 33529var LV = 4; // Composed <LV> syllable 33530var LVT = 5; // Composed <LVT> syllable 33531var M = 6; // Tone mark 33532 33533// This function classifies a character using the above categories. 33534function getType(code) { 33535 if (isL(code)) { 33536 return L; 33537 } 33538 if (isV(code)) { 33539 return V; 33540 } 33541 if (isT(code)) { 33542 return T; 33543 } 33544 if (isLV(code)) { 33545 return LV; 33546 } 33547 if (isLVT(code)) { 33548 return LVT; 33549 } 33550 if (isTone(code)) { 33551 return M; 33552 } 33553 return X; 33554} 33555 33556// State machine actions 33557var NO_ACTION = 0; 33558var DECOMPOSE = 1; 33559var COMPOSE = 2; 33560var TONE_MARK = 4; 33561var INVALID = 5; 33562 33563// Build a state machine that accepts valid syllables, and applies actions along the way. 33564// The logic this is implementing is documented at the top of the file. 33565var STATE_TABLE$1 = [ 33566// X L V T LV LVT M 33567// State 0: start state 33568[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]], 33569 33570// State 1: <L> 33571[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]], 33572 33573// State 2: <L,V> or <LV> 33574[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]], 33575 33576// State 3: <L,V,T> or <LVT> 33577[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]]; 33578 33579function getGlyph(font, code, features) { 33580 return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features); 33581} 33582 33583function decompose(glyphs, i, font) { 33584 var glyph = glyphs[i]; 33585 var code = glyph.codePoints[0]; 33586 33587 var s = code - HANGUL_BASE; 33588 var t = T_BASE + s % T_COUNT; 33589 s = s / T_COUNT | 0; 33590 var l = L_BASE + s / V_COUNT | 0; 33591 var v = V_BASE + s % V_COUNT; 33592 33593 // Don't decompose if all of the components are not available 33594 if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) { 33595 return i; 33596 } 33597 33598 // Replace the current glyph with decomposed L, V, and T glyphs, 33599 // and apply the proper OpenType features to each component. 33600 var ljmo = getGlyph(font, l, glyph.features); 33601 ljmo.features.ljmo = true; 33602 33603 var vjmo = getGlyph(font, v, glyph.features); 33604 vjmo.features.vjmo = true; 33605 33606 var insert = [ljmo, vjmo]; 33607 33608 if (t > T_BASE) { 33609 var tjmo = getGlyph(font, t, glyph.features); 33610 tjmo.features.tjmo = true; 33611 insert.push(tjmo); 33612 } 33613 33614 glyphs.splice.apply(glyphs, [i, 1].concat(insert)); 33615 return i + insert.length - 1; 33616} 33617 33618function compose(glyphs, i, font) { 33619 var glyph = glyphs[i]; 33620 var code = glyphs[i].codePoints[0]; 33621 var type = getType(code); 33622 33623 var prev = glyphs[i - 1].codePoints[0]; 33624 var prevType = getType(prev); 33625 33626 // Figure out what type of syllable we're dealing with 33627 var lv = void 0, 33628 ljmo = void 0, 33629 vjmo = void 0, 33630 tjmo = void 0; 33631 if (prevType === LV && type === T) { 33632 // <LV,T> 33633 lv = prev; 33634 tjmo = glyph; 33635 } else { 33636 if (type === V) { 33637 // <L,V> 33638 ljmo = glyphs[i - 1]; 33639 vjmo = glyph; 33640 } else { 33641 // <L,V,T> 33642 ljmo = glyphs[i - 2]; 33643 vjmo = glyphs[i - 1]; 33644 tjmo = glyph; 33645 } 33646 33647 var l = ljmo.codePoints[0]; 33648 var v = vjmo.codePoints[0]; 33649 33650 // Make sure L and V are combining characters 33651 if (isCombiningL(l) && isCombiningV(v)) { 33652 lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT; 33653 } 33654 } 33655 33656 var t = tjmo && tjmo.codePoints[0] || T_BASE; 33657 if (lv != null && (t === T_BASE || isCombiningT(t))) { 33658 var s = lv + (t - T_BASE); 33659 33660 // Replace with a composed glyph if supported by the font, 33661 // otherwise apply the proper OpenType features to each component. 33662 if (font.hasGlyphForCodePoint(s)) { 33663 var del = prevType === V ? 3 : 2; 33664 glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features)); 33665 return i - del + 1; 33666 } 33667 } 33668 33669 // Didn't compose (either a non-combining component or unsupported by font). 33670 if (ljmo) { 33671 ljmo.features.ljmo = true; 33672 } 33673 if (vjmo) { 33674 vjmo.features.vjmo = true; 33675 } 33676 if (tjmo) { 33677 tjmo.features.tjmo = true; 33678 } 33679 33680 if (prevType === LV) { 33681 // Sequence was originally <L,V>, which got combined earlier. 33682 // Either the T was non-combining, or the LVT glyph wasn't supported. 33683 // Decompose the glyph again and apply OT features. 33684 decompose(glyphs, i - 1, font); 33685 return i + 1; 33686 } 33687 33688 return i; 33689} 33690 33691function getLength(code) { 33692 switch (getType(code)) { 33693 case LV: 33694 case LVT: 33695 return 1; 33696 case V: 33697 return 2; 33698 case T: 33699 return 3; 33700 } 33701} 33702 33703function reorderToneMark(glyphs, i, font) { 33704 var glyph = glyphs[i]; 33705 var code = glyphs[i].codePoints[0]; 33706 33707 // Move tone mark to the beginning of the previous syllable, unless it is zero width 33708 if (font.glyphForCodePoint(code).advanceWidth === 0) { 33709 return; 33710 } 33711 33712 var prev = glyphs[i - 1].codePoints[0]; 33713 var len = getLength(prev); 33714 33715 glyphs.splice(i, 1); 33716 return glyphs.splice(i - len, 0, glyph); 33717} 33718 33719function insertDottedCircle(glyphs, i, font) { 33720 var glyph = glyphs[i]; 33721 var code = glyphs[i].codePoints[0]; 33722 33723 if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) { 33724 var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); 33725 33726 // If the tone mark is zero width, insert the dotted circle before, otherwise after 33727 var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1; 33728 glyphs.splice(idx, 0, dottedCircle); 33729 i++; 33730 } 33731 33732 return i; 33733} 33734 33735var stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132,
33735133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132,
33735133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324,
337350, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 39
337356, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 39
337356, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592,
33735112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]]; 33736var accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true]; 33737var tags = [[], ["broken_cluster"], ["consonant_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable"], ["broken_cluster"], ["symbol_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["symbol_cluster"], [], ["symbol_cluster"], ["symbol_cluster"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], [], ["broken_cluster"], ["broken_cluster"], [], [], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["broken_cluster"], ["symbol_cluster"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], [], ["consonant_syllable"], ["consonant_syllable"], [], [], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], [], ["vowel_syllable"], ["vowel_syllable"], [], [], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], [], [], [], ["broken_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], [], ["standalone_cluster"], ["standalone_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], [], [], [], ["consonant_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], [], [], [], ["vowel_syllable"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], [], [], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], ["standalone_cluster"], [], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], [], [], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], [], [], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], [], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], [], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_clust
33737er"], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], [], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], [], [], [], [], ["consonant_syllable", "broken_cluster"], ["consonant_syllable", "broken_cluster"], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], [], [], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], ["consonant_syllable"], [], ["consonant_syllable"], ["consonant_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], ["vowel_syllable"], [], ["vowel_syllable"], ["vowel_syllable"], ["broken_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], ["standalone_cluster"], [], ["standalone_cluster"], ["standalone_cluster"], [], ["consonant_syllable"], ["vowel_syllable"], ["standalone_cluster"]]; 33738var indicMachine = { 33739 stateTable: stateTable, 33740 accepting: accepting, 33741 tags: tags 33742}; 33743 33744var categories = ["O", "IND", "S", "GB", "B", "FM", "CGJ", "VMAbv", "VMPst", "VAbv", "VPst", "CMBlw", "VPre", "VBlw", "H", "VMBlw", "CMAbv", "MBlw", "CS", "R", "SUB", "MPst", "MPre", "FAbv", "FPst", "FBlw", "SMAbv", "SMBlw", "VMPre", "ZWNJ", "ZWJ", "WJ", "VS", "N", "HN", "MAbv"]; 33745var decompositions$1 = { "2507": [2503, 2494], "2508": [2503, 2519], "2888": [2887, 2902], "2891": [2887, 2878], "2892": [2887, 2903], "3018": [3014, 3006], "3019": [3015, 3006], "3020": [3014, 3031], "3144": [3142, 3158], "3264": [3263, 3285], "3271": [3270, 3285], "3272": [3270, 3286], "3274": [3270, 3266], "3275": [3270, 3266, 3285], "3402": [3398, 3390], "3403": [3399, 3390], "3404": [3398, 3415], "3546": [3545, 3530], "3548": [3545, 3535], "3549": [3545, 3535, 3530], "3550": [3545, 3551], "3635": [3661, 3634], "3763": [3789, 3762], "3955": [3953, 3954], "3957": [3953, 3956], "3958": [4018, 3968], "3959": [4018, 3953, 3968], "3960": [4019, 3968], "3961": [4019, 3953, 3968], "3969": [3953, 3968], "6971": [6970, 6965], "6973": [6972, 6965], "6976": [6974, 6965], "6977": [6975, 6965], "6979": [6978, 6965], "69934": [69937, 69927], "69935": [69938, 69927], "70475": [70471, 70462], "70476": [70471, 70487], "70843": [70841, 70842], "70844": [70841, 70832], "70846": [70841, 70845], "71098": [71096, 71087], "71099": [71097, 71087] }; 33746var stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 2, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];
33747var accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]; 33748var tags$1 = [[], ["broken_cluster"], ["independent_cluster"], ["symbol_cluster"], ["standard_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], [], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["broken_cluster"], ["numeral_cluster"], ["broken_cluster"], ["independent_cluster"], ["symbol_cluster"], ["symbol_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["virama_terminated_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["standard_cluster"], ["broken_cluster"], ["broken_cluster"], ["numeral_cluster"], ["number_joiner_terminated_cluster"], ["standard_cluster"], ["standard_cluster"], ["numeral_cluster"]]; 33749var useData = { 33750 categories: categories, 33751 decompositions: decompositions$1, 33752 stateTable: stateTable$1, 33753 accepting: accepting$1, 33754 tags: tags$1 33755}; 33756 33757// Cateories used in the OpenType spec: 33758// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx 33759var CATEGORIES = { 33760 X: 1 << 0, 33761 C: 1 << 1, 33762 V: 1 << 2, 33763 N: 1 << 3, 33764 H: 1 << 4, 33765 ZWNJ: 1 << 5, 33766 ZWJ: 1 << 6, 33767 M: 1 << 7, 33768 SM: 1 << 8, 33769 VD: 1 << 9, 33770 A: 1 << 10, 33771 Placeholder: 1 << 11, 33772 Dotted_Circle: 1 << 12, 33773 RS: 1 << 13, // Register Shifter, used in Khmer OT spec. 33774 Coeng: 1 << 14, // Khmer-style Virama. 33775 Repha: 1 << 15, // Atomically-encoded logical or visual repha. 33776 Ra: 1 << 16, 33777 CM: 1 << 17, // Consonant-Medial. 33778 Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD). 33779}; 33780 33781// Visual positions in a syllable from left to right. 33782var POSITIONS = { 33783 Start: 1 << 0, 33784 33785 Ra_To_Become_Reph: 1 << 1, 33786 Pre_M: 1 << 2, 33787 Pre_C: 1 << 3, 33788 33789 Base_C: 1 << 4, 33790 After_Main: 1 << 5, 33791 33792 Above_C: 1 << 6, 33793 33794 Before_Sub: 1 << 7, 33795 Below_C: 1 << 8, 33796 After_Sub: 1 << 9, 33797 33798 Before_Post: 1 << 10, 33799 Post_C: 1 << 11, 33800 After_Post: 1 << 12, 33801 33802 Final_C: 1 << 13, 33803 SMVD: 1 << 14, 33804 33805 End: 1 << 15 33806}; 33807 33808var CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle; 33809var JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ; 33810var HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng; 33811 33812var INDIC_CONFIGS = { 33813 Default: { 33814 hasOldSpec: false, 33815 virama: 0, 33816 basePos: 'Last', 33817 rephPos: POSITIONS.Before_Post, 33818 rephMode: 'Implicit', 33819 blwfMode: 'Pre_And_Post' 33820 }, 33821 33822 Devanagari: { 33823 hasOldSpec: true, 33824 virama: 0x094D, 33825 basePos: 'Last', 33826 rephPos: POSITIONS.Before_Post, 33827 rephMode: 'Implicit', 33828 blwfMode: 'Pre_And_Post' 33829 }, 33830 33831 Bengali: { 33832 hasOldSpec: true, 33833 virama: 0x09CD, 33834 basePos: 'Last', 33835 rephPos: POSITIONS.After_Sub, 33836 rephMode: 'Implicit', 33837 blwfMode: 'Pre_And_Post' 33838 }, 33839 33840 Gurmukhi: { 33841 hasOldSpec: true, 33842 virama: 0x0A4D, 33843 basePos: 'Last', 33844 rephPos: POSITIONS.Before_Sub, 33845 rephMode: 'Implicit', 33846 blwfMode: 'Pre_And_Post' 33847 }, 33848 33849 Gujarati: { 33850 hasOldSpec: true, 33851 virama: 0x0ACD, 33852 basePos: 'Last', 33853 rephPos: POSITIONS.Before_Post, 33854 rephMode: 'Implicit', 33855 blwfMode: 'Pre_And_Post' 33856 }, 33857 33858 Oriya: { 33859 hasOldSpec: true, 33860 virama: 0x0B4D, 33861 basePos: 'Last', 33862 rephPos: POSITIONS.After_Main, 33863 rephMode: 'Implicit', 33864 blwfMode: 'Pre_And_Post' 33865 }, 33866 33867 Tamil: { 33868 hasOldSpec: true, 33869 virama: 0x0BCD, 33870 basePos: 'Last', 33871 rephPos: POSITIONS.After_Post, 33872 rephMode: 'Implicit', 33873 blwfMode: 'Pre_And_Post' 33874 }, 33875 33876 Telugu: { 33877 hasOldSpec: true, 33878 virama: 0x0C4D, 33879 basePos: 'Last', 33880 rephPos: POSITIONS.After_Post, 33881 rephMode: 'Explicit', 33882 blwfMode: 'Post_Only' 33883 }, 33884 33885 Kannada: { 33886 hasOldSpec: true, 33887 virama: 0x0CCD, 33888 basePos: 'Last', 33889 rephPos: POSITIONS.After_Post, 33890 rephMode: 'Implicit', 33891 blwfMode: 'Post_Only' 33892 }, 33893 33894 Malayalam: { 33895 hasOldSpec: true, 33896 virama: 0x0D4D, 33897 basePos: 'Last', 33898 rephPos: POSITIONS.After_Main, 33899 rephMode: 'Log_Repha', 33900 blwfMode: 'Pre_And_Post' 33901 }, 33902 33903 // Handled by UniversalShaper 33904 // Sinhala: { 33905 // hasOldSpec: false, 33906 // virama: 0x0DCA, 33907 // basePos: 'Last_Sinhala', 33908 // rephPos: POSITIONS.After_Main, 33909 // rephMode: 'Explicit', 33910 // blwfMode: 'Pre_And_Post' 33911 // }, 33912 33913 Khmer: { 33914 hasOldSpec: false, 33915 virama: 0x17D2, 33916 basePos: 'First', 33917 rephPos: POSITIONS.Ra_To_Become_Reph, 33918 rephMode: 'Vis_Repha', 33919 blwfMode: 'Pre_And_Post' 33920 } 33921}; 33922 33923// Additional decompositions that aren't in Unicode 33924var INDIC_DECOMPOSITIONS = { 33925 // Khmer
33926 0x17BE: [0x17C1, 0x17BE], 33927 0x17BF: [0x17C1, 0x17BF], 33928 0x17C0: [0x17C1, 0x17C0], 33929 0x17C4: [0x17C1, 0x17C4], 33930 0x17C5: [0x17C1, 0x17C5] 33931}; 33932 33933var _class$6; 33934var _temp$2; 33935var decompositions = useData.decompositions; 33936 33937var trie$1 = new UnicodeTrie(Buffer("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","base64")); 33938var stateMachine = new StateMachine(indicMachine); 33939 33940/** 33941 * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc. 33942 * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc 33943 */ 33944var IndicShaper = (_temp$2 = _class$6 = function (_DefaultShaper) { 33945 _inherits(IndicShaper, _DefaultShaper); 33946 33947 function IndicShaper() { 33948 _classCallCheck(this, IndicShaper); 33949 33950 return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments)); 33951 } 33952 33953 IndicShaper.planFeatures = function planFeatures(plan) { 33954 plan.addStage(setupSyllables); 33955 33956 plan.addStage(['locl', 'ccmp']); 33957 33958 plan.addStage(initialReordering); 33959 33960 plan.addStage('nukt'); 33961 plan.addStage('akhn'); 33962 plan.addStage('rphf', false); 33963 plan.addStage('rkrf'); 33964 plan.addStage('pref', false); 33965 plan.addStage('blwf', false); 33966 plan.addStage('abvf', false); 33967 plan.addStage('half', false); 33968 plan.addStage('pstf', false); 33969 plan.addStage('vatu'); 33970 plan.addStage('cjct'); 33971 plan.addStage('cfar', false); 33972 33973 plan.addStage(finalReordering); 33974 33975 plan.addStage({ 33976 local: ['init'], 33977 global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig'] 33978 }); 33979 33980 // Setup the indic config for the selected script 33981 plan.unicodeScript = fromOpenType(plan.script); 33982 plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default; 33983 plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; 33984 33985 // TODO: turn off kern (Khmer) and liga features. 33986 }; 33987 33988 IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) { 33989 var _loop = function _loop(i) { 33990 var codepoint = glyphs[i].codePoints[0]; 33991 var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions[codepoint]; 33992 if (d) { 33993 var decomposed = d.map(function (c) { 33994 var g = plan.font.glyphForCodePoint(c); 33995 return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features); 33996 }); 33997 33998 glyphs.splice.apply(glyphs, [i, 1].concat(decomposed)); 33999 } 34000 }; 34001 34002 // Decompose split matras 34003 // TODO: do this in a more general unicode normalizer 34004 for (var i = glyphs.length - 1; i >= 0; i--) { 34005 _loop(i); 34006 } 34007 }; 34008 34009 return IndicShaper; 34010}(DefaultShaper), _class$6.zeroMarkWidths = 'NONE', _temp$2); 34011function indicCategory(glyph) { 34012 return trie$1.get(glyph.codePoints[0]) >> 8; 34013} 34014 34015function indicPosition(glyph) { 34016 return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff); 34017} 34018 34019var IndicInfo = function IndicInfo(category, position, syllableType, syllable) { 34020 _classCallCheck(this, IndicInfo); 34021 34022 this.category = category; 34023 this.position = position; 34024 this.syllableType = syllableType; 34025 this.syllable = syllable; 34026}; 34027 34028function setupSyllables(font, glyphs) { 34029 var syllable = 0; 34030 var last = 0; 34031 for (var _iterator = stateMachine.match(glyphs.map(indicCategory)), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 34032 var _ref; 34033 34034 if (_isArray) { 34035 if (_i >= _iterator.length) break; 34036 _ref = _iterator[_i++]; 34037 } else { 34038 _i = _iterator.next(); 34039 if (_i.done) break; 34040 _ref = _i.value; 34041 } 34042 34043 var _ref2 = _ref, 34044 start = _ref2[0], 34045 end = _ref2[1], 34046 tags = _ref2[2]; 34047 34048 if (start > last) { 34049 ++syllable; 34050 for (var _i2 = last; _i2 < start; _i2++) { 34051 glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable); 34052 } 34053 } 34054 34055 ++syllable; 34056 34057 // Create shaper info 34058 for (var _i3 = start; _i3 <= end; _i3++) { 34059 glyphs[_i3].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i3]), indicPosition(glyphs[_i3]), tags[0], syllable); 34060 } 34061 34062 last = end + 1; 34063 } 34064 34065 if (last < glyphs.length) { 34066 ++syllable; 34067 for (var i = last; i < glyphs.length; i++) { 34068 glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable); 34069 } 34070 } 34071} 34072 34073function isConsonant(glyph) { 34074 return glyph.shaperInfo.category & CONSONANT_FLAGS; 34075} 34076 34077function isJoiner(glyph) { 34078 return glyph.shaperInfo.category & JOINER_FLAGS; 34079} 34080 34081function isHalantOrCoeng(glyph) { 34082 return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS; 34083} 34084 34085function wouldSubstitute(glyphs, feature) { 34086 for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 34087 var _glyph$features; 34088 34089 var _ref3; 34090 34091 if (_isArray2) { 34092 if (_i4 >= _iterator2.length) break; 34093 _ref3 = _iterator2[_i4++]; 34094 } else { 34095 _i4 = _iterator2.next(); 34096 if (_i4.done) break; 34097 _ref3 = _i4.value; 34098 } 34099 34100 var glyph = _ref3; 34101 34102 glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features); 34103 } 34104 34105 var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor; 34106 GSUB.applyFeatures([feature], glyphs); 34107 34108 return glyphs.length === 1; 34109} 34110 34111function consonantPosition(font, consonant, virama) { 34112 var glyphs = [virama, consonant, virama]; 34113 if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) { 34114 return POSITIONS.Below_C; 34115 } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) { 34116 return POSITIONS.Post_C; 34117 } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) { 34118 return POSITIONS.Post_C; 34119 } 34120 34121 return POSITIONS.Base_C; 34122} 34123 34124function initialReordering(font, glyphs, plan) { 34125 var indicConfig = plan.indicConfig; 34126 var features = font._layoutEngine.engine.GSUBProcessor.features; 34127 34128 var dottedCircle = font.glyphForCodePoint(0x25cc).id; 34129 var virama = font.glyphForCodePoint(indicConfig.virama).id; 34130 if (virama) { 34131 var info = new GlyphInfo(font, virama, [indicConfig.virama]); 34132 for (var i = 0; i < glyphs.length; i++) { 34133 if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) { 34134 glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info); 34135 } 34136 } 34137 } 34138 34139 for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) { 34140 var _glyphs$start$shaperI = glyphs[start].shaperInfo, 34141 category = _glyphs$start$shaperI.category, 34142 syllableType = _glyphs$start$shaperI.syllableType; 34143 34144 34145 if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') { 34146 continue; 34147 } 34148 34149 if (syllableType === 'broken_cluster' && dottedCircle) { 34150 var g = new GlyphInfo(font, dottedCircle, [0x25cc]); 34151 g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); 34152
34153 // Insert after possible Repha. 34154 var _i5 = start; 34155 while (_i5 < end && glyphs[_i5].shaperInfo.category === CATEGORIES.Repha) { 34156 _i5++; 34157 } 34158 34159 glyphs.splice(_i5++, 0, g); 34160 end++; 34161 } 34162 34163 // 1. Find base consonant: 34164 // 34165 // The shaping engine finds the base consonant of the syllable, using the 34166 // following algorithm: starting from the end of the syllable, move backwards 34167 // until a consonant is found that does not have a below-base or post-base 34168 // form (post-base forms have to follow below-base forms), or that is not a 34169 // pre-base reordering Ra, or arrive at the first consonant. The consonant 34170 // stopped at will be the base. 34171 34172 var base = end; 34173 var limit = start; 34174 var hasReph = false; 34175 34176 // If the syllable starts with Ra + Halant (in a script that has Reph) 34177 // and has more than one consonant, Ra is excluded from candidates for 34178 // base consonants. 34179 if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) { 34180 // See if it matches the 'rphf' feature. 34181 var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()]; 34182 if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) { 34183 limit += 2; 34184 while (limit < end && isJoiner(glyphs[limit])) { 34185 limit++; 34186 } 34187 base = start; 34188 hasReph = true; 34189 } 34190 } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) { 34191 limit++; 34192 while (limit < end && isJoiner(glyphs[limit])) { 34193 limit++; 34194 } 34195 base = start; 34196 hasReph = true; 34197 } 34198 34199 switch (indicConfig.basePos) { 34200 case 'Last': 34201 { 34202 // starting from the end of the syllable, move backwards 34203 var _i6 = end; 34204 var seenBelow = false; 34205 34206 do { 34207 var _info = glyphs[--_i6].shaperInfo; 34208 34209 // until a consonant is found 34210 if (isConsonant(glyphs[_i6])) { 34211 // that does not have a below-base or post-base form 34212 // (post-base forms have to follow below-base forms), 34213 if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) { 34214 base = _i6; 34215 break; 34216 } 34217 34218 // or that is not a pre-base reordering Ra, 34219 // 34220 // IMPLEMENTATION NOTES: 34221 // 34222 // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped 34223 // by the logic above already. 34224 // 34225 34226 // or arrive at the first consonant. The consonant stopped at will 34227 // be the base. 34228 if (_info.position === POSITIONS.Below_C) { 34229 seenBelow = true; 34230 } 34231 34232 base = _i6; 34233 } else if (start < _i6 && _info.category === CATEGORIES.ZWJ && glyphs[_i6 - 1].shaperInfo.category === CATEGORIES.H) { 34234 // A ZWJ after a Halant stops the base search, and requests an explicit 34235 // half form. 34236 // A ZWJ before a Halant, requests a subjoined form instead, and hence 34237 // search continues. This is particularly important for Bengali 34238 // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya. 34239 break; 34240 } 34241 } while (_i6 > limit); 34242 break; 34243 } 34244 34245 case 'First': 34246 { 34247 // The first consonant is always the base. 34248 base = start; 34249 34250 // Mark all subsequent consonants as below. 34251 for (var _i7 = base + 1; _i7 < end; _i7++) { 34252 if (isConsonant(glyphs[_i7])) { 34253 glyphs[_i7].shaperInfo.position = POSITIONS.Below_C; 34254 } 34255 } 34256 } 34257 } 34258 34259 // If the syllable starts with Ra + Halant (in a script that has Reph) 34260 // and has more than one consonant, Ra is excluded from candidates for 34261 // base consonants. 34262 // 34263 // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ) 34264 if (hasReph && base === start && limit - base <= 2) { 34265 hasReph = false;
34266 } 34267 34268 // 2. Decompose and reorder Matras: 34269 // 34270 // Each matra and any syllable modifier sign in the cluster are moved to the 34271 // appropriate position relative to the consonant(s) in the cluster. The 34272 // shaping engine decomposes two- or three-part matras into their constituent 34273 // parts before any repositioning. Matra characters are classified by which 34274 // consonant in a conjunct they have affinity for and are reordered to the 34275 // following positions: 34276 // 34277 // o Before first half form in the syllable 34278 // o After subjoined consonants 34279 // o After post-form consonant 34280 // o After main consonant (for above marks) 34281 // 34282 // IMPLEMENTATION NOTES: 34283 // 34284 // The normalize() routine has already decomposed matras for us, so we don't 34285 // need to worry about that. 34286 34287 // 3. Reorder marks to canonical order: 34288 // 34289 // Adjacent nukta and halant or nukta and vedic sign are always repositioned 34290 // if necessary, so that the nukta is first. 34291 // 34292 // IMPLEMENTATION NOTES: 34293 // 34294 // We don't need to do this: the normalize() routine already did this for us. 34295 34296 // Reorder characters 34297 34298 for (var _i8 = start; _i8 < base; _i8++) { 34299 var _info2 = glyphs[_i8].shaperInfo; 34300 _info2.position = Math.min(POSITIONS.Pre_C, _info2.position); 34301 } 34302 34303 if (base < end) { 34304 glyphs[base].shaperInfo.position = POSITIONS.Base_C; 34305 } 34306 34307 // Mark final consonants. A final consonant is one appearing after a matra, 34308 // like in Khmer. 34309 for (var _i9 = base + 1; _i9 < end; _i9++) { 34310 if (glyphs[_i9].shaperInfo.category === CATEGORIES.M) { 34311 for (var j = _i9 + 1; j < end; j++) { 34312 if (isConsonant(glyphs[j])) { 34313 glyphs[j].shaperInfo.position = POSITIONS.Final_C; 34314 break; 34315 } 34316 } 34317 break; 34318 } 34319 } 34320 34321 // Handle beginning Ra 34322 if (hasReph) { 34323 glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph; 34324 } 34325 34326 // For old-style Indic script tags, move the first post-base Halant after 34327 // last consonant. 34328 // 34329 // Reports suggest that in some scripts Uniscribe does this only if there 34330 // is *not* a Halant after last consonant already (eg. Kannada), while it 34331 // does it unconditionally in other scripts (eg. Malayalam). We don't 34332 // currently know about other scripts, so we single out Malayalam for now. 34333 // 34334 // Kannada test case: 34335 // U+0C9A,U+0CCD,U+0C9A,U+0CCD 34336 // With some versions of Lohit Kannada. 34337 // https://bugs.freedesktop.org/show_bug.cgi?id=59118 34338 // 34339 // Malayalam test case: 34340 // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D 34341 // With lohit-ttf-20121122/Lohit-Malayalam.ttf 34342 if (plan.isOldSpec) { 34343 var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam'; 34344 for (var _i10 = base + 1; _i10 < end; _i10++) { 34345 if (glyphs[_i10].shaperInfo.category === CATEGORIES.H) { 34346 var _j = void 0; 34347 for (_j = end - 1; _j > _i10; _j--) { 34348 if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) { 34349 break; 34350 } 34351 } 34352 34353 if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i10) { 34354 // Move Halant to after last consonant. 34355 var t = glyphs[_i10]; 34356 glyphs.splice.apply(glyphs, [_i10, 0].concat(glyphs.splice(_i10 + 1, _j - _i10))); 34357 glyphs[_j] = t; 34358 } 34359 34360 break; 34361 } 34362 } 34363 } 34364 34365 // Attach misc marks to previous char to move with them. 34366 var lastPos = POSITIONS.Start; 34367 for (var _i11 = start; _i11 < end; _i11++) { 34368 var _info3 = glyphs[_i11].shaperInfo; 34369 if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) { 34370 _info3.position = lastPos; 34371 if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) { 34372 // Uniscribe doesn't move the Halant with Left Matra. 34373 // TEST: U+092B,U+093F,U+094DE 34374 // We follow. This is important for the Sinhala 34375 // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA 34376 // where U+0DD9 is a left matra and U+0DCA is the virama. 34377 // We don't want to move the virama with the left matra. 34378 // TEST: U+0D9A,U+0DDA 34379 for (var _j2 = _i11; _j2 > start; _j2--) { 34380 if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) { 34381 _info3.position = glyphs[_j2 - 1].shaperInfo.position; 34382 break; 34383 } 34384 } 34385 } 34386 } else if (_info3.position !== POSITIONS.SMVD) {
34387 lastPos = _info3.position; 34388 } 34389 } 34390 34391 // For post-base consonants let them own anything before them 34392 // since the last consonant or matra. 34393 var last = base; 34394 for (var _i12 = base + 1; _i12 < end; _i12++) { 34395 if (isConsonant(glyphs[_i12])) { 34396 for (var _j3 = last + 1; _j3 < _i12; _j3++) { 34397 if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) { 34398 glyphs[_j3].shaperInfo.position = glyphs[_i12].shaperInfo.position; 34399 } 34400 } 34401 last = _i12; 34402 } else if (glyphs[_i12].shaperInfo.category === CATEGORIES.M) { 34403 last = _i12; 34404 } 34405 } 34406 34407 var arr = glyphs.slice(start, end); 34408 arr.sort(function (a, b) { 34409 return a.shaperInfo.position - b.shaperInfo.position; 34410 }); 34411 glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); 34412 34413 // Find base again 34414 for (var _i13 = start; _i13 < end; _i13++) { 34415 if (glyphs[_i13].shaperInfo.position === POSITIONS.Base_C) { 34416 base = _i13; 34417 break; 34418 } 34419 } 34420 34421 // Setup features now 34422 34423 // Reph 34424 for (var _i14 = start; _i14 < end && glyphs[_i14].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i14++) { 34425 glyphs[_i14].features.rphf = true; 34426 } 34427 34428 // Pre-base 34429 var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post'; 34430 for (var _i15 = start; _i15 < base; _i15++) { 34431 glyphs[_i15].features.half = true; 34432 if (blwf) { 34433 glyphs[_i15].features.blwf = true; 34434 } 34435 } 34436 34437 // Post-base 34438 for (var _i16 = base + 1; _i16 < end; _i16++) { 34439 glyphs[_i16].features.abvf = true; 34440 glyphs[_i16].features.pstf = true; 34441 glyphs[_i16].features.blwf = true; 34442 } 34443 34444 if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') { 34445 // Old-spec eye-lash Ra needs special handling. From the 34446 // spec: 34447 // 34448 // "The feature 'below-base form' is applied to consonants 34449 // having below-base forms and following the base consonant. 34450 // The exception is vattu, which may appear below half forms 34451 // as well as below the base glyph. The feature 'below-base 34452 // form' will be applied to all such occurrences of Ra as well." 34453 // 34454 // Test case: U+0924,U+094D,U+0930,U+094d,U+0915 34455 // with Sanskrit 2003 font. 34456 // 34457 // However, note that Ra,Halant,ZWJ is the correct way to 34458 // request eyelash form of Ra, so we wouldbn't inhibit it 34459 // in that sequence. 34460 // 34461 // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915 34462 for (var _i17 = start; _i17 + 1 < base; _i17++) { 34463 if (glyphs[_i17].shaperInfo.category === CATEGORIES.Ra && glyphs[_i17 + 1].shaperInfo.category === CATEGORIES.H && (_i17 + 1 === base || glyphs[_i17 + 2].shaperInfo.category === CATEGORIES.ZWJ)) { 34464 glyphs[_i17].features.blwf = true; 34465 glyphs[_i17 + 1].features.blwf = true; 34466 } 34467 } 34468 } 34469 34470 var prefLen = 2; 34471 if (features.pref && base + prefLen < end) { 34472 // Find a Halant,Ra sequence and mark it for pre-base reordering processing. 34473 for (var _i18 = base + 1; _i18 + prefLen - 1 < end; _i18++) { 34474 var _g2 = [glyphs[_i18].copy(), glyphs[_i18 + 1].copy()]; 34475 if (wouldSubstitute(_g2, 'pref')) { 34476 for (var _j4 = 0; _j4 < prefLen; _j4++) { 34477 glyphs[_i18++].features.pref = true; 34478 } 34479 34480 // Mark the subsequent stuff with 'cfar'. Used in Khmer. 34481 // Read the feature spec. 34482 // This allows distinguishing the following cases with MS Khmer fonts: 34483 // U+1784,U+17D2,U+179A,U+17D2,U+1782 34484 // U+1784,U+17D2,U+1782,U+17D2,U+179A 34485 if (features.cfar) { 34486 for (; _i18 < end; _i18++) { 34487 glyphs[_i18].features.cfar = true; 34488 } 34489 } 34490 34491 break; 34492 } 34493 } 34494 } 34495 34496 // Apply ZWJ/ZWNJ effects 34497 for (var _i19 = start + 1; _i19 < end; _i19++) { 34498 if (isJoiner(glyphs[_i19])) { 34499 var nonJoiner = glyphs[_i19].shaperInfo.category === CATEGORIES.ZWNJ; 34500 var _j5 = _i19; 34501 34502 do { 34503 _j5--; 34504 34505 // ZWJ/ZWNJ should disable CJCT. They do that by simply 34506 // being there, since we don't skip them for the CJCT 34507 // feature (ie. F_MANUAL_ZWJ) 34508
34509 // A ZWNJ disables HALF. 34510 if (nonJoiner) { 34511 delete glyphs[_j5].features.half; 34512 } 34513 } while (_j5 > start && !isConsonant(glyphs[_j5])); 34514 } 34515 } 34516 } 34517} 34518 34519function finalReordering(font, glyphs, plan) { 34520 var indicConfig = plan.indicConfig; 34521 var features = font._layoutEngine.engine.GSUBProcessor.features; 34522 34523 for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) { 34524 // 4. Final reordering: 34525 // 34526 // After the localized forms and basic shaping forms GSUB features have been 34527 // applied (see below), the shaping engine performs some final glyph 34528 // reordering before applying all the remaining font features to the entire 34529 // cluster. 34530 34531 var tryPref = !!features.pref; 34532 34533 // Find base again 34534 var base = start; 34535 for (; base < end; base++) { 34536 if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) { 34537 if (tryPref && base + 1 < end) { 34538 for (var i = base + 1; i < end; i++) { 34539 if (glyphs[i].features.pref) { 34540 if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) { 34541 // Ok, this was a 'pref' candidate but didn't form any. 34542 // Base is around here... 34543 base = i; 34544 while (base < end && isHalantOrCoeng(glyphs[base])) { 34545 base++; 34546 } 34547 glyphs[base].shaperInfo.position = POSITIONS.BASE_C; 34548 tryPref = false; 34549 } 34550 break; 34551 } 34552 } 34553 } 34554 34555 // For Malayalam, skip over unformed below- (but NOT post-) forms. 34556 if (plan.unicodeScript === 'Malayalam') { 34557 for (var _i20 = base + 1; _i20 < end; _i20++) { 34558 while (_i20 < end && isJoiner(glyphs[_i20])) { 34559 _i20++; 34560 } 34561 34562 if (_i20 === end || !isHalantOrCoeng(glyphs[_i20])) { 34563 break; 34564 } 34565 34566 _i20++; // Skip halant. 34567 while (_i20 < end && isJoiner(glyphs[_i20])) { 34568 _i20++; 34569 } 34570 34571 if (_i20 < end && isConsonant(glyphs[_i20]) && glyphs[_i20].shaperInfo.position === POSITIONS.Below_C) { 34572 base = _i20; 34573 glyphs[base].shaperInfo.position = POSITIONS.Base_C; 34574 } 34575 } 34576 } 34577 34578 if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) { 34579 base--; 34580 } 34581 break; 34582 } 34583 } 34584 34585 if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) { 34586 base--; 34587 } 34588 34589 if (base < end) { 34590 while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) { 34591 base--; 34592 } 34593 } 34594 34595 // o Reorder matras: 34596 // 34597 // If a pre-base matra character had been reordered before applying basic 34598 // features, the glyph can be moved closer to the main consonant based on 34599 // whether half-forms had been formed. Actual position for the matra is 34600 // defined as âafter last standalone halant glyph, after initial matra 34601 // position and before the main consonantâ. If ZWJ or ZWNJ follow this 34602 // halant, position is moved after it. 34603 // 34604 34605 if (start + 1 < end && start < base) { 34606 // Otherwise there can't be any pre-base matra characters. 34607 // If we lost track of base, alas, position before last thingy. 34608 var newPos = base === end ? base - 2 : base - 1; 34609 34610 // Malayalam / Tamil do not have "half" forms or explicit virama forms. 34611 // The glyphs formed by 'half' are Chillus or ligated explicit viramas. 34612 // We want to position matra after them. 34613 if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { 34614 while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) { 34615 newPos--; 34616 } 34617 34618 // If we found no Halant we are done. 34619 // Otherwise only proceed if the Halant does 34620 // not belong to the Matra itself! 34621 if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) { 34622 // If ZWJ or ZWNJ follow this halant, position is moved after it. 34623 if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) { 34624 newPos++; 34625 } 34626 } else { 34627 newPos = start; // No move. 34628 } 34629 } 34630 34631 if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) { 34632 // Now go see if there's actually any matras... 34633 for (var _i21 = newPos; _i21 > start; _i21--) { 34634 if (glyphs[_i21 - 1].shaperInfo.position === POSITIONS.Pre_M) { 34635 var oldPos = _i21 - 1; 34636 if (oldPos < base && base <= newPos) { 34637 // Shouldn't actually happen. 34638 base--; 34639 } 34640 34641 var tmp = glyphs[oldPos]; 34642 glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos))); 34643 glyphs[newPos] = tmp; 34644 34645 newPos--; 34646 } 34647 } 34648 } 34649 } 34650 34651 // o Reorder reph: 34652 // 34653 // Rephâs original position is always at the beginning of the syllable, 34654 // (i.e. it is not reordered at the character reordering stage). However, 34655 // it will be reordered according to the basic-forms shaping results. 34656 // Possible positions for reph, depending on the script, are; after main, 34657 // before post-base consonant forms, and after post-base consonant forms. 34658 34659 // Two cases: 34660 // 34661 // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then 34662 // we should only move it if the sequence ligated to the repha form. 34663 // 34664 // - If repha is encoded separately and in the logical position, we should only 34665 // move it if it did NOT ligate. If it ligated, it's probably the font trying 34666 // to make it work without the reordering. 34667 if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) { 34668 var newRephPos = void 0; 34669 var rephPos = indicConfig.rephPos; 34670 var found = false;
34671 34672 // 1. If reph should be positioned after post-base consonant forms, 34673 // proceed to step 5. 34674 if (rephPos !== POSITIONS.After_Post) { 34675 // 2. If the reph repositioning class is not after post-base: target 34676 // position is after the first explicit halant glyph between the 34677 // first post-reph consonant and last main consonant. If ZWJ or ZWNJ 34678 // are following this halant, position is moved after it. If such 34679 // position is found, this is the target position. Otherwise, 34680 // proceed to the next step. 34681 // 34682 // Note: in old-implementation fonts, where classifications were 34683 // fixed in shaping engine, there was no case where reph position 34684 // will be found on this step. 34685 newRephPos = start + 1; 34686 while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) { 34687 newRephPos++; 34688 } 34689 34690 if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) { 34691 // ->If ZWJ or ZWNJ are following this halant, position is moved after it. 34692 if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) { 34693 newRephPos++; 34694 } 34695 34696 found = true; 34697 } 34698 34699 // 3. If reph should be repositioned after the main consonant: find the 34700 // first consonant not ligated with main, or find the first 34701 // consonant that is not a potential pre-base reordering Ra. 34702 if (!found && rephPos === POSITIONS.After_Main) { 34703 newRephPos = base; 34704 while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) { 34705 newRephPos++; 34706 } 34707 34708 found = newRephPos < end; 34709 } 34710 34711 // 4. If reph should be positioned before post-base consonant, find 34712 // first post-base classified consonant not ligated with main. If no 34713 // consonant is found, the target position should be before the 34714 // first matra, syllable modifier sign or vedic sign. 34715 // 34716 // This is our take on what step 4 is trying to say (and failing, BADLY). 34717 if (!found && rephPos === POSITIONS.After_Sub) { 34718 newRephPos = base; 34719 while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) { 34720 newRephPos++; 34721 } 34722 34723 found = newRephPos < end; 34724 } 34725 } 34726 34727 // 5. If no consonant is found in steps 3 or 4, move reph to a position 34728 // immediately before the first post-base matra, syllable modifier 34729 // sign or vedic sign that has a reordering class after the intended 34730 // reph position. For example, if the reordering position for reph 34731 // is post-main, it will skip above-base matras that also have a 34732 // post-main position. 34733 if (!found) { 34734 // Copied from step 2. 34735 newRephPos = start + 1; 34736 while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) { 34737 newRephPos++; 34738 } 34739 34740 if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) { 34741 // ->If ZWJ or ZWNJ are following this halant, position is moved after it. 34742 if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) { 34743 newRephPos++; 34744 } 34745 34746 found = true; 34747 } 34748 } 34749 34750 // 6. Otherwise, reorder reph to the end of the syllable. 34751 if (!found) { 34752 newRephPos = end - 1; 34753 while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) { 34754 newRephPos--; 34755 } 34756 34757 // If the Reph is to be ending up after a Matra,Halant sequence, 34758 // position it before that Halant so it can interact with the Matra. 34759 // However, if it's a plain Consonant,Halant we shouldn't do that. 34760 // Uniscribe doesn't do this. 34761 // TEST: U+0930,U+094D,U+0915,U+094B,U+094D 34762 if (isHalantOrCoeng(glyphs[newRephPos])) { 34763 for (var _i22 = base + 1; _i22 < newRephPos; _i22++) { 34764 if (glyphs[_i22].shaperInfo.category === CATEGORIES.M) { 34765 newRephPos--; 34766 } 34767 } 34768 } 34769 } 34770 34771 var reph = glyphs[start]; 34772 glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start))); 34773 glyphs[newRephPos] = reph; 34774 34775 if (start < base && base <= newRephPos) { 34776 base--; 34777 } 34778 } 34779 34780 // o Reorder pre-base reordering consonants: 34781 // 34782 // If a pre-base reordering consonant is found, reorder it according to 34783 // the following rules: 34784 if (tryPref && base + 1 < end) { 34785 for (var _i23 = base + 1; _i23 < end; _i23++) { 34786 if (glyphs[_i23].features.pref) { 34787 // 1. Only reorder a glyph produced by substitution during application 34788 // of the <pref> feature. (Note that a font may shape a Ra consonant with 34789 // the feature generally but block it in certain contexts.) 34790 34791 // Note: We just check that something got substituted. We don't check that 34792 // the <pref> feature actually did it... 34793 // 34794 // Reorder pref only if it ligated. 34795 if (glyphs[_i23].isLigated && !glyphs[_i23].isMultiplied) { 34796 // 2. Try to find a target position the same way as for pre-base matra. 34797 // If it is found, reorder pre-base consonant glyph. 34798 // 34799 // 3. If position is not found, reorder immediately before main 34800 // consonant. 34801 var _newPos = base; 34802 34803 // Malayalam / Tamil do not have "half" forms or explicit virama forms. 34804 // The glyphs formed by 'half' are Chillus or ligated explicit viramas. 34805 // We want to position matra after them. 34806 if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') { 34807 while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) { 34808 _newPos--; 34809 } 34810 34811 // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a 34812 // split matra, it should be reordered to *before* the left part of such matra. 34813 if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) { 34814 var _oldPos2 = _i23; 34815 for (var j = base + 1; j < _oldPos2; j++) { 34816 if (glyphs[j].shaperInfo.category === CATEGORIES.M) { 34817 _newPos--; 34818 break; 34819 } 34820 } 34821 } 34822 } 34823 34824 if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) { 34825 // -> If ZWJ or ZWNJ follow this halant, position is moved after it. 34826 if (_newPos < end && isJoiner(glyphs[_newPos])) { 34827 _newPos++; 34828 } 34829 } 34830 34831 var _oldPos = _i23; 34832 var _tmp = glyphs[_oldPos]; 34833 glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos))); 34834 glyphs[_newPos] = _tmp; 34835 34836 if (_newPos <= base && base < _oldPos) { 34837 base++; 34838 } 34839 } 34840 34841 break; 34842 } 34843 } 34844 } 34845 34846 // Apply 'init' to the Left Matra if it's a word start. 34847 if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) { 34848 glyphs[start].features.init = true; 34849 } 34850 } 34851} 34852 34853function nextSyllable(glyphs, start) { 34854 if (start >= glyphs.length) return start; 34855 var syllable = glyphs[start].shaperInfo.syllable; 34856 while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {} 34857 return start; 34858} 34859 34860var _class$7; 34861var _temp$3; 34862var categories$1 = useData.categories; 34863var decompositions$2 = useData.decompositions; 34864var trie$2 = new UnicodeTrie(Buffer("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","base64")); 34865var stateMachine$1 = new StateMachine(useData); 34866 34867/** 34868 * This shaper is an implementation of the Universal Shaping Engine, which 34869 * uses Unicode data to shape a number of scripts without a dedicated shaping engine. 34870 * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm. 34871 */ 34872var UniversalShaper = (_temp$3 = _class$7 = function (_DefaultShaper) { 34873 _inherits(UniversalShaper, _DefaultShaper); 34874 34875 function UniversalShaper() { 34876 _classCallCheck(this, UniversalShaper); 34877 34878 return _possibleConstructorReturn(this, _DefaultShaper.apply(this, arguments)); 34879 } 34880 34881 UniversalShaper.planFeatures = function planFeatures(plan) { 34882 plan.addStage(setupSyllables$1); 34883 34884 // Default glyph pre-processing group 34885 plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); 34886 34887 // Reordering group 34888 plan.addStage(clearSubstitutionFlags); 34889 plan.addStage(['rphf'], false); 34890 plan.addStage(recordRphf); 34891 plan.addStage(clearSubstitutionFlags); 34892 plan.addStage(['pref']); 34893 plan.addStage(recordPref); 34894 34895 // Orthographic unit shaping group 34896 plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']); 34897 plan.addStage(reorder); 34898 34899 // Topographical features 34900 // Scripts that need this are handled by the Arabic shaper, not implemented here for now. 34901 // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false); 34902 34903 // Standard topographic presentation and positional feature application 34904 plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']); 34905 }; 34906 34907 UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) { 34908 var _loop = function _loop(i) { 34909 var codepoint = glyphs[i].codePoints[0]; 34910 if (decompositions$2[codepoint]) { 34911 var decomposed = decompositions$2[codepoint].map(function (c) { 34912 var g = plan.font.glyphForCodePoint(c); 34913 return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features); 34914 }); 34915 34916 glyphs.splice.apply(glyphs, [i, 1].concat(decomposed)); 34917 } 34918 }; 34919 34920 // Decompose split vowels 34921 // TODO: do this in a more general unicode normalizer 34922 for (var i = glyphs.length - 1; i >= 0; i--) { 34923 _loop(i); 34924 } 34925 }; 34926 34927 return UniversalShaper; 34928}(DefaultShaper), _class$7.zeroMarkWidths = 'BEFORE_GPOS', _temp$3); 34929function useCategory(glyph) { 34930 return trie$2.get(glyph.codePoints[0]); 34931} 34932 34933var USEInfo = function USEInfo(category, syllableType, syllable) { 34934 _classCallCheck(this, USEInfo); 34935 34936 this.category = category; 34937 this.syllableType = syllableType; 34938 this.syllable = syllable; 34939}; 34940 34941function setupSyllables$1(font, glyphs) { 34942 var syllable = 0; 34943 for (var _iterator = stateMachine$1.match(glyphs.map(useCategory)), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 34944 var _ref; 34945 34946 if (_isArray) { 34947 if (_i >= _iterator.length) break; 34948 _ref = _iterator[_i++]; 34949 } else { 34950 _i = _iterator.next(); 34951 if (_i.done) break; 34952 _ref = _i.value; 34953 } 34954 34955 var _ref2 = _ref, 34956 start = _ref2[0], 34957 end = _ref2[1], 34958 tags = _ref2[2]; 34959 34960 ++syllable; 34961 34962 // Create shaper info 34963 for (var i = start; i <= end; i++) { 34964 glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable); 34965 } 34966 34967 // Assign rphf feature 34968 var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start); 34969 for (var _i2 = start; _i2 < start + limit; _i2++) { 34970 glyphs[_i2].features.rphf = true; 34971 } 34972 } 34973} 34974 34975function clearSubstitutionFlags(font, glyphs) { 34976 for (var _iterator2 = glyphs, _isArray2 = Array.isArray(_iterator2), _i3 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 34977 var _ref3; 34978 34979 if (_isArray2) { 34980 if (_i3 >= _iterator2.length) break; 34981 _ref3 = _iterator2[_i3++]; 34982 } else { 34983 _i3 = _iterator2.next(); 34984 if (_i3.done) break; 34985 _ref3 = _i3.value; 34986 } 34987 34988 var glyph = _ref3; 34989 34990 glyph.substituted = false;
34991 } 34992} 34993 34994function recordRphf(font, glyphs) { 34995 for (var _iterator3 = glyphs, _isArray3 = Array.isArray(_iterator3), _i4 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 34996 var _ref4; 34997 34998 if (_isArray3) { 34999 if (_i4 >= _iterator3.length) break; 35000 _ref4 = _iterator3[_i4++]; 35001 } else { 35002 _i4 = _iterator3.next(); 35003 if (_i4.done) break; 35004 _ref4 = _i4.value; 35005 } 35006 35007 var glyph = _ref4; 35008 35009 if (glyph.substituted && glyph.features.rphf) { 35010 // Mark a substituted repha. 35011 glyph.shaperInfo.category = 'R'; 35012 } 35013 } 35014} 35015 35016function recordPref(font, glyphs) { 35017 for (var _iterator4 = glyphs, _isArray4 = Array.isArray(_iterator4), _i5 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 35018 var _ref5; 35019 35020 if (_isArray4) { 35021 if (_i5 >= _iterator4.length) break; 35022 _ref5 = _iterator4[_i5++]; 35023 } else { 35024 _i5 = _iterator4.next(); 35025 if (_i5.done) break; 35026 _ref5 = _i5.value; 35027 } 35028 35029 var glyph = _ref5; 35030 35031 if (glyph.substituted) { 35032 // Mark a substituted pref as VPre, as they behave the same way. 35033 glyph.shaperInfo.category = 'VPre'; 35034 } 35035 } 35036} 35037 35038function reorder(font, glyphs) { 35039 var dottedCircle = font.glyphForCodePoint(0x25cc).id; 35040 35041 for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) { 35042 var i = void 0, 35043 j = void 0; 35044 var info = glyphs[start].shaperInfo; 35045 var type = info.syllableType; 35046 35047 // Only a few syllable types need reordering. 35048 if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') { 35049 continue; 35050 } 35051 35052 // Insert a dotted circle glyph in broken clusters. 35053 if (type === 'broken_cluster' && dottedCircle) { 35054 var g = new GlyphInfo(font, dottedCircle, [0x25cc]); 35055 g.shaperInfo = info; 35056 35057 // Insert after possible Repha. 35058 for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {} 35059 glyphs.splice(++i, 0, g); 35060 end++; 35061 } 35062 35063 // Move things forward. 35064 if (info.category === 'R' && end - start > 1) { 35065 // Got a repha. Reorder it to after first base, before first halant. 35066 for (i = start + 1; i < end; i++) { 35067 info = glyphs[i].shaperInfo; 35068 if (isBase(info) || isHalant(glyphs[i])) { 35069 // If we hit a halant, move before it; otherwise it's a base: move to it's 35070 // place, and shift things in between backward. 35071 if (isHalant(glyphs[i])) { 35072 i--; 35073 } 35074 35075 glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]])); 35076 break; 35077 } 35078 } 35079 } 35080 35081 // Move things back. 35082 for (i = start, j = end; i < end; i++) { 35083 info = glyphs[i].shaperInfo; 35084 if (isBase(info) || isHalant(glyphs[i])) { 35085 // If we hit a halant, move after it; otherwise it's a base: move to it's 35086 // place, and shift things in between backward. 35087 j = isHalant(glyphs[i]) ? i + 1 : i; 35088 } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) { 35089 glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j))); 35090 } 35091 } 35092 } 35093} 35094 35095function nextSyllable$1(glyphs, start) { 35096 if (start >= glyphs.length) return start; 35097 var syllable = glyphs[start].shaperInfo.syllable; 35098 while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {} 35099 return start; 35100} 35101 35102function isHalant(glyph) { 35103 return glyph.shaperInfo.category === 'H' && !glyph.isLigated; 35104} 35105 35106function isBase(info) { 35107 return info.category === 'B' || info.category === 'GB'; 35108} 35109 35110var SHAPERS = { 35111 arab: ArabicShaper, // Arabic 35112 mong: ArabicShaper, // Mongolian 35113 syrc: ArabicShaper, // Syriac 35114 'nko ': ArabicShaper, // N'Ko 35115 phag: ArabicShaper, // Phags Pa 35116 mand: ArabicShaper, // Mandaic 35117 mani: ArabicShaper, // Manichaean 35118 phlp: ArabicShaper, // Psalter Pahlavi 35119 35120 hang: HangulShaper, // Hangul 35121 35122 bng2: IndicShaper, // Bengali 35123 beng: IndicShaper, // Bengali 35124 dev2: IndicShaper, // Devanagari 35125 deva: IndicShaper, // Devanagari 35126 gjr2: IndicShaper, // Gujarati 35127 gujr: IndicShaper, // Gujarati 35128 guru: IndicShaper, // Gurmukhi 35129 gur2: IndicShaper, // Gurmukhi 35130 knda: IndicShaper, // Kannada 35131 knd2: IndicShaper, // Kannada 35132 mlm2: IndicShaper, // Malayalam 35133 mlym: IndicShaper, // Malayalam 35134 ory2: IndicShaper, // Oriya 35135 orya: IndicShaper, // Oriya 35136 taml: IndicShaper, // Tamil 35137 tml2: IndicShaper, // Tamil 35138 telu: IndicShaper, // Telugu 35139 tel2: IndicShaper, // Telugu 35140 khmr: IndicShaper, // Khmer 35141 35142 bali: UniversalShaper, // Balinese 35143 batk: UniversalShaper, // Batak 35144 brah: UniversalShaper, // Brahmi 35145 bugi: UniversalShaper, // Buginese 35146 buhd: UniversalShaper, // Buhid 35147 cakm: UniversalShaper, // Chakma 35148 cham: UniversalShaper, // Cham 35149 dupl: UniversalShaper, // Duployan 35150 egyp: UniversalShaper, // Egyptian Hieroglyphs 35151 gran: UniversalShaper, // Grantha 35152 hano: UniversalShaper, // Hanunoo 35153 java: UniversalShaper, // Javanese 35154 kthi: UniversalShaper, // Kaithi 35155 kali: UniversalShaper, // Kayah Li 35156 khar: UniversalShaper, // Kharoshthi 35157 khoj: UniversalShaper, // Khojki 35158 sind: UniversalShaper, // Khudawadi 35159 lepc: UniversalShaper, // Lepcha 35160 limb: UniversalShaper, // Limbu 35161 mahj: UniversalShaper, // Mahajani 35162 // mand: UniversalShaper, // Mandaic 35163 // mani: UniversalShaper, // Manichaean 35164 mtei: UniversalShaper, // Meitei Mayek 35165 modi: UniversalShaper, // Modi 35166 // mong: UniversalShaper, // Mongolian 35167 // 'nko ': UniversalShaper, // NâKo 35168 hmng: UniversalShaper, // Pahawh Hmong 35169 // phag: UniversalShaper, // Phags-pa 35170 // phlp: UniversalShaper, // Psalter Pahlavi 35171 rjng: UniversalShaper, // Rejang 35172 saur: UniversalShaper, // Saurashtra 35173 shrd: UniversalShaper, // Sharada 35174 sidd: UniversalShaper, // Siddham 35175 sinh: UniversalShaper, // Sinhala 35176 sund: UniversalShaper, // Sundanese 35177 sylo: UniversalShaper, // Syloti Nagri 35178 tglg: UniversalShaper, // Tagalog 35179 tagb: UniversalShaper, // Tagbanwa 35180 tale: UniversalShaper, // Tai Le 35181 lana: UniversalShaper, // Tai Tham 35182 tavt: UniversalShaper, // Tai Viet 35183 takr: UniversalShaper, // Takri 35184 tibt: UniversalShaper, // Tibetan 35185 tfng: UniversalShaper, // Tifinagh 35186 tirh: UniversalShaper, // Tirhuta 35187 35188 latn: DefaultShaper, // Latin 35189 DFLT: DefaultShaper // Default 35190}; 35191 35192function choose(script) { 35193 if (!Array.isArray(script)) { 35194 script = [script]; 35195 } 35196 35197 for (var _iterator = script, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 35198 var _ref; 35199 35200 if (_isArray) { 35201 if (_i >= _iterator.length) break; 35202 _ref = _iterator[_i++]; 35203 } else { 35204 _i = _iterator.next(); 35205 if (_i.done) break; 35206 _ref = _i.value; 35207 } 35208 35209 var s = _ref; 35210 35211 var shaper = SHAPERS[s]; 35212 if (shaper) { 35213 return shaper; 35214 } 35215 } 35216 35217 return DefaultShaper; 35218} 35219 35220var GSUBProcessor = function (_OTProcessor) { 35221 _inherits(GSUBProcessor, _OTProcessor); 35222 35223 function GSUBProcessor() { 35224 _classCallCheck(this, GSUBProcessor); 35225 35226 return _possibleConstructorReturn(this, _OTProcessor.apply(this, arguments)); 35227 } 35228 35229 GSUBProcessor.prototype.applyLookup = function applyLookup(lookupType, table) { 35230 var _this2 = this; 35231 35232 switch (lookupType) { 35233 case 1: 35234 { 35235 // Single Substitution 35236 var index = this.coverageIndex(table.coverage); 35237 if (index === -1) { 35238 return false;
35239 } 35240 35241 var glyph = this.glyphIterator.cur; 35242 switch (table.version) { 35243 case 1: 35244 glyph.id = glyph.id + table.deltaGlyphID & 0xffff; 35245 break; 35246 35247 case 2: 35248 glyph.id = table.substitute.get(index); 35249 break; 35250 } 35251 35252 return true; 35253 } 35254 35255 case 2: 35256 { 35257 // Multiple Substitution 35258 var _index = this.coverageIndex(table.coverage); 35259 if (_index !== -1) { 35260 var _glyphs; 35261 35262 var sequence = table.sequences.get(_index); 35263 this.glyphIterator.cur.id = sequence[0]; 35264 this.glyphIterator.cur.ligatureComponent = 0; 35265 35266 var features = this.glyphIterator.cur.features; 35267 var curGlyph = this.glyphIterator.cur; 35268 var replacement = sequence.slice(1).map(function (gid, i) { 35269 var glyph = new GlyphInfo(_this2.font, gid, undefined, features); 35270 glyph.shaperInfo = curGlyph.shaperInfo; 35271 glyph.isLigated = curGlyph.isLigated; 35272 glyph.ligatureComponent = i + 1; 35273 glyph.substituted = true; 35274 glyph.isMultiplied = true; 35275 return glyph; 35276 }); 35277 35278 (_glyphs = this.glyphs).splice.apply(_glyphs, [this.glyphIterator.index + 1, 0].concat(replacement)); 35279 return true; 35280 } 35281 35282 return false; 35283 } 35284 35285 case 3: 35286 { 35287 // Alternate Substitution 35288 var _index2 = this.coverageIndex(table.coverage); 35289 if (_index2 !== -1) { 35290 var USER_INDEX = 0; // TODO 35291 this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX]; 35292 return true; 35293 } 35294 35295 return false; 35296 } 35297 35298 case 4: 35299 { 35300 // Ligature Substitution 35301 var _index3 = this.coverageIndex(table.coverage); 35302 if (_index3 === -1) { 35303 return false; 35304 } 35305 35306 for (var _iterator = table.ligatureSets.get(_index3), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 35307 var _ref; 35308 35309 if (_isArray) { 35310 if (_i >= _iterator.length) break; 35311 _ref = _iterator[_i++]; 35312 } else { 35313 _i = _iterator.next(); 35314 if (_i.done) break; 35315 _ref = _i.value; 35316 } 35317 35318 var ligature = _ref; 35319 35320 var matched = this.sequenceMatchIndices(1, ligature.components); 35321 if (!matched) { 35322 continue; 35323 } 35324 35325 var _curGlyph = this.glyphIterator.cur; 35326 35327 // Concatenate all of the characters the new ligature will represent 35328 var characters = _curGlyph.codePoints.slice(); 35329 for (var _iterator2 = matched, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 35330 var _ref2; 35331 35332 if (_isArray2) { 35333 if (_i2 >= _iterator2.length) break; 35334 _ref2 = _iterator2[_i2++]; 35335 } else { 35336 _i2 = _iterator2.next(); 35337 if (_i2.done) break; 35338 _ref2 = _i2.value; 35339 } 35340 35341 var _index4 = _ref2; 35342 35343 characters.push.apply(characters, this.glyphs[_index4].codePoints); 35344 } 35345 35346 // Create the replacement ligature glyph 35347 var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features); 35348 ligatureGlyph.shaperInfo = _curGlyph.shaperInfo; 35349 ligatureGlyph.isLigated = true; 35350 ligatureGlyph.substituted = true; 35351 35352 // From Harfbuzz: 35353 // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave 35354 // the ligature to keep its old ligature id. This will allow it to attach to 35355 // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH, 35356 // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a
35357 // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature 35358 // later, we don't want them to lose their ligature id/component, otherwise 35359 // GPOS will fail to correctly position the mark ligature on top of the 35360 // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343 35361 // 35362 // - If a ligature is formed of components that some of which are also ligatures 35363 // themselves, and those ligature components had marks attached to *their* 35364 // components, we have to attach the marks to the new ligature component 35365 // positions! Now *that*'s tricky! And these marks may be following the 35366 // last component of the whole sequence, so we should loop forward looking 35367 // for them and update them. 35368 // 35369 // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a 35370 // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature 35371 // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature 35372 // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to 35373 // the new ligature with a component value of 2. 35374 // 35375 // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633 35376 var isMarkLigature = _curGlyph.isMark; 35377 for (var i = 0; i < matched.length && isMarkLigature; i++) { 35378 isMarkLigature = this.glyphs[matched[i]].isMark; 35379 } 35380 35381 ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++; 35382 35383 var lastLigID = _curGlyph.ligatureID; 35384 var lastNumComps = _curGlyph.codePoints.length; 35385 var curComps = lastNumComps; 35386 var idx = this.glyphIterator.index + 1; 35387 35388 // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence. 35389 // This allows GPOS to attach marks to the correct ligature components. 35390 for (var _iterator3 = matched, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 35391 var _ref3; 35392 35393 if (_isArray3) { 35394 if (_i3 >= _iterator3.length) break; 35395 _ref3 = _iterator3[_i3++]; 35396 } else { 35397 _i3 = _iterator3.next(); 35398 if (_i3.done) break; 35399 _ref3 = _i3.value; 35400 } 35401 35402 var matchIndex = _ref3; 35403 35404 // Don't assign new ligature components for mark ligatures (see above) 35405 if (isMarkLigature) { 35406 idx = matchIndex; 35407 } else { 35408 while (idx < matchIndex) { 35409 var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps); 35410 this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID; 35411 this.glyphs[idx].ligatureComponent = ligatureComponent; 35412 idx++; 35413 } 35414 } 35415 35416 lastLigID = this.glyphs[idx].ligatureID; 35417 lastNumComps = this.glyphs[idx].codePoints.length; 35418 curComps += lastNumComps; 35419 idx++; // skip base glyph 35420 } 35421 35422 // Adjust ligature components for any marks following 35423 if (lastLigID && !isMarkLigature) { 35424 for (var _i4 = idx; _i4 < this.glyphs.length; _i4++) { 35425 if (this.glyphs[_i4].ligatureID === lastLigID) { 35426 var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i4].ligatureComponent || 1, lastNumComps); 35427 this.glyphs[_i4].ligatureComponent = ligatureComponent; 35428 } else { 35429 break; 35430 } 35431 } 35432 } 35433 35434 // Delete the matched glyphs, and replace the current glyph with the ligature glyph 35435 for (var _i5 = matched.length - 1; _i5 >= 0; _i5--) { 35436 this.glyphs.splice(matched[_i5], 1); 35437 } 35438 35439 this.glyphs[this.glyphIterator.index] = ligatureGlyph; 35440 return true; 35441 } 35442 35443 return false;
35444 } 35445 35446 case 5: 35447 // Contextual Substitution 35448 return this.applyContext(table); 35449 35450 case 6: 35451 // Chaining Contextual Substitution 35452 return this.applyChainingContext(table); 35453 35454 case 7: 35455 // Extension Substitution 35456 return this.applyLookup(table.lookupType, table.extension); 35457 35458 default: 35459 throw new Error('GSUB lookupType ' + lookupType + ' is not supported'); 35460 } 35461 }; 35462 35463 return GSUBProcessor; 35464}(OTProcessor); 35465 35466var GPOSProcessor = function (_OTProcessor) { 35467 _inherits(GPOSProcessor, _OTProcessor); 35468 35469 function GPOSProcessor() { 35470 _classCallCheck(this, GPOSProcessor); 35471 35472 return _possibleConstructorReturn(this, _OTProcessor.apply(this, arguments)); 35473 } 35474 35475 GPOSProcessor.prototype.applyPositionValue = function applyPositionValue(sequenceIndex, value) { 35476 var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)]; 35477 if (value.xAdvance != null) { 35478 position.xAdvance += value.xAdvance; 35479 } 35480 35481 if (value.yAdvance != null) { 35482 position.yAdvance += value.yAdvance; 35483 } 35484 35485 if (value.xPlacement != null) { 35486 position.xOffset += value.xPlacement; 35487 } 35488 35489 if (value.yPlacement != null) { 35490 position.yOffset += value.yPlacement; 35491 } 35492 35493 // Adjustments for font variations 35494 var variationProcessor = this.font._variationProcessor; 35495 var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; 35496 if (variationProcessor && variationStore) { 35497 if (value.xPlaDevice) { 35498 position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b); 35499 } 35500 35501 if (value.yPlaDevice) { 35502 position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b); 35503 } 35504 35505 if (value.xAdvDevice) { 35506 position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b); 35507 } 35508 35509 if (value.yAdvDevice) { 35510 position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b); 35511 } 35512 } 35513 35514 // TODO: device tables 35515 }; 35516 35517 GPOSProcessor.prototype.applyLookup = function applyLookup(lookupType, table) { 35518 switch (lookupType) { 35519 case 1: 35520 { 35521 // Single positioning value 35522 var index = this.coverageIndex(table.coverage); 35523 if (index === -1) { 35524 return false; 35525 } 35526 35527 switch (table.version) { 35528 case 1: 35529 this.applyPositionValue(0, table.value); 35530 break; 35531 35532 case 2: 35533 this.applyPositionValue(0, table.values.get(index)); 35534 break; 35535 } 35536 35537 return true; 35538 } 35539 35540 case 2: 35541 { 35542 // Pair Adjustment Positioning 35543 var nextGlyph = this.glyphIterator.peek(); 35544 if (!nextGlyph) { 35545 return false; 35546 } 35547 35548 var _index = this.coverageIndex(table.coverage); 35549 if (_index === -1) { 35550 return false; 35551 } 35552 35553 switch (table.version) { 35554 case 1: 35555 // Adjustments for glyph pairs 35556 var set = table.pairSets.get(_index); 35557 35558 for (var _iterator = set, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 35559 var _ref; 35560 35561 if (_isArray) { 35562 if (_i >= _iterator.length) break; 35563 _ref = _iterator[_i++]; 35564 } else { 35565 _i = _iterator.next(); 35566 if (_i.done) break; 35567 _ref = _i.value; 35568 } 35569 35570 var _pair = _ref; 35571 35572 if (_pair.secondGlyph === nextGlyph.id) { 35573 this.applyPositionValue(0, _pair.value1); 35574 this.applyPositionValue(1, _pair.value2); 35575 return true; 35576 } 35577 } 35578 35579 return false; 35580 35581 case 2: 35582 // Class pair adjustment 35583 var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1); 35584 var class2 = this.getClassID(nextGlyph.id, table.classDef2); 35585 if (class1 === -1 || class2 === -1) { 35586 return false;
35587 } 35588 35589 var pair = table.classRecords.get(class1).get(class2); 35590 this.applyPositionValue(0, pair.value1); 35591 this.applyPositionValue(1, pair.value2); 35592 return true; 35593 } 35594 } 35595 35596 case 3: 35597 { 35598 // Cursive Attachment Positioning 35599 var nextIndex = this.glyphIterator.peekIndex(); 35600 var _nextGlyph = this.glyphs[nextIndex]; 35601 if (!_nextGlyph) { 35602 return false; 35603 } 35604 35605 var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)]; 35606 if (!curRecord || !curRecord.exitAnchor) { 35607 return false; 35608 } 35609 35610 var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)]; 35611 if (!nextRecord || !nextRecord.entryAnchor) { 35612 return false; 35613 } 35614 35615 var entry = this.getAnchor(nextRecord.entryAnchor); 35616 var exit = this.getAnchor(curRecord.exitAnchor); 35617 35618 var cur = this.positions[this.glyphIterator.index]; 35619 var next = this.positions[nextIndex]; 35620 35621 switch (this.direction) { 35622 case 'ltr': 35623 cur.xAdvance = exit.x + cur.xOffset; 35624 35625 var d = entry.x + next.xOffset; 35626 next.xAdvance -= d; 35627 next.xOffset -= d; 35628 break; 35629 35630 case 'rtl': 35631 d = exit.x + cur.xOffset; 35632 cur.xAdvance -= d; 35633 cur.xOffset -= d; 35634 next.xAdvance = entry.x + next.xOffset; 35635 break; 35636 } 35637 35638 if (this.glyphIterator.flags.rightToLeft) { 35639 this.glyphIterator.cur.cursiveAttachment = nextIndex; 35640 cur.yOffset = entry.y - exit.y; 35641 } else { 35642 _nextGlyph.cursiveAttachment = this.glyphIterator.index; 35643 cur.yOffset = exit.y - entry.y; 35644 } 35645 35646 return true; 35647 } 35648 35649 case 4: 35650 { 35651 // Mark to base positioning 35652 var markIndex = this.coverageIndex(table.markCoverage); 35653 if (markIndex === -1) { 35654 return false; 35655 } 35656 35657 // search backward for a base glyph 35658 var baseGlyphIndex = this.glyphIterator.index; 35659 while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {} 35660 35661 if (baseGlyphIndex < 0) { 35662 return false; 35663 } 35664 35665 var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id); 35666 if (baseIndex === -1) { 35667 return false; 35668 } 35669 35670 var markRecord = table.markArray[markIndex]; 35671 var baseAnchor = table.baseArray[baseIndex][markRecord.class]; 35672 this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex); 35673 return true; 35674 } 35675 35676 case 5: 35677 { 35678 // Mark to ligature positioning 35679 var _markIndex = this.coverageIndex(table.markCoverage); 35680 if (_markIndex === -1) { 35681 return false; 35682 } 35683 35684 // search backward for a base glyph 35685 var _baseGlyphIndex = this.glyphIterator.index; 35686 while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {} 35687 35688 if (_baseGlyphIndex < 0) { 35689 return false; 35690 } 35691 35692 var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id); 35693 if (ligIndex === -1) { 35694 return false; 35695 } 35696 35697 var ligAttach = table.ligatureArray[ligIndex]; 35698 var markGlyph = this.glyphIterator.cur; 35699 var ligGlyph = this.glyphs[_baseGlyphIndex]; 35700 var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1; 35701 35702 var _markRecord = table.markArray[_markIndex]; 35703 var _baseAnchor = ligAttach[compIndex][_markRecord.class]; 35704 this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex); 35705 return true; 35706 } 35707 35708 case 6: 35709 { 35710 // Mark to mark positioning 35711 var mark1Index = this.coverageIndex(table.mark1Coverage); 35712 if (mark1Index === -1) { 35713 return false;
35714 } 35715 35716 // get the previous mark to attach to 35717 var prevIndex = this.glyphIterator.peekIndex(-1); 35718 var prev = this.glyphs[prevIndex]; 35719 if (!prev || !prev.isMark) { 35720 return false; 35721 } 35722 35723 var _cur = this.glyphIterator.cur; 35724 35725 // The following logic was borrowed from Harfbuzz 35726 var good = false; 35727 if (_cur.ligatureID === prev.ligatureID) { 35728 if (!_cur.ligatureID) { 35729 // Marks belonging to the same base 35730 good = true; 35731 } else if (_cur.ligatureComponent === prev.ligatureComponent) { 35732 // Marks belonging to the same ligature component 35733 good = true; 35734 } 35735 } else { 35736 // If ligature ids don't match, it may be the case that one of the marks 35737 // itself is a ligature, in which case match. 35738 if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) { 35739 good = true; 35740 } 35741 } 35742 35743 if (!good) { 35744 return false; 35745 } 35746 35747 var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id); 35748 if (mark2Index === -1) { 35749 return false; 35750 } 35751 35752 var _markRecord2 = table.mark1Array[mark1Index]; 35753 var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class]; 35754 this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex); 35755 return true; 35756 } 35757 35758 case 7: 35759 // Contextual positioning 35760 return this.applyContext(table); 35761 35762 case 8: 35763 // Chaining contextual positioning 35764 return this.applyChainingContext(table); 35765 35766 case 9: 35767 // Extension positioning 35768 return this.applyLookup(table.lookupType, table.extension); 35769 35770 default: 35771 throw new Error('Unsupported GPOS table: ' + lookupType); 35772 } 35773 }; 35774 35775 GPOSProcessor.prototype.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) { 35776 var baseCoords = this.getAnchor(baseAnchor); 35777 var markCoords = this.getAnchor(markRecord.markAnchor); 35778 35779 var basePos = this.positions[baseGlyphIndex]; 35780 var markPos = this.positions[this.glyphIterator.index]; 35781
35782 markPos.xOffset = baseCoords.x - markCoords.x; 35783 markPos.yOffset = baseCoords.y - markCoords.y; 35784 this.glyphIterator.cur.markAttachment = baseGlyphIndex; 35785 }; 35786 35787 GPOSProcessor.prototype.getAnchor = function getAnchor(anchor) { 35788 // TODO: contour point, device tables 35789 var x = anchor.xCoordinate; 35790 var y = anchor.yCoordinate; 35791 35792 // Adjustments for font variations 35793 var variationProcessor = this.font._variationProcessor; 35794 var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore; 35795 if (variationProcessor && variationStore) { 35796 if (anchor.xDeviceTable) { 35797 x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b); 35798 } 35799 35800 if (anchor.yDeviceTable) { 35801 y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b); 35802 } 35803 } 35804 35805 return { x: x, y: y }; 35806 }; 35807 35808 GPOSProcessor.prototype.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) { 35809 _OTProcessor.prototype.applyFeatures.call(this, userFeatures, glyphs, advances); 35810 35811 for (var i = 0; i < this.glyphs.length; i++) { 35812 this.fixCursiveAttachment(i); 35813 } 35814 35815 this.fixMarkAttachment(); 35816 }; 35817 35818 GPOSProcessor.prototype.fixCursiveAttachment = function fixCursiveAttachment(i) { 35819 var glyph = this.glyphs[i]; 35820 if (glyph.cursiveAttachment != null) { 35821 var j = glyph.cursiveAttachment; 35822 35823 glyph.cursiveAttachment = null; 35824 this.fixCursiveAttachment(j); 35825 35826 this.positions[i].yOffset += this.positions[j].yOffset; 35827 } 35828 }; 35829 35830 GPOSProcessor.prototype.fixMarkAttachment = function fixMarkAttachment() { 35831 for (var i = 0; i < this.glyphs.length; i++) { 35832 var glyph = this.glyphs[i]; 35833 if (glyph.markAttachment != null) { 35834 var j = glyph.markAttachment; 35835 35836 this.positions[i].xOffset += this.positions[j].xOffset; 35837 this.positions[i].yOffset += this.positions[j].yOffset; 35838 35839 if (this.direction === 'ltr') { 35840 for (var k = j; k < i; k++) { 35841 this.positions[i].xOffset -= this.positions[k].xAdvance; 35842 this.positions[i].yOffset -= this.positions[k].yAdvance; 35843 } 35844 } else { 35845 for (var _k = j + 1; _k < i + 1; _k++) { 35846 this.positions[i].xOffset += this.positions[_k].xAdvance; 35847 this.positions[i].yOffset += this.positions[_k].yAdvance; 35848 } 35849 } 35850 } 35851 } 35852 }; 35853 35854 return GPOSProcessor; 35855}(OTProcessor); 35856 35857var OTLayoutEngine = function () { 35858 function OTLayoutEngine(font) { 35859 _classCallCheck(this, OTLayoutEngine); 35860 35861 this.font = font; 35862 this.glyphInfos = null; 35863 this.plan = null; 35864 this.GSUBProcessor = null; 35865 this.GPOSProcessor = null; 35866 this.fallbackPosition = true; 35867 35868 if (font.GSUB) { 35869 this.GSUBProcessor = new GSUBProcessor(font, font.GSUB); 35870 } 35871 35872 if (font.GPOS) { 35873 this.GPOSProcessor = new GPOSProcessor(font, font.GPOS); 35874 } 35875 } 35876 35877 OTLayoutEngine.prototype.setup = function setup(glyphRun) { 35878 var _this = this; 35879 35880 // Map glyphs to GlyphInfo objects so data can be passed between 35881 // GSUB and GPOS without mutating the real (shared) Glyph objects. 35882 this.glyphInfos = glyphRun.glyphs.map(function (glyph) { 35883 return new GlyphInfo(_this.font, glyph.id, [].concat(glyph.codePoints)); 35884 }); 35885 35886 // Select a script based on what is available in GSUB/GPOS. 35887 var script = null; 35888 if (this.GPOSProcessor) { 35889 script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); 35890 } 35891 35892 if (this.GSUBProcessor) { 35893 script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction); 35894 } 35895 35896 // Choose a shaper based on the script, and setup a shaping plan. 35897 // This determines which features to apply to which glyphs. 35898 this.shaper = choose(script); 35899 this.plan = new ShapingPlan(this.font, script, glyphRun.direction); 35900 this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); 35901 35902 // Assign chosen features to output glyph run 35903 for (var key in this.plan.allFeatures) { 35904 glyphRun.features[key] = true; 35905 } 35906 }; 35907 35908 OTLayoutEngine.prototype.substitute = function substitute(glyphRun) { 35909 var _this2 = this; 35910 35911 if (this.GSUBProcessor) { 35912 this.plan.process(this.GSUBProcessor, this.glyphInfos); 35913 35914 // Map glyph infos back to normal Glyph objects 35915 glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) { 35916 return _this2.font.getGlyph(glyphInfo.id, glyphInfo.codePoints); 35917 }); 35918 } 35919 }; 35920 35921 OTLayoutEngine.prototype.position = function position(glyphRun) { 35922 if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') { 35923 this.zeroMarkAdvances(glyphRun.positions); 35924 } 35925 35926 if (this.GPOSProcessor) { 35927 this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions); 35928 } 35929 35930 if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') { 35931 this.zeroMarkAdvances(glyphRun.positions); 35932 } 35933 35934 // Reverse the glyphs and positions if the script is right-to-left 35935 if (glyphRun.direction === 'rtl') { 35936 glyphRun.glyphs.reverse(); 35937 glyphRun.positions.reverse(); 35938 } 35939 35940 return this.GPOSProcessor && this.GPOSProcessor.features; 35941 }; 35942 35943 OTLayoutEngine.prototype.zeroMarkAdvances = function zeroMarkAdvances(positions) { 35944 for (var i = 0; i < this.glyphInfos.length; i++) { 35945 if (this.glyphInfos[i].isMark) { 35946 positions[i].xAdvance = 0; 35947 positions[i].yAdvance = 0; 35948 } 35949 } 35950 }; 35951 35952 OTLayoutEngine.prototype.cleanup = function cleanup() { 35953 this.glyphInfos = null; 35954 this.plan = null; 35955 this.shaper = null; 35956 }; 35957 35958 OTLayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) { 35959 var features = []; 35960 35961 if (this.GSUBProcessor) { 35962 this.GSUBProcessor.selectScript(script, language); 35963 features.push.apply(features, _Object$keys(this.GSUBProcessor.features)); 35964 } 35965 35966 if (this.GPOSProcessor) { 35967 this.GPOSProcessor.selectScript(script, language); 35968 features.push.apply(features, _Object$keys(this.GPOSProcessor.features)); 35969 } 35970 35971 return features; 35972 }; 35973 35974 return OTLayoutEngine; 35975}(); 35976 35977var LayoutEngine = function () { 35978 function LayoutEngine(font) { 35979 _classCallCheck(this, LayoutEngine); 35980 35981 this.font = font; 35982 this.unicodeLayoutEngine = null; 35983 this.kernProcessor = null; 35984 35985 // Choose an advanced layout engine. We try the AAT morx table first since more 35986 // scripts are currently supported because the shaping logic is built into the font. 35987 if (this.font.morx) { 35988 this.engine = new AATLayoutEngine(this.font); 35989 } else if (this.font.GSUB || this.font.GPOS) { 35990 this.engine = new OTLayoutEngine(this.font); 35991 } 35992 } 35993 35994 LayoutEngine.prototype.layout = function layout(string, features, script, language, direction) { 35995 // Make the features parameter optional 35996 if (typeof features === 'string') { 35997 direction = language; 35998 language = script; 35999 script = features; 36000 features = []; 36001 } 36002 36003 // Map string to glyphs if needed 36004 if (typeof string === 'string') { 36005 // Attempt to detect the script from the string if not provided. 36006 if (script == null) { 36007 script = forString(string); 36008 } 36009 36010 var glyphs = this.font.glyphsForString(string); 36011 } else { 36012 // Attempt to detect the script from the glyph code points if not provided. 36013 if (script == null) { 36014 var codePoints = []; 36015 for (var _iterator = string, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 36016 var _ref; 36017 36018 if (_isArray) { 36019 if (_i >= _iterator.length) break; 36020 _ref = _iterator[_i++]; 36021 } else { 36022 _i = _iterator.next(); 36023 if (_i.done) break; 36024 _ref = _i.value; 36025 } 36026 36027 var glyph = _ref; 36028 36029 codePoints.push.apply(codePoints, glyph.codePoints); 36030 } 36031
36032 script = forCodePoints(codePoints); 36033 } 36034 36035 var glyphs = string; 36036 } 36037 36038 var glyphRun = new GlyphRun(glyphs, features, script, language, direction); 36039 36040 // Return early if there are no glyphs 36041 if (glyphs.length === 0) { 36042 glyphRun.positions = []; 36043 return glyphRun; 36044 } 36045 36046 // Setup the advanced layout engine 36047 if (this.engine && this.engine.setup) { 36048 this.engine.setup(glyphRun); 36049 } 36050 36051 // Substitute and position the glyphs 36052 this.substitute(glyphRun); 36053 this.position(glyphRun); 36054 36055 this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); 36056 36057 // Let the layout engine clean up any state it might have 36058 if (this.engine && this.engine.cleanup) { 36059 this.engine.cleanup(); 36060 } 36061 36062 return glyphRun; 36063 }; 36064 36065 LayoutEngine.prototype.substitute = function substitute(glyphRun) { 36066 // Call the advanced layout engine to make substitutions 36067 if (this.engine && this.engine.substitute) { 36068 this.engine.substitute(glyphRun); 36069 } 36070 }; 36071 36072 LayoutEngine.prototype.position = function position(glyphRun) { 36073 // Get initial glyph positions 36074 glyphRun.positions = glyphRun.glyphs.map(function (glyph) { 36075 return new GlyphPosition(glyph.advanceWidth); 36076 }); 36077 var positioned = null; 36078 36079 // Call the advanced layout engine. Returns the features applied. 36080 if (this.engine && this.engine.position) { 36081 positioned = this.engine.position(glyphRun); 36082 } 36083 36084 // if there is no GPOS table, use unicode properties to position marks. 36085 if (!positioned && (!this.engine || this.engine.fallbackPosition)) { 36086 if (!this.unicodeLayoutEngine) { 36087 this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font); 36088 } 36089 36090 this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions); 36091 } 36092 36093 // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table 36094 if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) { 36095 if (!this.kernProcessor) { 36096 this.kernProcessor = new KernProcessor(this.font); 36097 } 36098 36099 this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions); 36100 glyphRun.features.kern = true; 36101 } 36102 }; 36103 36104 LayoutEngine.prototype.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) { 36105 var space = this.font.glyphForCodePoint(0x20); 36106 for (var i = 0; i < glyphs.length; i++) { 36107 if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) { 36108 glyphs[i] = space; 36109 positions[i].xAdvance = 0; 36110 positions[i].yAdvance = 0; 36111 } 36112 } 36113 }; 36114 36115 LayoutEngine.prototype.isDefaultIgnorable = function isDefaultIgnorable(ch) { 36116 // From DerivedCoreProperties.txt in the Unicode database, 36117 // minus U+115F, U+1160, U+3164 and U+FFA0, which is what 36118 // Harfbuzz and Uniscribe do. 36119 var plane = ch >> 16; 36120 if (plane === 0) { 36121 // BMP 36122 switch (ch >> 8) { 36123 case 0x00: 36124 return ch === 0x00AD; 36125 case 0x03: 36126 return ch === 0x034F; 36127 case 0x06: 36128 return ch === 0x061C; 36129 case 0x17: 36130 return 0x17B4 <= ch && ch <= 0x17B5; 36131 case 0x18: 36132 return 0x180B <= ch && ch <= 0x180E; 36133 case 0x20: 36134 return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F; 36135 case 0xFE: 36136 return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF; 36137 case 0xFF: 36138 return 0xFFF0 <= ch && ch <= 0xFFF8; 36139 default: 36140 return false; 36141 } 36142 } else { 36143 // Other planes 36144 switch (plane) { 36145 case 0x01: 36146 return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A; 36147 case 0x0E: 36148 return 0xE0000 <= ch && ch <= 0xE0FFF; 36149 default: 36150 return false; 36151 } 36152 } 36153 }; 36154 36155 LayoutEngine.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) { 36156 var features = []; 36157 36158 if (this.engine) { 36159 features.push.apply(features, this.engine.getAvailableFeatures(script, language)); 36160 } 36161 36162 if (this.font.kern && features.indexOf('kern') === -1) { 36163 features.push('kern'); 36164 } 36165 36166 return features; 36167 }; 36168 36169 LayoutEngine.prototype.stringsForGlyph = function stringsForGlyph(gid) { 36170 var result = new _Set(); 36171 36172 var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid); 36173 for (var _iterator2 = codePoints, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 36174 var _ref2; 36175 36176 if (_isArray2) { 36177 if (_i2 >= _iterator2.length) break; 36178 _ref2 = _iterator2[_i2++]; 36179 } else { 36180 _i2 = _iterator2.next(); 36181 if (_i2.done) break; 36182 _ref2 = _i2.value; 36183 } 36184 36185 var codePoint = _ref2; 36186 36187 result.add(_String$fromCodePoint(codePoint)); 36188 } 36189 36190 if (this.engine && this.engine.stringsForGlyph) { 36191 for (var _iterator3 = this.engine.stringsForGlyph(gid), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 36192 var _ref3; 36193 36194 if (_isArray3) { 36195 if (_i3 >= _iterator3.length) break; 36196 _ref3 = _iterator3[_i3++]; 36197 } else { 36198 _i3 = _iterator3.next(); 36199 if (_i3.done) break; 36200 _ref3 = _i3.value; 36201 } 36202 36203 var string = _ref3; 36204 36205 result.add(string); 36206 } 36207 } 36208 36209 return _Array$from(result); 36210 }; 36211 36212 return LayoutEngine; 36213}(); 36214 36215var SVG_COMMANDS = { 36216 moveTo: 'M', 36217 lineTo: 'L', 36218 quadraticCurveTo: 'Q', 36219 bezierCurveTo: 'C', 36220 closePath: 'Z' 36221}; 36222 36223/** 36224 * Path objects are returned by glyphs and represent the actual 36225 * vector outlines for each glyph in the font. Paths can be converted 36226 * to SVG path data strings, or to functions that can be applied to 36227 * render the path to a graphics context. 36228 */ 36229
36230var Path = function () { 36231 function Path() { 36232 _classCallCheck(this, Path); 36233 36234 this.commands = []; 36235 this._bbox = null; 36236 this._cbox = null; 36237 } 36238 36239 /** 36240 * Compiles the path to a JavaScript function that can be applied with 36241 * a graphics context in order to render the path. 36242 * @return {string} 36243 */ 36244 36245 36246 Path.prototype.toFunction = function toFunction() { 36247 var cmds = this.commands.map(function (c) { 36248 return ' ctx.' + c.command + '(' + c.args.join(', ') + ');'; 36249 }); 36250 return new Function('ctx', cmds.join('\n')); 36251 }; 36252 36253 /** 36254 * Converts the path to an SVG path data string 36255 * @return {string} 36256 */ 36257 36258 36259 Path.prototype.toSVG = function toSVG() { 36260 var cmds = this.commands.map(function (c) { 36261 var args = c.args.map(function (arg) { 36262 return Math.round(arg * 100) / 100; 36263 }); 36264 return '' + SVG_COMMANDS[c.command] + args.join(' '); 36265 }); 36266 36267 return cmds.join(''); 36268 }; 36269 36270 /** 36271 * Gets the "control box" of a path. 36272 * This is like the bounding box, but it includes all points including 36273 * control points of bezier segments and is much faster to compute than 36274 * the real bounding box. 36275 * @type {BBox} 36276 */ 36277 36278 36279 /** 36280 * Applies a mapping function to each point in the path. 36281 * @param {function} fn 36282 * @return {Path} 36283 */ 36284 Path.prototype.mapPoints = function mapPoints(fn) { 36285 var path = new Path(); 36286 36287 for (var _iterator = this.commands, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 36288 var _ref; 36289 36290 if (_isArray) { 36291 if (_i >= _iterator.length) break; 36292 _ref = _iterator[_i++]; 36293 } else { 36294 _i = _iterator.next(); 36295 if (_i.done) break; 36296 _ref = _i.value; 36297 } 36298 36299 var c = _ref; 36300 36301 var args = []; 36302 for (var _i2 = 0; _i2 < c.args.length; _i2 += 2) { 36303 var _fn = fn(c.args[_i2], c.args[_i2 + 1]), 36304 x = _fn[0], 36305 y = _fn[1]; 36306 36307 args.push(x, y); 36308 } 36309 36310 path[c.command].apply(path, args); 36311 } 36312 36313 return path; 36314 }; 36315 36316 /** 36317 * Transforms the path by the given matrix. 36318 */ 36319 36320 36321 Path.prototype.transform = function transform(m0, m1, m2, m3, m4, m5) { 36322 return this.mapPoints(function (x, y) { 36323 x = m0 * x + m2 * y + m4; 36324 y = m1 * x + m3 * y + m5; 36325 return [x, y]; 36326 }); 36327 }; 36328 36329 /** 36330 * Translates the path by the given offset. 36331 */ 36332 36333 36334 Path.prototype.translate = function translate(x, y) { 36335 return this.transform(1, 0, 0, 1, x, y); 36336 }; 36337 36338 /** 36339 * Rotates the path by the given angle (in radians). 36340 */ 36341 36342 36343 Path.prototype.rotate = function rotate(angle) { 36344 var cos = Math.cos(angle); 36345 var sin = Math.sin(angle); 36346 return this.transform(cos, sin, -sin, cos, 0, 0); 36347 }; 36348 36349 /** 36350 * Scales the path. 36351 */ 36352 36353 36354 Path.prototype.scale = function scale(scaleX) { 36355 var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; 36356 36357 return this.transform(scaleX, 0, 0, scaleY, 0, 0); 36358 }; 36359 36360 _createClass(Path, [{ 36361 key: 'cbox', 36362 get: function get() { 36363 if (!this._cbox) { 36364 var cbox = new BBox(); 36365 for (var _iterator2 = this.commands, _isArray2 = Array.isArray(_iterator2), _i3 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 36366 var _ref2; 36367 36368 if (_isArray2) { 36369 if (_i3 >= _iterator2.length) break; 36370 _ref2 = _iterator2[_i3++]; 36371 } else { 36372 _i3 = _iterator2.next(); 36373 if (_i3.done) break; 36374 _ref2 = _i3.value; 36375 } 36376 36377 var command = _ref2; 36378 36379 for (var _i4 = 0; _i4 < command.args.length; _i4 += 2) { 36380 cbox.addPoint(command.args[_i4], command.args[_i4 + 1]); 36381 } 36382 } 36383 36384 this._cbox = _Object$freeze(cbox); 36385 } 36386 36387 return this._cbox; 36388 } 36389 36390 /** 36391 * Gets the exact bounding box of the path by evaluating curve segments. 36392 * Slower to compute than the control box, but more accurate. 36393 * @type {BBox} 36394 */ 36395 36396 }, { 36397 key: 'bbox', 36398 get: function get() { 36399 if (this._bbox) { 36400 return this._bbox; 36401 } 36402 36403 var bbox = new BBox(); 36404 var cx = 0, 36405 cy = 0; 36406 36407 var f = function f(t) { 36408 return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i]; 36409 }; 36410 36411 for (var _iterator3 = this.commands, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 36412 var _ref3; 36413 36414 if (_isArray3) { 36415 if (_i5 >= _iterator3.length) break; 36416 _ref3 = _iterator3[_i5++]; 36417 } else { 36418 _i5 = _iterator3.next(); 36419 if (_i5.done) break; 36420 _ref3 = _i5.value; 36421 } 36422 36423 var c = _ref3; 36424 36425 switch (c.command) { 36426 case 'moveTo': 36427 case 'lineTo': 36428 var _c$args = c.args, 36429 x = _c$args[0], 36430 y = _c$args[1]; 36431 36432 bbox.addPoint(x, y); 36433 cx = x; 36434 cy = y; 36435 break; 36436 36437 case 'quadraticCurveTo': 36438 case 'bezierCurveTo': 36439 if (c.command === 'quadraticCurveTo') { 36440 // http://fontforge.org/bezier.html 36441 var _c$args2 = c.args, 36442 qp1x = _c$args2[0], 36443 qp1y = _c$args2[1], 36444 p3x = _c$args2[2], 36445 p3y = _c$args2[3]; 36446 36447 var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0) 36448 var cp1y = cy + 2 / 3 * (qp1y - cy); 36449 var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2) 36450 var cp2y = p3y + 2 / 3 * (qp1y - p3y); 36451 } else { 36452 var _c$args3 = c.args, 36453 cp1x = _c$args3[0], 36454 cp1y = _c$args3[1], 36455 cp2x = _c$args3[2], 36456 cp2y = _c$args3[3], 36457 p3x = _c$args3[4], 36458 p3y = _c$args3[5]; 36459 } 36460 36461 // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html 36462 bbox.addPoint(p3x, p3y); 36463 36464 var p0 = [cx, cy]; 36465 var p1 = [cp1x, cp1y]; 36466 var p2 = [cp2x, cp2y]; 36467 var p3 = [p3x, p3y]; 36468 36469 for (var i = 0; i <= 1; i++) { 36470 var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; 36471 var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; 36472 c = 3 * p1[i] - 3 * p0[i]; 36473 36474 if (a === 0) { 36475 if (b === 0) { 36476 continue; 36477 } 36478 36479 var t = -c / b; 36480 if (0 < t && t < 1) { 36481 if (i === 0) { 36482 bbox.addPoint(f(t), bbox.maxY); 36483 } else if (i === 1) { 36484 bbox.addPoint(bbox.maxX, f(t)); 36485 } 36486 } 36487 36488 continue; 36489 } 36490 36491 var b2ac = Math.pow(b, 2) - 4 * c * a; 36492 if (b2ac < 0) { 36493 continue; 36494 } 36495 36496 var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); 36497 if (0 < t1 && t1 < 1) { 36498 if (i === 0) { 36499 bbox.addPoint(f(t1), bbox.maxY); 36500 } else if (i === 1) { 36501 bbox.addPoint(bbox.maxX, f(t1)); 36502 } 36503 } 36504 36505 var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); 36506 if (0 < t2 && t2 < 1) { 36507 if (i === 0) { 36508 bbox.addPoint(f(t2), bbox.maxY); 36509 } else if (i === 1) { 36510 bbox.addPoint(bbox.maxX, f(t2)); 36511 } 36512 } 36513 } 36514 36515 cx = p3x; 36516 cy = p3y; 36517 break; 36518 } 36519 } 36520 36521 return this._bbox = _Object$freeze(bbox); 36522 } 36523 }]); 36524 36525 return Path; 36526}(); 36527 36528var _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; 36529 36530var _loop = function _loop() { 36531 var command = _arr[_i6]; 36532 Path.prototype[command] = function () { 36533 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 36534 args[_key] = arguments[_key]; 36535 } 36536 36537 this._bbox = this._cbox = null; 36538 this.commands.push({ 36539 command: command, 36540 args: args 36541 }); 36542 36543 return this; 36544 }; 36545}; 36546 36547for (var _i6 = 0; _i6 < _arr.length; _i6++) { 36548 _loop(); 36549} 36550 36551var StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodce
36551ntered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat']; 36552 36553var _class$8; 36554function _applyDecoratedDescriptor$4(target, property, decorators, descriptor, context) { 36555 var desc = {}; 36556 Object['ke' + 'ys'](descriptor).forEach(function (key) { 36557 desc[key] = descriptor[key]; 36558 }); 36559 desc.enumerable = !!desc.enumerable; 36560 desc.configurable = !!desc.configurable; 36561 36562 if ('value' in desc || desc.initializer) { 36563 desc.writable = true; 36564 } 36565 36566 desc = decorators.slice().reverse().reduce(function (desc, decorator) { 36567 return decorator(target, property, desc) || desc; 36568 }, desc); 36569 36570 if (context && desc.initializer !== void 0) { 36571 desc.value = desc.initializer ? desc.initializer.call(context) : void 0; 36572 desc.initializer = undefined; 36573 } 36574 36575 if (desc.initializer === void 0) { 36576 Object['define' + 'Property'](target, property, desc); 36577 desc = null; 36578 } 36579 36580 return desc; 36581} 36582 36583/** 36584 * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and 36585 * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context. 36586 * 36587 * You do not create glyph objects directly. They are created by various methods on the font object. 36588 * There are several subclasses of the base Glyph class internally that may be returned depending 36589 * on the font format, but they all inherit from this class. 36590 */ 36591var Glyph = (_class$8 = function () { 36592 function Glyph(id, codePoints, font) { 36593 _classCallCheck(this, Glyph); 36594 36595 /** 36596 * The glyph id in the font 36597 * @type {number} 36598 */ 36599 this.id = id; 36600 36601 /** 36602 * An array of unicode code points that are represented by this glyph. 36603 * There can be multiple code points in the case of ligatures and other glyphs 36604 * that represent multiple visual characters. 36605 * @type {number[]} 36606 */ 36607 this.codePoints = codePoints; 36608 this._font = font; 36609 36610 // TODO: get this info from GDEF if available 36611 this.isMark = this.codePoints.every(unicode.isMark); 36612 this.isLigature = this.codePoints.length > 1; 36613 } 36614 36615 Glyph.prototype._getPath = function _getPath() { 36616 return new Path(); 36617 }; 36618 36619 Glyph.prototype._getCBox = function _getCBox() { 36620 return this.path.cbox; 36621 }; 36622 36623 Glyph.prototype._getBBox = function _getBBox() { 36624 return this.path.bbox; 36625 }; 36626 36627 Glyph.prototype._getTableMetrics = function _getTableMetrics(table) { 36628 if (this.id < table.metrics.length) { 36629 return table.metrics.get(this.id); 36630 } 36631 36632 var metric = table.metrics.get(table.metrics.length - 1); 36633 var res = { 36634 advance: metric ? metric.advance : 0, 36635 bearing: table.bearings.get(this.id - table.metrics.length) || 0 36636 }; 36637 36638 return res; 36639 }; 36640 36641 Glyph.prototype._getMetrics = function _getMetrics(cbox) { 36642 if (this._metrics) { 36643 return this._metrics; 36644 } 36645 36646 var _getTableMetrics2 = this._getTableMetrics(this._font.hmtx), 36647 advanceWidth = _getTableMetrics2.advance, 36648 leftBearing = _getTableMetrics2.bearing; 36649 36650 // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea 36651 36652 36653 if (this._font.vmtx) { 36654 var _getTableMetrics3 = this._getTableMetrics(this._font.vmtx), 36655 advanceHeight = _getTableMetrics3.advance, 36656 topBearing = _getTableMetrics3.bearing; 36657 } else { 36658 var os2 = void 0; 36659 if (typeof cbox === 'undefined' || cbox === null) { 36660 cbox = this.cbox; 36661 } 36662 36663 if ((os2 = this._font['OS/2']) && os2.version > 0) { 36664 var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender); 36665 var topBearing = os2.typoAscender - cbox.maxY; 36666 } else { 36667 var hhea = this._font.hhea; 36668 36669 var advanceHeight = Math.abs(hhea.ascent - hhea.descent); 36670 var topBearing = hhea.ascent - cbox.maxY; 36671 } 36672 } 36673 36674 if (this._font._variationProcessor && this._font.HVAR) { 36675 advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR); 36676 } 36677 36678 return this._metrics = { advanceWidth: advanceWidth, advanceHeight: advanceHeight, leftBearing: leftBearing, topBearing: topBearing }; 36679 }; 36680 36681 /** 36682 * The glyphâs control box. 36683 * This is often the same as the bounding box, but is faster to compute. 36684 * Because of the way bezier curves are defined, some of the control points 36685 * can be outside of the bounding box. Where `bbox` takes this into account, 36686 * `cbox` does not. Thus, cbox is less accurate, but faster to compute. 36687 * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2) 36688 * for a more detailed description. 36689 * 36690 * @type {BBox} 36691 */ 36692 36693 36694 /** 36695 * Returns a path scaled to the given font size. 36696 * @param {number} size 36697 * @return {Path} 36698 */ 36699 Glyph.prototype.getScaledPath = function getScaledPath(size) { 36700 var scale = 1 / this._font.unitsPerEm * size; 36701 return this.path.scale(scale); 36702 }; 36703 36704 /** 36705 * The glyph's advance width. 36706 * @type {number} 36707 */ 36708 36709 36710 Glyph.prototype._getName = function _getName() { 36711 var post = this._font.post; 36712 36713 if (!post) { 36714 return null; 36715 } 36716 36717 switch (post.version) { 36718 case 1: 36719 return StandardNames[this.id]; 36720 36721 case 2: 36722 var id = post.glyphNameIndex[this.id]; 36723 if (id < StandardNames.length) { 36724 return StandardNames[id]; 36725 } 36726 36727 return post.names[id - StandardNames.length]; 36728 36729 case 2.5: 36730 return StandardNames[this.id + post.offsets[this.id]]; 36731 36732 case 4: 36733 return String.fromCharCode(post.map[this.id]); 36734 } 36735 }; 36736 36737 /** 36738 * The glyph's name 36739 * @type {string} 36740 */ 36741 36742 36743 /** 36744 * Renders the glyph to the given graphics context, at the specified font size. 36745 * @param {CanvasRenderingContext2d} ctx 36746 * @param {number} size 36747 */ 36748 Glyph.prototype.render = function render(ctx, size) { 36749 ctx.save(); 36750 36751 var scale = 1 / this._font.head.unitsPerEm * size; 36752 ctx.scale(scale, scale); 36753 36754 var fn = this.path.toFunction(); 36755 fn(ctx); 36756 ctx.fill(); 36757
36758 ctx.restore(); 36759 }; 36760 36761 _createClass(Glyph, [{ 36762 key: 'cbox', 36763 get: function get() { 36764 return this._getCBox(); 36765 } 36766 36767 /** 36768 * The glyphâs bounding box, i.e. the rectangle that encloses the 36769 * glyph outline as tightly as possible. 36770 * @type {BBox} 36771 */ 36772 36773 }, { 36774 key: 'bbox', 36775 get: function get() { 36776 return this._getBBox(); 36777 } 36778 36779 /** 36780 * A vector Path object representing the glyph outline. 36781 * @type {Path} 36782 */ 36783 36784 }, { 36785 key: 'path', 36786 get: function get() { 36787 // Cache the path so we only decode it once 36788 // Decoding is actually performed by subclasses 36789 return this._getPath(); 36790 } 36791 }, { 36792 key: 'advanceWidth', 36793 get: function get() { 36794 return this._getMetrics().advanceWidth; 36795 } 36796 36797 /** 36798 * The glyph's advance height. 36799 * @type {number} 36800 */ 36801 36802 }, { 36803 key: 'advanceHeight', 36804 get: function get() { 36805 return this._getMetrics().advanceHeight; 36806 } 36807 }, { 36808 key: 'ligatureCaretPositions', 36809 get: function get() {} 36810 }, { 36811 key: 'name', 36812 get: function get() { 36813 return this._getName(); 36814 } 36815 }]); 36816 36817 return Glyph; 36818}(), (_applyDecoratedDescriptor$4(_class$8.prototype, 'cbox', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'cbox'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'bbox', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'bbox'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'path', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'path'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'advanceWidth', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'advanceWidth'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'advanceHeight', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'advanceHeight'), _class$8.prototype), _applyDecoratedDescriptor$4(_class$8.prototype, 'name', [cache], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'name'), _class$8.prototype)), _class$8); 36819 36820// The header for both simple and composite glyphs 36821var GlyfHeader = new r.Struct({ 36822 numberOfContours: r.int16, // if negative, this is a composite glyph 36823 xMin: r.int16, 36824 yMin: r.int16, 36825 xMax: r.int16, 36826 yMax: r.int16 36827}); 36828 36829// Flags for simple glyphs 36830var ON_CURVE = 1 << 0; 36831var X_SHORT_VECTOR = 1 << 1; 36832var Y_SHORT_VECTOR = 1 << 2; 36833var REPEAT = 1 << 3; 36834var SAME_X = 1 << 4; 36835var SAME_Y = 1 << 5; 36836 36837// Flags for composite glyphs 36838var ARG_1_AND_2_ARE_WORDS = 1 << 0; 36839var WE_HAVE_A_SCALE = 1 << 3; 36840var MORE_COMPONENTS = 1 << 5; 36841var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; 36842var WE_HAVE_A_TWO_BY_TWO = 1 << 7; 36843var WE_HAVE_INSTRUCTIONS = 1 << 8; 36844// Represents a point in a simple glyph 36845var Point = function () { 36846 function Point(onCurve, endContour) { 36847 var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 36848 var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; 36849 36850 _classCallCheck(this, Point); 36851 36852 this.onCurve = onCurve; 36853 this.endContour = endContour; 36854 this.x = x; 36855 this.y = y; 36856 } 36857 36858 Point.prototype.copy = function copy() { 36859 return new Point(this.onCurve, this.endContour, this.x, this.y); 36860 }; 36861 36862 return Point; 36863}(); 36864 36865// Represents a component in a composite glyph 36866 36867var Component = function Component(glyphID, dx, dy) { 36868 _classCallCheck(this, Component); 36869 36870 this.glyphID = glyphID; 36871 this.dx = dx;
36872 this.dy = dy; 36873 this.pos = 0; 36874 this.scaleX = this.scaleY = 1; 36875 this.scale01 = this.scale10 = 0; 36876}; 36877 36878/** 36879 * Represents a TrueType glyph. 36880 */ 36881 36882 36883var TTFGlyph = function (_Glyph) { 36884 _inherits(TTFGlyph, _Glyph); 36885 36886 function TTFGlyph() { 36887 _classCallCheck(this, TTFGlyph); 36888 36889 return _possibleConstructorReturn(this, _Glyph.apply(this, arguments)); 36890 } 36891 36892 // Parses just the glyph header and returns the bounding box 36893 TTFGlyph.prototype._getCBox = function _getCBox(internal) { 36894 // We need to decode the glyph if variation processing is requested, 36895 // so it's easier just to recompute the path's cbox after decoding. 36896 if (this._font._variationProcessor && !internal) { 36897 return this.path.cbox; 36898 } 36899 36900 var stream = this._font._getTableStream('glyf'); 36901 stream.pos += this._font.loca.offsets[this.id]; 36902 var glyph = GlyfHeader.decode(stream); 36903 36904 var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax); 36905 return _Object$freeze(cbox); 36906 }; 36907 36908 // Parses a single glyph coordinate 36909 36910 36911 TTFGlyph.prototype._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) { 36912 if (short) { 36913 var val = stream.readUInt8(); 36914 if (!same) { 36915 val = -val; 36916 } 36917 36918 val += prev; 36919 } else { 36920 if (same) { 36921 var val = prev; 36922 } else { 36923 var val = prev + stream.readInt16BE(); 36924 } 36925 } 36926 36927 return val; 36928 }; 36929 36930 // Decodes the glyph data into points for simple glyphs, 36931 // or components for composite glyphs 36932 36933 36934 TTFGlyph.prototype._decode = function _decode() { 36935 var glyfPos = this._font.loca.offsets[this.id]; 36936 var nextPos = this._font.loca.offsets[this.id + 1]; 36937 36938 // Nothing to do if there is no data for this glyph 36939 if (glyfPos === nextPos) { 36940 return null; 36941 } 36942 36943 var stream = this._font._getTableStream('glyf'); 36944 stream.pos += glyfPos; 36945 var startPos = stream.pos; 36946 36947 var glyph = GlyfHeader.decode(stream); 36948 36949 if (glyph.numberOfContours > 0) { 36950 this._decodeSimple(glyph, stream); 36951 } else if (glyph.numberOfContours < 0) { 36952 this._decodeComposite(glyph, stream, startPos); 36953 } 36954 36955 return glyph; 36956 }; 36957 36958 TTFGlyph.prototype._decodeSimple = function _decodeSimple(glyph, stream) { 36959 // this is a simple glyph 36960 glyph.points = []; 36961 36962 var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream); 36963 glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream); 36964 36965 var flags = []; 36966 var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1; 36967 36968 while (flags.length < numCoords) { 36969 var flag = stream.readUInt8(); 36970 flags.push(flag); 36971 36972 // check for repeat flag 36973 if (flag & REPEAT) { 36974 var count = stream.readUInt8(); 36975 for (var j = 0; j < count; j++) { 36976 flags.push(flag); 36977 } 36978 } 36979 } 36980 36981 for (var i = 0; i < flags.length; i++) { 36982 var flag = flags[i]; 36983 var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0); 36984 glyph.points.push(point); 36985 } 36986 36987 var px = 0; 36988 for (var i = 0; i < flags.length; i++) { 36989 var flag = flags[i]; 36990 glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X); 36991 } 36992 36993 var py = 0; 36994 for (var i = 0; i < flags.length; i++) { 36995 var flag = flags[i]; 36996 glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y); 36997 } 36998 36999 if (this._font._variationProcessor) { 37000 var points = glyph.points.slice(); 37001 points.push.apply(points, this._getPhantomPoints(glyph)); 37002 37003 this._font._variationProcessor.transformPoints(this.id, points); 37004 glyph.phantomPoints = points.slice(-4); 37005 } 37006 37007 return; 37008 }; 37009 37010 TTFGlyph.prototype._decodeComposite = function _decodeComposite(glyph, stream) { 37011 var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 37012 37013 // this is a composite glyph 37014 glyph.components = []; 37015 var haveInstructions = false; 37016 var flags = MORE_COMPONENTS; 37017 37018 while (flags & MORE_COMPONENTS) { 37019 flags = stream.readUInt16BE(); 37020 var gPos = stream.pos - offset; 37021 var glyphID = stream.readUInt16BE(); 37022 if (!haveInstructions) { 37023 haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0; 37024 } 37025 37026 if (flags & ARG_1_AND_2_ARE_WORDS) { 37027 var dx = stream.readInt16BE(); 37028 var dy = stream.readInt16BE(); 37029 } else { 37030 var dx = stream.readInt8(); 37031 var dy = stream.readInt8(); 37032 } 37033 37034 var component = new Component(glyphID, dx, dy); 37035 component.pos = gPos; 37036 37037 if (flags & WE_HAVE_A_SCALE) { 37038 // fixed number with 14 bits of fraction 37039 component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37040 } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { 37041 component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37042 component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37043 } else if (flags & WE_HAVE_A_TWO_BY_TWO) { 37044 component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37045 component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37046 component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37047 component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824; 37048 } 37049 37050 glyph.components.push(component); 37051 } 37052 37053 if (this._font._variationProcessor) { 37054 var points = []; 37055 for (var j = 0; j < glyph.components.length; j++) { 37056 var component = glyph.components[j]; 37057 points.push(new Point(true, true, component.dx, component.dy)); 37058 } 37059
37060 points.push.apply(points, this._getPhantomPoints(glyph)); 37061 37062 this._font._variationProcessor.transformPoints(this.id, points); 37063 glyph.phantomPoints = points.splice(-4, 4); 37064 37065 for (var i = 0; i < points.length; i++) { 37066 var point = points[i]; 37067 glyph.components[i].dx = point.x; 37068 glyph.components[i].dy = point.y; 37069 } 37070 } 37071 37072 return haveInstructions; 37073 }; 37074 37075 TTFGlyph.prototype._getPhantomPoints = function _getPhantomPoints(glyph) { 37076 var cbox = this._getCBox(true); 37077 if (this._metrics == null) { 37078 this._metrics = Glyph.prototype._getMetrics.call(this, cbox); 37079 } 37080 37081 var _metrics = this._metrics, 37082 advanceWidth = _metrics.advanceWidth, 37083 advanceHeight = _metrics.advanceHeight, 37084 leftBearing = _metrics.leftBearing, 37085 topBearing = _metrics.topBearing; 37086 37087 37088 return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)]; 37089 }; 37090 37091 // Decodes font data, resolves composite glyphs, and returns an array of contours 37092 37093 37094 TTFGlyph.prototype._getContours = function _getContours() { 37095 var glyph = this._decode(); 37096 if (!glyph) { 37097 return []; 37098 } 37099 37100 var points = []; 37101 37102 if (glyph.numberOfContours < 0) { 37103 // resolve composite glyphs 37104 for (var _iterator = glyph.components, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 37105 var _ref; 37106 37107 if (_isArray) { 37108 if (_i >= _iterator.length) break; 37109 _ref = _iterator[_i++]; 37110 } else { 37111 _i = _iterator.next(); 37112 if (_i.done) break; 37113 _ref = _i.value; 37114 } 37115 37116 var component = _ref; 37117 37118 var _contours = this._font.getGlyph(component.glyphID)._getContours(); 37119 for (var i = 0; i < _contours.length; i++) { 37120 var contour = _contours[i]; 37121 for (var j = 0; j < contour.length; j++) { 37122 var _point = contour[j]; 37123 var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx; 37124 var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy; 37125 points.push(new Point(_point.onCurve, _point.endContour, x, y)); 37126 } 37127 } 37128 } 37129 } else { 37130 points = glyph.points || []; 37131 } 37132 37133 // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table 37134 if (glyph.phantomPoints && !this._font.directory.tables.HVAR) { 37135 this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x; 37136 this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y; 37137 this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x; 37138 this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax; 37139 } 37140 37141 var contours = []; 37142 var cur = []; 37143 for (var k = 0; k < points.length; k++) { 37144 var point = points[k]; 37145 cur.push(point); 37146 if (point.endContour) { 37147 contours.push(cur); 37148 cur = []; 37149 } 37150 } 37151 37152 return contours; 37153 }; 37154 37155 TTFGlyph.prototype._getMetrics = function _getMetrics() { 37156 if (this._metrics) { 37157 return this._metrics; 37158 } 37159 37160 var cbox = this._getCBox(true); 37161 _Glyph.prototype._getMetrics.call(this, cbox); 37162 37163 if (this._font._variationProcessor && !this._font.HVAR) { 37164 // No HVAR table, decode the glyph. This triggers recomputation of metrics. 37165 this.path; 37166 } 37167 37168 return this._metrics; 37169 }; 37170 37171 // Converts contours to a Path object that can be rendered 37172 37173 37174 TTFGlyph.prototype._getPath = function _getPath() { 37175 var contours = this._getContours(); 37176 var path = new Path(); 37177 37178 for (var i = 0; i < contours.length; i++) { 37179 var contour = contours[i]; 37180 var firstPt = contour[0]; 37181 var lastPt = contour[contour.length - 1]; 37182 var start = 0; 37183 37184 if (firstPt.onCurve) { 37185 // The first point will be consumed by the moveTo command, so skip in the loop 37186 var curvePt = null; 37187 start = 1; 37188 } else { 37189 if (lastPt.onCurve) { 37190 // Start at the last point if the first point is off curve and the last point is on curve 37191 firstPt = lastPt; 37192 } else { 37193 // Start at the middle if both the first and last points are off curve 37194 firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2); 37195 } 37196 37197 var curvePt = firstPt; 37198 } 37199 37200 path.moveTo(firstPt.x, firstPt.y); 37201 37202 for (var j = start; j < contour.length; j++) { 37203 var pt = contour[j]; 37204 var prevPt = j === 0 ? firstPt : contour[j - 1]; 37205 37206 if (prevPt.onCurve && pt.onCurve) { 37207 path.lineTo(pt.x, pt.y); 37208 } else if (prevPt.onCurve && !pt.onCurve) { 37209 var curvePt = pt; 37210 } else if (!prevPt.onCurve && !pt.onCurve) { 37211 var midX = (prevPt.x + pt.x) / 2; 37212 var midY = (prevPt.y + pt.y) / 2; 37213 path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY); 37214 var curvePt = pt; 37215 } else if (!prevPt.onCurve && pt.onCurve) { 37216 path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y); 37217 var curvePt = null; 37218 } else { 37219 throw new Error("Unknown TTF path state"); 37220 } 37221 } 37222 37223 // Connect the first and last points 37224 if (curvePt) { 37225 path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y); 37226 } 37227
37228 path.closePath(); 37229 } 37230 37231 return path; 37232 }; 37233 37234 return TTFGlyph; 37235}(Glyph); 37236 37237/** 37238 * Represents an OpenType PostScript glyph, in the Compact Font Format. 37239 */ 37240 37241var CFFGlyph = function (_Glyph) { 37242 _inherits(CFFGlyph, _Glyph); 37243 37244 function CFFGlyph() { 37245 _classCallCheck(this, CFFGlyph); 37246 37247 return _possibleConstructorReturn(this, _Glyph.apply(this, arguments)); 37248 } 37249 37250 CFFGlyph.prototype._getName = function _getName() { 37251 if (this._font.CFF2) { 37252 return _Glyph.prototype._getName.call(this); 37253 } 37254 37255 return this._font['CFF '].getGlyphName(this.id); 37256 }; 37257 37258 CFFGlyph.prototype.bias = function bias(s) { 37259 if (s.length < 1240) { 37260 return 107; 37261 } else if (s.length < 33900) { 37262 return 1131; 37263 } else { 37264 return 32768; 37265 } 37266 }; 37267 37268 CFFGlyph.prototype._getPath = function _getPath() { 37269 var stream = this._font.stream; 37270 var pos = stream.pos; 37271 37272 37273 var cff = this._font.CFF2 || this._font['CFF ']; 37274 var str = cff.topDict.CharStrings[this.id]; 37275 var end = str.offset + str.length; 37276 stream.pos = str.offset; 37277 37278 var path = new Path(); 37279 var stack = []; 37280 var trans = []; 37281 37282 var width = null; 37283 var nStems = 0; 37284 var x = 0, 37285 y = 0; 37286 var usedGsubrs = void 0; 37287 var usedSubrs = void 0; 37288 var open = false; 37289 37290 this._usedGsubrs = usedGsubrs = {}; 37291 this._usedSubrs = usedSubrs = {}; 37292 37293 var gsubrs = cff.globalSubrIndex || []; 37294 var gsubrsBias = this.bias(gsubrs); 37295 37296 var privateDict = cff.privateDictForGlyph(this.id); 37297 var subrs = privateDict.Subrs || []; 37298 var subrsBias = this.bias(subrs); 37299 37300 var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore; 37301 var vsindex = privateDict.vsindex; 37302 var variationProcessor = this._font._variationProcessor; 37303 37304 function checkWidth() { 37305 if (width == null) { 37306 width = stack.shift() + privateDict.nominalWidthX; 37307 } 37308 } 37309 37310 function parseStems() { 37311 if (stack.length % 2 !== 0) { 37312 checkWidth(); 37313 } 37314 37315 nStems += stack.length >> 1; 37316 return stack.length = 0; 37317 } 37318 37319 function moveTo(x, y) { 37320 if (open) { 37321 path.closePath(); 37322 } 37323 37324 path.moveTo(x, y); 37325 open = true; 37326 } 37327 37328 var parse = function parse() { 37329 while (stream.pos < end) { 37330 var op = stream.readUInt8(); 37331 if (op < 32) { 37332 switch (op) { 37333 case 1: // hstem 37334 case 3: // vstem 37335 case 18: // hstemhm 37336 case 23: 37337 // vstemhm 37338 parseStems(); 37339 break; 37340 37341 case 4: 37342 // vmoveto 37343 if (stack.length > 1) { 37344 checkWidth(); 37345 } 37346 37347 y += stack.shift(); 37348 moveTo(x, y); 37349 break; 37350 37351 case 5: 37352 // rlineto 37353 while (stack.length >= 2) { 37354 x += stack.shift(); 37355 y += stack.shift(); 37356 path.lineTo(x, y); 37357 } 37358 break; 37359 37360 case 6: // hlineto 37361 case 7: 37362 // vlineto 37363 var phase = op === 6; 37364 while (stack.length >= 1) { 37365 if (phase) { 37366 x += stack.shift(); 37367 } else { 37368 y += stack.shift(); 37369 } 37370 37371 path.lineTo(x, y); 37372 phase = !phase; 37373 } 37374 break; 37375 37376 case 8: 37377 // rrcurveto 37378 while (stack.length > 0) { 37379 var c1x = x + stack.shift(); 37380 var c1y = y + stack.shift(); 37381 var c2x = c1x + stack.shift(); 37382 var c2y = c1y + stack.shift(); 37383 x = c2x + stack.shift(); 37384 y = c2y + stack.shift(); 37385 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37386 } 37387 break; 37388 37389 case 10: 37390 // callsubr 37391 var index = stack.pop() + subrsBias; 37392 var subr = subrs[index]; 37393 if (subr) { 37394 usedSubrs[index] = true; 37395 var p = stream.pos; 37396 var e = end; 37397 stream.pos = subr.offset; 37398 end = subr.offset + subr.length; 37399 parse(); 37400 stream.pos = p; 37401 end = e; 37402 } 37403 break; 37404 37405 case 11: 37406 // return 37407 if (cff.version >= 2) { 37408 break; 37409 } 37410 return; 37411 37412 case 14: 37413 // endchar 37414 if (cff.version >= 2) { 37415 break; 37416 } 37417 37418 if (stack.length > 0) { 37419 checkWidth(); 37420 } 37421 37422 if (open) {
37423 path.closePath(); 37424 open = false; 37425 } 37426 break; 37427 37428 case 15: 37429 { 37430 // vsindex 37431 if (cff.version < 2) { 37432 throw new Error('vsindex operator not supported in CFF v1'); 37433 } 37434 37435 vsindex = stack.pop(); 37436 break; 37437 } 37438 37439 case 16: 37440 { 37441 // blend 37442 if (cff.version < 2) { 37443 throw new Error('blend operator not supported in CFF v1'); 37444 } 37445 37446 if (!variationProcessor) { 37447 throw new Error('blend operator in non-variation font'); 37448 } 37449 37450 var blendVector = variationProcessor.getBlendVector(vstore, vsindex); 37451 var numBlends = stack.pop(); 37452 var numOperands = numBlends * blendVector.length; 37453 var delta = stack.length - numOperands; 37454 var base = delta - numBlends; 37455 37456 for (var i = 0; i < numBlends; i++) { 37457 var sum = stack[base + i]; 37458 for (var j = 0; j < blendVector.length; j++) { 37459 sum += blendVector[j] * stack[delta++]; 37460 } 37461 37462 stack[base + i] = sum; 37463 } 37464 37465 while (numOperands--) { 37466 stack.pop(); 37467 } 37468 37469 break; 37470 } 37471 37472 case 19: // hintmask 37473 case 20: 37474 // cntrmask 37475 parseStems(); 37476 stream.pos += nStems + 7 >> 3; 37477 break; 37478 37479 case 21: 37480 // rmoveto 37481 if (stack.length > 2) { 37482 checkWidth(); 37483 } 37484 37485 x += stack.shift(); 37486 y += stack.shift(); 37487 moveTo(x, y); 37488 break; 37489 37490 case 22: 37491 // hmoveto 37492 if (stack.length > 1) { 37493 checkWidth(); 37494 } 37495 37496 x += stack.shift(); 37497 moveTo(x, y); 37498 break; 37499 37500 case 24: 37501 // rcurveline 37502 while (stack.length >= 8) { 37503 var c1x = x + stack.shift(); 37504 var c1y = y + stack.shift(); 37505 var c2x = c1x + stack.shift(); 37506 var c2y = c1y + stack.shift(); 37507 x = c2x + stack.shift(); 37508 y = c2y + stack.shift(); 37509 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37510 } 37511 37512 x += stack.shift(); 37513 y += stack.shift(); 37514 path.lineTo(x, y); 37515 break; 37516 37517 case 25: 37518 // rlinecurve 37519 while (stack.length >= 8) { 37520 x += stack.shift(); 37521 y += stack.shift(); 37522 path.lineTo(x, y); 37523 } 37524 37525 var c1x = x + stack.shift(); 37526 var c1y = y + stack.shift(); 37527 var c2x = c1x + stack.shift(); 37528 var c2y = c1y + stack.shift(); 37529 x = c2x + stack.shift(); 37530 y = c2y + stack.shift(); 37531 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37532 break; 37533 37534 case 26: 37535 // vvcurveto 37536 if (stack.length % 2) { 37537 x += stack.shift(); 37538 } 37539 37540 while (stack.length >= 4) { 37541 c1x = x; 37542 c1y = y + stack.shift(); 37543 c2x = c1x + stack.shift(); 37544 c2y = c1y + stack.shift(); 37545 x = c2x; 37546 y = c2y + stack.shift(); 37547 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37548 } 37549 break; 37550 37551 case 27: 37552 // hhcurveto 37553 if (stack.length % 2) { 37554 y += stack.shift(); 37555 } 37556 37557 while (stack.length >= 4) { 37558 c1x = x + stack.shift(); 37559 c1y = y; 37560 c2x = c1x + stack.shift(); 37561 c2y = c1y + stack.shift(); 37562 x = c2x + stack.shift(); 37563 y = c2y; 37564 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37565 } 37566 break; 37567 37568 case 28: 37569 // shortint 37570 stack.push(stream.readInt16BE()); 37571 break; 37572 37573 case 29: 37574 // callgsubr 37575 index = stack.pop() + gsubrsBias; 37576 subr = gsubrs[index]; 37577 if (subr) { 37578 usedGsubrs[index] = true; 37579 var p = stream.pos; 37580 var e = end; 37581 stream.pos = subr.offset; 37582 end = subr.offset + subr.length; 37583 parse(); 37584 stream.pos = p; 37585 end = e; 37586 } 37587 break; 37588 37589 case 30: // vhcurveto 37590 case 31: 37591 // hvcurveto 37592 phase = op === 31; 37593 while (stack.length >= 4) { 37594 if (phase) { 37595 c1x = x + stack.shift(); 37596 c1y = y; 37597 c2x = c1x + stack.shift(); 37598 c2y = c1y + stack.shift(); 37599 y = c2y + stack.shift(); 37600 x = c2x + (stack.length === 1 ? stack.shift() : 0); 37601 } else { 37602 c1x = x; 37603 c1y = y + stack.shift(); 37604 c2x = c1x + stack.shift(); 37605 c2y = c1y + stack.shift(); 37606 x = c2x + stack.shift(); 37607 y = c2y + (stack.length === 1 ? stack.shift() : 0); 37608 } 37609 37610 path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y); 37611 phase = !phase; 37612 } 37613 break; 37614 37615 case 12: 37616 op = stream.readUInt8(); 37617 switch (op) { 37618 case 3: 37619 // and 37620 var a = stack.pop(); 37621 var b = stack.pop(); 37622 stack.push(a && b ? 1 : 0); 37623 break; 37624 37625 case 4: 37626 // or 37627 a = stack.pop(); 37628 b = stack.pop(); 37629 stack.push(a || b ? 1 : 0); 37630 break; 37631 37632 case 5: 37633 // not 37634 a = stack.pop(); 37635 stack.push(a ? 0 : 1); 37636 break; 37637 37638 case 9: 37639 // abs 37640 a = stack.pop();
37641 stack.push(Math.abs(a)); 37642 break; 37643 37644 case 10: 37645 // add 37646 a = stack.pop(); 37647 b = stack.pop(); 37648 stack.push(a + b); 37649 break; 37650 37651 case 11: 37652 // sub 37653 a = stack.pop(); 37654 b = stack.pop(); 37655 stack.push(a - b); 37656 break; 37657 37658 case 12: 37659 // div 37660 a = stack.pop(); 37661 b = stack.pop(); 37662 stack.push(a / b); 37663 break; 37664 37665 case 14: 37666 // neg 37667 a = stack.pop(); 37668 stack.push(-a); 37669 break; 37670 37671 case 15: 37672 // eq 37673 a = stack.pop(); 37674 b = stack.pop(); 37675 stack.push(a === b ? 1 : 0); 37676 break; 37677 37678 case 18: 37679 // drop 37680 stack.pop(); 37681 break; 37682 37683 case 20: 37684 // put 37685 var val = stack.pop(); 37686 var idx = stack.pop(); 37687 trans[idx] = val; 37688 break; 37689 37690 case 21: 37691 // get 37692 idx = stack.pop(); 37693 stack.push(trans[idx] || 0); 37694 break; 37695 37696 case 22: 37697 // ifelse 37698 var s1 = stack.pop(); 37699 var s2 = stack.pop(); 37700 var v1 = stack.pop(); 37701 var v2 = stack.pop(); 37702 stack.push(v1 <= v2 ? s1 : s2); 37703 break; 37704 37705 case 23: 37706 // random 37707 stack.push(Math.random()); 37708 break; 37709 37710 case 24: 37711 // mul 37712 a = stack.pop(); 37713 b = stack.pop(); 37714 stack.push(a * b); 37715 break; 37716 37717 case 26: 37718 // sqrt 37719 a = stack.pop(); 37720 stack.push(Math.sqrt(a)); 37721 break; 37722 37723 case 27: 37724 // dup 37725 a = stack.pop(); 37726 stack.push(a, a); 37727 break; 37728 37729 case 28: 37730 // exch 37731 a = stack.pop(); 37732 b = stack.pop(); 37733 stack.push(b, a); 37734 break; 37735 37736 case 29: 37737 // index 37738 idx = stack.pop(); 37739 if (idx < 0) { 37740 idx = 0; 37741 } else if (idx > stack.length - 1) { 37742 idx = stack.length - 1; 37743 } 37744 37745 stack.push(stack[idx]); 37746 break; 37747 37748 case 30: 37749 // roll 37750 var n = stack.pop(); 37751 var _j = stack.pop(); 37752 37753 if (_j >= 0) { 37754 while (_j > 0) { 37755 var t = stack[n - 1]; 37756 for (var _i = n - 2; _i >= 0; _i--) { 37757 stack[_i + 1] = stack[_i]; 37758 } 37759 37760 stack[0] = t; 37761 _j--; 37762 } 37763 } else { 37764 while (_j < 0) { 37765 var t = stack[0]; 37766 for (var _i2 = 0; _i2 <= n; _i2++) { 37767 stack[_i2] = stack[_i2 + 1]; 37768 } 37769 37770 stack[n - 1] = t; 37771 _j++; 37772 } 37773 } 37774 break; 37775 37776 case 34: 37777 // hflex 37778 c1x = x + stack.shift(); 37779 c1y = y; 37780 c2x = c1x + stack.shift(); 37781 c2y = c1y + stack.shift(); 37782 var c3x = c2x + stack.shift(); 37783 var c3y = c2y; 37784 var c4x = c3x + stack.shift(); 37785 var c4y = c3y; 37786 var c5x = c4x + stack.shift(); 37787 var c5y = c4y; 37788 var c6x = c5x + stack.shift(); 37789 var c6y = c5y; 37790 x = c6x; 37791 y = c6y; 37792 37793 path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); 37794 path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); 37795 break; 37796 37797 case 35: 37798 // flex 37799 var pts = []; 37800 37801 for (var _i3 = 0; _i3 <= 5; _i3++) { 37802 x += stack.shift(); 37803 y += stack.shift(); 37804 pts.push(x, y); 37805 } 37806 37807 path.bezierCurveTo.apply(path, pts.slice(0, 6)); 37808 path.bezierCurveTo.apply(path, pts.slice(6)); 37809 stack.shift(); // fd 37810 break; 37811 37812 case 36: 37813 // hflex1 37814 c1x = x + stack.shift(); 37815 c1y = y + stack.shift(); 37816 c2x = c1x + stack.shift(); 37817 c2y = c1y + stack.shift(); 37818 c3x = c2x + stack.shift(); 37819 c3y = c2y; 37820 c4x = c3x + stack.shift(); 37821 c4y = c3y; 37822 c5x = c4x + stack.shift(); 37823 c5y = c4y + stack.shift(); 37824 c6x = c5x + stack.shift(); 37825 c6y = c5y; 37826 x = c6x; 37827 y = c6y; 37828 37829 path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y); 37830 path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y); 37831 break; 37832 37833 case 37: 37834 // flex1 37835 var startx = x;
37836 var starty = y; 37837 37838 pts = []; 37839 for (var _i4 = 0; _i4 <= 4; _i4++) { 37840 x += stack.shift(); 37841 y += stack.shift(); 37842 pts.push(x, y); 37843 } 37844 37845 if (Math.abs(x - startx) > Math.abs(y - starty)) { 37846 // horizontal 37847 x += stack.shift(); 37848 y = starty; 37849 } else { 37850 x = startx; 37851 y += stack.shift(); 37852 } 37853 37854 pts.push(x, y); 37855 path.bezierCurveTo.apply(path, pts.slice(0, 6)); 37856 path.bezierCurveTo.apply(path, pts.slice(6)); 37857 break; 37858 37859 default: 37860 throw new Error('Unknown op: 12 ' + op); 37861 } 37862 break; 37863 37864 default: 37865 throw new Error('Unknown op: ' + op); 37866 } 37867 } else if (op < 247) { 37868 stack.push(op - 139); 37869 } else if (op < 251) { 37870 var b1 = stream.readUInt8(); 37871 stack.push((op - 247) * 256 + b1 + 108); 37872 } else if (op < 255) { 37873 var b1 = stream.readUInt8(); 37874 stack.push(-(op - 251) * 256 - b1 - 108); 37875 } else { 37876 stack.push(stream.readInt32BE() / 65536); 37877 } 37878 } 37879 }; 37880 37881 parse(); 37882 37883 if (open) { 37884 path.closePath(); 37885 } 37886 37887 return path; 37888 }; 37889 37890 return CFFGlyph; 37891}(Glyph); 37892 37893var SBIXImage = new r.Struct({ 37894 originX: r.uint16, 37895 originY: r.uint16, 37896 type: new r.String(4), 37897 data: new r.Buffer(function (t) { 37898 return t.parent.buflen - t._currentOffset; 37899 }) 37900}); 37901 37902/** 37903 * Represents a color (e.g. emoji) glyph in Apple's SBIX format. 37904 */ 37905 37906var SBIXGlyph = function (_TTFGlyph) { 37907 _inherits(SBIXGlyph, _TTFGlyph); 37908 37909 function SBIXGlyph() { 37910 _classCallCheck(this, SBIXGlyph); 37911 37912 return _possibleConstructorReturn(this, _TTFGlyph.apply(this, arguments)); 37913 } 37914 37915 /** 37916 * Returns an object representing a glyph image at the given point size. 37917 * The object has a data property with a Buffer containing the actual image data, 37918 * along with the image type, and origin. 37919 * 37920 * @param {number} size 37921 * @return {object} 37922 */ 37923 SBIXGlyph.prototype.getImageForSize = function getImageForSize(size) { 37924 for (var i = 0; i < this._font.sbix.imageTables.length; i++) { 37925 var table = this._font.sbix.imageTables[i]; 37926 if (table.ppem >= size) { 37927 break; 37928 } 37929 } 37930 37931 var offsets = table.imageOffsets; 37932 var start = offsets[this.id]; 37933 var end = offsets[this.id + 1]; 37934 37935 if (start === end) { 37936 return null; 37937 } 37938 37939 this._font.stream.pos = start; 37940 return SBIXImage.decode(this._font.stream, { buflen: end - start }); 37941 }; 37942 37943 SBIXGlyph.prototype.render = function render(ctx, size) { 37944 var img = this.getImageForSize(size); 37945 if (img != null) { 37946 var scale = size / this._font.unitsPerEm; 37947 ctx.image(img.data, { height: size, x: img.originX, y: (this.bbox.minY - img.originY) * scale }); 37948 } 37949 37950 if (this._font.sbix.flags.renderOutlines) { 37951 _TTFGlyph.prototype.render.call(this, ctx, size); 37952 } 37953 }; 37954 37955 return SBIXGlyph; 37956}(TTFGlyph); 37957 37958var COLRLayer = function COLRLayer(glyph, color) { 37959 _classCallCheck(this, COLRLayer); 37960 37961 this.glyph = glyph; 37962 this.color = color; 37963}; 37964 37965/** 37966 * Represents a color (e.g. emoji) glyph in Microsoft's COLR format. 37967 * Each glyph in this format contain a list of colored layers, each 37968 * of which is another vector glyph. 37969 */ 37970 37971 37972var COLRGlyph = function (_Glyph) { 37973 _inherits(COLRGlyph, _Glyph); 37974 37975 function COLRGlyph() { 37976 _classCallCheck(this, COLRGlyph); 37977 37978 return _possibleConstructorReturn(this, _Glyph.apply(this, arguments)); 37979 } 37980 37981 COLRGlyph.prototype._getBBox = function _getBBox() { 37982 var bbox = new BBox(); 37983 for (var i = 0; i < this.layers.length; i++) { 37984 var layer = this.layers[i]; 37985 var b = layer.glyph.bbox; 37986 bbox.addPoint(b.minX, b.minY); 37987 bbox.addPoint(b.maxX, b.maxY); 37988 } 37989 37990 return bbox; 37991 }; 37992 37993 /** 37994 * Returns an array of objects containing the glyph and color for 37995 * each layer in the composite color glyph. 37996 * @type {object[]} 37997 */ 37998 37999 38000 COLRGlyph.prototype.render = function render(ctx, size) { 38001 for (var _iterator = this.layers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 38002 var _ref; 38003 38004 if (_isArray) { 38005 if (_i >= _iterator.length) break; 38006 _ref = _iterator[_i++]; 38007 } else { 38008 _i = _iterator.next(); 38009 if (_i.done) break; 38010 _ref = _i.value; 38011 } 38012 38013 var _ref2 = _ref, 38014 glyph = _ref2.glyph, 38015 color = _ref2.color; 38016 38017 ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100); 38018 glyph.render(ctx, size); 38019 } 38020 38021 return; 38022 }; 38023 38024 _createClass(COLRGlyph, [{ 38025 key: 'layers', 38026 get: function get() { 38027 var cpal = this._font.CPAL; 38028 var colr = this._font.COLR; 38029 var low = 0; 38030 var high = colr.baseGlyphRecord.length - 1; 38031 38032 while (low <= high) { 38033 var mid = low + high >> 1; 38034 var rec = colr.baseGlyphRecord[mid]; 38035 38036 if (this.id < rec.gid) { 38037 high = mid - 1; 38038 } else if (this.id > rec.gid) { 38039 low = mid + 1; 38040 } else { 38041 var baseLayer = rec; 38042 break; 38043 } 38044 } 38045 38046 // if base glyph not found in COLR table, 38047 // default to normal glyph from glyf or CFF 38048 if (baseLayer == null) { 38049 var g = this._font._getBaseGlyph(this.id); 38050 var color = { 38051 red: 0, 38052 green: 0, 38053 blue: 0, 38054 alpha: 255 38055 }; 38056 38057 return [new COLRLayer(g, color)]; 38058 } 38059 38060 // otherwise, return an array of all the layers 38061 var layers = []; 38062 for (var i = baseLayer.firstLayerIndex;
38062 i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) { 38063 var rec = colr.layerRecords[i]; 38064 var color = cpal.colorRecords[rec.paletteIndex]; 38065 var g = this._font._getBaseGlyph(rec.gid); 38066 layers.push(new COLRLayer(g, color)); 38067 } 38068 38069 return layers; 38070 } 38071 }]); 38072 38073 return COLRGlyph; 38074}(Glyph); 38075 38076var TUPLES_SHARE_POINT_NUMBERS = 0x8000; 38077var TUPLE_COUNT_MASK = 0x0fff; 38078var EMBEDDED_TUPLE_COORD = 0x8000; 38079var INTERMEDIATE_TUPLE = 0x4000; 38080var PRIVATE_POINT_NUMBERS = 0x2000; 38081var TUPLE_INDEX_MASK = 0x0fff; 38082var POINTS_ARE_WORDS = 0x80; 38083var POINT_RUN_COUNT_MASK = 0x7f; 38084var DELTAS_ARE_ZERO = 0x80; 38085var DELTAS_ARE_WORDS = 0x40; 38086var DELTA_RUN_COUNT_MASK = 0x3f; 38087 38088/** 38089 * This class is transforms TrueType glyphs according to the data from 38090 * the Apple Advanced Typography variation tables (fvar, gvar, and avar). 38091 * These tables allow infinite adjustments to glyph weight, width, slant, 38092 * and optical size without the designer needing to specify every exact style. 38093 * 38094 * Apple's documentation for these tables is not great, so thanks to the 38095 * Freetype project for figuring much of this out. 38096 * 38097 * @private 38098 */ 38099 38100var GlyphVariationProcessor = function () { 38101 function GlyphVariationProcessor(font, coords) { 38102 _classCallCheck(this, GlyphVariationProcessor); 38103 38104 this.font = font; 38105 this.normalizedCoords = this.normalizeCoords(coords); 38106 this.blendVectors = new _Map(); 38107 } 38108 38109 GlyphVariationProcessor.prototype.normalizeCoords = function normalizeCoords(coords) { 38110 // the default mapping is linear along each axis, in two segments: 38111 // from the minValue to defaultValue, and from defaultValue to maxValue. 38112 var normalized = []; 38113 for (var i = 0; i < this.font.fvar.axis.length; i++) { 38114 var axis = this.font.fvar.axis[i]; 38115 if (coords[i] < axis.defaultValue) { 38116 normalized.push((coords[i] - axis.defaultValue + _Number$EPSILON) / (axis.defaultValue - axis.minValue + _Number$EPSILON)); 38117 } else { 38118 normalized.push((coords[i] - axis.defaultValue + _Number$EPSILON) / (axis.maxValue - axis.defaultValue + _Number$EPSILON)); 38119 } 38120 } 38121 38122 // if there is an avar table, the normalized value is calculated 38123 // by interpolating between the two nearest mapped values. 38124 if (this.font.avar) { 38125 for (var i = 0; i < this.font.avar.segment.length; i++) { 38126 var segment = this.font.avar.segment[i]; 38127 for (var j = 0; j < segment.correspondence.length; j++) { 38128 var pair = segment.correspondence[j]; 38129 if (j >= 1 && normalized[i] < pair.fromCoord) { 38130 var prev = segment.correspondence[j - 1]; 38131 normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + _Number$EPSILON) / (pair.fromCoord - prev.fromCoord + _Number$EPSILON) + prev.toCoord; 38132 38133 break; 38134 } 38135 } 38136 } 38137 } 38138 38139 return normalized; 38140 }; 38141 38142 GlyphVariationProcessor.prototype.transformPoints = function transformPoints(gid, glyphPoints) { 38143 if (!this.font.fvar || !this.font.gvar) { 38144 return; 38145 } 38146 38147 var gvar = this.font.gvar; 38148 38149 if (gid >= gvar.glyphCount) { 38150 return; 38151 } 38152 38153 var offset = gvar.offsets[gid]; 38154 if (offset === gvar.offsets[gid + 1]) { 38155 return; 38156 } 38157 38158 // Read the gvar data for this glyph 38159 var stream = this.font.stream; 38160 38161 stream.pos = offset; 38162 if (stream.pos >= stream.length) { 38163 return; 38164 } 38165 38166 var tupleCount = stream.readUInt16BE(); 38167 var offsetToData = offset + stream.readUInt16BE(); 38168 38169 if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) { 38170 var here = stream.pos; 38171 stream.pos = offsetToData; 38172 var sharedPoints = this.decodePoints(); 38173 offsetToData = stream.pos; 38174 stream.pos = here; 38175 } 38176 38177 var origPoints = glyphPoints.map(function (pt) { 38178 return pt.copy(); 38179 }); 38180 38181 tupleCount &= TUPLE_COUNT_MASK; 38182 for (var i = 0; i < tupleCount; i++) { 38183 var tupleDataSize = stream.readUInt16BE(); 38184 var tupleIndex = stream.readUInt16BE(); 38185 38186 if (tupleIndex & EMBEDDED_TUPLE_COORD) { 38187 var tupleCoords = []; 38188 for (var a = 0; a < gvar.axisCount; a++) { 38189 tupleCoords.push(stream.readInt16BE() / 16384); 38190 } 38191 } else { 38192 if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) { 38193 throw new Error('Invalid gvar table'); 38194 } 38195 38196 var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK]; 38197 } 38198 38199 if (tupleIndex & INTERMEDIATE_TUPLE) { 38200 var startCoords = []; 38201 for (var _a = 0; _a < gvar.axisCount; _a++) { 38202 startCoords.push(stream.readInt16BE() / 16384); 38203 } 38204 38205 var endCoords = []; 38206 for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) { 38207 endCoords.push(stream.readInt16BE() / 16384); 38208 } 38209 } 38210 38211 // Get the factor at which to apply this tuple 38212 var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords); 38213 if (factor === 0) { 38214 offsetToData += tupleDataSize; 38215 continue; 38216 } 38217 38218 var here = stream.pos; 38219 stream.pos = offsetToData; 38220 38221 if (tupleIndex & PRIVATE_POINT_NUMBERS) { 38222 var points = this.decodePoints(); 38223 } else { 38224 var points = sharedPoints; 38225 } 38226 38227 // points.length = 0 means there are deltas for all points 38228 var nPoints = points.length === 0 ? glyphPoints.length : points.length; 38229 var xDeltas = this.decodeDeltas(nPoints); 38230 var yDeltas = this.decodeDeltas(nPoints); 38231 38232 if (points.length === 0) { 38233 // all points 38234 for (var _i = 0; _i < glyphPoints.length; _i++) { 38235 var point = glyphPoints[_i]; 38236 point.x += Math.round(xDeltas[_i] * factor); 38237 point.y += Math.round(yDeltas[_i] * factor); 38238 } 38239 } else { 38240 var outPoints = origPoints.map(function (pt) { 38241 return pt.copy(); 38242 }); 38243 var hasDelta = glyphPoints.map(function () { 38244 return false;
38245 }); 38246 38247 for (var _i2 = 0; _i2 < points.length; _i2++) { 38248 var idx = points[_i2]; 38249 if (idx < glyphPoints.length) { 38250 var _point = outPoints[idx]; 38251 hasDelta[idx] = true; 38252 38253 _point.x += Math.round(xDeltas[_i2] * factor); 38254 _point.y += Math.round(yDeltas[_i2] * factor); 38255 } 38256 } 38257 38258 this.interpolateMissingDeltas(outPoints, origPoints, hasDelta); 38259 38260 for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) { 38261 var deltaX = outPoints[_i3].x - origPoints[_i3].x; 38262 var deltaY = outPoints[_i3].y - origPoints[_i3].y; 38263 38264 glyphPoints[_i3].x += deltaX; 38265 glyphPoints[_i3].y += deltaY; 38266 } 38267 } 38268 38269 offsetToData += tupleDataSize; 38270 stream.pos = here; 38271 } 38272 }; 38273 38274 GlyphVariationProcessor.prototype.decodePoints = function decodePoints() { 38275 var stream = this.font.stream; 38276 var count = stream.readUInt8(); 38277 38278 if (count & POINTS_ARE_WORDS) { 38279 count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8(); 38280 } 38281 38282 var points = new Uint16Array(count); 38283 var i = 0; 38284 var point = 0; 38285 while (i < count) { 38286 var run = stream.readUInt8(); 38287 var runCount = (run & POINT_RUN_COUNT_MASK) + 1; 38288 var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8; 38289 38290 for (var j = 0; j < runCount && i < count; j++) { 38291 point += fn.call(stream); 38292 points[i++] = point; 38293 } 38294 } 38295 38296 return points; 38297 }; 38298 38299 GlyphVariationProcessor.prototype.decodeDeltas = function decodeDeltas(count) { 38300 var stream = this.font.stream; 38301 var i = 0; 38302 var deltas = new Int16Array(count); 38303 38304 while (i < count) { 38305 var run = stream.readUInt8(); 38306 var runCount = (run & DELTA_RUN_COUNT_MASK) + 1; 38307 38308 if (run & DELTAS_ARE_ZERO) { 38309 i += runCount; 38310 } else { 38311 var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8; 38312 for (var j = 0; j < runCount && i < count; j++) { 38313 deltas[i++] = fn.call(stream); 38314 } 38315 } 38316 } 38317 38318 return deltas; 38319 }; 38320 38321 GlyphVariationProcessor.prototype.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) { 38322 var normalized = this.normalizedCoords; 38323 var gvar = this.font.gvar; 38324 38325 var factor = 1; 38326 38327 for (var i = 0; i < gvar.axisCount; i++) { 38328 if (tupleCoords[i] === 0) { 38329 continue; 38330 } 38331 38332 if (normalized[i] === 0) { 38333 return 0; 38334 } 38335 38336 if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) { 38337 if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) { 38338 return 0; 38339 } 38340 38341 factor = (factor * normalized[i] + _Number$EPSILON) / (tupleCoords[i] + _Number$EPSILON); 38342 } else { 38343 if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) { 38344 return 0; 38345 } else if (normalized[i] < tupleCoords[i]) { 38346 factor = factor * (normalized[i] - startCoords[i] + _Number$EPSILON) / (tupleCoords[i] - startCoords[i] + _Number$EPSILON); 38347 } else { 38348 factor = factor * (endCoords[i] - normalized[i] + _Number$EPSILON) / (endCoords[i] - tupleCoords[i] + _Number$EPSILON); 38349 } 38350 } 38351 } 38352 38353 return factor; 38354 }; 38355 38356 // Interpolates points without delta values. 38357 // Needed for the à and Q glyphs in Skia. 38358 // Algorithm from Freetype. 38359 38360 38361 GlyphVariationProcessor.prototype.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) { 38362 if (points.length === 0) { 38363 return; 38364 } 38365 38366 var point = 0; 38367 while (point < points.length) { 38368 var firstPoint = point; 38369 38370 // find the end point of the contour 38371 var endPoint = point; 38372 var pt = points[endPoint]; 38373 while (!pt.endContour) { 38374 pt = points[++endPoint]; 38375 } 38376 38377 // find the first point that has a delta 38378 while (point <= endPoint && !hasDelta[point]) { 38379 point++; 38380 } 38381 38382 if (point > endPoint) { 38383 continue; 38384 } 38385 38386 var firstDelta = point; 38387 var curDelta = point; 38388 point++; 38389 38390 while (point <= endPoint) { 38391 // find the next point with a delta, and interpolate intermediate points 38392 if (hasDelta[point]) { 38393 this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points); 38394 curDelta = point; 38395 } 38396 38397 point++; 38398 } 38399 38400 // shift contour if we only have a single delta 38401 if (curDelta === firstDelta) { 38402 this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points); 38403 } else { 38404 // otherwise, handle the remaining points at the end and beginning of the contour 38405 this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points); 38406 38407 if (firstDelta > 0) { 38408 this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points); 38409 } 38410 } 38411 38412 point = endPoint + 1; 38413 } 38414 }; 38415 38416 GlyphVariationProcessor.prototype.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) { 38417 if (p1 > p2) { 38418 return; 38419 } 38420 38421 var iterable = ['x', 'y']; 38422 for (var i = 0; i < iterable.length; i++) { 38423 var k = iterable[i]; 38424 if (inPoints[ref1][k] > inPoints[ref2][k]) { 38425 var p = ref1; 38426 ref1 = ref2; 38427 ref2 = p; 38428 } 38429 38430 var in1 = inPoints[ref1][k]; 38431 var in2 = inPoints[ref2][k]; 38432 var out1 = outPoints[ref1][k]; 38433 var out2 = outPoints[ref2][k]; 38434 38435 // If the reference points have the same coordinate but different 38436 // delta, inferred delta is zero. Otherwise interpolate. 38437 if (in1 !== in2 || out1 === out2) { 38438 var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1); 38439 38440 for (var _p = p1; _p <= p2; _p++) { 38441 var out = inPoints[_p][k]; 38442 38443 if (out <= in1) { 38444 out += out1 - in1; 38445 } else if (out >= in2) { 38446 out += out2 - in2; 38447 } else {
38448 out = out1 + (out - in1) * scale; 38449 } 38450 38451 outPoints[_p][k] = out; 38452 } 38453 } 38454 } 38455 }; 38456 38457 GlyphVariationProcessor.prototype.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) { 38458 var deltaX = outPoints[ref].x - inPoints[ref].x; 38459 var deltaY = outPoints[ref].y - inPoints[ref].y; 38460 38461 if (deltaX === 0 && deltaY === 0) { 38462 return; 38463 } 38464 38465 for (var p = p1; p <= p2; p++) { 38466 if (p !== ref) { 38467 outPoints[p].x += deltaX; 38468 outPoints[p].y += deltaY; 38469 } 38470 } 38471 }; 38472 38473 GlyphVariationProcessor.prototype.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) { 38474 var outerIndex = void 0, 38475 innerIndex = void 0; 38476 38477 if (table.advanceWidthMapping) { 38478 var idx = gid; 38479 if (idx >= table.advanceWidthMapping.mapCount) { 38480 idx = table.advanceWidthMapping.mapCount - 1; 38481 } 38482 38483 var entryFormat = table.advanceWidthMapping.entryFormat; 38484 var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx]; 38485 outerIndex = _table$advanceWidthMa.outerIndex; 38486 innerIndex = _table$advanceWidthMa.innerIndex; 38487 } else { 38488 outerIndex = 0; 38489 innerIndex = gid; 38490 } 38491 38492 return this.getDelta(table.itemVariationStore, outerIndex, innerIndex); 38493 }; 38494 38495 // See pseudo code from `Font Variations Overview' 38496 // in the OpenType specification. 38497 38498 38499 GlyphVariationProcessor.prototype.getDelta = function getDelta(itemStore, outerIndex, innerIndex) { 38500 if (outerIndex >= itemStore.itemVariationData.length) { 38501 return 0; 38502 } 38503 38504 var varData = itemStore.itemVariationData[outerIndex]; 38505 if (innerIndex >= varData.deltaSets.length) { 38506 return 0; 38507 } 38508 38509 var deltaSet = varData.deltaSets[innerIndex]; 38510 var blendVector = this.getBlendVector(itemStore, outerIndex); 38511 var netAdjustment = 0; 38512 38513 for (var master = 0; master < varData.regionIndexCount; master++) { 38514 netAdjustment += deltaSet.deltas[master] * blendVector[master]; 38515 } 38516 38517 return netAdjustment; 38518 }; 38519 38520 GlyphVariationProcessor.prototype.getBlendVector = function getBlendVector(itemStore, outerIndex) { 38521 var varData = itemStore.itemVariationData[outerIndex]; 38522 if (this.blendVectors.has(varData)) { 38523 return this.blendVectors.get(varData); 38524 } 38525 38526 var normalizedCoords = this.normalizedCoords; 38527 var blendVector = []; 38528 38529 // outer loop steps through master designs to be blended 38530 for (var master = 0; master < varData.regionIndexCount; master++) { 38531 var scalar = 1; 38532 var regionIndex = varData.regionIndexes[master]; 38533 var axes = itemStore.variationRegionList.variationRegions[regionIndex]; 38534 38535 // inner loop steps through axes in this region 38536 for (var j = 0; j < axes.length; j++) { 38537 var axis = axes[j]; 38538 var axisScalar = void 0; 38539 38540 // compute the scalar contribution of this axis 38541 // ignore invalid ranges 38542 if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) { 38543 axisScalar = 1; 38544 } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) { 38545 axisScalar = 1; 38546 38547 // peak of 0 means ignore this axis 38548 } else if (axis.peakCoord === 0) { 38549 axisScalar = 1; 38550 38551 // ignore this region if coords are out of range 38552 } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) { 38553 axisScalar = 0; 38554 38555 // calculate a proportional factor 38556 } else { 38557 if (normalizedCoords[j] === axis.peakCoord) { 38558 axisScalar = 1; 38559 } else if (normalizedCoords[j] < axis.peakCoord) { 38560 axisScalar = (normalizedCoords[j] - axis.startCoord + _Number$EPSILON) / (axis.peakCoord - axis.startCoord + _Number$EPSILON); 38561 } else { 38562 axisScalar = (axis.endCoord - normalizedCoords[j] + _Number$EPSILON) / (axis.endCoord - axis.peakCoord + _Number$EPSILON); 38563 } 38564 } 38565 38566 // take product of all the axis scalars 38567 scalar *= axisScalar; 38568 } 38569 38570 blendVector[master] = scalar; 38571 } 38572 38573 this.blendVectors.set(varData, blendVector); 38574 return blendVector; 38575 }; 38576 38577 return GlyphVariationProcessor; 38578}(); 38579 38580var Subset = function () { 38581 function Subset(font) { 38582 _classCallCheck(this, Subset); 38583 38584 this.font = font; 38585 this.glyphs = []; 38586 this.mapping = {}; 38587 38588 // always include the missing glyph 38589 this.includeGlyph(0); 38590 } 38591 38592 Subset.prototype.includeGlyph = function includeGlyph(glyph) { 38593 if ((typeof glyph === 'undefined' ? 'undefined' : _typeof(glyph)) === 'object') { 38594 glyph = glyph.id; 38595 } 38596 38597 if (this.mapping[glyph] == null) { 38598 this.glyphs.push(glyph); 38599 this.mapping[glyph] = this.glyphs.length - 1; 38600 } 38601 38602 return this.mapping[glyph]; 38603 }; 38604 38605 Subset.prototype.encodeStream = function encodeStream() { 38606 var _this = this; 38607 38608 var s = new r.EncodeStream(); 38609 38610 process.nextTick(function () { 38611 _this.encode(s); 38612 return s.end(); 38613 }); 38614 38615 return s; 38616 }; 38617 38618 return Subset; 38619}(); 38620 38621// Flags for simple glyphs 38622var ON_CURVE$1 = 1 << 0; 38623var X_SHORT_VECTOR$1 = 1 << 1; 38624var Y_SHORT_VECTOR$1 = 1 << 2; 38625var REPEAT$1 = 1 << 3; 38626var SAME_X$1 = 1 << 4; 38627var SAME_Y$1 = 1 << 5; 38628 38629var Point$1 = function () { 38630 function Point() { 38631 _classCallCheck(this, Point); 38632 } 38633 38634 Point.size = function size(val) { 38635 return val >= 0 && val <= 255 ? 1 : 2; 38636 }; 38637 38638 Point.encode = function encode(stream, value) { 38639 if (value >= 0 && value <= 255) { 38640 stream.writeUInt8(value); 38641 } else { 38642 stream.writeInt16BE(value); 38643 } 38644 }; 38645 38646 return Point; 38647}(); 38648 38649var Glyf = new r.Struct({ 38650 numberOfContours: r.int16, // if negative, this is a composite glyph 38651 xMin: r.int16, 38652 yMin: r.int16, 38653 xMax: r.int16, 38654 yMax: r.int16, 38655 endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'), 38656 instructions: new r.Array(r.uint8, r.uint16), 38657 flags: new r.Array(r.uint8, 0), 38658 xPoints: new r.Array(Point$1, 0), 38659 yPoints: new r.Array(Point$1, 0) 38660}); 38661 38662/** 38663 * Encodes TrueType glyph outlines 38664 */ 38665 38666var TTFGlyphEncoder = function () { 38667 function TTFGlyphEncoder() { 38668 _classCallCheck(this, TTFGlyphEncoder); 38669 } 38670 38671 TTFGlyphEncoder.prototype.encodeSimple = function encodeSimple(path) { 38672 var instructions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 38673 38674 var endPtsOfContours = []; 38675 var xPoints = []; 38676 var yPoints = []; 38677 var flags = []; 38678 var same = 0; 38679 var lastX = 0, 38680 lastY = 0, 38681 lastFlag = 0; 38682 var pointCount = 0; 38683 38684 for (var i = 0; i < path.commands.length; i++) { 38685 var c = path.commands[i]; 38686 38687 for (var j = 0; j < c.args.length; j += 2) { 38688 var x = c.args[j]; 38689 var y = c.args[j + 1]; 38690 var flag = 0; 38691 38692 // If the ending point of a quadratic curve is the midpoint 38693 // between the control point and the control point of the next 38694 // quadratic curve, we can omit the ending point. 38695 if (c.command === 'quadraticCurveTo' && j === 2) { 38696 var next = path.commands[i + 1]; 38697 if (next && next.command === 'quadraticCurveTo') { 38698 var midX = (lastX + next.args[0]) / 2; 38699 var midY = (lastY + next.args[1]) / 2; 38700 38701 if (x === midX && y === midY) { 38702 continue; 38703 } 38704 } 38705 } 38706 38707 // All points except control points are on curve. 38708 if (!(c.command === 'quadraticCurveTo' && j === 0)) { 38709 flag |= ON_CURVE$1; 38710 } 38711 38712 flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1); 38713 flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1); 38714 38715 if (flag === lastFlag && same < 255) { 38716 flags[flags.length - 1] |= REPEAT$1; 38717 same++; 38718 } else { 38719 if (same > 0) { 38720 flags.push(same); 38721 same = 0; 38722 } 38723 38724 flags.push(flag); 38725 lastFlag = flag; 38726 } 38727 38728 lastX = x; 38729 lastY = y; 38730 pointCount++; 38731 } 38732 38733 if (c.command === 'closePath') { 38734 endPtsOfContours.push(pointCount - 1); 38735 } 38736 } 38737 38738 // Close the path if the last command didn't already 38739 if (path.commands.length >
38739 1 && path.commands[path.commands.length - 1].command !== 'closePath') { 38740 endPtsOfContours.push(pointCount - 1); 38741 } 38742 38743 var bbox = path.bbox; 38744 var glyf = { 38745 numberOfContours: endPtsOfContours.length, 38746 xMin: bbox.minX, 38747 yMin: bbox.minY, 38748 xMax: bbox.maxX, 38749 yMax: bbox.maxY, 38750 endPtsOfContours: endPtsOfContours, 38751 instructions: instructions, 38752 flags: flags, 38753 xPoints: xPoints, 38754 yPoints: yPoints 38755 }; 38756 38757 var size = Glyf.size(glyf); 38758 var tail = 4 - size % 4; 38759 38760 var stream = new r.EncodeStream(size + tail); 38761 Glyf.encode(stream, glyf); 38762 38763 // Align to 4-byte length 38764 if (tail !== 0) { 38765 stream.fill(0, tail); 38766 } 38767 38768 return stream.buffer; 38769 }; 38770 38771 TTFGlyphEncoder.prototype._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) { 38772 var diff = value - last; 38773 38774 if (value === last) { 38775 flag |= sameFlag; 38776 } else { 38777 if (-255 <= diff && diff <= 255) { 38778 flag |= shortFlag; 38779 if (diff < 0) { 38780 diff = -diff; 38781 } else { 38782 flag |= sameFlag; 38783 } 38784 } 38785 38786 points.push(diff); 38787 } 38788 38789 return flag; 38790 }; 38791 38792 return TTFGlyphEncoder; 38793}(); 38794 38795var TTFSubset = function (_Subset) { 38796 _inherits(TTFSubset, _Subset); 38797 38798 function TTFSubset(font) { 38799 _classCallCheck(this, TTFSubset); 38800 38801 var _this = _possibleConstructorReturn(this, _Subset.call(this, font)); 38802 38803 _this.glyphEncoder = new TTFGlyphEncoder(); 38804 return _this; 38805 } 38806 38807 TTFSubset.prototype._addGlyph = function _addGlyph(gid) { 38808 var glyph = this.font.getGlyph(gid); 38809 var glyf = glyph._decode(); 38810 38811 // get the offset to the glyph from the loca table 38812 var curOffset = this.font.loca.offsets[gid]; 38813 var nextOffset = this.font.loca.offsets[gid + 1]; 38814 38815 var stream = this.font._getTableStream('glyf'); 38816 stream.pos += curOffset; 38817 38818 var buffer = stream.readBuffer(nextOffset - curOffset); 38819 38820 // if it is a compound glyph, include its components 38821 if (glyf && glyf.numberOfContours < 0) { 38822 buffer = new Buffer(buffer); 38823 for (var _iterator = glyf.components, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 38824 var _ref; 38825 38826 if (_isArray) { 38827 if (_i >= _iterator.length) break; 38828 _ref = _iterator[_i++]; 38829 } else { 38830 _i = _iterator.next(); 38831 if (_i.done) break; 38832 _ref = _i.value; 38833 } 38834 38835 var component = _ref; 38836 38837 gid = this.includeGlyph(component.glyphID); 38838 buffer.writeUInt16BE(gid, component.pos); 38839 } 38840 } else if (glyf && this.font._variationProcessor) { 38841 // If this is a TrueType variation glyph, re-encode the path 38842 buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions); 38843 } 38844 38845 this.glyf.push(buffer); 38846 this.loca.offsets.push(this.offset); 38847 38848 this.hmtx.metrics.push({ 38849 advance: glyph.advanceWidth, 38850 bearing: glyph._getMetrics().leftBearing 38851 }); 38852 38853 this.offset += buffer.length; 38854 return this.glyf.length - 1; 38855 }; 38856 38857 TTFSubset.prototype.encode = function encode(stream) { 38858 // tables required by PDF spec: 38859 // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm 38860 // 38861 // additional tables required for standalone fonts: 38862 // name, cmap, OS/2, post 38863 38864 this.glyf = []; 38865 this.offset = 0; 38866 this.loca = { 38867 offsets: [] 38868 }; 38869 38870 this.hmtx = { 38871 metrics: [], 38872 bearings: [] 38873 }; 38874 38875 // include all the glyphs 38876 // not using a for loop because we need to support adding more 38877 // glyphs to the array as we go, and CoffeeScript caches the length. 38878 var i = 0; 38879 while (i < this.glyphs.length) { 38880 this._addGlyph(this.glyphs[i++]); 38881 } 38882 38883 var maxp = cloneDeep(this.font.maxp); 38884 maxp.numGlyphs = this.glyf.length; 38885 38886 this.loca.offsets.push(this.offset); 38887 tables.loca.preEncode.call(this.loca); 38888 38889 var head = cloneDeep(this.font.head); 38890 head.indexToLocFormat = this.loca.version; 38891 38892 var hhea = cloneDeep(this.font.hhea); 38893 hhea.numberOfMetrics = this.hmtx.metrics.length; 38894 38895 // map = [] 38896 // for index in [0...256] 38897 // if index < @numGlyphs 38898 // map[index] = index 38899 // else 38900 // map[index] = 0 38901 // 38902 // cmapTable = 38903 // version: 0 38904 // length: 262 38905 // language: 0 38906 // codeMap: map 38907 // 38908 // cmap = 38909 // version: 0 38910 // numSubtables: 1 38911 // tables: [ 38912 // platformID: 1 38913 // encodingID: 0 38914 // table: cmapTable 38915 // ] 38916 38917 // TODO: subset prep, cvt, fpgm? 38918 Directory.encode(stream, { 38919 tables: { 38920 head: head, 38921 hhea: hhea, 38922 loca: this.loca, 38923 maxp: maxp, 38924 'cvt ': this.font['cvt '], 38925 prep: this.font.prep, 38926 glyf: this.glyf, 38927 hmtx: this.hmtx, 38928 fpgm: this.font.fpgm 38929 38930 // name: clone @font.name 38931 // 'OS/2': clone @font['OS/2'] 38932 // post: clone @font.post 38933 // cmap: cmap 38934 } 38935 }); 38936 }; 38937 38938 return TTFSubset; 38939}(Subset); 38940
38941var CFFSubset = function (_Subset) { 38942 _inherits(CFFSubset, _Subset); 38943 38944 function CFFSubset(font) { 38945 _classCallCheck(this, CFFSubset); 38946 38947 var _this = _possibleConstructorReturn(this, _Subset.call(this, font)); 38948 38949 _this.cff = _this.font['CFF ']; 38950 if (!_this.cff) { 38951 throw new Error('Not a CFF Font'); 38952 } 38953 return _this; 38954 } 38955 38956 CFFSubset.prototype.subsetCharstrings = function subsetCharstrings() { 38957 this.charstrings = []; 38958 var gsubrs = {}; 38959 38960 for (var _iterator = this.glyphs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 38961 var _ref; 38962 38963 if (_isArray) { 38964 if (_i >= _iterator.length) break; 38965 _ref = _iterator[_i++]; 38966 } else { 38967 _i = _iterator.next(); 38968 if (_i.done) break; 38969 _ref = _i.value; 38970 } 38971 38972 var gid = _ref; 38973 38974 this.charstrings.push(this.cff.getCharString(gid)); 38975 38976 var glyph = this.font.getGlyph(gid); 38977 var path = glyph.path; // this causes the glyph to be parsed 38978 38979 for (var subr in glyph._usedGsubrs) { 38980 gsubrs[subr] = true; 38981 } 38982 } 38983 38984 this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs); 38985 }; 38986 38987 CFFSubset.prototype.subsetSubrs = function subsetSubrs(subrs, used) { 38988 var res = []; 38989 for (var i = 0; i < subrs.length; i++) { 38990 var subr = subrs[i]; 38991 if (used[i]) { 38992 this.cff.stream.pos = subr.offset; 38993 res.push(this.cff.stream.readBuffer(subr.length)); 38994 } else { 38995 res.push(new Buffer([11])); // return 38996 } 38997 } 38998 38999 return res; 39000 }; 39001 39002 CFFSubset.prototype.subsetFontdict = function subsetFontdict(topDict) { 39003 topDict.FDArray = []; 39004 topDict.FDSelect = { 39005 version: 0, 39006 fds: [] 39007 }; 39008 39009 var used_fds = {}; 39010 var used_subrs = []; 39011 for (var _iterator2 = this.glyphs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 39012 var _ref2; 39013 39014 if (_isArray2) { 39015 if (_i2 >= _iterator2.length) break; 39016 _ref2 = _iterator2[_i2++]; 39017 } else { 39018 _i2 = _iterator2.next(); 39019 if (_i2.done) break; 39020 _ref2 = _i2.value; 39021 } 39022 39023 var gid = _ref2; 39024 39025 var fd = this.cff.fdForGlyph(gid); 39026 if (fd == null) { 39027 continue; 39028 } 39029 39030 if (!used_fds[fd]) { 39031 topDict.FDArray.push(_Object$assign({}, this.cff.topDict.FDArray[fd])); 39032 used_subrs.push({}); 39033 } 39034 39035 used_fds[fd] = true; 39036 topDict.FDSelect.fds.push(topDict.FDArray.length - 1); 39037 39038 var glyph = this.font.getGlyph(gid); 39039 var path = glyph.path; // this causes the glyph to be parsed 39040 for (var subr in glyph._usedSubrs) { 39041 used_subrs[used_subrs.length - 1][subr] = true; 39042 } 39043 } 39044 39045 for (var i = 0; i < topDict.FDArray.length; i++) { 39046 var dict = topDict.FDArray[i]; 39047 delete dict.FontName; 39048 if (dict.Private && dict.Private.Subrs) { 39049 dict.Private = _Object$assign({}, dict.Private); 39050 dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]); 39051 } 39052 } 39053 39054 return; 39055 }; 39056 39057 CFFSubset.prototype.createCIDFontdict = function createCIDFontdict(topDict) { 39058 var used_subrs = {}; 39059 for (var _iterator3 = this.glyphs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 39060 var _ref3; 39061 39062 if (_isArray3) { 39063 if (_i3 >= _iterator3.length) break; 39064 _ref3 = _iterator3[_i3++]; 39065 } else { 39066 _i3 = _iterator3.next(); 39067 if (_i3.done) break; 39068 _ref3 = _i3.value; 39069 } 39070 39071 var gid = _ref3; 39072 39073 var glyph = this.font.getGlyph(gid); 39074 var path = glyph.path; // this causes the glyph to be parsed 39075 39076 for (var subr in glyph._usedSubrs) { 39077 used_subrs[subr] = true; 39078 } 39079 } 39080 39081 var privateDict = _Object$assign({}, this.cff.topDict.Private); 39082 privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs); 39083 39084 topDict.FDArray = [{ Private: privateDict }]; 39085 return topDict.FDSelect = { 39086 version: 3, 39087 nRanges: 1, 39088 ranges: [{ first: 0, fd: 0 }], 39089 sentinel: this.charstrings.length 39090 }; 39091 }; 39092 39093 CFFSubset.prototype.addString = function addString(string) { 39094 if (!string) { 39095 return null; 39096 } 39097 39098 if (!this.strings) { 39099 this.strings = []; 39100 } 39101 39102 this.strings.push(string); 39103 return standardStrings.length + this.strings.length - 1; 39104 }; 39105 39106 CFFSubset.prototype.encode = function encode(stream) { 39107 this.subsetCharstrings(); 39108 39109 var charset = { 39110 version: this.charstrings.length > 255 ? 2 : 1, 39111 ranges: [{ first: 1, nLeft: this.charstrings.length - 2 }] 39112 }; 39113 39114 var topDict = _Object$assign({}, this.cff.topDict); 39115 topDict.Private = null; 39116 topDict.charset = charset; 39117 topDict.Encoding = null; 39118 topDict.CharStrings = this.charstrings; 39119 39120 var _arr = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; 39121 for (var _i4 = 0; _i4 < _arr.length; _i4++) { 39122 var key = _arr[_i4]; 39123 topDict[key] = this.addString(this.cff.string(topDict[key])); 39124 } 39125 39126 topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0]; 39127 topDict.CIDCount = this.charstrings.length; 39128 39129 if (this.cff.isCIDFont) { 39130 this.subsetFontdict(topDict); 39131 } else { 39132 this.createCIDFontdict(topDict); 39133 } 39134 39135 var top = { 39136 version: 1, 39137 hdrSize: this.cff.hdrSize, 39138 offSize: this.cff.length, 39139 header: this.cff.header, 39140 nameIndex: [this.cff.postscriptName], 39141 topDictIndex: [topDict],
39142 stringIndex: this.strings, 39143 globalSubrIndex: this.gsubrs 39144 }; 39145 39146 CFFTop.encode(stream, top); 39147 }; 39148 39149 return CFFSubset; 39150}(Subset); 39151 39152var _class; 39153function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { 39154 var desc = {}; 39155 Object['ke' + 'ys'](descriptor).forEach(function (key) { 39156 desc[key] = descriptor[key]; 39157 }); 39158 desc.enumerable = !!desc.enumerable; 39159 desc.configurable = !!desc.configurable; 39160 39161 if ('value' in desc || desc.initializer) { 39162 desc.writable = true; 39163 } 39164 39165 desc = decorators.slice().reverse().reduce(function (desc, decorator) { 39166 return decorator(target, property, desc) || desc; 39167 }, desc); 39168 39169 if (context && desc.initializer !== void 0) { 39170 desc.value = desc.initializer ? desc.initializer.call(context) : void 0; 39171 desc.initializer = undefined; 39172 } 39173 39174 if (desc.initializer === void 0) { 39175 Object['define' + 'Property'](target, property, desc); 39176 desc = null; 39177 } 39178 39179 return desc; 39180} 39181 39182/** 39183 * This is the base class for all SFNT-based font formats in fontkit. 39184 * It supports TrueType, and PostScript glyphs, and several color glyph formats. 39185 */ 39186var TTFFont = (_class = function () { 39187 TTFFont.probe = function probe(buffer) { 39188 var format = buffer.toString('ascii', 0, 4); 39189 return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0); 39190 }; 39191 39192 function TTFFont(stream) { 39193 var variationCoords = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 39194 39195 _classCallCheck(this, TTFFont); 39196 39197 this.stream = stream; 39198 this.variationCoords = variationCoords; 39199 39200 this._directoryPos = this.stream.pos; 39201 this._tables = {}; 39202 this._glyphs = {}; 39203 this._decodeDirectory(); 39204 39205 // define properties for each table to lazily parse 39206 for (var tag in this.directory.tables) { 39207 var table = this.directory.tables[tag]; 39208 if (tables[tag] && table.length > 0) { 39209 _Object$defineProperty(this, tag, { 39210 get: this._getTable.bind(this, table) 39211 }); 39212 } 39213 } 39214 } 39215 39216 TTFFont.prototype._getTable = function _getTable(table) { 39217 if (!(table.tag in this._tables)) { 39218 try { 39219 this._tables[table.tag] = this._decodeTable(table); 39220 } catch (e) { 39221 if (fontkit.logErrors) { 39222 console.error('Error decoding table ' + table.tag); 39223 console.error(e.stack); 39224 } 39225 } 39226 } 39227 39228 return this._tables[table.tag]; 39229 }; 39230 39231 TTFFont.prototype._getTableStream = function _getTableStream(tag) { 39232 var table = this.directory.tables[tag]; 39233 if (table) { 39234 this.stream.pos = table.offset; 39235 return this.stream; 39236 } 39237 39238 return null; 39239 }; 39240 39241 TTFFont.prototype._decodeDirectory = function _decodeDirectory() { 39242 return this.directory = Directory.decode(this.stream, { _startOffset: 0 }); 39243 }; 39244 39245 TTFFont.prototype._decodeTable = function _decodeTable(table) { 39246 var pos = this.stream.pos; 39247 39248 var stream = this._getTableStream(table.tag); 39249 var result = tables[table.tag].decode(stream, this, table.length); 39250 39251 this.stream.pos = pos; 39252 return result; 39253 }; 39254 39255 /** 39256 * The unique PostScript name for this font 39257 * @type {string} 39258 */ 39259 39260 39261 /** 39262 * Gets a string from the font's `name` table 39263 * `lang` is a BCP-47 language code. 39264 * @return {string} 39265 */ 39266 TTFFont.prototype.getName = function getName(key) { 39267 var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en'; 39268
39269 var record = this.name.records[key]; 39270 if (record) { 39271 return record[lang]; 39272 } 39273 39274 return null; 39275 }; 39276 39277 /** 39278 * The font's full name, e.g. "Helvetica Bold" 39279 * @type {string} 39280 */ 39281 39282 39283 /** 39284 * Returns whether there is glyph in the font for the given unicode code point. 39285 * 39286 * @param {number} codePoint 39287 * @return {boolean} 39288 */ 39289 TTFFont.prototype.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) { 39290 return !!this._cmapProcessor.lookup(codePoint); 39291 }; 39292 39293 /** 39294 * Maps a single unicode code point to a Glyph object. 39295 * Does not perform any advanced substitutions (there is no context to do so). 39296 * 39297 * @param {number} codePoint 39298 * @return {Glyph} 39299 */ 39300 39301 39302 TTFFont.prototype.glyphForCodePoint = function glyphForCodePoint(codePoint) { 39303 return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]); 39304 }; 39305 39306 /** 39307 * Returns an array of Glyph objects for the given string. 39308 * This is only a one-to-one mapping from characters to glyphs. 39309 * For most uses, you should use font.layout (described below), which 39310 * provides a much more advanced mapping supporting AAT and OpenType shaping. 39311 * 39312 * @param {string} string 39313 * @return {Glyph[]} 39314 */ 39315 39316 39317 TTFFont.prototype.glyphsForString = function glyphsForString(string) { 39318 var glyphs = []; 39319 var len = string.length; 39320 var idx = 0; 39321 var last = -1; 39322 var state = -1; 39323 39324 while (idx <= len) { 39325 var code = 0; 39326 var nextState = 0; 39327 39328 if (idx < len) { 39329 // Decode the next codepoint from UTF 16 39330 code = string.charCodeAt(idx++); 39331 if (0xd800 <= code && code <= 0xdbff && idx < len) { 39332 var next = string.charCodeAt(idx); 39333 if (0xdc00 <= next && next <= 0xdfff) { 39334 idx++; 39335 code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000; 39336 } 39337 } 39338 39339 // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise. 39340 nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0; 39341 } else { 39342 idx++; 39343 } 39344 39345 if (state === 0 && nextState === 1) { 39346 // Variation selector following normal codepoint. 39347 glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code])); 39348 } else if (state === 0 && nextState === 0) { 39349 // Normal codepoint following normal codepoint. 39350 glyphs.push(this.glyphForCodePoint(last)); 39351 } 39352 39353 last = code; 39354 state = nextState; 39355 } 39356 39357 return glyphs; 39358 }; 39359 39360 /** 39361 * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string. 39362 * 39363 * @param {string} string 39364 * @param {string[]} [userFeatures] 39365 * @param {string} [script] 39366 * @param {string} [language] 39367 * @param {string} [direction] 39368 * @return {GlyphRun} 39369 */ 39370 TTFFont.prototype.layout = function layout(string, userFeatures, script, language, direction) { 39371 return this._layoutEngine.layout(string, userFeatures, script, language, direction); 39372 }; 39373 39374 /** 39375 * Returns an array of strings that map to the given glyph id. 39376 * @param {number} gid - glyph id 39377 */ 39378 39379 39380 TTFFont.prototype.stringsForGlyph = function stringsForGlyph(gid) { 39381 return this._layoutEngine.stringsForGlyph(gid); 39382 }; 39383 39384 /** 39385 * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) 39386 * (or mapped AAT tags) supported by the font. 39387 * The features parameter is an array of OpenType feature tags to be applied in addition to the default set. 39388 * If this is an AAT font, the OpenType feature tags are mapped to AAT features. 39389 * 39390 * @type {string[]} 39391 */ 39392 39393 39394 TTFFont.prototype.getAvailableFeatures = function getAvailableFeatures(script, language) { 39395 return this._layoutEngine.getAvailableFeatures(script, language); 39396 }; 39397 39398 TTFFont.prototype._getBaseGlyph = function _getBaseGlyph(glyph) { 39399 var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 39400 39401 if (!this._glyphs[glyph]) { 39402 if (this.directory.tables.glyf) { 39403 this._glyphs[glyph] = new TTFGlyph(glyph, characters, this); 39404 } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) { 39405 this._glyphs[glyph] = new CFFGlyph(glyph, characters, this); 39406 } 39407 } 39408 39409 return this._glyphs[glyph] || null; 39410 }; 39411 39412 /** 39413 * Returns a glyph object for the given glyph id. 39414 * You can pass the array of code points this glyph represents for 39415 * your use later, and it will be stored in the glyph object. 39416 * 39417 * @param {number} glyph 39418 * @param {number[]} characters 39419 * @return {Glyph} 39420 */ 39421 39422 39423 TTFFont.prototype.getGlyph = function getGlyph(glyph) { 39424 var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 39425 39426 if (!this._glyphs[glyph]) { 39427 if (this.directory.tables.sbix) { 39428 this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this); 39429 } else if (this.directory.tables.COLR && this.directory.tables.CPAL) { 39430 this._glyphs[glyph] = new COLRGlyph(glyph, characters, this); 39431 } else { 39432 this._getBaseGlyph(glyph, characters); 39433 } 39434 } 39435 39436 return this._glyphs[glyph] || null; 39437 }; 39438 39439 /** 39440 * Returns a Subset for this font. 39441 * @return {Subset} 39442 */ 39443 39444 39445 TTFFont.prototype.createSubset = function createSubset() { 39446 if (this.directory.tables['CFF ']) { 39447 return new CFFSubset(this); 39448 } 39449 39450 return new TTFSubset(this); 39451 }; 39452 39453 /** 39454 * Returns an object describing the available variation axes 39455 * that this font supports. Keys are setting tags, and values 39456 * contain the axis name, range, and default value. 39457 * 39458 * @type {object} 39459 */ 39460 39461 39462 /** 39463 * Returns a new font with the given variation settings applied.
39464 * Settings can either be an instance name, or an object containing 39465 * variation tags as specified by the `variationAxes` property. 39466 * 39467 * @param {object} settings 39468 * @return {TTFFont} 39469 */ 39470 TTFFont.prototype.getVariation = function getVariation(settings) { 39471 if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) { 39472 throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.'); 39473 } 39474 39475 if (typeof settings === 'string') { 39476 settings = this.namedVariations[settings]; 39477 } 39478 39479 if ((typeof settings === 'undefined' ? 'undefined' : _typeof(settings)) !== 'object') { 39480 throw new Error('Variation settings must be either a variation name or settings object.'); 39481 } 39482 39483 // normalize the coordinates 39484 var coords = this.fvar.axis.map(function (axis, i) { 39485 var axisTag = axis.axisTag.trim(); 39486 if (axisTag in settings) { 39487 return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag])); 39488 } else { 39489 return axis.defaultValue; 39490 } 39491 }); 39492 39493 var stream = new r.DecodeStream(this.stream.buffer); 39494 stream.pos = this._directoryPos; 39495 39496 var font = new TTFFont(stream, coords); 39497 font._tables = this._tables; 39498 39499 return font; 39500 }; 39501 39502 // Standardized format plugin API 39503 TTFFont.prototype.getFont = function getFont(name) { 39504 return this.getVariation(name); 39505 }; 39506 39507 _createClass(TTFFont, [{ 39508 key: 'postscriptName', 39509 get: function get() {
39510 var name = this.name.records.postscriptName; 39511 if (name) { 39512 var lang = _Object$keys(name)[0]; 39513 return name[lang]; 39514 } 39515 39516 return null; 39517 } 39518 }, { 39519 key: 'fullName', 39520 get: function get() { 39521 return this.getName('fullName'); 39522 } 39523 39524 /** 39525 * The font's family name, e.g. "Helvetica" 39526 * @type {string} 39527 */ 39528 39529 }, { 39530 key: 'familyName', 39531 get: function get() { 39532 return this.getName('fontFamily'); 39533 } 39534 39535 /** 39536 * The font's sub-family, e.g. "Bold". 39537 * @type {string} 39538 */ 39539 39540 }, { 39541 key: 'subfamilyName', 39542 get: function get() { 39543 return this.getName('fontSubfamily'); 39544 } 39545 39546 /** 39547 * The font's copyright information 39548 * @type {string} 39549 */ 39550 39551 }, { 39552 key: 'copyright', 39553 get: function get() { 39554 return this.getName('copyright'); 39555 } 39556 39557 /** 39558 * The font's version number 39559 * @type {string} 39560 */ 39561 39562 }, { 39563 key: 'version', 39564 get: function get() { 39565 return this.getName('version'); 39566 } 39567 39568 /** 39569 * The fontâs [ascender](https://en.wikipedia.org/wiki/Ascender_(typography)) 39570 * @type {number} 39571 */ 39572 39573 }, { 39574 key: 'ascent', 39575 get: function get() { 39576 return this.hhea.ascent; 39577 } 39578 39579 /** 39580 * The fontâs [descender](https://en.wikipedia.org/wiki/Descender) 39581 * @type {number} 39582 */ 39583 39584 }, { 39585 key: 'descent', 39586 get: function get() { 39587 return this.hhea.descent; 39588 } 39589 39590 /** 39591 * The amount of space that should be included between lines 39592 * @type {number} 39593 */ 39594 39595 }, { 39596 key: 'lineGap', 39597 get: function get() { 39598 return this.hhea.lineGap; 39599 } 39600 39601 /** 39602 * The offset from the normal underline position that should be used 39603 * @type {number} 39604 */ 39605 39606 }, { 39607 key: 'underlinePosition', 39608 get: function get() { 39609 return this.post.underlinePosition; 39610 } 39611 39612 /** 39613 * The weight of the underline that should be used 39614 * @type {number} 39615 */ 39616 39617 }, { 39618 key: 'underlineThickness', 39619 get: function get() { 39620 return this.post.underlineThickness; 39621 } 39622 39623 /** 39624 * If this is an italic font, the angle the cursor should be drawn at to match the font design 39625 * @type {number} 39626 */ 39627 39628 }, { 39629 key: 'italicAngle', 39630 get: function get() { 39631 return this.post.italicAngle; 39632 } 39633 39634 /** 39635 * The height of capital letters above the baseline. 39636 * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details. 39637 * @type {number} 39638 */ 39639 39640 }, { 39641 key: 'capHeight', 39642 get: function get() { 39643 var os2 = this['OS/2']; 39644 return os2 ? os2.capHeight : this.ascent; 39645 } 39646 39647 /** 39648 * The height of lower case letters in the font. 39649 * See [here](https://en.wikipedia.org/wiki/X-height) for more details. 39650 * @type {number} 39651 */ 39652 39653 }, { 39654 key: 'xHeight', 39655 get: function get() { 39656 var os2 = this['OS/2']; 39657 return os2 ? os2.xHeight : 0; 39658 } 39659 39660 /** 39661 * The number of glyphs in the font. 39662 * @type {number} 39663 */ 39664 39665 }, { 39666 key: 'numGlyphs', 39667 get: function get() { 39668 return this.maxp.numGlyphs; 39669 } 39670 39671 /** 39672 * The size of the fontâs internal coordinate grid 39673 * @type {number} 39674 */ 39675 39676 }, { 39677 key: 'unitsPerEm', 39678 get: function get() { 39679 return this.head.unitsPerEm; 39680 } 39681 39682 /** 39683 * The fontâs bounding box, i.e. the box that encloses all glyphs in the font. 39684 * @type {BBox} 39685 */ 39686 39687 }, { 39688 key: 'bbox', 39689 get: function get() { 39690 return _Object$freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax)); 39691 } 39692 }, { 39693 key: '_cmapProcessor', 39694 get: function get() { 39695 return new CmapProcessor(this.cmap); 39696 } 39697 39698 /** 39699 * An array of all of the unicode code points supported by the font. 39700 * @type {number[]} 39701 */ 39702 39703 }, { 39704 key: 'characterSet', 39705 get: function get() { 39706 return this._cmapProcessor.getCharacterSet(); 39707 } 39708 }, { 39709 key: '_layoutEngine', 39710 get: function get() { 39711 return new LayoutEngine(this); 39712 } 39713 }, { 39714 key: 'availableFeatures', 39715 get: function get() { 39716 return this._layoutEngine.getAvailableFeatures(); 39717 } 39718 }, { 39719 key: 'variationAxes', 39720 get: function get() { 39721 var res = {}; 39722 if (!this.fvar) { 39723 return res; 39724 } 39725 39726 for (var _iterator = this.fvar.axis, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 39727 var _ref; 39728 39729 if (_isArray) { 39730 if (_i >= _iterator.length) break; 39731 _ref = _iterator[_i++]; 39732 } else { 39733 _i = _iterator.next(); 39734 if (_i.done) break; 39735 _ref = _i.value; 39736 } 39737 39738 var axis = _ref; 39739 39740 res[axis.axisTag.trim()] = { 39741 name: axis.name.en, 39742 min: axis.minValue, 39743 default: axis.defaultValue, 39744 max: axis.maxValue 39745 }; 39746 } 39747 39748 return res; 39749 } 39750 39751 /** 39752 * Returns an object describing the named variation instances 39753 * that the font designer has specified. Keys are variation names 39754 * and values are the variation settings for this instance. 39755 * 39756 * @type {object} 39757 */ 39758 39759 }, { 39760 key: 'namedVariations', 39761 get: function get() { 39762 var res = {}; 39763 if (!this.fvar) { 39764 return res; 39765 } 39766 39767 for (var _iterator2 = this.fvar.instance, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 39768 var _ref2; 39769 39770 if (_isArray2) { 39771 if (_i2 >= _iterator2.length) break; 39772 _ref2 = _iterator2[_i2++]; 39773 } else { 39774 _i2 = _iterator2.next(); 39775 if (_i2.done) break; 39776 _ref2 = _i2.value; 39777 } 39778 39779 var instance = _ref2; 39780 39781 var settings = {}; 39782 for (var i = 0; i < this.fvar.axis.length; i++) { 39783 var axis = this.fvar.axis[i]; 39784 settings[axis.axisTag.trim()] = instance.coord[i]; 39785 } 39786 39787 res[instance.name.en] = settings; 39788 } 39789 39790 return res; 39791 } 39792 }, { 39793 key: '_variationProcessor', 39794 get: function get() { 39795 if (!this.fvar) { 39796 return null; 39797 } 39798 39799 var variationCoords = this.variationCoords; 39800 39801 // Ignore if no variation coords and not CFF2 39802 if (!variationCoords && !this.CFF2) { 39803 return null; 39804 } 39805 39806 if (!variationCoords) { 39807 variationCoords = this.fvar.axis.map(function (axis) { 39808 return axis.defaultValue; 39809 }); 39810 } 39811 39812 return new GlyphVariationProcessor(this, variationCoords); 39813 } 39814 }]); 39815 39816 return TTFFont; 39817}(), (_applyDecoratedDescriptor(_class.prototype, 'bbox', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'bbox'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_cmapProcessor', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_cmapProcessor'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'characterSet', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'characterSet'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_layoutEngine', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_layoutEngine'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'variationAxes', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'variationAxes'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'namedVariations', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, 'namedVariations'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, '_variationProcessor', [cache], _Object$getOwnPropertyDescriptor(_class.prototype, '_variationProcessor'), _class.prototype)), _class); 39818 39819var WOFFDirectoryEntry = new r.Struct({ 39820 tag: new r.String(4), 39821 offset: new r.Pointer(r.uint32, 'void', { type: 'global' }), 39822 compLength: r.uint32, 39823 length: r.uint32, 39824 origChecksum: r.uint32 39825}); 39826 39827var WOFFDirectory = new r.Struct({ 39828 tag: new r.String(4), // should be 'wOFF' 39829 flavor: r.uint32, 39830 length: r.uint32, 39831 numTables: r.uint16, 39832 reserved: new r.Reserved(r.uint16), 39833 totalSfntSize: r.uint32, 39834 majorVersion: r.uint16, 39835 minorVersion: r.uint16, 39836 metaOffset: r.uint32,
39837 metaLength: r.uint32, 39838 metaOrigLength: r.uint32, 39839 privOffset: r.uint32, 39840 privLength: r.uint32, 39841 tables: new r.Array(WOFFDirectoryEntry, 'numTables') 39842}); 39843 39844WOFFDirectory.process = function () { 39845 var tables = {}; 39846 for (var _iterator = this.tables, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 39847 var _ref; 39848 39849 if (_isArray) { 39850 if (_i >= _iterator.length) break; 39851 _ref = _iterator[_i++]; 39852 } else { 39853 _i = _iterator.next(); 39854 if (_i.done) break; 39855 _ref = _i.value; 39856 } 39857 39858 var table = _ref; 39859 39860 tables[table.tag] = table; 39861 } 39862 39863 this.tables = tables; 39864}; 39865 39866var WOFFFont = function (_TTFFont) { 39867 _inherits(WOFFFont, _TTFFont); 39868 39869 function WOFFFont() { 39870 _classCallCheck(this, WOFFFont); 39871 39872 return _possibleConstructorReturn(this, _TTFFont.apply(this, arguments)); 39873 } 39874 39875 WOFFFont.probe = function probe(buffer) { 39876 return buffer.toString('ascii', 0, 4) === 'wOFF'; 39877 }; 39878 39879 WOFFFont.prototype._decodeDirectory = function _decodeDirectory() { 39880 this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 }); 39881 }; 39882 39883 WOFFFont.prototype._getTableStream = function _getTableStream(tag) { 39884 var table = this.directory.tables[tag]; 39885 if (table) { 39886 this.stream.pos = table.offset; 39887 39888 if (table.compLength < table.length) { 39889 this.stream.pos += 2; // skip deflate header 39890 var outBuffer = new Buffer(table.length); 39891 var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer); 39892 return new r.DecodeStream(buf); 39893 } else { 39894 return this.stream; 39895 } 39896 } 39897 39898 return null; 39899 }; 39900 39901 return WOFFFont; 39902}(TTFFont); 39903 39904/** 39905 * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently. 39906 */ 39907 39908var WOFF2Glyph = function (_TTFGlyph) { 39909 _inherits(WOFF2Glyph, _TTFGlyph); 39910 39911 function WOFF2Glyph() { 39912 _classCallCheck(this, WOFF2Glyph); 39913 39914 return _possibleConstructorReturn(this, _TTFGlyph.apply(this, arguments)); 39915 } 39916 39917 WOFF2Glyph.prototype._decode = function _decode() { 39918 // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data. 39919 return this._font._transformedGlyphs[this.id]; 39920 }; 39921 39922 WOFF2Glyph.prototype._getCBox = function _getCBox() { 39923 return this.path.bbox; 39924 }; 39925 39926 return WOFF2Glyph; 39927}(TTFGlyph); 39928 39929var Base128 = { 39930 decode: function decode(stream) { 39931 var result = 0; 39932 var iterable = [0, 1, 2, 3, 4]; 39933 for (var j = 0; j < iterable.length; j++) { 39934 var i = iterable[j]; 39935 var code = stream.readUInt8(); 39936 39937 // If any of the top seven bits are set then we're about to overflow. 39938 if (result & 0xe0000000) { 39939 throw new Error('Overflow'); 39940 } 39941 39942 result = result << 7 | code & 0x7f; 39943 if ((code & 0x80) === 0) { 39944 return result; 39945 } 39946 } 39947 39948 throw new Error('Bad base 128 number'); 39949 } 39950}; 39951 39952var knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill']; 39953 39954var WOFF2DirectoryEntry = new r.Struct({ 39955 flags: r.uint8, 39956 customTag: new r.Optional(new r.String(4), function (t) { 39957 return (t.flags & 0x3f) === 0x3f; 39958 }), 39959 tag: function tag(t) { 39960 return t.customTag || knownTags[t.flags & 0x3f]; 39961 }, // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); }, 39962 length: Base128, 39963 transformVersion: function transformVersion(t) { 39964 return t.flags >>> 6 & 0x03; 39965 }, 39966 transformed: function transformed(t) { 39967 return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0; 39968 }, 39969 transformLength: new r.Optional(Base128, function (t) { 39970 return t.transformed; 39971 }) 39972}); 39973 39974var WOFF2Directory = new r.Struct({ 39975 tag: new r.String(4), // should be 'wOF2' 39976 flavor: r.uint32, 39977 length: r.uint32, 39978 numTables: r.uint16, 39979 reserved: new r.Reserved(r.uint16), 39980 totalSfntSize: r.uint32, 39981 totalCompressedSize: r.uint32, 39982 majorVersion: r.uint16, 39983 minorVersion: r.uint16, 39984 metaOffset: r.uint32,
39985 metaLength: r.uint32, 39986 metaOrigLength: r.uint32, 39987 privOffset: r.uint32, 39988 privLength: r.uint32, 39989 tables: new r.Array(WOFF2DirectoryEntry, 'numTables') 39990}); 39991 39992WOFF2Directory.process = function () { 39993 var tables = {}; 39994 for (var i = 0; i < this.tables.length; i++) { 39995 var table = this.tables[i]; 39996 tables[table.tag] = table; 39997 } 39998 39999 return this.tables = tables; 40000}; 40001 40002/** 40003 * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2 40004 * See spec here: http://www.w3.org/TR/WOFF2/ 40005 */ 40006 40007var WOFF2Font = function (_TTFFont) { 40008 _inherits(WOFF2Font, _TTFFont); 40009 40010 function WOFF2Font() { 40011 _classCallCheck(this, WOFF2Font); 40012 40013 return _possibleConstructorReturn(this, _TTFFont.apply(this, arguments)); 40014 } 40015 40016 WOFF2Font.probe = function probe(buffer) { 40017 return buffer.toString('ascii', 0, 4) === 'wOF2'; 40018 }; 40019 40020 WOFF2Font.prototype._decodeDirectory = function _decodeDirectory() { 40021 this.directory = WOFF2Directory.decode(this.stream); 40022 this._dataPos = this.stream.pos; 40023 }; 40024 40025 WOFF2Font.prototype._decompress = function _decompress() { 40026 // decompress data and setup table offsets if we haven't already 40027 if (!this._decompressed) { 40028 this.stream.pos = this._dataPos; 40029 var buffer = this.stream.readBuffer(this.directory.totalCompressedSize); 40030 40031 var decompressedSize = 0; 40032 for (var tag in this.directory.tables) { 40033 var entry = this.directory.tables[tag]; 40034 entry.offset = decompressedSize; 40035 decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length; 40036 } 40037 40038 var decompressed = brotli(buffer, decompressedSize); 40039 if (!decompressed) { 40040 throw new Error('Error decoding compressed data in WOFF2'); 40041 } 40042 40043 this.stream = new r.DecodeStream(new Buffer(decompressed)); 40044 this._decompressed = true; 40045 } 40046 }; 40047 40048 WOFF2Font.prototype._decodeTable = function _decodeTable(table) { 40049 this._decompress(); 40050 return _TTFFont.prototype._decodeTable.call(this, table); 40051 }; 40052 40053 // Override this method to get a glyph and return our 40054 // custom subclass if there is a glyf table. 40055 40056 40057 WOFF2Font.prototype._getBaseGlyph = function _getBaseGlyph(glyph) { 40058 var characters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 40059 40060 if (!this._glyphs[glyph]) { 40061 if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) { 40062 if (!this._transformedGlyphs) { 40063 this._transformGlyfTable(); 40064 } 40065 return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this); 40066 } else { 40067 return _TTFFont.prototype._getBaseGlyph.call(this, glyph, characters); 40068 } 40069 } 40070 }; 40071 40072 WOFF2Font.prototype._transformGlyfTable = function _transformGlyfTable() { 40073 this._decompress(); 40074 this.stream.pos = this.directory.tables.glyf.offset; 40075 var table = GlyfTable.decode(this.stream); 40076 var glyphs = []; 40077 40078 for (var index = 0; index < table.numGlyphs; index++) { 40079 var glyph = {}; 40080 var nContours = table.nContours.readInt16BE(); 40081 glyph.numberOfContours = nContours; 40082 40083 if (nContours > 0) { 40084 // simple glyph 40085 var nPoints = []; 40086 var totalPoints = 0; 40087 40088 for (var i = 0; i < nContours; i++) { 40089 var _r = read255UInt16(table.nPoints); 40090 totalPoints += _r; 40091 nPoints.push(totalPoints); 40092 } 40093 40094 glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints); 40095 for (var _i = 0; _i < nContours; _i++) { 40096 glyph.points[nPoints[_i] - 1].endContour = true; 40097 } 40098 40099 var instructionSize = read255UInt16(table.glyphs); 40100 } else if (nContours < 0) { 40101 // composite glyph 40102 var haveInstructions = TTFGlyph.prototype._decodeComposite.call({ _font: this }, glyph, table.composites); 40103 if (haveInstructions) { 40104 var instructionSize = read255UInt16(table.glyphs); 40105 } 40106 } 40107 40108 glyphs.push(glyph); 40109 } 40110 40111 this._transformedGlyphs = glyphs; 40112 }; 40113 40114 return WOFF2Font; 40115}(TTFFont); 40116 40117var Substream = function () { 40118 function Substream(length) { 40119 _classCallCheck(this, Substream); 40120 40121 this.length = length; 40122 this._buf = new r.Buffer(length); 40123 } 40124 40125 Substream.prototype.decode = function decode(stream, parent) { 40126 return new r.DecodeStream(this._buf.decode(stream, parent)); 40127 }; 40128 40129 return Substream; 40130}(); 40131 40132// This struct represents the entire glyf table 40133 40134 40135var GlyfTable = new r.Struct({ 40136 version: r.uint32, 40137 numGlyphs: r.uint16, 40138 indexFormat: r.uint16, 40139 nContourStreamSize: r.uint32, 40140 nPointsStreamSize: r.uint32, 40141 flagStreamSize: r.uint32, 40142 glyphStreamSize: r.uint32, 40143 compositeStreamSize: r.uint32, 40144 bboxStreamSize: r.uint32, 40145 instructionStreamSize: r.uint32, 40146 nContours: new Substream('nContourStreamSize'), 40147 nPoints: new Substream('nPointsStreamSize'), 40148 flags: new Substream('flagStreamSize'), 40149 glyphs: new Substream('glyphStreamSize'), 40150 composites: new Substream('compositeStreamSize'), 40151 bboxes: new Substream('bboxStreamSize'), 40152 instructions: new Substream('instructionStreamSize') 40153}); 40154 40155var WORD_CODE = 253; 40156var ONE_MORE_BYTE_CODE2 = 254; 40157var ONE_MORE_BYTE_CODE1 = 255; 40158var LOWEST_U_CODE = 253; 40159 40160function read255UInt16(stream) { 40161 var code = stream.readUInt8(); 40162 40163 if (code === WORD_CODE) { 40164 return stream.readUInt16BE(); 40165 } 40166 40167 if (code === ONE_MORE_BYTE_CODE1) { 40168 return stream.readUInt8() + LOWEST_U_CODE; 40169 } 40170 40171 if (code === ONE_MORE_BYTE_CODE2) { 40172 return stream.readUInt8() + LOWEST_U_CODE * 2; 40173 } 40174 40175 return code; 40176} 40177 40178function withSign(flag, baseval) { 40179 return flag & 1 ? baseval : -baseval; 40180} 40181 40182function decodeTriplet(flags, glyphs, nPoints) { 40183 var y = void 0; 40184 var x = y = 0; 40185 var res = []; 40186 40187 for (var i = 0; i < nPoints; i++) { 40188 var dx = 0, 40189 dy = 0; 40190 var flag = flags.readUInt8(); 40191 var onCurve = !(flag >> 7); 40192 flag &= 0x7f; 40193 40194 if (flag < 10) { 40195 dx = 0; 40196 dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8()); 40197 } else if (flag < 20) { 40198 dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8()); 40199 dy = 0; 40200 } else if (flag < 84) { 40201 var b0 = flag - 20; 40202 var b1 = glyphs.readUInt8(); 40203 dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4)); 40204 dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f)); 40205 } else if (flag < 120) { 40206 var b0 = flag - 84; 40207 dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8()); 40208 dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8()); 40209 } else if (flag < 124) { 40210 var b1 = glyphs.readUInt8(); 40211 var b2 = glyphs.readUInt8(); 40212 dx = withSign(flag, (b1 << 4) + (b2 >> 4)); 40213 dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8()); 40214 } else { 40215 dx = withSign(flag, glyphs.readUInt16BE()); 40216 dy = withSign(flag >> 1, glyphs.readUInt16BE()); 40217 } 40218 40219 x += dx; 40220 y += dy; 40221 res.push(new Point(onCurve, false, x, y)); 40222 } 40223 40224 return res; 40225} 40226 40227var TTCHeader = new r.VersionedStruct(r.uint32, { 40228 0x00010000: { 40229 numFonts: r.uint32, 40230 offsets: new r.Array(r.uint32, 'numFonts') 40231 }, 40232 0x00020000: { 40233 numFonts: r.uint32, 40234 offsets: new r.Array(r.uint32, 'numFonts'), 40235 dsigTag: r.uint32, 40236 dsigLength: r.uint32, 40237 dsigOffset: r.uint32 40238 } 40239}); 40240 40241var TrueTypeCollection = function () { 40242 TrueTypeCollection.probe = function probe(buffer) { 40243 return buffer.toString('ascii', 0, 4) === 'ttcf'; 40244 }; 40245 40246 function TrueTypeCollection(stream) { 40247 _classCallCheck(this, TrueTypeCollection); 40248 40249 this.stream = stream; 40250 if (stream.readString(4) !== 'ttcf') { 40251 throw new Error('Not a TrueType collection'); 40252 } 40253 40254 this.header = TTCHeader.decode(stream); 40255 } 40256 40257 TrueTypeCollection.prototype.getFont = function getFont(name) { 40258 for (var _iterator = this.header.offsets, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 40259 var _ref; 40260 40261 if (_isArray) { 40262 if (_i >= _iterator.length) break; 40263 _ref = _iterator[_i++]; 40264 } else { 40265 _i = _iterator.next(); 40266 if (_i.done) break; 40267 _ref = _i.value; 40268 } 40269 40270 var offset = _ref;
40271 40272 var stream = new r.DecodeStream(this.stream.buffer); 40273 stream.pos = offset; 40274 var font = new TTFFont(stream); 40275 if (font.postscriptName === name) { 40276 return font; 40277 } 40278 } 40279 40280 return null; 40281 }; 40282 40283 _createClass(TrueTypeCollection, [{ 40284 key: 'fonts', 40285 get: function get() { 40286 var fonts = []; 40287 for (var _iterator2 = this.header.offsets, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 40288 var _ref2; 40289 40290 if (_isArray2) { 40291 if (_i2 >= _iterator2.length) break; 40292 _ref2 = _iterator2[_i2++]; 40293 } else { 40294 _i2 = _iterator2.next(); 40295 if (_i2.done) break; 40296 _ref2 = _i2.value; 40297 } 40298 40299 var offset = _ref2; 40300 40301 var stream = new r.DecodeStream(this.stream.buffer); 40302 stream.pos = offset; 40303 fonts.push(new TTFFont(stream)); 40304 } 40305 40306 return fonts; 40307 } 40308 }]); 40309 40310 return TrueTypeCollection; 40311}(); 40312 40313var DFontName = new r.String(r.uint8); 40314var DFontData = new r.Struct({ 40315 len: r.uint32, 40316 buf: new r.Buffer('len') 40317}); 40318 40319var Ref = new r.Struct({ 40320 id: r.uint16, 40321 nameOffset: r.int16, 40322 attr: r.uint8, 40323 dataOffset: r.uint24, 40324 handle: r.uint32 40325}); 40326 40327var Type = new r.Struct({ 40328 name: new r.String(4), 40329 maxTypeIndex: r.uint16, 40330 refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) { 40331 return t.maxTypeIndex + 1; 40332 }), { type: 'parent' }) 40333}); 40334 40335var TypeList = new r.Struct({ 40336 length: r.uint16, 40337 types: new r.Array(Type, function (t) { 40338 return t.length + 1; 40339 }) 40340}); 40341 40342var DFontMap = new r.Struct({ 40343 reserved: new r.Reserved(r.uint8, 24), 40344 typeList: new r.Pointer(r.uint16, TypeList), 40345 nameListOffset: new r.Pointer(r.uint16, 'void') 40346}); 40347 40348var DFontHeader = new r.Struct({ 40349 dataOffset: r.uint32, 40350 map: new r.Pointer(r.uint32, DFontMap), 40351 dataLength: r.uint32, 40352 mapLength: r.uint32 40353}); 40354 40355var DFont = function () { 40356 DFont.probe = function probe(buffer) { 40357 var stream = new r.DecodeStream(buffer); 40358 40359 try { 40360 var header = DFontHeader.decode(stream); 40361 } catch (e) { 40362 return false; 40363 } 40364 40365 for (var _iterator = header.map.typeList.types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _getIterator(_iterator);;) { 40366 var _ref; 40367 40368 if (_isArray) { 40369 if (_i >= _iterator.length) break; 40370 _ref = _iterator[_i++]; 40371 } else { 40372 _i = _iterator.next(); 40373 if (_i.done) break; 40374 _ref = _i.value; 40375 } 40376 40377 var type = _ref; 40378 40379 if (type.name === 'sfnt') { 40380 return true; 40381 } 40382 } 40383 40384 return false; 40385 }; 40386 40387 function DFont(stream) { 40388 _classCallCheck(this, DFont); 40389 40390 this.stream = stream; 40391 this.header = DFontHeader.decode(this.stream); 40392 40393 for (var _iterator2 = this.header.map.typeList.types, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _getIterator(_iterator2);;) { 40394 var _ref2; 40395 40396 if (_isArray2) { 40397 if (_i2 >= _iterator2.length) break; 40398 _ref2 = _iterator2[_i2++]; 40399 } else { 40400 _i2 = _iterator2.next(); 40401 if (_i2.done) break; 40402 _ref2 = _i2.value; 40403 } 40404 40405 var type = _ref2; 40406 40407 for (var _iterator3 = type.refList, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _getIterator(_iterator3);;) { 40408 var _ref3; 40409 40410 if (_isArray3) { 40411 if (_i3 >= _iterator3.length) break; 40412 _ref3 = _iterator3[_i3++]; 40413 } else { 40414 _i3 = _iterator3.next(); 40415 if (_i3.done) break; 40416 _ref3 = _i3.value; 40417 } 40418 40419 var ref = _ref3; 40420 40421 if (ref.nameOffset >= 0) { 40422 this.stream.pos = ref.nameOffset + this.header.map.nameListOffset; 40423 ref.name = DFontName.decode(this.stream); 40424 } else { 40425 ref.name = null; 40426 } 40427 } 40428 40429 if (type.name === 'sfnt') { 40430 this.sfnt = type; 40431 } 40432 } 40433 } 40434 40435 DFont.prototype.getFont = function getFont(name) { 40436 if (!this.sfnt) { 40437 return null; 40438 } 40439 40440 for (var _iterator4 = this.sfnt.refList, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _getIterator(_iterator4);;) { 40441 var _ref4; 40442 40443 if (_isArray4) { 40444 if (_i4 >= _iterator4.length) break; 40445 _ref4 = _iterator4[_i4++]; 40446 } else { 40447 _i4 = _iterator4.next(); 40448 if (_i4.done) break; 40449 _ref4 = _i4.value; 40450 } 40451 40452 var ref = _ref4; 40453 40454 var pos = this.header.dataOffset + ref.dataOffset + 4; 40455 var stream = new r.DecodeStream(this.stream.buffer.slice(pos)); 40456 var font = new TTFFont(stream); 40457 if (font.postscriptName === name) { 40458 return font; 40459 } 40460 } 40461 40462 return null; 40463 }; 40464 40465 _createClass(DFont, [{ 40466 key: 'fonts', 40467 get: function get() { 40468 var fonts = []; 40469 for (var _iterator5 = this.sfnt.refList, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _getIterator(_iterator5);;) { 40470 var _ref5; 40471 40472 if (_isArray5) { 40473 if (_i5 >= _iterator5.length) break; 40474 _ref5 = _iterator5[_i5++]; 40475 } else { 40476 _i5 = _iterator5.next(); 40477 if (_i5.done) break; 40478 _ref5 = _i5.value; 40479 } 40480 40481 var ref = _ref5; 40482 40483 var pos = this.header.dataOffset + ref.dataOffset + 4; 40484 var stream = new r.DecodeStream(this.stream.buffer.slice(pos)); 40485 fonts.push(new TTFFont(stream)); 40486 } 40487 40488 return fonts; 40489 } 40490 }]); 40491 40492 return DFont; 40493}(); 40494 40495// Register font formats 40496fontkit.registerFormat(TTFFont); 40497fontkit.registerFormat(WOFFFont); 40498fontkit.registerFormat(WOFF2Font); 40499fontkit.registerFormat(TrueTypeCollection); 40500fontkit.registerFormat(DFont); 40501 40502module.exports = fontkit; 40503 40504/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer, __webpack_require__(11))) 40505 40506/***/ }), 40507/* 168 */ 40508/***/ (function(module, exports, __webpack_require__) { 40509 40510// Generated by CoffeeScript 1.7.1 40511(function() { 40512 var key, val, _ref, _ref1; 40513 40514 exports.EncodeStream = __webpack_require__(169); 40515 40516 exports.DecodeStream = __webpack_require__(51); 40517 40518 exports.Array = __webpack_require__(93); 40519 40520 exports.LazyArray = __webpack_require__(187); 40521 40522 exports.Bitfield = __webpack_require__(188); 40523 40524 exports.Boolean = __webpack_require__(189); 40525 40526 exports.Buffer = __webpack_require__(190); 40527 40528 exports.Enum = __webpack_require__(191); 40529 40530 exports.Optional = __webpack_require__(192); 40531 40532 exports.Reserved = __webpack_require__(193); 40533 40534 exports.String = __webpack_require__(194); 40535 40536 exports.Struct = __webpack_require__(94); 40537 40538 exports.VersionedStruct = __webpack_require__(195); 40539 40540 _ref = __webpack_require__(22); 40541 for (key in _ref) { 40542 val = _ref[key]; 40543 exports[key] = val; 40544 } 40545 40546 _ref1 = __webpack_require__(196); 40547 for (key in _ref1) { 40548 val = _ref1[key]; 40549 exports[key] = val; 40550 } 40551 40552}).call(this); 40553 40554 40555/***/ }), 40556/* 169 */ 40557/***/ (function(module, exports, __webpack_require__) { 40558 40559/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1 40560(function() { 40561 var DecodeStream, EncodeStream, iconv, stream, 40562 __hasProp = {}.hasOwnProperty, 40563 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 40564 40565 stream = __webpack_require__(15); 40566 40567 DecodeStream = __webpack_require__(51); 40568 40569 try { 40570 iconv = __webpack_require__(52); 40571 } catch (_error) {} 40572 40573 EncodeStream = (function(_super) { 40574 var key; 40575 40576 __extends(EncodeStream, _super); 40577 40578 function EncodeStream(bufferSize) { 40579 if (bufferSize == null) { 40580 bufferSize = 65536; 40581 } 40582 EncodeStream.__super__.constructor.apply(this, arguments); 40583 this.buffer = new Buffer(bufferSize); 40584 this.bufferOffset = 0; 40585 this.pos = 0; 40586 } 40587 40588 for (key in Buffer.prototype) { 40589 if (key.slice(0, 5) === 'write') { 40590 (function(key) { 40591 var bytes; 40592 bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')]; 40593 return EncodeStream.prototype[key] = function(value) { 40594 this.ensure(bytes); 40595 this.buffer[key](value, this.bufferOffset); 40596 this.bufferOffset += bytes; 40597 return this.pos += bytes; 40598 }; 40599 })(key); 40600 } 40601 } 40602 40603 EncodeStream.prototype._read = function() {}; 40604 40605 EncodeStream.prototype.ensure = function(bytes) { 40606 if (this.bufferOffset + bytes > this.buffer.length) { 40607 return this.flush(); 40608 } 40609 }; 40610 40611 EncodeStream.prototype.flush = function() { 40612 if (this.bufferOffset > 0) { 40613 this.push(new Buffer(this.buffer.slice(0, this.bufferOffset))); 40614 return this.bufferOffset = 0; 40615 } 40616 }; 40617 40618 EncodeStream.prototype.writeBuffer = function(buffer) { 40619 this.flush(); 40620 this.push(buffer); 40621 return this.pos += buffer.length; 40622 }; 40623 40624 EncodeStream.prototype.writeString = function(string, encoding) { 40625 var buf, byte, i, _i, _ref; 40626 if (encoding == null) { 40627 encoding = 'ascii'; 40628 } 40629 switch (encoding) { 40630 case 'utf16le': 40631 case 'ucs2': 40632 case 'utf8': 40633 case 'ascii': 40634 return this.writeBuffer(new Buffer(string, encoding)); 40635 case 'utf16be': 40636 buf = new Buffer(string, 'utf16le'); 40637 for (i = _i = 0, _ref = buf.length - 1; _i < _ref; i = _i += 2) { 40638 byte = buf[i]; 40639 buf[i] = buf[i + 1]; 40640 buf[i + 1] = byte; 40641 } 40642 return this.writeBuffer(buf); 40643 default: 40644 if (iconv) { 40645 return this.writeBuffer(iconv.encode(string, encoding)); 40646 } else { 40647 throw new Error('Install iconv-lite to enable additional string encodings.'); 40648 } 40649 } 40650 }; 40651 40652 EncodeStream.prototype.writeUInt24BE = function(val) { 40653 this.ensure(3); 40654 this.buffer[this.bufferOffset++] = val >>> 16 & 0xff;
40655 this.buffer[this.bufferOffset++] = val >>> 8 & 0xff; 40656 this.buffer[this.bufferOffset++] = val & 0xff; 40657 return this.pos += 3; 40658 }; 40659 40660 EncodeStream.prototype.writeUInt24LE = function(val) { 40661 this.ensure(3); 40662 this.buffer[this.bufferOffset++] = val & 0xff; 40663 this.buffer[this.bufferOffset++] = val >>> 8 & 0xff; 40664 this.buffer[this.bufferOffset++] = val >>> 16 & 0xff; 40665 return this.pos += 3; 40666 }; 40667 40668 EncodeStream.prototype.writeInt24BE = function(val) { 40669 if (val >= 0) { 40670 return this.writeUInt24BE(val); 40671 } else { 40672 return this.writeUInt24BE(val + 0xffffff + 1); 40673 } 40674 }; 40675 40676 EncodeStream.prototype.writeInt24LE = function(val) { 40677 if (val >= 0) { 40678 return this.writeUInt24LE(val); 40679 } else { 40680 return this.writeUInt24LE(val + 0xffffff + 1); 40681 } 40682 }; 40683 40684 EncodeStream.prototype.fill = function(val, length) { 40685 var buf; 40686 if (length < this.buffer.length) { 40687 this.ensure(length); 40688 this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length); 40689 this.bufferOffset += length; 40690 return this.pos += length; 40691 } else { 40692 buf = new Buffer(length); 40693 buf.fill(val); 40694 return this.writeBuffer(buf); 40695 } 40696 }; 40697 40698 EncodeStream.prototype.end = function() { 40699 this.flush(); 40700 return this.push(null); 40701 }; 40702 40703 return EncodeStream; 40704 40705 })(stream.Readable); 40706 40707 module.exports = EncodeStream; 40708 40709}).call(this); 40710 40711/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 40712 40713/***/ }), 40714/* 170 */ 40715/***/ (function(module, exports, __webpack_require__) { 40716 40717"use strict"; 40718 40719 40720var BOMChar = '\uFEFF'; 40721 40722exports.PrependBOM = PrependBOMWrapper 40723function PrependBOMWrapper(encoder, options) { 40724 this.encoder = encoder; 40725 this.addBOM = true; 40726} 40727 40728PrependBOMWrapper.prototype.write = function(str) { 40729 if (this.addBOM) { 40730 str = BOMChar + str; 40731 this.addBOM = false; 40732 } 40733 40734 return this.encoder.write(str); 40735} 40736 40737PrependBOMWrapper.prototype.end = function() { 40738 return this.encoder.end(); 40739} 40740 40741 40742//------------------------------------------------------------------------------ 40743 40744exports.StripBOM = StripBOMWrapper; 40745function StripBOMWrapper(decoder, options) { 40746 this.decoder = decoder; 40747 this.pass = false; 40748 this.options = options || {}; 40749} 40750 40751StripBOMWrapper.prototype.write = function(buf) { 40752 var res = this.decoder.write(buf); 40753 if (this.pass || !res) 40754 return res; 40755 40756 if (res[0] === BOMChar) { 40757 res = res.slice(1); 40758 if (typeof this.options.stripBOM === 'function') 40759 this.options.stripBOM(); 40760 } 40761 40762 this.pass = true; 40763 return res; 40764} 40765 40766StripBOMWrapper.prototype.end = function() { 40767 return this.decoder.end(); 40768} 40769 40770 40771 40772/***/ }), 40773/* 171 */ 40774/***/ (function(module, exports, __webpack_require__) { 40775 40776"use strict"; 40777 40778 40779// Update this array if you add/rename/remove files in this directory. 40780// We support Browserify by skipping automatic module discovery and requiring modules directly. 40781var modules = [ 40782 __webpack_require__(172), 40783 __webpack_require__(173), 40784 __webpack_require__(174), 40785 __webpack_require__(175), 40786 __webpack_require__(176), 40787 __webpack_require__(177), 40788 __webpack_require__(178), 40789 __webpack_require__(179), 40790]; 40791 40792// Put all encoding/alias/codec definitions to single object and export it. 40793for (var i = 0; i < modules.length; i++) { 40794 var module = modules[i]; 40795 for (var enc in module) 40796 if (Object.prototype.hasOwnProperty.call(module, enc)) 40797 exports[enc] = module[enc]; 40798} 40799 40800 40801/***/ }), 40802/* 172 */ 40803/***/ (function(module, exports, __webpack_require__) { 40804 40805"use strict"; 40806 40807var Buffer = __webpack_require__(1).Buffer; 40808 40809// Export Node.js internal encodings. 40810 40811module.exports = { 40812 // Encodings 40813 utf8: { type: "_internal", bomAware: true}, 40814 cesu8: { type: "_internal", bomAware: true}, 40815 unicode11utf8: "utf8", 40816 40817 ucs2: { type: "_internal", bomAware: true}, 40818 utf16le: "ucs2", 40819 40820 binary: { type: "_internal" }, 40821 base64: { type: "_internal" }, 40822 hex: { type: "_internal" }, 40823 40824 // Codec. 40825 _internal: InternalCodec, 40826}; 40827 40828//------------------------------------------------------------------------------ 40829 40830function InternalCodec(codecOptions, iconv) { 40831 this.enc = codecOptions.encodingName; 40832 this.bomAware = codecOptions.bomAware; 40833 40834 if (this.enc === "base64") 40835 this.encoder = InternalEncoderBase64; 40836 else if (this.enc === "cesu8") { 40837 this.enc = "utf8"; // Use utf8 for decoding. 40838 this.encoder = InternalEncoderCesu8; 40839 40840 // Add decoder for versions of Node not supporting CESU-8 40841 if (new Buffer('eda0bdedb2a9', 'hex').toString() !== 'ð©') { 40842 this.decoder = InternalDecoderCesu8; 40843 this.defaultCharUnicode = iconv.defaultCharUnicode; 40844 } 40845 } 40846} 40847 40848InternalCodec.prototype.encoder = InternalEncoder; 40849InternalCodec.prototype.decoder = InternalDecoder; 40850 40851//------------------------------------------------------------------------------ 40852 40853// We use node.js internal decoder. Its signature is the same as ours. 40854var StringDecoder = __webpack_require__(47).StringDecoder; 40855 40856if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. 40857 StringDecoder.prototype.end = function() {}; 40858 40859 40860function InternalDecoder(options, codec) { 40861 StringDecoder.call(this, codec.enc); 40862} 40863 40864InternalDecoder.prototype = StringDecoder.prototype; 40865 40866 40867//------------------------------------------------------------------------------ 40868// Encoder is mostly trivial 40869 40870function InternalEncoder(options, codec) { 40871 this.enc = codec.enc; 40872} 40873 40874InternalEncoder.prototype.write = function(str) { 40875 return new Buffer(str, this.enc); 40876} 40877 40878InternalEncoder.prototype.end = function() { 40879} 40880 40881 40882//------------------------------------------------------------------------------ 40883// Except base64 encoder, which must keep its state. 40884 40885function InternalEncoderBase64(options, codec) { 40886 this.prevStr = ''; 40887} 40888 40889InternalEncoderBase64.prototype.write = function(str) { 40890 str = this.prevStr + str; 40891 var completeQuads = str.length - (str.length % 4); 40892 this.prevStr = str.slice(completeQuads); 40893 str = str.slice(0, completeQuads); 40894 40895 return new Buffer(str, "base64"); 40896} 40897 40898InternalEncoderBase64.prototype.end = function() { 40899 return new Buffer(this.prevStr, "base64"); 40900} 40901 40902 40903//------------------------------------------------------------------------------ 40904// CESU-8 encoder is also special. 40905 40906function InternalEncoderCesu8(options, codec) { 40907} 40908 40909InternalEncoderCesu8.prototype.write = function(str) { 40910 var buf = new Buffer(str.length * 3), bufIdx = 0; 40911 for (var i = 0; i < str.length; i++) {
vendor: 21,539 bytes, lines 40912-41610
40912 var charCode = str.charCodeAt(i); 40913 // Naive implementation, but it works because CESU-8 is especially easy 40914 // to convert from UTF-16 (which all JS strings are encoded in). 40915 if (charCode < 0x80) 40916 buf[bufIdx++] = charCode; 40917 else if (charCode < 0x800) { 40918 buf[bufIdx++] = 0xC0 + (charCode >>> 6); 40919 buf[bufIdx++] = 0x80 + (charCode & 0x3f); 40920 } 40921 else { // charCode will always be < 0x10000 in javascript. 40922 buf[bufIdx++] = 0xE0 + (charCode >>> 12); 40923 buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); 40924 buf[bufIdx++] = 0x80 + (charCode & 0x3f); 40925 } 40926 } 40927 return buf.slice(0, bufIdx); 40928} 40929 40930InternalEncoderCesu8.prototype.end = function() { 40931} 40932 40933//------------------------------------------------------------------------------ 40934// CESU-8 decoder is not implemented in Node v4.0+ 40935 40936function InternalDecoderCesu8(options, codec) { 40937 this.acc = 0; 40938 this.contBytes = 0; 40939 this.accBytes = 0; 40940 this.defaultCharUnicode = codec.defaultCharUnicode; 40941} 40942 40943InternalDecoderCesu8.prototype.write = function(buf) { 40944 var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, 40945 res = ''; 40946 for (var i = 0; i < buf.length; i++) { 40947 var curByte = buf[i]; 40948 if ((curByte & 0xC0) !== 0x80) { // Leading byte 40949 if (contBytes > 0) { // Previous code is invalid 40950 res += this.defaultCharUnicode; 40951 contBytes = 0; 40952 } 40953 40954 if (curByte < 0x80) { // Single-byte code 40955 res += String.fromCharCode(curByte); 40956 } else if (curByte < 0xE0) { // Two-byte code 40957 acc = curByte & 0x1F; 40958 contBytes = 1; accBytes = 1; 40959 } else if (curByte < 0xF0) { // Three-byte code 40960 acc = curByte & 0x0F; 40961 contBytes = 2; accBytes = 1; 40962 } else { // Four or more are not supported for CESU-8. 40963 res += this.defaultCharUnicode; 40964 } 40965 } else { // Continuation byte 40966 if (contBytes > 0) { // We're waiting for it. 40967 acc = (acc << 6) | (curByte & 0x3f); 40968 contBytes--; accBytes++; 40969 if (contBytes === 0) { 40970 // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) 40971 if (accBytes === 2 && acc < 0x80 && acc > 0) 40972 res += this.defaultCharUnicode; 40973 else if (accBytes === 3 && acc < 0x800) 40974 res += this.defaultCharUnicode; 40975 else 40976 // Actually add character. 40977 res += String.fromCharCode(acc); 40978 } 40979 } else { // Unexpected continuation byte 40980 res += this.defaultCharUnicode; 40981 } 40982 } 40983 } 40984 this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; 40985 return res; 40986} 40987 40988InternalDecoderCesu8.prototype.end = function() { 40989 var res = 0; 40990 if (this.contBytes > 0) 40991 res += this.defaultCharUnicode; 40992 return res; 40993} 40994 40995 40996/***/ }), 40997/* 173 */ 40998/***/ (function(module, exports, __webpack_require__) { 40999 41000"use strict"; 41001 41002var Buffer = __webpack_require__(1).Buffer; 41003 41004// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js 41005 41006// == UTF16-BE codec. ========================================================== 41007 41008exports.utf16be = Utf16BECodec; 41009function Utf16BECodec() { 41010} 41011 41012Utf16BECodec.prototype.encoder = Utf16BEEncoder; 41013Utf16BECodec.prototype.decoder = Utf16BEDecoder; 41014Utf16BECodec.prototype.bomAware = true; 41015 41016 41017// -- Encoding 41018 41019function Utf16BEEncoder() { 41020} 41021 41022Utf16BEEncoder.prototype.write = function(str) { 41023 var buf = new Buffer(str, 'ucs2'); 41024 for (var i = 0; i < buf.length; i += 2) { 41025 var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; 41026 } 41027 return buf; 41028} 41029 41030Utf16BEEncoder.prototype.end = function() { 41031} 41032 41033 41034// -- Decoding 41035 41036function Utf16BEDecoder() { 41037 this.overflowByte = -1; 41038} 41039 41040Utf16BEDecoder.prototype.write = function(buf) { 41041 if (buf.length == 0) 41042 return ''; 41043 41044 var buf2 = new Buffer(buf.length + 1), 41045 i = 0, j = 0; 41046 41047 if (this.overflowByte !== -1) { 41048 buf2[0] = buf[0]; 41049 buf2[1] = this.overflowByte; 41050 i = 1; j = 2; 41051 } 41052 41053 for (; i < buf.length-1; i += 2, j+= 2) { 41054 buf2[j] = buf[i+1]; 41055 buf2[j+1] = buf[i]; 41056 } 41057 41058 this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; 41059 41060 return buf2.slice(0, j).toString('ucs2'); 41061} 41062 41063Utf16BEDecoder.prototype.end = function() { 41064} 41065 41066 41067// == UTF-16 codec ============================================================= 41068// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. 41069// Defaults to UTF-16LE, as it's prevalent and default in Node. 41070// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le 41071// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); 41072 41073// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). 41074 41075exports.utf16 = Utf16Codec; 41076function Utf16Codec(codecOptions, iconv) { 41077 this.iconv = iconv; 41078} 41079 41080Utf16Codec.prototype.encoder = Utf16Encoder; 41081Utf16Codec.prototype.decoder = Utf16Decoder; 41082 41083 41084// -- Encoding (pass-through) 41085 41086function Utf16Encoder(options, codec) { 41087 options = options || {}; 41088 if (options.addBOM === undefined) 41089 options.addBOM = true; 41090 this.encoder = codec.iconv.getEncoder('utf-16le', options); 41091} 41092 41093Utf16Encoder.prototype.write = function(str) { 41094 return this.encoder.write(str); 41095} 41096 41097Utf16Encoder.prototype.end = function() { 41098 return this.encoder.end(); 41099} 41100 41101 41102// -- Decoding 41103 41104function Utf16Decoder(options, codec) { 41105 this.decoder = null; 41106 this.initialBytes = []; 41107 this.initialBytesLen = 0; 41108 41109 this.options = options || {}; 41110 this.iconv = codec.iconv; 41111} 41112 41113Utf16Decoder.prototype.write = function(buf) { 41114 if (!this.decoder) { 41115 // Codec is not chosen yet. Accumulate initial bytes. 41116 this.initialBytes.push(buf); 41117 this.initialBytesLen += buf.length; 41118 41119 if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below) 41120 return ''; 41121 41122 // We have enough bytes -> detect endianness. 41123 var buf = Buffer.concat(this.initialBytes), 41124 encoding = detectEncoding(buf, this.options.defaultEncoding); 41125 this.decoder = this.iconv.getDecoder(encoding, this.options); 41126 this.initialBytes.length = this.initialBytesLen = 0; 41127 } 41128 41129 return this.decoder.write(buf); 41130} 41131 41132Utf16Decoder.prototype.end = function() { 41133 if (!this.decoder) { 41134 var buf = Buffer.concat(this.initialBytes), 41135 encoding = detectEncoding(buf, this.options.defaultEncoding); 41136 this.decoder = this.iconv.getDecoder(encoding, this.options); 41137 41138 var res = this.decoder.write(buf), 41139 trail = this.decoder.end(); 41140 41141 return trail ? (res + trail) : res; 41142 } 41143 return this.decoder.end(); 41144} 41145 41146function detectEncoding(buf, defaultEncoding) { 41147 var enc = defaultEncoding || 'utf-16le'; 41148 41149 if (buf.length >= 2) { 41150 // Check BOM. 41151 if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM 41152 enc = 'utf-16be'; 41153 else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM 41154 enc = 'utf-16le'; 41155 else { 41156 // No BOM found. Try to deduce encoding from initial content. 41157 // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. 41158 // So, we count ASCII as if it was LE or BE, and decide from that. 41159 var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions 41160 _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even. 41161 41162 for (var i = 0; i < _len; i += 2) { 41163 if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++; 41164 if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++; 41165 } 41166 41167 if (asciiCharsBE > asciiCharsLE) 41168 enc = 'utf-16be'; 41169 else if (asciiCharsBE < asciiCharsLE) 41170 enc = 'utf-16le'; 41171 } 41172 } 41173 41174 return enc; 41175} 41176 41177 41178 41179 41180/***/ }), 41181/* 174 */ 41182/***/ (function(module, exports, __webpack_require__) { 41183 41184"use strict"; 41185 41186var Buffer = __webpack_require__(1).Buffer; 41187 41188// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 41189// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 41190 41191exports.utf7 = Utf7Codec; 41192exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 41193function Utf7Codec(codecOptions, iconv) { 41194 this.iconv = iconv; 41195}; 41196 41197Utf7Codec.prototype.encoder = Utf7Encoder; 41198Utf7Codec.prototype.decoder = Utf7Decoder; 41199Utf7Codec.prototype.bomAware = true; 41200 41201 41202// -- Encoding 41203 41204var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; 41205 41206function Utf7Encoder(options, codec) { 41207 this.iconv = codec.iconv; 41208} 41209 41210Utf7Encoder.prototype.write = function(str) { 41211 // Naive implementation. 41212 // Non-direct chars are encoded as "+<base64>-"; single "+" char is encoded as "+-". 41213 return new Buffer(str.replace(nonDirectChars, function(chunk) { 41214 return "+" + (chunk === '+' ? '' : 41215 this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) 41216 + "-"; 41217 }.bind(this))); 41218} 41219 41220Utf7Encoder.prototype.end = function() { 41221} 41222 41223 41224// -- Decoding 41225 41226function Utf7Decoder(options, codec) { 41227 this.iconv = codec.iconv; 41228 this.inBase64 = false; 41229 this.base64Accum = ''; 41230} 41231 41232var base64Regex = /[A-Za-z0-9\/+]/; 41233var base64Chars = []; 41234for (var i = 0; i < 256; i++) 41235 base64Chars[i] = base64Regex.test(String.fromCharCode(i)); 41236 41237var plusChar = '+'.charCodeAt(0), 41238 minusChar = '-'.charCodeAt(0), 41239 andChar = '&'.charCodeAt(0); 41240 41241Utf7Decoder.prototype.write = function(buf) { 41242 var res = "", lastI = 0, 41243 inBase64 = this.inBase64, 41244 base64Accum = this.base64Accum; 41245 41246 // The decoder is more involved as we must handle chunks in stream. 41247 41248 for (var i = 0; i < buf.length; i++) { 41249 if (!inBase64) { // We're in direct mode. 41250 // Write direct chars until '+' 41251 if (buf[i] == plusChar) { 41252 res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. 41253 lastI = i+1; 41254 inBase64 = true; 41255 } 41256 } else { // We decode base64. 41257 if (!base64Chars[buf[i]]) { // Base64 ended. 41258 if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" 41259 res += "+"; 41260 } else { 41261 var b64str = base64Accum + buf.slice(lastI, i).toString(); 41262 res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); 41263 } 41264 41265 if (buf[i] != minusChar) // Minus is absorbed after base64. 41266 i--; 41267 41268 lastI = i+1; 41269 inBase64 = false; 41270 base64Accum = ''; 41271 } 41272 } 41273 } 41274 41275 if (!inBase64) { 41276 res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. 41277 } else { 41278 var b64str = base64Accum + buf.slice(lastI).toString(); 41279 41280 var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. 41281 base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. 41282 b64str = b64str.slice(0, canBeDecoded); 41283 41284 res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); 41285 } 41286 41287 this.inBase64 = inBase64; 41288 this.base64Accum = base64Accum; 41289 41290 return res; 41291} 41292 41293Utf7Decoder.prototype.end = function() { 41294 var res = ""; 41295 if (this.inBase64 && this.base64Accum.length > 0) 41296 res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be"); 41297 41298 this.inBase64 = false; 41299 this.base64Accum = ''; 41300 return res; 41301} 41302 41303 41304// UTF-7-IMAP codec. 41305// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) 41306// Differences: 41307// * Base64 part is started by "&" instead of "+" 41308// * Direct characters are 0x20-0x7E, except "&" (0x26) 41309// * In Base64, "," is used instead of "/" 41310// * Base64 must not be used to represent direct characters. 41311// * No implicit shift back from Base64 (should always end with '-') 41312// * String must end in non-shifted position. 41313// * "-&" while in base64 is not allowed. 41314 41315 41316exports.utf7imap = Utf7IMAPCodec; 41317function Utf7IMAPCodec(codecOptions, iconv) { 41318 this.iconv = iconv; 41319}; 41320 41321Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; 41322Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; 41323Utf7IMAPCodec.prototype.bomAware = true; 41324 41325 41326// -- Encoding 41327 41328function Utf7IMAPEncoder(options, codec) { 41329 this.iconv = codec.iconv; 41330 this.inBase64 = false; 41331 this.base64Accum = new Buffer(6); 41332 this.base64AccumIdx = 0; 41333} 41334 41335Utf7IMAPEncoder.prototype.write = function(str) { 41336 var inBase64 = this.inBase64, 41337 base64Accum = this.base64Accum, 41338 base64AccumIdx = this.base64AccumIdx, 41339 buf = new Buffer(str.length*5 + 10), bufIdx = 0; 41340 41341 for (var i = 0; i < str.length; i++) { 41342 var uChar = str.charCodeAt(i); 41343 if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. 41344 if (inBase64) { 41345 if (base64AccumIdx > 0) { 41346 bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); 41347 base64AccumIdx = 0; 41348 } 41349 41350 buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. 41351 inBase64 = false; 41352 } 41353 41354 if (!inBase64) { 41355 buf[bufIdx++] = uChar; // Write direct character 41356 41357 if (uChar === andChar) // Ampersand -> '&-' 41358 buf[bufIdx++] = minusChar; 41359 } 41360 41361 } else { // Non-direct character 41362 if (!inBase64) { 41363 buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. 41364 inBase64 = true; 41365 } 41366 if (inBase64) { 41367 base64Accum[base64AccumIdx++] = uChar >> 8; 41368 base64Accum[base64AccumIdx++] = uChar & 0xFF; 41369 41370 if (base64AccumIdx == base64Accum.length) { 41371 bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); 41372 base64AccumIdx = 0; 41373 } 41374 } 41375 } 41376 } 41377 41378 this.inBase64 = inBase64; 41379 this.base64AccumIdx = base64AccumIdx; 41380 41381 return buf.slice(0, bufIdx); 41382} 41383 41384Utf7IMAPEncoder.prototype.end = function() { 41385 var buf = new Buffer(10), bufIdx = 0; 41386 if (this.inBase64) { 41387 if (this.base64AccumIdx > 0) { 41388 bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); 41389 this.base64AccumIdx = 0; 41390 } 41391 41392 buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. 41393 this.inBase64 = false; 41394 } 41395 41396 return buf.slice(0, bufIdx); 41397} 41398 41399 41400// -- Decoding 41401 41402function Utf7IMAPDecoder(options, codec) { 41403 this.iconv = codec.iconv; 41404 this.inBase64 = false; 41405 this.base64Accum = ''; 41406} 41407 41408var base64IMAPChars = base64Chars.slice(); 41409base64IMAPChars[','.charCodeAt(0)] = true; 41410 41411Utf7IMAPDecoder.prototype.write = function(buf) { 41412 var res = "", lastI = 0, 41413 inBase64 = this.inBase64, 41414 base64Accum = this.base64Accum; 41415 41416 // The decoder is more involved as we must handle chunks in stream. 41417 // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). 41418 41419 for (var i = 0; i < buf.length; i++) { 41420 if (!inBase64) { // We're in direct mode. 41421 // Write direct chars until '&' 41422 if (buf[i] == andChar) { 41423 res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. 41424 lastI = i+1; 41425 inBase64 = true; 41426 } 41427 } else { // We decode base64. 41428 if (!base64IMAPChars[buf[i]]) { // Base64 ended. 41429 if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" 41430 res += "&"; 41431 } else { 41432 var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/'); 41433 res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); 41434 } 41435 41436 if (buf[i] != minusChar) // Minus may be absorbed after base64. 41437 i--; 41438 41439 lastI = i+1; 41440 inBase64 = false; 41441 base64Accum = ''; 41442 } 41443 } 41444 } 41445 41446 if (!inBase64) { 41447 res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. 41448 } else { 41449 var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/'); 41450 41451 var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. 41452 base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. 41453 b64str = b64str.slice(0, canBeDecoded); 41454 41455 res += this.iconv.decode(new Buffer(b64str, 'base64'), "utf16-be"); 41456 } 41457 41458 this.inBase64 = inBase64; 41459 this.base64Accum = base64Accum; 41460 41461 return res; 41462} 41463 41464Utf7IMAPDecoder.prototype.end = function() { 41465 var res = ""; 41466 if (this.inBase64 && this.base64Accum.length > 0) 41467 res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), "utf16-be"); 41468 41469 this.inBase64 = false; 41470 this.base64Accum = ''; 41471 return res; 41472} 41473 41474 41475 41476 41477/***/ }), 41478/* 175 */ 41479/***/ (function(module, exports, __webpack_require__) { 41480 41481"use strict"; 41482 41483var Buffer = __webpack_require__(1).Buffer; 41484 41485// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that 41486// correspond to encoded bytes (if 128 - then lower half is ASCII). 41487 41488exports._sbcs = SBCSCodec; 41489function SBCSCodec(codecOptions, iconv) { 41490 if (!codecOptions) 41491 throw new Error("SBCS codec is called without the data.") 41492 41493 // Prepare char buffer for decoding. 41494 if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) 41495 throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); 41496 41497 if (codecOptions.chars.length === 128) { 41498 var asciiString = ""; 41499 for (var i = 0; i < 128; i++) 41500 asciiString += String.fromCharCode(i); 41501 codecOptions.chars = asciiString + codecOptions.chars; 41502 } 41503 41504 this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2'); 41505 41506 // Encoding buffer. 41507 var encodeBuf = new Buffer(65536); 41508 encodeBuf.fill(iconv.defaultCharSingleByte.charCodeAt(0)); 41509 41510 for (var i = 0; i < codecOptions.chars.length; i++) 41511 encodeBuf[codecOptions.chars.charCodeAt(i)] = i; 41512 41513 this.encodeBuf = encodeBuf; 41514} 41515 41516SBCSCodec.prototype.encoder = SBCSEncoder; 41517SBCSCodec.prototype.decoder = SBCSDecoder; 41518 41519 41520function SBCSEncoder(options, codec) { 41521 this.encodeBuf = codec.encodeBuf; 41522} 41523 41524SBCSEncoder.prototype.write = function(str) { 41525 var buf = new Buffer(str.length); 41526 for (var i = 0; i < str.length; i++) 41527 buf[i] = this.encodeBuf[str.charCodeAt(i)]; 41528 41529 return buf; 41530} 41531 41532SBCSEncoder.prototype.end = function() { 41533} 41534 41535 41536function SBCSDecoder(options, codec) { 41537 this.decodeBuf = codec.decodeBuf; 41538} 41539 41540SBCSDecoder.prototype.write = function(buf) { 41541 // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. 41542 var decodeBuf = this.decodeBuf; 41543 var newBuf = new Buffer(buf.length*2); 41544 var idx1 = 0, idx2 = 0; 41545 for (var i = 0; i < buf.length; i++) { 41546 idx1 = buf[i]*2; idx2 = i*2; 41547 newBuf[idx2] = decodeBuf[idx1]; 41548 newBuf[idx2+1] = decodeBuf[idx1+1]; 41549 } 41550 return newBuf.toString('ucs2'); 41551} 41552 41553SBCSDecoder.prototype.end = function() { 41554} 41555 41556 41557/***/ }), 41558/* 176 */ 41559/***/ (function(module, exports, __webpack_require__) { 41560 41561"use strict"; 41562 41563 41564// Manually added data to be used by sbcs codec in addition to generated one. 41565 41566module.exports = { 41567 // Not supported by iconv, not sure why. 41568 "10029": "maccenteuro", 41569 "maccenteuro": { 41570 "type": "_sbcs", 41571 "chars": "ÃÄÄÃÄÃÃÃ¡Ä ÄäÄÄÄ鏟ÄÃÄÄÄÄóÄôöõúÄÄüâ °Ä£§â¢Â¶Ã®©â¢Ä¨â ģĮįĪâ¤â¥Ä«Ä¶ââÅĻļĽľĹĺŠÅŬâÅÅâ«»â¦Â ÅÅÃÅÅââââââ÷âÅÅÅÅâ¹âºÅÅÅÅ ââÅ¡ÅÅÃŤťÃŽžŪÃÃūŮÃůŰűŲųÃýķŻÅżĢË" 41572 }, 41573 41574 "808": "cp808", 41575 "ibm808": "cp808", 41576 "cp808": { 41577 "type": "_sbcs", 41578 "chars": "ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопâââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑÐÑÐÑÐÑÐѰâ·âââ¬â  " 41579 }, 41580 41581 // Aliases of generated encodings. 41582 "ascii8bit": "ascii", 41583 "usascii": "ascii", 41584 "ansix34": "ascii", 41585 "ansix341968": "ascii", 41586 "ansix341986": "ascii", 41587 "csascii": "ascii", 41588 "cp367": "ascii", 41589 "ibm367": "ascii", 41590 "isoir6": "ascii", 41591 "iso646us": "ascii", 41592 "iso646irv": "ascii", 41593 "us": "ascii", 41594 41595 "latin1": "iso88591", 41596 "latin2": "iso88592", 41597 "latin3": "iso88593", 41598 "latin4": "iso88594", 41599 "latin5": "iso88599", 41600 "latin6": "iso885910", 41601 "latin7": "iso885913", 41602 "latin8": "iso885914", 41603 "latin9": "iso885915", 41604 "latin10": "iso885916", 41605 41606 "csisolatin1": "iso88591", 41607 "csisolatin2": "iso88592", 41608 "csisolatin3": "iso88593", 41609 "csisolatin4": "iso88594", 41610 "csisolatincyrillic": "iso88595",
41611 "csisolatinarabic": "iso88596", 41612 "csisolatingreek" : "iso88597", 41613 "csisolatinhebrew": "iso88598", 41614 "csisolatin5": "iso88599", 41615 "csisolatin6": "iso885910", 41616 41617 "l1": "iso88591", 41618 "l2": "iso88592", 41619 "l3": "iso88593", 41620 "l4": "iso88594", 41621 "l5": "iso88599", 41622 "l6": "iso885910", 41623 "l7": "iso885913", 41624 "l8": "iso885914", 41625 "l9": "iso885915", 41626 "l10": "iso885916", 41627 41628 "isoir14": "iso646jp", 41629 "isoir57": "iso646cn", 41630 "isoir100": "iso88591", 41631 "isoir101": "iso88592", 41632 "isoir109": "iso88593", 41633 "isoir110": "iso88594", 41634 "isoir144": "iso88595", 41635 "isoir127": "iso88596", 41636 "isoir126": "iso88597", 41637 "isoir138": "iso88598", 41638 "isoir148": "iso88599", 41639 "isoir157": "iso885910", 41640 "isoir166": "tis620", 41641 "isoir179": "iso885913", 41642 "isoir199": "iso885914", 41643 "isoir203": "iso885915", 41644 "isoir226": "iso885916", 41645 41646 "cp819": "iso88591", 41647 "ibm819": "iso88591", 41648 41649 "cyrillic": "iso88595", 41650 41651 "arabic": "iso88596", 41652 "arabic8": "iso88596", 41653 "ecma114": "iso88596", 41654 "asmo708": "iso88596", 41655 41656 "greek" : "iso88597", 41657 "greek8" : "iso88597", 41658 "ecma118" : "iso88597", 41659 "elot928" : "iso88597", 41660 41661 "hebrew": "iso88598", 41662 "hebrew8": "iso88598", 41663 41664 "turkish": "iso88599", 41665 "turkish8": "iso88599", 41666 41667 "thai": "iso885911", 41668 "thai8": "iso885911", 41669 41670 "celtic": "iso885914", 41671 "celtic8": "iso885914", 41672 "isoceltic": "iso885914", 41673 41674 "tis6200": "tis620", 41675 "tis62025291": "tis620", 41676 "tis62025330": "tis620", 41677 41678 "10000": "macroman", 41679 "10006": "macgreek", 41680 "10007": "maccyrillic", 41681 "10079": "maciceland", 41682 "10081": "macturkish", 41683 41684 "cspc8codepage437": "cp437", 41685 "cspc775baltic": "cp775", 41686 "cspc850multilingual": "cp850", 41687 "cspcp852": "cp852", 41688 "cspc862latinhebrew": "cp862", 41689 "cpgr": "cp869", 41690 41691 "msee": "cp1250", 41692 "mscyrl": "cp1251", 41693 "msansi": "cp1252", 41694 "msgreek": "cp1253", 41695 "msturk": "cp1254", 41696 "mshebr": "cp1255", 41697 "msarab": "cp1256", 41698 "winbaltrim": "cp1257", 41699 41700 "cp20866": "koi8r", 41701 "20866": "koi8r", 41702 "ibm878": "koi8r", 41703 "cskoi8r": "koi8r", 41704 41705 "cp21866": "koi8u", 41706 "21866": "koi8u", 41707 "ibm1168": "koi8u", 41708 41709 "strk10482002": "rk1048", 41710 41711 "tcvn5712": "tcvn", 41712 "tcvn57121": "tcvn", 41713 41714 "gb198880": "iso646cn", 41715 "cn": "iso646cn", 41716 41717 "csiso14jisc6220ro": "iso646jp", 41718 "jisc62201969ro": "iso646jp", 41719 "jp": "iso646jp", 41720 41721 "cshproman8": "hproman8", 41722 "r8": "hproman8", 41723 "roman8": "hproman8", 41724 "xroman8": "hproman8", 41725 "ibm1051": "hproman8", 41726 41727 "mac": "macintosh", 41728 "csmacintosh": "macintosh", 41729}; 41730 41731 41732 41733/***/ }), 41734/* 177 */ 41735/***/ (function(module, exports, __webpack_require__) { 41736 41737"use strict"; 41738 41739 41740// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. 41741module.exports = { 41742 "437": "cp437", 41743 "737": "cp737", 41744 "775": "cp775", 41745 "850": "cp850", 41746 "852": "cp852", 41747 "855": "cp855", 41748 "856": "cp856", 41749 "857": "cp857", 41750 "858": "cp858", 41751 "860": "cp860", 41752 "861": "cp861", 41753 "862": "cp862", 41754 "863": "cp863", 41755 "864": "cp864", 41756 "865": "cp865", 41757 "866": "cp866", 41758 "869": "cp869", 41759 "874": "windows874", 41760 "922": "cp922", 41761 "1046": "cp1046", 41762 "1124": "cp1124", 41763 "1125": "cp1125", 41764 "1129": "cp1129", 41765 "1133": "cp1133", 41766 "1161": "cp1161", 41767 "1162": "cp1162", 41768 "1163": "cp1163", 41769 "1250": "windows1250", 41770 "1251": "windows1251", 41771 "1252": "windows1252", 41772 "1253": "windows1253", 41773 "1254": "windows1254", 41774 "1255": "windows1255", 41775 "1256": "windows1256", 41776 "1257": "windows1257", 41777 "1258": "windows1258", 41778 "28591": "iso88591", 41779 "28592": "iso88592", 41780 "28593": "iso88593", 41781 "28594": "iso88594", 41782 "28595": "iso88595", 41783 "28596": "iso88596", 41784 "28597": "iso88597", 41785 "28598": "iso88598", 41786 "28599": "iso88599", 41787 "28600": "iso885910", 41788 "28601": "iso885911", 41789 "28603": "iso885913", 41790 "28604": "iso885914", 41791 "28605": "iso885915", 41792 "28606": "iso885916", 41793 "windows874": { 41794 "type": "_sbcs", 41795 "chars": "â¬ï¿½ï¿½ï¿½ï¿½â¦ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½âââââ¢ââ�������� à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸
41795ภมยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹ï¿½ï¿½ï¿½ï¿½" 41796 }, 41797 "win874": "windows874", 41798 "cp874": "windows874", 41799 "windows1250": { 41800 "type": "_sbcs", 41801 "chars": "â¬ï¿½â�ââ¦â â¡ï¿½â°Å â¹ÅŤŽŹ�âââââ¢ââ�â¢Å¡âºÅťžź ËËŤĦ§¨©Å«¬Â®Ż°±ËÅÂ´ÂµÂ¶Â·Â¸Ä Å»ĽËľżÅÃÃÄÃĹÄÃÄÃÄÃÄÃÃÄÄÅÅÃÃÅÃÃÅÅ®ÃŰÃÃÅ¢ÃÅáâÄäĺÄçÄéÄëÄÃîÄÄÅÅóôÅö÷ÅůúűüýţË" 41802 }, 41803 "win1250": "windows1250", 41804 "cp1250": "windows1250", 41805 "windows1251": { 41806 "type": "_sbcs", 41807 "chars": "ÐÐâÑââ¦â â¡â¬â°Ðâ¹ÐÐÐÐÑâââââ¢ââ�â¢ÑâºÑÑÑÑ ÐÑФҦ§Ð©Ð«¬Â®Ð°±ÐÑÒµ¶·ÑâÑ»ÑÐ ÑÑÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑ" 41808 }, 41809 "win1251": "windows1251", 41810 "cp1251": "windows1251", 41811 "windows1252": { 41812 "type": "_sbcs", 41813 "chars": "â¬ï¿½âÆââ¦â â¡Ëâ°Å â¹Å���âââââ¢ââËâ¢Å¡âºÅ�žŸ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ" 41814 }, 41815 "win1252": "windows1252", 41816 "cp1252": "windows1252", 41817 "windows1253": { 41818 "type": "_sbcs", 41819 "chars": "â¬ï¿½âÆââ¦â â¡ï¿½â°ï¿½â¹ï¿½ï¿½ï¿½ï¿½ï¿½âââââ¢ââ�â¢ï¿½âºï¿½ï¿½ï¿½ï¿½Â ΠΣ¤¥¦§¨©�«¬Â®â°±²³Îµ¶·ÎÎλνÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎΠΡ�ΣΤΥΦΧΨΩΪΫάÎήίΰαβγδεζηθικλμνξοÏÏÏÏÏÏ ÏÏÏÏÏÏÏÏÏ�" 41820 }, 41821 "win1253": "windows1253", 41822 "cp1253": "windows1253", 41823 "windows1254": { 41824 "type": "_sbcs", 41825 "chars": "â¬ï¿½âÆââ¦â â¡Ëâ°Å â¹Å����âââââ¢ââËâ¢Å¡âºÅ��Ÿ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÄÃÃÃÃÃÃÃÃÃÃÃÃİÅÃà áâãäåæçèéêëìÃîïÄñòóôõö÷øùúûüıÅÿ" 41826 }, 41827 "win1254": "windows1254", 41828 "cp1254": "windows1254", 41829 "windows1255": { 41830 "type": "_sbcs", 41831 "chars": "â¬ï¿½âÆââ¦â â¡Ëâ°ï¿½â¹ï¿½ï¿½ï¿½ï¿½ï¿½âââââ¢ââËâ¢ï¿½âºï¿½ï¿½ï¿½ï¿½Â ¡¢£âªÂ¥Â¦Â§Â¨Â©Ã«¬Â®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ××××װױײ׳״�������××××××××××××××××× ×¡×¢×£×¤×¥×¦×§×¨×©×ªï¿½ï¿½ââ�" 41832 }, 41833 "win1255": "windows1255", 41834 "cp1255": "windows1255", 41835 "windows1256": { 41836 "type": "_sbcs", 41837 "chars": "â¬Ù¾âÆââ¦â â¡Ëâ°Ù¹â¹ÅÚÚÚÚ¯âââââ¢ââÚ©â¢ÚâºÅââں ØÂ¢Â£Â¤Â¥Â¦Â§Â¨Â©Ú¾Â«Â¬Â®¯°±²³´µ¶·¸¹ØÂ»Â¼Â½Â¾ØÛØ¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§Ø¨Ø©ØªØ«Ø¬ØØ®Ø¯Ø°Ø±Ø²Ø³Ø´ØµØ¶ÃطظعغÙÙÙÙà Ùâ٠ÙÙÙçèéêëÙÙîïÙÙÙÙôÙÙ÷ÙùÙûüââÛ" 41838 }, 41839 "win1256": "windows1256", 41840 "cp1256": "windows1256", 41841 "windows1257": { 41842 "type": "_sbcs", 41843 "chars": "â¬ï¿½â�ââ¦â â¡ï¿½â°ï¿½â¹ï¿½Â¨Ë¸�âââââ¢ââ�â¢ï¿½âºï¿½Â¯Ë� �¢£¤�¦§Ã©Å«¬Â®Ã°±²³´µ¶·ø¹Å»¼½¾æÄÄ®ÄÄÃà ÄÄÄÃŹÄĢĶĪĻŠÅÅ ÃÅÃÃÃŲÅÅŪÃŻŽÃÄ Ä¯ÄÄäåÄÄÄéźÄģķīļšÅÅóÅõö÷ųÅÅūüżžË" 41844 }, 41845 "win1257": "windows1257", 41846 "cp1257": "windows1257", 41847 "windows1258": { 41848 "type": "_sbcs", 41849 "chars": "â¬ï¿½âÆââ¦â â¡Ëâ°ï¿½â¹Å����âââââ¢ââËâ¢ï¿½âºÅ��Ÿ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÄÃà ÃÃÃÃÃÃÌÃÃÃÄÃÌÃÃÆ ÃÃÃÃÃÃÃÆ¯ÌÃà áâÄäåæçèéêëÌÃîïÄṇ̃óôơö÷øùúûüưâ«Ã¿" 41850 }, 41851 "win1258": "windows1258", 41852 "cp1258": "windows1258", 41853 "iso88591": { 41854 "type": "_sbcs", 41855 "chars": " Â ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà áâãäåæçèéêëìÃîïðñòóôõö÷øù
41855úûüýþÿ" 41856 }, 41857 "cp28591": "iso88591", 41858 "iso88592": { 41859 "type": "_sbcs", 41860 "chars": " Â ÄËŤĽÅ§¨ŠÅŤŹÂÅ½Å»Â°Ä ËÅ´ľÅ˸šÅťźËžżÅÃÃÄÃĹÄÃÄÃÄÃÄÃÃÄÄÅÅÃÃÅÃÃÅÅ®ÃŰÃÃÅ¢ÃÅáâÄäĺÄçÄéÄëÄÃîÄÄÅÅóôÅö÷ÅůúűüýţË" 41861 }, 41862 "cp28592": "iso88592", 41863 "iso88593": { 41864 "type": "_sbcs", 41865 "chars": " Â ĦË£¤�Ĥ§¨İÅÄÄ´Â�ݰħ²³´µĥ·¸ıÅÄĵ½�żÃÃÃ�ÃÄÄÃÃÃÃÃÃÃÃÃ�ÃÃÃÃÄ ÃÃÄÃÃÃÃŬÅÃà áâ�äÄÄçèéêëìÃîï�ñòóôġö÷ÄùúûüÅÅË" 41866 }, 41867 "cp28593": "iso88593", 41868 "iso88594": { 41869 "type": "_sbcs", 41870 "chars": " Â ÄĸŤĨϧ¨ŠÄĢŦÂÅ½Â¯Â°Ä ËÅ´ĩļ˸šÄģŧÅžÅÄÃÃÃÃà ÃÄ®ÄÃÄÃÄÃÃĪÄÅ ÅĶÃÃÃÃÃŲÃÃÃŨŪÃÄáâãäåæįÄéÄëÄÃîīÄÅÅķôõö÷øųúûüũūË" 41871 }, 41872 "cp28594": "iso88594", 41873 "iso88595": { 41874 "type": "_sbcs", 41875 "chars": " Â ÐÐÐÐÐ ÐÐÐÐÐÐÐÂÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑâÑÑÑÑÑÑÑÑÑÑÑѧÑÑ" 41876 }, 41877 "cp28595": "iso88595", 41878 "iso88596": { 41879 "type": "_sbcs", 41880 "chars": " Â ���¤�������ØÂ�������������Øï¿½ï¿½ï¿½Øï¿½Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§Ø¨Ø©ØªØ«Ø¬ØØ®Ø¯Ø°Ø±Ø²Ø³Ø´ØµØ¶Ø·Ø¸Ø¹Øºï¿½ï¿½ï¿½ï¿½ï¿½ÙÙÙÙÙÙ ÙÙÙÙÙÙÙÙÙÙÙÙÙ�������������" 41881 }, 41882 "cp28596": "iso88596", 41883 "iso88597": { 41884 "type": "_sbcs", 41885 "chars": " Â ââ£â¬â¯Â¦Â§Â¨Â©ÍºÂ«Â¬Â�â°±²³ÎΠηÎÎλνÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎΠΡ�ΣΤΥΦΧΨΩΪΫάÎήίΰαβγδεζηθικλμνξοÏÏÏÏÏÏ ÏÏÏÏÏÏÏÏÏ�" 41886 }, 41887 "cp28597": "iso88597", 41888 "iso88598": { 41889 "type": "_sbcs", 41890 "chars": " Â �¢£¤¥¦§¨©Ã«¬Â®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������â××××××××××××××××× ×¡×¢×£×¤×¥×¦×§×¨×©×ªï¿½ï¿½ââ�" 41891 }, 41892 "cp28598": "iso88598", 41893 "iso88599": { 41894 "type": "_sbcs", 41895 "chars": " Â ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÄÃÃÃÃÃÃÃÃÃÃÃÃİÅÃà áâãäåæçèéêëìÃîïÄñòóôõö÷øùúûüıÅÿ" 41896 }, 41897 "cp28599": "iso88599", 41898 "iso885910": { 41899 "type": "_sbcs", 41900 "chars": " Â ÄÄĢĪĨͧĻÄŠŦŽÂŪÅ塀 Äģīĩķ·ļÄšŧžâÅ«ÅÄÃÃÃÃà ÃÄ®ÄÃÄÃÄÃÃÃÃÅ ÅÃÃÃÃŨÃŲÃÃÃÃÃÃÄáâãäåæįÄéÄëÄÃîïðÅÅóôõöũøųúûüýþĸ" 41901 }, 41902 "cp28600": "iso885910", 41903 "iso885911": { 41904 "type": "_sbcs", 41905 "chars": " Â à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸ มยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹ï¿½ï¿½ï¿½ï¿½" 41906 }, 41907 "cp28601": "iso885911", 41908 "iso885913": { 41909 "type": "_sbcs", 41910 "chars": " Â ⢣¤â¦§Ã©Å«¬Â®Ã°±²³âµ¶·ø¹Å»¼½¾æÄÄ®ÄÄÃà ÄÄÄÃŹÄĢĶĪĻŠÅÅ ÃÅÃÃÃŲÅÅŪÃŻŽÃÄ Ä¯ÄÄäåÄÄÄéźÄģķīļšÅÅóÅõö÷ųÅÅūüżžâ" 41911 }, 41912 "cp28603": "iso885913", 41913 "iso885914": { 41914 "type": "_sbcs", 41915 "chars": " Â á¸á¸Â£ÄÄá¸Â§áºÂ©áºá¸á»²Â®Ÿá¸á¸Ä Ä¡á¹á¹Â¶á¹áºá¹áºá¹ ỳáºáº ṡÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÅ´ÃÃÃÃÃÃṪÃÃÃÃÃÃŶÃà áâãäåæçèéêëìÃîïÅ
41915µÃ±Ã²Ã³Ã´ÃµÃ¶á¹«Ã¸Ã¹ÃºÃ»Ã¼Ã½Å·Ã¿" 41916 }, 41917 "cp28604": "iso885914", 41918 "iso885915": { 41919 "type": "_sbcs", 41920 "chars": " Â ¡¢£â¬Â¥Å §š©ª«¬Â®¯°±²³Žµ¶·ž¹º»ÅÅŸ¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ" 41921 }, 41922 "cp28605": "iso885915", 41923 "iso885916": { 41924 "type": "_sbcs", 41925 "chars": " Â ÄÄ Åâ¬âЧš©È«ŹÂźŻ°±ÄÅŽâ¶·žÄÈ»ÅÅŸżÃÃÃÄÃÄÃÃÃÃÃÃÃÃÃÃÄÅÃÃÃÅÃÅŰÃÃÃÃÄÈÃà áâÄäÄæçèéêëìÃîïÄÅòóôÅöÅűùúûüÄÈÿ" 41926 }, 41927 "cp28606": "iso885916", 41928 "cp437": { 41929 "type": "_sbcs", 41930 "chars": "Ãüéâäà åçêëèïîìÃà ÃæÃôöòûùÿÃÃÂ¢Â£Â¥â§ÆÃ¡Ãóúñ꺿⬽¼¡«»âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 41931 }, 41932 "ibm437": "cp437", 41933 "csibm437": "cp437", 41934 "cp737": { 41935 "type": "_sbcs", 41936 "chars": "ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοÏÏÏÏÏÏ ÏÏÏâââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââÏάÎήÏίÏÏÏÏÎÎÎÎÎÎαâ¥â¤ÎªÎ«Ã·â°â·ââ¿Â²â  " 41937 }, 41938 "ibm737": "cp737", 41939 "csibm737": "cp737", 41940 "cp775": { 41941 "type": "_sbcs", 41942 "chars": "ÄüéÄäģåÄÅÄÅÅīŹÃà ÃæÃÅöĢ¢ÅÅÃÃø£ÃäÄĪ󯿟⦩®¬½¼Å«»âââââ¤ÄÄÄÄâ£âââĮŠâââ´â¬âââ¼Å²Åªâââ©â¦â ââ¬Å½Ä ÄÄÄįšųūžâââââââÃÃÅÅõõÅĶķĻļÅÄÅ â±⾶§÷â°â·¹³²â  " 41943 }, 41944 "ibm775": "cp775", 41945 "csibm775": "cp775", 41946 "cp850": { 41947 "type": "_sbcs", 41948 "chars": "Ãüéâäà åçêëèïîìÃà ÃæÃôöòûùÿÃÃø£ÃÃÆÃ¡Ãóúñ꺿®¬½¼¡«»âââââ¤ÃÃéâ£ââ⢥âââ´â¬âââ¼Ã£Ãâââ©â¦â ââ¬Â¤Ã°ÃÃÃÃıÃÃÃââââ¦ÃâÃÃÃÃõõþÃÃÃÃýï´Â±â¾¶§÷¸°¨·¹³²â  " 41949 }, 41950 "ibm850": "cp850", 41951 "csibm850": "cp850", 41952 "cp852": { 41953 "type": "_sbcs", 41954 "chars": "ÃüéâäůÄçÅëÅÅîŹÃÄÃĹĺôöĽľÅÅÃÃŤťÅÃÄáÃóúÄÄ Å½Å¾ÄĬźÄÅ«»âââââ¤ÃÃÄÅâ£ââ⯿âââ´â¬âââ¼ÄÄâââ©â¦â ââ¬Â¤ÄÄÄÃÄÅÃÃÄââââŢŮâÃÃÃÅÅÅÅ Å¡ÅÃÅŰýÃţ´ÂËËË˧÷¸°¨ËűÅÅâ  " 41955 }, 41956 "ibm852": "cp852", 41957 "csibm852": "cp852", 41958 "cp855": { 41959 "type": "_sbcs", 41960 "chars": "ÑÐÑÐÑÐÑÐÑÐ ÑÐÑÐÑÐÑÐÑÐÑÐÑÐÑÐÑÐÑЮÑЪаÐбÐÑЦдÐеÐÑФгЫ»âââââ¤Ñ ХиÐâ£âââйÐâââ´â¬âââ¼ÐºÐâââ©â¦â ââ¬Â¤Ð»ÐмÐнÐоÐпââââÐÑâЯÑÐ ÑСÑТÑУжÐвÐÑЬâÂÑЫзÐÑШÑÐÑЩÑЧ§â  " 41961 }, 41962 "ibm855": "cp855", 41963 "csibm855": "cp855", 41964 "cp856": { 41965 "type": "_sbcs", 41966 "chars": "××××××××××××××××× ×¡×¢×£×¤×¥×¦×§×¨×©×ªï¿½Â£ï¿½Ã����������®¬½¼�«»âââââ¤ï¿½ï¿½ï¿½Â©â£ââ⢥âââ´â¬âââ¼ï¿½ï¿½âââ©â¦â ââ¬Â¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ââââ¦�â������µ�������¯´Â±â¾¶§÷¸°¨·¹³²â  " 41967 }, 41968 "ibm856": "cp856", 41969 "csibm856": "cp856", 41970 "cp857": { 41971 "type": "_sbcs", 41972 "chars": "Ãüéâäà åçêëèïîıÃà ÃæÃôöòûùİÃÃø£ÃÅÅáÃóúñÃÄÄ¿®¬½¼¡«»âââââ¤ÃÃéâ£ââ⢥âââ´â¬âââ¼Ã£Ãâââ©â¦â ââ¬Â¤ÂºÂªÃÃÃ�ÃÃÃââââ¦ÃâÃÃÃÃõõ�ÃÃÃÃìÿ¯´Â±�¾¶§÷¸°¨·¹³²â  " 41973 }, 41974 "ibm857": "cp857", 41975 "csibm857": "cp857", 41976 "cp858": { 41977 "type": "_sbcs", 41978 "chars": "Ãüéâäà åçêëèïîìÃà ÃæÃôöòûùÿÃÃø£ÃÃÆÃ¡Ãóúñ꺿®¬½¼¡«»âââââ¤ÃÃéâ£ââ⢥âââ´â¬âââ¼Ã£Ãâââ©â¦â ââ¬Â¤Ã°ÃÃÃÃâ¬ÃÃÃââââ¦ÃâÃÃÃÃõõþÃÃÃÃýï´Â±â¾¶§÷¸°¨·¹³²â  " 41979 }, 41980 "ibm858": "cp858", 41981 "csibm858": "cp858", 41982 "cp860": { 41983 "type": "_sbcs", 41984 "chars": "Ãüéâãà ÃçêÃèÃÃìÃÃÃÃÃôõòÃùÃÃâ£Ãâ§ÃáÃóúñ꺿ì½¼¡«»âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 41985 }, 41986 "ibm860": "cp860", 41987 "csibm860": "cp860", 41988 "cp861": { 41989 "type": "_sbcs", 41990 "chars": "Ãüéâäà åçêëèÃðÃÃà ÃæÃôöþûÃýÃÃø£Ãâ§ÆÃ¡ÃóúÃÃÃÿ⬽¼¡«»âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 41991 }, 41992 "ibm861": "cp861", 41993 "csibm861": "cp861", 41994 "cp862": { 41995 "type": "_sbcs", 41996 "chars": "××××××××××××××××× ×¡×¢×£×¤×¥×¦×§×¨×©×ªÂ¢Â£Â¥â§ÆÃ¡Ãóúñ꺿⬽¼¡«»âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 41997 }, 41998 "ibm862": "cp862", 41999 "csibm862": "cp862", 42000 "cp863": { 42001 "type": "_sbcs", 42002 "chars": "ÃüéâÃà ¶çêëèïîâçÃÃÃôÃÃûù¤Ãâ£ÃÃÆÂ¦Â´Ã³ÃºÂ¨Â¸Â³Â¯Ã⬽¼¾«»âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 42003 }, 42004 "ibm863": "cp863", 42005 "csibm863": "cp863", 42006 "cp864": { 42007 "type": "_sbcs", 42008 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$Ùª&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�°·ââââââ¼â¤â¬ââ´ââââβâϱ½¼â«»ﻷﻸ��ﻻﻼ� ÂïºÂ£Â¤ïºï¿½ï¿½ïºïºïºïºØïºïº¡ïº¥Ù Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©ï»Øïº±ïºµïº¹ØÂ¢ïºïºïºïº ï»ïºïºïºïºïºïºïºïº£ïº§ïº©ïº«ïºïº¯ïº³ïº·ïº»ïº¿ï»ï» ï»ï»Â¦Â¬Ã·Ãï»Ùï»ï»ï»ï»ï»£ï»§ï»«ï»ï»¯ï»³ïº½ï»ï»ï»ï»¡ï¹½Ùﻥﻩﻬﻰﻲï»ï»ï»µï»¶ï»ï»ï»±â �" 42009 }, 42010 "ibm864": "cp864", 42011 "csibm864": "cp864", 42012 "cp865": { 42013 "type": "_sbcs", 42014 "chars": "Ãüéâäà åçêëèïîìÃà ÃæÃôöòûùÿÃÃø£Ãâ§ÆÃ¡Ãóúñ꺿⬽¼¡«¤âââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââαÃÎÏΣϵÏΦÎΩδâÏεâ©â¡Â±â¥â¤â â¡Ã·â°â·ââ¿Â²â  " 42015 }, 42016 "ibm865": "cp865", 42017 "csibm865": "cp865", 42018 "cp866": { 42019 "type": "_sbcs", 42020 "chars": "ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопâââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑÐÑÐÑÐÑÐѰâ·ââ¤â  " 42021 }, 42022 "ibm866": "cp866", 42023 "csibm866": "cp866", 42024 "cp869": { 42025 "type": "_sbcs", 42026 "chars": "������Î�·¬¦ââÎâÎÎΪÎ��ÎΫ©Î²³ά£ÎήίÏÎÏÏÎÎÎÎÎÎνÎΫ»âââââ¤ÎÎÎÎâ£âââÎÎâââ´â¬âââ¼Î Ρâââ©â¦â ââ¬Î£Î¤Î¥Î¦Î§Î¨Î©Î±Î²Î³ââââδεâζηθικλμνξοÏÏÏÏÏÎÂÂ±Ï ÏϧÏΠ°¨ÏÏΰÏâ  " 42027 }, 42028 "ibm869": "cp869", 42029 "csibm869": "cp869", 42030 "cp922": { 42031 "type": "_sbcs", 42032 "chars": " Â ¡¢£¤¥¦§¨©ª«¬Â®â¾Â°Â±Â²Â³Â´ÂµÂ¶Â·Â¸Â¹ÂºÂ»Â¼Â½Â¾Â¿ÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃÃÅ ÃÃÃÃÃÃÃÃÃÃÃÃÃŽÃà áâãäåæçèéêëìÃîïšñòóôõö÷øù
42032úûüýžÿ" 42033 }, 42034 "ibm922": "cp922", 42035 "csibm922": "cp922", 42036 "cp1046": { 42037 "type": "_sbcs", 42038 "chars": "ïºÃ÷ﹱÂâ ââââââﹹﹻﹽﹿﹷïºï»°ï»³ï»²ï»ï»ï»ï»¶ï»¸ï»ºï»¼Â ¤ïºïºïºïºïºïº£ØÂﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷØïº»ïº¿ï»Øï»Ø¡Ø¢Ø£Ø¤Ø¥Ø¦Ø§Ø¨Ø©ØªØ«Ø¬ØØ®Ø¯Ø°Ø±Ø²Ø³Ø´ØµØ¶Ø·ï»Ø¹Øºï»ïºïºïºï»ÙÙÙÙÙÙ ÙÙÙÙÙÙÙÙÙÙÙÙÙï»ï»ï»ï£¼ï»µï»·ï»¹ï»»ï»£ï»§ï»¬ï»©ï¿½" 42039 }, 42040 "ibm1046": "cp1046", 42041 "csibm1046": "cp1046", 42042 "cp1124": { 42043 "type": "_sbcs", 42044 "chars": " Â ÐÐÒÐÐ ÐÐÐÐÐÐÐÂÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑâÑÑÒÑÑÑÑÑÑÑÑѧÑÑ" 42045 }, 42046 "ibm1124": "cp1124", 42047 "csibm1124": "cp1124", 42048 "cp1125": { 42049 "type": "_sbcs", 42050 "chars": "ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопâââââ¤â¡â¢âââ£ââââââââ´â¬âââ¼âââââ©â¦â ââ¬â§â¨â¤â¥âââââ«âªâââââââÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑÐÑÒÒÐÑÐÑÐÑ·ââ¤â  " 42051 }, 42052 "ibm1125": "cp1125", 42053 "csibm1125": "cp1125", 42054 "cp1129": { 42055 "type": "_sbcs", 42056 "chars": " Â ¡¢£¤¥¦§Å©ª«¬Â®¯°±²³Ÿµ¶·Å¹º»¼½¾¿ÃÃÃÄÃà ÃÃÃÃÃÃÌÃÃÃÄÃÌÃÃÆ ÃÃÃÃÃÃÃÆ¯ÌÃà áâÄäåæçèéêëÌÃîïÄṇ̃óôơö÷øùúûüưâ«Ã¿" 42057 }, 42058 "ibm1129": "cp1129", 42059 "csibm1129": "cp1129", 42060 "cp1133": { 42061 "type": "_sbcs", 42062 "chars": " Â àºàºàºàºàºàºªàºàºàºàºàºàºàºàºàºàºàºàºàºàº¡àº¢àº£àº¥àº§àº«àºàº®ï¿½ï¿½ï¿½àº¯àº°àº²àº³àº´àºµàº¶àº·àº¸àº¹àº¼àº±àº»àº½ï¿½ï¿½ï¿½à»à»à»à»à»à»à»à»à»à»à»à»ï¿½à»à»â����������������à»à»à»à»à»à»à»à»à»à»ï¿½ï¿½Â¢Â¬Â¦ï¿½" 42063 }, 42064 "ibm1133": "cp1133", 42065 "csibm1133": "cp1133", 42066 "cp1161": { 42067 "type": "_sbcs", 42068 "chars": "��������������������������������à¹à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸ มยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºà¹à¹à¹â¬à¸¿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹Â¢Â¬Â¦Â " 42069 }, 42070 "ibm1161": "cp1161", 42071 "csibm1161": "cp1161", 42072 "cp1162": { 42073 "type": "_sbcs", 42074 "chars": "â¬ÂÂÂÂâ¦ÂÂÂÂÂÂÂÂÂÂÂâââââ¢ââ à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸ มยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹ï¿½ï¿½ï¿½ï¿½" 42075 }, 42076 "ibm1162": "cp1162", 42077 "csibm1162": "cp1162", 42078 "cp1163": { 42079 "type": "_sbcs", 42080 "chars": " Â ¡¢£â¬Â¥Â¦Â§Å©ª«¬Â®¯°±²³Ÿµ¶·Å¹º»¼½¾¿ÃÃÃÄÃà ÃÃÃÃÃÃÌÃÃÃÄÃÌÃÃÆ ÃÃÃÃÃÃÃÆ¯ÌÃà áâÄäåæçèéêëÌÃîïÄṇ̃óôơö÷øùúûüưâ«Ã¿" 42081 }, 42082 "ibm1163": "cp1163", 42083 "csibm1163": "cp1163", 42084 "maccroatian": { 42085 "type": "_sbcs", 42086 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûüâ °¢£§â¢Â¶Ã®Šâ¢Â´Â¨â ŽÃâ±â¤â¥âµâââÅ¡â«ÂªÂºâ¦Å¾Ã¸Â¿Â¡Â¬âÆâÄ«Äâ¦Â ÃÃÃÅÅÄâââââ÷â�©â¤â¹âºÃ»â·âââ°ÃÄÃÄÃÃÃÃÃÃÃÄÃÃÃÃıË˯ÏÃË¸ÃæË" 42087 }, 42088 "maccyrillic": { 42089 "type": "_sbcs", 42090 "chars": "ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯâ °¢£§â¢Â¶Ð®©â¢ÐÑâ ÐÑâ±â¤â¥ÑµâÐÐÑÐÑÐÑÐÑÑР¬âÆââ«»â¦Â ÐÑÐÑÑââââââ÷âÐÑÐÑâÐÑÑабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑѤ" 42091 }, 42092 "macgreek": { 42093 "type": "_sbcs", 42094 "chars": "ù²Ã³ÃÃΠà âäΨçéèêë£â¢Ã®Ã¯â¢Â½â°Ã´Ã¶Â¦Âùûüâ ÎÎÎÎÎΠî©ΣΪ§â °Îαâ¤â¥Â¥ÎÎÎÎÎÎÎΦΫΨΩάάÎΡâΤ«»â¦Â ΥΧÎÎÅââââââ÷ÎÎÎÎÎήίÏÎÏαβÏδεÏγηιξκλμνοÏÏÏÏÏθÏÏÏÏ Î¶ÏÏÎΰ�" 42095 }, 42096 "maciceland": { 42097 "type": "_sbcs", 42098 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûü𢣧â¢Â¶Ã®©â¢Â´Â¨â ÃÃâ±â¤â¥Â¥ÂµâââÏâ«ÂªÂºâ¦Ã¦Ã¸Â¿Â¡Â¬âÆââ«»â¦Â ÃÃÃÅÅââââââ÷âÿŸâ¤ÃðÃþý·âââ°ÃÃÃÃÃÃÃÃÃÃÃ�ÃÃÃÃıË˯ËË˸ËËË" 42099 }, 42100 "macroman": { 42101 "type": "_sbcs", 42102 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûüâ °¢£§â¢Â¶Ã®©â¢Â´Â¨â ÃÃâ±â¤â¥Â¥ÂµâââÏâ«ÂªÂºâ¦Ã¦Ã¸Â¿Â¡Â¬âÆââ«»â¦Â ÃÃÃÅÅââââââ÷âÿŸâ¤â¹âºï¬ï¬â¡Â·âââ°ÃÃÃÃÃÃÃÃÃÃÃ�ÃÃÃÃıË˯ËË˸ËËË" 42103 }, 42104 "macromania": { 42105 "type": "_sbcs", 42106 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûüâ °¢£§â¢Â¶Ã®©â¢Â´Â¨â ÄÅâ±â¤â¥Â¥ÂµâââÏâ«ÂªÂºâ¦ÄÅ¿¡¬âÆââ«»â¦Â ÃÃÃÅÅââââââ÷âÿŸâ¤â¹âºÅ¢Å£â¡Â·âââ°ÃÃÃÃÃÃÃÃÃÃÃ�ÃÃÃÃıË˯ËË˸ËËË" 42107 }, 42108 "macthai": { 42109 "type": "_sbcs", 42110 "chars": "«»â¦ï¢ï¢ï¢ï¢ï¢ï¢ï¢ï¢ï¢ï¢ââï¢ï¿½â¢ï¢ï¢ï¢ ï¢ï¢ï¢ï¢ï¢ï¢ï¢ï¢ââ� à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸
42110ภมยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï»¿âââ฿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹â¢à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹Â®Â©ï¿½ï¿½ï¿½ï¿½" 42111 }, 42112 "macturkish": { 42113 "type": "_sbcs", 42114 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûüâ °¢£§â¢Â¶Ã®©â¢Â´Â¨â ÃÃâ±â¤â¥Â¥ÂµâââÏâ«ÂªÂºâ¦Ã¦Ã¸Â¿Â¡Â¬âÆââ«»â¦Â ÃÃÃÅÅââââââ÷âÿŸÄÄİıÅÅâ¡Â·âââ°ÃÃÃÃÃÃÃÃÃÃÃ�ÃÃÃÃ�Ë˯ËË˸ËËË" 42115 }, 42116 "macukraine": { 42117 "type": "_sbcs", 42118 "chars": "ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯâ °Ò£§â¢Â¶Ð®©â¢ÐÑâ ÐÑâ±â¤â¥ÑµÒÐÐÑÐÑÐÑÐÑÑР¬âÆââ«»â¦Â ÐÑÐÑÑââââââ÷âÐÑÐÑâÐÑÑабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑѤ" 42119 }, 42120 "koi8r": { 42121 "type": "_sbcs", 42122 "chars": "ââââââââ¤â¬â´â¼âââââââââ â ââââ¤â¥Â â¡Â°Â²Â·Ã·âââÑââââââââââââââ â¡Ðâ¢â£â¤â¥â¦â§â¨â©âªâ«â¬Â©ÑабÑдеÑÐ³Ñ Ð¸Ð¹ÐºÐ»Ð¼Ð½Ð¾Ð¿ÑÑÑÑÑжвÑÑзÑÑÑÑÑЮÐÐЦÐÐФÐÐ¥ÐÐÐÐÐÐÐÐЯРСТУÐÐЬЫÐШÐЩЧЪ" 42123 }, 42124 "koi8u": { 42125 "type": "_sbcs", 42126 "chars": "ââââââââ¤â¬â´â¼âââââââââ â ââââ¤â¥Â â¡Â°Â²Â·Ã·âââÑÑâÑÑâââââÒââââ â¡ÐÐâ£ÐÐâ¦â§â¨â©âªÒâ¬Â©ÑабÑдеÑÐ³Ñ Ð¸Ð¹ÐºÐ»Ð¼Ð½Ð¾Ð¿ÑÑÑÑÑжвÑÑзÑÑÑÑÑЮÐÐЦÐÐФÐÐ¥ÐÐÐÐÐÐÐÐЯРСТУÐÐЬЫÐШÐЩЧЪ" 42127 }, 42128 "koi8ru": { 42129 "type": "_sbcs", 42130 "chars": "ââââââââ¤â¬â´â¼âââââââââ â ââââ¤â¥Â â¡Â°Â²Â·Ã·âââÑÑâÑÑâââââÒÑâââ â¡ÐÐâ£ÐÐâ¦â§â¨â©âªÒЩÑабÑдеÑÐ³Ñ Ð¸Ð¹ÐºÐ»Ð¼Ð½Ð¾Ð¿ÑÑÑÑÑжвÑÑзÑÑÑÑÑЮÐÐЦÐÐФÐÐ¥ÐÐÐÐÐÐÐÐЯРСТУÐÐЬЫÐШÐЩЧЪ" 42131 }, 42132 "koi8t": { 42133 "type": "_sbcs", 42134 "chars": "ÒÒâÒââ¦â â¡ï¿½â°Ò³â¹Ò²Ò·Ò¶ï¿½Òâââââ¢ââ�â¢ï¿½âºï¿½ï¿½ï¿½ï¿½ï¿½Ó¯Ó®Ñ¤ӣ¦§���«¬Â®�°±²Ð�Ӣ¶·�â�»���©ÑабÑдеÑÐ³Ñ Ð¸Ð¹ÐºÐ»Ð¼Ð½Ð¾Ð¿ÑÑÑÑÑжвÑÑзÑÑÑÑÑЮÐÐЦÐÐФÐÐ¥ÐÐÐÐÐÐÐÐЯРСТУÐÐЬЫÐШÐЩЧЪ" 42135 }, 42136 "armscii8": { 42137 "type": "_sbcs", 42138 "chars": " Â �ÖÖ)(»«â.Õ,-Öâ¦ÕÕÕÔ±Õ¡Ô²Õ¢Ô³Õ£Ô´Õ¤ÔµÕ¥Ô¶Õ¦Ô·Õ§Ô¸Õ¨Ô¹Õ©ÔºÕªÔ»Õ«Ô¼Õ¬Ô½ÕÔ¾Õ®Ô¿Õ¯ÕÕ°ÕÕ±ÕÕ²ÕÕ³ÕÕ´Õ ÕµÕÕ¶ÕÕ·ÕÕ¸ÕÕ¹ÕÕºÕÕ»ÕÕ¼ÕÕ½ÕÕ¾ÕÕ¿ÕÖÕÖÕÖÕÖÕÖÕÖ ÕÖÕ�" 42139 }, 42140 "rk1048": { 42141 "type": "_sbcs", 42142 "chars": "ÐÐâÑââ¦â â¡â¬â°Ðâ¹ÐÒÒºÐÑâââââ¢ââ�â¢ÑâºÑÒһѠҰұ
42142Ó¤Ө¦§Ð©Ò«¬Â®Ү°±ÐÑөµ¶·ÑâÒ»ÓÒ¢Ò£Ò¯ÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑ" 42143 }, 42144 "tcvn": { 42145 "type": "_sbcs", 42146 "chars": "\u0000ÃỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÃá»´\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�ÃẢÃÃẠẶẬÃẺẼÃẸá»Ãá»Ä¨Ãá»Ãá»ÃÃá»á»á»á»á» á»á»¢ÃỦŨ ÄÃÃÃÆ ƯÄÄâêôơưÄẰÌÌÌỊ̀à ảãáạẲằẳẵắẴẮẦẨẪẤá»áº·áº§áº©áº«áº¥áºÃ¨á»áº»áº½Ã©áº¹á»á»á» ếá»Ã¬á»á»áº¾á»Ä©Ãá»Ã²á»á»ÃµÃ³á»á»á»á»á»á»á»á»á»¡á»á»£Ã¹á»á»§Å©Ãºá»¥á»«á»á»¯á»©á»±á»³á»·á»¹Ã½á»µá»" 42147 }, 42148 "georgianacademy": { 42149 "type": "_sbcs", 42150 "chars": "ÂÂâÆââ¦â â¡Ëâ°Å â¹ÅÂÂÂÂâââââ¢ââËâ¢Å¡âºÅŸ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ááááááááááááááááá á¡á¢á£á¤á¥á¦á§á¨á©áªá«á¬áá®á¯á°á±á²á³á´áµá¶Ã§Ã¨Ã©ÃªÃ«Ã¬Ãîïðñòóôõö÷øùúûüýþÿ" 42151 }, 42152 "georgianps": { 42153 "type": "_sbcs", 42154 "chars": "ÂÂâÆââ¦â â¡Ëâ°Å â¹ÅÂÂÂÂâââââ¢ââËâ¢Å¡âºÅŸ ¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿áááááááá±ááááááá²áááá á¡á¢á³á£á¤á¥á¦á§á¨á©áªá«á¬áá®á´á¯á°áµÃ¦Ã§Ã¨Ã©ÃªÃ«Ã¬Ãîïðñòóôõö÷øùúûüýþÿ" 42155 }, 42156 "pt154": { 42157 "type": "_sbcs", 42158 "chars": "ÒÒÓ®Òââ¦Ò¶Ò®Ò²Ò¯Ò Ó¢Ò¢ÒÒºÒ¸Òâââââ¢ââÒ³Ò·Ò¡Ó£Ò£Òһҹ ÐÑÐÓ¨ÒҰ§Ð©Ó«¬ӯ®Ò°ұÐÑÒө¶·ÑâÓ»ÑÒªÒ«ÒÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐРСТУФХЦЧШЩЪЫЬÐЮЯабвгдежзийклмнопÑÑÑÑÑÑ ÑÑÑÑÑÑÑÑÑÑ" 42159 }, 42160 "viscii": { 42161 "type": "_sbcs", 42162 "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013á»¶\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dá»´\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~�ẠẮẰẶẤẦẨẬẼẸẾá»á»á»á»á»á»á»á»á»á»¢á»á»á»á»á»á»á»á»¦Å¨á»¤á»²Ãắằặấầẩáºáº½áº¹áº¿á»á»á» á»á»á»á»á»á» Æ á»á»á»á»á»°á»¨á»ªá»¬Æ¡á»Æ¯ÃÃÃÃẢÄẳẵÃÃÃẺÃÃĨỳÄứÃÃÃạỷừá»ÃÃỹỵÃỡưà áâãảÄữẫèéêẻìÃÄ©á»Äựòóôõá»á»á»¥Ã¹ÃºÅ©á»§Ã½á»£á»®" 42163 }, 42164 "iso646cn": { 42165 "type": "_sbcs", 42166 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#Â¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}â¾���������������������������������������������������������������������������������������������������������������������������������" 42167 }, 42168 "iso646jp": { 42169 "type": "_sbcs", 42170 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Â¥]^_`abcdefghijklmnopqrstuvwxyz{|}â¾���������������������������������������������������������������������������������������������������������������������������������" 42171 }, 42172 "hproman8": { 42173 "type": "_sbcs", 42174 "chars": " Â ÃÃÃÃÃÃôË˨ËÃÃâ¤Â¯Ãý°ÃçÃñ¡¿¤£¥§ÆÂ¢Ã¢ÃªÃ´Ã»Ã¡Ã©Ã³ÃºÃ èòùäëöüà îÃÃ̴̿æÃìÃÃÃ
vendor: 22,942 bytes, lines 42174-42760
42174ïÃÃÃÃãÃðÃÃÃÃÃõŠšÃŸÿÃþ·µ¶¾â¼½ªº«â »±�" 42175 }, 42176 "macintosh": { 42177 "type": "_sbcs", 42178 "chars": "Ãà ÃÃÃÃÃáà âäãåçéèêëÃìîïñóòôöõúùûüâ °¢£§â¢Â¶Ã®©â¢Â´Â¨â ÃÃâ±â¤â¥Â¥ÂµâââÏâ«ÂªÂºâ¦Ã¦Ã¸Â¿Â¡Â¬âÆââ«»â¦Â ÃÃÃÅÅââââââ÷âÿŸâ¤â¹âºï¬ï¬â¡Â·âââ°ÃÃÃÃÃÃÃÃÃÃÃ�ÃÃÃÃıË˯ËË˸ËËË" 42179 }, 42180 "ascii": { 42181 "type": "_sbcs", 42182 "chars": "��������������������������������������������������������������������������������������������������������������������������������" 42183 }, 42184 "tis620": { 42185 "type": "_sbcs", 42186 "chars": "���������������������������������à¸à¸à¸à¸à¸ à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸à¸ มยรฤลฦวศษสหฬà¸à¸®à¸¯à¸°à¸±à¸²à¸³à¸´à¸µà¸¶à¸·à¸¸à¸¹à¸ºï¿½ï¿½ï¿½ï¿½à¸¿à¹à¹à¹à¹à¹à¹ à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹à¹ï¿½ï¿½ï¿½ï¿½" 42187 } 42188} 42189 42190/***/ }), 42191/* 178 */ 42192/***/ (function(module, exports, __webpack_require__) { 42193 42194"use strict"; 42195 42196var Buffer = __webpack_require__(1).Buffer; 42197 42198// Multibyte codec. In this scheme, a character is represented by 1 or more bytes. 42199// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. 42200// To save memory and loading time, we read table files only when requested. 42201 42202exports._dbcs = DBCSCodec; 42203 42204var UNASSIGNED = -1, 42205 GB18030_CODE = -2, 42206 SEQ_START = -10, 42207 NODE_START = -1000, 42208 UNASSIGNED_NODE = new Array(0x100), 42209 DEF_CHAR = -1; 42210 42211for (var i = 0; i < 0x100; i++) 42212 UNASSIGNED_NODE[i] = UNASSIGNED; 42213 42214 42215// Class DBCSCodec reads and initializes mapping tables. 42216function DBCSCodec(codecOptions, iconv) { 42217 this.encodingName = codecOptions.encodingName; 42218 if (!codecOptions) 42219 throw new Error("DBCS codec is called without the data.") 42220 if (!codecOptions.table) 42221 throw new Error("Encoding '" + this.encodingName + "' has no data."); 42222 42223 // Load tables. 42224 var mappingTable = codecOptions.table(); 42225 42226 42227 // Decode tables: MBCS -> Unicode. 42228 42229 // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. 42230 // Trie root is decodeTables[0]. 42231 // Values: >= 0 -> unicode character code. can be > 0xFFFF 42232 // == UNASSIGNED -> unknown/unassigned sequence. 42233 // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. 42234 // <= NODE_START -> index of the next node in our trie to process next byte. 42235 // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. 42236 this.decodeTables = []; 42237 this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. 42238 42239 // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. 42240 this.decodeTableSeq = []; 42241 42242 // Actual mapping tables consist of chunks. Use them to fill up decode tables. 42243 for (var i = 0; i < mappingTable.length; i++) 42244 this._addDecodeChunk(mappingTable[i]); 42245 42246 this.defaultCharUnicode = iconv.defaultCharUnicode; 42247 42248 42249 // Encode tables: Unicode -> DBCS. 42250 42251 // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. 42252 // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. 42253 // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). 42254 // == UNASSIGNED -> no conversion found. Output a default char. 42255 // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. 42256 this.encodeTable = []; 42257 42258 // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of 42259 // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key 42260 // means end of sequence (needed when one sequence is a strict subsequence of another). 42261 // Objects are kept separately from encodeTable to increase performance. 42262 this.encodeTableSeq = []; 42263 42264 // Some chars can be decoded, but need not be encoded. 42265 var skipEncodeChars = {}; 42266 if (codecOptions.encodeSkipVals) 42267 for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { 42268 var val = codecOptions.encodeSkipVals[i]; 42269 if (typeof val === 'number') 42270 skipEncodeChars[val] = true; 42271 else 42272 for (var j = val.from; j <= val.to; j++) 42273 skipEncodeChars[j] = true; 42274 } 42275 42276 // Use decode trie to recursively fill out encode tables. 42277 this._fillEncodeTable(0, 0, skipEncodeChars); 42278 42279 // Add more encoding pairs when needed. 42280 if (codecOptions.encodeAdd) { 42281 for (var uChar in codecOptions.encodeAdd) 42282 if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) 42283 this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); 42284 } 42285 42286 this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; 42287 if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; 42288 if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); 42289 42290 42291 // Load & create GB18030 tables when needed. 42292 if (typeof codecOptions.gb18030 === 'function') { 42293 this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. 42294 42295 // Add GB18030 decode tables. 42296 var thirdByteNodeIdx = this.decodeTables.length; 42297 var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); 42298 42299 var fourthByteNodeIdx = this.decodeTables.length; 42300 var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); 42301 42302 for (var i = 0x81; i <= 0xFE; i++) { 42303 var secondByteNodeIdx = NODE_START - this.decodeTables[0][i]; 42304 var secondByteNode = this.decodeTables[secondByteNodeIdx]; 42305 for (var j = 0x30; j <= 0x39; j++) 42306 secondByteNode[j] = NODE_START - thirdByteNodeIdx; 42307 } 42308 for (var i = 0x81; i <= 0xFE; i++) 42309 thirdByteNode[i] = NODE_START - fourthByteNodeIdx; 42310 for (var i = 0x30; i <= 0x39; i++) 42311 fourthByteNode[i] = GB18030_CODE 42312 } 42313} 42314 42315DBCSCodec.prototype.encoder = DBCSEncoder; 42316DBCSCodec.prototype.decoder = DBCSDecoder; 42317 42318// Decoder helpers 42319DBCSCodec.prototype._getDecodeTrieNode = function(addr) { 42320 var bytes = []; 42321 for (; addr > 0; addr >>= 8) 42322 bytes.push(addr & 0xFF); 42323 if (bytes.length == 0) 42324 bytes.push(0); 42325 42326 var node = this.decodeTables[0]; 42327 for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. 42328 var val = node[bytes[i]]; 42329 42330 if (val == UNASSIGNED) { // Create new node. 42331 node[bytes[i]] = NODE_START - this.decodeTables.length; 42332 this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); 42333 } 42334 else if (val <= NODE_START) { // Existing node. 42335 node = this.decodeTables[NODE_START - val]; 42336 } 42337 else 42338 throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); 42339 } 42340 return node; 42341} 42342 42343 42344DBCSCodec.prototype._addDecodeChunk = function(chunk) { 42345 // First element of chunk is the hex mbcs code where we start. 42346 var curAddr = parseInt(chunk[0], 16); 42347 42348 // Choose the decoding node where we'll write our chars. 42349 var writeTable = this._getDecodeTrieNode(curAddr); 42350 curAddr = curAddr & 0xFF; 42351 42352 // Write all other elements of the chunk to the table. 42353 for (var k = 1; k < chunk.length; k++) { 42354 var part = chunk[k]; 42355 if (typeof part === "string") { // String, write as-is. 42356 for (var l = 0; l < part.length;) { 42357 var code = part.charCodeAt(l++); 42358 if (0xD800 <= code && code < 0xDC00) { // Decode surrogate 42359 var codeTrail = part.charCodeAt(l++); 42360 if (0xDC00 <= codeTrail && codeTrail < 0xE000) 42361 writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); 42362 else 42363 throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); 42364 } 42365 else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) 42366 var len = 0xFFF - code + 2; 42367 var seq = []; 42368 for (var m = 0; m < len; m++) 42369 seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. 42370 42371 writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; 42372 this.decodeTableSeq.push(seq); 42373 } 42374 else 42375 writeTable[curAddr++] = code; // Basic char 42376 } 42377 } 42378 else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. 42379 var charCode = writeTable[curAddr - 1] + 1; 42380 for (var l = 0; l < part; l++) 42381 writeTable[curAddr++] = charCode++; 42382 } 42383 else 42384 throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); 42385 } 42386 if (curAddr > 0xFF) 42387 throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); 42388} 42389 42390// Encoder helpers 42391DBCSCodec.prototype._getEncodeBucket = function(uCode) { 42392 var high = uCode >> 8; // This could be > 0xFF because of astral characters. 42393 if (this.encodeTable[high] === undefined) 42394 this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. 42395 return this.encodeTable[high]; 42396} 42397 42398DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { 42399 var bucket = this._getEncodeBucket(uCode); 42400 var low = uCode & 0xFF; 42401 if (bucket[low] <= SEQ_START) 42402 this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. 42403 else if (bucket[low] == UNASSIGNED) 42404 bucket[low] = dbcsCode; 42405} 42406 42407DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { 42408 42409 // Get the root of character tree according to first character of the sequence. 42410 var uCode = seq[0]; 42411 var bucket = this._getEncodeBucket(uCode); 42412 var low = uCode & 0xFF; 42413 42414 var node; 42415 if (bucket[low] <= SEQ_START) { 42416 // There's already a sequence with - use it. 42417 node = this.encodeTableSeq[SEQ_START-bucket[low]]; 42418 } 42419 else { 42420 // There was no sequence object - allocate a new one. 42421 node = {}; 42422 if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. 42423 bucket[low] = SEQ_START - this.encodeTableSeq.length; 42424 this.encodeTableSeq.push(node); 42425 } 42426 42427 // Traverse the character tree, allocating new nodes as needed. 42428 for (var j = 1; j < seq.length-1; j++) { 42429 var oldVal = node[uCode]; 42430 if (typeof oldVal === 'object') 42431 node = oldVal; 42432 else { 42433 node = node[uCode] = {} 42434 if (oldVal !== undefined) 42435 node[DEF_CHAR] = oldVal 42436 } 42437 } 42438 42439 // Set the leaf to given dbcsCode. 42440 uCode = seq[seq.length-1]; 42441 node[uCode] = dbcsCode; 42442} 42443 42444DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { 42445 var node = this.decodeTables[nodeIdx]; 42446 for (var i = 0; i < 0x100; i++) { 42447 var uCode = node[i]; 42448 var mbCode = prefix + i; 42449 if (skipEncodeChars[mbCode]) 42450 continue; 42451 42452 if (uCode >= 0) 42453 this._setEncodeChar(uCode, mbCode); 42454 else if (uCode <= NODE_START) 42455 this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); 42456 else if (uCode <= SEQ_START) 42457 this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); 42458 } 42459} 42460 42461 42462 42463// == Encoder ================================================================== 42464 42465function DBCSEncoder(options, codec) { 42466 // Encoder state 42467 this.leadSurrogate = -1; 42468 this.seqObj = undefined; 42469 42470 // Static data 42471 this.encodeTable = codec.encodeTable; 42472 this.encodeTableSeq = codec.encodeTableSeq; 42473 this.defaultCharSingleByte = codec.defCharSB; 42474 this.gb18030 = codec.gb18030; 42475} 42476 42477DBCSEncoder.prototype.write = function(str) { 42478 var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)), 42479 leadSurrogate = this.leadSurrogate, 42480 seqObj = this.seqObj, nextChar = -1, 42481 i = 0, j = 0; 42482 42483 while (true) { 42484 // 0. Get next character. 42485 if (nextChar === -1) { 42486 if (i == str.length) break; 42487 var uCode = str.charCodeAt(i++); 42488 } 42489 else { 42490 var uCode = nextChar; 42491 nextChar = -1; 42492 } 42493 42494 // 1. Handle surrogates. 42495 if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. 42496 if (uCode < 0xDC00) { // We've got lead surrogate. 42497 if (leadSurrogate === -1) { 42498 leadSurrogate = uCode; 42499 continue; 42500 } else { 42501 leadSurrogate = uCode; 42502 // Double lead surrogate found. 42503 uCode = UNASSIGNED; 42504 } 42505 } else { // We've got trail surrogate. 42506 if (leadSurrogate !== -1) { 42507 uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); 42508 leadSurrogate = -1; 42509 } else { 42510 // Incomplete surrogate pair - only trail surrogate found. 42511 uCode = UNASSIGNED; 42512 } 42513 42514 } 42515 } 42516 else if (leadSurrogate !== -1) { 42517 // Incomplete surrogate pair - only lead surrogate found. 42518 nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. 42519 leadSurrogate = -1; 42520 } 42521 42522 // 2. Convert uCode character. 42523 var dbcsCode = UNASSIGNED; 42524 if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence 42525 var resCode = seqObj[uCode]; 42526 if (typeof resCode === 'object') { // Sequence continues. 42527 seqObj = resCode; 42528 continue; 42529 42530 } else if (typeof resCode == 'number') { // Sequence finished. Write it. 42531 dbcsCode = resCode; 42532 42533 } else if (resCode == undefined) { // Current character is not part of the sequence. 42534 42535 // Try default character for this sequence 42536 resCode = seqObj[DEF_CHAR]; 42537 if (resCode !== undefined) { 42538 dbcsCode = resCode; // Found. Write it. 42539 nextChar = uCode; // Current character will be written too in the next iteration. 42540 42541 } else { 42542 // TODO: What if we have no default? (resCode == undefined) 42543 // Then, we should write first char of the sequence as-is and try the rest recursively. 42544 // Didn't do it for now because no encoding has this situation yet. 42545 // Currently, just skip the sequence and write current char. 42546 } 42547 } 42548 seqObj = undefined; 42549 } 42550 else if (uCode >= 0) { // Regular character 42551 var subtable = this.encodeTable[uCode >> 8]; 42552 if (subtable !== undefined) 42553 dbcsCode = subtable[uCode & 0xFF]; 42554 42555 if (dbcsCode <= SEQ_START) { // Sequence start 42556 seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; 42557 continue; 42558 } 42559 42560 if (dbcsCode == UNASSIGNED && this.gb18030) { 42561 // Use GB18030 algorithm to find character(s) to write. 42562 var idx = findIdx(this.gb18030.uChars, uCode); 42563 if (idx != -1) { 42564 var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); 42565 newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; 42566 newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; 42567 newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; 42568 newBuf[j++] = 0x30 + dbcsCode; 42569 continue; 42570 } 42571 } 42572 } 42573 42574 // 3. Write dbcsCode character. 42575 if (dbcsCode === UNASSIGNED) 42576 dbcsCode = this.defaultCharSingleByte; 42577 42578 if (dbcsCode < 0x100) { 42579 newBuf[j++] = dbcsCode; 42580 } 42581 else if (dbcsCode < 0x10000) { 42582 newBuf[j++] = dbcsCode >> 8; // high byte 42583 newBuf[j++] = dbcsCode & 0xFF; // low byte 42584 } 42585 else { 42586 newBuf[j++] = dbcsCode >> 16; 42587 newBuf[j++] = (dbcsCode >> 8) & 0xFF; 42588 newBuf[j++] = dbcsCode & 0xFF; 42589 } 42590 } 42591 42592 this.seqObj = seqObj; 42593 this.leadSurrogate = leadSurrogate; 42594 return newBuf.slice(0, j); 42595} 42596 42597DBCSEncoder.prototype.end = function() { 42598 if (this.leadSurrogate === -1 && this.seqObj === undefined) 42599 return; // All clean. Most often case. 42600 42601 var newBuf = new Buffer(10), j = 0; 42602 42603 if (this.seqObj) { // We're in the sequence. 42604 var dbcsCode = this.seqObj[DEF_CHAR]; 42605 if (dbcsCode !== undefined) { // Write beginning of the sequence. 42606 if (dbcsCode < 0x100) { 42607 newBuf[j++] = dbcsCode; 42608 } 42609 else { 42610 newBuf[j++] = dbcsCode >> 8; // high byte 42611 newBuf[j++] = dbcsCode & 0xFF; // low byte 42612 } 42613 } else { 42614 // See todo above. 42615 } 42616 this.seqObj = undefined; 42617 } 42618 42619 if (this.leadSurrogate !== -1) { 42620 // Incomplete surrogate pair - only lead surrogate found. 42621 newBuf[j++] = this.defaultCharSingleByte; 42622 this.leadSurrogate = -1; 42623 } 42624 42625 return newBuf.slice(0, j); 42626} 42627 42628// Export for testing 42629DBCSEncoder.prototype.findIdx = findIdx; 42630 42631 42632// == Decoder ================================================================== 42633 42634function DBCSDecoder(options, codec) { 42635 // Decoder state 42636 this.nodeIdx = 0; 42637 this.prevBuf = new Buffer(0); 42638 42639 // Static data 42640 this.decodeTables = codec.decodeTables; 42641 this.decodeTableSeq = codec.decodeTableSeq; 42642 this.defaultCharUnicode = codec.defaultCharUnicode; 42643 this.gb18030 = codec.gb18030; 42644} 42645 42646DBCSDecoder.prototype.write = function(buf) { 42647 var newBuf = new Buffer(buf.length*2), 42648 nodeIdx = this.nodeIdx, 42649 prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, 42650 seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence. 42651 uCode; 42652 42653 if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later. 42654 prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]); 42655 42656 for (var i = 0, j = 0; i < buf.length; i++) { 42657 var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset]; 42658 42659 // Lookup in current trie node. 42660 var uCode = this.decodeTables[nodeIdx][curByte]; 42661 42662 if (uCode >= 0) { 42663 // Normal character, just use it. 42664 } 42665 else if (uCode === UNASSIGNED) { // Unknown char. 42666 // TODO: Callback with seq. 42667 //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); 42668 i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle). 42669 uCode = this.defaultCharUnicode.charCodeAt(0); 42670 } 42671 else if (uCode === GB18030_CODE) { 42672 var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset); 42673 var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30); 42674 var idx = findIdx(this.gb18030.gbChars, ptr); 42675 uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; 42676 } 42677 else if (uCode <= NODE_START) { // Go to next trie node. 42678 nodeIdx = NODE_START - uCode; 42679 continue; 42680 } 42681 else if (uCode <= SEQ_START) { // Output a sequence of chars. 42682 var seq = this.decodeTableSeq[SEQ_START - uCode]; 42683 for (var k = 0; k < seq.length - 1; k++) { 42684 uCode = seq[k]; 42685 newBuf[j++] = uCode & 0xFF; 42686 newBuf[j++] = uCode >> 8; 42687 } 42688 uCode = seq[seq.length-1]; 42689 } 42690 else 42691 throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); 42692 42693 // Write the character to buffer, handling higher planes using surrogate pair. 42694 if (uCode > 0xFFFF) { 42695 uCode -= 0x10000; 42696 var uCodeLead = 0xD800 + Math.floor(uCode / 0x400); 42697 newBuf[j++] = uCodeLead & 0xFF; 42698 newBuf[j++] = uCodeLead >> 8; 42699 42700 uCode = 0xDC00 + uCode % 0x400; 42701 } 42702 newBuf[j++] = uCode & 0xFF; 42703 newBuf[j++] = uCode >> 8; 42704 42705 // Reset trie node. 42706 nodeIdx = 0; seqStart = i+1; 42707 } 42708 42709 this.nodeIdx = nodeIdx; 42710 this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); 42711 return newBuf.slice(0, j).toString('ucs2'); 42712} 42713 42714DBCSDecoder.prototype.end = function() { 42715 var ret = ''; 42716 42717 // Try to parse all remaining chars. 42718 while (this.prevBuf.length > 0) { 42719 // Skip 1 character in the buffer. 42720 ret += this.defaultCharUnicode; 42721 var buf = this.prevBuf.slice(1); 42722 42723 // Parse remaining as usual. 42724 this.prevBuf = new Buffer(0); 42725 this.nodeIdx = 0; 42726 if (buf.length > 0) 42727 ret += this.write(buf); 42728 } 42729 42730 this.nodeIdx = 0; 42731 return ret; 42732} 42733 42734// Binary search for GB18030. Returns largest i such that table[i] <= val. 42735function findIdx(table, val) { 42736 if (table[0] > val) 42737 return -1; 42738 42739 var l = 0, r = table.length; 42740 while (l < r-1) { // always table[l] <= val < table[r] 42741 var mid = l + Math.floor((r-l+1)/2); 42742 if (table[mid] <= val) 42743 l = mid; 42744 else 42745 r = mid; 42746 } 42747 return l; 42748} 42749 42750 42751 42752/***/ }), 42753/* 179 */ 42754/***/ (function(module, exports, __webpack_require__) { 42755 42756"use strict"; 42757 42758 42759// Description of supported double byte encodings and aliases. 42760// Tables are not require()-d until they are needed to speed up library load.
42761// require()-s are direct to support Browserify. 42762 42763module.exports = { 42764 42765 // == Japanese/ShiftJIS ==================================================== 42766 // All japanese encodings are based on JIS X set of standards: 42767 // JIS X 0201 - Single-byte encoding of ASCII + Â¥ + Kana chars at 0xA1-0xDF. 42768 // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. 42769 // Has several variations in 1978, 1983, 1990 and 1997. 42770 // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. 42771 // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. 42772 // 2 planes, first is superset of 0208, second - revised 0212. 42773 // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) 42774 42775 // Byte encodings are: 42776 // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte 42777 // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. 42778 // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. 42779 // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. 42780 // 0x00-0x7F - lower part of 0201 42781 // 0x8E, 0xA1-0xDF - upper part of 0201 42782 // (0xA1-0xFE)x2 - 0208 plane (94x94). 42783 // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). 42784 // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. 42785 // Used as-is in ISO2022 family. 42786 // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, 42787 // 0201-1976 Roman, 0208-1978, 0208-1983. 42788 // * ISO2022-JP-1: Adds esc seq for 0212-1990. 42789 // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. 42790 // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. 42791 // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. 42792 // 42793 // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. 42794 // 42795 // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html 42796 42797 'shiftjis': { 42798 type: '_dbcs', 42799 table: function() { return __webpack_require__(180) }, 42800 encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, 42801 encodeSkipVals: [{from: 0xED40, to: 0xF940}], 42802 }, 42803 'csshiftjis': 'shiftjis', 42804 'mskanji': 'shiftjis', 42805 'sjis': 'shiftjis', 42806 'windows31j': 'shiftjis', 42807 'ms31j': 'shiftjis', 42808 'xsjis': 'shiftjis', 42809 'windows932': 'shiftjis', 42810 'ms932': 'shiftjis', 42811 '932': 'shiftjis', 42812 'cp932': 'shiftjis', 42813 42814 'eucjp': { 42815 type: '_dbcs', 42816 table: function() { return __webpack_require__(181) }, 42817 encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, 42818 }, 42819 42820 // TODO: KDDI extension to Shift_JIS 42821 // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. 42822 // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. 42823 42824 42825 // == Chinese/GBK ========================================================== 42826 // http://en.wikipedia.org/wiki/GBK 42827 // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder 42828 42829 // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 42830 'gb2312': 'cp936', 42831 'gb231280': 'cp936', 42832 'gb23121980': 'cp936', 42833 'csgb2312': 'cp936', 42834 'csiso58gb231280': 'cp936', 42835 'euccn': 'cp936', 42836 42837 // Microsoft's CP936 is a subset and approximation of GBK. 42838 'windows936': 'cp936', 42839 'ms936': 'cp936', 42840 '936': 'cp936', 42841 'cp936': { 42842 type: '_dbcs', 42843 table: function() { return __webpack_require__(53) }, 42844 }, 42845 42846 // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. 42847 'gbk': { 42848 type: '_dbcs', 42849 table: function() { return __webpack_require__(53).concat(__webpack_require__(91)) }, 42850 }, 42851 'xgbk': 'gbk', 42852 'isoir58': 'gbk', 42853 42854 // GB18030 is an algorithmic extension of GBK. 42855 // Main source: https://www.w3.org/TR/encoding/#gbk-encoder 42856 // http://icu-project.org/docs/papers/gb18030.html 42857 // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml 42858 // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 42859 'gb18030': { 42860 type: '_dbcs', 42861 table: function() { return __webpack_require__(53).concat(__webpack_require__(91)) }, 42862 gb18030: function() { return __webpack_require__(182) }, 42863 encodeSkipVals: [0x80], 42864 encodeAdd: {'â¬': 0xA2E3}, 42865 }, 42866 42867 'chinese': 'gb18030', 42868 42869 42870 // == Korean =============================================================== 42871 // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. 42872 'windows949': 'cp949', 42873 'ms949': 'cp949', 42874 '949': 'cp949', 42875 'cp949': { 42876 type: '_dbcs', 42877 table: function() { return __webpack_require__(183) }, 42878 }, 42879 42880 'cseuckr': 'cp949', 42881 'csksc56011987': 'cp949', 42882 'euckr': 'cp949', 42883 'isoir149': 'cp949', 42884 'korean': 'cp949', 42885 'ksc56011987': 'cp949', 42886 'ksc56011989': 'cp949', 42887 'ksc5601': 'cp949', 42888 42889 42890 // == Big5/Taiwan/Hong Kong ================================================ 42891 // There are lots of tables for Big5 and cp950. Please see the following links for history: 42892 // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html 42893 // Variations, in roughly number of defined chars: 42894 // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT 42895 // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ 42896 // * Big5-2003 (Taiwan standard) almost superset of cp950. 42897 // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. 42898 // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. 42899 // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. 42900 // Plus, it has 4 combining sequences. 42901 // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 42902 // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. 42903 // Implementations are not consistent within browsers; sometimes labeled as just big5. 42904 // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. 42905 // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
42906 // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. 42907 // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt 42908 // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt 42909 // 42910 // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder 42911 // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. 42912 42913 'windows950': 'cp950', 42914 'ms950': 'cp950', 42915 '950': 'cp950', 42916 'cp950': { 42917 type: '_dbcs', 42918 table: function() { return __webpack_require__(92) }, 42919 }, 42920 42921 // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. 42922 'big5': 'big5hkscs', 42923 'big5hkscs': { 42924 type: '_dbcs', 42925 table: function() { return __webpack_require__(92).concat(__webpack_require__(184)) }, 42926 encodeSkipVals: [0xa2cc], 42927 }, 42928 42929 'cnbig5': 'big5hkscs', 42930 'csbig5': 'big5hkscs', 42931 'xxbig5': 'big5hkscs', 42932}; 42933 42934 42935/***/ }), 42936/* 180 */ 42937/***/ (function(module, exports) { 42938 42939module.exports = [["0","\u000
vendor: 23,645 bytes, line 42939
429390",128],["a1","。",62],["8140","ãããï¼ï¼ã»ï¼ï¼ï¼ï¼ãã´ï½Â¨ï¼¾ï¿£ï¼¿ã½ã¾ãããä»ã
ããã¼ââï¼ï¼¼ï½â¥ï½â¦â¥ââââï¼ï¼ãã[]ï½ï½ã",9,"ï¼ï¼Â±Ã"],["8180","÷ï¼â ï¼ï¼â¦â§ââ´ââ°â²â³âï¿¥ï¼ï¿ ï¿¡ï¼
ï¼ï¼ï¼ï¼ §ââ
ââââââ¡â â³â²â½â¼â»ãââââã"],["81b8","âââââââªâ©"],["81c8","â§â¨ï¿¢ââââ"],["81da","â â¥ââââ¡ââªâ«ââ½ââµâ«â¬"],["81f0","â«â°â¯ââªâ â¡Â¶"],["81fc","â¯"],["824f","ï¼",9],["8260","A",25],["8281","ï½",25],["829f","ã",82],["8340","ã¡",62],["8380","ã ",22],["839f","Î",16,"Σ",6],["83bf","α",16,"Ï",6],["8440","Ð",5,"ÐÐ",25],["8470","а",5,"Ñж",7],["8480","о",17],["849f","ââââââââ¬â¤â´â¼âââââââ£â³â«â»ââ â¯â¨â·â¿ââ°â¥â¸â"],["8740","â ",19,"â
",9],["875f","ããã¢ããã§ãã¶ãããã¦ã£ã«ãã»ããããããã¡"],["877e","ã»"],["8780","ããâãâ¡ã¤",4,"ã±ã²ã¹ã¾ã½ã¼ââ¡â«â®âââ¥â ââ¿âµâ©âª"],["889f","äºåå¨é¿åææ¨å§¶é¢èµèç©æªæ¡æ¸¥æè¦è¦é¯µæ¢å§æ¡æ±å®å§è»é£´çµ¢ç¶¾é®æç²è¢·å®åºµæææ¡ééæä»¥ä¼ä½ä¾åå²å¤·å§å¨å°æææ
°ææ¤
çºçç°ç§»ç¶ç·¯èèè¡£è¬ééºå»äºäº¥åè²é磯ä¸å£±æº¢é¸ç¨²è¨èé°¯å
å°å½å¡å å§»å¼é£²æ·«è¤è"],["8940","é¢é°é é»åå³å®çç¾½è¿é¨å¯éµçªºä¸ç¢è¼æ¸¦å忬è鰻姥婿µ¦çéåäºéé²èé¤å¡å¶å¬°å½±æ æ³æ 永泳洩ççç©é ´è±è¡è© éæ¶²ç«çé§
æ¦è¬è¶é²æ¦åå"],["8980","åå °å¥å®´å»¶æ¨æ©æ´æ²¿æ¼ççç
çç¿ç¸è¶èèé éé´å¡©æ¼æ±ç¥å¹å¤®å¥¥å¾å¿æ¼æºæ¨ªæ¬§æ®´çç¿è¥é´¬é´é»å²¡æ²è»å屿¶èæ¡¶ç¡ä¹ä¿ºå¸æ©æ¸©ç©é³ä¸åä»®ä½ä¼½ä¾¡ä½³å å¯åå¤å«å®¶å¯¡ç§æææ¶ææ²³ç«çç¦ç¦¾ç¨¼ç®è±èèè·è¯èè¦èª²å©è²¨è¿¦ééèä¿å³¨æçç»è¥è½è¾è³é
é¤é§ä»ä¼è§£åå¡å£å»»å¿«æªææ¢ææææ¹"],["8a40","éæ¦æ¢°æµ·ç°çççµµè¥è¹ééè²å±å¾å¤å³å®³å´æ
¨æ¦æ¶¯ç¢èè¡è©²é§éª¸æµ¬é¦¨è壿¿èéååå廿¡æ¹æ ¼æ ¸æ®»ç²ç¢ºç©«è¦è§èµ«è¼éé£éé©å¦å²³æ¥½é¡é¡æç¬ 樫"],["8a80","æ©¿æ¢¶é°æ½å²åæ°æ¬æ´»æ¸æ»èè¤è½ä¸é°¹å¶æ¤æ¨ºéæ ªå
ç«è²ééåé´¨æ ¢è
è±ç²¥åè
ç¦ä¹¾ä¾å å¯ååå§å·»åå ªå§¦å®å®å¯å¹²å¹¹æ£ææ
£æ¾ææ¢ææ¡æ£ºæ¬¾ææ±æ¼¢æ¾æ½
ç°çç£ç竿管簡緩缶翰èè¦è観è«è²«ééééé¢é¥é館è丸å«å²¸å·ç©çç¼å²©ç¿«è´éé é¡é¡ä¼ä¼å±åå¨åºå¥å¬å¯å²å¸å¹¾å¿æ®æºææ¢ææ£æ£"],["8b40","æ©å¸°æ¯
æ°æ±½ç¿ç¥å£ç¨ç´å¾½è¦è¨è²´èµ·è»è¼é£¢é¨é¬¼äºå½åå¦å®æ¯ææ¬æ¬ºç çç¥ç¾©è»èª¼è°æ¬èé åå嫿¡æ©è©°ç §æµé»å´å®¢èèéä¸ä¹
ä»ä¼åå¸å®®å¼æ¥æ"],["8b80","æ½æ±æ±²æ³£ç¸ç究窮ç¬ç´ç³¾çµ¦æ§çå»å±
å·¨ææ ææ¸ è許è·é¸æ¼ç¦¦é亨享京ä¾ä¾ åå
ç«¶å
±å¶åå¡å¿å«å¬å¢å³¡å¼·å½æ¯æææææ©æ³ççç¯è¸è
èèé·é¡é¿é¥é©ä»°åå°ææ¥å±æ²æ¥µçæ¡ç²å
å¤å巾馿¤æ¬£æ¬½ç´ç¦ç¦½çç·è¹èè¡¿è¥è¬¹è¿éåéä¹å¶å¥åºççç©è¦èº¯é§é§é§å
·æèå°ç©ºå¶å¯éé
串æ«é§å±å±"],["8c40","æçªæ²é´è½¡çªªçéç²æ ç¹°æ¡é¬å²åè«è¨ç¾¤è»é¡å¦è¢ç¥ä¿å¾åå
ååçªåå¥å½¢å¾æµæ
¶æ
§æ©æ²æºæ¬æ¯æ¡æ¸ç¦ç¨½ç³»çµç¶ç¹ç½«èèèè¨è©£è¦è»½é é¶è¸è¿é¯¨"],["8c80","åæææ¿éæ¡åæ¬ æ±ºæ½ç©´çµè¡è¨£æä»¶å¹å¦å¥å
¼å¸å£å§åå
å«å»ºæ²æ¸æ³æ²æ¤æ¨©ç½ç¬ç®ç 硯絹çè©è¦è¬è³¢è»é£éµéºé¡é¨é¹¸å
åå³å¹»å¼¦æ¸æºçç¾çµè·è¨è«ºéä¹åå¤å¼åºå§å¤å·±åº«å¼§æ¸æ
æ¯æ¹çç³è¢´è¡è¡è°èèªè·¨é·éé¡§é¼äºäºä¼ååå¾å¨¯å¾å¾¡ææ¢§æªçç¢èªèª¤è·éä¹é¯äº¤ä½¼ä¾¯ååå
å
¬åå¹å¾åå£å"],["8d40","åååå¢å¥½ååå®å·¥å·§å··å¹¸åºåºåº·å¼ææ
æææ§æ»æææ´ææ ¡æ¢æ§æ±æ´ªæµ©æ¸¯æºç²çç¡¬ç¨¿ç³ ç´
ç´çµç¶±èèè¯è±è
èèªèè¡è¡¡è¬è²¢è³¼éé
µé±ç ¿é¼é¤é"],["8d80","é
é¦é«é´»åå«å·å壿·æ¿ 豪è½éº¹å
å»åå½ç©é
·éµ é»çæ¼è
°ç忽æéª¨çè¾¼æ¤é ä»å°å¤å¢¾å©æ¨ææææ ¹æ¢±æ··çç´ºè®éäºä½åååµ¯å·¦å·®æ»æ²ç³ç è©éè£å座æ«åµå¬åæåå¡å¦»å®°å½©ææ¡æ ½æ³æ¸ç½éçç ç ¦ç¥æç´°èè£è¼éå¤å¨æç½ªè²¡å´åéªå ºæ¦è´å²å´å¼ç¢é·ºä½ååæ¾æ¨ææµçªçç´¢é¯æ¡é®ç¬¹ååå·"],["8e40","坿¶æ®æ¦ææ®ºè©éç靿éé®«ç¿æä¸ååå±±æ¨ææ£æ¡ç¦çç£ç®çºèè®è³é
¸é¤æ¬æ«æ®ä»ä»ä¼ºä½¿åºå¸å²å£å士å§å§å§¿åå±å¸å¸«å¿æææ¯åæ¯æ½æ¨ææ¢"],["8e80","æ»æ°ç
ç¥ç§ç³¸ç´ç´«è¢èè³è¦è©è©©è©¦èªè«®è³è³é飼æ¯äºä¼¼ä¾å
å寺æ
æææ¬¡æ»æ²»ç¾ç½çç£ç¤ºèè³èªèè¾æ±é¹¿å¼è鴫竺軸å®é«ä¸å±å·å¤±å«å®¤ææ¹¿æ¼ç¾è³ªå®èç¯ å²æ´è屡èç¸èåå°æ¨èµ¦æç
®ç¤¾ç´è
è¬è»é®èéªååºå°ºæç¼çµé
éé«è¥å¯å¼±æ¹ä¸»åå®ææ±æ®ç©ç 種è
«è¶£é
é¦åååªå¯¿ææ¨¹ç¶¬éååå¨"],["8f40","å®å°±å·ä¿®ææ¾æ´²ç§ç§çµç¹ç¿èèèè¡è¥²è®è¹´è¼¯é±é
é
¬ééä»ä½å
åå¾æææ±æ¸ç£ç¸¦ééåå¤å®¿æ·ç¥ç¸®ç²å¡¾çåºè¡è¿°ä¿å³»æ¥ç¬ç«£èé§¿åå¾ªæ¬æ¥¯æ®æ·³"],["8f80","æºæ½¤ç¾ç´å·¡éµéé å¦åææææ¸åº¶ç·ç½²æ¸è¯è·è«¸å©å女åºå¾æé¤é¤å·ååå åå¬å¨åå±å奨妾娼宵å°å°å°å°åºåºå» å½°æ¿ææææ·ææææ¶æ¾æ¢¢æ¨æ¨µæ²¼æ¶æ¸æ¹ç¼ç¦ç
§ççç¡ç¤ç¥¥ç§°ç« ç¬ç²§ç´¹èèèèè¡è£³è¨è¨¼è©è©³è±¡è³é¤é¦é¾éééä¸ä¸ä¸ä¹åå°åå ´å£å¬¢å¸¸æ
æ¾æ¡ææµç¶ç³ç©£è¸è²é¸é å±å´é£¾"],["9040","ææ¤æ®çç¹è·è²è§¦é£è辱尻伸信侵åå¨ å¯å¯©å¿æ
æ¯æ°ææ£®æ¦æµ¸æ·±ç³ç¹çç¥ç§¦ç´³è£è¯èªè¦ªè¨ºèº«è¾é²éé人ä»å塵壬å°çå°½è
è¨è¿
é£é笥è«é é
¢å³å¨"],["9080","éå¹åå¸¥æ¨æ°´çç¡ç²ç¿ è¡°éé
éééçé«å´åµ©æ°æ¢è¶¨éæ®ææ¤è
é éè£¾æ¾æºå¯¸ä¸ç¬çæ¯åå¶å¢å§å¾æ§ææ¿æ´ææ´æ£²æ æ£æ¸
ç²ççç²¾èå£°è£½è¥¿èª èªè«ééééæç¨èé»å¸æææ¥ææç³ç©ç±ç¸¾è責赤跡è¹ç¢©åææ¥ææè¨çªç¯èª¬éªçµ¶èèä»å
åå 宣å°å°å·æ¦ææ°æ æ ´æ³æµ
æ´ææ½ç
ç
½æç©¿ç®ç·"],["9140","ç¹ç¾¨è
ºèè¹è¦è©®è³è·µé¸é·éééé®®ååæ¼¸ç¶å
¨ç¦
ç¹è³ç³åå¡å²¨æªæ¾æ½æ¥çççç¤ç¥ç§ç²ç´ çµè訴é»é¡é¼ å§åµåå¢ååªå£®å¥ç½å®å±¤åæ£æ³æææ¿æ»"],["9180","ææ©æ¹å·£æ§æ§½æ¼ç¥äºç©ç¸çªç³ç·ç¶è¡èèè¬è¼è»è£
èµ°ééééé¨å墿èèµè´é ä¿å´å峿¯æææ¸¬è¶³éä¿å±è³æç¶åè¢å
¶æåå«å°ææéä»å¤å¤ªæ±°è©å¾å å¦¥æ°ææèµæ¥éé§é¨¨ä½å 対è岱帯å¾
æ æ
æ´æ¿æ³°æ»èè
¿èè¢è²¸éé®éé»é¯ä»£å°å¤§ç¬¬éé¡é·¹æ»ç§ååå®
ææææ²¢æ¿¯ç¢è¨é¸æ¿è«¾è¸å§è¸åª"],["9240","å©ä½é辰奪è±å·½ç«ªè¾¿æ£è°·ç¸é±æ¨½èª°ä¸¹åå妿
æ¢æ¦ææ·¡æ¹çç端箪綻è½èèèªéå£å£å¼¾æææªæ®µç·è«å¤ç¥å°å¼æ¥æºæ± ç´ç¨ç½®è´èé
馳ç¯ç竹çè"],["9280","éç§©çªè¶å«¡çä¸ä»²å®å¿ æ½æ¼æ±æ³¨è«è¡·è¨»é
é³é§æ¨ç¦çªè§è貯ä¸å
åå寵å¸å¸³åºå¼å¼µå½«å¾´æ²ææ¢ææ½®ççºçºè´è¹è
¸è¶èª¿è«è¶
è·³éé·é é³¥å
æç´ææ²çè³é®é³æ´¥å¢æ¤æ§è¿½éçé塿 æ´æ§»ä½æ¼¬æè¾»è¦ç¶´é椿潰åªå£·å¬¬ç´¬çªåé£é¶´äºä½ååµåè²åå ¤å®å¸åºåºå»·å¼ææµæºææ¢¯æ±ç¢ç¦ç¨ç· èè¨è«¦è¹é"],["9340","é¸éé鼿³¥ææ¢æµæ»´çç¬é©é溺å²å¾¹æ¤è½è¿éå
¸å¡«å¤©å±åºæ·»çºç貼転é¡ç¹ä¼æ®¿æ¾±ç°é»å
åå µå¡å¦¬å± å¾æææ¸¡ç»èè³éé½éç ¥ç ºåªåº¦å奴æåå
å¬"],["9380","åååå¡å¡å¥å®å³¶å¶æ¼æææ±æ¡æ¢¼æ£çæ·æ¹¯æ¶ç¯çå½ç祷çççç³çµ±å°è£è©è¤è¨è¬è±è¸éééé¶é 騰éåååå å°æ§ææ´ç³ç«¥è´èéé
å³ é´å¿å¾å¾³æ¶ç¹ç£ç¦¿ç¯¤æ¯ç¬èªæ æ©¡å¸çªæ¤´å±é³¶è«å¯
é
çå¸å±¯ææ¦æ²è±éé åæéå¥é£å
ä¹åªèè¬çæºé楢馴ç¸ç·åæ¥ è»é£æ±äºå°¼å¼è¿©åè³èè¹å»¿æ¥ä¹³å
¥"],["9440","å¦å°¿é®ä»»å¦å¿èªæ¿¡ç¦°ç¥¢å¯§è±ç«ç±å¹´å¿µæ»æçç²ä¹å»¼ä¹å墿©æ¿ç´è½è³è¿è¾²è¦è¤å·´ææè¦æ·æ³¢æ´¾ç¶ç ´å©ç½µèé¦¬ä¿³å»ææææ¯ççèèºè¼©é
åå¹åªæ¢
"],["9480","楳ç
¤ç½è²·å£²è³ éªéè¿ç§¤ç§è©ä¼¯å¥åæææ³ç½ç®ç²è¶èè¿«ææ¼ çç¸è«é§éº¦å½ç®±ç¡²ç®¸èçæ«¨å¹¡èçç å
«é¢æºçºé髪ä¼ç½°æçé¥é³©åºå¡è¤é¼ä¼´å¤ååå叿¬ææ¿æ°¾æ±çç¯ççç¹è¬è©è²©ç¯éç
©é é£¯æ½æ©çªç¤ç£èè®åªåå¦å¦åºå½¼æ²ææ¹æ«ææ¯æ³ç²ç®ç¢ç§ç·ç½·è¥è¢«èª¹è²»é¿é飿¨ç°¸åå°¾å¾®ææ¯çµçç¾"],["9540","é¼»æç¨å¹çé«å½¦èè±èå¼¼å¿
ç¢ç鼿¡§å§«åªç´ç¾è¬¬ä¿µå½ªæ¨æ°·æ¼ç¢ç¥¨è¡¨è©è±¹å»æç
ç§èé¨é²èèé°åå½¬ææµçè²§è³é »æç¶ä¸ä»å 夫婦å¯å¨å¸åºææ¶æ·"],["9580","æ§æ®æµ®ç¶ç¬¦è
èèèè² è³¦èµ´ééä¾®æ«æ¦èè¡èªé¨å°æ¥é¢¨èºèä¼å¯å¾©å¹
æç¦è
¹è¤è¦æ·µå¼ææ²¸ä»ç©é®åå»å´å¢³æ¤æ®ç奮ç²ç³ç´é°æèä¸ä½µå
µå¡å¹£å¹³å¼æä¸¦è½ééç±³é å»å£ç碧å¥ç¥èç®åå¤çç¯ç·¨è¾ºè¿é便å娩å¼éä¿èéªåææ©ç«è£è¼ç©å墿
ææ®æ¯ç°¿è©å£ä¿¸å
åå ±å¥å®å³°å³¯å´©åºæ±æ§æ¾æ¹æ"],["9640","æ³æ³¡ç¹ç ²ç¸«èè³èè¬èè¤è¨ªè±é¦é飽鳳鵬ä¹äº¡ååå妨帽å¿å¿æ¿æ´æææ£åç´¡èªè¨è¬è²è²¿é¾é²å é ¬åååå¢¨æ²æ´ç§ç¦ç©é¦å没æ®å å¹å¥æ¬ç¿»å¡ç"],["9680","æ©ç£¨é麻åå¦¹æ§ææ¯å©æ§å¹èæé®ªæ¾é±æ¡äº¦ä¿£åæ¹æ«æ²«è¿ä¾ç¹éº¿ä¸æ
¢æºæ¼«è峿ªé
å·³ç®å²¬å¯èæ¹èç¨èå¦ç²æ°ç å夢ç¡ççé§éµ¡æ¤å©¿å¨å¥å彿çè¿·éé³´å§ªçæ»
å
æ£ç¶¿ç·¬é¢éººæ¸æ¨¡èå¦åæ¯çç²ç¶²èè岿¨é»ç®æ¢å¿é¤
å°¤æ»ç±¾è²°åæ¶ç´éåä¹å¶å¤çºè¶éå¼¥ç¢åå½¹ç´è¬è¨³èºéæ³è®éæææ²¹ç"],["9740","è«è¼¸å¯ä½åªååå®¥å¹½æ æææææ¹§æ¶ç¶ç·ç±ç¥è£èªéééµéèå¤äºä½ä¸èªè¼¿é åå¹¼å¦å®¹åº¸ææºæææ¥æ§æ´æº¶çç¨çª¯ç¾èèèè¦è¬¡è¸é¥é½é¤æ
¾ææ¬²"],["9780","æ²æµ´ç¿ç¿¼æ·ç¾
èºè£¸æ¥è±é ¼é·æ´çµ¡è½é
ªä¹±åµåµæ¬æ¿«èè覧å©åå±¥ææ¢¨ççç¢è£è£¡éé¢é¸å¾çç«èæ ç¥åæµæºççç¡«ç²éç«é¾ä¾¶æ
®æ
èäºäº®å両åå¯®ææ¢æ¶¼çççç¨ç³§è¯è«é¼ééµé åç·å«åææ·çç³è¨è¼ªé£é±éºç 塿¶ç´¯é¡ä»¤ä¼¶ä¾å·å±å¶ºæç²ç¤¼èé´é·é¶ééºé½¢æ¦æ´åå£çè£å»æææ¼£ç
簾練è¯"],["9840","è®é£é¬å靿«çè³è·¯é²å´å©å»å¼ææ¥¼æ¦æµªæ¼ç¢ç¼ç¯èè¾èéå
éºç¦èé²è«åå話æªè³èææ é·²äºäºé°è©«èè¨æ¤æ¹¾ç¢è
"],["989f","å¼ä¸ä¸ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹ä¹ä¹äºäº
豫äºèå¼äºäºäºäº 亢亰亳亶ä»ä»ä»ä»ä»ä»ä»ä»ä»ä»·ä¼ä½ä¼°ä½ä½ä½ä½ä½¶ä¾ä¾ä¾ä½»ä½©ä½°ä¾ä½¯ä¾ä¾åä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿¤ä¿¥åå¨ååªå¥å
ä¼ä¿¶å¡å©å¬ä¿¾ä¿¯ååååæåååååå¬å¸ååå
å´å²"],["9940","ååå³åååå¥åå£å®å¹åµåååååååå¡åºå·å¼å»å¿å
å
å
å
å
¢ç«¸å
©å
ªå
®ååååååååååå¤å¦å¢å©åªå«å³å±å²å°åµå½å
ååå èå©å"],["9980","å°åµå¾ååååå§åªå®å³å¹åååååååªå´å©å³å¿å½åååå±åå辨辧å¬åå¼åµååååå£å¦é£å å³åµå¸å¹ååç¸åååååå£å¯å±å³å¸ååå
ä¸ååååå©å®å¤å»å·ååå å¦å¥å®å°å¶åç°éåæ¼ç®å®å¨ååºåå½åå¬åå¼å®å¶å©ååååµååå±å·å°åå»åå¶ååååå¢å¸å¥å¬ååå¨"],["9a40","å«åå¤å¾å¼åå¥å¦ååå½å®ååºå¢å¹åå£åå®åå
ååå¸å³åååå¯ååå»å¾ååå®å¼åå©åå¨åå
åååå¤ååå·åå¾å½åå¹ååçå´å¶å²å¸"],["9a80","å«å¤å¯å¬åªåååå ååå¥å®å¶å´åå¼ååååååååå®å¹åå¿ååååååååååå¦å·å¸åå»ååå©ååå¡å¿ååå å³å¤åªå°åååååå åå£å å å å¡²å ¡å¡¢å¡å¡°æ¯å¡å ½å¡¹å¢
墹å¢å¢«å¢ºå£å¢»å¢¸å¢®å£
å£å£å£å£å£å£¥å£å£¤å£å£¯å£ºå£¹å£»å£¼å£½å¤å¤å¤å¤æ¢¦å¤¥å¤¬å¤å¤²å¤¸å¤¾ç«å¥å¥å¥å¥å¥å¥¢å¥ 奧奬奩"],["9b40","奸å¦å¦ä½ä¾«å¦£å¦²å§å§¨å§å¦å§å§å¨¥å¨å¨å¨å¨å¨å©å©¬å©å¨µå¨¶å©¢å©ªåªåª¼åª¾å«å«åª½å«£å«å«¦å«©å«å«ºå«»å¬å¬å¬å¬²å«å¬ªå¬¶å¬¾åå
åååååå¥å©å°å³åµå¸æåºå®"],["9b80","å®å®¦å®¸å¯å¯å¯å¯å¯å¯¤å¯¦å¯¢å¯å¯¥å¯«å¯°å¯¶å¯³å°
å°å°å°å°å° 尢尨尸尹å±å±å±å±å±å±å±å±¬å±®ä¹¢å±¶å±¹å²å²å²å¦å²«å²»å²¶å²¼å²·å³
å²¾å³å³å³©å³½å³ºå³å¶å³ªå´å´å´åµå´å´å´å´å´¢å´å´å´åµåµåµåµåµ¬åµ³åµ¶å¶å¶å¶å¶¢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·å·å·å·å·å·å·«å·²å·µå¸å¸å¸å¸å¸å¸¶å¸·å¹å¹å¹å¹å¹å¹å¹å¹¢å¹¤å¹å¹µå¹¶å¹ºéº¼å¹¿åº å»å»å»å»å»"],["9c40","å»å»£å»å»å»å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼å¼å½å½å¼å¼å¼å¼©å¼å¼¸å½å½å½å½å¼¯å½å½å½å½å½¡å½å½³å½·å¾å¾å½¿å¾å¾å¾å¾å¾å¾å¾å¾ 徨å¾å¾¼å¿å¿»å¿¤å¿¸å¿±å¿æ³å¿¿æ¡æ "],["9c80","æææ©ææ±æææ«æ¦ææºæææªæ·æææææ£ææ¤ææ¬æ«ææææ§ææææææææ§ææ¡æ¸æ ææ´å¿°æ½ææµææ
æææ¶æ·ææ´æºææ¡æ»æ±æææ
æ¾æ¨æ§æ
æ¿æ¼æ¬æ´æ½æ
æ
æ
³æ
·æ
æ
æ
æ
«æ
´æ
¯æ
¥æ
±æ
æ
æ
æ
µææææ¬æææææ«æ®ææææ·ææææºæç½¹ææ¦æ£æ¶æºæ´æ¿æ½æ¼æ¾æææææææ"],["9d40","ææ¡æªæ®æ°æ²æ³ææææ£ææ æ¨æ¼æææ¾æææææææææ»ææ¿ææææææææææææ®æ±æ§æææ¯æµææ¾æææææææ«æ¶æ£ææææµæ«"],["9d80","æ©æ¾æ©æææ£æææ¶æææ´æææ¦æ¶æææ¨ææ§æ¯æ¶ææªæææ¥æ©ææ¼æææ
ææ»æææ±æ§èæ æ¡æ¬æ£æ¯æ¬æ¶æ´æ²æºææ½æææ
æ¤æ£æ«æ´æµæ·æ¶æ¸çææææææææ²æ¸ææè®æææ«æ·æææææææææ æ¡æ±æ²æææ»æ³æµæ¶æ´ææææææææ¤æ§æ¨ææ¢æ°æææææææææ¹ææ¾æ¼"],["9e40","ææ¸æææ æ¿æ¦æ©æ°æµæ·ææææ¦æ§é¸æ®æ¿æ¶ææ¸æ·æææ ææ£æ¤ææ°æ©æ¼æªæææ¦æ¡æ
æ·æ¯æ´æ¬æ³æ©æ¸æ¤æææ¢æ®æ¹æææ§æªæ æ¡æ ©æ¡æ¡æ ²æ¡"],["9e80","æ¢³æ «æ¡æ¡£æ¡·æ¡¿æ¢æ¢æ¢æ¢æ¢æ¢æ¢æª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£æ¤æ£æ¤¢æ¤¦æ£¡æ¤æ£æ£æ£§æ£æ¤¶æ¤æ¤æ£æ££æ¤¥æ£¹æ£ æ£¯æ¤¨æ¤ªæ¤æ¤£æ¤¡æ£æ¥¹æ¥·æ¥æ¥¸æ¥«æ¥æ¥¾æ¥®æ¤¹æ¥´æ¤½æ¥æ¤°æ¥¡æ¥æ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§æ¦¾æ§å¯¨æ§æ§æ¦»æ§æ¦§æ¨®æ¦æ¦ æ¦æ¦æ¦´æ§æ§¨æ¨æ¨æ§¿æ¬æ§¹æ§²æ§§æ¨
æ¦±æ¨æ§æ¨æ§«æ¨æ¨æ«æ¨£æ¨æ©æ¨æ©²æ¨¶æ©¸æ©æ©¢æ©æ©¦æ©æ¨¸æ¨¢æªæªæª æªæª¢æª£"],["9f40","æªèæª»æ«æ«æª¸æª³æª¬æ«æ«æ«æªªæ«æ«ªæ«»æ¬
èæ«ºæ¬æ¬é¬±æ¬æ¬¸æ¬·çæ¬¹é£®æææææææææ¡æ¸æ¹æ¿æ®æ®æ®æ®æ®æ®æ®æ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯æ¯æ¯æ¯æ¯¬æ¯«æ¯³æ¯¯"],["9f80","éº¾æ°æ°æ°æ°æ°¤æ°£æ±æ±æ±¢æ±ªæ²æ²æ²æ²æ²æ±¾æ±¨æ±³æ²æ²æ³æ³±æ³æ²½æ³æ³
æ³æ²®æ²±æ²¾æ²ºæ³æ³¯æ³æ³ªæ´è¡æ´¶æ´«æ´½æ´¸æ´æ´µæ´³æ´æ´æµ£æ¶æµ¤æµæµ¹æµæ¶æ¶æ¿¤æ¶
æ·¹æ¸æ¸æ¶µæ·æ·¦æ¶¸æ·æ·¬æ·æ·æ·¨æ·æ·
æ·ºæ·æ·¤æ·æ·ªæ·®æ¸æ¹®æ¸®æ¸æ¹²æ¹æ¸¾æ¸£æ¹«æ¸«æ¹¶æ¹æ¸æ¹æ¸ºæ¹æ¸¤æ»¿æ¸æ¸¸æºæºªæºæ»æº·æ»æº½æº¯æ»æº²æ»æ»æºæº¥æ»æºæ½æ¼ç滬滸滾漿滲漱滯漲æ»"],["e040","æ¼¾æ¼æ»·æ¾æ½ºæ½¸æ¾æ¾æ½¯æ½æ¿³æ½æ¾æ½¼æ½æ¾æ¾æ¿æ½¦æ¾³æ¾£æ¾¡æ¾¤æ¾¹æ¿æ¾ªæ¿æ¿æ¿¬æ¿æ¿æ¿±æ¿®æ¿ççæ¿ºçççæ¿¾ççæ½´çççç°ç¾ç²çç£ççç¯ç±ç¬ç¸ç³ç®ççç"],["e080","ççç½ççç
¥ç
çç
¦ç
¢ç
ç
ç
¬çç»ççç¨ç¬çç¹ç¾ççççç ç¬ç§çµç¼ç¹ç¿çççç¨çç¬ç°ç²ç»ç¼ç¿ççççç´ç¾çççççç¢ç§ç¹ç²çççççç¢ç ç¡ç¹ç·åçççççç´ç¯ç©ç¥ç¾ççé»ççªç¨ç°ç¸çµç»çºçç³çç»çç¥ç®çç¢ç
ç¯ç¥ç¸ç²çºçç¿ççççç©ç°ç£çªç¶ç¾ççç§çççç±"],["e140","ç ç£ç§ç©ç®ç²ç°ç±ç¸ç·ççç
ççççççç¦ç¬ç¼çççççççç©ç¤ç§ç«çç¸ç¶ççç´ççççççç¥ç£çç³ççµç½ç¸ç¼ç±ççççç£çç¾ç¿"],["e180","ç¼çç°çºç²ç³ççççç§ç ç¡ç¢ç¤ç´ç°ç»çççççç¡ç¢ç¨ç©çªç§ç¬ç°ç²ç¶ç¸ç¼çççççççççç°ç´ç¸ç¹çºçççççç¡ç¥ç§çªè¯ç»çççç©ç¤çç¥ç¦çç·ç¸ççç¨ç«çç¥ç¿ç¾ç¹çççç çç°ç¶ç¹ç¿ç¼ç½ç»çççççç£ç®ç¼ç ç 礦ç 礪ç¡
ç¢ç¡´ç¢ç¡¼ç¢ç¢ç¢£ç¢µç¢ªç¢¯ç£ç£ç£ç£ç¢¾ç¢¼ç£
ç£ç£¬"],["e240","磧ç£ç£½ç£´ç¤ç¤ç¤ç¤ç¤¬ç¤«ç¥ç¥ ç¥ç¥ç¥ç¥ç¥ç¥ºç¥¿ç¦ç¦ç¦§é½ç¦ªç¦®ç¦³ç¦¹ç¦ºç§ç§ç§§ç§¬ç§¡ç§£ç¨ç¨ç¨ç¨ç¨ ç¨ç¦ç¨±ç¨»ç¨¾ç¨·ç©ç©ç©ç©¡ç©¢ç©©é¾ç©°ç©¹ç©½çªçªçªçªçªçª©ç«çª°"],["e280","窶ç«
ç«çª¿éç«ç«ç«ç«ç«ç«ç«ç«ç«ç«¡ç«¢ç«¦ç«ç«°ç¬ç¬ç¬ç¬ç¬³ç¬ç¬ç¬ç¬µç¬¨ç¬¶ççºç¬çç¬çç
çµç¥ç´ç§ç°ç±ç¬ç®ç®ç®ç®ç®ç®ç®ç®ç®ç®çç®ç¯ç¯ç¯ç¯ç®´ç¯ç¯ç¯©ç°ç°ç¯¦ç¯¥ç± ç°ç°ç°ç¯³ç¯·ç°ç°ç¯¶ç°£ç°§ç°ªç°ç°·ç°«ç°½ç±ç±ç±ç±ç±ç±ç±ç±ç±¤ç±ç±¥ç±¬ç±µç²ç²ç²¤ç²ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³ç³
ç³ç³ç³ç³ç³¢é¬»ç³¯ç³²ç³´ç³¶ç³ºç´"],["e340","ç´ç´ç´ç´çµ
çµç´®ç´²ç´¿ç´µçµçµ³çµçµçµ²çµ¨çµ®çµçµ£ç¶ç¶çµç¶çµ½ç¶ç¶ºç¶®ç¶£ç¶µç·ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·ç¶¸ç¶ç¶°ç·ç·ç·¤ç·ç·»ç·²ç·¡ç¸
ç¸ç¸£ç¸¡ç¸ç¸±ç¸ç¸ç¸ç¸¢ç¹ç¹¦ç¸»ç¸µç¸¹ç¹ç¸·"],["e380","縲縺繧ç¹ç¹ç¹ç¹ç¹ç¹¹ç¹ªç¹©ç¹¼ç¹»çºç·ç¹½è¾®ç¹¿çºçºçºçºçºçºçºçºçºçºçºç¼¸ç¼ºç½
ç½ç½ç½ç½ç½ç½ç½ç½ç½ç½ 罨罩罧罸ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è±ç¿
ç¿ç¿ç¿ç¿ç¿¡ç¿¦ç¿©ç¿³ç¿¹é£èèèèèèèè¡è¨è¿è»èèèèèèè¢è¨è³è²è°è¶è¹è½è¿èèè
èèèèåè¬èè¥èèèèèèè¯è±èè©è£è¯è
"],["e440","éè
è¾è
è
è¼è
±è
®è
¥è
¦è
´èèèèèè èè¤è£è
èè©è°èµè¾è¸è½èèèºèèèèèèèèè è§èºè»è¾èèè
èèèèèè©è«è¸è³èèèèèèè¤"],["e480","è¢è¨èªè«è®è±è·è¸è¾èèè«èè»è¬è¡è£èèè´è³èºèèè»è¹èèèèèèµè´èè²è±èè¹èè
è¯è«èèè
èèªèè¢èè£èèèè¼èµè³èµè èè¨è´èè«èè½èèèèè·èè è²èè¢è è½è¸èè»èèªè¼èèè·è«èè®èè©èè¬è¯è¹èµèè¢è¹è¿èèèè»èèèèèè¡è¡è¿è´èèè¬èèèè¼èè£èè"],["e540","èèèèèè¤èèèè¨èèèèªèèè·è¾èèèºèè¹èèèè¥èè¹èèèè¾èºèè¢èè°è¿èä¹èèè§è±èè£è©èªèèè¶è¯èèè°èè £è«èèè©è¬"],["e580","èèè¯èèèèèè»èèèè¹èè´è¿è·è»è¥è©èè èè¸èèè´èè¨è®èèè£èªè
è¢èèè¯èè½èèéè«èè³èèè»è¯è²è è è è¾è¶è·è èè è è è ¢è ¡è ±è ¶è ¹è §è »è¡è¡è¡è¡è¡è¡¢è¡«è¢è¡¾è¢è¡µè¡½è¢µè¡²è¢è¢è¢è¢®è¢è¢¢è¢è¢¤è¢°è¢¿è¢±è£è£è£è£è£è£è£¹è¤è£¼è£´è£¨è£²è¤è¤è¤è¤è¥è¤è¤¥è¤ªè¤«è¥è¥è¤»è¤¶è¤¸è¥è¤è¥ è¥"],["e640","襦襤è¥è¥ªè¥¯è¥´è¥·è¥¾è¦è¦è¦è¦è¦è¦¡è¦©è¦¦è¦¬è¦¯è¦²è¦ºè¦½è¦¿è§è§è§è§è§§è§´è§¸è¨è¨è¨è¨è¨è¨è¨¥è¨¶è©è©è©è©è©è©¼è©è©¬è©¢èª
èªèªèª¨èª¡èªèª¥èª¦èªèª£è«è«è«è«è««è«³è«§"],["e680","諤諱è¬è« 諢諷è«è«è¬è¬è¬è«¡è¬è¬è¬è¬ 謳é«è¬¦è¬«è¬¾è¬¨èèèèèèèèè«èè¬è¯è´è½è®è®è®è®è®è®è®è®è°ºè±è°¿è±è±è±è±è±è±¢è±¬è±¸è±ºè²è²è²
è²è²è²è²è±¼è²æè²è²ªè²½è²²è²³è²®è²¶è³è³è³¤è³£è³è³½è³ºè³»è´è´
è´è´è´è´è´é½è´è³è´è´èµ§èµèµ±èµ³è¶è¶è·è¶¾è¶ºè·è·è·è·è·è·è·ªè·«è·è·£è·¼è¸è¸è·¿è¸è¸è¸è¸è¹è¸µè¸°è¸´è¹"],["e740","è¹è¹è¹è¹è¹è¹è¹¤è¹ 踪蹣è¹è¹¶è¹²è¹¼èºèºèº
èºèºèºèºèºèºèºèºªèº¡èº¬èº°è»èº±èº¾è»
è»è»è»è»£è»¼è»»è»«è»¾è¼è¼
è¼è¼è¼è¼è¼è¼è¼è¼è¼¦è¼³è¼»è¼¹è½
è½è¼¾è½è½è½è½è½è½"],["e780","轢轣轤è¾è¾è¾£è¾è¾¯è¾·è¿è¿¥è¿¢è¿ªè¿¯éè¿´é
迹迺ééé¡ééééé§é¶éµé¹è¿¸ééééééé¾éééé¨é¯é¶é¨é²éé½éééééé¨é¯é±éµé¢é¤æééééé²é°é
é
é
é
£é
¥é
©é
³é
²éééé¢é«é¯éªéµé´éºéééééééé¡éé¼éµé¶éé¿éé¬ééééé
éé¤ééé¿ééééééééé¹é·é©ééºéé®"],["e840","éé¢éé£éºéµé»éé é¼é®éé°é¬ééé¹ééé¨é¥éééééé¤ééééééé¶é«éµé¡éºééééé é¢ééªé©é°éµé·é½éé¼é¾éé¿ééééééé"],["e880","é é¨é§éé¼é»é¹é¾éæ¿¶éééééééé¡é¥é¢é¡é¨é®é¯ééééé·ééééé¦é²é¬éééééªé§é±é²é°é´é¶é¸é¹ééééè¥éééé¹éééééééééé¤éªé°é¹é½é¾ééééééé é¤é¦é¨åé«é±é¹é
é¼ééºéééééé¨é¦é£é³é´ééééééé½é²ç«é¶éµé é é ¸é ¤é ¡é ·é ½é¡é¡é¡é¡«é¡¯é¡°"],["e940","顱顴顳颪颯颱颶é£é£é£é£©é£«é¤é¤é¤é¤é¤é¤¡é¤é¤é¤¤é¤ 餬餮餽餾é¥é¥é¥
é¥é¥é¥é¥é¥é¥é¦é¦é¦¥é¦é¦®é¦¼é§é§é§é§é§é§é§®é§±é§²é§»é§¸é¨é¨é¨
é§¢é¨é¨«é¨·é©
é©é©é©"],["e980","騾é©é©é©é©é©é©¢é©¥é©¤é©©é©«é©ªéªéª°éª¼é«é«é«é«é«é«é«é«¢é«£é«¦é«¯é««é«®é«´é«±é«·é«»é¬é¬é¬é¬é¬¢é¬£é¬¥é¬§é¬¨é¬©é¬ªé¬®é¬¯é¬²éééééééé´é®é®é®é®é®é®é® 鮨鮴é¯é¯é®¹é¯é¯é¯é¯é¯£é¯¢é¯¤é¯é¯¡é°ºé¯²é¯±é¯°é°é°é°é°é°é°é°é°é°é°é°®é°é°¥é°¤é°¡é°°é±é°²é±é°¾é±é± 鱧鱶鱸鳧鳬鳰é´é´é³«é´é´é´ªé´¦é¶¯é´£é´éµé´é´éµé´¿é´¾éµéµ"],["ea40","éµéµéµ¤éµéµéµéµ²é¶é¶é¶«éµ¯éµºé¶é¶¤é¶©é¶²é·é·é¶»é¶¸é¶ºé·é·é·é·é·é·¸é·¦é·é·¯é·½é¸é¸é¸é¹µé¹¹é¹½éºéºéºéºéºéºéºéºéº¥éº©éº¸éºªéºé¡é»é»é»é»é»é»é»é»é» 黥黨黯"],["ea80","黴黶黷黹黻黼黽é¼é¼ç·é¼é¼¡é¼¬é¼¾é½é½é½é½£é½é½ 齡齦齧齬齪齷齲齶é¾é¾é¾ å ¯æ§éç¤åç"],["ed40","çºè¤ééèä¿ç»æ±æ£é¹æ»å½
丨仡仼ä¼ä¼ä¼¹ä½ä¾ä¾ä¾ä¾ä¿åå¢ä¿¿ååå°ååå´åå
å
¤åå¾å¬ååå¦ååååå¤å²åå²åï¨ååå©å¿ååå¥å¬ååï¨"],["ed80","ï¨å¢å¢²å¤å¥å¥å¥å¥£å¦¤å¦ºåå¯ç¯å¯å¯¬å°å²¦å²ºå³µå´§åµï¨åµåµå¶¸å¶¹å·å¼¡å¼´å½§å¾·å¿ææ
ææææ æ²ææ·æ°æææ¦æµæ ææææææ»ææ®ææ¤æ¥ææï¨æ³ææ æ²æ¿æºæï¤©æ¦æ»æ¡ææ æ¡æ£ï¨æ¥¨ï¨æ¦æ§¢æ¨°æ©«æ©æ©³æ©¾æ«¢æ«¤æ¯æ°¿æ±æ²æ±¯æ³æ´æ¶æµ¯æ¶æ¶¬æ·æ·¸æ·²æ·¼æ¸¹æ¹æ¸§æ¸¼æº¿æ¾æ¾µæ¿µç
çç¨ç
ç«ççç
ç
ç
ï¨çç¾ç±"],["ee40","ç¾ç¤ï¨ç·ç½ççç£çççµç¦çªç©ç®ç¢çççç¯ççççç¦ï¨çå¯ç ¡ç¡ç¡¤ç¡ºç¤°ï¨ï¨ï¨ç¦ï¨ç¦ç«ç«§ï¨ç««ç®ï¨çµçµç¶·ç¶ ç·ç¹ç½ç¾¡ï¨èè¢è¿èè¶èè´èè"],["ee80","è«ï¨è°ï¨ 﨡è 裵è¨è¨·è©¹èª§èª¾è«ï¨¢è«¶èè¿è³°è³´è´èµ¶ï¨£è»ï¨¤ï¨¥é§é都éé§ééééé®é¤é¥ééééºéé¼éééé¹é§é§é·é¸é§ééé﨧éé éé¥é¡é»ï¨¨éé¿ééé°éé¤ééé¸é±é
ééï§ï¨©éé¯é³é»éééééé¡é¡¥ï¨ªï¨«é¤§ï¨¬é¦é©é«é«éµé²é®é®±é®»é°éµ°éµ«ï¨é¸é»"],["eeef","â
°",9,"¬¦ï¼ï¼"],["f040","î",62],["f080","î¿",124],["f140","î¼",62],["f180","î»",124],["f240","î
¸",62],["f280","î·",124],["f340","î´",62],["f380","î³",124],["f440","î°",62],["f480","î¯",124],["f540","î¬",62],["f580","î«",124],["f640","î¨",62],["f680","î§",124],["f740","î¤",62],["f780","î£",124],["f840","î ",62],["f880","î",124],["f940","î"],["fa40","â
°",9,"â
",9,"¬¦ï¼ï¼ã±ââ¡âµçºè¤ééèä¿ç»æ±æ£é¹æ»å½
丨仡仼ä¼ä¼ä¼¹ä½ä¾ä¾ä¾ä¾ä¿åå¢ä¿¿ååå°ååå´åå
"],["fa80","å
¤åå¾å¬ååå¦ååååå¤å²åå²åï¨ååå©å¿ååå¥å¬ååï¨ï¨å¢å¢²å¤å¥å¥å¥å¥£å¦¤å¦ºåå¯ç¯å¯å¯¬å°å²¦å²ºå³µå´§åµï¨åµåµå¶¸å¶¹å·å¼¡å¼´å½§å¾·å¿ææ
ææææ æ²ææ·æ°æææ¦æµæ ææææææ»ææ®ææ¤æ¥ææï¨æ³ææ æ²æ¿æºæï¤©æ¦æ»æ¡ææ æ¡æ£ï¨æ¥¨ï¨æ¦æ§¢æ¨°æ©«æ©æ©³æ©¾æ«¢æ«¤æ¯æ°¿æ±æ²æ±¯æ³æ´æ¶æµ¯"],["fb40","æ¶æ¶¬æ·æ·¸æ·²æ·¼æ¸¹æ¹æ¸§æ¸¼æº¿æ¾æ¾µæ¿µç
çç¨ç
ç«ççç
ç
ç
ï¨çç¾ç±ç¾ç¤ï¨ç·ç½ççç£çççµç¦çªç©ç®ç¢çççç¯ççççç¦ï¨çå¯ç ¡ç¡ç¡¤ç¡ºç¤°ï¨ï¨"],["fb80","ï¨ç¦ï¨ç¦ç«ç«§ï¨ç««ç®ï¨çµçµç¶·ç¶ ç·ç¹ç½ç¾¡ï¨èè¢è¿èè¶èè´èèè«ï¨è°ï¨ 﨡è 裵è¨è¨·è©¹èª§èª¾è«ï¨¢è«¶èè¿è³°è³´è´èµ¶ï¨£è»ï¨¤ï¨¥é§é都éé§ééééé®é¤é¥ééééºéé¼éééé¹é§é§é·é¸é§ééé﨧éé éé¥é¡é»ï¨¨éé¿ééé°éé¤ééé¸é±é
ééï§ï¨©éé¯é³é»éééééé¡é¡¥ï¨ªï¨«é¤§ï¨¬é¦é©é«"],["fc40","é«éµé²é®é®±é®»é°éµ°éµ«ï¨é¸é»"]]
42939 42940 42941/***/ }), 42942/* 181 */ 42943/***/ (function(module, exports) { 42944 42945module.exports = [["0","\u000
vendor: 40,870 bytes, line 42945
429450",127],["8ea1","。",62],["a1a1","ãããï¼ï¼ã»ï¼ï¼ï¼ï¼ãã´ï½Â¨ï¼¾ï¿£ï¼¿ã½ã¾ãããä»ã
ããã¼ââï¼ï¼¼ï½â¥ï½â¦â¥ââââï¼ï¼ãã[]ï½ï½ã",9,"ï¼ï¼Â±Ã÷ï¼â ï¼ï¼â¦â§ââ´ââ°â²â³âï¿¥ï¼ï¿ ï¿¡ï¼
ï¼ï¼ï¼ï¼ §ââ
ââââ"],["a2a1","ââ¡â â³â²â½â¼â»ãââââã"],["a2ba","âââââââªâ©"],["a2ca","â§â¨ï¿¢ââââ"],["a2dc","â â¥ââââ¡ââªâ«ââ½ââµâ«â¬"],["a2f2","â«â°â¯ââªâ â¡Â¶"],["a2fe","â¯"],["a3b0","ï¼",9],["a3c1","A",25],["a3e1","ï½",25],["a4a1","ã",82],["a5a1","ã¡",85],["a6a1","Î",16,"Σ",6],["a6c1","α",16,"Ï",6],["a7a1","Ð",5,"ÐÐ",25],["a7d1","а",5,"Ñж",25],["a8a1","ââââââââ¬â¤â´â¼âââââââ£â³â«â»ââ â¯â¨â·â¿ââ°â¥â¸â"],["ada1","â ",19,"â
",9],["adc0","ããã¢ããã§ãã¶ãããã¦ã£ã«ãã»ããããããã¡"],["addf","ã»ããâãâ¡ã¤",4,"ã±ã²ã¹ã¾ã½ã¼ââ¡â«â®âââ¥â ââ¿âµâ©âª"],["b0a1","äºåå¨é¿åææ¨å§¶é¢èµèç©æªæ¡æ¸¥æè¦è¦é¯µæ¢å§æ¡æ±å®å§è»é£´çµ¢ç¶¾é®æç²è¢·å®åºµæææ¡ééæä»¥ä¼ä½ä¾åå²å¤·å§å¨å°æææ
°ææ¤
çºçç°ç§»ç¶ç·¯èèè¡£è¬ééºå»äºäº¥åè²é磯ä¸å£±æº¢é¸ç¨²è¨èé°¯å
å°å½å¡å å§»å¼é£²æ·«è¤è"],["b1a1","é¢é°é é»åå³å®çç¾½è¿é¨å¯éµçªºä¸ç¢è¼æ¸¦å忬è鰻姥婿µ¦çéåäºéé²èé¤å¡å¶å¬°å½±æ æ³æ 永泳洩ççç©é ´è±è¡è© éæ¶²ç«çé§
æ¦è¬è¶é²æ¦åååå °å¥å®´å»¶æ¨æ©æ´æ²¿æ¼ççç
çç¿ç¸è¶èèé éé´å¡©æ¼æ±ç¥å¹å¤®å¥¥å¾å¿"],["b2a1","æ¼æºæ¨ªæ¬§æ®´çç¿è¥é´¬é´é»å²¡æ²è»å屿¶èæ¡¶ç¡ä¹ä¿ºå¸æ©æ¸©ç©é³ä¸åä»®ä½ä¼½ä¾¡ä½³å å¯åå¤å«å®¶å¯¡ç§æææ¶ææ²³ç«çç¦ç¦¾ç¨¼ç®è±èèè·è¯èè¦èª²å©è²¨è¿¦ééèä¿å³¨æçç»è¥è½è¾è³é
é¤é§ä»ä¼è§£åå¡å£å»»å¿«æªææ¢ææææ¹"],["b3a1","éæ¦æ¢°æµ·ç°çççµµè¥è¹ééè²å±å¾å¤å³å®³å´æ
¨æ¦æ¶¯ç¢èè¡è©²é§éª¸æµ¬é¦¨è壿¿èéååå廿¡æ¹æ ¼æ ¸æ®»ç²ç¢ºç©«è¦è§èµ«è¼éé£éé©å¦å²³æ¥½é¡é¡æç¬ æ¨«æ©¿æ¢¶é°æ½å²åæ°æ¬æ´»æ¸æ»èè¤è½ä¸é°¹å¶æ¤æ¨ºéæ ªå
ç«è²ééåé´¨æ ¢è
è±"],["b4a1","ç²¥åè
ç¦ä¹¾ä¾å å¯ååå§å·»åå ªå§¦å®å®å¯å¹²å¹¹æ£ææ
£æ¾ææ¢ææ¡æ£ºæ¬¾ææ±æ¼¢æ¾æ½
ç°çç£ç竿管簡緩缶翰èè¦è観è«è²«ééééé¢é¥é館è丸å«å²¸å·ç©çç¼å²©ç¿«è´éé é¡é¡ä¼ä¼å±åå¨åºå¥å¬å¯å²å¸å¹¾å¿æ®æºææ¢ææ£æ£"],["b5a1","æ©å¸°æ¯
æ°æ±½ç¿ç¥å£ç¨ç´å¾½è¦è¨è²´èµ·è»è¼é£¢é¨é¬¼äºå½åå¦å®æ¯ææ¬æ¬ºç çç¥ç¾©è»èª¼è°æ¬èé åå嫿¡æ©è©°ç §æµé»å´å®¢èèéä¸ä¹
ä»ä¼åå¸å®®å¼æ¥ææ½æ±æ±²æ³£ç¸ç究窮ç¬ç´ç³¾çµ¦æ§çå»å±
å·¨ææ ææ¸ è許è·é¸æ¼ç¦¦é亨享京"],["b6a1","ä¾ä¾ åå
ç«¶å
±å¶åå¡å¿å«å¬å¢å³¡å¼·å½æ¯æææææ©æ³ççç¯è¸è
èèé·é¡é¿é¥é©ä»°åå°ææ¥å±æ²æ¥µçæ¡ç²å
å¤å巾馿¤æ¬£æ¬½ç´ç¦ç¦½çç·è¹èè¡¿è¥è¬¹è¿éåéä¹å¶å¥åºççç©è¦èº¯é§é§é§å
·æèå°ç©ºå¶å¯éé
串æ«é§å±å±"],["b7a1","æçªæ²é´è½¡çªªçéç²æ ç¹°æ¡é¬å²åè«è¨ç¾¤è»é¡å¦è¢ç¥ä¿å¾åå
ååçªåå¥å½¢å¾æµæ
¶æ
§æ©æ²æºæ¬æ¯æ¡æ¸ç¦ç¨½ç³»çµç¶ç¹ç½«èèèè¨è©£è¦è»½é é¶è¸è¿é¯¨åæææ¿éæ¡åæ¬ æ±ºæ½ç©´çµè¡è¨£æä»¶å¹å¦å¥å
¼å¸å£å§åå
å«å»ºæ²æ¸æ³æ²"],["b8a1","æ¤æ¨©ç½ç¬ç®ç 硯絹çè©è¦è¬è³¢è»é£éµéºé¡é¨é¹¸å
åå³å¹»å¼¦æ¸æºçç¾çµè·è¨è«ºéä¹åå¤å¼åºå§å¤å·±åº«å¼§æ¸æ
æ¯æ¹çç³è¢´è¡è¡è°èèªè·¨é·éé¡§é¼äºäºä¼ååå¾å¨¯å¾å¾¡ææ¢§æªçç¢èªèª¤è·éä¹é¯äº¤ä½¼ä¾¯ååå
å
¬åå¹å¾åå£å"],["b9a1","åååå¢å¥½ååå®å·¥å·§å··å¹¸åºåºåº·å¼ææ
æææ§æ»æææ´ææ ¡æ¢æ§æ±æ´ªæµ©æ¸¯æºç²çç¡¬ç¨¿ç³ ç´
ç´çµç¶±èèè¯è±è
èèªèè¡è¡¡è¬è²¢è³¼éé
µé±ç ¿é¼é¤éé
é¦é«é´»åå«å·å壿·æ¿ 豪è½éº¹å
å»åå½ç©é
·éµ é»çæ¼è
°ç忽æéª¨çè¾¼"],["baa1","æ¤é ä»å°å¤å¢¾å©æ¨ææææ ¹æ¢±æ··çç´ºè®éäºä½åååµ¯å·¦å·®æ»æ²ç³ç è©éè£å座æ«åµå¬åæåå¡å¦»å®°å½©ææ¡æ ½æ³æ¸ç½éçç ç ¦ç¥æç´°èè£è¼éå¤å¨æç½ªè²¡å´åéªå ºæ¦è´å²å´å¼ç¢é·ºä½ååæ¾æ¨ææµçªçç´¢é¯æ¡é®ç¬¹ååå·"],["bba1","坿¶æ®æ¦ææ®ºè©éç靿éé®«ç¿æä¸ååå±±æ¨ææ£æ¡ç¦çç£ç®çºèè®è³é
¸é¤æ¬æ«æ®ä»ä»ä¼ºä½¿åºå¸å²å£å士å§å§å§¿åå±å¸å¸«å¿æææ¯åæ¯æ½æ¨ææ¢æ»æ°ç
ç¥ç§ç³¸ç´ç´«è¢èè³è¦è©è©©è©¦èªè«®è³è³é飼æ¯äºä¼¼ä¾å
å寺æ
ææ"],["bca1","æ¬¡æ»æ²»ç¾ç½çç£ç¤ºèè³èªèè¾æ±é¹¿å¼è鴫竺軸å®é«ä¸å±å·å¤±å«å®¤ææ¹¿æ¼ç¾è³ªå®èç¯ å²æ´è屡èç¸èåå°æ¨èµ¦æç
®ç¤¾ç´è
è¬è»é®èéªååºå°ºæç¼çµé
éé«è¥å¯å¼±æ¹ä¸»åå®ææ±æ®ç©ç 種è
«è¶£é
é¦åååªå¯¿ææ¨¹ç¶¬éååå¨"],["bda1","å®å°±å·ä¿®ææ¾æ´²ç§ç§çµç¹ç¿èèèè¡è¥²è®è¹´è¼¯é±é
é
¬ééä»ä½å
åå¾æææ±æ¸ç£ç¸¦ééåå¤å®¿æ·ç¥ç¸®ç²å¡¾çåºè¡è¿°ä¿å³»æ¥ç¬ç«£èé§¿åå¾ªæ¬æ¥¯æ®æ·³æºæ½¤ç¾ç´å·¡éµéé å¦åææææ¸åº¶ç·ç½²æ¸è¯è·è«¸å©å女åºå¾æé¤é¤å·å"],["bea1","åå åå¬å¨åå±å奨妾娼宵å°å°å°å°åºåºå» å½°æ¿ææææ·ææææ¶æ¾æ¢¢æ¨æ¨µæ²¼æ¶æ¸æ¹ç¼ç¦ç
§ççç¡ç¤ç¥¥ç§°ç« ç¬ç²§ç´¹èèèèè¡è£³è¨è¨¼è©è©³è±¡è³é¤é¦é¾éééä¸ä¸ä¸ä¹åå°åå ´å£å¬¢å¸¸æ
æ¾æ¡ææµç¶ç³ç©£è¸è²é¸é å±å´é£¾"],["bfa1","ææ¤æ®çç¹è·è²è§¦é£è辱尻伸信侵åå¨ å¯å¯©å¿æ
æ¯æ°ææ£®æ¦æµ¸æ·±ç³ç¹çç¥ç§¦ç´³è£è¯èªè¦ªè¨ºèº«è¾é²éé人ä»å塵壬å°çå°½è
è¨è¿
é£é笥è«é é
¢å³å¨éå¹åå¸¥æ¨æ°´çç¡ç²ç¿ è¡°éé
éééçé«å´åµ©æ°æ¢è¶¨éæ®ææ¤è
é é裾"],["c0a1","æ¾æºå¯¸ä¸ç¬çæ¯åå¶å¢å§å¾æ§ææ¿æ´ææ´æ£²æ æ£æ¸
ç²ççç²¾èå£°è£½è¥¿èª èªè«ééééæç¨èé»å¸æææ¥ææç³ç©ç±ç¸¾è責赤跡è¹ç¢©åææ¥ææè¨çªç¯èª¬éªçµ¶èèä»å
åå 宣å°å°å·æ¦ææ°æ æ ´æ³æµ
æ´ææ½ç
ç
½æç©¿ç®ç·"],["c1a1","ç¹ç¾¨è
ºèè¹è¦è©®è³è·µé¸é·éééé®®ååæ¼¸ç¶å
¨ç¦
ç¹è³ç³åå¡å²¨æªæ¾æ½æ¥çççç¤ç¥ç§ç²ç´ çµè訴é»é¡é¼ å§åµåå¢ååªå£®å¥ç½å®å±¤åæ£æ³æææ¿æ»ææ©æ¹å·£æ§æ§½æ¼ç¥äºç©ç¸çªç³ç·ç¶è¡èèè¬è¼è»è£
èµ°ééééé¨å墿"],["c2a1","èèµè´é ä¿å´å峿¯æææ¸¬è¶³éä¿å±è³æç¶åè¢å
¶æåå«å°ææéä»å¤å¤ªæ±°è©å¾å å¦¥æ°ææèµæ¥éé§é¨¨ä½å 対è岱帯å¾
æ æ
æ´æ¿æ³°æ»èè
¿èè¢è²¸éé®éé»é¯ä»£å°å¤§ç¬¬éé¡é·¹æ»ç§ååå®
ææææ²¢æ¿¯ç¢è¨é¸æ¿è«¾è¸å§è¸åª"],["c3a1","å©ä½é辰奪è±å·½ç«ªè¾¿æ£è°·ç¸é±æ¨½èª°ä¸¹åå妿
æ¢æ¦ææ·¡æ¹çç端箪綻è½èèèªéå£å£å¼¾æææªæ®µç·è«å¤ç¥å°å¼æ¥æºæ± ç´ç¨ç½®è´èé
馳ç¯ç竹çèéç§©çªè¶å«¡çä¸ä»²å®å¿ æ½æ¼æ±æ³¨è«è¡·è¨»é
é³é§æ¨ç¦çªè§è貯ä¸å
åå寵"],["c4a1","å¸å¸³åºå¼å¼µå½«å¾´æ²ææ¢ææ½®ççºçºè´è¹è
¸è¶èª¿è«è¶
è·³éé·é é³¥å
æç´ææ²çè³é®é³æ´¥å¢æ¤æ§è¿½éçé塿 æ´æ§»ä½æ¼¬æè¾»è¦ç¶´é椿潰åªå£·å¬¬ç´¬çªåé£é¶´äºä½ååµåè²åå ¤å®å¸åºåºå»·å¼ææµæºææ¢¯æ±ç¢ç¦ç¨ç· èè¨è«¦è¹é"],["c5a1","é¸éé鼿³¥ææ¢æµæ»´çç¬é©é溺å²å¾¹æ¤è½è¿éå
¸å¡«å¤©å±åºæ·»çºç貼転é¡ç¹ä¼æ®¿æ¾±ç°é»å
åå µå¡å¦¬å± å¾æææ¸¡ç»èè³éé½éç ¥ç ºåªåº¦å奴æåå
å¬åååå¡å¡å¥å®å³¶å¶æ¼æææ±æ¡æ¢¼æ£çæ·æ¹¯æ¶ç¯çå½ç祷çççç³çµ±å°"],["c6a1","è£è©è¤è¨è¬è±è¸éééé¶é 騰éåååå å°æ§ææ´ç³ç«¥è´èéé
å³ é´å¿å¾å¾³æ¶ç¹ç£ç¦¿ç¯¤æ¯ç¬èªæ æ©¡å¸çªæ¤´å±é³¶è«å¯
é
çå¸å±¯ææ¦æ²è±éé åæéå¥é£å
ä¹åªèè¬çæºé楢馴ç¸ç·åæ¥ è»é£æ±äºå°¼å¼è¿©åè³èè¹å»¿æ¥ä¹³å
¥"],["c7a1","å¦å°¿é®ä»»å¦å¿èªæ¿¡ç¦°ç¥¢å¯§è±ç«ç±å¹´å¿µæ»æçç²ä¹å»¼ä¹å墿©æ¿ç´è½è³è¿è¾²è¦è¤å·´ææè¦æ·æ³¢æ´¾ç¶ç ´å©ç½µèé¦¬ä¿³å»ææææ¯ççèèºè¼©é
åå¹åªæ¢
楳ç
¤ç½è²·å£²è³ éªéè¿ç§¤ç§è©ä¼¯å¥åæææ³ç½ç®ç²è¶èè¿«ææ¼ çç¸è«é§éº¦"],["c8a1","å½ç®±ç¡²ç®¸èçæ«¨å¹¡èçç å
«é¢æºçºé髪ä¼ç½°æçé¥é³©åºå¡è¤é¼ä¼´å¤ååå叿¬ææ¿æ°¾æ±çç¯ççç¹è¬è©è²©ç¯éç
©é é£¯æ½æ©çªç¤ç£èè®åªåå¦å¦åºå½¼æ²ææ¹æ«ææ¯æ³ç²ç®ç¢ç§ç·ç½·è¥è¢«èª¹è²»é¿é飿¨ç°¸åå°¾å¾®ææ¯çµçç¾"],["c9a1","é¼»æç¨å¹çé«å½¦èè±èå¼¼å¿
ç¢ç鼿¡§å§«åªç´ç¾è¬¬ä¿µå½ªæ¨æ°·æ¼ç¢ç¥¨è¡¨è©è±¹å»æç
ç§èé¨é²èèé°åå½¬ææµçè²§è³é »æç¶ä¸ä»å 夫婦å¯å¨å¸åºææ¶æ·æ§æ®æµ®ç¶ç¬¦è
èèèè² è³¦èµ´ééä¾®æ«æ¦èè¡èªé¨å°æ¥é¢¨èºèä¼å¯å¾©å¹
æ"],["caa1","ç¦è
¹è¤è¦æ·µå¼ææ²¸ä»ç©é®åå»å´å¢³æ¤æ®ç奮ç²ç³ç´é°æèä¸ä½µå
µå¡å¹£å¹³å¼æä¸¦è½ééç±³é å»å£ç碧å¥ç¥èç®åå¤çç¯ç·¨è¾ºè¿é便å娩å¼éä¿èéªåææ©ç«è£è¼ç©å墿
ææ®æ¯ç°¿è©å£ä¿¸å
åå ±å¥å®å³°å³¯å´©åºæ±æ§æ¾æ¹æ"],["cba1","æ³æ³¡ç¹ç ²ç¸«èè³èè¬èè¤è¨ªè±é¦é飽鳳鵬ä¹äº¡ååå妨帽å¿å¿æ¿æ´æææ£åç´¡èªè¨è¬è²è²¿é¾é²å é ¬åååå¢¨æ²æ´ç§ç¦ç©é¦å没æ®å å¹å¥æ¬ç¿»å¡çæ©ç£¨é麻åå¦¹æ§ææ¯å©æ§å¹èæé®ªæ¾é±æ¡äº¦ä¿£åæ¹æ«æ²«è¿ä¾ç¹éº¿ä¸æ
¢æº"],["cca1","漫è峿ªé
å·³ç®å²¬å¯èæ¹èç¨èå¦ç²æ°ç å夢ç¡ççé§éµ¡æ¤å©¿å¨å¥å彿çè¿·éé³´å§ªçæ»
å
æ£ç¶¿ç·¬é¢éººæ¸æ¨¡èå¦åæ¯çç²ç¶²èè岿¨é»ç®æ¢å¿é¤
å°¤æ»ç±¾è²°åæ¶ç´éåä¹å¶å¤çºè¶éå¼¥ç¢åå½¹ç´è¬è¨³èºéæ³è®éæææ²¹ç"],["cda1","è«è¼¸å¯ä½åªååå®¥å¹½æ æææææ¹§æ¶ç¶ç·ç±ç¥è£èªéééµéèå¤äºä½ä¸èªè¼¿é åå¹¼å¦å®¹åº¸ææºæææ¥æ§æ´æº¶çç¨çª¯ç¾èèèè¦è¬¡è¸é¥é½é¤æ
¾ææ¬²æ²æµ´ç¿ç¿¼æ·ç¾
èºè£¸æ¥è±é ¼é·æ´çµ¡è½é
ªä¹±åµåµæ¬æ¿«èè覧å©åå±¥ææ¢¨çç"],["cea1","ç¢è£è£¡éé¢é¸å¾çç«èæ ç¥åæµæºççç¡«ç²éç«é¾ä¾¶æ
®æ
èäºäº®å両åå¯®ææ¢æ¶¼çççç¨ç³§è¯è«é¼ééµé åç·å«åææ·çç³è¨è¼ªé£é±éºç 塿¶ç´¯é¡ä»¤ä¼¶ä¾å·å±å¶ºæç²ç¤¼èé´é·é¶ééºé½¢æ¦æ´åå£çè£å»æææ¼£ç
簾練è¯"],["cfa1","è®é£é¬å靿«çè³è·¯é²å´å©å»å¼ææ¥¼æ¦æµªæ¼ç¢ç¼ç¯èè¾èéå
éºç¦èé²è«åå話æªè³èææ é·²äºäºé°è©«èè¨æ¤æ¹¾ç¢è
"],["d0a1","å¼ä¸ä¸ä¸ªä¸±ä¸¶ä¸¼ä¸¿ä¹ä¹ä¹äºäº
豫äºèå¼äºäºäºäº 亢亰亳亶ä»ä»ä»ä»ä»ä»ä»ä»ä»ä»·ä¼ä½ä¼°ä½ä½ä½ä½ä½¶ä¾ä¾ä¾ä½»ä½©ä½°ä¾ä½¯ä¾ä¾åä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿¤ä¿¥åå¨ååªå¥å
ä¼ä¿¶å¡å©å¬ä¿¾ä¿¯ååååæåååååå¬å¸ååå
å´å²"],["d1a1","ååå³åååå¥åå£å®å¹åµåååååååå¡åºå·å¼å»å¿å
å
å
å
å
¢ç«¸å
©å
ªå
®ååååååååååå¤å¦å¢å©åªå«å³å±å²å°åµå½å
ååå èå©åå°åµå¾ååååå§åªå®å³å¹åååååååªå´å©å³å¿å½åååå±åå辨"],["d2a1","è¾§å¬åå¼åµååååå£å¦é£å å³åµå¸å¹ååç¸åååååå£å¯å±å³å¸ååå
ä¸ååååå©å®å¤å»å·ååå å¦å¥å®å°å¶åç°éåæ¼ç®å®å¨ååºåå½åå¬åå¼å®å¶å©ååååµååå±å·å°åå»åå¶ååååå¢å¸å¥å¬ååå¨"],["d3a1","å«åå¤å¾å¼åå¥å¦ååå½å®ååºå¢å¹åå£åå®åå
ååå¸å³åååå¯ååå»å¾ååå®å¼åå©åå¨åå
åååå¤ååå·åå¾å½åå¹ååçå´å¶å²å¸å«å¤å¯å¬åªåååå ååå¥å®å¶å´åå¼ååååååååå®å¹åå¿åå"],["d4a1","ååååååååå¦å·å¸åå»ååå©ååå¡å¿ååå å³å¤åªå°åååååå åå£å å å å¡²å ¡å¡¢å¡å¡°æ¯å¡å ½å¡¹å¢
墹å¢å¢«å¢ºå£å¢»å¢¸å¢®å£
å£å£å£å£å£å£¥å£å£¤å£å£¯å£ºå£¹å£»å£¼å£½å¤å¤å¤å¤æ¢¦å¤¥å¤¬å¤å¤²å¤¸å¤¾ç«å¥å¥å¥å¥å¥å¥¢å¥ 奧奬奩"],["d5a1","奸å¦å¦ä½ä¾«å¦£å¦²å§å§¨å§å¦å§å§å¨¥å¨å¨å¨å¨å¨å©å©¬å©å¨µå¨¶å©¢å©ªåªåª¼åª¾å«å«åª½å«£å«å«¦å«©å«å«ºå«»å¬å¬å¬å¬²å«å¬ªå¬¶å¬¾åå
åååååå¥å©å°å³åµå¸æåºå®å®å®¦å®¸å¯å¯å¯å¯å¯å¯¤å¯¦å¯¢å¯å¯¥å¯«å¯°å¯¶å¯³å°
å°å°å°å°å° 尢尨尸尹å±å±å±å±"],["d6a1","å±å±å±å±¬å±®ä¹¢å±¶å±¹å²å²å²å¦å²«å²»å²¶å²¼å²·å³
å²¾å³å³å³©å³½å³ºå³å¶å³ªå´å´å´åµå´å´å´å´å´¢å´å´å´åµåµåµåµåµ¬åµ³åµ¶å¶å¶å¶å¶¢å¶å¶¬å¶®å¶½å¶å¶·å¶¼å·å·å·å·å·å·å·«å·²å·µå¸å¸å¸å¸å¸å¸¶å¸·å¹å¹å¹å¹å¹å¹å¹å¹¢å¹¤å¹å¹µå¹¶å¹ºéº¼å¹¿åº å»å»å»å»å»"],["d7a1","å»å»£å»å»å»å»¢å»¡å»¨å»©å»¬å»±å»³å»°å»´å»¸å»¾å¼å¼å½å½å¼å¼å¼å¼©å¼å¼¸å½å½å½å½å¼¯å½å½å½å½å½¡å½å½³å½·å¾å¾å½¿å¾å¾å¾å¾å¾å¾å¾å¾ 徨å¾å¾¼å¿å¿»å¿¤å¿¸å¿±å¿æ³å¿¿æ¡æ æææ©ææ±æææ«æ¦ææºæææªæ·æææææ£ææ¤ææ¬æ«ææææ§ææ"],["d8a1","ææææææ§ææ¡æ¸æ ææ´å¿°æ½ææµææ
æææ¶æ·ææ´æºææ¡æ»æ±æææ
æ¾æ¨æ§æ
æ¿æ¼æ¬æ´æ½æ
æ
æ
³æ
·æ
æ
æ
æ
«æ
´æ
¯æ
¥æ
±æ
æ
æ
æ
µææææ¬æææææ«æ®ææææ·ææææºæç½¹ææ¦æ£æ¶æºæ´æ¿æ½æ¼æ¾æææææææ"],["d9a1","ææ¡æªæ®æ°æ²æ³ææææ£ææ æ¨æ¼æææ¾æææææææææ»ææ¿ææææææææææææ®æ±æ§æææ¯æµææ¾æææææææ«æ¶æ£ææææµæ«æ©æ¾æ©æææ£æææ¶æææ´æææ¦æ¶æææ¨ææ§æ¯æ¶ææªæææ¥æ©ææ¼"],["daa1","æææ
ææ»æææ±æ§èæ æ¡æ¬æ£æ¯æ¬æ¶æ´æ²æºææ½æææ
æ¤æ£æ«æ´æµæ·æ¶æ¸çææææææææ²æ¸ææè®æææ«æ·æææææææææ æ¡æ±æ²æææ»æ³æµæ¶æ´ææææææææ¤æ§æ¨ææ¢æ°æææææææææ¹ææ¾æ¼"],["dba1","ææ¸æææ æ¿æ¦æ©æ°æµæ·ææææ¦æ§é¸æ®æ¿æ¶ææ¸æ·æææ ææ£æ¤ææ°æ©æ¼æªæææ¦æ¡æ
æ·æ¯æ´æ¬æ³æ©æ¸æ¤æææ¢æ®æ¹æææ§æªæ æ¡æ ©æ¡æ¡æ ²æ¡æ¢³æ «æ¡æ¡£æ¡·æ¡¿æ¢æ¢æ¢æ¢æ¢æ¢æ¢æª®æ¢¹æ¡´æ¢µæ¢ æ¢ºæ¤æ¢æ¡¾æ¤æ£æ¤æ£æ¤¢æ¤¦æ£¡æ¤æ£"],["dca1","æ£æ£§æ£æ¤¶æ¤æ¤æ£æ££æ¤¥æ£¹æ£ æ£¯æ¤¨æ¤ªæ¤æ¤£æ¤¡æ£æ¥¹æ¥·æ¥æ¥¸æ¥«æ¥æ¥¾æ¥®æ¤¹æ¥´æ¤½æ¥æ¤°æ¥¡æ¥æ¥æ¦æ¥ªæ¦²æ¦®æ§æ¦¿æ§æ§æ¦¾æ§å¯¨æ§æ§æ¦»æ§æ¦§æ¨®æ¦æ¦ æ¦æ¦æ¦´æ§æ§¨æ¨æ¨æ§¿æ¬æ§¹æ§²æ§§æ¨
æ¦±æ¨æ§æ¨æ§«æ¨æ¨æ«æ¨£æ¨æ©æ¨æ©²æ¨¶æ©¸æ©æ©¢æ©æ©¦æ©æ¨¸æ¨¢æªæªæª æªæª¢æª£"],["dda1","æªèæª»æ«æ«æª¸æª³æª¬æ«æ«æ«æªªæ«æ«ªæ«»æ¬
èæ«ºæ¬æ¬é¬±æ¬æ¬¸æ¬·çæ¬¹é£®æææææææææ¡æ¸æ¹æ¿æ®æ®æ®æ®æ®æ®æ®æ®¤æ®ªæ®«æ®¯æ®²æ®±æ®³æ®·æ®¼æ¯æ¯æ¯æ¯æ¯¬æ¯«æ¯³æ¯¯éº¾æ°æ°æ°æ°æ°¤æ°£æ±æ±æ±¢æ±ªæ²æ²æ²æ²æ²æ±¾æ±¨æ±³æ²æ²æ³æ³±æ³æ²½æ³æ³
æ³æ²®æ²±æ²¾"],["dea1","æ²ºæ³æ³¯æ³æ³ªæ´è¡æ´¶æ´«æ´½æ´¸æ´æ´µæ´³æ´æ´æµ£æ¶æµ¤æµæµ¹æµæ¶æ¶æ¿¤æ¶
æ·¹æ¸æ¸æ¶µæ·æ·¦æ¶¸æ·æ·¬æ·æ·æ·¨æ·æ·
æ·ºæ·æ·¤æ·æ·ªæ·®æ¸æ¹®æ¸®æ¸æ¹²æ¹æ¸¾æ¸£æ¹«æ¸«æ¹¶æ¹æ¸æ¹æ¸ºæ¹æ¸¤æ»¿æ¸æ¸¸æºæºªæºæ»æº·æ»æº½æº¯æ»æº²æ»æ»æºæº¥æ»æºæ½æ¼ç滬滸滾漿滲漱滯漲æ»"],["dfa1","æ¼¾æ¼æ»·æ¾æ½ºæ½¸æ¾æ¾æ½¯æ½æ¿³æ½æ¾æ½¼æ½æ¾æ¾æ¿æ½¦æ¾³æ¾£æ¾¡æ¾¤æ¾¹æ¿æ¾ªæ¿æ¿æ¿¬æ¿æ¿æ¿±æ¿®æ¿ççæ¿ºçççæ¿¾ççæ½´çççç°ç¾ç²çç£ççç¯ç±ç¬ç¸ç³ç®çççççç½ççç
¥ç
çç
¦ç
¢ç
ç
ç
¬çç»ççç¨ç¬çç¹ç¾ççççç ç¬ç§çµç¼"],["e0a1","ç¹ç¿çççç¨çç¬ç°ç²ç»ç¼ç¿ççççç´ç¾çççççç¢ç§ç¹ç²çççççç¢ç ç¡ç¹ç·åçççççç´ç¯ç©ç¥ç¾ççé»ççªç¨ç°ç¸çµç»çºçç³çç»çç¥ç®çç¢ç
ç¯ç¥ç¸ç²çºçç¿ççççç©ç°ç£çªç¶ç¾ççç§çççç±"],["e1a1","ç ç£ç§ç©ç®ç²ç°ç±ç¸ç·ççç
ççççççç¦ç¬ç¼çççççççç©ç¤ç§ç«çç¸ç¶ççç´ççççççç¥ç£çç³ççµç½ç¸ç¼ç±ççççç£çç¾ç¿ç¼çç°çºç²ç³ççççç§ç ç¡ç¢ç¤ç´ç°ç»çççççç¡ç¢ç¨ç©çªç§ç¬ç°"],["e2a1","ç²ç¶ç¸ç¼çççççççççç°ç´ç¸ç¹çºçççççç¡ç¥ç§çªè¯ç»çççç©ç¤çç¥ç¦çç·ç¸ççç¨ç«çç¥ç¿ç¾ç¹çççç çç°ç¶ç¹ç¿ç¼ç½ç»çççççç£ç®ç¼ç ç 礦ç 礪ç¡
ç¢ç¡´ç¢ç¡¼ç¢ç¢ç¢£ç¢µç¢ªç¢¯ç£ç£ç£ç£ç¢¾ç¢¼ç£
ç£ç£¬"],["e3a1","磧ç£ç£½ç£´ç¤ç¤ç¤ç¤ç¤¬ç¤«ç¥ç¥ ç¥ç¥ç¥ç¥ç¥ç¥ºç¥¿ç¦ç¦ç¦§é½ç¦ªç¦®ç¦³ç¦¹ç¦ºç§ç§ç§§ç§¬ç§¡ç§£ç¨ç¨ç¨ç¨ç¨ ç¨ç¦ç¨±ç¨»ç¨¾ç¨·ç©ç©ç©ç©¡ç©¢ç©©é¾ç©°ç©¹ç©½çªçªçªçªçªçª©ç«çª°çª¶ç«
ç«çª¿éç«ç«ç«ç«ç«ç«ç«ç«ç«ç«¡ç«¢ç«¦ç«ç«°ç¬ç¬ç¬ç¬ç¬³ç¬ç¬ç¬ç¬µç¬¨ç¬¶ç"],["e4a1","çºç¬çç¬çç
çµç¥ç´ç§ç°ç±ç¬ç®ç®ç®ç®ç®ç®ç®ç®ç®ç®çç®ç¯ç¯ç¯ç¯ç®´ç¯ç¯ç¯©ç°ç°ç¯¦ç¯¥ç± ç°ç°ç°ç¯³ç¯·ç°ç°ç¯¶ç°£ç°§ç°ªç°ç°·ç°«ç°½ç±ç±ç±ç±ç±ç±ç±ç±ç±¤ç±ç±¥ç±¬ç±µç²ç²ç²¤ç²ç²¢ç²«ç²¡ç²¨ç²³ç²²ç²±ç²®ç²¹ç²½ç³ç³
ç³ç³ç³ç³ç³¢é¬»ç³¯ç³²ç³´ç³¶ç³ºç´"],["e5a1","ç´ç´ç´ç´çµ
çµç´®ç´²ç´¿ç´µçµçµ³çµçµçµ²çµ¨çµ®çµçµ£ç¶ç¶çµç¶çµ½ç¶ç¶ºç¶®ç¶£ç¶µç·ç¶½ç¶«ç¸½ç¶¢ç¶¯ç·ç¶¸ç¶ç¶°ç·ç·ç·¤ç·ç·»ç·²ç·¡ç¸
ç¸ç¸£ç¸¡ç¸ç¸±ç¸ç¸ç¸ç¸¢ç¹ç¹¦ç¸»ç¸µç¸¹ç¹ç¸·ç¸²ç¸ºç¹§ç¹ç¹ç¹ç¹ç¹ç¹¹ç¹ªç¹©ç¹¼ç¹»çºç·ç¹½è¾®ç¹¿çºçºçºçºçºçºçºçºçºçºçºç¼¸ç¼º"],["e6a1","ç½
ç½ç½ç½ç½ç½ç½ç½ç½ç½ç½ 罨罩罧罸ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾£ç¾¯ç¾²ç¾¹ç¾®ç¾¶ç¾¸è±ç¿
ç¿ç¿ç¿ç¿ç¿¡ç¿¦ç¿©ç¿³ç¿¹é£èèèèèèèè¡è¨è¿è»èèèèèèè¢è¨è³è²è°è¶è¹è½è¿èèè
èèèèåè¬èè¥èèèèèèè¯è±èè©è£è¯è
"],["e7a1","éè
è¾è
è
è¼è
±è
®è
¥è
¦è
´èèèèèè èè¤è£è
èè©è°èµè¾è¸è½èèèºèèèèèèèèè è§èºè»è¾èèè
èèèèèè©è«è¸è³èèèèèèè¤è¢è¨èªè«è®è±è·è¸è¾èèè«èè»è¬è¡è£èèè´è³èºèèè»è¹èèèèè"],["e8a1","èµè´èè²è±èè¹èè
è¯è«èèè
èèªèè¢èè£èèèè¼èµè³èµè èè¨è´èè«èè½èèèèè·èè è²èè¢è è½è¸èè»èèªè¼èèè·è«èè®èè©èè¬è¯è¹èµèè¢è¹è¿èèèè»èèèèèè¡è¡è¿è´èèè¬èèèè¼èè£èè"],["e9a1","èèèèèè¤èèèè¨èèèèªèèè·è¾èèèºèè¹èèèè¥èè¹èèèè¾èºèè¢èè°è¿èä¹èèè§è±èè£è©èªèèè¶è¯èèè°èè £è«èèè©è¬èèè¯èèèèèè»èèèè¹èè´è¿è·è»è¥è©èè èè¸èèè´èè¨è®è"],["eaa1","èè£èªè
è¢èèè¯èè½èèéè«èè³èèè»è¯è²è è è è¾è¶è·è èè è è è ¢è ¡è ±è ¶è ¹è §è »è¡è¡è¡è¡è¡è¡¢è¡«è¢è¡¾è¢è¡µè¡½è¢µè¡²è¢è¢è¢è¢®è¢è¢¢è¢è¢¤è¢°è¢¿è¢±è£è£è£è£è£è£è£¹è¤è£¼è£´è£¨è£²è¤è¤è¤è¤è¥è¤è¤¥è¤ªè¤«è¥è¥è¤»è¤¶è¤¸è¥è¤è¥ è¥"],["eba1","襦襤è¥è¥ªè¥¯è¥´è¥·è¥¾è¦è¦è¦è¦è¦è¦¡è¦©è¦¦è¦¬è¦¯è¦²è¦ºè¦½è¦¿è§è§è§è§è§§è§´è§¸è¨è¨è¨è¨è¨è¨è¨¥è¨¶è©è©è©è©è©è©¼è©è©¬è©¢èª
èªèªèª¨èª¡èªèª¥èª¦èªèª£è«è«è«è«è««è«³è«§è«¤è«±è¬è« 諢諷è«è«è¬è¬è¬è«¡è¬è¬è¬è¬ 謳é«è¬¦è¬«è¬¾è¬¨èèèèèèèèè«"],["eca1","èè¬è¯è´è½è®è®è®è®è®è®è®è®è°ºè±è°¿è±è±è±è±è±è±¢è±¬è±¸è±ºè²è²è²
è²è²è²è²è±¼è²æè²è²ªè²½è²²è²³è²®è²¶è³è³è³¤è³£è³è³½è³ºè³»è´è´
è´è´è´è´è´é½è´è³è´è´èµ§èµèµ±èµ³è¶è¶è·è¶¾è¶ºè·è·è·è·è·è·è·ªè·«è·è·£è·¼è¸è¸è·¿è¸è¸è¸è¸è¹è¸µè¸°è¸´è¹"],["eda1","è¹è¹è¹è¹è¹è¹è¹¤è¹ 踪蹣è¹è¹¶è¹²è¹¼èºèºèº
èºèºèºèºèºèºèºèºªèº¡èº¬èº°è»èº±èº¾è»
è»è»è»è»£è»¼è»»è»«è»¾è¼è¼
è¼è¼è¼è¼è¼è¼è¼è¼è¼¦è¼³è¼»è¼¹è½
è½è¼¾è½è½è½è½è½è½è½¢è½£è½¤è¾è¾è¾£è¾è¾¯è¾·è¿è¿¥è¿¢è¿ªè¿¯éè¿´é
迹迺ééé¡ééééé§é¶éµé¹è¿¸"],["eea1","ééééééé¾éééé¨é¯é¶é¨é²éé½éééééé¨é¯é±éµé¢é¤æééééé²é°é
é
é
é
£é
¥é
©é
³é
²éééé¢é«é¯éªéµé´éºéééééééé¡éé¼éµé¶éé¿éé¬ééééé
éé¤ééé¿ééééééééé¹é·é©ééºéé®"],["efa1","éé¢éé£éºéµé»éé é¼é®éé°é¬ééé¹ééé¨é¥éééééé¤ééééééé¶é«éµé¡éºééééé é¢ééªé©é°éµé·é½éé¼é¾éé¿éééééééé é¨é§éé¼é»é¹é¾éæ¿¶éééééééé¡é¥é¢é¡é¨é®é¯ééééé·éé"],["f0a1","ééé¦é²é¬éééééªé§é±é²é°é´é¶é¸é¹ééééè¥éééé¹éééééééééé¤éªé°é¹é½é¾ééééééé é¤é¦é¨åé«é±é¹é
é¼ééºéééééé¨é¦é£é³é´ééééééé½é²ç«é¶éµé é é ¸é ¤é ¡é ·é ½é¡é¡é¡é¡«é¡¯é¡°"],["f1a1","顱顴顳颪颯颱颶é£é£é£é£©é£«é¤é¤é¤é¤é¤é¤¡é¤é¤é¤¤é¤ 餬餮餽餾é¥é¥é¥
é¥é¥é¥é¥é¥é¥é¦é¦é¦¥é¦é¦®é¦¼é§é§é§é§é§é§é§®é§±é§²é§»é§¸é¨é¨é¨
é§¢é¨é¨«é¨·é©
é©é©é©é¨¾é©é©é©é©é©é©¢é©¥é©¤é©©é©«é©ªéªéª°éª¼é«é«é«é«é«é«é«é«¢é«£é«¦é«¯é««é«®é«´é«±é«·"],["f2a1","é«»é¬é¬é¬é¬é¬¢é¬£é¬¥é¬§é¬¨é¬©é¬ªé¬®é¬¯é¬²éééééééé´é®é®é®é®é®é®é® 鮨鮴é¯é¯é®¹é¯é¯é¯é¯é¯£é¯¢é¯¤é¯é¯¡é°ºé¯²é¯±é¯°é°é°é°é°é°é°é°é°é°é°é°®é°é°¥é°¤é°¡é°°é±é°²é±é°¾é±é± 鱧鱶鱸鳧鳬鳰é´é´é³«é´é´é´ªé´¦é¶¯é´£é´éµé´é´éµé´¿é´¾éµéµ"],["f3a1","éµéµéµ¤éµéµéµéµ²é¶é¶é¶«éµ¯éµºé¶é¶¤é¶©é¶²é·é·é¶»é¶¸é¶ºé·é·é·é·é·é·¸é·¦é·é·¯é·½é¸é¸é¸é¹µé¹¹é¹½éºéºéºéºéºéºéºéºéº¥éº©éº¸éºªéºé¡é»é»é»é»é»é»é»é»é» 黥黨黯黴黶黷黹黻黼黽é¼é¼ç·é¼é¼¡é¼¬é¼¾é½é½é½é½£é½é½ 齡齦齧齬齪齷齲齶é¾é¾é¾ "],["f4a1","å ¯æ§éç¤åç"],["f9a1","çºè¤ééèä¿ç»æ±æ£é¹æ»å½
丨仡仼ä¼ä¼ä¼¹ä½ä¾ä¾ä¾ä¾ä¿åå¢ä¿¿ååå°ååå´åå
å
¤åå¾å¬ååå¦ååååå¤å²åå²åï¨ååå©å¿ååå¥å¬ååï¨ï¨å¢å¢²å¤å¥å¥å¥å¥£å¦¤å¦ºåå¯ç¯å¯å¯¬å°å²¦å²ºå³µå´§åµï¨åµåµå¶¸å¶¹å·å¼¡å¼´å½§å¾·"],["faa1","å¿ææ
ææææ æ²ææ·æ°æææ¦æµæ ææææææ»ææ®ææ¤æ¥ææï¨æ³ææ æ²æ¿æºæï¤©æ¦æ»æ¡ææ æ¡æ£ï¨æ¥¨ï¨æ¦æ§¢æ¨°æ©«æ©æ©³æ©¾æ«¢æ«¤æ¯æ°¿æ±æ²æ±¯æ³æ´æ¶æµ¯æ¶æ¶¬æ·æ·¸æ·²æ·¼æ¸¹æ¹æ¸§æ¸¼æº¿æ¾æ¾µæ¿µç
çç¨ç
ç«ççç
ç
ç
ï¨çç¾ç±"],["fba1","ç¾ç¤ï¨ç·ç½ççç£çççµç¦çªç©ç®ç¢çççç¯ççççç¦ï¨çå¯ç ¡ç¡ç¡¤ç¡ºç¤°ï¨ï¨ï¨ç¦ï¨ç¦ç«ç«§ï¨ç««ç®ï¨çµçµç¶·ç¶ ç·ç¹ç½ç¾¡ï¨èè¢è¿èè¶èè´èèè«ï¨è°ï¨ 﨡è 裵è¨è¨·è©¹èª§èª¾è«ï¨¢è«¶èè¿è³°è³´è´èµ¶ï¨£è»ï¨¤ï¨¥é§é都éé§é"],["fca1","éééé®é¤é¥ééééºéé¼éééé¹é§é§é·é¸é§ééé﨧éé éé¥é¡é»ï¨¨éé¿ééé°éé¤ééé¸é±é
ééï§ï¨©éé¯é³é»éééééé¡é¡¥ï¨ªï¨«é¤§ï¨¬é¦é©é«é«éµé²é®é®±é®»é°éµ°éµ«ï¨é¸é»"],["fcf1","â
°",9,"¬¦ï¼ï¼"],["8fa2af","Ë˸Ë˯ËËï½ÎÎ
"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®â¢Â¤â"],["8fa6e1","ÎÎÎÎΪ"],["8fa6e7","Î"],["8fa6e9","ÎΫ"],["8fa6ec","Î"],["8fa6f1","άÎήίÏÎÏÏÏÏΰÏ"],["8fa7c2","Ð",10,"ÐÐ"],["8fa7f2","Ñ",10,"ÑÑ"],["8fa9a1","ÃÄ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ÅÄ¿"],["8fa9ab","ÅÃÅ"],["8fa9af","ŦÃ"],["8fa9c1","æÄðħıijĸÅÅÅÅøÅÃŧþ"],["8faaa1","ÃÃÃÃÄÇÄÄÃ
ÃÄÄÄÃÄÄÃÃÃÃÄÄÄÄ"],["8faaba","ÄÄÄ¢Ä Ä¤ÃÃÃÃÇİĪĮĨĴĶĹĽĻÅÅÅ
ÃÃÃÃÃÇÅÅÃÅÅÅÅÅÅ ÅŤŢÃÃÃÃŬÇŰŪŲŮŨÇÇÇÇŴßŶŹŽŻ"],["8faba1","áà äâÄÇÄÄ
åãÄÄÄçÄÄéèëêÄÄÄÄǵÄÄ"],["8fabbd","ġĥÃìïîÇ"],["8fabc5","īįĩĵķĺľļÅÅÅñóòöôÇÅÅõÅÅÅÅÅÅ¡ÅťţúùüûÅÇűūųůũÇÇÇÇŵýÿŷźžż"],["8fb0a1","ä¸ä¸ä¸
ä¸ä¸ä¸ä¸£ä¸¤ä¸¨ä¸«ä¸®ä¸¯ä¸°ä¸µä¹ä¹ä¹ä¹ä¹ä¹ä¹ä¹£ä¹¨ä¹©ä¹´ä¹µä¹¹ä¹¿äºäºäºäºäº¯äº¹ä»ä»ä»ä»ä» 仡仢仨仯仱仳仵份仾仿ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼ä¼®ä¼±ä½ 伳伵伷伹伻伾ä½ä½ä½ä½ä½ä½ä½ä½ä½ä½ä½ä½£ä½ªä½¬ä½®ä½±ä½·ä½¸ä½¹ä½ºä½½ä½¾ä¾ä¾ä¾"],["8fb1a1","ä¾
ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾ä¾²ä¾·ä¾¹ä¾»ä¾¼ä¾½ä¾¾ä¿ä¿ä¿
ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ä¿ 俢俰俲俼俽俿åååååååååååååååå¢å§å®å°å²å³åµåååå
ååååååååååå å¢å£å¦å§åªåå°å±å»åååååååå"],["8fb2a1","ååååååå",4,"åªå¯å°å¹åºå½åååååååååååååå¢å¤å¦å¨å©å¯å±å¶åºå¾ååååååååå²åååååååå£å§å¨å¬åå¯å±å³å´åµå¸å¹å
å
å
å
å
å
å
å
å
¤å
¦å
¾ååååååå¡å£åå¸åºå¼å¾å¿å"],["8fb3a1","ååååååååå¢å¥å®å²å³å´å·ååå
åååååå¢å¨å±å²åµå¼å
åååååååå å¡å¦å®å·å¸å¹ååå
åååååååååå¤å¥å¦å§å¯å°å¶å·å¸åºå»å½åååååååååååå¡å¥å¨å©åªå¬å°å±å´å¶å·åååå"],["8fb4a1","ååååååååå¥å§å¨å©å«å¬åå°å²åµå¼å½å¾åååååå¡å£å¥å¬åå²å¹å¾ååååååååå¡å¤åªå«å¯å²å´åµå·å¸åºå½åå
åååååååå å¦å§åµåååå¡å§å¨åªå¯å±å´åµååååååå¢å¤å¦å§å©å«åå®å´å¿"],["8fb5a1","ååå
ååååååååå¡å¦å§å©åªåå®å±å·å¹åºå»å¿ååååå åªå¬å¯å¶å¼å¾å¿ååå
åååååååªå«å²åµå¶å»å¼å½åååååååååååå å¡å¤å¦å¿åååååååååååå£å¤åå²å¿ååååååååå"],["8fb6a1","åååååå¢å©å¶å¿å
ååå",5,"åå¬å°å³åµå·å¹å»å¼å½å¿åååååååååååå å¡å¢å£å¦å©åå¯å±å²åµåå
åååååååååå¦å§å¨å©å«å¬åå±å³å·å¾å
åååååååååååå¡å¤",4,"å±å«å"],["8fb7a1","å¶å·ååååååååååå å¢å£å¤å¥å©åªå¬å®å¯å³å´å½å¾å¿å
ååååå¢å¥å§å¨å«å",4,"å³å´åµå·å¹åºå»å¼å¾åååååååååååå¡åå§å¨å©å¬å¸å½åååååååå¤å¦å§å©åå°åµå¶å¸å½å¾å¿å å å å å¡"],["8fb8a1","å å å å å å å ¦å §å å ²å ¹å ¿å¡å¡å¡å¡å¡å¡å¡å¡¡å¡¤å¡§å¡¨å¡¸å¡¼å¡¿å¢å¢å¢å¢å¢å¢å¢å¢å¢å¢å¢å¢å¢å¢ 墡墢墦墩墱墲å£å¢¼å£å£å£å£å£å£å£å£å£å£å£¡å£¢å£©å£³å¤
å¤å¤å¤å¤å¤å¤èå¤å¤¡å¤£å¤¤å¤¨å¤¯å¤°å¤³å¤µå¤¶å¤¿å¥å¥å¥å¥å¥å¥å¥å¥å¥å¥¡å¥£å¥«å¥"],["8fb9a1","奯奲奵奶她奻奼å¦å¦å¦å¦å¦å¦å¦å¦¤å¦§å¦å¦®å¦¯å¦°å¦³å¦·å¦ºå¦¼å§å§å§å§å§å§å§å§å§å§å§£å§¤å§§å§®å§¯å§±å§²å§´å§·å¨å¨å¨å¨å¨å¨å¨å¨å¨£å¨¤å¨§å¨¨å¨ªå¨å¨°å©å©
å©å©å©å©å©å©å©£å©¥å©§å©å©·å©ºå©»å©¾åªåªåªåªåªåªåªåªåª 媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","å«å«å«å«å«å«å« 嫥嫪嫮嫵嫶嫽å¬å¬å¬å¬å¬´å¬å¬å¬å¬¡å¬¥å¬å¬¸ååååååå¨å®å¯å¼å½å¾å¿å®å®å®å®å®å®å®å®å®å®å®¨å®©å®¬å®å®¯å®±å®²å®·å®ºå®¼å¯å¯å¯å¯å¯",4,"å¯ å¯¯å¯±å¯´å¯½å°å°å°å°å°£å°¦å°©å°«å°¬å°®å°°å°²å°µå°¶å±å±å±å±¢å±£å±§å±¨å±©"],["8fbba1","å±å±°å±´å±µå±ºå±»å±¼å±½å²å²å²å²å²å²å²å² 岢岣岦岪岲岴岵岺å³å³å³å³å³å³®å³±å³²å³´å´å´å´å´å´«å´£å´¤å´¦å´§å´±å´´å´¹å´½å´¿åµåµåµåµåµåµåµåµåµåµ 嵡嵢嵤嵪åµåµ°åµ¹åµºåµ¾åµ¿å¶å¶å¶å¶å¶å¶å¶å¶å¶å¶å¶å¶ 嶧嶫嶰嶴嶸嶹å·å·å·å·å·å·å·å· å·¤"],["8fbca1","巩巸巹å¸å¸å¸å¸å¸å¸å¸å¸å¸ 帮帨帲帵帾å¹å¹å¹å¹å¹å¹å¹å¹å¹å¹¨å¹ª",4,"å¹°åºåºåºåº¢åº¤åº¥åº¨åºªåº¬åº±åº³åº½åº¾åº¿å»å»å»å»å»å»å»å»å»å»å»¥å»«å¼å¼å¼å¼å¼å¼å¼å¼å¼¡å¼¢å¼£å¼¤å¼¨å¼«å¼¬å¼®å¼°å¼´å¼¶å¼»å¼½å¼¿å½å½å½
å½å½å½å½å½å½å½ 彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾å¾å¾å¾å¾å¾å¾å¾¢å¾§å¾«å¾¤å¾¬å¾¯å¾°å¾±å¾¸å¿å¿å¿å¿å¿å¿",4,"å¿å¿¡å¿¢å¿¨å¿©å¿ªå¿¬å¿å¿®å¿¯å¿²å¿³å¿¶å¿ºå¿¼ææææææææææ¤ææ³æµæææææææææææ¡æ§æ±æ¾æ¿ææææææææææææ¢æ¤æ¥æ¨æ°æ±æ·"],["8fbea1","æ»æ¾æææææææææææææææ¢æ¥æ²æµæ¸æ¼æ½æææææ",4,"ææææææ¢æªæ«æ°æ±æµæ¶æ·æ¹æ
æ
æ
æ
æ
æ
æ
¾
²æ
¸æ
Ⱦ
¼æ
¿ææææææææææææææ æ¥æ¨æªææ¸æ¹æ¼æææææææææææ¡æ¢æ§æ©æ¥"],["8fbfa1","æ¬ææ¯ææææææææ æ¢æ£æ§æ©æ«æ¹æ½æææææææææææææ¤ææ¯æ³æºæ½æææææ¦æ¨æ³æ¶æ·æºæ¾æ¿ææææææªæ²æ´æ¼æ½ææææææææææ©æªææµæ¶æ¹æ¼ææææææææææææææ¥æ¦æ¬ææ±æ´æµ"],["8fc0a1","æ¸æ¼æ½æ¿æææææææææææ¤æ¦ææ®æ¯æ½ææ
ææææææææ æ¥æªæ¬æ²æ³æµæ¸æ¹ææææææææ æ¢æ¤æ¥æ©æªæ¯æ°æµæ½æ¿ææææææææææææ æ¡æ£ææ³æ´æ»æ½æ
ææææææææææ¡æ£æ¦æ¨æ¬æ³æ½æ¾æ¿"],["8fc1a1","æææææææææææ¤æ¥æ©æªææ°æµæ·æ»æ¿ææææææææææææææ¢æ¦æ©æ®æ±æºæ¼æ½ææææææææ æ§æ«æºæ½ææ
ææææææ æ£æ¦æ®æ²æ³æ´æ¿ææææææææææ°æ²æ´æµæ¹æ¾æ¿ææææææææææ"],["8fc2a1","ææ¡æ¢æ£æ¤æ¦æ©æªæ«æ¬æ®æ°æ±æ³æ¹æ·ææ
æææææææææææ æ¡æ»æªæ«æ¬æ¾æ³æµæ¿æ·æ¸æ¹æ»ææ¼æææææææææææ æ¤ææ±æ²æµæ»æ¿æææææææææææ¨æ«æ¬æ®æºæ
ææææææ æ¢æ³æ¾æ
ææææææ"],["8fc3a1","æ¦æ¬æ®æ´æ¶æ»æææææææææææ°æ±æ²æµæ»æ¼æ½æ¹ææææ
æææææææ¡æ¦æ°æ²æ¶æ·æ¡æ æ æ æ æ ¨æ §æ ¬æ æ ¯æ °æ ±æ ³æ »æ ¿æ¡æ¡
æ¡æ¡æ¡æ¡æ¡æ¡æ¡«æ¡®",4,"æ¡µæ¡¹æ¡ºæ¡»æ¡¼æ¢æ¢æ¢æ¢æ¢æ¢æ¢æ¢æ¢¡æ¢£æ¢¥æ¢©æ¢ªæ¢®æ¢²æ¢»æ£
æ£æ£æ£"],["8fc4a1","æ£æ£æ£æ£æ£æ£æ£æ£¥æ£¨æ£ªæ£«æ£¬æ£æ£°æ£±æ£µæ£¶æ£»æ£¼æ£½æ¤æ¤æ¤æ¤æ¤æ¤æ¤æ¤æ¤±æ¤³æ¤µæ¤¸æ¤»æ¥æ¥
æ¥æ¥æ¥æ¥æ¥£æ¥¤æ¥¥æ¥¦æ¥¨æ¥©æ¥¬æ¥°æ¥±æ¥²æ¥ºæ¥»æ¥¿æ¦æ¦æ¦æ¦æ¦æ¦¡æ¦¥æ¦¦æ¦¨æ¦«æ¦æ¦¯æ¦·æ¦¸æ¦ºæ¦¼æ§
æ§æ§æ§æ§æ§¢æ§¥æ§®æ§¯æ§±æ§³æ§µæ§¾æ¨æ¨æ¨æ¨æ¨æ¨æ¨æ¨æ¨ 樤樨樰樲"],["8fc5a1","樴樷樻樾樿æ©
æ©æ©æ©æ©æ©æ©æ©æ©æ©æ©æ©¤æ©§æ©ªæ©±æ©³æ©¾æªæªæªæªæªæªæªæªæªæªæªæª¥æª«æª¯æª°æª±æª´æª½æª¾æª¿æ«æ«æ«æ«æ«æ«æ«æ«æ«æ«æ«¤æ«§æ«¬æ«°æ«±æ«²æ«¼æ«½æ¬æ¬æ¬æ¬æ¬æ¬æ¬æ¬æ¬æ¬æ¬æ¬¤æ¬¨æ¬«æ¬¬æ¬¯æ¬µæ¬¶æ¬»æ¬¿ææææææææ æ§æ«æ®æ°æµæ½"],["8fc6a1","æ¾æ®æ®
æ®æ®æ®æ® æ®¢æ®£æ®¨æ®©æ®¬æ®æ®®æ®°æ®¸æ®¹æ®½æ®¾æ¯æ¯æ¯æ¯æ¯æ¯æ¯¡æ¯£æ¯¦æ¯§æ¯®æ¯±æ¯·æ¯¹æ¯¿æ°æ°æ°
æ°æ°æ°æ°æ°æ°æ°æ°¦æ°§æ°¨æ°¬æ°®æ°³æ°µæ°¶æ°ºæ°»æ°¿æ±æ±æ±æ±æ±æ±æ±æ±æ±æ±«æ±æ±¯æ±´æ±¶æ±¸æ±¹æ±»æ²
æ²æ²æ²æ²æ²æ²æ²æ²æ²æ²°æ²²æ²´æ³æ³æ³æ³æ³æ³æ³æ³æ³"],["8fc7a1","æ³æ³æ³ æ³§æ³©æ³«æ³¬æ³®æ³²æ³´æ´æ´æ´æ´æ´æ´æ´æ´æ´¦æ´§æ´¨æ±§æ´®æ´¯æ´±æ´¹æ´¼æ´¿æµæµæµæµ¡æµ¥æµ§æµ¯æµ°æµ¼æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶æ¶ªæ¶¬æ¶´æ¶·æ¶¹æ¶½æ¶¿æ·æ·æ·æ·æ·æ·æ·æ·æ·æ· æ·¢æ·¥æ·©æ·¯æ·°æ·´æ·¶æ·¼æ¸æ¸æ¸æ¸¢æ¸§æ¸²æ¸¶æ¸¹æ¸»æ¸¼æ¹æ¹
æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹æ¹"],["8fc8a1","æ¹¢æ¹£æ¹¨æ¹³æ¹»æ¹½æºæºæºæº æº§æºæº®æº±æº³æº»æº¿æ»æ»æ»æ»æ»æ»æ»æ»æ»æ»«æ»æ»®æ»¹æ»»æ»½æ¼æ¼æ¼æ¼æ¼æ¼æ¼æ¼æ¼æ¼¦æ¼©æ¼ªæ¼¯æ¼°æ¼³æ¼¶æ¼»æ¼¼æ¼æ½æ½æ½æ½æ½æ½æ½æ½æ½æ½¡æ½¢æ½¨æ½¬æ½½æ½¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾æ¾ 澥澦澧澨澮澯澰澵澶澼æ¿
æ¿æ¿æ¿"],["8fc9a1","æ¿æ¿æ¿¨æ¿©æ¿°æ¿µæ¿¹æ¿¼æ¿½çç
ççççç ç£ç¯ç´ç·ç¹ç¼çççççççççççç¤ç¥ç¬ç®çµç¶ç¾çç
çç",4,"çç¤ç«ç°ç±ç´ç·ççççççççç¤çºç",4,"ççççç ç«çç¯ç°ç±ç¸ç
ç
ç
ç
ç
ç
ç
ç
ç
ç
ç
ç
ç
"],["8fcaa1","ç
¨ç
¹çç
çççççç ç¢ç¯ç°ç²ç³çºç¿ççççççççççç¸ç¾çççççççççç¤ç«ç¯ç´ç¸ç¹çççç
çççççççççç ç£ç¨ç«ç®ç¯ç±ç·ç¸ç»ç¼ç¿ççççççç¨çç®ç±ç´ç¾ççççççççç¥ç³ç´çºç»"],["8fcba1","ç¾ççç
ççççççççç¢ç¤ç§ç¨ç¬ç±ç²çµçºç»ç½çççççççççç ç¦ç§ç©ç«ç¬ç®ç¯ç±ç·ç¹ç¼çççç
ççççççççççç ç¢ç¥ç¦çªç«ççµç·ç¹ç¼ç½ç¿ç
ççççççççççç¡ç£ç¦ç§ç©ç´çµç·ç¹çºç»ç½"],["8fcca1","ç¿ççççççççç¤ç¦ç¨",9,"ç¹çççççççççççç¢ç¦ç§ç¨ç«çç®ç±ç²ççç
ççççççççççççç ç¡ç£ç¦ç¨ç©çªç«ç®ç¯ç±ç²çµç¹ç»ç¿ççççççççççç¤ç¨çªç«ç¯ç´çºç»ç¼ç¿ç"],["8fcda1","çççç ç¡ç¤ç§ç©çªç¯ç¶ç¹ç½ç¾ç¿ççççççççççç¡ç¯ç±ç¹",5,"çç
ççççççç¢ç¤ç´çºç¿ççççççççççç ç¡ç¤ç§ç¬ç®ç¯ç±ç¹ççççççççççççççççççç£ç¥ç¦ç©çç²ç³çµç¸ç¹"],["8fcea1","çºç¼çççççç
çççççç¤ç¥çç®ç¯ç±ç´çç
çççççççç ç¢",6,"çªçç½çç
ççççççç ç¦ç¨ç¬ç°ç±ç¶ç¹ç¼çççççççççççç¢ç¨çç®ç¯ç´çµç¶ç¹ç½ç¾çç
çççççççççççç ç¢"],["8fcfa1","ç¤ç§çªç¬ç°ç²ç³ç´çºç½çççççççççç¢ç§çªç®ç¯ç±çµç¾ççççççççç ç¤ç¦çªç¬ç°ç±ç´ç¸ç»ç
ç ç ç ç ç ç ç ¡ç ¢ç £ç ç ®ç °ç µç ·ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ç¡ 硡硣硤硨硪确硺硾ç¢ç¢ç¢ç¢ç¢¡ç¢ç¢ç¢ç¢¤ç¢¨ç¢¬ç¢ç¢°ç¢±ç¢²ç¢³"],["8fd0a1","碻碽碿ç£ç£ç£ç£ç£ç£ç£ç£ç£ç£¤ç£ç£ç£ 磡磦磪磲磳ç¤ç£¶ç£·ç£ºç£»ç£¿ç¤ç¤ç¤ç¤ç¤ç¤ç¤ç¤ 礥礧礩ç¤ç¤±ç¤´ç¤µç¤»ç¤½ç¤¿ç¥ç¥
ç¥ç¥ç¥ç¥ç¥ç¥ç¥ç¥ç¥ç¥§ç¥©ç¥«ç¥²ç¥¹ç¥»ç¥¼ç¥¾ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦ç¦¡ç¦¨ç¦©ç¦«ç¦¯ç¦±ç¦´ç¦¸ç¦»ç§ç§ç§ç§ç§ç§ç§ç§ç§ç§ç§"],["8fd1a1","ç§ ç§¢ç§¥ç§ªç§«ç§ç§±ç§¸ç§¼ç¨ç¨ç¨ç¨ç¨ç¨ç¨ç¨ç¨ç¨ç¨¡ç¨§ç¨«ç¨ç¨¯ç¨°ç¨´ç¨µç¨¸ç¨¹ç¨ºç©ç©
ç©ç©ç©ç©ç©ç©ç©ç©ç©ç© 穥穧穪ç©ç©µç©¸ç©¾çªçªçª
çªçªçªçªçªçªçªçª 窣窬窳窵窹窻窼ç«ç«ç«ç«ç«ç«ç«¨ç«©ç««ç«¬ç«±ç«´ç«»ç«½ç«¾ç¬ç¬ç¬ç¬£ç¬§ç¬©ç¬ªç¬«ç¬ç¬®ç¬¯ç¬°"],["8fd2a1","笱笴笽笿çççççç ç¤ç¦ç©çªçç¯ç²ç³ç·ç®ç®ç®ç®ç®ç®ç®ç®ç® 箥箬箯箰箲箵箶箺箻箼箽ç¯ç¯
ç¯ç¯ç¯ç¯ç¯ç¯ç¯ç¯ç¯¨ç¯ªç¯²ç¯´ç¯µç¯¸ç¯¹ç¯ºç¯¼ç¯¾ç°ç°ç°ç°ç°ç°ç°ç°ç°ç°ç°ç°ç° 簥簦簨簬簱簳簴簶簹簺ç±ç±ç±ç±ç±ç±ç±",5],["8fd3a1","籡籣籧籩ç±ç±®ç±°ç±²ç±¹ç±¼ç±½ç²ç²ç²ç²ç²ç² 粦粰粶粷粺粻粼粿ç³ç³ç³ç³ç³ç³ç³ç³ç³ç³ç³ç³ç³ç³¦ç³©ç³«ç³µç´ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´ç´£ç´¦ç´ªç´ç´±ç´¼ç´½ç´¾çµçµçµçµçµçµçµçµçµçµçµçµçµ¥çµ§çµªçµ°çµ¸çµºçµ»çµ¿ç¶ç¶ç¶ç¶
ç¶ç¶ç¶ç¶ç¶ç¶ç¶ç¶ç¶"],["8fd4a1","ç¶ç¶¦ç¶§ç¶ªç¶³ç¶¶ç¶·ç¶¹ç·",4,"ç·ç·ç·ç·ç·ç¸ç·¢ç·¥ç·¦ç·ªç·«ç·ç·±ç·µç·¶ç·¹ç·ºç¸ç¸ç¸ç¸ç¸ç¸ç¸ç¸ 縧縨縬ç¸ç¸¯ç¸³ç¸¶ç¸¿ç¹ç¹
ç¹ç¹ç¹ç¹ç¹ç¹ç¹¡ç¹¢ç¹¥ç¹«ç¹®ç¹¯ç¹³ç¹¸ç¹¾çºçºçºçºçºçºçºçºçºçºçºç¼¼ç¼»ç¼½ç¼¾ç¼¿ç½ç½ç½ç½ç½ç½ç½ç½ç½ç½¡ç½£ç½¤ç½¥ç½¦ç½"],["8fd5a1","罱罽罾罿ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾ç¾¡ç¾¢ç¾¦ç¾ªç¾ç¾´ç¾¼ç¾¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿ç¿£ç¿¥ç¿¨ç¿¬ç¿®ç¿¯ç¿²ç¿ºç¿½ç¿¾ç¿¿èèèèèèèèèèèèèè è¤è¦è¬è®è°è´èµè·è¹èºè¼è¾èèè è¤è¦èè±èµèèèèèè¦è§è«è¸è¹èèèèèèèèè èè®"],["8fd6a1","è°è²è³è¶è¹èºè¾èèèèèèèè è¤è§è¬è°èµèºè¼è
è
è
è
è
è
è
è
¡è
§è
¨è
©è
è
¯è
·èèèè
èèèèèèèè¢è®è²è´è»èèè
èèèèèèèèè¡è¤è«è¬è°è±è²èµè¶è¸è¹è½è¿èèèèèèèèè¡è¢è¨è²è´èºèèè
è"],["8fd7a1","èèèèèèè è£è§èè´è»è½è¿èèèèèèèèèèèèèèè è¡è£è¤è§è¨è©èªè®è°è²è´è·èºè¼è¾è¿èèèèè è¢è¤è¨èªèè¯è¶è·è½è¾èèèèèèèèèèèè¡è¢è¬èè®è°è³è·èºè¼è½èèèèèèèèèèè°è¸"],["8fd8a1","è½è¿èèèèèèèèèèèèèè¦è§è©è¬è¾è¿èèèèèèèèèè¨èªè¶è¸è¹è¼èèèèèèèèè¯è¹è
èèèèèèèèèèèèè è¤è¥è§èªè°è³è´è¶è¸è¼è½èè
èèèèè¦è¨è©èªè¯è±è´èºè½è¾èèèèèèè"],["8fd9a1","èè§èªè¯è°è±è²è·è²èºè»è½èèèèèèèèè¢è£è¤è¥è§èªè«è¯è³è´è¶è¿èè",4,"èèè",6,"è¤è«è¯è¹èºè»è½è¿èè
èèèèèèèèèè è¢è¥è§è´è¶è·è¸è¼è½è¾è¿èèèèèèèèèè è¦è¨èè³è¶è¼"],["8fdaa1","è¿èèè
èèèèèèèèèè¡è§è©è¶è¸èºè¼è½èèèèèèèèèèè ",4,"è©è¬è¯èµè¶è·èºèèèèèèè¡è¦è§è¨èè±è³è´èµè·è¸è¹è¿èèèè
èèèèèèè è£è¥è§èèºè¼è½èè
èèèèèèèèèèè¡è£"],["8fdba1","è¨è®è¯è±è²è¹èºè¼è½è¾èèè
èèèè¡è¤è¥è¯è±è²è»è",6,"èèèèèèèèèè è£è§è¬èè®è±èµè¾è¿èèèèèèèèèèèè¢è£è¤èªè«èè±è³è¸èºè¿è è è è è è è è è è è è è è è è è è ¨è è ®è °è ²è µ"],["8fdca1","è ºè ¼è¡è¡è¡
è¡è¡è¡è¡è¡è¡è¡è¡è¡è¡è¡è¡è¡ 衤衩衱衹衻è¢è¢è¢è¢è¢è¢è¢ 袨袪袺袽袾è£è£",4,"è£è£è£è£è£è£§è£¯è£°è£±è£µè£·è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤è¤ 褦褧褨褰褱褲褵褹褺褾è¥è¥è¥
è¥è¥è¥è¥è¥è¥è¥è¥è¥¡è¥¢è¥£è¥«è¥®è¥°è¥³è¥µè¥º"],["8fdda1","襻襼襽è¦è¦è¦è¦è¦è¦è¦è¦è¦ 覥覰覴覵覶覷覼è§",4,"觥觩觫è§è§±è§³è§¶è§¹è§½è§¿è¨è¨
è¨è¨è¨è¨è¨è¨è¨è¨ 訢訤訦訫訬訯訵訷訽訾è©è©è©
è©è©è©è©è©è©è©è©è©è©è©¡è©¥è©§è©µè©¶è©·è©¹è©ºè©»è©¾è©¿èªèªèªèªèªèªèªèªèªèªèªèª§èª©èª®èª¯èª³"],["8fdea1","誶誷誻誾è«è«è«è«è«è«è«è«è«è«è«è«è«¬è«°è«´è«µè«¶è«¼è«¿è¬
è¬è¬è¬è¬è¬è¬è¬è¬è¬°è¬·è¬¼è",4,"èèèèèèèè£èè¶è¸è¹è¼è¾è®è®è®
è®è®è®è®è®è®è®è®è°¸è°¹è°½è°¾è±
è±è±è±è±è±è±è±è±è±è±è±è±è±£è±¤è±¦è±¨è±©è±è±³è±µè±¶è±»è±¾è²"],["8fdfa1","è²è²è²è²è²è²è²è²è²¤è²¹è²ºè³
è³è³è³è³è³è³è³è³è³¡è³¨è³¬è³¯è³°è³²è³µè³·è³¸è³¾è³¿è´è´è´è´è´è´èµ¥èµ©èµ¬èµ®èµ¿è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶ 趦趫趬趯趲趵趷趹趻è·è·
è·è·è·è·è·è·è·è·è·è·è·¤è·¥è·§è·¬è·°è¶¼è·±è·²è·´è·½è¸è¸è¸
è¸è¸è¸è¸è¸è¸ 踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽è¹è¹è¹è¹è¹è¹è¹è¹è¹è¹è¹è¹¡è¹¢è¹©è¹¬è¹è¹¯è¹°è¹±è¹¹è¹ºè¹»èºèºèºèºèºèºèºèºèºèºèº¢èº§èº©èºèº®èº³èºµèººèº»è»è»è»è»è»è»è»è»è»è»¨è»®è»°è»±è»·è»¹è»ºè»è¼è¼è¼è¼è¼è¼è¼è¼è¼è¼è¼ 輡輣輥輧輨輬è¼è¼®è¼´è¼µè¼¶è¼·è¼ºè½è½"],["8fe1a1","è½è½è½è½",4,"è½è½è½è½¥è¾è¾ 辡辤辥辦辵辶辸达è¿è¿è¿è¿è¿è¿è¿è¿è¿è¿è¿ 迣迤迨迮迱迵迶迻迾ééééééé¨é©é¯éªé¬éé³é´é·é¿éééééé¢é¦é§é¬é°é´é¹é
ééééééééééé é¡é¢é¥é°é²é³é´é¶é½éé¾é"],["8fe2a1","éé
éééééééééé¥éé¶é«é¯é°é´é¾é¿ééé
éééééééééééé é¥é¢é£é§é©é®é¯é±é´é¶é·é¹éºé¼é½é
é
é
é
é
é
é
é
é
é
¡é
¤é
§é
é
´é
¹é
ºé
»ééé
éééééééééé¡é¦é¨é¬éé®é°é±é²é³é¶é»é¼é½é¿"],["8fe3a1","ééé
ééééééé¤é¥é©éªé¬",5,"é·é¹é»é½éééé
ééééééééééééé£é¤é¥é¦é¨é®é¯é°é³éµé¶é¸é¹éºé¼é¾ééééééééééééééé é¡é¥é§é¨é©é®é¯é°éµ",4,"é»é¼é½é¿ééééééé"],["8fe4a1","ééé é¤é¥é§é¨é«é¯é²é¶é¸éºé»é¼é½é¿",4,"é
ééééééééééééééééé é¡é£é¥é§é¨é¬é®é°é¹é»é¿éééééééééééé¡é¤é¥é§é©éªé³é´é¶é·éééééééééééé¤é¥é§é©éªéé¯é°é±é³é´é¶"],["8fe5a1","éºé½é¿éééééééééééééé¡é£é¤é¦é¨é«é´éµé¶éºé©ééé
ééé",4,"éééééé¢é¦é§é¹é·é¸éºé»é½ééééééééééééé®é¯é±é²é³é´é»é¿é½éé
éééééééé¡é£é¨é«éé®é¯é±é²ééé¸é¹"],["8fe6a1","é¾ééééééééé¡é¦é©é«é¬é´é¶éºé½é¿éééééééééééééé é¤é¦ééé¢é¤é¥é¦é¬é±é³é·é¸é¹éºé¼é½ééééééé¡é®é´é»é¼é¾é¿ééééééééééé¤é¥é¦é©é®é¯é³éºééå¶²éééééé©é¯é±éºé"],["8fe7a1","éé
ééééé¡é¢é£é¨é±é³ééééééééééé£é§éªé®é³é¶é·é¸é»é½é¿éééééééééé¢é¬é®é±é²éµé¶é¸é¹éºé¼é¾é¿ééé
ééééééééééééééé éé¡é¤é¯é±é´é·é¸éºé é é é é é é é é é é £é ¦"],["8fe8a1","é «é ®é ¯é °é ²é ³é µé ¥é ¾é¡é¡é¡é¡é¡é¡é¡é¡é¡é¡é¡¢é¡£é¡¥é¡¦é¡ªé¡¬é¢«é¢é¢®é¢°é¢´é¢·é¢¸é¢ºé¢»é¢¿é£é£
é£é£é£¡é££é£¥é£¦é£§é£ªé£³é£¶é¤é¤é¤é¤é¤é¤é¤é¤é¤é¤é¤é¤¢é¤¦é¤§é¤«é¤±",4,"餹餺餻餼é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥é¥ é¦é¦é¦é¦¦é¦°é¦±é¦²é¦µ"],["8fe9a1","馹馺馽馿é§é§é§é§é§é§é§é§é§§é§ªé§«é§¬é§°é§´é§µé§¹é§½é§¾é¨é¨é¨é¨é¨é¨é¨é¨é¨é¨ 騢騣騤騧é¨é¨®é¨³é¨µé¨¶é¨¸é©é©é©é©é©é©é©é©é©é©é©éªªéª¬éª®éª¯éª²éª´éªµéª¶éª¹éª»éª¾éª¿é«é«é«é«é«é«é«é«é«é«é«é«é« 髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","é¬é¬
é¬é¬é¬é¬é¬é¬é¬é¬é¬é¬é¬é¬é¬ 鬦鬫é¬é¬³é¬´é¬µé¬·é¬¹é¬ºé¬½ééééééééé¡é£é¥é¦é¨éª",4,"é³éµé·é¸é¹é¿é®é®é®
é®é®é®é®é®é®é®é®é®é®é®é®é®¦é®§é®©é®¬é®°é®±é®²é®·é®¸é®»é®¼é®¾é®¿é¯é¯é¯é¯é¯é¯é¯é¯é¯é¯¥é¯§é¯ªé¯«é¯¯é¯³é¯·é¯¸"],["8feba1","鯹鯺鯽鯿é°é°é°é°é°é°é°é°é°é°é°é°¢é°£é°¦",4,"鰱鰵鰶鰷鰽é±é±é±é±
é±é±é±é±é±é±é±é±é±é±é±é±é±é±£é±©é±ªé±é±«é±¨é±®é±°é±²é±µé±·é±»é³¦é³²é³·é³¹é´é´é´é´é´é´é´é´é´¯é´°é´²é´³é´´é´ºé´¼éµ
é´½éµéµéµéµéµéµéµéµ£éµ¢éµ¥éµ©éµªéµ«éµ°éµ¶éµ·éµ»"],["8feca1","鵼鵾é¶é¶é¶é¶é¶é¶é¶é¶é¶é¶é¶é¶é¶¡é¶ªé¶¬é¶®é¶±é¶µé¶¹é¶¼é¶¿é·é·é·é·é·é·é·é·é·é·é·é· 鷥鷧鷩鷫鷮鷰鷳鷴鷾é¸é¸é¸é¸é¸é¸é¸é¸é¸é¸é¸é¸é¹ºé¹»é¹¼éºéºéºéºéº
éºéºéºéºéºéºéºéº¤éº¨éº¬éº®éº¯éº°éº³éº´éºµé»é»é»é»é»é»¤é»§é»¬é»é»®é»°é»±é»²é»µ"],["8feda1","黸黿é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼é¼¢é¼¦é¼ªé¼«é¼¯é¼±é¼²é¼´é¼·é¼¹é¼ºé¼¼é¼½é¼¿é½é½",4,"é½é½é½é½é½é½é½é½é½¨é½©é½",4,"齳齵齺齽é¾é¾é¾é¾é¾é¾é¾é¾é¾¡é¾¢é¾£é¾¥"]]
42945 42946 42947/***/ }), 42948/* 182 */ 42949/***/ (function(module, exports) { 42950 42951module.exports = {"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]} 42952 42953/***/ }), 42954/* 183 */ 42955/***/ (function(module, exports) { 42956 42957module.exports = [["0","\u000
vendor: 37,837 bytes, line 42957
429570",127],["8141","ê°ê°ê°
ê°ê°",4,"ê°ê°ê°ê°¡ê°¢ê°£ê°¥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿ê±",9,"ê±ê±",5,"ê±"],["8181","ê±ê±ê±ê±ê±ê±",18,"걲걳걵걶걹걻",4,"ê²ê²ê²ê²ê²ê²ê²ê²ê²ê²",6,"ê²ê²¢",5,"겫ê²ê²®ê²±",6,"겺겾겿ê³ê³ê³ê³
ê³ê³ê³ê³ê³ê³",7,"ê³ê³",7,"곢곣곥곦곩곫ê³ê³®ê³²ê³´ê³·",4,"곾곿ê´ê´ê´ê´
ê´",4,"ê´ê´ê´ê´"],["8241","ê´ê´ê´ê´ê´ê´ê´ê´ê´ê´ê´¡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"êµêµêµ",5,"êµêµêµêµêµêµ"],["8281","êµ",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾ê¶ê¶",4,"ê¶ê¶ê¶ê¶ê¶ê¶",10,"ê¶",5,"ê¶¥",17,"궸",7,"ê·ê·ê·
ê·ê·ê·",6,"ê·ê·",7,"ê·ê·ê·ê·¡ê·¢ê·£ê·¥",18],["8341","귺귻귽귾ê¸",5,"ê¸ê¸ê¸",5,"ê¸",7],["8361","ê¸",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹",4,"ê¹ê¹¢ê¹£ê¹¤ê¹¦ê¹§ê¹ªê¹«ê¹ê¹®ê¹¯ê¹±",6,"깺깾",5,"êº",5,"êº",46,"꺿ê»ê»ê»ê»
",6,"ê»ê»",5,"ê»ê»ê»",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","ê¼ê¼ê¼ê¼ê¼ê¼ê¼ê¼",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"ê¼¾ê½ê½ê½
ê½ê½ê½",5,"ê½",10,"ê½",5,"꽦",18,"꽺",5,"ê¾ê¾ê¾ê¾
ê¾ê¾ê¾",6,"ê¾ê¾ê¾ê¾",5,"ê¾",26,"꾺꾻꾽꾾"],["8541","꾿ê¿",5,"ê¿ê¿ê¿",4,"ê¿",6,"ê¿",4],["8561","ê¿¢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"ëë"],["8581","ë
",6,"ëëëëëëë",6,"ë",9,"ë©",26,"ëëëëëëëëëëëëëëë",29,"ë¾ë¿ëëëë
",6,"ëëë",5,"ëëëë£ë¤"],["8641","ë¥ë¦ë§ëªë°ë²ë¶ë·ë¹ëºë»ë½",6,"ëë",5,"ë"],["8661","ëëëëë",6,"ë¡ë¢ë£ë¤ë¦",10],["8681","ë±",22,"ëëëëëëëëëëë",4,"ë¦ë§ë©ëªë«ë",6,"ë¶ëº",5,"ë
ë
ë
ë
ë
ë
",6,"ë
ë
ë
ë
ë
ë
ë
ë
ë
ë
ë
¡",22,"ë
ºë
ȑ
½ë
¾ë
¿ëë",4,"ëëëëëëëëëëëëë"],["8741","ë",9,"ë©",15],["8761","ë¹",18,"ëëëëëëë"],["8781","ë",5,"ëë ",7,"ëªë«ëë®ë¯ë±",7,"ëºë¼ë¾",5,"ëëëëë",6,"ëëë",5,"ë¡",18,"ëµ",6,"ë½",26,"ëëëëëëë¡",6,"ëª",4],["8841","ë¯",4,"ë¶",5,"ë½",6,"ëëëë",4],["8861","ëëëëëëë",4,"ë¢ë¤ë§ë¨ë©ë«ëë®ë¯ë±ë²ë³ëµë¶ë·"],["8881","ë¸",15,"ëëëëëëë",4,"ëëëëë ë¡ë£ë§ë©ëªë°ë±ë²ë¶ë¼ë½ë¾ëëë
ëëë",6,"ëë",5,"ë",54,"ëëëëë ë¡ë¢ë£"],["8941","ë¦ë¨ëªë¬ëë¯ë²ë³ëµë¶ë·ë¹",6,"ëë",5,"ë"],["8961","ëëëëëë",10,"ë¢",5,"ë©ëªë«ë"],["8981","ë®",21,"ëëëëëëëëëëëëëëëë¡ë¢ë£ë¥ë¦ë§ë©",18,"ë½",18,"ë",6,"ëëëëëëë¡",6,"ëªë¬",7,"ëµ",15],["8a41","ë
",10,"ëëëëëë",6,"ë¢ë¤ë¦"],["8a61","ë§",4,"ë",18,"ëë"],["8a81","ë",4,"ë",19,"ë",5,"ë¥ë¦ë§ë©ëªë«ë",7,"ë¶ë¸ëº",5,"ëëëë
ëëë",6,"ëëëëë",5,"ëëë¡ë¢ë¥ë§",4,"ë®ë°ë²",5,"ë¹",26,"ëëëëë"],["8b41","ë",5,"ë¦ë«",4,"ë²ë³ëµë¶ë·ë¹",6,"ëë"],["8b61","ëëëëëëëëëë",6,"ëë¢",8],["8b81","ë«",52,"ë¢ë£ë¥ë¦ë§ë©ë¬ëë®ë¯ë²ë¶",4,"ë¾ë¿ëëëë
",6,"ëë",5,"ë",18,"ë",18],["8c41","ë",15,"ëëëëëë",4],["8c61","ë",6,"ë¦",5,"ë",6,"ëµ",5],["8c81","ë»",12,"ë",26,"ë¥ë¦ë§ë©",50,"ëëë¡ë¢ë£ë¥",5,"ëë®ë¯ë°ë²",16],["8d41","ë",16,"ë",8],["8d61","ë",17,"ë±ë²ë³ëµë¶ë·ë¹ëº"],["8d81","ë»",4,"ëëëë",33,"ëªë«ëë®ë±",6,"ëºë¼",7,"ë
ëëëëëë",6,"ë",9,"ë¡ë¢ë£ë¥ë¦ë§ë©",6,"ë²ë´ë¶",5,"ë¾ë¿ëëëë
",6,"ëëëëëëëë"],["8e41","ëë¡",6,"ëªë®",5,"ë¶ë·ë¹",8],["8e61","ë",4,"ëë",19],["8e81","ë",13,"ë®ë¯ë±ë²ë³ëµ",6,"ë¾ë ",4,"ë ë ë ë ë ë ",6,"ë ë ë ",5,"ë ¦ë §ë ©ë ªë «ë ",6,"ë ¶ë º",5,"ë¡ë¡ë¡ë¡
",11,"ë¡ë¡",7,"ë¡ë¡ë¡¡ë¡¢ë¡£ë¡¥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","ë¢
",7,"ë¢",17],["8f61","ë¢ ",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿ë£ë£ë£",5,"ë£ë£ë£ë£ë£ë£ë£",7,"ë£ë£ 룢",5,"룪룫ë£ë£®ë£¯ë£±",6,"룺룼룾",5,"ë¤
",18,"ë¤",6,"뤡",26,"뤾뤿ë¥ë¥ë¥ë¥
",6,"ë¥ë¥ë¥ë¥",5],["9041","ë¥ë¥ë¥ë¥ë¥ë¥¡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"ë¦ë¦ë¦ë¦ë¦",15],["9081","ë¦",12,"릮릯릱릲릳릵",6,"릾ë§ë§",5,"ë§ë§ë§ë§",4,"ë§ë§ë§ë§ 맢맦맧맩맪맫ë§",6,"ë§¶ë§»",4,"ë¨",5,"ë¨",11,"ë¨",33,"먺먻먽먾먿ë©ë©ë©ë©
ë©"],["9141","ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"ëªëªëªëªëªëª",5],["9181","ëª",20,"몪ëªëª®ëª¯ëª±ëª³",4,"몺몼몾",5,"ë«
ë«ë«ë«",14,"ë«",33,"뫽뫾뫿ë¬ë¬ë¬ë¬
",7,"ë¬ë¬ë¬",5,"ë¬ë¬ë¬ë¬ë¬ë¬ë¬¡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"ëëëëëëëë"],["9261","ëëëëë",7,"ë¢ë¤",7,"ë",4],["9281","ë²",21,"ë®ë®ë®ë®ë®ë®ë®",18,"뮥뮦뮧뮩뮪뮫ë®",6,"뮵뮶뮸",7,"ë¯ë¯ë¯ë¯
ë¯ë¯ë¯",6,"ë¯ë¯ë¯",35,"믺믻믽믾ë°"],["9341","ë°",4,"ë°ë°ë°ë°ë°ë°ë°ë° 밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","ë°¶ë°·ë°¹",6,"ë±ë±ë±ë±ë±ë±ë±ë±ë±",8],["9381","ë±ë±ë±ë±",37,"ë²ë²ë²ë²ë²ë²",4,"ë²ë²ë²",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿ë³ë³ë³ë³
",7,"ë³ë³ë³ë³ë³ë³ë³ë³ë³ë³",22,"볷볹볺볻볽"],["9441","ë³¾",5,"ë´ë´ë´",5,"ë´ë´ë´ë´",8],["9461","ë´",5,"ë´¥",6,"ë´",12],["9481","ë´º",5,"ëµ",6,"ëµëµëµëµëµëµ",6,"ëµ",9,"뵥뵦뵧뵩",22,"ë¶ë¶ë¶
ë¶ë¶",4,"ë¶ë¶ë¶ë¶ë¶ë¶ë¶",6,"ë¶¥",10,"ë¶±",6,"ë¶¹",24],["9541","ë·ë·ë·ë·ë·ë·ë·ë·",11,"ë·ª",5,"ë·±"],["9561","뷲뷳뷵뷶뷷뷹",6,"ë¸ë¸ë¸ë¸",5,"ë¸ë¸ë¸ë¸ë¸"],["9581","ë¸",6,"ë¸ë¸ ",35,"ë¹ë¹ë¹ë¹ë¹ë¹ë¹",4,"ë¹ë¹ë¹ë¹ë¹ë¹ë¹¢ë¹£ë¹¥ë¹¦ë¹§ë¹©ë¹«",4,"빲빶",4,"빾빿ëºëºëºëº
",6,"ëºëº",5,"ëº",13,"뺩",14],["9641","뺸",23,"ë»ë»"],["9661","ë»ë»ë»",6,"뻡뻢뻦",5,"ë»",8],["9681","ë»¶",10,"ë¼",5,"ë¼",13,"ë¼ë¼",33,"ë½ë½ë½
ë½ë½ë½",6,"ë½ë½ë½ë½",44],["9741","ë¾",16,"ë¾",8],["9761","ë¾",17,"ë¾±",7],["9781","ë¾¹",11,"ë¿",5,"ë¿ë¿ë¿ë¿ë¿ë¿",6,"ë¿ë¿ë¿ ë¿¢",89,"ì½ì¾ì¿"],["9841","ì",16,"ì",5,"ììì"],["9861","ìììì¡",6,"ìª",15],["9881","ìº",21,"ìììììì",6,"ì¢ì¤ì¦",5,"ì®ì±ì²ì·",4,"ì¾ììììììììììì",6,"ìì",5,"ì¦ì§ì©ìªì«ì",6,"ì¶ì¸ìº",5,"ìììì
ììì",6,"ììììì",5,"ì¡ì¢ì¥ì¨ì©ìªì«ì®"],["9941","ì²ì³ì´ìµì·ìºì»ì½ì¾ì¿ì
",6,"ì
ì
",5,"ì
ì
"],["9961","ì
ì
ì
ì
",6,"ì
¦ì
ª",5,"ì
±ì
²ì
³ì
µì
¶ì
·ì
¹ì
ºì
»"],["9981","ì
¼",8,"ì",5,"ìììììì",4,"ìì ì¢ì£ì¤ì¦ì§ìªì«ìì®ì¯ì±",11,"ì¾",5,"ì
ìììììì",6,"ììì",6,"ì¡ì¢ì£ì¥ì¦ì§ì©",6,"ì²ì´",7,"ì¾ì¿ìììì
",6,"ììì",5,"ììììì¡ì¢ì£"],["9a41","ì¤ì¥ì¦ì§ìªì¬ì®ì°ì³ìµ",16],["9a61","ììì",6,"ìììììì",6,"ì¡ì¢ì£ì¤ì¦"],["9a81","ì§",4,"ì®ì¯ì±ì²ì³ìµ",6,"ì¾ìì",5,"ì",5,"ì",6,"ìììì",5,"ì¦ì§ì©ìªì«ì®",5,"ì¶ì¸ìº",33,"ììì¡ì¢ì¥",5,"ì®ì°ì²ì³ì´ìµì·ìºì½ì¾ì¿ì",6,"ìììì"],["9b41","ììììììììì",6,"ì¦ì§ìª",8],["9b61","ì³",17,"ì",7],["9b81","ì",25,"ìªì«ìì®ì¯ì±ì³",4,"ìºì»ì¾",5,"ì
ìììììì",50,"ì",22,"ì"],["9c41","ìììì¡ì£",4,"ìªì«ì¬ì®",5,"ì¶ì·ì¹",5],["9c61","ì¿",8,"ì",6,"ì",9],["9c81","ì",8,"ì¥",6,"ìì®ì¯ì±ì²ì³ìµ",6,"ì¾",9,"ì",26,"ì¦ì§ì©ìªì«ì",6,"ì¶ì·ì¸ìº",5,"ì",18,"ì",6,"ì",12],["9d41","ìª",13,"ì¹ìºì»ì½",8],["9d61","ì",25],["9d81","ì ",8,"ìª",5,"ì²ì³ìµì¶ì·ì¹ì»ì¼ì½ì¾ì",9,"ììììììì",6,"ì",10,"ìªì«ìì®ì¯ì±",6,"ìºì¼ì¾",5,"ììììììììììììì¢ì£ì¥ì¦ì§ì©",6,"ì²ì¶",5,"ì¾ì¿ìììì
ìììììììììì"],["9e41","ìììììììì¡",7,"ìª",9,"ì¶"],["9e61","ì·ìºì¿",4,"ììììììììì",6,"ì¢ì¤ì¦ì§"],["9e81","ì¨ì©ìªì«ì¯ì±ì²ì³ìµì¸ì¹ìºì»ìììììììììì",6,"ìì",6,"ì¦ì§ì©ìªì«ì¯ì±ì²ì¶ì¸ìºì¼ì½ì¾ì¿ììì
ììì",6,"ìì",5,"ììì¡",10,"ìì®ì°ì²",5,"ìºì»ì½ì¾ì¿ì",6,"ììì",5,"ìììììì",6,"ì¦"],["9f41","ì¨ìª",5,"ì²ì³ìµì¶ì·ì»",4,"ììì",5,"ì"],["9f61","ììììì",6,"ììì¢",5,"ìªì«ìì®ì¯ì±ì²"],["9f81","ì³",4,"ìºì»ì¼ì¾",5,"ìììììì",6,"ììì",5,"ì¢ì£ì¥ì¦ì§ì©",6,"ì²ì´ì¶ì¸ì¹ìºì»ì¾ì¿ìììì
",4,"ìììììììììì¡",6,"ì©ìªì¬",7,"ì¶ì·ì¹ìºì»ì¿ììììììììììììì",4,"ì¢ì§",4,"ì®ì¯ì±ì²ì³ìµì¶ì·"],["a041","ì¸ì¹ìºì»ì¾ì",5,"ììììì",6,"ìììì"],["a061","ì",5,"ì¥ì¦ì§ì©ìªì«ì",13],["a081","ì»",4,"ì ì ì
ì ì ì ì ",4,"ì ì ì ",4,"ì ì ì ¡ì ¢ì £ì ¥",6,"ì ®ì °ì ²",5,"ì ¹ì ºì »ì ½ì ¾ì ¿ì¡",6,"ì¡ì¡ì¡",5,"ì¡",26,"졲졳졵졶졷졹졻",4,"ì¢ì¢ì¢ì¢ì¢ì¢",5,"ì¢",7,"ì¢ì¢ 좢좣좤"],["a141","좥좦좧좩",18,"좾좿ì£ì£"],["a161","ì£ì£ì£
ì£ì£ì£ì£ì£ì£",6,"ì£ì£ì£",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿ì¤ì¤ì¤ì¤",4,"ì¤ããã·â¥â¦Â¨ãÂââ¥ï¼¼â¼ââââããã",9,"±Ã÷â â¤â¥ââ´Â°â²â³ââ«ï¿ ï¿¡ï¿¥âââ â¥ââââ¡â§â»ââ
ââââââ¡â â³â²â½â¼âââââãâªâ«ââ½ââµâ«â¬âââââââªâ©â§â¨ï¿¢"],["a241","ì¤ì¤",5,"ì¤",18],["a261","ì¤",6,"줵",18],["a281","ì¥",7,"ì¥ì¥ì¥ì¥ì¥ì¥",6,"쥢쥤",7,"ì¥ì¥®ì¥¯ââââ´ï½ËËËË˸ˡ¿Ëâ®ââ¤ââ°âââ·â¶â¤â â¡â¥â§â£âââ£ââââ¤â¥â¨â§â¦â©â¨ââââ¶â â¡âââââââ©âªâ¬ã¿ãâãâ¢ããâ¡â¬Â®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"ì¦ì¦ì¦ì¦ì¦"],["a361","ì¦",6,"ì¦ì¦ì¦",16],["a381","즯",16,"ì§ì§ì§
ì§ì§ì§",4,"ì§ì§ì§ì§ì§ï¼",58,"₩]",32,"ï¿£"],["a441","ì§ì§ì§¡ì§£ì§¥ì§¦ì§¨ì§©ì§ªì§«ì§®ì§²",5,"짺짻짽짾짿ì¨ì¨ì¨ì¨"],["a461","ì¨
ì¨ì¨ì¨ì¨",5,"ì¨ì¨ì¨ì¨",12],["a481","쨦쨧쨨쨪",28,"ã±",93],["a541","ì©",4,"ì©ì©ì©ì©ì©ì©",6,"ì©ì©¢",5,"쩩쩪"],["a561","ì©«",17,"쩾",5,"ìª
ìª"],["a581","ìª",16,"ìª",14,"â
°",9],["a5b0","â
",9],["a5c1","Î",16,"Σ",6],["a5e1","α",16,"Ï",6],["a641","쪨",19,"쪾쪿ì«ì«ì«ì«
"],["a661","ì«",5,"ì«ì«ì«ì«ì«ì«ì«ì«",5,"ì«¡",6],["a681","쫨쫩쫪쫫ì«",6,"쫵",18,"ì¬ì¬ââââââââ¬â¤â´â¼âââââââ£â³â«â»ââ â¯â¨â·â¿ââ°â¥â¸ââââââââââââ¡â¢â¦â§â©âªââ®â±â²âµâ¶â¹âºâ½â¾âââ",7],["a741","ì¬",4,"ì¬ì¬ì¬ì¬ì¬ì¬ì¬",6,"쬢",7],["a761","쬪",22,"ììì"],["a781","ì
ìììììììì",6,"ìììì",5,"ì¥",7,"ãããâããã£ã¤ã¥ã¦ã",9,"ããããããããã§ã¨ã°",9,"ã",4,"ãº",5,"ã",4,"â¦ããããããã
ãã®ã¯ãã©ãªã«ã¬ããããããã"],["a841","ì",10,"ìº",14],["a861","ì®",18,"ì®",6],["a881","쮤",19,"쮹",11,"ÃêĦ"],["a8a6","IJ"],["a8a8","Ä¿ÅÃźÃŦÅ"],["a8b1","ã ",27,"â",25,"â ",14,"½â
â
¼¾â
â
â
â
"],["a941","ì¯
",14,"ì¯",10],["a961","ì¯ ì¯¡ì¯¢ì¯£ì¯¥ì¯¦ì¯¨ì¯ª",18],["a981","쯽",14,"ì°ì°ì°ì°ì°ì°",6,"ì°ì°ì° 찣찤æÄðħıijĸÅÅøÅÃþŧÅÅã",27,"â",25,"â´",14,"¹²³â´â¿ââââ"],["aa41","찥찦찪찫ì°ì°¯ì°±",6,"찺찿",4,"ì±ì±ì±ì±ì±ì±ì±"],["aa61","ì±",4,"ì±ì±",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ã",82],["ab41","ì²ì²ì²ì²ì²ì²ì²ì²ì²ì²¡",6,"첪첮",5,"ì²¶ì²·ì²¹"],["ab61","첺첻첽",6,"ì³ì³ì³",5,"ì³ì³ì³ì³",5],["ab81","ì³",8,"ì³¥",6,"ì³ì³®ì³¯ì³±",12,"ã¡",85],["ac41","쳾쳿ì´ì´",5,"ì´ì´ì´ì´ì´ì´",6,"ì´ì´ì´ì´ì´ "],["ac61","촡촢촣촥촦촧촩촪촫ì´",11,"ì´º",4],["ac81","ì´¿",28,"ìµìµìµÐ",5,"ÐÐ",25],["acd1","а",5,"Ñж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"ìµ¹",7],["ad61","ì¶",6,"ì¶",10,"ì¶ì¶ì¶ì¶ì¶ì¶ì¶ì¶"],["ad81","ì¶ ì¶¡ì¶¢ì¶£ì¶¦ì¶¨ì¶ª",5,"ì¶±",18,"ì·
"],["ae41","ì·",5,"ì·ì·ì·ì·",16],["ae61","ì·¢",5,"췩췪췫ì·ì·®ì·¯ì·±",6,"췺췼췾",4],["ae81","ì¸ì¸
ì¸ì¸ì¸ì¸ì¸ì¸",6,"ì¸ì¸ì¸ì¸ì¸",5,"츢츣츥츦츧츩츪츫"],["af41","츬ì¸ì¸®ì¸¯ì¸²ì¸´ì¸¶",19],["af61","ì¹",13,"ì¹ì¹ì¹ì¹ì¹¢",5,"칪칬"],["af81","ì¹®",5,"칶칷칹칺칻칽",6,"ìºìºìº",5,"ìºìºìºìºìºìº"],["b041","ìº",5,"캢캦",5,"캮",12],["b061","캻",5,"ì»",19],["b081","ì»",13,"컦컧컩컪ì»",6,"컶컺",5,"ê°ê°ê°ê°ê°ê°ê°ê°",7,"ê°",4,"ê° ê°¤ê°¬ê°ê°¯ê°°ê°±ê°¸ê°¹ê°¼ê±ê±ê±ê±ê±ê±ê±°ê±±ê±´ê±·ê±¸ê±ºê²ê²ê²ê²ê²
ê²ê²ê²ê²ê²ê²ê²ê²ê²ê²ê² 겡겨격겪견겯결겸겹겻겼경ê³ê³ê³ê³ê³ê³ê³ 곡곤곧골곪곬곯곰곱곳공곶과곽ê´ê´ê´"],["b141","ì¼ì¼ì¼
ì¼ì¼ì¼",6,"ì¼ì¼ì¼",5,"ì¼ì¼ì¼ì¼¡ì¼¢ì¼£"],["b161","ì¼¥",6,"켮켲",5,"ì¼¹",11],["b181","ì½
",14,"ì½ì½ì½ì½ì½ì½",6,"콦콨콪콫콬ê´ê´ê´ê´ê´ê´ê´ ê´©ê´¬ê´ê´´ê´µê´¸ê´¼êµêµ
êµêµêµêµêµêµ¡êµ£êµ¬êµêµ°êµ³êµ´êµµêµ¶êµ»êµ¼êµ½êµ¿ê¶ê¶ê¶ê¶ê¶ê¶ê¶ê¶ê¶¤ê¶·ê·ê·ê·ê·ê·ê·ê·ê·ê· 귤그극근귿ê¸ê¸ê¸ê¸ê¸ê¸ê¸ê¸°ê¸±ê¸´ê¸·ê¸¸ê¸ºê¹ê¹ê¹ê¹
ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ê¹ 깡깥깨깩깬깰깸"],["b241","ì½ì½®ì½¯ì½²ì½³ì½µì½¶ì½·ì½¹",6,"ì¾ì¾ì¾ì¾ì¾",5,"ì¾"],["b261","ì¾",18,"ì¾¢",5,"쾩"],["b281","쾪",5,"ì¾±",18,"ì¿
",6,"깹깻깼깽êºêº
êºêº¼êº½êº¾ê»ê»ê»ê»ê»ê»ê»ê»ê»ê»ê»¨ê»«ê»ê»´ê»¸ê»¼ê¼ê¼ê¼ê¼ê¼¬ê¼ê¼°ê¼²ê¼´ê¼¼ê¼½ê¼¿ê½ê½ê½ê½ê½ê½ê½ê½ê½¤ê½¥ê½¹ê¾ê¾ê¾ê¾ê¾ê¾ê¾ê¾¸ê¾¹ê¾¼ê¿ê¿ê¿ê¿ê¿ê¿ê¿ê¿ê¿ê¿¨ê¿©ê¿°ê¿±ê¿´ê¿¸ëëëëëëëëë¨ëë
ëëëëëëëëë"],["b341","ì¿",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿íííí
",5],["b381","í",5,"í",5,"í",19,"ëë¼ë½ëëëëëëëëëëëë ë¡ë¢ë¨ë©ë«",4,"ë±ë³ë´ëµë¸ë¼ëë
ëëëëëëëë ë¥ëëëëëëëëëëëëë£ë¤ë¥ë¨ë¬ë´ëµë·ë¸ë¹ë
ë
ë
ë
ë
ë
ë
ë
ë
ë
ë
ë
¸ë
¹ë
¼ëëëëëëëëëëëë¨ëëëëë"],["b441","í®",5,"í¶í·í¹íºí»í½",6,"ííí",5],["b461","ííííííí",6,"í¡",10,"í®í¯"],["b481","í±í²í³íµ",6,"í¾í¿íí",18,"ëë¨ë©ë¬ë°ë¹ë»ë½ëë
ëëëëëëëë ë´ë¼ëëë ë¨ë©ë´ëµë¼ëë
ëëëëëëëë ë¡ë£ë¥ë¦ëªë¬ë°ë´ëëëëëëëëëë¢ë¤ë¥ë¦ë¨ë«",4,"ë³ë´ëµë·",4,"ë¿ëëëëëëëëëëëëëëëëëëë¤ë¥"],["b541","í",14,"í¦í§í©íªí«í",5],["b561","í³í¶í¸íº",5,"ííí
ííí",5,"íí",4],["b581","íííí¡í¢í£í¥",6,"í®í²",5,"í¹",11,"ë§ë©ë«ë®ë°ë±ë´ë¸ëëëëë
ëëëë ë¡ë¨ë¬ëë
ëëëëëëëëëëëë ë¤ë¨ë¼ëëëë ë¨ë©ë«ë´ëëëëë ë¡ë£ë¥ë¬ëëëë¤ë¨ë¬ëµë·ë¹ëëëëëëëë ë£ë¤ë¦ë¬ëë¯ë±ë¸ëëëëëë¤ë¥ë§ë¨ë©ëªë°ë±ë´ë¸"],["b641","í
",7,"í",17],["b661","í ",15,"í²í³íµí¶í·í¹í»í¼í½í¾"],["b681","í¿í
í
",5,"í
í
í
í
í
í
",6,"í
í
í
¢",5,"í
©í
ªí
«í
ëëëëë
ëëëëëëëëë ë¡ë ë¡ë¤ë¨ëªë«ë°ë±ë³ë´ëµë»ë¼ë½ëëëëëëëëë¬ëëëëë¥ë¬ë´ëë¤ë¨ëëë ë¤ë«ë¬ë±ëë°ë´ë¸ëëë
ë¨ë©ë¬ë¯ë°ë¸ë¹ë»ëëëëëë ë¤ë¨ë°ë±ë³ëµë¼ë½ëëëëëëëëëë"],["b741","í
®",13,"í
½",6,"í
íííí"],["b761","í",20,"í¢í£í¥í¦í§"],["b781","í©",6,"í²í´í¶í·í¸í¹í»í½í¾í¿í",14,"ëëëë ë¨ë©ë«ë¬ëë´ëµë¸ëëë¬ëë°ë´ë¼ë½ë¿ë ë ë ë ë ë ë ë ë ë ë ë ¤ë ¥ë ¨ë ¬ë ´ë µë ·ë ¸ë ¹ë¡ë¡ë¡ë¡ë¡ë¡ë¡ 롤롬ë¡ë¡¯ë¡±ë¡¸ë¡¼ë¢ë¢¨ë¢°ë¢´ë¢¸ë£ë£ë£ë£
ë£ë£ë£ë£ë£ë£¡ë£¨ë£©ë£¬ë£°ë£¸ë£¹ë£»ë£½ë¤ë¤ë¤ 뤼뤽ë¥ë¥ë¥ë¥ë¥ë¥ë¥ë¥ë¥ 륨륩"],["b841","í",7,"í",17],["b861","í«",8,"íµí¶í·í¹",13],["b881","íí",5,"í",24,"륫ë¥ë¥´ë¥µë¥¸ë¥¼ë¦ë¦
ë¦ë¦ë¦ë¦ë¦ë¦¬ë¦ë¦°ë¦´ë¦¼ë¦½ë¦¿ë§ë§ë§ë§ë§",4,"ë§ë§ë§ë§ë§ë§¡ë§£ë§¤ë§¥ë§¨ë§¬ë§´ë§µë§·ë§¸ë§¹ë§ºë¨ë¨ë¨ë¨ë¨¸ë¨¹ë¨¼ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©ë©¤ë©¥ë©§ë©¨ë©©ë©°ë©±ë©´ë©¸ëªëªëª
ëªëªëª¨ëª©ëª«ëª¬ëª°ëª²ëª¸ëª¹ëª»ëª½ë«ë«ë«ë«ë«¼"],["b941","íªí«í®í¯í±í²í³íµ",6,"í¾íí",5,"íííí"],["b961","í",14,"í",6,"í¥í¦í§í¨"],["b981","í©",22,"ííí
ííííííë¬ë¬ë¬ë¬ë¬ë¬ë¬ë¬ 묩묫무묵묶문묻물묽묾ëë
ëëëëëëëë¡ë£ë¬ë®ë®ë®ë®¤ë®¨ë®¬ë®´ë®·ë¯ë¯ë¯ë¯ë¯ë¯¸ë¯¹ë¯¼ë¯¿ë°ë°ë°ë°ë°ë°ë°ë°ë°ë°",4,"ë°",4,"밤밥밧방ë°ë°°ë°±ë°´ë°¸ë±ë±ë±ë±ë±
ë±ë±ë±ë±ë±ë²ë²
ë²ë²ë²ë²ë²ë²ë²"],["ba41","ííííííí",5,"íííí¡í¢í£í¥",6,"í"],["ba61","í®í¯í°í²",5,"íºí»í½í¾íí",4,"íí",5],["ba81","ííííííííí",6,"í¦",9,"í²í³íµí¶í·í¹íºë²ë²ë² 벡벤벧벨벰벱벳벴벵벼벽ë³ë³ë³ë³ë³ë³ë³ë³ë³ë³´ë³µë³¶ë³¸ë³¼ë´ë´
ë´ë´ë´ë´ë´¤ë´¬ëµëµëµëµëµëµëµëµ¤ëµ¨ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶ë¶¤ë¶°ë¶¸ë·ë·ë·ë·ë·©ë·°ë·´ë·¸ë¸ë¸ë¸
ë¸ë¸ë¸ë¸ë¸ë¸ë¸ë¹ë¹
ë¹ë¹ë¹ë¹ë¹ë¹ë¹ë¹ë¹ë¹ 빡빤"],["bb41","í»",4,"ííí",5,"íííííí",4,"íí¢í£"],["bb61","í¤í¦í§íªí«íí®í¯í±",6,"íºí¾",5,"íííí"],["bb81","í",31,"빨빪빰빱빳빴빵빻빼빽ëºëºëºëºëºëºëºëºëºëº¨ë»ë»ë»ë»ë»ë» 뻣뻤뻥뻬ë¼ë¼ë¼ë¼ë¼ë¼ë¼ë¼ë½ë½ë½ë½ë½ë½ë½ë¾ë¾°ë¿
ë¿ë¿ë¿ë¿ë¿ë¿ë¿¡ì¼ìììì ì¨ì©ììììì ì¡ì£ì¥ì¬ìì¯ì°ì³ì´ìµì¶ì¼ì½ì¿ììì
ìììììììììì¤"],["bc41","íª",17,"í¾í¿íííí
íí"],["bc61","íííííí",5,"íííííí¡",6,"íªí¬í®"],["bc81","í¯",4,"íµí¶í·í¹íºí»í½",6,"ííí",5,"í",5,"ì¥ì¨ì¬ì´ìµì·ì¹ìììììì",4,"ì£ì¤ì¦ì§ì¬ìì¯ì°ì±ì¶ì¸ì¹ì¼ì
ì
ì
ì
ì
ì
ì
ì
ì
ì
ì
¤ì
¥ì
§ì
¨ì
©ì
°ì
´ì
¸ì
ìììììììììì¡ì¥ì¨ì©ì¬ì°ì½ììììììì ì¤ì¨ì°ì±ì³ì¼ì½ììììììììììì ì¨ì©ì«ì"],["bd41","íí",7,"í¢í¤",7,"í®í¯í±í²í³íµí¶í·"],["bd61","í¸í¹íºí»í¾íí",5,"í",13],["bd81","í",5,"í",25,"ì¯ì±ì²ì´ìììììì ì¥ì¬ìì°ì´ì¼ì½ì¿ìììììììì¤ì¥ì¨ì¬ìì´ìµì·ì¹ììì ì£ì¤ì«ì¬ìì¯ì±ì¶ì¸ì¹ì»ì¼ììììììììììì¤ì¥ì¨ì©ì
ì¨ì©ì¬ì°ì²ì¸ì¹ì¼ì½ììììììììì ì¢ì¨ì©ìì´ìµì¸ììì¤ì¬ì°"],["be41","í¸",7,"íííí
",14],["be61","í",7,"íííí¡í¢í£í¥",7,"í®í°í±í²"],["be81","í³",4,"íºí»í½í¾íí",4,"ííí",5,"í",8,"ì´ì¼ì½ìì¤ì¥ì¨ì¬ì´ìµì¹ìììì¸ì¼ì©ì°ì±ì´ì¸ìºì¿ììììììì¨ì©ì¬ì°ì¸ì¹ì»ì½ìì
ììììììììììììììì ì¡ì¤ì¨ì°ì±ì³ì´ìµì¼ì½ìììììììììììì ì©ì´ìµì¸ì¹ì»ì¼ì½ì¾ì",6,"ìì"],["bf41","í",10,"íª",14],["bf61","í¹",18,"ííííííí"],["bf81","í",5,"ííí ",7,"í©íªí«íí®í¯í±",6,"í¹íºí¼ììììì ì¡ì£ì¥ì¬ìì®ì°ì´ì¶ì·ì¼",5,"ì
ìììììììììì¤ì¥ì¨ì¬ìì®ì°ì³ì´ìµì·ì¹ì»ìììììììììììì ì¬ì¯ì±ì¸ì¹ì¼ìììììììììì¤ì¥ì§ì©ì°ì±ì´ì¸ì¹ìºìììì
ììììììì ì¡ì¨"],["c041","í¾",5,"í
íííííí",6,"íí",5],["c061","í",25],["c081","í¸í¹íºí»í¾í¿íííí
",6,"ííí",5,"íííííí¡í¢í£ì©ì¬ì°ì¸ì¹ì½ìì
ììììììì ì¡ì¤ì¨ì°ì±ì³ìµì·ì¼ì½ììììììì",7,"ìì ì¨ì«ì´ìµì¸ì¼ì½ì¾ììì
ììììììììììììì ì¡ì£ì¤ì¥ì¦ì¬ìì°ì´ì¼ì½ì¿ìììììììììì¤ì¨ì¬ì ì ì ì ì "],["c141","í¤í¦í§íªí¬í®",5,"í¶í·í¹íºí»í½",6,"ííí"],["c161","ííííí",19,"í¦í§"],["c181","í¨",31,"ì ì ì ì ì ì ì ì ì ¤ì ¬ì ì ¯ì ±ì ¸ì ¼ì¡ì¡ì¡ì¡ì¡ì¡ì¡°ì¡±ì¡´ì¡¸ì¡ºì¢ì¢ì¢ì¢
ì¢ì¢ì¢ì¢ì¢ì¢ì¢ì¢ì¢¡ì¢¨ì¢¼ì¢½ì£ì£ì£ì£ì£ì£ì£ì£ 죡죤죵주죽ì¤ì¤ì¤
ì¤ì¤ì¤ì¤ì¤ì¤ì¤¬ì¤´ì¥ì¥ì¥ì¥ì¥ 쥡쥣쥬쥰쥴쥼ì¦ì¦ì¦ì¦ì¦ì¦ì¦ì¦ì§ì§ì§ì§ì§ì§ì§ì§ì§"],["c241","ííííííí",4,"ííí",5,"í¦í§í©íªí«íí®"],["c261","í¯",4,"í¶í¸íº",5,"ííí
ííí",6,"í"],["c281","í",5,"íííí¡í¢í£í¥",7,"í®",9,"íºí»ì§ì§ì§ì§ì§ì§ì§ 짢짤짧짬ì§ì§¯ì§°ì§±ì§¸ì§¹ì§¼ì¨ì¨ì¨ì¨ì¨ì¨ì¨ì¨ì¨©ì©ì©ì©ì©ì©ì©ì©ì© 쩡쩨쩽ìªìªìª¼ìª½ì«ì«ì«ì«ì«ì«ì«ì«ì«ì« 쫬쫴ì¬ì¬ì¬ì¬ì¬ 쬡ììììììììì¤ì¸ì¹ì®ì®¸ì¯ì¯¤ì¯§ì¯©ì°ì°ì°ì°ì°ì°ì°¡ì°¢ì°§ì°¨ì°©ì°¬ì°®ì°°ì°¸ì°¹ì°»"],["c341","í½í¾í¿ííííííííííííííííííí",4],["c361","í¢",4,"í¨íª",5,"í²í³íµ",11],["c381","íííí",5,"íííííí",7,"íí í¢",5,"í©íªì°¼ì°½ì°¾ì±ì±
ì±ì±ì±ì±ì±ì±ì±ì± 챤챦챨챰챵ì²ì²ì²ì² 첨첩첫첬ì²ì²´ì²µì²¸ì²¼ì³ì³
ì³ì³ì³ì³ì³¤ì³¬ì³°ì´ì´ì´ì´ì´ì´ì´ì´ì´ì´¤ì´¨ì´¬ì´¹ìµìµ 쵤쵬ìµìµ¯ìµ±ìµ¸ì¶ì¶ì¶ì¶ì¶ì¶¤ì¶¥ì¶§ì¶©ì¶°ì·ì·ì·ì·¨ì·¬ì·°ì·¸ì·¹ì·»ì·½ì¸ì¸ì¸ì¸ì¸ì¸ 측츤츨츰츱츳층"],["c441","í«íí®í¯í±",7,"íºí¼",7,"ííííí"],["c461","íííííííííí",5,"í¡í¢í£í¥í¦í§í©",4],["c481","í®í¯í±í²í³í´í¶",5,"í¾í¿íííí
",11,"íííì¹ì¹ì¹ì¹ì¹ 칡침칩칫ì¹ì¹´ì¹µì¹¸ì¹¼ìºìº
ìºìºìºìºìºìºìº 캡캣캤캥캬ìºì»ì»¤ì»¥ì»¨ì»«ì»¬ì»´ì»µì»·ì»¸ì»¹ì¼ì¼ì¼ì¼ì¼ì¼ì¼ì¼ì¼ì¼ 켤켬ì¼ì¼¯ì¼°ì¼±ì¼¸ì½ì½ì½ì½ì½¤ì½¥ì½§ì½©ì½°ì½±ì½´ì½¸ì¾ì¾
ì¾ì¾¡ì¾¨ì¾°ì¿ì¿ 쿡쿤쿨쿰쿱쿳쿵쿼íííííí´íµí¸í¼"],["c541","ííííííííí¡",6,"íªí¬í®",5,"í¶í·í¹"],["c561","íºí»í½",6,"í
ííí",5,"íííí",4],["c581","íí¢í¤í¦í§í¨íªí«íí®í¯í±í²í³íµ",6,"í¾í¿íí",5,"íííí
íííííí í¬íí°í´í¼í½íí¤í¥í¨í¬í´íµí·í¹ííííííííííííí í¤í¬íí¯í°í±í¸íí°í±í´í¸íºí
í
í
í
í
í
í
í
í
í
í
í
í
¡í
¨í
’
¼ííí í¡í¤í¨í°í±í³íµíºí¼ííí´í¸íííí¬íí°í´í¼í½í¿ííí"],["c641","íííí",6,"ííí",5],["c6a1","í¤ííííííííí í¤í¬í±í¸í¹í¼í¿ííííííííí¤í¥í°í±í´í¸íííí
íííííííííí í¡í¥í¨í©í¬í°í¸í¹í»í¼í½íí
í¼í½ííííííííííí í¨í©í«íí´í¸í¼íí
ííííí¡í£í¬íí°í´í¼í½í¿í"],["c7a1","íííííí í¤íí¯í¸í¹í¼í¿íííííííí©íííííí¨í¬í°í¸í»í½ííííííí¼í½íííííííííí í¥í¨í©í«íí´íµí¸í¼íí
ííííí¥íííííííííí¤í¥í¨í¬í´íµí·í¹ííííííííííí "],["c8a1","í¤íí¸í¹í¼íí
íííííííííí§í©í°í±í´íí
ííííííí¡í¨í¬í°í¹í»íí
ííííííí í¤í¨í°íµí¼í½ííííííí í¨í©í«íí´íµí¸í¼ííííííííííí í¡í£í¥í©í¬í°í´í¼í½ííííííííí"],["caa1","伽佳åå¹å å¯åµå¥åå«å®¶ææ¶æ·æ¯æçç稼èèè¡è¢è¨¶è³è·è»»è¿¦é§å»å´åæªæ
¤æ®¼çè覺è§é£ä¾åå¢¾å¥¸å§¦å¹²å¹¹ææææ¬æ¡¿æ¾çç磵ç¨ç«¿ç°¡èè®è±è««éä¹«åæ·æ¸´ç¢£ç«èè¤èé¨ååå ªåµææ¾æ¡æ¢ææ©æ¸çç³ç£ç°ç´ºé¯ééé¾"],["cba1","å£å²¬ç²èééåå å§å²¡å´åº·å¼ºå½æ
·æ±çºçç³ çµ³ç¶±ç¾è
è¡èè¥è¬é¼éé±ä»ä»·åå±å¡æ·æ¾æ
¨æ¹æ§ªæ¼ç¥ççç®è¥èï¤é§éå客åï¤ç²³ç¾¹éµå¨å»å±
å·¨ææ®ææ§æ¸ ç¬ç¥è·è¸ï¤é½é
é¸ä¹¾ä»¶å¥å·¾å»ºææ¥è
±èè¹éµé¨«ä¹åæ°æ¡åååæª¢"],["cca1","ç¼éé»å«æ¯è¿²åæ©æææ ¼æªæ¿è覡éå
ç½ç¬ççµ¹ç¹è©è¦è´é£éµææ±ºæ½çµç¼ºè¨£å
¼æ
ç®è¬éé京ä¿åå¾åååå¿å°å¢åºå¾æ
¶æ¬ææ¬æ¯æ»æ´æ¢æ¶ç
ç±çç¥çç硬磬ç«ç«¶çµ
ç¶èè¿èèè¦è¼éé¡é é ¸é©é¯¨ä¿åå ºå¥å£å±æ¸ææ¡æ¢°"],["cda1","棨溪çç¸ç£ç¨½ç³»ç¹«ç¹¼è¨èª¡è°¿éé·å¤å©åå±åºå§å¤å°»åº«æ·æ·æ
æ²æ æ¯æ§æ²½ç¼çç¾ç¨¿ç¾èè¡èè¦è½è°èè ±è¢´èª¥ï¤è¾é®éé¡§é«é¼åææ²æ¢ç©è°·éµ å°å¤å´ææ¢±æ£æ»¾ç¨è¢é¯¤æ±¨ï¤éª¨ä¾å
Œ
±ååå·¥æææ±æ§æ»ç空è£è²¢é串寡ææç"],["cea1","ç§èèªèª²è·¨ééé¡å»æ§¨è¿éï¤
å å®å¯¬æ
£æ£ºæ¬¾çç¯ç管ç½è
è§è²«é餍宿æ¬éä¾å
å¡å£å»£æ æ´¸ççççè±éå¦æç½«ä¹åå¡å£æªæ§ææ§éå®ç´è±è½äº¤åå¬å¬å¬å¶ å·§æªææ ¡æ©ç¡çç¯çµç¿¹è èèè¼è½éé¤é©é®«ä¸ä¹
ä¹ä»ä¿±å
·å¾"],["cfa1","åå£å¥åååµå¢å¯å¶å»æ¼æææ¸æ©æ§ææ¯æ¯¬æ±æºç¸çççç¿ç©ç©¶çµ¿èè¼è
èè衢謳購è»éé±é¤é¶é§é©
鳩é·é¾åå±èé é«éº´åçªç¾¤è£è»é¡å 屿çªå®®å¼ç©¹çª®è躬å¦å¸å¸å·åæ³æ²æ¬æ·ç·å¥çè¨è¹¶éæºæ«æ½°è©è»é¥ï¤æ·æ¸è²´"],["d0a1","鬼ï¤å«åå¥ææ§»çªç¡
窺ç«
ç³¾èµè¦èµ³éµé¨å»åçç èéï¤æ©å
ååææ£æ¥µéå
å¤å¤ææ¤æ ¹æ§¿ç¾çè¹è«è¦²è¬¹è¿é¥ï¤ä»å¦æææªç´ç¦ç¦½è©è¡¾è¡¿è¥ï¤é¦ä¼åæ¥æ±æ±²ç´çµ¦äºå
¢çè¯ä¼ä¼å
¶ååå¨å»åºå¼å¤å¥å¦å¯å²å´å·±å¹¾å¿æææ£"],["d1a1","ææææ£æ£æ©æ¬ºæ°£æ±½æ²æ·çç¦çªçç£ç¸ç¿ç¢ç£¯ç¥ç¥ç¥ç¥ºç®ç´ç¶ºç¾èèèè¨èè±èµ·é¡é¤é£¢é¥é¨é¨é©¥éºç·ä½¶åæ®æ¡éå«åºï¤ï¤å¨æ¦ï¤ææ¿ï¤",5,"é£ï¤",4,"諾ï¤ï¤ï¤ï¤æï¤ç
ï¤ï¤é£ï¤ ææºåï¤¡ææ¥ 湳濫ç·ï¤£ï¤¤ï¤¥"],["d2a1","ç´ï¤¦ï¤§è¡²åå¨ï¤¨",4,"ä¹ï¤å
§å¥æ°è冷女年æç§å¿µæ¬ææ»å¯§å¯åªï¤¯å¥´å¼©æï¤°ï¤±ï¤²ç盧",5,"é§ï¤¹",10,"æ¿ï¥ï¥
è¿è¾²æ±ï¥ï¥è
¦ï¥ï¥å°¿ï¥",7,"嫩訥æ»ç´ï¥",5,"è½ï¥ï¥å°¼æ³¥å¿æººå¤è¶"],["d3a1","丹亶ä½å®åå£å½æ·æ¦æªæ®µæ¹ç端ç°ç·èè¢é²éæ»æ¾¾çºç¸éååæºæææ·¡æ¹æ½æ¾¹ç°èè½èè¦è«èéæ²ççè¸éåå å¡å¹¢æææ£ ç¶ç³è³é»¨ä»£åå®å¤§å°å²±å¸¶å¾
æ´æ¡ç³èºè¢è²¸éé»å®
å¾·æ³ååå°åå µå¡å°å± å³¶å¶åº¦å¾æ¼ææææ¡"],["d4a1","æ£¹æ«æ·æ¸¡æ»æ¿¤ç¾çç¹ç¦±ç¨»è覩è³è·³è¹éééé½éé¶éæ¯ççç¢ç¨ç£ç¦¿ç¯¤çºè®å¢©ææ¦æ½æ¾æ²ççè±é ä¹çªä»å¬åååæ§æ±æ¡æ£æ´æ½¼ç¼ç³ç«¥è´è£é
å
æææçç«è³ï¥è±éé 屯èèéé¯éå¾å¶æ©çç»çè¤è¬é§é¨°åæ¶ï¥ç©ç¾
"],["d5a1","è¿èºè£¸éï¥æ´çç絡è½ï¥é
ªé§±ï¥äºåµæ¬æ¬ç¾çèé¸åè¾£åµæ¥æ¬æ¬æ¿«ç±çºè襤覽æèè å»ææµªç¼ç
ç¯èéä¾å´å¾ èå·æ ç¥äº®åå
©åæ¢æ¨ç²®ç²±ç³§è¯è«è¼éä¾¶å·åµå廬æ
®æ¾æ
æ«æ¿¾ç¤ªèè £é驢驪éºé»åææ·çç¤«è½¢éæææ£æ¼£"],["d6a1","ç
çç·´è¯è®è¼¦é£éå½å壿´çè£å»ææ®®æ¿ç°¾çµä»¤ä¼¶å¹ï¥å²ºå¶ºæç²ç¬ç¾ç¿èéé´é¶éé 齡便¾§ç¦®é´é·åï¥ æææ«æ½ççç§èèèè·¯è¼
é²é¯é·ºé¹µç¢ç¥¿ç¶ èé鹿éºè«å£å¼æ§ç§çç± è¾å¡ç¨ç¢ç£è³è³è³´é·äºå坮廿çççèè¼"],["d7a1","é¼é¬§é¾å£å©å±¢æ¨æ·æ¼ç»ç´¯ç¸·è褸é¤éåææ³æ¦´æµæºççç çç¤ç¡«è¬¬é¡å
æ®é¸ä¾å«å´æ·ªç¶¸è¼ªå¾æ
æ 率éåèå忥ç¨ç¶¾è±éµä¿å©åååå±¥æ§ææ¢¨æµ¬çç¸çç異ç¢ç±¬ç½¹ç¾¸èè£è£¡ééé¢é¯åæ½¾ççèºèºªé£é±éºææ·ç³è¨éç ¬"],["d8a1","ç«ç¬ ç²æ©çªç²ç¢¼ç£¨é¦¬é麻å¯å¹æ¼ èè«éä¸å娩å·å½æ
¢æ½æ©æ¼æ»¿æ¼«ç£çè¬èè »è¼é¥
é°»åæ¹æ«æ²«è襪éºäº¡å¦å¿å¿æç¶²ç½èè«è½è¼éå妹åªå¯æ§ææ¢
æ¯ç
¤ç½µè²·è³£éé
èè²éé©éº¥åæ°çç²çèåªè¦å
å忣æ²çç ç¶¿ç·¬é¢éºµæ»
"],["d9a1","èå¥åå½æææ¤§æºç¿çèèèé
©éé³´è¢ä¾®ååå§å¸½æ
æ¸æ¹æ®ææ¨¡æ¯æ¯çç¡çç¸çèè¼è
è¬è¬¨è²æ¨æ²ç§ç®ç¦ç©é¶©æ¿æ²å¤¢æ¦èå¯å¢å¦å»ææ´æ³æ¸ºç«ç«èé¨åå·«æ®ææææ«æ æ¥æ¦æ¯ç¡ç·çç¹èèèªèª£è²¿é§éµ¡å¢¨é»ååå»åæ"],["daa1","æ±¶ç´ç´èèéé¯å¿æ²ç©å³åªå°¾åµå½å¾®æªæ¢¶æ¥£æ¸¼æ¹çç±³ç¾èè¬è¿·é¡é»´å²·æ¶ææ«ææ»æ¼æ°æ³¯ççç·¡éå¯èè¬ååæææ²æ´æ¨¸æ³ççç®ç²ç¸èè¶èè¿«é¹é§ä¼´åååææ¬æææ§æ³®æ½ççç¢ç¤ç¼ç£ç£»ç¤¬çµè¬è è¿é 飝忿¥æ¸¤æ½"],["dba1","ç¼è·é±é¢é«®éå£åå妨尨å¹å½·æ¿æ¾æ¹ææææ¦æ»ç£
ç´¡èªèè«è³è¡è訪è¬é¦é²é¾å俳北å¹å¾æææ¯æ¹ççèè裴裵è¤è³ 輩é
éªä¼¯ä½°å¸ææ ¢ç½ç¾é幡æ¨ç
©ççªï¥¤ç¹èè©é£ä¼çç½°é¥å¡å¸æ¢µæ°¾æ±æ³ç¯ç¯èæ³çºå»å壿æªç§ç"],["dca1","碧èé¢é¹ï¥¥åå¼è®è¾¨è¾¯éå¥ç¥é±é¼ä¸åå
µå±å¹·ææºææ£
ç³çç
ç§ç«è¼§é¤ é¨ä¿å ¡å ±å¯¶æ®æ¥æ´æ¹ºæ½½ç¤ç«è©è£è¤èè¼ä¼åååå®å¾©æç¦è
¹è¯èè¤è¦è¼¹è¼»é¦¥é°æ¬ä¹¶ä¿¸å¥å°å³¯å³°æ§æ£ç½ç¢ç«ç¸«è¬èé¢éé³³ä¸ä»ä¿¯å
åå¯å¦åå 夫婦"],["dda1","ååµå¯åºï¥¦æ¶æ·æ§æµ®æº¥ç¶ç¬¦ç°¿ç¼¶è
è
èèèè©è¨è² 賦賻赴趺é¨éééé§é³§ååå©å´å¢³å¥å¥®å¿¿æ¤æ®ææ±¾ççç²ç³ç´è¬è³é°ï¥§ä½å¼å½¿æå´©ææ£ç¡¼ç¹éµ¬ä¸åååªåå¦å©¢åºæ²æææ¹æææ¦§æ¯æ¯æ¯æ¯æ²¸ï¥¨çµçºç ç¢ç§ç§ç²ç·ç¿¡è¥"],["dea1","è¾èè²è裨誹è¬è²»ééé£é¼»å¬å¬ªå½¬ææª³æ®¯æµæ¿±çççè²§è³é »ææ°·èé¨ä¹äºäºä»ä¼ºä¼¼ä½¿ä¿å¿å²å¸åå£å士奢å¨å¯«å¯ºå°å·³å¸«å¾ææ¨ææ¯æ¶æ»æ¢æ»æ²æ³æ¸£çç
ç 社ç¥ç¥ ç§ç¯©ç´çµ²èèèèèè£è©è©è¬è³èµ¦è¾éªé£¼é§éºå數æï¥ª"],["dfa1","ååªå±±æ£æ±çç£çç®èé
¸é°ä¹·ææ®ºç
è©ä¸ï¥«ææ£®æ¸èèè¡«æ·æ¾é颯ä¸å·ååååªååå°å³ 常åºåº 廿³æ¡æ©¡æ¹ç½ççç¸ç¥¥ç®±ç¿è£³è§´è©³è±¡è³éå¡ç½è³½å塞穡索è²ç²çç¥ï¥ç¬å¢
壻嶼åºåº¶å¾æææ¿ææææ¸æ 棲ççç®çµ®ç·ç½²"],["e0a1","è¥èè¯è¥¿èªéé¤é»é¼ å¤å¥å¸æææ³ææ±æ·
æ½ç³ç¢©èéé«ä»åå
åå¬å®£ææ¾ææ¸²ç
½çççç¿ç¬ç¦ªç·ç¹ç¾¨è
ºè³è¹èè¬è©µè·£é¸éé¥é¥é®®å¨å±æ¥æ³æ´©æ¸«èè褻è¨èªªéªé½§å¡æ¹æ®²çºè¾è´ééææ¶ç®ï¥®åå§å®¬æ§æºæææç©ç¹ççç¬"],["e1a1","èè²è
¥èª éä¸å¢æ²æ´ç¨
笹細說貰å¬å¯å¡å®µå°å°å·¢æææææ¢³æ²¼æ¶æº¯çç¤çç¦çççç¬ç¯ ç°«ç´ ç´¹è¬èè訴éé¡éµé·é¶é¨·ä¿å±¬ææ¶ç²çºè¬è´éå«å·½æèé飡çå®ææ¾æ·è¨èª¦éé å·ï¥°çç¢éè¡°éä¿®åå½åå壽å«å®å²«å³å¸¥æ"],["e2a1","æææææ¶æ¸æ¨¹æ®æ°´æ´æ¼±ç§ç©ç¸çç²ç¦ç¡ç§ç©ç«ªç²¹ç¶ç¶¬ç¹¡ç¾è©è±èèèªè¢èª°è®è¼¸ééé
¬éé¹éé§é¨ééé é¦é«é¬å塾å¤å°å®¿æ·æ½çç¡ç¹è
è½å·¡å¾å¾ªææ¬æ æ¥¯æ©æ®æ´µæ·³ç£ç¾ç¬çç´è£èèè´è£è©¢è«ééé 馴æè¡è¿°é¥å´å´§"],["e3a1","嵩çèè¨æ¿æ¾ç¿è¤¶è¥²ä¸ä¹å§ååæ¿æç¹©è
éä¾åå¶å§åª¤å°¸å±å±å¸å¼ææ½æ¯ææ¾æ´çç¢ç¤ºç¿
èèè¦è©¦è©©è«¡è±è±ºå´å¯å¼æ¯ææ¤æ®æ¹çç¯èè軾é£é£¾ä¼¸ä¾ä¿¡å»å¨ å®¸æ¼æ°æ¨ç¼ç³ç¥ç´³è
è£èèªèèè¨èº«è¾ï¥±è¿
失室實æå¯©å°å¿æ²"],["e4a1","沈深ççè¯è«¶ä»åï¥³éæ°äºä¿å
å娥峨æçè½èªè¾è¡è¨é¿é
é¤é´éµå 岳嶽广¡ææ¡æ¨æ¸¥ééé¡é°é½·å®å²¸æææ¡ç¼ééé¡é®æ¡è¬è»é¼åµå²©å·åºµæçè´é壿¼çé´¨ä»°å¤®ææ»æ®ç§§é´¦åååå´æææ¶¯ç¢è¾ééåæ¼ææ¶²ç¸è
é¡"],["e5a1","æ«»ç½é¶¯é¸ä¹å»å¶å¤æ¹æ¶æ¤°çºè¶ï¥´é弱掠略ç´è¥è¯è»è¥èºï¥·ä½¯ï¥¸ï¥¹å£¤åæææææï¥ºæ¥æ¨£æ´çç
¬çç禳穰糧ç¾ï¥¼è¥ï¥½è®éé½ï¥¾é¤åå¾¡æ¼æ¼ç禦èªé¦éé½¬åæ¶ææªèåå °å½¦çè¨è«ºå¼è俺å¼å´å¥æ©æ·¹å¶ªæ¥åäºä½ï¥¿ï¦ï¦å¦ï¦"],["e6a1","ï¦ææ±ï¦çµç¤ï¦
èè
è¹è¼¿è½ï¦é¤ï¦ï¦ï¦äº¦ï¦åå½¹æï¦ï¦ç«ç¹¹è¯ï¦éé©å¥å §å§¸å¨å®´ï¦å»¶ï¦ï¦ææ»ï¦æ¤½æ²æ²¿æ¶æ¶æ·µæ¼ï¦çç¶ç
ï¦ççï¦ç¡ç¡¯ï¦çµç·£ï¦ç¸¯ï¦è¡è»ï¦ï¦ï¦éï¦é³¶ï¦ï¦ï¦æ
æ¶
ï¦ç±ï¦ 說é±å廉念捻æï¦¥çç°ç°è¶è"],["e7a1","簾é»é«¥é¹½æï¦§çè令囹å¡ï¦ªï¦«å¶¸å½±ï¦¬æ ææ¥¹æ¦®æ°¸æ³³æ¸¶æ½æ¿çç¯ç
çç°ï¦ç瑩ççç©çºï¦¯ï¦°è±è© è¿ï¦±é零é靈領ä¹åªï¦µå塿³æ±æ¿çç¿ç©¢è®èè禮è£è©£è½è±«ï¦·é³ï¦¸éé äºä¼ä¿å²åå¾å³å塢墺奧å¨å¯¤æï¦¹æææ¿æ¤æ¢§æ±æ¾³"],["e8a1","çç¬çç½è誤鰲é¼å±æ²ççéºæº«ç¥çç©©ç¸èå
å£
æç®çç°ç¿éé饿¸¦ç¦çª©çªªè¥èè¸è¨å©å®å®æ¢¡æ¤æµ£ç©çç¬ç¢ç·©ç¿«èè
èè±é®é æ°å¾æºææ±ªçå卿ªç®å¤åµ¬å·ç¥ç了僚å¥å¹å ¯å¤å¦å§å¯¥ï¦¼ï¦½å¶¢ææææ¾ï¦¾æï¦¿æ©ï§ç¿ç¤ï§"],["e9a1","çªçª¯ç¹ç¹èè
°ï§è¯è¦è¬ éï§é饿
¾æ¬²æµ´ç¸è¤¥è¾±ä¿ååååå¢å®¹åº¸æ
æ¦æ¶æ¹§æº¶çç¢ç¨ç¬è³è¸èè¸ééï§äºä½å¶åªååå³å®å¯å°¤æææ´ççççç¥ç¦ç¦¹ç´ç¾½èèèè¿ééµéªé
é¨é©åå½§ææ±æ ¯ç
稶éé äºï§
æ©æ®æ¾çèè¸è"],["eaa1","ééé²é»è鬱äºçéå
åå¡ååå£åªå«å¯æ¨æ¿æ´æ²
洹湲æºç°ç¿çèè¢è½
é ï§é¢é¡é´æè¶éä½ååå±åå§å¨å°æ
°ææ¸ç²çç·¯èèè¦è¿èè¡è¤è¬éééä¹³ä¾åå
ªï§å¯å©åºå®¥å¹¼å¹½åº¾æ æææææ¸æï§ææï§æ¥¡æ¥¢æ²¹æ´§ï§æ¸¸ï§"],["eba1","æ¿¡ç¶ç·ï§çç±ï§çï§ï§ç¶è¾è¸è£èªè«è«è¸°è¹éé¾éºé
éé®ï§ï§å ï§æ¯èè²ï§ï§å
奫尹ï§ï§æ½¤ç§è¤è´ï§ééï§ï§ï§ï§è¿æç絨èï§å æ©æ
殷誾éé±ä¹åæ·«èé°é³é£®ææ³£éåæèºé·¹ä¾ååå®ææ¿æ¬æ¤
æ¯
çç£ç¾©è¤èè»è¡£èª¼"],["eca1","è°é«äºä»¥ä¼ï§ï§å¤·å§¨ï§å·²å¼å½æ¡ï§ 李梨泥ç¾ç¥ï§¤ç°ç痢移罹èè³èè¡è裏裡貽貳é里離飴é¤ï§«ï§¬ç·çç¿ç¿ç¿¼è¬äººä»åå°ï§å½å å§»å¯
å¼å¿æ¹®ï§®ï§¯çµªèµï§°èèªï§±éé·ï§²ï§³ä¸ä½ä½¾å£¹æ¥æº¢é¸é°é¦¹ä»»å£¬å¦å§æï§´ï§µç¨ï§¶èè³å
¥å"],["eda1","立笠粒ä»å©åè¿ä»åºå¨å§å§¿åå忣æ
æ»çç
®çç·çµç£ç´«è
èªè¨èèè«®è³éä½åºå¼æ«æ¨ç¼ç¸çµç¶½èé
é鵲屿£§æ®æ½ºç岿«æ½ç®´ç°ªè ¶éä¸ä»å å ´å¢»å£¯å¥¬å°å¸³åºå¼µææ²ææ¨æª£æ¬æ¼¿ç狀ççç« ç²§è
¸èè§èè¬è£èèè£è´é¬é·"],["eea1","éååå¨å®°æææ ½æ¢æ¸½æ»ç½ç¸¡è£è²¡è¼é½é½çç®è«éä½ä½å²åå§åºæµæµæ¥®æ¨æ²®æ¸ççªç½ç®¸ç´µè§è¹èè·è©è²¯èºéé¸éé½å£åå«¡å¯ææµæ»´çï§»çç©ç¬ç±ç¸¾ç¿è»è¬«è³èµ¤è·¡è¹è¿ªè¿¹é©éä½ä½ºå³å
¨å
¸ååªå¡¡å¡¼å¥ å°å±å»ææ°æ æ®¿æ°æ¾±"],["efa1","ç
ç ç°ç¸çç²çç®ç®ç¯çºè©®è¼¾è½é¿éé¢é«é»é¡é¡«é¤åæªææµç¤ç«ç¯çµ¶å å²¾åºæ¼¸ç¹ç²éé®é»æ¥æºè¶ä¸äºäºååµåå§å®å¹åºå»·å¾æ
æºæ¿æ´ææ¶æ¸æ¾æ¥¨æªæ£æ±æ·æ·¨æ¸æ¹çç¡çç½çºçç¢ç¦ç¨ç©½ç²¾ç¶èè¨è«ªè²éé
éé¦éé éé"],["f0a1","éé é¼å¶åå¼å ¤å¸å¼æææ¢¯æ¿ç¥ç¬¬èèºè£½è«¸è¹éé¤éé½é¡é½ä¿å
åå©å²å¼å½«æªææ©ææºæ¹ææ¢æ£æ§½æ¼æ½®ç
§ç¥çªçªçºç¥ç¥ç§ç¨ çªç²ç³çµç¹°èè»è¤è©èª¿è¶èºé éé£é»éé³¥æç°è¶³éåå°åæçå§å®å¾æ°æ
«æ£æ·ç®ç¨®çµç¶ç¸±è
«"],["f1a1","踪踵é¾éä½å左座æ«ç½ªä¸»ä½ä¾åå§èåªå¨å¾å¥å®å·å»ææ±æ±æ ªæ³¨æ´²æ¹æ¾ç·ç çç±ç´ç´¬ç¶¢èè註èª
èµ°èºè¼³é±é
é
éé§ç«¹ç²¥ä¿åååå¯¯å³»ææ¨½æµæºæ¿¬çç¯ç«£è ¢é¡éµéé§¿èä¸ä»²è¡é彿«æ¥«æ±èºå¢ææ¾æ¯çççç¹è¸èè´ä¹åª"],["f2a1","å«å°åå¿æææ¯æ¯æ¨æºææ³æ¢æ± æ²æ¼¬ç¥ç ¥ç¥ç¥ç´è¢èè³èè·èèªï§¼è´è¶¾é²ç´ç¨ç¨·ç¹è·ååå¡µæ¯æ¢æææ¡æ¦æ®æ´¥æº±çç¨ç¡çç¹ç¡çç秦ç¸ç¸è»è¯è¢è¨ºè³è»«è¾°é²éé£é³éä¾å±å§ªå«å¸æ¡çç¾ç§©çªè£è質è·è¿ææï§½å·æ½ç·è¼¯"],["f3a1","é¶éå¾µæ²æ¾ä¸ä¾ååå嵯差次æ¤ç£ç®ï§¾è¹è»é®ææ¾ççªé¯é¿é½ªæ°æ¾¯ç¦ç¨çç«ç°çºç²²çºè®è´é½é¤é¥å¹å¯æ¦æç´®åå塹æ
æ
æºæ¬ç«è®è®åå¡åµå±å¨¼å» å½°æ´æææ¶æ¢æ§æ»æ¼²çç¡çªè¹èèè¼åµå°å¯å¯¨å½©æ¡ç ¦ç¶µèè¡ééµåæµç"],["f4a1","責å妻æ½èåï§¿åå°ºæ
½æææ²æ¥æ»ç èè¹ éé»ä»åå天巿
æ³æ·ºçç©¿èè¦è³¤è¸é·é§é¡é¡éå¸å²åå¾¹æ¤æ¾ç¶´è¼è½éµåå°æ²¾æ·»çç»ç°½ç±¤è©¹è«å 妾叿·ççç«è«è²¼è¼å»³æ´æ·¸è½èè«éé¯ï¨åæ¿æ¶æ»¯ç· 諦é®éé«åå¿å¨ææææ¢¢"],["f5a1","æ¤æ¥æ¨µçç¦ç¡ç¤ç¤ç§ç¨èè¸èèèè²è¶
é
¢éé®ä¿åççèè§¸å¯¸å¿æé¨å¢å¡å¯µæ¤ææ 總è°è¥éæ®å¬å´æå¢æ½æ¨æ¤æ¥¸æ¨æ¹«çºç§è»è©è«è¶¨è¿½éé
ééééé騶é°ä¸çç¥ç«ºçç¯ç¸®èè¹è¹´è»¸éæ¥æ¤¿çåºæ®é»å
å¿ æ²è²è¡è¡·æ´èµè"],["f6a1","è´
åå¹å´å¨¶å°±çç¿ èèèè¶£éé©é·²å´ä»å æ»æ¸¬å±¤ä¾å¤å¤å³å¹æ¥æ¢æ²»æ·ç¾çç´ç¡ç¨ç©ç·ç·»ç½®è´è©è¼é馳é½åå
é£è¦ªä¸ææ¼ä¾µå¯¢ææ²æµ¸çç §éé¼è秤稱快ä»å¤å¾å¢®å¦¥æ°æææ¶æ¥èµé馱é§å¬ååå¼ï¨æï¨æ¢æ«ææ¿æ¿¯ç¢ç¸è¨"],["f7a1","é¸ååå¦å½ææççç¶»èªå¥ªè«æ¢çè½è²ªå¡ææ¦»å®å¸æ¹¯ï¨è©å
å°å¤ªæ æ
æ®æ±°æ³°ç¬èèè·é°é¢±ï¨ææ¾¤ææå
ååè¨æ
æ¡¶ï¨
çççµ±éå æ§è
¿è¤ªéé ¹å¸å¥å¦¬æé鬪æ
ç¹éå¡å©å·´æææºæ·æ³¢æ´¾ç¬ç¶ç ´ç½·èè·é å¤åæ¿çç£è²©è¾¦é"],["f8a1","éªå
«åæä½©åæææ²æµ¿çç½ç¨è¦è²å½æ¾ç¹è¨æä¾¿åæçç¯ç·¨ç¿©ééé¨è²¶åªå¹³æ°èè©å å¬å¹£å»¢å¼æèºè½ééä½å
ååååºåå¸æææ±æï¨æ³¡æµ¦ç±ç ²èè¯èè¡è²è¢è¤ééªé£½é®å¹
æ´æççï¨ä¿µå½å½ªæ
ææ¨æ¼ç¢ç¥¨è¡¨è±¹é£é£é©"],["f9a1","åç¨æ¥è«·è±é¢¨é¦®å½¼æ«ç²ç®è¢«é¿éå¹å¼¼å¿
æ³çç¢ççè¾é¦ä¹é¼ä¸ä½å¦å¤å»æ°æ²³çè·è¦è³ééé°å£å¸èè¬é¶´å¯æ¨ææ±æ±æ¼¢æ¾£çç½ç¿°ééééå²è½å½å«å¸å£å檻涵ç·è¦éé·é¹¹ååçè¤é¤éé亢ä¼å§®å«¦å··ææææ¡æ²æ¸¯ç¼¸èèª"],["faa1","ï¨ï¨é
亥åå³åå¥å©å®³ææ¥·æµ·ç£è¹è§£è©²è«§éé§éª¸å¾æ ¸å幸æèè¡äº«åå®ç¦éé¿é¤é¥é¦åå¢èè¨±æ²æ«¶ç»è»æéªé©å¥ç赫é©ä¿å³´å¼¦æ¸ææ³«ç«çç¹ç¾ç©ççµçµ¢ç¸£è·è¡ï¨è³¢é顯åç©´è¡é å«ä¿ åå¤¾å³½æ¾æµ¹ç¹è
èè¢éé °äº¨å
åå"],["fba1","å½¢æ³æ»ç
çç¯çç©ç©èè¢è¡¡éé¢é£é¦¨å
®å½æ æ
§æ³èè¹é¯éä¹äºå¼å£å£ºå¥½å²µå¼§æ¶æææ§æ¯«æµ©æ·æ¹æ»¸æ¾æ¿ æ¿©ççç¥çç çç¥ç³ç¸è¡è¦è«è¿èèè´è·è±ªé¬é é¡¥ææé
·å©ææ··æ¸¾ç¿é忽æç¬å弿±æ³æ´ªçç´
è¹è¨é´»ååå¬
樺ç«çµ"],["fca1","ç¦ç¦¾è±è¯è©±è貨é´ï¨æ´æ«ç¢ºç¢»ç©«ä¸¸åå¥å®¦å¹»æ£ææ¡æ¥æ¡æ¸ç
¥ç°ç´é驩鰥活æ»ç¾è±éå°å¹å¾¨ææ¶æ°æ
æææ¦¥æ³æ¹æ»æ½¢ç
ççç¯ç°§èèééé»å¯å廻徿¢ææ·æ¦ææªæ·®æ¾®ç°çªç¹ªè¾è´è誨è³åç²å®æ©«éå®ååææ
ææ¢æ¶æ·"],["fda1","ç»è´é
µé©ä¾¯åååå¼åå
å¸¿å¾æ½ç
¦çé
åå³å¡¤å£ççç»è°è¨æè¨å§æç
è±å忝å½å¾½æ®æç
諱è¼éº¾ä¼æºçç¦è§æ¤èé·¸å
å¶åæ´¶è¸é»ææ¬£ççåå±¹ç´è¨æ¬ 欽æå¸æ°æ´½ç¿èåååå«å姬å¬å¸æææ±ææ¦çç¹çºç§ç¦§ç¨ç¾²è©°"]]
42957 42958 42959/***/ }), 42960/* 184 */ 42961/***/ (function(module, exports) { 42962 42963module.exports =
vendor: 17,595 bytes, line 42963
42963[["8740","ä°ä°²ää¦ä¸ð§§äµ·ä³ð§²±ä³¢ð§³
ã®ä¶ää±ä±ð¤¿ð£ð§ð¦ºð§ä±ðªäää²
𧱬ä´äª¤ä¡ð¦¬£ç¥ð¥©ð¡©£ð£¸ð£½¡æå»"],["8767","ç¶å¤ð¨®¹ã·´é´ð§¯¯å¯ð¡µåª¤ã¥ð©º°å«å®·å³¼æ®èð©¥
ç¡ç㡵ð¡µð£ð¦¡ã»¬"],["87a1","ð¥£ã«µç«¼é¾ð¤
¡ð¨¤ð£ªð ªð£äèé¾é¯ä¤°èå¢ééç§ç¨²æ 権è¢çç¯
æç¨¬åéã¦ç𥶹çé¿å³ä¤¯åä±ð£å 穲ð§¥è®ä®ð¦ºäð¥¶ç®®ð¢¼é¿ð¢ð¢ð¢é¿èð£»ä´é¿ä¡ðª·¿æç®é¿"],["8840","ã",4,"ð ã
ð ð ããð 𡿨ãð ããããð ããÄÃÇÃÄÃÄÃÅÃÇÃà¿¿ÃÌẾ࿿ÃÌá»ÃÄáÇà ÉÄéÄèīÃÇìÅóÇòūúÇùÇÇÇ"],["88a1","Çü࿿êÌế࿿êÌá»ÃªÉ¡ââ"],["8940","ðª©ð¡
"],["8943","æ"],["8946","丽æ»éµé"],["894c","ð§µæä¼ä¼¨ä¾¨å
å
´åå¤å¡å¨å»åååå¢å£°å¤å¤å¤²å¤´å¦å®å®å²åºæ»ææ¾æ æ¡¥æµç¼çµçº¤çº¬çººç»ç»ç»ç¼ç¼·èºèè¯è§è®¾è¯¢è½¦è½§è½®"],["89a1","çç³¼ç·æ¥ç«å§"],["89ab","é碸é
è¼"],["89b0","è´è¶ð §§"],["89b5","èé»ä³é·é¸ä°¾ð©·¶ð§é¸ðª³ã"],["89c1","æºè¾ç"],["89c5","ä¤é©¬éªé¾ç¦ð¨¬ð¡·ð 𢫦两äºäºäºäº¿ä»«ä¼·ãä¾½ã¹ååã½ãã¥åå¤
åå¼å
äºå¹åå§ãå©ãå°ãåå£ãã²ãåå£å´å¹åå¯åå£å¨ãå¿ã¥ã¿åã
"],["8a40","ð§¶å¥"],["8a43","ð ±ð ´ð¥«åð¢³ã§¬ð è¹ð¤¶¸ð©¥äð¨¾çºð¢°¸ã¨´äð¨
𦧲𤷪æð µ¼ð ¾´ð ³ð¡´æè¹¾ð ºð °ð ½¤ð¢²©ð¨ð¤"],["8a64","ð µð©©ð¨©ä´ð¤º§ð¢³éª²ã©§ð©´ã¿ãð¥ð©ð§£ð¢µéµ®é "],["8a76","äð¦¥æ´å£ð¢µð¢¯ð¡·ã§»ð¡¯"],["8aa1","ð¦ð¦ð§¦ æªð¥ð ±è¹¨ð¢¡ð¨ð ±"],["8aac","ä ð ©ã¿ºå¡³ð¢¶"],["8ab2","ð¤ð ¼ð¦ð ½ð ¶å¹ä»äº"],["8abb","䪴𢩦ð¡èªé£µð ¶æ¹ã§¾ð¢µè·å¡æ¼ã¹"],["8ac9","ðªð ¸ð¢«ð¢³"],["8ace","ð¡ð£§ã¦ã¨ð¨ã¸ð¥¹ð¢å𠼱𢲲ð© ã¼æ°½ð¤¸»"],["8adf","ð§´ð¢ºð¢ðªð¨³ð ¹ºð °´ð¦ ç¾ð¡ð¢ 𢤹ã»ð¥£ð ºð ¾ð ºªã¾ð ¼°ð µð¡
ð ¹"],["8af6","𠺫𠮩ð µð¡ð¡½ã¿¹ð¢æ²ð ¾"],["8b40","ð£´ð§¹ð¢¯ð µ¾ð µ¿ð¢±ð¢±ã¨ð ºð¡ð ¼®ðª²ð¦ð¨³ð¨¶ð¨³éªåèå¹"],["8b55","ð©»é°¦éª¶ð§ð¢·®ç
è
è¬å°ð¦²è´ãåð¨½é¶ð »ºð ¸ð ¹·ð »»ã𤷫ãð ³å¯ð¢µð¡ð ¸ð ¹¸ð¡¸ð¡
ð¨ð¡ð ¹¹ð¤¹ð¢¶¤å©ð¡ð¡ð¡µð¡¶åð ¸"],["8ba1","ð§ð¨ð ¾µð ¹»ð¥
¾ãð ¾¶ð¡ð¥ðª½ð¤§ð¡ ºð¤
·ð¨¼å¢å¨ãð¥½ç®²å¨ä 䬬鼧䧧é°é®ð¥´ð£½å»ã²å丨å¤ð¡¯ð¯¡¸éð ä¹äº»ã¾å°£å½å¿ã£ºææµæºæ°µæ°ºç¬ç«ä¸¬ç𤣩ç½ç¤»ç³¹ç½ð¦ªã"],["8bde","ð¦èèð¦ð¦¥å衤è§ð§¢²è® è´é
é¸é¿é¨ð¨¸é¦é¡µé£é£é¥£ð© é±¼é¸é»æ¯ï¤ä¸·ð éæ·é¢"],["8c40","廿·¾ð©±³é¾¦ã·è¢ð¤
ç·å³µä¬ ð¥ã𥴰æ¢ð¨¨²è¾§é¶çæçºð£ðªã²ð¡¦ä¬ç£¤çå®ð¨äæ©£ðªºä£è𠩯稪ð©¥ð¨«ªéçå¤ð¢¾é´ç𨧣龧ç亣俰å¼ä¸¯ä¼é¾¨å´ç¶å¢å£ð¡¶¶åºåºå¿ð¢æ"],["8ca1","ð£¹æ¤æ©ð£±£æ³¿"],["8ca7","çð¤
çã»ð¤¨å¬ç¹è®ð¥²¤ð¥çªç¯¬ç³ç¹¬è¸è龩è¢é¾ªèº¹é¾«è¿èé§ é¡é¾¬ð¨¶¹ð¡¿ä±ä¢å¨"],["8cc9","顨æ«ä¶å½"],["8cce","è𤥻è¿ð§ä²ð¦µ´åµ»ð¦¬ð¦¾¾é¾é¾®å®é¾¯æ§ç¹æ¹ç§ã¶äð£ð¢ää¶"],["8ce6","å³ð£¬è«¹å±¸ã´ð£åµ¸é¾²ç
äð¤¬ð¡¸£ä±·ã¥¸ãð ¤ð¦±è«ä¾´ð ¹å¦¿è
¬é¡ð©£ºå¼»"],["8d40","ð ®"],["8d42","ð¢ð¨¥ää»ð©¹ã¼é¾³ðªµä¸ãä·ð¦±ä
¼ð¨²ð§¿äã£ð¥ä¡ää¶ä±»äµ¶äªã¿ð¤¬ã¡ää½äå´¾åµåµã·¼ã 嶤嶹ã ã ¸å¹åº½å¼¥å¾ã¤ã¤ã¤¿ã¥ææ½å³¥ã¦æ·æ¹æã¦¸æ¬ææ¥æã§¸å±"],["8da1","ã¨æ¢æ»ææã©æå´å¡é¾ãªæãª½æ¿æã«²æã¬¢æãæ¤æ ãæ¡æ¢ã²ã±ã»æ¤æ¥çæ¥¤æ¦æ¦
㮼æ§ã¯æ©¥æ©´æ©±æªã¯¬æªã¯²æª«æªµæ«æ«¶æ®æ¯æ¯ªæ±µæ²ªã³æ´æ´æ´¦æ¶ã³¯æ¶¤æ¶±æ¸æ¸æ¸©æºð¨§æº»æ»¢æ»é½¿æ»¨æ»©æ¼¤æ¼´ãµð£½æ¾æ¾¾ãµªãµµç·å²ã¶ç¬ã¶ççç¯ç¿çð ¥äã±ð »"],["8e40","ð£»å¾ð¦»ç¾ð¥ ãæ¦¢ð¨¯©å´ç©ð¥£¡ð©ç©¥ç©½ð¥¦¬çª»çª°ç«ç«çð¦äç«ç«ç«ªä¯å²ð¥°ç¬ç笩ð¥ð¥³¾ç®¢ç¯è𥮴𦱿ç¯è¡ç®ç®¸ð¥´ ã¶ð¥±¥è篺ç°ç°µð¥³ç±ç²ð¤¢ç²¦æ½ð¤¸ç³ç³ç³¦ç±´ç³³ç³µç³"],["8ea1","ç¹§äð¦¹çµð¦»çç¶ç¶«çµç¶³ç·ð¤ð¦©ç·¤ã´ç·µð¡¹ç·¥ð¨ç¸ð¦¡ð¦
ç¹®çºä«é¬ç¸§ç½ç½ç½ç¤¶ð¦é§¡ç¾ð¦ç¾£ð¡¡ð ¨äð£¦äð¨ºç¿ºð¦è
èèè¨è¯ðªð¦³è»è¼è¡ð¢ä¦ð¦¦ð£·£ð¦¨æ¥è§ð¨©èèå¢°ð¢¶æ±¿ð¦ð¤¾¸æ§ð¡èð¡¡æ©ð¤©¥ð¤ªäºè©ð ¬ð¦©ð£µ¾ä¿¹ð¡½è¢è¢ð¦¬ð¤¦§ð£°ð¡³ð£·¸èªæ¤ð¯¦ä"],["8f40","èèèð ¸ð¡´ãð£
½ð£è»è¢èð£ºð¦¶£ð¦¬
ð¦®ð£ã¶¿èå¬è
ä𦶥è¬èèã¾ð¦»æ©èãð¦¹ð¢»¯è𥯤è±ã·ä¤æª§è𣲵ç¥è¨ð¦®ð¦¹·ð¦¹èèèä èè¤ð¥²äð¥³äè´å«²ð¦ºä§è³äæ¿è"],["8fa1","ð¨¥ð¨»èð§èð¡ð§ð¯¦²äªè¨ãð¡¢¢å·ð§è¾è±ðª¸è®ð¢°§è±èè å¡è¬æ¡äè¡
è¡ð§ 𣶹ð§¤è¡è¢ä袴袵æè£
ç·ð§è¦è¦è¦¦è¦©è¦§è¦¼ð¨¨¥è§§ð§¤¤ð§ª½èªçé¾èªð§©ç«©ð§¬ºð£¾ä𧬸ç
¼è¬è¬ð¥°ð¥¥è¬¿èè誩𤩺è®è®èª¯ð¡äè¡è²ð§µð§¶ð¯§ã¥ð§µè³ð§¶ð§¶½è´è´ð¡¤è³çè´ð¤³ã»èµ·"],["9040","è¶©ð¨ð¡ð¤¦ã¼ð¨¼ð§ç«§èºèº¶è»éè¼è¼ð¨¥ð¨è¾¥éðªð ©è¾³ä¤ªð¨§ð¨½ð£¶»å»¸ð£¢è¿¹ðªð¨¼ð¨ð¢¥ã¦ð¦»é·ð¨¼ð§ª¾é¡ð¨¬ð¨é¨ð¨éð¨¦é®é½é
§ã«°é©é粬𨤳ð¡ºéæ²éé¢ð¥¹é¹ð¨«ð£²ð¨¬ð¥"],["90a1","ð ´±é¬é«ð¨«¡ð¨¯«çå«ð¨«¢ð¨«¥ä¥¥é𨯬𨰹𨯿é³é躼é
é¦é¦é æ¿¶ä¹ð¢ºð¨ð¡¼ð£¸®ä§æ°é»éä
¬é£ð¦»æé¶ç£µð¨« é½å䦡𦲸ð ´ð¦ð©¯ð©¥ð¤«ð¡¤ð£é±èé¶ä¨ä½ä
𤫩çµåééð©éåð©«éé¥åð£·ð£¼ééé±é¾ééé ð¥¬é®çð©³é¿éµð©ð§¥ºä«é ´é ³é¡é¡¦ã¬ð§
µãµð °ð¤
"],["9140","ð¥é£é¢·é£é£ä«¿ð¦´§ð¡å°é£¡é£¦é£¬é¸é¤¹ð¤¨©ä²ð©¡ð©¤
é§µé¨é¨»é¨é©ð¥¥ãð©±ð©¯é« é«¢ð©¬
é«´ä°é¬é¬ð¨å´é¬´ð¦¦¨ã£ð£½ééð©´¾å©
ð¡¡£é®ð¤é°é¯¿é°ð©¹¨é·ð©¾·ðªðª«ðª¡ðª£ðªéµ¾é¶ðª´é¸æ¢"],["91a1","é·ð¢
ðªðª 𡤻ðª³é´¹ðª¹ðª´éºéºéºéº¢ä´´éºªéº¯ð¤¤é»ã ã§¥ã´ä¼²ã¾ð¨°«é¼é¼ä®é¤ð¦¶¢é¼é¼é¼¹ååé½
馸ð©é²è¿é½¢é½©ç«é¾ç䮾𤥵𤦻ç
·ð¤§¸ð¤ð¤©çð¨¯ð¡£ºç¦ð¨¥¾ð¨¸¶é©é³ð¨©é¬éé𨥬ð¤¹ç㻫ç²ç©çð¤³ð¤¸ç
¾ð¡¯ç£ð¡¢¾ð£ã»ð¡¢
ð¥¯ð¡¸ã¢ð¡»ð¡ ¹ã¡ð¡´ð¡£ð¥½ã£ð¡å𤨥ð¡¾ð¡¨"],["9240","ð¡ð¡¶èð£¦èèð¤¦ð§
¥ð£¸±ð¥ð£»»ð§ä´ð£®ð©¦ð¦¼¦æ¹ã³ã°ã·§å¡¬ð¡¤¢æ äð£¿ð¤¡ð¤ð¤ð¦°¡ååð¦±åð ¿ð ®¨ð ¸éð¨¬é仸å«ã ð¤¶äº¼ð ¥ð ¿ä½ä¾ð¥å©¨ð «ð ã¦ð ð ãµä¼©ð 𨺳ð µè«ð äº"],["92a1","ååä¾¢ä¼ð¤¨ð£ºä½å®å¬åä¿ä¿¥åå¼å
å
å
å
æ¹¶ð£ð£¸¹ð£º¿æµ²ð¡¢ð£ºå¨åð äð £ð ð 赺ð¨ªð åå¤ð ¡³å¡é®äºçð¤ð ° ð¤¦¬ð¡¤æ§ð ¸ç¹ã»ççççä®ð¤ª¼ð¤åãçð¤å´ð
åð ¯åéé´é¦ååå¿ã¾å£åªð¨©ð¡ºð¡¯ð¡å¨¬å¦¸é婾å«å¨ð¥¥ð¡§³ð¡¡¡ð¤ãµæ´
ç娡ð¥º"],["9340","åªð¨¯ð é çð¡ç
䥲é𨧻é½ã å°å²å¹å¹ð¡¦ð¡¥¼ð£«®å»åð¡¤ð¡¤ãð¡¢ ãð¡¾ãèªð¨©ð¡¶ºð£²ð¨¦¨å¼å¼ð¡¤§ð¡«å©«ð¡»åèð§½è¡ æ¾ð¢¡ ð¢«å¿ãº¸ð¢¯ð¢¾ð©ð¦½³æð ¾ð ð¢æææµð¢²ð¢´ð¤ð©
"],["93a1","æ±ð¤¥ð¢ªã¨©ð¢¬¢ð£ð©£ªð¢¹¸æ·ðªæ¶æ±æð¤§£ð¢µ§æ¤ð¢²¡æ»æ«æ¥²ã¯´ð£ð£ð¤¦ð£«åð£ ð¡£ð©¿æð£ð£³ã« äð¥ð¨¬¢ð¥ð¡¼ð¥ð¥¥ç£®ð£ð¡ ªð£´ã¤ð£ð£ð¤æð¦´¤æ«ä®æ°ð§¡°ð¡·«æ£ð£ð£¡æð¥¡²ã£ð£ ºð£¼ã®ð£¢ð£¾çã®æð¤ªæ¢¶æ ã¯æª¾ã¡£ð£ð¤æ¨³æ©æ«æ¬
ð¡¤ææ¢æ©ã¯æ©ºæð£¿ð£²é é²ð¨¯ªð¨«"],["9440","éð¨ð¨§é§æ¶¥æ¼ð¤§¬æµ§ð£½¿ã¶æ¸ð¤¼å¨½æ¸å¡æ´¤ç¡ç»ð¤ð¤¶ç±çççð¤ð¤¥å
¹ð¤ª¤ð «çºð£»¸ð£ð¤©ð¤¤ð¥¿¡ã¼ãº±ð¤«ð¨°£ð£¼µæ§ã»³çç¼éç·ä𦷪äçã½£ð¤³ð¤´ã½çç³ðªã¬ç¨ð¨«ð¤¦«ð¤¦ã«»"],["94a1","ã·ð¤©ã»¿ð¤§
𤣳éºå²é𨫣𡡤åð¥¡ð¥§ç¸ð£²ççç»ð¤ð£ã©ð¤£°ç¸ç㺿𤪺ð¤«äð¤ªð¦®éð¥ç ç¢ç¢ç£çç¥ð§ð¥£äç¦è禥æ¨ð£»ºç¨ºç§´ä
®ð¡¦ä²éµç§±ð µð¤¦ð 𣶺ð¡®ãå«ã°ãªð ð °ç«¢å©ð¢µð¥ª¯ð¥ªå¨ð 磰娪ð¥¯ç«¾ä¹ç±ç±ä𥮳𥺼𥺦ç³ð¤§¹ð¡°ç²ç±¼ç²®æª²ç·ç¸ç·ç½ð¦¡"],["9540","ð¦
ð§ç¶ð¥ºäªð¦µð ¤æð ð£åð¦ð¦¸ð¤¥¢ç¿ç¬§ð ¬ð¥«©ð¥µç¬ð¥¸é§¦è
é©£æ¨ð£¿ã§¢ð¤§·ð¦é¨ð¦ èð§§ð¦³äªè·äèèè
ð¦´é£ð¦©è¢è¥ð¦©è𦶧èð§åªä
¿ð¡¡å¬«ð¡¢¡å«¤ð¡£è 蜨ð£¶è ð§¢å¨"],["95a1","è¡®ä½
è¢è¢¿è£¦è¥¥è¥ð¥è¥ð§
ð§ð¨¯µð¨¯ð¨®ð¨§¹ãºè£äµäã²è¨½è¨ð©å½é«ð¤æç©çð¡¡
éµè²è³©ð§·å¦çå§°ä®ã踪躧ð¤°è¼°è½ä´æ±æ¾»ð¢¡ä¢æ½¹æºð¡é¯©ãµð¤¤¯é»éå±ä¤é»éð¨©ä¢ð¨«¼é§ð¨°ð¨°»è¥è¨«éé§éé𨴴ç
ã»ð¤£¿ð¤©ð¤ªã»§ð£¥é𨻧𨹦𨹥ã»ð¤§ð¤©¸ð£¿®çç«ã»¼éð©°"],["9640","æ¡ä¨ð©ð¥éé¨ð¨¦ð¨°¦ð¨¬¯ð¦¾éºå¬è©ä¤¼ç¹ð¤éé±é¤¸ð ¼¦å·ð¨¯
𤪲é ð©é¶ð©é¥äð¨ð¤©§ð¨¤é£ð¨©
ã¼éªä¤¥è餻é¥ð§¬ã·½é¦ä¯é¦ªé©ð¨¥ð¥£æªé¨¡å«¾é¨¯ð©£±ä®ð©¥é¦¼ä®½ä®é½å¡²ð¡å ¢ð¤¦¸"],["96a1","ð¡¨ç¡ð¢ð£¶¸æ£
ãµ½é㤧æ
ð¢ð¢¥«æé±é±é±»é°µé°é¿é¯ð©¸é®ðªµðª¾é´¡ä²®ð¤é¸ä²°é´ðª´ðªðª³ð©¤¯é¶¥è½ð¦¸ð¦¿ð¦®è¼ä³ð¦¶¤ð¦ºð¦·°è è®ð¦¸ð£ð¦¤ç§¢ð£ð£ä¤ð¤§ãµ¢éé¾éð ¿ç¢¹é·é俤ãé¤ð¥ç ½ç¡ç¢¶ç¡ð¡ð£ð¤¥ãä½²æ¿æ¿ççåð¤µå»å£³åé´åç´ã¯ð¤¬ç«ð¦±ð¤¾å¬¨ð¡µð¨©"],["9740","æå«å¨ä¼ð¤ã¬ä»ð¨§¼é»é¸ð¡£ð ¼è²ð¦³ð¡ð¤ºð¢°¦ð¤å¦ð£¶·ð¦ç¶¨ð¦
ð¦¤ð¤¦¹ð¤¦ð¨§ºé¥ç¢ã»©ç´ð¨£ð¡¢ã»¡ð¤ª³æ«ç³ç»ã»ð¤¨¾ð¤ªð¡ð¤©¦ð §ð¡¤ð¤§¥çð¤¤ç¥ð¤¥¶éç¦éð ¾é±ð¨«ð¨¨é𨯧ð¥ä¤µð¨ªç
«"],["97a1","ð¤¥ð ³¿å¤ð 𠯫𠲸åç§ð¡ºç·¾ð¡ð¤©ð¡¡ä®éãð¨«ð¤¦å¦°ð¡¢¿ð¡¢ð§åª¡ã¢ð£µã°é婹ð¨ªð¡¡¢é´ã³ð ª´äªã¦å´ãµ©ãµð¡ç
µä»ð¨æ¸ð©¤ä«æµð§¹ç§æ²¯ã³ð£¿ð£¸æ¸æ¼ãµ¯ð µçã¼ãäã»ä¡±å§é®ä¤¾è½ð¨°ð¦¯å åãð¡ç¾ð¤¢ð¤©±ð¢¿£ð¡°ð¢½æ¢¹æ¥§ð¡ð£¥ð§¯´ð£ð¨ªð£ð£ºð¤²æ¨ð£ð¦²·è¾ää"],["9840","𦴦ð¦µð¦²ð¦¿æ¼ð§è½ð¡ºèð¦²ð§ð¡å¦åªð¡³å©¡å©±ð¡¤
ð¤¼ã姯ð¡¼ãçéæð¤¥å©®å¨«ð¤æ¨«ð£»¹ð§¶ð¤ð¤çð¤ð¨§¡ä¾°ð¦´¨å³ð¤ð§¹ð¤½æ¨ð¤ð¡ç¦ç³ð¤©ã¶¥æ³ð¯ ¥ð¤©ç¹¥å§«å´¯ã·³å½ð¤©ð¡ç¶¤è¦"],["98a1","å
𣫺ð£ð å¾ð £ð ã¿¥ð¡¾ðª¶çð©
åµ°çç³ð¨©ð© ä¿ç¿§ççð§«´ç¸ç¹ð¥¶çç㺩ð§¬é¬çµð¤£²ç¡è¶ã»çã»æ²¢å½ççç㻢㻰㻴㻺çã¼ã½ççç²çã½¼ççã¿çã¿ç´ã¿çºð¤½çå£è¦å¡©äç乿¡ä
ãçäªä¯å±ç¾ç売ç ç¹ç ä¨ç ¹ç¡ç¡ç¡¦èð¥µç¤³æ 礲ä"],["9940","äç¦ç¦è¾»ç¨è¾¼ä
§çªä²çª¼è¹äç«ç«ä両ç¢ç¬ç»ç°ç°ä äºç±»ç²ä粸äç³è¾çð ³ç·ç·ç·ç·½ç¾®ç¾´çäè è¥ç¬¹è®è±èã·å´ç è·è©äèçªèèç èä㬹è
è
è
"],["99a1","äå ºè
¼èä¥èäè¥å¯èè¤èäè¦è¶èèè¿ä°è驿¦è
çµè¤æ£èäè¾è¡è¸èè¸èä»è¯è°è ä·è²èè²è¯é
èää袮裿褤è¥è¦ð§¥§è¨©è¨¸èªèª´è±è³è³²è´äå¡è·ä仮踺ååè¹±åµèº°ä ·è»è»¢è»¤è»è»²è¾·è¿è¿è¿é³é§ä¢é£ éä¤é¨éé«é±é®é¿"],["9a40","é£é«é³é´é½éééä¥
ä¥éº¿éåééé¾ä¥ªéé¹éé¢ä¦§é´é³ä§¥æ 䨤é䨵é²éå䫤æ¨é¢¹ä¬é£±å¡é¤é¤å´é¤é¤·é¥é¥é¥¢ä°é§
ä®é¨¼é¬çªé©é®é¯é¯±é¯´ä±é° ã¯ð¡¯éµé°º"],["9aa1","黾åé¶é¶½é·é·¼é¶è¾¶é¹»éº¬éº±éº½é»é黢黱黸ç«é½ð ð ·ð æ¤é妬ð å¡éã¹ð ð ð ¶ð¡ºåç
³ð «ð «ð ®¿åªð¯ »ð ¯å𠯻𠰻ð ±ð ±¥ð ±¼æ§ð ²åºð ²µð ³ð ³ð µ¯ð ¶²ð ·æ¥é°¯è¥ð ¸ð ¸ð »ð ¾ð ¼ð ¹³å° ð ¾¼å¸ð¡ð¡ð¡¶æð¡»ð¡ð¡ãð¡¿ð¡ð¡¯ð¡»å¤èð¡£ð¡µð¡¶è®ð¡·ð¡ð¡ð¡ä¹¸ç»ð¡ 𡥪"],["9b40","ð¡¨ð¡©
ð¡°ªð¡±°ð¡²¬ð¡»æð¡»ð¡¼çæ¡ð¢
æ§©ãð¢¼ð¢ð¢ºð¢ªð¢¡±ð¢¥è½ð¢¥§ð¢¦ð¢«è¦¥ð¢«¨è¾ ð¢¬é¸ð¢¬¿é¡éª½ð¢±"],["9b62","ð¢²ð¢²·ð¥¯¨ð¢´ð¢´ð¢¶·ð¢¶ð¢¹ð¢½´ð¢¿ð£³ð£¦ð£ð£å¾±ææ¿ð§©¹ð£§ð£³ç𤦺çð£ð£çºð 墵æ"],["9ba1","æ¤ð£ª§ð§ð¥¿¢ð£¸ð£º¹ð§¾ð¢ä£äª¸ð¤ð¨ªð¤®ð¤ð¤»ð¤´ð¤ð¤©
ð åð å¦ð¡º¨ã®¾ð£³¿ð¤ð¤åð¤´ã¦ð¤¯ð¨¨ð©§ã¢ð¢èð¨é§ð¤ 𤣻ð¤¨çð¤«ð ±¸å¥¥ð¤º¥ð¤¾ð ¹è»ð¥¬åå¿ç
±ð¥ð¥ð£½ð¤ª§å¼ð¥ð¥®ð¦éã³ð¥¿ð§²ð¥äð¥¢ð¥¦ð¥ð¤¤¿ð¥¡å¦ã»ð£æð¥¤ä¼ð¨¥ð¥ª®ð¥®ð¥°ð¡¶å¡ç
æ¾¶ð¦ð§°éð¦²ð¤¾è¢ð¦ð¦"],["9c40","åµð¦¯·è¼¶ð¦ð¡¤è«ªð¤§¶ð¦ð£¿¯ð¦ä¯ð¦¿ð¦µð¢é¥ð¥¡æå¨§ð¯£ä¾»å¹ð¤¡ð¦¼ä¹ªð¤¤´éæ¶ð¦²½ã襷ð¦ð¦¡®ð¦ð¦¡çð¦£çð©ð ¨ð¦¤¦é𦤹ç©
鷰𦧺騦ð¦¨ãð¦©ð ¡ç¦ð¦¨´ð¦å´¬ð£èð¦®ä𦲤ç»è¡¥ð¦¶®å¢¶"],["9ca1","ãð¢ð§ð§ã±ð§ð§
éð¢
ºð§é°ð§¦ð¤§æ°¹éð§ð »¸è §è£µð¢¤¦ð¨³ð¡±æº¸ð¤¨ªð¡ 㦤ã¹å°ç§£ä¿æ¶ð©²ð©¢¤è¥ð§ð§¡åäð¡ã¦¡ð£¯ð¨¨ð¡
çè¦ð§§ð©¨å©§ä²·ð§¯ð¨¦«ð§§½ð§¨ð§¬ð§µ¦ð¤
ºçç¥¾ð¨æ¾µðªæ¨ð¨å¢ð¦¸é¿æ ¶éð¨
¯ð¨£ð¦¦µð¡ð£¯ð¨å¶
𨰰ð¨åé £ð¨¥å¶«ð¤¦æ¾æ§å𤪥ð£¾ã°æ¶ð¨ð¨´ð¨®ð¡¾¡ð¨
"],["9d40","ð¨ð¨¯ð¨ð¨ð¨¯ð¨ãð¨¨ð¨ªä£ºæ¦ð¨¥ç é𨦸ä²ð¨§§ä𨧨ð¨ð¨¯å§¸ð¨°è¼ð¨¿
ð©¬çð©ð©¼ã··ð©
ð¤«è¿çåð©§ð©©ð©°ð©¸ð©²ð©£ð©¥ð©¥ªð©§ð©¨¨ð©¬ð©µð©¶çºð©»¸ð©¼£ä²¤éðªç¢ðª¿ä¶éðªä¶ð ²è¾¾å"],["9da1","辺ð¢°è¾¹ð¤ªäç¹¿æ½æª±ä»ªã¤ð¨¬¬ð§¢ãºèºð¡µð¨¤ð¨¬ð¨®ð§¨¾ð¦¯ã·«ð§ð£²·ð¥µð¥¥äºð¥ºð¦å¿ð ¹è¸åð£ºð¤²ææð¡¶ð¡¡»æ°åð¥±åð¥ã·ð©¶ä±½å¢åç½ð¥»å¥µð£µè°ä¸ð ¿ªð µð£ºèéµè´ç»é±
çç¹é
å²è
è·å¥è²èè½åªç¥¢ååð ºãå
屿±ð¨¢ãç´å°åºåå²ð ±ð ²å»ð¥
𠹶𢱢"],["9e40","𠺢麫çµåð¡µæéåè³ç¶é
¶æ¼æ¹æ¾å©ð¢é±²ð¢º³åãð ¶§å§åååç¦è¸ð¦¢ç±è¶è èè£è¶èð¡ä¬çð¤å®èð¦¢å»ð¢´ð§´¯ð¤£ð§µ³ð¦»ð§¶é
°ð¡é𣳼ðª©ð º¬ð »¹ç¦ð¡²¢äð¤¿ð§¿¹ð ¿«äº"],["9ea1","é±æð¢¶ ä£³ð¤ ð©µ¼ð ¿¬ð ¸æ¢ð§£ð ¿"],["9ead","ð¦ð¡ç£çºéµä¸ä¸ã·å¬æ²²å§ã¬ã§å½ã¥ð¤å¢ð¤®èååªð¥ªð ¥¹"],["9ec5","ã©ð¢¥ç´ð©º¬ä´é¯ð£³¾ð©¼°ä±ð¤¾©ð©ð©¿è𣶶ð§²ð¦³ð£ æ®ç´¥ð£»·ð£¸¬ã¨ªéåã¹´ãºä©ð ç嫰𠺶硺𧼮墧ä¿å¼é®åµ´çðª´éº
䳡ç¹ã»æð£ð¤²"],["9ef5","åð¡©å§ð¤¥£ð©¸å´ð§®ãæ±éµ¼"],["9f40","ç±é¬¹åð¡¬å±æð©ð¦µð§
¤è𠴨𦴢𤫢𠵱"],["9f4f","å¾ð¡¼å¶éð¡·éºéç¬é¬å³ç®£æ¨æµé«¿ç¯é¬ªç±¾é¬®ç±ç²é°ç¯¼é¬é¼é°ð¤¤¾é½å³å¯ä¿½éºä¿²å ã¸åå§å妷å¸éé¶«è½å©é´é¥éºå¬æ°"],["9fa1","椬åé°é´ä°»éæ¦å¦çð¡é§å³"],["9fae","é
éé
"],["9fb2","é
ð¨ºæ¿ð¦´£æ«åéçºæ
ð ¼ç籰𥰡𣳽"],["9fc1","ð¤¤çé®ä¸ªð ³è¾è¡"],["9fc9","屿§ååºå巵仿°±ð ²ä¼¹åååè¶ã¾å¼ã³"],["9fdb","æé
¼é¾¥é®é ®é¢´éªºéº¨éºç
ºç¬"],["9fe7","毺è 罸"],["9feb","å ðªè¹·é½"],["9ff0","è·è¹é¸è¸æð¨½è¸¨è¹µç«ð¤©·ç¨¾ç£æ³ªè©§ç"],["a040","ð¨©é¼¦æ³èçðª²ç¡ð¯¡è´ç¢ç±è¬çç±è³«ð¤ª»è¯å¾ºè¢ ä·"],["a055","ð¡ »ð¦¸
"],["a058","詾ð¢"],["a05b","æ½ç§é«éµé®é®èµ"],["a063","è è³·ç¬é¡é®°ãç²ä°ç±é¥ð¦
æ
ä°éºæ
½"],["a073","åæ
¯æ¦æ¹æã©æ¢åªð£µæ¤æ ã"],["a0a1","åµð¨¯è¿ð¨¸¹"],["a0a6","åð¡µç¤å²é¸ð ¼»ä¥"],["a0ae","ç¾"],["a0b0","ç³ð¥¼ç³ç¨è¦è£çµç
ç²è¦èæè¢ð§èç°èç¤è¦ð¦çð¦»è©èèèè©è²èç«ç¸èãµæ¦²è¶¦"],["a0d4","è¦©ç¨æ¶¹èð¤ç§ã·ç
¶æ¤æã³ç
¢æ·"],["a0e2","ç½±ð¨¬çæ©ä¾å ã°ð£³ð¥»ð§ð¥±ð¡¥ð¡¾ð©¤ð¦·ð§å³ð¦ð¨¨ð£·ð ®ð¦¡ð¤¼ä¢å¬ð¦é½éº¦ð¦«"],["a3c0","â",31,"â¡"],["c6a1","â ",9,"â´",9,"â
°",9,"丶丿äº
äº ååå«å¹å¸å©å¶å¤å®å·â¼³å¹¿å»´å½å½¡æ´æ çç¶è¾µé¶Â¨Ëã½ã¾ãããä»ã
ããã¼ï¼»ï¼½â½ã",23],["c740","ã",58,"ã¡ã¢ã£ã¤"],["c7a1","ã¥",81,"Ð",5,"ÐÐ",4],["c840","Ð",26,"Ñж",25,"â§â¸â¹ãð ä¹ð åä"],["c8a1","é¾°åé¾±ð§"],["c8cd","¬¦ï¼ï¼ã±ââ¡ããâºâºâºâºâºâºâºâºâºâºâºâº¥âº§âºªâº¬âº®âº¶âº¼âº¾â»â»â»â»â»â»â»â»â»£"],["c8f5","ÊÉÉÉɵÅøÅÊɪ"],["f9fe","ï¿"],["fa40","ð éð ð£¿
èäµç¯åµãð¤¥ð¨§¤éð¡§è®ð£³ç ¼ææð¤¤³ð¨¦ªð 𦮳ð¡
侫ð¢å𦴩ð§ªð£ð¤ª±ð¢å©ð ¾å¾¤ð ð æ»ð å½åãºå顬ãè𤦤ð å
ð£´å
ªð ¯¿ð¢¼ð ¥ð¢°ð ð£³ð¡¦å®è½ð ³ð£²å²å¸"],["faa1","é´´åååã³å𤪦å³å¢ååèæ¤¾ð£å½»åå¦å¼åµååå¹å
ç°èå èð¦¬å
ð¨«åæ»ð£¾ð ¥ð£¿¬å³å𠯢æ³ð¡¦æ çæãºªã£ð¡¨çä¢åå´ð¨«å¾å¿ð¡ð¡ç¦åð¨ªå å«å®ç§ð¥²ã½çåå
æ±ä¹å¾å㪫ð ®å 𣿫𢶣å¶ð ±·åç¹å«ææµåð¦ð µ´ååå¤ä¦ð¡ð »ã¶´ð µ"],["fb40","𨦼ð¢åä³å¯çåå©å
ð¡£ð¤ºäð¤µæ³ð¡´å·æð£æ¤æåå磱å±éå¾åå¯åð¨¦ã£ð¡åð¤¥æ±®çåã±ð¦±¾å¦ð¡å ð¡ð¤£å ¦ð¤¯µå¡å¢ªã¡å£ å£ð¡¼å£»å¯¿åðª
ð¤¸éã¡å¤æ¢¦ãæ¹"],["fba1","ð¡¾å¨¤åð¡è
å§ð µð¦²ð¦´ªð¡å§ð¡»ð¡²ð¦¶¦æµ±ð¡ ¨ð¡å§¹ð¦¹
媫婣ã¦ð¤¦©å©·ãåªç¥å«ð¦¾¡ð¢ã¶
ð¡¤ã²ð¡¸åºåå¶æå¼ð§¨ää¡ð 坿
𡨴ð¥§ð ¥å¯³å®ä´å°
ð¡å°çå°ð¡²¥ð¦¬¨å±ä£å²
峩峯å¶ð¡·¹ð¡¸·å´å´åµð¡º¤å²ºå·è¼ã ð¤¤ð¢ð¢
³èã ¶ã¯å¸®æªå¹µå¹ºð¤¼ð ³å¦äº·å»å¨ð¡±å¸å»´ð¨"],["fc40","å»¹å»»ã¢ å»¼æ ¾éå¼ð ð¯¢ã«ä¢®ð¡ºå¼ºð¦¢ð¢å½ð¢±å½£é½ð¦¹®å½²é𨨶徧嶶ãµð¥ð¡½ªð§¸ð¢¨éð ð¨¨©æ±æ
𡡷㥣ã·ã¹åð¢´ç¥±ã¹ææ¤æ³ð¤¦ð¤¦ð§©ç¤å¡åª æ
¤è¤æ
ð¯¢¦ð¦»æå´ð æå®ªð£¾·"],["fca1","ð¢¡æð¨®ð©¥æã¤²ð¢¦ð¢£æ£æ
ææð æ
ð¡°æð¢¸æ¬ð¤§ã¨æ¸æ¸ð¡ð¡¼ææ¾ð¢¸¶é ð¤ð¥æ¡æ¥é»ã©¦æºã©ææ¼ð¤¨¨ð¤¨£æ
ææð£¾æµð¤¥ä¬·æäð¡ ©æ æ£å¿ð£æð£·ð£¸æð£¤ð£¥æð ¹µæ§ð¥¦æ³æ´ð¡¸½ð£±ð¨´ð£ð¥ç
𢣷馤æð¤ð¤¨¡ã¬«æ§ºð£ææ§æ¢ð¤ð©æä©æ ¢æ¹é¼æ ð£¦ð¦¶ æ¡"],["fd40","ð£¯æ§¡æ¨ð¨«æ¥³æ£ð£æ¤æ¤ã´²ã¨ð£¼ã®æ¬æ¥¡ð¨©ä¼æ¤¶æ¦ã®¡ð è£åæ§¹ð£ð¢ªæ©
ð£æªã¯³æ±æ«ð©ã°æ¬ð ¤£ææ¬µæ´ð¢æºµð£«ð µð¡¥ãå¡ð£æ¯¡ð£»¼æ¯æ°·ð¢ð¤£±ð¦æ±è¦æ±¹ð£¶¼ä
𣶽ð¤¤ð¤¤ð¤¤"],["fda1","ð£³ã¥ã³«ð ´²é®ð£¹ð¢ç¾æ ·ð¦´¥ð¦¶¡ð¦·«æ¶æµæ¹¼æ¼ð¤¥¿ð¤
𦹲è³ð¦½´åæ²æ¸è®ð¨¬¡æ¸¯ð£¸¯çð£¾ç§æ¹åªð£æ¿¸ãæ¾ð£¸°æ»ºð¡ð¤½äé°æ½æ½ãµæ½´ð©
°ã´»æ¾ð¤
æ¿ð¤ð¤
ð¤¹ð£¿°ð£¾´ð¤¿åð¤
ð¤
ð¤
ð¦çç¾ç§çççççäã·¨ç´çð¤·ç«ç
åªç
ç
®å²ð¤¥ç
é¢ð¤ç¬ð¤ð¤¨§ð¤¨¢çºð¨¯¨ç½ç"],["fe40","éçå¤éç¤éð¥
ç®ç𤥴梽ççã¹ð£æ æ¼½ççªç«ð¤ £ð¨ «ä£ð¨ ç¨ç®ççªð °ºð¦¨®ççð¤¢ð¡§ð¤¨¤æ£ã
𤦷ð¤¦ð¤§»ç·çæ¤ð¤¨¦ç¹ð ã»çð¢¢ç 𨺲çç¤ç¶è¹ç¬ã°ç´é±æ¨¬çä¥ð¤ª"],["fea1","ð¤
𤩹ð¨®åð¨°ð¡¢çð¡¦çç©çð¨»ð¡©å¯ð¨º¬é
ççç§ç®ð¤¾ã¼ð¤´çççç´çç¬ççç¯ç¶ð¦µçè¯ã¸ð¦¤ð¦¤ç¡ç¥ç·çð¦¾è¢ð¥ð¥
½ð¡¸çç¦çæ¯ð¥ çð£¬ç¯ð¨¥¤ð¨¥¨ð¡ç´ç ð¡¶ð¤¨æ£ç¢¯ç£ç£é¥ç¤®ð¥ ç£ç¤´ç¢±ð§è¾¸è¢ð¨¬«ð¦ð¢ç¦è¤æ¤ç¦ð¥¡ç¦ð§¬¹ç¤¼ç¦©æ¸ªð§¦ãº¨ç§ð©ç§"]]
42963 42964 42965/***/ }), 42966/* 185 */ 42967/***/ (function(module, exports, __webpack_require__) { 42968 42969"use strict"; 42970 42971 42972var Buffer = __webpack_require__(1).Buffer, 42973 Transform = __webpack_require__(15).Transform; 42974 42975 42976// == Exports ================================================================== 42977module.exports = function(iconv) { 42978 42979 // Additional Public API. 42980 iconv.encodeStream = function encodeStream(encoding, options) {
vendor: 12,939 bytes, lines 42981-43351
42981 return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); 42982 } 42983 42984 iconv.decodeStream = function decodeStream(encoding, options) { 42985 return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); 42986 } 42987 42988 iconv.supportsStreams = true; 42989 42990 42991 // Not published yet. 42992 iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; 42993 iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; 42994 iconv._collect = IconvLiteDecoderStream.prototype.collect; 42995}; 42996 42997 42998// == Encoder stream ======================================================= 42999function IconvLiteEncoderStream(conv, options) { 43000 this.conv = conv; 43001 options = options || {}; 43002 options.decodeStrings = false; // We accept only strings, so we don't need to decode them. 43003 Transform.call(this, options); 43004} 43005 43006IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { 43007 constructor: { value: IconvLiteEncoderStream } 43008}); 43009 43010IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { 43011 if (typeof chunk != 'string') 43012 return done(new Error("Iconv encoding stream needs strings as its input.")); 43013 try { 43014 var res = this.conv.write(chunk); 43015 if (res && res.length) this.push(res); 43016 done(); 43017 } 43018 catch (e) { 43019 done(e); 43020 } 43021} 43022 43023IconvLiteEncoderStream.prototype._flush = function(done) { 43024 try { 43025 var res = this.conv.end(); 43026 if (res && res.length) this.push(res); 43027 done(); 43028 } 43029 catch (e) { 43030 done(e); 43031 } 43032} 43033 43034IconvLiteEncoderStream.prototype.collect = function(cb) { 43035 var chunks = []; 43036 this.on('error', cb); 43037 this.on('data', function(chunk) { chunks.push(chunk); }); 43038 this.on('end', function() { 43039 cb(null, Buffer.concat(chunks)); 43040 }); 43041 return this; 43042} 43043 43044 43045// == Decoder stream ======================================================= 43046function IconvLiteDecoderStream(conv, options) { 43047 this.conv = conv; 43048 options = options || {}; 43049 options.encoding = this.encoding = 'utf8'; // We output strings. 43050 Transform.call(this, options); 43051} 43052 43053IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { 43054 constructor: { value: IconvLiteDecoderStream } 43055}); 43056 43057IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { 43058 if (!Buffer.isBuffer(chunk)) 43059 return done(new Error("Iconv decoding stream needs buffers as its input.")); 43060 try { 43061 var res = this.conv.write(chunk); 43062 if (res && res.length) this.push(res, this.encoding); 43063 done(); 43064 } 43065 catch (e) { 43066 done(e); 43067 } 43068} 43069 43070IconvLiteDecoderStream.prototype._flush = function(done) { 43071 try { 43072 var res = this.conv.end(); 43073 if (res && res.length) this.push(res, this.encoding); 43074 done(); 43075 } 43076 catch (e) { 43077 done(e); 43078 } 43079} 43080 43081IconvLiteDecoderStream.prototype.collect = function(cb) { 43082 var res = ''; 43083 this.on('error', cb); 43084 this.on('data', function(chunk) { res += chunk; }); 43085 this.on('end', function() { 43086 cb(null, res); 43087 }); 43088 return this; 43089} 43090 43091 43092 43093/***/ }), 43094/* 186 */ 43095/***/ (function(module, exports, __webpack_require__) { 43096 43097"use strict"; 43098 43099var Buffer = __webpack_require__(1).Buffer; 43100 43101// == Extend Node primitives to use iconv-lite ================================= 43102 43103module.exports = function (iconv) { 43104 var original = undefined; // Place to keep original methods. 43105 43106 // Node authors rewrote Buffer internals to make it compatible with 43107 // Uint8Array and we cannot patch key functions since then. 43108 iconv.supportsNodeEncodingsExtension = !(new Buffer(0) instanceof Uint8Array); 43109 43110 iconv.extendNodeEncodings = function extendNodeEncodings() { 43111 if (original) return; 43112 original = {}; 43113 43114 if (!iconv.supportsNodeEncodingsExtension) { 43115 console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); 43116 console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); 43117 return; 43118 } 43119 43120 var nodeNativeEncodings = { 43121 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, 43122 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true, 43123 }; 43124 43125 Buffer.isNativeEncoding = function(enc) { 43126 return enc && nodeNativeEncodings[enc.toLowerCase()]; 43127 } 43128 43129 // -- SlowBuffer ----------------------------------------------------------- 43130 var SlowBuffer = __webpack_require__(1).SlowBuffer; 43131 43132 original.SlowBufferToString = SlowBuffer.prototype.toString; 43133 SlowBuffer.prototype.toString = function(encoding, start, end) { 43134 encoding = String(encoding || 'utf8').toLowerCase(); 43135 43136 // Use native conversion when possible 43137 if (Buffer.isNativeEncoding(encoding)) 43138 return original.SlowBufferToString.call(this, encoding, start, end); 43139 43140 // Otherwise, use our decoding method. 43141 if (typeof start == 'undefined') start = 0; 43142 if (typeof end == 'undefined') end = this.length; 43143 return iconv.decode(this.slice(start, end), encoding); 43144 } 43145 43146 original.SlowBufferWrite = SlowBuffer.prototype.write; 43147 SlowBuffer.prototype.write = function(string, offset, length, encoding) { 43148 // Support both (string, offset, length, encoding) 43149 // and the legacy (string, encoding, offset, length) 43150 if (isFinite(offset)) { 43151 if (!isFinite(length)) { 43152 encoding = length; 43153 length = undefined; 43154 } 43155 } else { // legacy 43156 var swap = encoding; 43157 encoding = offset; 43158 offset = length; 43159 length = swap; 43160 } 43161 43162 offset = +offset || 0; 43163 var remaining = this.length - offset; 43164 if (!length) { 43165 length = remaining; 43166 } else { 43167 length = +length; 43168 if (length > remaining) { 43169 length = remaining; 43170 } 43171 } 43172 encoding = String(encoding || 'utf8').toLowerCase(); 43173 43174 // Use native conversion when possible 43175 if (Buffer.isNativeEncoding(encoding)) 43176 return original.SlowBufferWrite.call(this, string, offset, length, encoding); 43177 43178 if (string.length > 0 && (length < 0 || offset < 0)) 43179 throw new RangeError('attempt to write beyond buffer bounds'); 43180 43181 // Otherwise, use our encoding method. 43182 var buf = iconv.encode(string, encoding); 43183 if (buf.length < length) length = buf.length; 43184 buf.copy(this, offset, 0, length); 43185 return length; 43186 } 43187 43188 // -- Buffer --------------------------------------------------------------- 43189 43190 original.BufferIsEncoding = Buffer.isEncoding; 43191 Buffer.isEncoding = function(encoding) { 43192 return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding); 43193 } 43194 43195 original.BufferByteLength = Buffer.byteLength; 43196 Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) { 43197 encoding = String(encoding || 'utf8').toLowerCase(); 43198 43199 // Use native conversion when possible 43200 if (Buffer.isNativeEncoding(encoding)) 43201 return original.BufferByteLength.call(this, str, encoding); 43202 43203 // Slow, I know, but we don't have a better way yet. 43204 return iconv.encode(str, encoding).length; 43205 } 43206 43207 original.BufferToString = Buffer.prototype.toString; 43208 Buffer.prototype.toString = function(encoding, start, end) { 43209 encoding = String(encoding || 'utf8').toLowerCase(); 43210 43211 // Use native conversion when possible 43212 if (Buffer.isNativeEncoding(encoding)) 43213 return original.BufferToString.call(this, encoding, start, end); 43214 43215 // Otherwise, use our decoding method. 43216 if (typeof start == 'undefined') start = 0; 43217 if (typeof end == 'undefined') end = this.length; 43218 return iconv.decode(this.slice(start, end), encoding); 43219 } 43220 43221 original.BufferWrite = Buffer.prototype.write; 43222 Buffer.prototype.write = function(string, offset, length, encoding) { 43223 var _offset = offset, _length = length, _encoding = encoding; 43224 // Support both (string, offset, length, encoding) 43225 // and the legacy (string, encoding, offset, length) 43226 if (isFinite(offset)) { 43227 if (!isFinite(length)) { 43228 encoding = length; 43229 length = undefined; 43230 } 43231 } else { // legacy 43232 var swap = encoding; 43233 encoding = offset; 43234 offset = length; 43235 length = swap; 43236 } 43237 43238 encoding = String(encoding || 'utf8').toLowerCase(); 43239 43240 // Use native conversion when possible 43241 if (Buffer.isNativeEncoding(encoding)) 43242 return original.BufferWrite.call(this, string, _offset, _length, _encoding); 43243 43244 offset = +offset || 0; 43245 var remaining = this.length - offset; 43246 if (!length) { 43247 length = remaining; 43248 } else { 43249 length = +length; 43250 if (length > remaining) { 43251 length = remaining; 43252 } 43253 } 43254 43255 if (string.length > 0 && (length < 0 || offset < 0)) 43256 throw new RangeError('attempt to write beyond buffer bounds'); 43257 43258 // Otherwise, use our encoding method. 43259 var buf = iconv.encode(string, encoding); 43260 if (buf.length < length) length = buf.length; 43261 buf.copy(this, offset, 0, length); 43262 return length; 43263 43264 // TODO: Set _charsWritten. 43265 } 43266 43267 43268 // -- Readable ------------------------------------------------------------- 43269 if (iconv.supportsStreams) { 43270 var Readable = __webpack_require__(15).Readable; 43271 43272 original.ReadableSetEncoding = Readable.prototype.setEncoding; 43273 Readable.prototype.setEncoding = function setEncoding(enc, options) { 43274 // Use our own decoder, it has the same interface. 43275 // We cannot use original function as it doesn't handle BOM-s. 43276 this._readableState.decoder = iconv.getDecoder(enc, options); 43277 this._readableState.encoding = enc; 43278 } 43279 43280 Readable.prototype.collect = iconv._collect; 43281 } 43282 } 43283 43284 // Remove iconv-lite Node primitive extensions. 43285 iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { 43286 if (!iconv.supportsNodeEncodingsExtension) 43287 return; 43288 if (!original) 43289 throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.") 43290 43291 delete Buffer.isNativeEncoding; 43292 43293 var SlowBuffer = __webpack_require__(1).SlowBuffer; 43294 43295 SlowBuffer.prototype.toString = original.SlowBufferToString; 43296 SlowBuffer.prototype.write = original.SlowBufferWrite; 43297 43298 Buffer.isEncoding = original.BufferIsEncoding; 43299 Buffer.byteLength = original.BufferByteLength; 43300 Buffer.prototype.toString = original.BufferToString; 43301 Buffer.prototype.write = original.BufferWrite; 43302 43303 if (iconv.supportsStreams) { 43304 var Readable = __webpack_require__(15).Readable; 43305 43306 Readable.prototype.setEncoding = original.ReadableSetEncoding; 43307 delete Readable.prototype.collect; 43308 } 43309 43310 original = undefined; 43311 } 43312} 43313 43314 43315/***/ }), 43316/* 187 */ 43317/***/ (function(module, exports, __webpack_require__) { 43318 43319// Generated by CoffeeScript 1.7.1 43320(function() { 43321 var ArrayT, LazyArray, LazyArrayT, NumberT, inspect, utils, 43322 __hasProp = {}.hasOwnProperty, 43323 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 43324 43325 ArrayT = __webpack_require__(93); 43326 43327 NumberT = __webpack_require__(22).Number; 43328 43329 utils = __webpack_require__(12); 43330 43331 inspect = __webpack_require__(49).inspect; 43332 43333 LazyArrayT = (function(_super) { 43334 __extends(LazyArrayT, _super); 43335 43336 function LazyArrayT() { 43337 return LazyArrayT.__super__.constructor.apply(this, arguments); 43338 } 43339 43340 LazyArrayT.prototype.decode = function(stream, parent) { 43341 var length, pos, res; 43342 pos = stream.pos; 43343 length = utils.resolveLength(this.length, stream, parent); 43344 if (this.length instanceof NumberT) { 43345 parent = { 43346 parent: parent, 43347 _startOffset: pos, 43348 _currentOffset: 0, 43349 _length: length 43350 }; 43351 }
43352 res = new LazyArray(this.type, length, stream, parent); 43353 stream.pos += length * this.type.size(null, parent); 43354 return res; 43355 }; 43356 43357 LazyArrayT.prototype.size = function(val, ctx) { 43358 if (val instanceof LazyArray) { 43359 val = val.toArray(); 43360 } 43361 return LazyArrayT.__super__.size.call(this, val, ctx); 43362 }; 43363 43364 LazyArrayT.prototype.encode = function(stream, val, ctx) { 43365 if (val instanceof LazyArray) { 43366 val = val.toArray(); 43367 } 43368 return LazyArrayT.__super__.encode.call(this, stream, val, ctx); 43369 }; 43370 43371 return LazyArrayT; 43372 43373 })(ArrayT); 43374 43375 LazyArray = (function() { 43376 function LazyArray(type, length, stream, ctx) { 43377 this.type = type; 43378 this.length = length; 43379 this.stream = stream; 43380 this.ctx = ctx; 43381 this.base = this.stream.pos; 43382 this.items = []; 43383 } 43384 43385 LazyArray.prototype.get = function(index) { 43386 var pos; 43387 if (index < 0 || index >= this.length) { 43388 return void 0; 43389 } 43390 if (this.items[index] == null) { 43391 pos = this.stream.pos; 43392 this.stream.pos = this.base + this.type.size(null, this.ctx) * index; 43393 this.items[index] = this.type.decode(this.stream, this.ctx); 43394 this.stream.pos = pos; 43395 } 43396 return this.items[index]; 43397 }; 43398 43399 LazyArray.prototype.toArray = function() { 43400 var i, _i, _ref, _results; 43401 _results = []; 43402 for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 1) { 43403 _results.push(this.get(i)); 43404 } 43405 return _results; 43406 }; 43407 43408 LazyArray.prototype.inspect = function() { 43409 return inspect(this.toArray()); 43410 }; 43411 43412 return LazyArray; 43413 43414 })(); 43415 43416 module.exports = LazyArrayT; 43417 43418}).call(this); 43419 43420 43421/***/ }), 43422/* 188 */ 43423/***/ (function(module, exports) { 43424 43425// Generated by CoffeeScript 1.7.1 43426(function() { 43427 var Bitfield; 43428 43429 Bitfield = (function() { 43430 function Bitfield(type, flags) { 43431 this.type = type; 43432 this.flags = flags != null ? flags : []; 43433 } 43434 43435 Bitfield.prototype.decode = function(stream) { 43436 var flag, i, res, val, _i, _len, _ref; 43437 val = this.type.decode(stream); 43438 res = {}; 43439 _ref = this.flags; 43440 for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { 43441 flag = _ref[i]; 43442 if (flag != null) { 43443 res[flag] = !!(val & (1 << i)); 43444 } 43445 } 43446 return res; 43447 }; 43448 43449 Bitfield.prototype.size = function() { 43450 return this.type.size(); 43451 }; 43452 43453 Bitfield.prototype.encode = function(stream, keys) { 43454 var flag, i, val, _i, _len, _ref; 43455 val = 0; 43456 _ref = this.flags; 43457 for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { 43458 flag = _ref[i]; 43459 if (flag != null) { 43460 if (keys[flag]) { 43461 val |= 1 << i; 43462 } 43463 } 43464 } 43465 return this.type.encode(stream, val); 43466 }; 43467 43468 return Bitfield; 43469 43470 })(); 43471 43472 module.exports = Bitfield; 43473 43474}).call(this); 43475 43476 43477/***/ }), 43478/* 189 */ 43479/***/ (function(module, exports) { 43480 43481// Generated by CoffeeScript 1.7.1 43482(function() { 43483 var BooleanT; 43484 43485 BooleanT = (function() { 43486 function BooleanT(type) { 43487 this.type = type; 43488 } 43489 43490 BooleanT.prototype.decode = function(stream, parent) { 43491 return !!this.type.decode(stream, parent); 43492 }; 43493 43494 BooleanT.prototype.size = function(val, parent) { 43495 return this.type.size(val, parent); 43496 }; 43497 43498 BooleanT.prototype.encode = function(stream, val, parent) { 43499 return this.type.encode(stream, +val, parent); 43500 }; 43501 43502 return BooleanT; 43503 43504 })(); 43505 43506 module.exports = BooleanT; 43507 43508}).call(this); 43509 43510 43511/***/ }), 43512/* 190 */ 43513/***/ (function(module, exports, __webpack_require__) { 43514 43515// Generated by CoffeeScript 1.7.1 43516(function() { 43517 var BufferT, NumberT, utils; 43518 43519 utils = __webpack_require__(12); 43520 43521 NumberT = __webpack_require__(22).Number; 43522 43523 BufferT = (function() { 43524 function BufferT(length) { 43525 this.length = length; 43526 } 43527 43528 BufferT.prototype.decode = function(stream, parent) { 43529 var length; 43530 length = utils.resolveLength(this.length, stream, parent); 43531 return stream.readBuffer(length); 43532 }; 43533 43534 BufferT.prototype.size = function(val, parent) { 43535 if (!val) { 43536 return utils.resolveLength(this.length, null, parent); 43537 } 43538 return val.length; 43539 }; 43540 43541 BufferT.prototype.encode = function(stream, buf, parent) { 43542 if (this.length instanceof NumberT) { 43543 this.length.encode(stream, buf.length); 43544 } 43545 return stream.writeBuffer(buf); 43546 }; 43547 43548 return BufferT; 43549 43550 })(); 43551 43552 module.exports = BufferT; 43553 43554}).call(this); 43555 43556 43557/***/ }), 43558/* 191 */
43559/***/ (function(module, exports) { 43560 43561// Generated by CoffeeScript 1.7.1 43562(function() { 43563 var Enum; 43564 43565 Enum = (function() { 43566 function Enum(type, options) { 43567 this.type = type; 43568 this.options = options != null ? options : []; 43569 } 43570 43571 Enum.prototype.decode = function(stream) { 43572 var index; 43573 index = this.type.decode(stream); 43574 return this.options[index] || index; 43575 }; 43576 43577 Enum.prototype.size = function() { 43578 return this.type.size(); 43579 }; 43580 43581 Enum.prototype.encode = function(stream, val) { 43582 var index; 43583 index = this.options.indexOf(val); 43584 if (index === -1) { 43585 throw new Error("Unknown option in enum: " + val); 43586 } 43587 return this.type.encode(stream, index); 43588 }; 43589 43590 return Enum; 43591 43592 })(); 43593 43594 module.exports = Enum; 43595 43596}).call(this); 43597 43598 43599/***/ }), 43600/* 192 */ 43601/***/ (function(module, exports) { 43602 43603// Generated by CoffeeScript 1.7.1 43604(function() { 43605 var Optional; 43606 43607 Optional = (function() { 43608 function Optional(type, condition) { 43609 this.type = type; 43610 this.condition = condition != null ? condition : true; 43611 } 43612 43613 Optional.prototype.decode = function(stream, parent) { 43614 var condition; 43615 condition = this.condition; 43616 if (typeof condition === 'function') { 43617 condition = condition.call(parent, parent); 43618 } 43619 if (condition) { 43620 return this.type.decode(stream, parent); 43621 } 43622 }; 43623 43624 Optional.prototype.size = function(val, parent) { 43625 var condition; 43626 condition = this.condition; 43627 if (typeof condition === 'function') { 43628 condition = condition.call(parent, parent); 43629 } 43630 if (condition) { 43631 return this.type.size(val, parent); 43632 } else { 43633 return 0; 43634 } 43635 }; 43636 43637 Optional.prototype.encode = function(stream, val, parent) { 43638 var condition; 43639 condition = this.condition; 43640 if (typeof condition === 'function') { 43641 condition = condition.call(parent, parent); 43642 } 43643 if (condition) { 43644 return this.type.encode(stream, val, parent); 43645 } 43646 }; 43647 43648 return Optional; 43649 43650 })(); 43651 43652 module.exports = Optional; 43653 43654}).call(this); 43655 43656 43657/***/ }), 43658/* 193 */ 43659/***/ (function(module, exports, __webpack_require__) { 43660 43661// Generated by CoffeeScript 1.7.1 43662(function() { 43663 var Reserved, utils; 43664 43665 utils = __webpack_require__(12); 43666 43667 Reserved = (function() { 43668 function Reserved(type, count) { 43669 this.type = type; 43670 this.count = count != null ? count : 1; 43671 } 43672 43673 Reserved.prototype.decode = function(stream, parent) { 43674 stream.pos += this.size(null, parent); 43675 return void 0; 43676 }; 43677 43678 Reserved.prototype.size = function(data, parent) { 43679 var count; 43680 count = utils.resolveLength(this.count, null, parent); 43681 return this.type.size() * count; 43682 }; 43683 43684 Reserved.prototype.encode = function(stream, val, parent) { 43685 return stream.fill(0, this.size(val, parent)); 43686 }; 43687 43688 return Reserved; 43689 43690 })(); 43691 43692 module.exports = Reserved; 43693 43694}).call(this); 43695 43696 43697/***/ }), 43698/* 194 */ 43699/***/ (function(module, exports, __webpack_require__) { 43700 43701/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1 43702(function() { 43703 var NumberT, StringT, utils; 43704 43705 NumberT = __webpack_require__(22).Number; 43706 43707 utils = __webpack_require__(12); 43708 43709 StringT = (function() { 43710 function StringT(length, encoding) { 43711 this.length = length; 43712 this.encoding = encoding != null ? encoding : 'ascii'; 43713 } 43714 43715 StringT.prototype.decode = function(stream, parent) { 43716 var buffer, encoding, length, pos, string; 43717 length = (function() { 43718 if (this.length != null) { 43719 return utils.resolveLength(this.length, stream, parent); 43720 } else { 43721 buffer = stream.buffer, length = stream.length, pos = stream.pos; 43722 while (pos < length && buffer[pos] !== 0x00) { 43723 ++pos; 43724 } 43725 return pos - stream.pos; 43726 } 43727 }).call(this); 43728 encoding = this.encoding; 43729 if (typeof encoding === 'function') { 43730 encoding = encoding.call(parent, parent) || 'ascii'; 43731 } 43732 string = stream.readString(length, encoding); 43733 if ((this.length == null) && stream.pos < stream.length) { 43734 stream.pos++; 43735 } 43736 return string; 43737 }; 43738 43739 StringT.prototype.size = function(val, parent) { 43740 var encoding, size; 43741 if (!val) { 43742 return utils.resolveLength(this.length, null, parent); 43743 } 43744 encoding = this.encoding; 43745 if (typeof encoding === 'function') { 43746 encoding = encoding.call(parent != null ? parent.val : void 0, parent != null ? parent.val : void 0) || 'ascii'; 43747 } 43748 if (encoding === 'utf16be') { 43749 encoding = 'utf16le'; 43750 } 43751 size = Buffer.byteLength(val, encoding); 43752 if (this.length instanceof NumberT) { 43753 size += this.length.size(); 43754 } 43755 if (this.length == null) { 43756 size++; 43757 } 43758 return size; 43759 }; 43760 43761 StringT.prototype.encode = function(stream, val, parent) { 43762 var encoding; 43763 encoding = this.encoding; 43764 if (typeof encoding === 'function') { 43765 encoding = encoding.call(parent != null ? parent.val : void 0, parent != null ? parent.val : void 0) || 'ascii'; 43766 } 43767 if (this.length instanceof NumberT) { 43768 this.length.encode(stream, Buffer.byteLength(val, encoding)); 43769 } 43770 stream.writeString(val, encoding); 43771 if (this.length == null) { 43772 return stream.writeUInt8(0x00); 43773 } 43774 }; 43775 43776 return StringT; 43777 43778 })(); 43779 43780 module.exports = StringT; 43781 43782}).call(this); 43783 43784/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 43785
43786/***/ }), 43787/* 195 */ 43788/***/ (function(module, exports, __webpack_require__) { 43789 43790// Generated by CoffeeScript 1.7.1 43791(function() { 43792 var Struct, VersionedStruct, 43793 __hasProp = {}.hasOwnProperty, 43794 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 43795 43796 Struct = __webpack_require__(94); 43797 43798 VersionedStruct = (function(_super) { 43799 __extends(VersionedStruct, _super); 43800 43801 function VersionedStruct(type, versions) { 43802 this.type = type; 43803 this.versions = versions != null ? versions : {}; 43804 if (typeof this.type === 'string') { 43805 this.versionGetter = new Function('parent', "return parent." + this.type); 43806 this.versionSetter = new Function('parent', 'version', "return parent." + this.type + " = version"); 43807 } 43808 } 43809 43810 VersionedStruct.prototype.decode = function(stream, parent, length) { 43811 var fields, res, _ref; 43812 if (length == null) { 43813 length = 0; 43814 } 43815 res = this._setup(stream, parent, length); 43816 if (typeof this.type === 'string') { 43817 res.version = this.versionGetter(parent); 43818 } else { 43819 res.version = this.type.decode(stream); 43820 } 43821 if (this.versions.header) { 43822 this._parseFields(stream, res, this.versions.header); 43823 } 43824 fields = this.versions[res.version]; 43825 if (fields == null) { 43826 throw new Error("Unknown version " + res.version); 43827 } 43828 if (fields instanceof VersionedStruct) { 43829 return fields.decode(stream, parent); 43830 } 43831 this._parseFields(stream, res, fields); 43832 if ((_ref = this.process) != null) { 43833 _ref.call(res, stream); 43834 } 43835 return res; 43836 }; 43837 43838 VersionedStruct.prototype.size = function(val, parent, includePointers) { 43839 var ctx, fields, key, size, type, _ref; 43840 if (includePointers == null) { 43841 includePointers = true; 43842 } 43843 if (!val) { 43844 throw new Error('Not a fixed size'); 43845 } 43846 ctx = { 43847 parent: parent, 43848 val: val, 43849 pointerSize: 0 43850 }; 43851 size = 0; 43852 if (typeof this.type !== 'string') { 43853 size += this.type.size(val.version, ctx); 43854 } 43855 if (this.versions.header) { 43856 _ref = this.versions.header; 43857 for (key in _ref) { 43858 type = _ref[key]; 43859 if (type.size != null) { 43860 size += type.size(val[key], ctx); 43861 } 43862 } 43863 } 43864 fields = this.versions[val.version]; 43865 if (fields == null) { 43866 throw new Error("Unknown version " + val.version); 43867 } 43868 for (key in fields) { 43869 type = fields[key]; 43870 if (type.size != null) { 43871 size += type.size(val[key], ctx); 43872 } 43873 } 43874 if (includePointers) { 43875 size += ctx.pointerSize; 43876 } 43877 return size; 43878 }; 43879 43880 VersionedStruct.prototype.encode = function(stream, val, parent) { 43881 var ctx, fields, i, key, ptr, type, _ref, _ref1; 43882 if ((_ref = this.preEncode) != null) { 43883 _ref.call(val, stream); 43884 } 43885 ctx = { 43886 pointers: [], 43887 startOffset: stream.pos, 43888 parent: parent, 43889 val: val, 43890 pointerSize: 0 43891 }; 43892 ctx.pointerOffset = stream.pos + this.size(val, ctx, false); 43893 if (typeof this.type !== 'string') { 43894 this.type.encode(stream, val.version); 43895 } 43896 if (this.versions.header) { 43897 _ref1 = this.versions.header; 43898 for (key in _ref1) { 43899 type = _ref1[key]; 43900 if (type.encode != null) { 43901 type.encode(stream, val[key], ctx); 43902 } 43903 } 43904 } 43905 fields = this.versions[val.version]; 43906 for (key in fields) { 43907 type = fields[key]; 43908 if (type.encode != null) { 43909 type.encode(stream, val[key], ctx); 43910 } 43911 } 43912 i = 0; 43913 while (i < ctx.pointers.length) { 43914 ptr = ctx.pointers[i++]; 43915 ptr.type.encode(stream, ptr.val, ptr.parent); 43916 } 43917 }; 43918 43919 return VersionedStruct; 43920 43921 })(Struct); 43922 43923 module.exports = VersionedStruct; 43924 43925}).call(this); 43926 43927 43928/***/ }), 43929/* 196 */ 43930/***/ (function(module, exports, __webpack_require__) { 43931 43932// Generated by CoffeeScript 1.7.1 43933(function() { 43934 var Pointer, VoidPointer, utils; 43935 43936 utils = __webpack_require__(12); 43937 43938 Pointer = (function() { 43939 function Pointer(offsetType, type, options) { 43940 var _base, _base1, _base2, _base3; 43941 this.offsetType = offsetType; 43942 this.type = type; 43943 this.options = options != null ? options : {};
43944 if (this.type === 'void') { 43945 this.type = null; 43946 } 43947 if ((_base = this.options).type == null) { 43948 _base.type = 'local'; 43949 } 43950 if ((_base1 = this.options).allowNull == null) { 43951 _base1.allowNull = true; 43952 } 43953 if ((_base2 = this.options).nullValue == null) { 43954 _base2.nullValue = 0; 43955 } 43956 if ((_base3 = this.options).lazy == null) { 43957 _base3.lazy = false; 43958 } 43959 if (this.options.relativeTo) { 43960 this.relativeToGetter = new Function('ctx', "return ctx." + this.options.relativeTo); 43961 } 43962 } 43963 43964 Pointer.prototype.decode = function(stream, ctx) { 43965 var c, decodeValue, offset, ptr, relative, val; 43966 offset = this.offsetType.decode(stream, ctx); 43967 if (offset === this.options.nullValue && this.options.allowNull) { 43968 return null; 43969 } 43970 relative = (function() { 43971 switch (this.options.type) { 43972 case 'local': 43973 return ctx._startOffset; 43974 case 'immediate': 43975 return stream.pos - this.offsetType.size(); 43976 case 'parent': 43977 return ctx.parent._startOffset; 43978 default: 43979 c = ctx; 43980 while (c.parent) { 43981 c = c.parent; 43982 } 43983 return c._startOffset || 0; 43984 } 43985 }).call(this); 43986 if (this.options.relativeTo) { 43987 relative += this.relativeToGetter(ctx); 43988 } 43989 ptr = offset + relative; 43990 if (this.type != null) { 43991 val = null; 43992 decodeValue = (function(_this) { 43993 return function() { 43994 var pos; 43995 if (val != null) { 43996 return val; 43997 } 43998 pos = stream.pos; 43999 stream.pos = ptr; 44000 val = _this.type.decode(stream, ctx); 44001 stream.pos = pos; 44002 return val; 44003 }; 44004 })(this); 44005 if (this.options.lazy) { 44006 return new utils.PropertyDescriptor({ 44007 get: decodeValue 44008 }); 44009 } 44010 return decodeValue(); 44011 } else { 44012 return ptr; 44013 } 44014 }; 44015 44016 Pointer.prototype.size = function(val, ctx) { 44017 var parent, type; 44018 parent = ctx; 44019 switch (this.options.type) { 44020 case 'local': 44021 case 'immediate': 44022 break; 44023 case 'parent': 44024 ctx = ctx.parent; 44025 break; 44026 default: 44027 while (ctx.parent) { 44028 ctx = ctx.parent; 44029 } 44030 } 44031 type = this.type; 44032 if (type == null) { 44033 if (!(val instanceof VoidPointer)) {
44034 throw new Error("Must be a VoidPointer"); 44035 } 44036 type = val.type; 44037 val = val.value; 44038 } 44039 if (val && ctx) { 44040 ctx.pointerSize += type.size(val, parent); 44041 } 44042 return this.offsetType.size(); 44043 }; 44044 44045 Pointer.prototype.encode = function(stream, val, ctx) { 44046 var parent, relative, type; 44047 parent = ctx; 44048 if (val == null) { 44049 this.offsetType.encode(stream, this.options.nullValue); 44050 return; 44051 } 44052 switch (this.options.type) { 44053 case 'local': 44054 relative = ctx.startOffset; 44055 break; 44056 case 'immediate': 44057 relative = stream.pos + this.offsetType.size(val, parent); 44058 break; 44059 case 'parent': 44060 ctx = ctx.parent; 44061 relative = ctx.startOffset; 44062 break; 44063 default: 44064 relative = 0; 44065 while (ctx.parent) { 44066 ctx = ctx.parent; 44067 } 44068 } 44069 if (this.options.relativeTo) { 44070 relative += this.relativeToGetter(parent.val); 44071 } 44072 this.offsetType.encode(stream, ctx.pointerOffset - relative); 44073 type = this.type; 44074 if (type == null) { 44075 if (!(val instanceof VoidPointer)) {
vendor: 9,594 bytes, lines 44076-44438
44076 throw new Error("Must be a VoidPointer"); 44077 } 44078 type = val.type; 44079 val = val.value; 44080 } 44081 ctx.pointers.push({ 44082 type: type, 44083 val: val, 44084 parent: parent 44085 }); 44086 return ctx.pointerOffset += type.size(val, parent); 44087 }; 44088 44089 return Pointer; 44090 44091 })(); 44092 44093 VoidPointer = (function() { 44094 function VoidPointer(type, value) { 44095 this.type = type; 44096 this.value = value; 44097 } 44098 44099 return VoidPointer; 44100 44101 })(); 44102 44103 exports.Pointer = Pointer; 44104 44105 exports.VoidPointer = VoidPointer; 44106 44107}).call(this); 44108 44109 44110/***/ }), 44111/* 197 */ 44112/***/ (function(module, exports, __webpack_require__) { 44113 44114module.exports = { "default": __webpack_require__(198), __esModule: true }; 44115 44116/***/ }), 44117/* 198 */ 44118/***/ (function(module, exports, __webpack_require__) { 44119 44120__webpack_require__(199); 44121var $Object = __webpack_require__(2).Object; 44122module.exports = function getOwnPropertyDescriptor(it, key) { 44123 return $Object.getOwnPropertyDescriptor(it, key); 44124}; 44125 44126 44127/***/ }), 44128/* 199 */ 44129/***/ (function(module, exports, __webpack_require__) { 44130 44131// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) 44132var toIObject = __webpack_require__(17); 44133var $getOwnPropertyDescriptor = __webpack_require__(57).f; 44134 44135__webpack_require__(59)('getOwnPropertyDescriptor', function () { 44136 return function getOwnPropertyDescriptor(it, key) { 44137 return $getOwnPropertyDescriptor(toIObject(it), key); 44138 }; 44139}); 44140 44141 44142/***/ }), 44143/* 200 */ 44144/***/ (function(module, exports, __webpack_require__) { 44145 44146__webpack_require__(28); 44147__webpack_require__(24); 44148module.exports = __webpack_require__(208); 44149 44150 44151/***/ }), 44152/* 201 */ 44153/***/ (function(module, exports, __webpack_require__) { 44154 44155"use strict"; 44156 44157var addToUnscopables = __webpack_require__(202); 44158var step = __webpack_require__(98); 44159var Iterators = __webpack_require__(23); 44160var toIObject = __webpack_require__(17); 44161 44162// 22.1.3.4 Array.prototype.entries() 44163// 22.1.3.13 Array.prototype.keys() 44164// 22.1.3.29 Array.prototype.values() 44165// 22.1.3.30 Array.prototype[@@iterator]() 44166module.exports = __webpack_require__(61)(Array, 'Array', function (iterated, kind) { 44167 this._t = toIObject(iterated); // target 44168 this._i = 0; // next index 44169 this._k = kind; // kind 44170// 22.1.5.2.1 %ArrayIteratorPrototype%.next() 44171}, function () { 44172 var O = this._t; 44173 var kind = this._k; 44174 var index = this._i++; 44175 if (!O || index >= O.length) { 44176 this._t = undefined; 44177 return step(1); 44178 } 44179 if (kind == 'keys') return step(0, index); 44180 if (kind == 'values') return step(0, O[index]); 44181 return step(0, [index, O[index]]); 44182}, 'values'); 44183 44184// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) 44185Iterators.Arguments = Iterators.Array; 44186 44187addToUnscopables('keys'); 44188addToUnscopables('values'); 44189addToUnscopables('entries'); 44190 44191 44192/***/ }), 44193/* 202 */ 44194/***/ (function(module, exports) { 44195 44196module.exports = function () { /* empty */ }; 44197 44198 44199/***/ }), 44200/* 203 */ 44201/***/ (function(module, exports, __webpack_require__) { 44202 44203"use strict"; 44204 44205var create = __webpack_require__(36); 44206var descriptor = __webpack_require__(27); 44207var setToStringTag = __webpack_require__(39); 44208var IteratorPrototype = {}; 44209 44210// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() 44211__webpack_require__(13)(IteratorPrototype, __webpack_require__(4)('iterator'), function () { return this; }); 44212 44213module.exports = function (Constructor, NAME, next) { 44214 Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); 44215 setToStringTag(Constructor, NAME + ' Iterator'); 44216}; 44217 44218 44219/***/ }), 44220/* 204 */ 44221/***/ (function(module, exports, __webpack_require__) { 44222 44223// false -> Array#indexOf 44224// true -> Array#includes 44225var toIObject = __webpack_require__(17); 44226var toLength = __webpack_require__(37); 44227var toAbsoluteIndex = __webpack_require__(102); 44228module.exports = function (IS_INCLUDES) { 44229 return function ($this, el, fromIndex) { 44230 var O = toIObject($this); 44231 var length = toLength(O.length); 44232 var index = toAbsoluteIndex(fromIndex, length); 44233 var value; 44234 // Array#includes uses SameValueZero equality algorithm 44235 // eslint-disable-next-line no-self-compare 44236 if (IS_INCLUDES && el != el) while (length > index) { 44237 value = O[index++]; 44238 // eslint-disable-next-line no-self-compare 44239 if (value != value) return true; 44240 // Array#indexOf ignores holes, Array#includes - not 44241 } else for (;length > index; index++) if (IS_INCLUDES || index in O) { 44242 if (O[index] === el) return IS_INCLUDES || index || 0; 44243 } return !IS_INCLUDES && -1; 44244 }; 44245}; 44246 44247 44248/***/ }), 44249/* 205 */ 44250/***/ (function(module, exports, __webpack_require__) { 44251 44252var document = __webpack_require__(10).document; 44253module.exports = document && document.documentElement; 44254 44255 44256/***/ }), 44257/* 206 */ 44258/***/ (function(module, exports, __webpack_require__) { 44259 44260// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) 44261var has = __webpack_require__(18); 44262var toObject = __webpack_require__(30); 44263var IE_PROTO = __webpack_require__(64)('IE_PROTO'); 44264var ObjectProto = Object.prototype; 44265 44266module.exports = Object.getPrototypeOf || function (O) { 44267 O = toObject(O); 44268 if (has(O, IE_PROTO)) return O[IE_PROTO]; 44269 if (typeof O.constructor == 'function' && O instanceof O.constructor) { 44270 return O.constructor.prototype; 44271 } return O instanceof Object ? ObjectProto : null; 44272}; 44273 44274 44275/***/ }), 44276/* 207 */ 44277/***/ (function(module, exports, __webpack_require__) { 44278 44279var toInteger = __webpack_require__(63); 44280var defined = __webpack_require__(56); 44281// true -> String#at 44282// false -> String#codePointAt 44283module.exports = function (TO_STRING) { 44284 return function (that, pos) { 44285 var s = String(defined(that)); 44286 var i = toInteger(pos); 44287 var l = s.length; 44288 var a, b; 44289 if (i < 0 || i >= l) return TO_STRING ? '' : undefined; 44290 a = s.charCodeAt(i); 44291 return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff 44292 ? TO_STRING ? s.charAt(i) : a 44293 : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; 44294 }; 44295}; 44296 44297 44298/***/ }), 44299/* 208 */ 44300/***/ (function(module, exports, __webpack_require__) { 44301 44302var anObject = __webpack_require__(14); 44303var get = __webpack_require__(67); 44304module.exports = __webpack_require__(2).getIterator = function (it) { 44305 var iterFn = get(it); 44306 if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!'); 44307 return anObject(iterFn.call(it)); 44308}; 44309 44310 44311/***/ }), 44312/* 209 */ 44313/***/ (function(module, exports, __webpack_require__) { 44314 44315module.exports = { "default": __webpack_require__(210), __esModule: true }; 44316 44317/***/ }), 44318/* 210 */ 44319/***/ (function(module, exports, __webpack_require__) { 44320 44321__webpack_require__(211); 44322module.exports = __webpack_require__(2).Object.freeze; 44323 44324 44325/***/ }), 44326/* 211 */ 44327/***/ (function(module, exports, __webpack_require__) { 44328 44329// 19.1.2.5 Object.freeze(O) 44330var isObject = __webpack_require__(9); 44331var meta = __webpack_require__(40).onFreeze; 44332 44333__webpack_require__(59)('freeze', function ($freeze) { 44334 return function freeze(it) { 44335 return $freeze && isObject(it) ? $freeze(meta(it)) : it; 44336 }; 44337}); 44338 44339 44340/***/ }), 44341/* 212 */ 44342/***/ (function(module, exports, __webpack_require__) { 44343 44344module.exports = { "default": __webpack_require__(213), __esModule: true }; 44345 44346/***/ }), 44347/* 213 */ 44348/***/ (function(module, exports, __webpack_require__) { 44349 44350__webpack_require__(214); 44351module.exports = __webpack_require__(2).Object.keys; 44352 44353 44354/***/ }), 44355/* 214 */ 44356/***/ (function(module, exports, __webpack_require__) { 44357 44358// 19.1.2.14 Object.keys(O) 44359var toObject = __webpack_require__(30); 44360var $keys = __webpack_require__(29); 44361 44362__webpack_require__(59)('keys', function () { 44363 return function keys(it) { 44364 return $keys(toObject(it)); 44365 }; 44366}); 44367 44368 44369/***/ }), 44370/* 215 */ 44371/***/ (function(module, exports, __webpack_require__) { 44372 44373__webpack_require__(24); 44374__webpack_require__(28); 44375module.exports = __webpack_require__(70).f('iterator'); 44376 44377 44378/***/ }), 44379/* 216 */ 44380/***/ (function(module, exports, __webpack_require__) { 44381 44382module.exports = { "default": __webpack_require__(217), __esModule: true }; 44383 44384/***/ }), 44385/* 217 */ 44386/***/ (function(module, exports, __webpack_require__) { 44387 44388__webpack_require__(218); 44389__webpack_require__(73); 44390__webpack_require__(221); 44391__webpack_require__(222); 44392module.exports = __webpack_require__(2).Symbol; 44393 44394 44395/***/ }), 44396/* 218 */ 44397/***/ (function(module, exports, __webpack_require__) { 44398 44399"use strict"; 44400 44401// ECMAScript 6 symbols shim 44402var global = __webpack_require__(10); 44403var has = __webpack_require__(18); 44404var DESCRIPTORS = __webpack_require__(5); 44405var $export = __webpack_require__(3); 44406var redefine = __webpack_require__(99); 44407var META = __webpack_require__(40).KEY; 44408var $fails = __webpack_require__(19); 44409var shared = __webpack_require__(65); 44410var setToStringTag = __webpack_require__(39); 44411var uid = __webpack_require__(38); 44412var wks = __webpack_require__(4); 44413var wksExt = __webpack_require__(70); 44414var wksDefine = __webpack_require__(71); 44415var enumKeys = __webpack_require__(219); 44416var isArray = __webpack_require__(104); 44417var anObject = __webpack_require__(14); 44418var isObject = __webpack_require__(9); 44419var toIObject = __webpack_require__(17); 44420var toPrimitive = __webpack_require__(58); 44421var createDesc = __webpack_require__(27); 44422var _create = __webpack_require__(36); 44423var gOPNExt = __webpack_require__(220); 44424var $GOPD = __webpack_require__(57); 44425var $DP = __webpack_require__(6); 44426var $keys = __webpack_require__(29); 44427var gOPD = $GOPD.f; 44428var dP = $DP.f; 44429var gOPN = gOPNExt.f; 44430var $Symbol = global.Symbol; 44431var $JSON = global.JSON; 44432var _stringify = $JSON && $JSON.stringify; 44433var PROTOTYPE = 'prototype'; 44434var HIDDEN = wks('_hidden'); 44435var TO_PRIMITIVE = wks('toPrimitive'); 44436var isEnum = {}.propertyIsEnumerable; 44437var SymbolRegistry = shared('symbol-registry'); 44438var AllSymbols = shared('symbols');
vendor: 9,267 bytes, lines 44439-44710
44439var OPSymbols = shared('op-symbols'); 44440var ObjectProto = Object[PROTOTYPE]; 44441var USE_NATIVE = typeof $Symbol == 'function'; 44442var QObject = global.QObject; 44443// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 44444var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; 44445 44446// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 44447var setSymbolDesc = DESCRIPTORS && $fails(function () { 44448 return _create(dP({}, 'a', { 44449 get: function () { return dP(this, 'a', { value: 7 }).a; } 44450 })).a != 7; 44451}) ? function (it, key, D) { 44452 var protoDesc = gOPD(ObjectProto, key); 44453 if (protoDesc) delete ObjectProto[key]; 44454 dP(it, key, D); 44455 if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); 44456} : dP; 44457 44458var wrap = function (tag) { 44459 var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); 44460 sym._k = tag; 44461 return sym; 44462}; 44463 44464var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) { 44465 return typeof it == 'symbol'; 44466} : function (it) { 44467 return it instanceof $Symbol; 44468}; 44469 44470var $defineProperty = function defineProperty(it, key, D) { 44471 if (it === ObjectProto) $defineProperty(OPSymbols, key, D); 44472 anObject(it); 44473 key = toPrimitive(key, true); 44474 anObject(D); 44475 if (has(AllSymbols, key)) { 44476 if (!D.enumerable) { 44477 if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); 44478 it[HIDDEN][key] = true; 44479 } else { 44480 if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; 44481 D = _create(D, { enumerable: createDesc(0, false) }); 44482 } return setSymbolDesc(it, key, D); 44483 } return dP(it, key, D); 44484}; 44485var $defineProperties = function defineProperties(it, P) { 44486 anObject(it); 44487 var keys = enumKeys(P = toIObject(P)); 44488 var i = 0; 44489 var l = keys.length; 44490 var key; 44491 while (l > i) $defineProperty(it, key = keys[i++], P[key]); 44492 return it; 44493}; 44494var $create = function create(it, P) { 44495 return P === undefined ? _create(it) : $defineProperties(_create(it), P); 44496}; 44497var $propertyIsEnumerable = function propertyIsEnumerable(key) { 44498 var E = isEnum.call(this, key = toPrimitive(key, true)); 44499 if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; 44500 return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; 44501}; 44502var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { 44503 it = toIObject(it); 44504 key = toPrimitive(key, true); 44505 if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; 44506 var D = gOPD(it, key); 44507 if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; 44508 return D; 44509}; 44510var $getOwnPropertyNames = function getOwnPropertyNames(it) { 44511 var names = gOPN(toIObject(it)); 44512 var result = []; 44513 var i = 0; 44514 var key; 44515 while (names.length > i) { 44516 if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); 44517 } return result; 44518}; 44519var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { 44520 var IS_OP = it === ObjectProto; 44521 var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); 44522 var result = []; 44523 var i = 0; 44524 var key; 44525 while (names.length > i) { 44526 if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); 44527 } return result; 44528}; 44529 44530// 19.4.1.1 Symbol([description]) 44531if (!USE_NATIVE) { 44532 $Symbol = function Symbol() { 44533 if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); 44534 var tag = uid(arguments.length > 0 ? arguments[0] : undefined); 44535 var $set = function (value) { 44536 if (this === ObjectProto) $set.call(OPSymbols, value); 44537 if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; 44538 setSymbolDesc(this, tag, createDesc(1, value)); 44539 }; 44540 if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); 44541 return wrap(tag); 44542 }; 44543 redefine($Symbol[PROTOTYPE], 'toString', function toString() { 44544 return this._k; 44545 }); 44546 44547 $GOPD.f = $getOwnPropertyDescriptor; 44548 $DP.f = $defineProperty; 44549 __webpack_require__(105).f = gOPNExt.f = $getOwnPropertyNames; 44550 __webpack_require__(35).f = $propertyIsEnumerable; 44551 __webpack_require__(72).f = $getOwnPropertySymbols; 44552 44553 if (DESCRIPTORS && !__webpack_require__(62)) { 44554 redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); 44555 } 44556 44557 wksExt.f = function (name) { 44558 return wrap(wks(name)); 44559 }; 44560} 44561 44562$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); 44563 44564for (var es6Symbols = ( 44565 // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 44566 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' 44567).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]); 44568 44569for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]); 44570 44571$export($export.S + $export.F * !USE_NATIVE, 'Symbol', { 44572 // 19.4.2.1 Symbol.for(key) 44573 'for': function (key) { 44574 return has(SymbolRegistry, key += '') 44575 ? SymbolRegistry[key] 44576 : SymbolRegistry[key] = $Symbol(key); 44577 }, 44578 // 19.4.2.5 Symbol.keyFor(sym) 44579 keyFor: function keyFor(sym) { 44580 if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); 44581 for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key; 44582 }, 44583 useSetter: function () { setter = true; }, 44584 useSimple: function () { setter = false; } 44585}); 44586 44587$export($export.S + $export.F * !USE_NATIVE, 'Object', { 44588 // 19.1.2.2 Object.create(O [, Properties]) 44589 create: $create, 44590 // 19.1.2.4 Object.defineProperty(O, P, Attributes) 44591 defineProperty: $defineProperty, 44592 // 19.1.2.3 Object.defineProperties(O, Properties) 44593 defineProperties: $defineProperties, 44594 // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) 44595 getOwnPropertyDescriptor: $getOwnPropertyDescriptor, 44596 // 19.1.2.7 Object.getOwnPropertyNames(O) 44597 getOwnPropertyNames: $getOwnPropertyNames, 44598 // 19.1.2.8 Object.getOwnPropertySymbols(O) 44599 getOwnPropertySymbols: $getOwnPropertySymbols 44600}); 44601 44602// 24.3.2 JSON.stringify(value [, replacer [, space]]) 44603$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { 44604 var S = $Symbol(); 44605 // MS Edge converts symbol values to JSON as {} 44606 // WebKit converts symbol values to JSON as null 44607 // V8 throws on boxed symbols 44608 return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; 44609})), 'JSON', { 44610 stringify: function stringify(it) { 44611 var args = [it]; 44612 var i = 1; 44613 var replacer, $replacer; 44614 while (arguments.length > i) args.push(arguments[i++]); 44615 $replacer = replacer = args[1]; 44616 if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined 44617 if (!isArray(replacer)) replacer = function (key, value) { 44618 if (typeof $replacer == 'function') value = $replacer.call(this, key, value); 44619 if (!isSymbol(value)) return value; 44620 }; 44621 args[1] = replacer; 44622 return _stringify.apply($JSON, args); 44623 } 44624}); 44625 44626// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) 44627$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(13)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); 44628// 19.4.3.5 Symbol.prototype[@@toStringTag] 44629setToStringTag($Symbol, 'Symbol'); 44630// 20.2.1.9 Math[@@toStringTag] 44631setToStringTag(Math, 'Math', true); 44632// 24.3.3 JSON[@@toStringTag] 44633setToStringTag(global.JSON, 'JSON', true); 44634 44635 44636/***/ }), 44637/* 219 */ 44638/***/ (function(module, exports, __webpack_require__) { 44639 44640// all enumerable object keys, includes symbols 44641var getKeys = __webpack_require__(29); 44642var gOPS = __webpack_require__(72); 44643var pIE = __webpack_require__(35); 44644module.exports = function (it) { 44645 var result = getKeys(it); 44646 var getSymbols = gOPS.f; 44647 if (getSymbols) { 44648 var symbols = getSymbols(it); 44649 var isEnum = pIE.f; 44650 var i = 0; 44651 var key; 44652 while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key); 44653 } return result; 44654}; 44655 44656 44657/***/ }), 44658/* 220 */ 44659/***/ (function(module, exports, __webpack_require__) { 44660 44661// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window 44662var toIObject = __webpack_require__(17); 44663var gOPN = __webpack_require__(105).f; 44664var toString = {}.toString; 44665 44666var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames 44667 ? Object.getOwnPropertyNames(window) : []; 44668 44669var getWindowNames = function (it) { 44670 try { 44671 return gOPN(it); 44672 } catch (e) { 44673 return windowNames.slice(); 44674 } 44675}; 44676 44677module.exports.f = function getOwnPropertyNames(it) { 44678 return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); 44679}; 44680 44681 44682/***/ }), 44683/* 221 */ 44684/***/ (function(module, exports, __webpack_require__) { 44685 44686__webpack_require__(71)('asyncIterator'); 44687 44688 44689/***/ }), 44690/* 222 */ 44691/***/ (function(module, exports, __webpack_require__) { 44692 44693__webpack_require__(71)('observable'); 44694 44695 44696/***/ }), 44697/* 223 */ 44698/***/ (function(module, exports, __webpack_require__) { 44699 44700__webpack_require__(224); 44701var $Object = __webpack_require__(2).Object; 44702module.exports = function defineProperty(it, key, desc) { 44703 return $Object.defineProperty(it, key, desc); 44704}; 44705 44706 44707/***/ }), 44708/* 224 */ 44709/***/ (function(module, exports, __webpack_require__) { 44710
vendor: 4,456 bytes, lines 44711-44871
44711var $export = __webpack_require__(3); 44712// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) 44713$export($export.S + $export.F * !__webpack_require__(5), 'Object', { defineProperty: __webpack_require__(6).f }); 44714 44715 44716/***/ }), 44717/* 225 */ 44718/***/ (function(module, exports, __webpack_require__) { 44719 44720module.exports = { "default": __webpack_require__(226), __esModule: true }; 44721 44722/***/ }), 44723/* 226 */ 44724/***/ (function(module, exports, __webpack_require__) { 44725 44726__webpack_require__(73); 44727__webpack_require__(24); 44728__webpack_require__(28); 44729__webpack_require__(227); 44730__webpack_require__(232); 44731__webpack_require__(234); 44732__webpack_require__(235); 44733module.exports = __webpack_require__(2).Map; 44734 44735 44736/***/ }), 44737/* 227 */ 44738/***/ (function(module, exports, __webpack_require__) { 44739 44740"use strict"; 44741 44742var strong = __webpack_require__(108); 44743var validate = __webpack_require__(75); 44744var MAP = 'Map'; 44745 44746// 23.1 Map Objects 44747module.exports = __webpack_require__(113)(MAP, function (get) { 44748 return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; 44749}, { 44750 // 23.1.3.6 Map.prototype.get(key) 44751 get: function get(key) { 44752 var entry = strong.getEntry(validate(this, MAP), key); 44753 return entry && entry.v; 44754 }, 44755 // 23.1.3.9 Map.prototype.set(key, value) 44756 set: function set(key, value) { 44757 return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); 44758 } 44759}, strong, true); 44760 44761 44762/***/ }), 44763/* 228 */ 44764/***/ (function(module, exports, __webpack_require__) { 44765 44766"use strict"; 44767 44768var global = __webpack_require__(10); 44769var core = __webpack_require__(2); 44770var dP = __webpack_require__(6); 44771var DESCRIPTORS = __webpack_require__(5); 44772var SPECIES = __webpack_require__(4)('species'); 44773 44774module.exports = function (KEY) { 44775 var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]; 44776 if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { 44777 configurable: true, 44778 get: function () { return this; } 44779 }); 44780}; 44781 44782 44783/***/ }), 44784/* 229 */ 44785/***/ (function(module, exports, __webpack_require__) { 44786 44787// 0 -> Array#forEach 44788// 1 -> Array#map 44789// 2 -> Array#filter 44790// 3 -> Array#some 44791// 4 -> Array#every 44792// 5 -> Array#find 44793// 6 -> Array#findIndex 44794var ctx = __webpack_require__(20); 44795var IObject = __webpack_require__(54); 44796var toObject = __webpack_require__(30); 44797var toLength = __webpack_require__(37); 44798var asc = __webpack_require__(230); 44799module.exports = function (TYPE, $create) { 44800 var IS_MAP = TYPE == 1; 44801 var IS_FILTER = TYPE == 2; 44802 var IS_SOME = TYPE == 3; 44803 var IS_EVERY = TYPE == 4; 44804 var IS_FIND_INDEX = TYPE == 6; 44805 var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; 44806 var create = $create || asc; 44807 return function ($this, callbackfn, that) { 44808 var O = toObject($this); 44809 var self = IObject(O); 44810 var f = ctx(callbackfn, that, 3); 44811 var length = toLength(self.length); 44812 var index = 0; 44813 var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; 44814 var val, res; 44815 for (;length > index; index++) if (NO_HOLES || index in self) { 44816 val = self[index]; 44817 res = f(val, index, O); 44818 if (TYPE) { 44819 if (IS_MAP) result[index] = res; // map 44820 else if (res) switch (TYPE) { 44821 case 3: return true; // some 44822 case 5: return val; // find 44823 case 6: return index; // findIndex 44824 case 2: result.push(val); // filter 44825 } else if (IS_EVERY) return false; // every 44826 } 44827 } 44828 return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; 44829 }; 44830}; 44831 44832 44833/***/ }), 44834/* 230 */ 44835/***/ (function(module, exports, __webpack_require__) { 44836 44837// 9.4.2.3 ArraySpeciesCreate(originalArray, length) 44838var speciesConstructor = __webpack_require__(231); 44839 44840module.exports = function (original, length) { 44841 return new (speciesConstructor(original))(length); 44842}; 44843 44844 44845/***/ }), 44846/* 231 */ 44847/***/ (function(module, exports, __webpack_require__) { 44848 44849var isObject = __webpack_require__(9); 44850var isArray = __webpack_require__(104); 44851var SPECIES = __webpack_require__(4)('species'); 44852 44853module.exports = function (original) { 44854 var C; 44855 if (isArray(original)) { 44856 C = original.constructor; 44857 // cross-realm fallback 44858 if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; 44859 if (isObject(C)) { 44860 C = C[SPECIES]; 44861 if (C === null) C = undefined; 44862 } 44863 } return C === undefined ? Array : C; 44864}; 44865 44866 44867/***/ }), 44868/* 232 */ 44869/***/ (function(module, exports, __webpack_require__) { 44870 44871// https://github.com/DavidBruant/Map-Set.prototype.toJSON
vendor: 4,505 bytes, lines 44872-45042
44872var $export = __webpack_require__(3); 44873 44874$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(114)('Map') }); 44875 44876 44877/***/ }), 44878/* 233 */ 44879/***/ (function(module, exports, __webpack_require__) { 44880 44881var forOf = __webpack_require__(41); 44882 44883module.exports = function (iter, ITERATOR) { 44884 var result = []; 44885 forOf(iter, false, result.push, result, ITERATOR); 44886 return result; 44887}; 44888 44889 44890/***/ }), 44891/* 234 */ 44892/***/ (function(module, exports, __webpack_require__) { 44893 44894// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of 44895__webpack_require__(115)('Map'); 44896 44897 44898/***/ }), 44899/* 235 */ 44900/***/ (function(module, exports, __webpack_require__) { 44901 44902// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from 44903__webpack_require__(116)('Map'); 44904 44905 44906/***/ }), 44907/* 236 */ 44908/***/ (function(module, exports, __webpack_require__) { 44909 44910"use strict"; 44911 44912 44913exports.__esModule = true; 44914 44915var _typeof2 = __webpack_require__(69); 44916 44917var _typeof3 = _interopRequireDefault(_typeof2); 44918 44919function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 44920 44921exports.default = function (self, call) { 44922 if (!self) { 44923 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 44924 } 44925 44926 return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; 44927}; 44928 44929/***/ }), 44930/* 237 */ 44931/***/ (function(module, exports, __webpack_require__) { 44932 44933"use strict"; 44934 44935 44936exports.__esModule = true; 44937 44938var _setPrototypeOf = __webpack_require__(238); 44939 44940var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf); 44941 44942var _create = __webpack_require__(242); 44943 44944var _create2 = _interopRequireDefault(_create); 44945 44946var _typeof2 = __webpack_require__(69); 44947 44948var _typeof3 = _interopRequireDefault(_typeof2); 44949 44950function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 44951 44952exports.default = function (subClass, superClass) { 44953 if (typeof superClass !== "function" && superClass !== null) { 44954 throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass))); 44955 } 44956 44957 subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { 44958 constructor: { 44959 value: subClass, 44960 enumerable: false, 44961 writable: true, 44962 configurable: true 44963 } 44964 }); 44965 if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; 44966}; 44967 44968/***/ }), 44969/* 238 */ 44970/***/ (function(module, exports, __webpack_require__) { 44971 44972module.exports = { "default": __webpack_require__(239), __esModule: true }; 44973 44974/***/ }), 44975/* 239 */ 44976/***/ (function(module, exports, __webpack_require__) { 44977 44978__webpack_require__(240); 44979module.exports = __webpack_require__(2).Object.setPrototypeOf; 44980 44981 44982/***/ }), 44983/* 240 */ 44984/***/ (function(module, exports, __webpack_require__) { 44985 44986// 19.1.3.19 Object.setPrototypeOf(O, proto) 44987var $export = __webpack_require__(3); 44988$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(241).set }); 44989 44990 44991/***/ }), 44992/* 241 */ 44993/***/ (function(module, exports, __webpack_require__) { 44994 44995// Works with __proto__ only. Old v8 can't work with null proto objects. 44996/* eslint-disable no-proto */ 44997var isObject = __webpack_require__(9); 44998var anObject = __webpack_require__(14); 44999var check = function (O, proto) { 45000 anObject(O); 45001 if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); 45002}; 45003module.exports = { 45004 set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line 45005 function (test, buggy, set) { 45006 try { 45007 set = __webpack_require__(20)(Function.call, __webpack_require__(57).f(Object.prototype, '__proto__').set, 2); 45008 set(test, []); 45009 buggy = !(test instanceof Array); 45010 } catch (e) { buggy = true; } 45011 return function setPrototypeOf(O, proto) { 45012 check(O, proto); 45013 if (buggy) O.__proto__ = proto; 45014 else set(O, proto); 45015 return O; 45016 }; 45017 }({}, false) : undefined), 45018 check: check 45019}; 45020 45021 45022/***/ }), 45023/* 242 */ 45024/***/ (function(module, exports, __webpack_require__) { 45025 45026module.exports = { "default": __webpack_require__(243), __esModule: true }; 45027 45028/***/ }), 45029/* 243 */ 45030/***/ (function(module, exports, __webpack_require__) { 45031 45032__webpack_require__(244); 45033var $Object = __webpack_require__(2).Object; 45034module.exports = function create(P, D) { 45035 return $Object.create(P, D); 45036}; 45037 45038 45039/***/ }), 45040/* 244 */ 45041/***/ (function(module, exports, __webpack_require__) { 45042
45043var $export = __webpack_require__(3); 45044// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) 45045$export($export.S, 'Object', { create: __webpack_require__(36) }); 45046 45047 45048/***/ }), 45049/* 245 */ 45050/***/ (function(module, exports, __webpack_require__) { 45051 45052module.exports = { "default": __webpack_require__(246), __esModule: true }; 45053 45054/***/ }), 45055/* 246 */ 45056/***/ (function(module, exports, __webpack_require__) { 45057 45058__webpack_require__(247); 45059var $Object = __webpack_require__(2).Object; 45060module.exports = function defineProperties(T, D) { 45061 return $Object.defineProperties(T, D); 45062}; 45063 45064 45065/***/ }), 45066/* 247 */ 45067/***/ (function(module, exports, __webpack_require__) { 45068 45069var $export = __webpack_require__(3); 45070// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) 45071$export($export.S + $export.F * !__webpack_require__(5), 'Object', { defineProperties: __webpack_require__(100) }); 45072 45073 45074/***/ }), 45075/* 248 */ 45076/***/ (function(module, exports, __webpack_require__) { 45077 45078var pSlice = Array.prototype.slice; 45079var objectKeys = __webpack_require__(249); 45080var isArguments = __webpack_require__(250); 45081 45082var deepEqual = module.exports = function (actual, expected, opts) { 45083 if (!opts) opts = {}; 45084 // 7.1. All identical values are equivalent, as determined by ===. 45085 if (actual === expected) { 45086 return true; 45087 45088 } else if (actual instanceof Date && expected instanceof Date) { 45089 return actual.getTime() === expected.getTime(); 45090 45091 // 7.3. Other pairs that do not both pass typeof value == 'object', 45092 // equivalence is determined by ==. 45093 } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { 45094 return opts.strict ? actual === expected : actual == expected; 45095 45096 // 7.4. For all other Object pairs, including Array objects, equivalence is 45097 // determined by having the same number of owned properties (as verified 45098 // with Object.prototype.hasOwnProperty.call), the same set of keys 45099 // (although not necessarily the same order), equivalent values for every 45100 // corresponding key, and an identical 'prototype' property. Note: this 45101 // accounts for both named and indexed properties on Arrays. 45102 } else { 45103 return objEquiv(actual, expected, opts); 45104 } 45105} 45106 45107function isUndefinedOrNull(value) { 45108 return value === null || value === undefined; 45109} 45110 45111function isBuffer (x) { 45112 if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; 45113 if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { 45114 return false; 45115 } 45116 if (x.length > 0 && typeof x[0] !== 'number') return false; 45117 return true; 45118} 45119 45120function objEquiv(a, b, opts) { 45121 var i, key; 45122 if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) 45123 return false; 45124 // an identical 'prototype' property. 45125 if (a.prototype !== b.prototype) return false; 45126 //~~~I've managed to break Object.keys through screwy arguments passing. 45127 // Converting to array solves the problem. 45128 if (isArguments(a)) { 45129 if (!isArguments(b)) { 45130 return false; 45131 } 45132 a = pSlice.call(a); 45133 b = pSlice.call(b); 45134 return deepEqual(a, b, opts); 45135 } 45136 if (isBuffer(a)) { 45137 if (!isBuffer(b)) { 45138 return false; 45139 } 45140 if (a.length !== b.length) return false; 45141 for (i = 0; i < a.length; i++) { 45142 if (a[i] !== b[i]) return false; 45143 } 45144 return true; 45145 } 45146 try { 45147 var ka = objectKeys(a), 45148 kb = objectKeys(b); 45149 } catch (e) {//happens when one is a string literal and the other isn't 45150 return false; 45151 } 45152 // having the same number of owned properties (keys incorporates 45153 // hasOwnProperty) 45154 if (ka.length != kb.length) 45155 return false; 45156 //the same set of keys (although not necessarily the same order), 45157 ka.sort(); 45158 kb.sort(); 45159 //~~~cheap key test 45160 for (i = ka.length - 1; i >= 0; i--) { 45161 if (ka[i] != kb[i]) 45162 return false; 45163 } 45164 //equivalent values for every corresponding key, and 45165 //~~~possibly expensive deep test 45166 for (i = ka.length - 1; i >= 0; i--) { 45167 key = ka[i]; 45168 if (!deepEqual(a[key], b[key], opts)) return false; 45169 } 45170 return typeof a === typeof b; 45171} 45172 45173 45174/***/ }), 45175/* 249 */ 45176/***/ (function(module, exports) { 45177 45178exports = module.exports = typeof Object.keys === 'function'
45179 ? Object.keys : shim; 45180 45181exports.shim = shim; 45182function shim (obj) { 45183 var keys = []; 45184 for (var key in obj) keys.push(key); 45185 return keys; 45186} 45187 45188 45189/***/ }), 45190/* 250 */ 45191/***/ (function(module, exports) { 45192 45193var supportsArgumentsClass = (function(){ 45194 return Object.prototype.toString.call(arguments) 45195})() == '[object Arguments]'; 45196 45197exports = module.exports = supportsArgumentsClass ? supported : unsupported; 45198 45199exports.supported = supported; 45200function supported(object) { 45201 return Object.prototype.toString.call(object) == '[object Arguments]'; 45202}; 45203 45204exports.unsupported = unsupported; 45205function unsupported(object){ 45206 return object && 45207 typeof object == 'object' && 45208 typeof object.length == 'number' && 45209 Object.prototype.hasOwnProperty.call(object, 'callee') && 45210 !Object.prototype.propertyIsEnumerable.call(object, 'callee') || 45211 false; 45212}; 45213 45214 45215/***/ }), 45216/* 251 */ 45217/***/ (function(module, exports, __webpack_require__) { 45218 45219module.exports = { "default": __webpack_require__(252), __esModule: true }; 45220 45221/***/ }), 45222/* 252 */ 45223/***/ (function(module, exports, __webpack_require__) { 45224 45225__webpack_require__(253); 45226module.exports = __webpack_require__(2).Object.assign; 45227 45228 45229/***/ }), 45230/* 253 */ 45231/***/ (function(module, exports, __webpack_require__) { 45232 45233// 19.1.3.1 Object.assign(target, source) 45234var $export = __webpack_require__(3); 45235 45236$export($export.S + $export.F, 'Object', { assign: __webpack_require__(254) }); 45237 45238 45239/***/ }), 45240/* 254 */ 45241/***/ (function(module, exports, __webpack_require__) { 45242 45243"use strict"; 45244 45245// 19.1.2.1 Object.assign(target, source, ...) 45246var getKeys = __webpack_require__(29); 45247var gOPS = __webpack_require__(72); 45248var pIE = __webpack_require__(35); 45249var toObject = __webpack_require__(30); 45250var IObject = __webpack_require__(54); 45251var $assign = Object.assign; 45252 45253// should work with symbols and should have deterministic property order (V8 bug) 45254module.exports = !$assign || __webpack_require__(19)(function () { 45255 var A = {}; 45256 var B = {}; 45257 // eslint-disable-next-line no-undef 45258 var S = Symbol(); 45259 var K = 'abcdefghijklmnopqrst'; 45260 A[S] = 7; 45261 K.split('').forEach(function (k) { B[k] = k; }); 45262 return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; 45263}) ? function assign(target, source) { // eslint-disable-line no-unused-vars 45264 var T = toObject(target); 45265 var aLen = arguments.length; 45266 var index = 1; 45267 var getSymbols = gOPS.f; 45268 var isEnum = pIE.f; 45269 while (aLen > index) { 45270 var S = IObject(arguments[index++]); 45271 var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); 45272 var length = keys.length; 45273 var j = 0; 45274 var key; 45275 while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; 45276 } return T; 45277} : $assign; 45278 45279 45280/***/ }), 45281/* 255 */ 45282/***/ (function(module, exports, __webpack_require__) { 45283 45284module.exports = { "default": __webpack_require__(256), __esModule: true }; 45285 45286/***/ }), 45287/* 256 */ 45288/***/ (function(module, exports, __webpack_require__) { 45289 45290__webpack_require__(257); 45291module.exports = __webpack_require__(2).String.fromCodePoint; 45292 45293 45294/***/ }), 45295/* 257 */ 45296/***/ (function(module, exports, __webpack_require__) { 45297 45298var $export = __webpack_require__(3); 45299var toAbsoluteIndex = __webpack_require__(102); 45300var fromCharCode = String.fromCharCode; 45301var $fromCodePoint = String.fromCodePoint; 45302 45303// length should be 1, old FF problem 45304$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { 45305 // 21.1.2.2 String.fromCodePoint(...codePoints) 45306 fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars 45307 var res = []; 45308 var aLen = arguments.length; 45309 var i = 0; 45310 var code; 45311 while (aLen > i) { 45312 code = +arguments[i++]; 45313 if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); 45314 res.push(code < 0x10000 45315 ? fromCharCode(code) 45316 : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) 45317 ); 45318 } return res.join(''); 45319 } 45320}); 45321 45322 45323/***/ }), 45324/* 258 */ 45325/***/ (function(module, exports, __webpack_require__) { 45326 45327module.exports = { "default": __webpack_require__(259), __esModule: true }; 45328 45329/***/ }), 45330/* 259 */ 45331/***/ (function(module, exports, __webpack_require__) { 45332 45333__webpack_require__(24); 45334__webpack_require__(260); 45335module.exports = __webpack_require__(2).Array.from; 45336 45337 45338/***/ }), 45339/* 260 */ 45340/***/ (function(module, exports, __webpack_require__) { 45341 45342"use strict"; 45343 45344var ctx = __webpack_require__(20);
vendor: 4,084 bytes, lines 45345-45483
45345var $export = __webpack_require__(3); 45346var toObject = __webpack_require__(30); 45347var call = __webpack_require__(111); 45348var isArrayIter = __webpack_require__(112); 45349var toLength = __webpack_require__(37); 45350var createProperty = __webpack_require__(261); 45351var getIterFn = __webpack_require__(67); 45352 45353$export($export.S + $export.F * !__webpack_require__(262)(function (iter) { Array.from(iter); }), 'Array', { 45354 // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) 45355 from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { 45356 var O = toObject(arrayLike); 45357 var C = typeof this == 'function' ? this : Array; 45358 var aLen = arguments.length; 45359 var mapfn = aLen > 1 ? arguments[1] : undefined; 45360 var mapping = mapfn !== undefined; 45361 var index = 0; 45362 var iterFn = getIterFn(O); 45363 var length, result, step, iterator; 45364 if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); 45365 // if object isn't iterable or it's array with default iterator - use simple case 45366 if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { 45367 for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { 45368 createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); 45369 } 45370 } else { 45371 length = toLength(O.length); 45372 for (result = new C(length); length > index; index++) { 45373 createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); 45374 } 45375 } 45376 result.length = index; 45377 return result; 45378 } 45379}); 45380 45381 45382/***/ }), 45383/* 261 */ 45384/***/ (function(module, exports, __webpack_require__) { 45385 45386"use strict"; 45387 45388var $defineProperty = __webpack_require__(6); 45389var createDesc = __webpack_require__(27); 45390 45391module.exports = function (object, index, value) { 45392 if (index in object) $defineProperty.f(object, index, createDesc(0, value)); 45393 else object[index] = value; 45394}; 45395 45396 45397/***/ }), 45398/* 262 */ 45399/***/ (function(module, exports, __webpack_require__) { 45400 45401var ITERATOR = __webpack_require__(4)('iterator'); 45402var SAFE_CLOSING = false; 45403 45404try { 45405 var riter = [7][ITERATOR](); 45406 riter['return'] = function () { SAFE_CLOSING = true; }; 45407 // eslint-disable-next-line no-throw-literal 45408 Array.from(riter, function () { throw 2; }); 45409} catch (e) { /* empty */ } 45410 45411module.exports = function (exec, skipClosing) { 45412 if (!skipClosing && !SAFE_CLOSING) return false; 45413 var safe = false; 45414 try { 45415 var arr = [7]; 45416 var iter = arr[ITERATOR](); 45417 iter.next = function () { return { done: safe = true }; }; 45418 arr[ITERATOR] = function () { return iter; }; 45419 exec(arr); 45420 } catch (e) { /* empty */ } 45421 return safe; 45422}; 45423 45424 45425/***/ }), 45426/* 263 */ 45427/***/ (function(module, exports, __webpack_require__) { 45428 45429module.exports = { "default": __webpack_require__(264), __esModule: true }; 45430 45431/***/ }), 45432/* 264 */ 45433/***/ (function(module, exports, __webpack_require__) { 45434 45435__webpack_require__(73); 45436__webpack_require__(24); 45437__webpack_require__(28); 45438__webpack_require__(265); 45439__webpack_require__(266); 45440__webpack_require__(267); 45441__webpack_require__(268); 45442module.exports = __webpack_require__(2).Set; 45443 45444 45445/***/ }), 45446/* 265 */ 45447/***/ (function(module, exports, __webpack_require__) { 45448 45449"use strict"; 45450 45451var strong = __webpack_require__(108); 45452var validate = __webpack_require__(75); 45453var SET = 'Set'; 45454 45455// 23.2 Set Objects 45456module.exports = __webpack_require__(113)(SET, function (get) { 45457 return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; 45458}, { 45459 // 23.2.3.1 Set.prototype.add(value) 45460 add: function add(value) { 45461 return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); 45462 } 45463}, strong); 45464 45465 45466/***/ }), 45467/* 266 */ 45468/***/ (function(module, exports, __webpack_require__) { 45469 45470// https://github.com/DavidBruant/Map-Set.prototype.toJSON 45471var $export = __webpack_require__(3); 45472 45473$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(114)('Set') }); 45474 45475 45476/***/ }), 45477/* 267 */ 45478/***/ (function(module, exports, __webpack_require__) { 45479 45480// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of 45481__webpack_require__(115)('Set'); 45482 45483
45484/***/ }), 45485/* 268 */ 45486/***/ (function(module, exports, __webpack_require__) { 45487 45488// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from 45489__webpack_require__(116)('Set'); 45490 45491 45492/***/ }), 45493/* 269 */ 45494/***/ (function(module, exports, __webpack_require__) { 45495 45496/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.9.1 45497var CATEGORY_BITS, CATEGORY_MASK, CATEGORY_SHIFT, COMBINING_BITS, COMBINING_MASK, COMBINING_SHIFT, EAW_BITS, EAW_MASK, EAW_SHIFT, NUMBER_BITS, NUMBER_MASK, SCRIPT_BITS, SCRIPT_MASK, SCRIPT_SHIFT, UnicodeTrie, bits, data, fs, log2, trie; 45498 45499UnicodeTrie = __webpack_require__(43); 45500 45501data = __webpack_require__(270); 45502 45503 45504 45505trie = new UnicodeTrie(Buffer("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","base64")); 45506 45507log2 = Math.log2 || function(n) { 45508 return Math.log(n) / Math.LN2; 45509}; 45510 45511bits = function(n) { 45512 return (log2(n) + 1) | 0; 45513}; 45514 45515CATEGORY_BITS = bits(data.categories.length - 1); 45516 45517COMBINING_BITS = bits(data.combiningClasses.length - 1); 45518 45519SCRIPT_BITS = bits(data.scripts.length - 1); 45520 45521EAW_BITS = bits(data.eaw.length - 1); 45522 45523NUMBER_BITS = 10; 45524 45525CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS; 45526 45527COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS; 45528 45529SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS; 45530 45531EAW_SHIFT = NUMBER_BITS; 45532 45533CATEGORY_MASK = (1 << CATEGORY_BITS) - 1; 45534 45535COMBINING_MASK = (1 << COMBINING_BITS) - 1; 45536 45537SCRIPT_MASK = (1 << SCRIPT_BITS) - 1; 45538 45539EAW_MASK = (1 << EAW_BITS) - 1; 45540 45541NUMBER_MASK = (1 << NUMBER_BITS) - 1; 45542 45543exports.getCategory = function(codePoint) { 45544 var val; 45545 val = trie.get(codePoint); 45546 return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK]; 45547}; 45548 45549exports.getCombiningClass = function(codePoint) { 45550 var val; 45551 val = trie.get(codePoint); 45552 return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK]; 45553}; 45554 45555exports.getScript = function(codePoint) { 45556 var val; 45557 val = trie.get(codePoint); 45558 return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK]; 45559}; 45560 45561exports.getEastAsianWidth = function(codePoint) { 45562 var val; 45563 val = trie.get(codePoint); 45564 return data.eaw[(val >> EAW_SHIFT) & EAW_MASK]; 45565}; 45566 45567exports.getNumericValue = function(codePoint) { 45568 var denominator, exp, num, numerator, val; 45569 val = trie.get(codePoint); 45570 num = val & NUMBER_MASK; 45571 if (num === 0) { 45572 return null; 45573 } else if (num <= 50) { 45574 return num - 1; 45575 } else if (num < 0x1e0) { 45576 numerator = (num >> 4) - 12; 45577 denominator = (num & 0xf) + 1; 45578 return numerator / denominator; 45579 } else if (num < 0x300) { 45580 val = (num >> 5) - 14; 45581 exp = (num & 0x1f) + 2; 45582 while (exp > 0) { 45583 val *= 10; 45584 exp--; 45585 } 45586 return val; 45587 } else { 45588 val = (num >> 2) - 0xbf; 45589 exp = (num & 3) + 1; 45590 while (exp > 0) { 45591 val *= 60; 45592 exp--; 45593 } 45594 return val; 45595 } 45596}; 45597 45598exports.isAlphabetic = function(codePoint) { 45599 var ref; 45600 return (ref = exports.getCategory(codePoint)) === 'Lu' || ref === 'Ll' || ref === 'Lt' || ref === 'Lm' || ref === 'Lo' || ref === 'Nl'; 45601}; 45602 45603exports.isDigit = function(codePoint) { 45604 return exports.getCategory(codePoint) === 'Nd'; 45605}; 45606 45607exports.isPunctuation = function(codePoint) { 45608 var ref; 45609 return (ref = exports.getCategory(codePoint)) === 'Pc' || ref === 'Pd' || ref === 'Pe' || ref === 'Pf' || ref === 'Pi' || ref === 'Po' || ref === 'Ps'; 45610}; 45611 45612exports.isLowerCase = function(codePoint) { 45613 return exports.getCategory(codePoint) === 'Ll'; 45614}; 45615 45616exports.isUpperCase = function(codePoint) { 45617 return exports.getCategory(codePoint) === 'Lu'; 45618}; 45619 45620exports.isTitleCase = function(codePoint) { 45621 return exports.getCategory(codePoint) === 'Lt'; 45622}; 45623 45624exports.isWhiteSpace = function(codePoint) { 45625 var ref; 45626 return (ref = exports.getCategory(codePoint)) === 'Zs' || ref === 'Zl' || ref === 'Zp'; 45627}; 45628 45629exports.isBaseForm = function(codePoint) { 45630 var ref; 45631 return (ref = exports.getCategory(codePoint)) === 'Nd' || ref === 'No' || ref === 'Nl' || ref === 'Lu' || ref === 'Ll' || ref === 'Lt' || ref === 'Lm' || ref === 'Lo' || ref === 'Me' || ref === 'Mc'; 45632}; 45633 45634exports.isMark = function(codePoint) { 45635 var ref; 45636 return (ref = exports.getCategory(codePoint)) === 'Mn' || ref === 'Me' || ref === 'Mc'; 45637}; 45638 45639/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 45640 45641/***/ }), 45642/* 270 */ 45643/***/ (function(module, exports) { 45644 45645module.exports = {"categories":["Cc","Zs","Po","Sc","Ps","Pe","Sm","Pd","Nd","Lu","Sk","Pc","Ll","So","Lo","Pi","Cf","No","Pf","Lt","Lm","Mn","Me","Mc","Nl","Zl","Zp","Cs","Co"],"combiningClasses":["Not_Reordered","Above","Above_Right","Below","Attached_Above_Right","Attached_Below","Overlay","Iota_Subscript","Double_Below","Double_Above","Below_Right","Above_Left","CCC10","CCC11","CCC12","CCC13","CCC14","CCC15","CCC16","CCC17","CCC18","CCC19","CCC20","CCC21","CCC22","CCC23","CCC24","CCC25","CCC30","CCC31","CCC32","CCC27","CCC28","CCC29","CCC33","CCC34","CCC35","CCC36","Nukta","Virama","CCC84","CCC91","CCC103","CCC107","CCC118","CCC122","CCC129","CCC130","CCC132","Attached_Above","Below_Left","Left","Kana_Voicing","CCC26","Right"],"scripts":["Common","Latin","Bopomofo","Inherited","Greek","Coptic","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Nko","Samaritan","Mandaic","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul","Ethiopic","Cherokee","Canadian_Aboriginal","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer","Mongolian","Limbu","Tai_Le","New_Tai_Lue","Buginese","Tai_Tham","Balinese","Sundanese","Batak","Lepcha","Ol_
45645Chiki","Braille","Glagolitic","Tifinagh","Han","Hiragana","Katakana","Yi","Lisu","Vai","Bamum","Syloti_Nagri","Phags_Pa","Saurashtra","Kayah_Li","Rejang","Javanese","Cham","Tai_Viet","Meetei_Mayek","null","Linear_B","Lycian","Carian","Old_Italic","Gothic","Old_Permic","Ugaritic","Old_Persian","Deseret","Shavian","Osmanya","Elbasan","Caucasian_Albanian","Linear_A","Cypriot","Imperial_Aramaic","Palmyrene","Nabataean","Hatran","Phoenician","Lydian","Meroitic_Hieroglyphs","Meroitic_Cursive","Kharoshthi","Old_South_Arabian","Old_North_Arabian","Manichaean","Avestan","Inscriptional_Parthian","Inscriptional_Pahlavi","Psalter_Pahlavi","Old_Turkic","Old_Hungarian","Brahmi","Kaithi","Sora_Sompeng","Chakma","Mahajani","Sharada","Khojki","Multani","Khudawadi","Grantha","Tirhuta","Siddham","Modi","Takri","Ahom","Warang_Citi","Pau_Cin_Hau","Cuneiform","Egyptian_Hieroglyphs","Anatolian_Hieroglyphs","Mro","Bassa_Vah","Pahawh_Hmong","Miao","Duployan","SignWriting","Mende_Kikakui"],"eaw":["N","Na","A","W","H","F"]} 45646 45647/***/ }), 45648/* 271 */ 45649/***/ (function(module, exports, __webpack_require__) { 45650 45651"use strict"; 45652 45653 45654function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 45655 45656var _slicedToArray = _interopDefault(__webpack_require__(272)); 45657var _getIterator = _interopDefault(__webpack_require__(60)); 45658var _defineProperty = _interopDefault(__webpack_require__(276)); 45659var _regeneratorRuntime = _interopDefault(__webpack_require__(277)); 45660var _Symbol$iterator = _interopDefault(__webpack_require__(103)); 45661var _classCallCheck = _interopDefault(__webpack_require__(106)); 45662var _createClass = _interopDefault(__webpack_require__(107)); 45663 45664var INITIAL_STATE = 1; 45665var FAIL_STATE = 0; 45666 45667/** 45668 * A StateMachine represents a deterministic finite automaton. 45669 * It can perform matches over a sequence of values, similar to a regular expression. 45670 */ 45671 45672var StateMachine = function () { 45673 function StateMachine(dfa) { 45674 _classCallCheck(this, StateMachine); 45675 45676 this.stateTable = dfa.stateTable; 45677 this.accepting = dfa.accepting; 45678 this.tags = dfa.tags; 45679 } 45680 45681 /** 45682 * Returns an iterable object that yields pattern matches over the input sequence. 45683 * Matches are of the form [startIndex, endIndex, tags]. 45684 */ 45685 45686 45687 _createClass(StateMachine, [{ 45688 key: 'match', 45689 value: function match(str) { 45690 var self = this; 45691 return _defineProperty({}, _Symbol$iterator, _regeneratorRuntime.mark(function _callee() { 45692 var state, startRun, lastAccepting, lastState, p, c; 45693 return _regeneratorRuntime.wrap(function _callee$(_context) { 45694 while (1) { 45695 switch (_context.prev = _context.next) { 45696 case 0: 45697 state = INITIAL_STATE; 45698 startRun = null; 45699 lastAccepting = null; 45700 lastState = null; 45701 p = 0; 45702 45703 case 5: 45704 if (!(p < str.length)) { 45705 _context.next = 21; 45706 break; 45707 } 45708 45709 c = str[p]; 45710 45711 45712 lastState = state; 45713 state = self.stateTable[state][c]; 45714 45715 if (!(state === FAIL_STATE)) { 45716 _context.next = 15; 45717 break; 45718 } 45719 45720 if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { 45721 _context.next = 13; 45722 break; 45723 } 45724 45725 _context.next = 13; 45726 return [startRun, lastAccepting, self.tags[lastState]]; 45727 45728 case 13: 45729 45730 // reset the state as if we started over from the initial state 45731 state = self.stateTable[INITIAL_STATE][c]; 45732 startRun = null; 45733 45734 case 15: 45735 45736 // start a run if not in the failure state 45737 if (state !== FAIL_STATE && startRun == null) { 45738 startRun = p; 45739 } 45740 45741 // if accepting, mark the potential match end 45742 if (self.accepting[state]) { 45743 lastAccepting = p; 45744 } 45745 45746 // reset the state to the initial state if we get into the failure state 45747 if (state === FAIL_STATE) { 45748 state = INITIAL_STATE; 45749 } 45750 45751 case 18: 45752 p++; 45753 _context.next = 5; 45754 break; 45755 45756 case 21: 45757 if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { 45758 _context.next = 24; 45759 break; 45760 } 45761 45762 _context.next = 24; 45763 return [startRun, lastAccepting, self.tags[state]]; 45764 45765 case 24: 45766 case 'end': 45767 return _context.stop(); 45768 } 45769 } 45770 }, _callee, this); 45771 })); 45772 } 45773 45774 /** 45775 * For each match over the input sequence, action functions matching 45776 * the tag definitions in the input pattern are called with the startIndex, 45777 * endIndex, and sub-match sequence. 45778 */ 45779 45780 }, { 45781 key: 'apply', 45782 value: function apply(str, actions) { 45783 var _iteratorNormalCompletion = true; 45784 var _didIteratorError = false;
vendor: 4,514 bytes, lines 45785-45968
45785 var _iteratorError = undefined; 45786 45787 try { 45788 for (var _iterator = _getIterator(this.match(str)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { 45789 var _step$value = _slicedToArray(_step.value, 3); 45790 45791 var start = _step$value[0]; 45792 var end = _step$value[1]; 45793 var tags = _step$value[2]; 45794 var _iteratorNormalCompletion2 = true; 45795 var _didIteratorError2 = false; 45796 var _iteratorError2 = undefined; 45797 45798 try { 45799 for (var _iterator2 = _getIterator(tags), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { 45800 var tag = _step2.value; 45801 45802 if (typeof actions[tag] === 'function') { 45803 actions[tag](start, end, str.slice(start, end + 1)); 45804 } 45805 } 45806 } catch (err) { 45807 _didIteratorError2 = true; 45808 _iteratorError2 = err; 45809 } finally { 45810 try { 45811 if (!_iteratorNormalCompletion2 && _iterator2.return) { 45812 _iterator2.return(); 45813 } 45814 } finally { 45815 if (_didIteratorError2) { 45816 throw _iteratorError2; 45817 } 45818 } 45819 } 45820 } 45821 } catch (err) { 45822 _didIteratorError = true; 45823 _iteratorError = err; 45824 } finally { 45825 try { 45826 if (!_iteratorNormalCompletion && _iterator.return) { 45827 _iterator.return(); 45828 } 45829 } finally { 45830 if (_didIteratorError) { 45831 throw _iteratorError; 45832 } 45833 } 45834 } 45835 } 45836 }]); 45837 45838 return StateMachine; 45839}(); 45840 45841module.exports = StateMachine; 45842 45843 45844/***/ }), 45845/* 272 */ 45846/***/ (function(module, exports, __webpack_require__) { 45847 45848"use strict"; 45849 45850 45851exports.__esModule = true; 45852 45853var _isIterable2 = __webpack_require__(273); 45854 45855var _isIterable3 = _interopRequireDefault(_isIterable2); 45856 45857var _getIterator2 = __webpack_require__(60); 45858 45859var _getIterator3 = _interopRequireDefault(_getIterator2); 45860 45861function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 45862 45863exports.default = function () { 45864 function sliceIterator(arr, i) { 45865 var _arr = []; 45866 var _n = true; 45867 var _d = false; 45868 var _e = undefined; 45869 45870 try { 45871 for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { 45872 _arr.push(_s.value); 45873 45874 if (i && _arr.length === i) break; 45875 } 45876 } catch (err) { 45877 _d = true; 45878 _e = err; 45879 } finally { 45880 try { 45881 if (!_n && _i["return"]) _i["return"](); 45882 } finally { 45883 if (_d) throw _e; 45884 } 45885 } 45886 45887 return _arr; 45888 } 45889 45890 return function (arr, i) { 45891 if (Array.isArray(arr)) { 45892 return arr; 45893 } else if ((0, _isIterable3.default)(Object(arr))) { 45894 return sliceIterator(arr, i); 45895 } else { 45896 throw new TypeError("Invalid attempt to destructure non-iterable instance"); 45897 } 45898 }; 45899}(); 45900 45901/***/ }), 45902/* 273 */ 45903/***/ (function(module, exports, __webpack_require__) { 45904 45905module.exports = { "default": __webpack_require__(274), __esModule: true }; 45906 45907/***/ }), 45908/* 274 */ 45909/***/ (function(module, exports, __webpack_require__) { 45910 45911__webpack_require__(28); 45912__webpack_require__(24); 45913module.exports = __webpack_require__(275); 45914 45915 45916/***/ }), 45917/* 275 */ 45918/***/ (function(module, exports, __webpack_require__) { 45919 45920var classof = __webpack_require__(68); 45921var ITERATOR = __webpack_require__(4)('iterator'); 45922var Iterators = __webpack_require__(23); 45923module.exports = __webpack_require__(2).isIterable = function (it) { 45924 var O = Object(it); 45925 return O[ITERATOR] !== undefined 45926 || '@@iterator' in O 45927 // eslint-disable-next-line no-prototype-builtins 45928 || Iterators.hasOwnProperty(classof(O)); 45929}; 45930 45931 45932/***/ }), 45933/* 276 */ 45934/***/ (function(module, exports, __webpack_require__) { 45935 45936"use strict"; 45937 45938 45939exports.__esModule = true; 45940 45941var _defineProperty = __webpack_require__(74); 45942 45943var _defineProperty2 = _interopRequireDefault(_defineProperty); 45944 45945function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 45946 45947exports.default = function (obj, key, value) { 45948 if (key in obj) { 45949 (0, _defineProperty2.default)(obj, key, { 45950 value: value, 45951 enumerable: true, 45952 configurable: true, 45953 writable: true 45954 }); 45955 } else { 45956 obj[key] = value; 45957 } 45958 45959 return obj; 45960}; 45961 45962/***/ }), 45963/* 277 */ 45964/***/ (function(module, exports, __webpack_require__) { 45965 45966module.exports = __webpack_require__(278); 45967 45968
vendor: 8,918 bytes, lines 45969-46200
45969/***/ }), 45970/* 278 */ 45971/***/ (function(module, exports, __webpack_require__) { 45972 45973/** 45974 * Copyright (c) 2014-present, Facebook, Inc. 45975 * 45976 * This source code is licensed under the MIT license found in the 45977 * LICENSE file in the root directory of this source tree. 45978 */ 45979 45980// This method of obtaining a reference to the global object needs to be 45981// kept identical to the way it is obtained in runtime.js 45982var g = (function() { return this })() || Function("return this")(); 45983 45984// Use `getOwnPropertyNames` because not all browsers support calling 45985// `hasOwnProperty` on the global `self` object in a worker. See #183. 45986var hadRuntime = g.regeneratorRuntime && 45987 Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; 45988 45989// Save the old regeneratorRuntime in case it needs to be restored later. 45990var oldRuntime = hadRuntime && g.regeneratorRuntime; 45991 45992// Force reevalutation of runtime.js. 45993g.regeneratorRuntime = undefined; 45994 45995module.exports = __webpack_require__(279); 45996 45997if (hadRuntime) { 45998 // Restore the original runtime. 45999 g.regeneratorRuntime = oldRuntime; 46000} else { 46001 // Remove the global property added by runtime.js. 46002 try { 46003 delete g.regeneratorRuntime; 46004 } catch(e) { 46005 g.regeneratorRuntime = undefined; 46006 } 46007} 46008 46009 46010/***/ }), 46011/* 279 */ 46012/***/ (function(module, exports) { 46013 46014/** 46015 * Copyright (c) 2014-present, Facebook, Inc. 46016 * 46017 * This source code is licensed under the MIT license found in the 46018 * LICENSE file in the root directory of this source tree. 46019 */ 46020 46021!(function(global) { 46022 "use strict"; 46023 46024 var Op = Object.prototype; 46025 var hasOwn = Op.hasOwnProperty; 46026 var undefined; // More compressible than void 0. 46027 var $Symbol = typeof Symbol === "function" ? Symbol : {}; 46028 var iteratorSymbol = $Symbol.iterator || "@@iterator"; 46029 var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; 46030 var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; 46031 46032 var inModule = typeof module === "object"; 46033 var runtime = global.regeneratorRuntime; 46034 if (runtime) { 46035 if (inModule) { 46036 // If regeneratorRuntime is defined globally and we're in a module, 46037 // make the exports object identical to regeneratorRuntime. 46038 module.exports = runtime; 46039 } 46040 // Don't bother evaluating the rest of this file if the runtime was 46041 // already defined globally. 46042 return; 46043 } 46044 46045 // Define the runtime globally (as expected by generated code) as either 46046 // module.exports (if we're in a module) or a new, empty object. 46047 runtime = global.regeneratorRuntime = inModule ? module.exports : {}; 46048 46049 function wrap(innerFn, outerFn, self, tryLocsList) { 46050 // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. 46051 var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; 46052 var generator = Object.create(protoGenerator.prototype); 46053 var context = new Context(tryLocsList || []); 46054 46055 // The ._invoke method unifies the implementations of the .next, 46056 // .throw, and .return methods. 46057 generator._invoke = makeInvokeMethod(innerFn, self, context); 46058 46059 return generator; 46060 } 46061 runtime.wrap = wrap; 46062 46063 // Try/catch helper to minimize deoptimizations. Returns a completion 46064 // record like context.tryEntries[i].completion. This interface could 46065 // have been (and was previously) designed to take a closure to be 46066 // invoked without arguments, but in all the cases we care about we 46067 // already have an existing method we want to call, so there's no need 46068 // to create a new function object. We can even get away with assuming 46069 // the method takes exactly one argument, since that happens to be true 46070 // in every case, so we don't have to touch the arguments object. The 46071 // only additional allocation required is the completion record, which 46072 // has a stable shape and so hopefully should be cheap to allocate. 46073 function tryCatch(fn, obj, arg) { 46074 try { 46075 return { type: "normal", arg: fn.call(obj, arg) }; 46076 } catch (err) { 46077 return { type: "throw", arg: err }; 46078 } 46079 } 46080 46081 var GenStateSuspendedStart = "suspendedStart"; 46082 var GenStateSuspendedYield = "suspendedYield"; 46083 var GenStateExecuting = "executing"; 46084 var GenStateCompleted = "completed"; 46085 46086 // Returning this object from the innerFn has the same effect as 46087 // breaking out of the dispatch switch statement. 46088 var ContinueSentinel = {}; 46089 46090 // Dummy constructor functions that we use as the .constructor and 46091 // .constructor.prototype properties for functions that return Generator 46092 // objects. For full spec compliance, you may wish to configure your 46093 // minifier not to mangle the names of these two functions. 46094 function Generator() {} 46095 function GeneratorFunction() {} 46096 function GeneratorFunctionPrototype() {} 46097 46098 // This is a polyfill for %IteratorPrototype% for environments that 46099 // don't natively support it. 46100 var IteratorPrototype = {}; 46101 IteratorPrototype[iteratorSymbol] = function () { 46102 return this; 46103 }; 46104 46105 var getProto = Object.getPrototypeOf; 46106 var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); 46107 if (NativeIteratorPrototype && 46108 NativeIteratorPrototype !== Op && 46109 hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { 46110 // This environment has a native %IteratorPrototype%; use it instead 46111 // of the polyfill. 46112 IteratorPrototype = NativeIteratorPrototype; 46113 } 46114 46115 var Gp = GeneratorFunctionPrototype.prototype = 46116 Generator.prototype = Object.create(IteratorPrototype); 46117 GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; 46118 GeneratorFunctionPrototype.constructor = GeneratorFunction; 46119 GeneratorFunctionPrototype[toStringTagSymbol] = 46120 GeneratorFunction.displayName = "GeneratorFunction"; 46121 46122 // Helper for defining the .next, .throw, and .return methods of the 46123 // Iterator interface in terms of a single ._invoke method. 46124 function defineIteratorMethods(prototype) { 46125 ["next", "throw", "return"].forEach(function(method) { 46126 prototype[method] = function(arg) { 46127 return this._invoke(method, arg); 46128 }; 46129 }); 46130 } 46131 46132 runtime.isGeneratorFunction = function(genFun) { 46133 var ctor = typeof genFun === "function" && genFun.constructor; 46134 return ctor 46135 ? ctor === GeneratorFunction || 46136 // For the native GeneratorFunction constructor, the best we can 46137 // do is to check its .name property. 46138 (ctor.displayName || ctor.name) === "GeneratorFunction" 46139 : false; 46140 }; 46141 46142 runtime.mark = function(genFun) { 46143 if (Object.setPrototypeOf) { 46144 Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); 46145 } else { 46146 genFun.__proto__ = GeneratorFunctionPrototype; 46147 if (!(toStringTagSymbol in genFun)) { 46148 genFun[toStringTagSymbol] = "GeneratorFunction"; 46149 } 46150 } 46151 genFun.prototype = Object.create(Gp); 46152 return genFun; 46153 }; 46154 46155 // Within the body of any async function, `await x` is transformed to 46156 // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test 46157 // `hasOwn.call(value, "__await")` to determine if the yielded value is 46158 // meant to be awaited. 46159 runtime.awrap = function(arg) { 46160 return { __await: arg }; 46161 }; 46162 46163 function AsyncIterator(generator) { 46164 function invoke(method, arg, resolve, reject) { 46165 var record = tryCatch(generator[method], generator, arg); 46166 if (record.type === "throw") { 46167 reject(record.arg); 46168 } else { 46169 var result = record.arg; 46170 var value = result.value; 46171 if (value && 46172 typeof value === "object" && 46173 hasOwn.call(value, "__await")) { 46174 return Promise.resolve(value.__await).then(function(value) { 46175 invoke("next", value, resolve, reject); 46176 }, function(err) { 46177 invoke("throw", err, resolve, reject); 46178 }); 46179 } 46180 46181 return Promise.resolve(value).then(function(unwrapped) { 46182 // When a yielded Promise is resolved, its final value becomes 46183 // the .value of the Promise<{value,done}> result for the 46184 // current iteration. If the Promise is rejected, however, the 46185 // result for this iteration will be rejected with the same 46186 // reason. Note that rejections of yielded Promises are not 46187 // thrown back into the generator function, as is the case 46188 // when an awaited Promise is rejected. This difference in 46189 // behavior between yield and await is important, because it 46190 // allows the consumer to decide what to do with the yielded 46191 // rejection (swallow it and continue, manually .throw it back 46192 // into the generator, abandon iteration, whatever). With 46193 // await, by contrast, there is no opportunity to examine the 46194 // rejection reason outside the generator function, so the 46195 // only option is to throw it from the await expression, and 46196 // let the generator function handle the exception. 46197 result.value = unwrapped; 46198 resolve(result); 46199 }, reject); 46200 }
vendor: 16,196 bytes, lines 46200-46736
46200 46201 } 46202 46203 var previousPromise; 46204 46205 function enqueue(method, arg) { 46206 function callInvokeWithMethodAndArg() { 46207 return new Promise(function(resolve, reject) { 46208 invoke(method, arg, resolve, reject); 46209 }); 46210 } 46211 46212 return previousPromise = 46213 // If enqueue has been called before, then we want to wait until 46214 // all previous Promises have been resolved before calling invoke, 46215 // so that results are always delivered in the correct order. If 46216 // enqueue has not been called before, then it is important to 46217 // call invoke immediately, without waiting on a callback to fire, 46218 // so that the async generator function has the opportunity to do 46219 // any necessary setup in a predictable way. This predictability 46220 // is why the Promise constructor synchronously invokes its 46221 // executor callback, and why async functions synchronously 46222 // execute code before the first await. Since we implement simple 46223 // async functions in terms of async generators, it is especially 46224 // important to get this right, even though it requires care. 46225 previousPromise ? previousPromise.then( 46226 callInvokeWithMethodAndArg, 46227 // Avoid propagating failures to Promises returned by later 46228 // invocations of the iterator. 46229 callInvokeWithMethodAndArg 46230 ) : callInvokeWithMethodAndArg(); 46231 } 46232 46233 // Define the unified helper method that is used to implement .next, 46234 // .throw, and .return (see defineIteratorMethods). 46235 this._invoke = enqueue; 46236 } 46237 46238 defineIteratorMethods(AsyncIterator.prototype); 46239 AsyncIterator.prototype[asyncIteratorSymbol] = function () { 46240 return this; 46241 }; 46242 runtime.AsyncIterator = AsyncIterator; 46243 46244 // Note that simple async functions are implemented on top of 46245 // AsyncIterator objects; they just return a Promise for the value of 46246 // the final result produced by the iterator. 46247 runtime.async = function(innerFn, outerFn, self, tryLocsList) { 46248 var iter = new AsyncIterator( 46249 wrap(innerFn, outerFn, self, tryLocsList) 46250 ); 46251 46252 return runtime.isGeneratorFunction(outerFn) 46253 ? iter // If outerFn is a generator, return the full iterator. 46254 : iter.next().then(function(result) { 46255 return result.done ? result.value : iter.next(); 46256 }); 46257 }; 46258 46259 function makeInvokeMethod(innerFn, self, context) { 46260 var state = GenStateSuspendedStart; 46261 46262 return function invoke(method, arg) { 46263 if (state === GenStateExecuting) { 46264 throw new Error("Generator is already running"); 46265 } 46266 46267 if (state === GenStateCompleted) { 46268 if (method === "throw") { 46269 throw arg; 46270 } 46271 46272 // Be forgiving, per 25.3.3.3.3 of the spec: 46273 // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume 46274 return doneResult(); 46275 } 46276 46277 context.method = method; 46278 context.arg = arg; 46279 46280 while (true) { 46281 var delegate = context.delegate; 46282 if (delegate) { 46283 var delegateResult = maybeInvokeDelegate(delegate, context); 46284 if (delegateResult) { 46285 if (delegateResult === ContinueSentinel) continue; 46286 return delegateResult; 46287 } 46288 } 46289 46290 if (context.method === "next") { 46291 // Setting context._sent for legacy support of Babel's 46292 // function.sent implementation. 46293 context.sent = context._sent = context.arg; 46294 46295 } else if (context.method === "throw") { 46296 if (state === GenStateSuspendedStart) { 46297 state = GenStateCompleted; 46298 throw context.arg; 46299 } 46300 46301 context.dispatchException(context.arg); 46302 46303 } else if (context.method === "return") { 46304 context.abrupt("return", context.arg); 46305 } 46306 46307 state = GenStateExecuting; 46308 46309 var record = tryCatch(innerFn, self, context); 46310 if (record.type === "normal") { 46311 // If an exception is thrown from innerFn, we leave state === 46312 // GenStateExecuting and loop back for another invocation. 46313 state = context.done 46314 ? GenStateCompleted 46315 : GenStateSuspendedYield; 46316 46317 if (record.arg === ContinueSentinel) { 46318 continue; 46319 } 46320 46321 return { 46322 value: record.arg, 46323 done: context.done 46324 }; 46325 46326 } else if (record.type === "throw") { 46327 state = GenStateCompleted; 46328 // Dispatch the exception by looping back around to the 46329 // context.dispatchException(context.arg) call above. 46330 context.method = "throw"; 46331 context.arg = record.arg; 46332 } 46333 } 46334 }; 46335 } 46336 46337 // Call delegate.iterator[context.method](context.arg) and handle the 46338 // result, either by returning a { value, done } result from the 46339 // delegate iterator, or by modifying context.method and context.arg, 46340 // setting context.delegate to null, and returning the ContinueSentinel. 46341 function maybeInvokeDelegate(delegate, context) { 46342 var method = delegate.iterator[context.method]; 46343 if (method === undefined) { 46344 // A .throw or .return when the delegate iterator has no .throw 46345 // method always terminates the yield* loop. 46346 context.delegate = null; 46347 46348 if (context.method === "throw") { 46349 if (delegate.iterator.return) { 46350 // If the delegate iterator has a return method, give it a 46351 // chance to clean up. 46352 context.method = "return"; 46353 context.arg = undefined; 46354 maybeInvokeDelegate(delegate, context); 46355 46356 if (context.method === "throw") { 46357 // If maybeInvokeDelegate(context) changed context.method from 46358 // "return" to "throw", let that override the TypeError below. 46359 return ContinueSentinel; 46360 } 46361 } 46362 46363 context.method = "throw"; 46364 context.arg = new TypeError( 46365 "The iterator does not provide a 'throw' method"); 46366 } 46367 46368 return ContinueSentinel; 46369 } 46370 46371 var record = tryCatch(method, delegate.iterator, context.arg); 46372 46373 if (record.type === "throw") { 46374 context.method = "throw"; 46375 context.arg = record.arg; 46376 context.delegate = null; 46377 return ContinueSentinel; 46378 } 46379 46380 var info = record.arg; 46381 46382 if (! info) { 46383 context.method = "throw"; 46384 context.arg = new TypeError("iterator result is not an object"); 46385 context.delegate = null; 46386 return ContinueSentinel; 46387 } 46388 46389 if (info.done) { 46390 // Assign the result of the finished delegate to the temporary 46391 // variable specified by delegate.resultName (see delegateYield). 46392 context[delegate.resultName] = info.value; 46393 46394 // Resume execution at the desired location (see delegateYield). 46395 context.next = delegate.nextLoc; 46396 46397 // If context.method was "throw" but the delegate handled the 46398 // exception, let the outer generator proceed normally. If 46399 // context.method was "next", forget context.arg since it has been 46400 // "consumed" by the delegate iterator. If context.method was 46401 // "return", allow the original .return call to continue in the 46402 // outer generator. 46403 if (context.method !== "return") { 46404 context.method = "next"; 46405 context.arg = undefined; 46406 } 46407 46408 } else { 46409 // Re-yield the result returned by the delegate method. 46410 return info; 46411 } 46412 46413 // The delegate iterator is finished, so forget it and continue with 46414 // the outer generator. 46415 context.delegate = null; 46416 return ContinueSentinel; 46417 } 46418 46419 // Define Generator.prototype.{next,throw,return} in terms of the 46420 // unified ._invoke helper method. 46421 defineIteratorMethods(Gp); 46422 46423 Gp[toStringTagSymbol] = "Generator"; 46424 46425 // A Generator should always return itself as the iterator object when the 46426 // @@iterator function is called on it. Some browsers' implementations of the 46427 // iterator prototype chain incorrectly implement this, causing the Generator 46428 // object to not be returned from this call. This ensures that doesn't happen. 46429 // See https://github.com/facebook/regenerator/issues/274 for more details. 46430 Gp[iteratorSymbol] = function() { 46431 return this; 46432 }; 46433 46434 Gp.toString = function() { 46435 return "[object Generator]"; 46436 }; 46437 46438 function pushTryEntry(locs) { 46439 var entry = { tryLoc: locs[0] }; 46440 46441 if (1 in locs) { 46442 entry.catchLoc = locs[1]; 46443 } 46444 46445 if (2 in locs) { 46446 entry.finallyLoc = locs[2]; 46447 entry.afterLoc = locs[3]; 46448 } 46449 46450 this.tryEntries.push(entry); 46451 } 46452 46453 function resetTryEntry(entry) { 46454 var record = entry.completion || {}; 46455 record.type = "normal"; 46456 delete record.arg; 46457 entry.completion = record; 46458 } 46459 46460 function Context(tryLocsList) { 46461 // The root entry object (effectively a try statement without a catch 46462 // or a finally block) gives us a place to store values thrown from 46463 // locations where there is no enclosing try statement. 46464 this.tryEntries = [{ tryLoc: "root" }]; 46465 tryLocsList.forEach(pushTryEntry, this); 46466 this.reset(true); 46467 } 46468 46469 runtime.keys = function(object) { 46470 var keys = []; 46471 for (var key in object) { 46472 keys.push(key); 46473 } 46474 keys.reverse(); 46475 46476 // Rather than returning an object with a next method, we keep 46477 // things simple and return the next function itself. 46478 return function next() { 46479 while (keys.length) { 46480 var key = keys.pop(); 46481 if (key in object) { 46482 next.value = key; 46483 next.done = false; 46484 return next; 46485 } 46486 } 46487 46488 // To avoid creating an additional object, we just hang the .value 46489 // and .done properties off the next function object itself. This 46490 // also ensures that the minifier will not anonymize the function. 46491 next.done = true; 46492 return next; 46493 }; 46494 }; 46495 46496 function values(iterable) { 46497 if (iterable) { 46498 var iteratorMethod = iterable[iteratorSymbol]; 46499 if (iteratorMethod) { 46500 return iteratorMethod.call(iterable); 46501 } 46502 46503 if (typeof iterable.next === "function") { 46504 return iterable; 46505 } 46506 46507 if (!isNaN(iterable.length)) { 46508 var i = -1, next = function next() { 46509 while (++i < iterable.length) { 46510 if (hasOwn.call(iterable, i)) { 46511 next.value = iterable[i]; 46512 next.done = false; 46513 return next; 46514 } 46515 } 46516 46517 next.value = undefined; 46518 next.done = true; 46519 46520 return next; 46521 }; 46522 46523 return next.next = next; 46524 } 46525 } 46526 46527 // Return an iterator with no values. 46528 return { next: doneResult }; 46529 } 46530 runtime.values = values; 46531 46532 function doneResult() { 46533 return { value: undefined, done: true }; 46534 } 46535 46536 Context.prototype = { 46537 constructor: Context, 46538 46539 reset: function(skipTempReset) { 46540 this.prev = 0; 46541 this.next = 0; 46542 // Resetting context._sent for legacy support of Babel's 46543 // function.sent implementation. 46544 this.sent = this._sent = undefined; 46545 this.done = false; 46546 this.delegate = null; 46547 46548 this.method = "next"; 46549 this.arg = undefined; 46550 46551 this.tryEntries.forEach(resetTryEntry); 46552 46553 if (!skipTempReset) { 46554 for (var name in this) { 46555 // Not sure about the optimal order of these conditions: 46556 if (name.charAt(0) === "t" && 46557 hasOwn.call(this, name) && 46558 !isNaN(+name.slice(1))) { 46559 this[name] = undefined; 46560 } 46561 } 46562 } 46563 }, 46564 46565 stop: function() { 46566 this.done = true; 46567 46568 var rootEntry = this.tryEntries[0]; 46569 var rootRecord = rootEntry.completion; 46570 if (rootRecord.type === "throw") { 46571 throw rootRecord.arg; 46572 } 46573 46574 return this.rval; 46575 }, 46576 46577 dispatchException: function(exception) { 46578 if (this.done) { 46579 throw exception; 46580 } 46581 46582 var context = this; 46583 function handle(loc, caught) { 46584 record.type = "throw"; 46585 record.arg = exception; 46586 context.next = loc; 46587 46588 if (caught) { 46589 // If the dispatched exception was caught by a catch block, 46590 // then let that catch block handle the exception normally. 46591 context.method = "next"; 46592 context.arg = undefined; 46593 } 46594 46595 return !! caught; 46596 } 46597 46598 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 46599 var entry = this.tryEntries[i]; 46600 var record = entry.completion; 46601 46602 if (entry.tryLoc === "root") { 46603 // Exception thrown outside of any try block that could handle 46604 // it, so set the completion value of the entire function to 46605 // throw the exception. 46606 return handle("end"); 46607 } 46608 46609 if (entry.tryLoc <= this.prev) { 46610 var hasCatch = hasOwn.call(entry, "catchLoc"); 46611 var hasFinally = hasOwn.call(entry, "finallyLoc"); 46612 46613 if (hasCatch && hasFinally) { 46614 if (this.prev < entry.catchLoc) { 46615 return handle(entry.catchLoc, true); 46616 } else if (this.prev < entry.finallyLoc) { 46617 return handle(entry.finallyLoc); 46618 } 46619 46620 } else if (hasCatch) { 46621 if (this.prev < entry.catchLoc) { 46622 return handle(entry.catchLoc, true); 46623 } 46624 46625 } else if (hasFinally) { 46626 if (this.prev < entry.finallyLoc) { 46627 return handle(entry.finallyLoc); 46628 } 46629 46630 } else { 46631 throw new Error("try statement without catch or finally"); 46632 } 46633 } 46634 } 46635 }, 46636 46637 abrupt: function(type, arg) { 46638 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 46639 var entry = this.tryEntries[i]; 46640 if (entry.tryLoc <= this.prev && 46641 hasOwn.call(entry, "finallyLoc") && 46642 this.prev < entry.finallyLoc) { 46643 var finallyEntry = entry; 46644 break; 46645 } 46646 } 46647 46648 if (finallyEntry && 46649 (type === "break" || 46650 type === "continue") && 46651 finallyEntry.tryLoc <= arg && 46652 arg <= finallyEntry.finallyLoc) { 46653 // Ignore the finally entry if control is not jumping to a 46654 // location outside the try/catch block. 46655 finallyEntry = null; 46656 } 46657 46658 var record = finallyEntry ? finallyEntry.completion : {}; 46659 record.type = type; 46660 record.arg = arg; 46661 46662 if (finallyEntry) { 46663 this.method = "next"; 46664 this.next = finallyEntry.finallyLoc; 46665 return ContinueSentinel; 46666 } 46667 46668 return this.complete(record); 46669 }, 46670 46671 complete: function(record, afterLoc) { 46672 if (record.type === "throw") { 46673 throw record.arg; 46674 } 46675 46676 if (record.type === "break" || 46677 record.type === "continue") { 46678 this.next = record.arg; 46679 } else if (record.type === "return") { 46680 this.rval = this.arg = record.arg; 46681 this.method = "return"; 46682 this.next = "end"; 46683 } else if (record.type === "normal" && afterLoc) { 46684 this.next = afterLoc; 46685 } 46686 46687 return ContinueSentinel; 46688 }, 46689 46690 finish: function(finallyLoc) { 46691 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 46692 var entry = this.tryEntries[i]; 46693 if (entry.finallyLoc === finallyLoc) { 46694 this.complete(entry.completion, entry.afterLoc); 46695 resetTryEntry(entry); 46696 return ContinueSentinel; 46697 } 46698 } 46699 }, 46700 46701 "catch": function(tryLoc) { 46702 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 46703 var entry = this.tryEntries[i]; 46704 if (entry.tryLoc === tryLoc) { 46705 var record = entry.completion; 46706 if (record.type === "throw") { 46707 var thrown = record.arg; 46708 resetTryEntry(entry); 46709 } 46710 return thrown; 46711 } 46712 } 46713 46714 // The context.catch method must only be called with a location 46715 // argument that corresponds to a known catch block. 46716 throw new Error("illegal catch attempt"); 46717 }, 46718 46719 delegateYield: function(iterable, resultName, nextLoc) { 46720 this.delegate = { 46721 iterator: values(iterable), 46722 resultName: resultName, 46723 nextLoc: nextLoc 46724 }; 46725 46726 if (this.method === "next") { 46727 // Deliberately forget the last sent value so that we don't 46728 // accidentally pass it on to the delegate. 46729 this.arg = undefined; 46730 } 46731 46732 return ContinueSentinel; 46733 } 46734 }; 46735})( 46736 //
46736In sloppy mode, unbound `this` refers to the global object, fallback to 46737 // Function constructor if we're in global strict mode. That is sadly a form 46738 // of indirect eval which violates Content Security Policy. 46739 (function() { return this })() || Function("return this")() 46740); 46741 46742 46743/***/ }), 46744/* 280 */ 46745/***/ (function(module, exports, __webpack_require__) { 46746 46747module.exports = { "default": __webpack_require__(281), __esModule: true }; 46748 46749/***/ }), 46750/* 281 */ 46751/***/ (function(module, exports, __webpack_require__) { 46752 46753__webpack_require__(282); 46754module.exports = Math.pow(2, -52); 46755 46756 46757/***/ }), 46758/* 282 */ 46759/***/ (function(module, exports, __webpack_require__) { 46760 46761// 20.1.2.1 Number.EPSILON
46762var $export = __webpack_require__(3); 46763 46764$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); 46765 46766 46767/***/ }), 46768/* 283 */ 46769/***/ (function(module, exports, __webpack_require__) { 46770 46771/* WEBPACK VAR INJECTION */(function(Buffer) {var clone = (function() { 46772'use strict'; 46773 46774/** 46775 * Clones (copies) an Object using deep copying. 46776 * 46777 * This function supports circular references by default, but if you are certain 46778 * there are no circular references in your object, you can save some CPU time 46779 * by calling clone(obj, false). 46780 * 46781 * Caution: if `circular` is false and `parent` contains circular references, 46782 * your program may enter an infinite loop and crash. 46783 * 46784 * @param `parent` - the object to be cloned 46785 * @param `circular` - set to true if the object to be cloned may contain 46786 * circular references. (optional - true by default) 46787 * @param `depth` - set to a number if the object is only to be cloned to 46788 * a particular depth. (optional - defaults to Infinity) 46789 * @param `prototype` - sets the prototype to be used when cloning an object. 46790 * (optional - defaults to parent prototype). 46791*/ 46792function clone(parent, circular, depth, prototype) { 46793 var filter; 46794 if (typeof circular === 'object') { 46795 depth = circular.depth; 46796 prototype = circular.prototype; 46797 filter = circular.filter; 46798 circular = circular.circular 46799 } 46800 // maintain two arrays for circular references, where corresponding parents 46801 // and children have the same index 46802 var allParents = []; 46803 var allChildren = []; 46804 46805 var useBuffer = typeof Buffer != 'undefined'; 46806 46807 if (typeof circular == 'undefined') 46808 circular = true; 46809 46810 if (typeof depth == 'undefined') 46811 depth = Infinity; 46812 46813 // recurse this function so we don't reset allParents and allChildren 46814 function _clone(parent, depth) { 46815 // cloning null always returns null 46816 if (parent === null) 46817 return null; 46818 46819 if (depth == 0) 46820 return parent; 46821 46822 var child; 46823 var proto; 46824 if (typeof parent != 'object') { 46825 return parent; 46826 } 46827 46828 if (clone.__isArray(parent)) { 46829 child = []; 46830 } else if (clone.__isRegExp(parent)) { 46831 child = new RegExp(parent.source, __getRegExpFlags(parent)); 46832 if (parent.lastIndex) child.lastIndex = parent.lastIndex; 46833 } else if (clone.__isDate(parent)) { 46834 child = new Date(parent.getTime()); 46835 } else if (useBuffer && Buffer.isBuffer(parent)) { 46836 child = new Buffer(parent.length); 46837 parent.copy(child); 46838 return child; 46839 } else { 46840 if (typeof prototype == 'undefined') { 46841 proto = Object.getPrototypeOf(parent); 46842 child = Object.create(proto); 46843 } 46844 else { 46845 child = Object.create(prototype); 46846 proto = prototype; 46847 } 46848 } 46849 46850 if (circular) { 46851 var index = allParents.indexOf(parent); 46852 46853 if (index != -1) { 46854 return allChildren[index]; 46855 } 46856 allParents.push(parent); 46857 allChildren.push(child); 46858 } 46859 46860 for (var i in parent) { 46861 var attrs; 46862 if (proto) { 46863 attrs = Object.getOwnPropertyDescriptor(proto, i); 46864 } 46865 46866 if (attrs && attrs.set == null) { 46867 continue; 46868 } 46869 child[i] = _clone(parent[i], depth - 1); 46870 } 46871 46872 return child; 46873 } 46874 46875 return _clone(parent, depth); 46876} 46877 46878/** 46879 * Simple flat clone using prototype, accepts only objects, usefull for property 46880 * override on FLAT configuration object (no nested props). 46881 * 46882 * USE WITH CAUTION! This may not behave as you wish if you do not know how this 46883 * works. 46884 */ 46885clone.clonePrototype = function clonePrototype(parent) { 46886 if (parent === null) 46887 return null; 46888 46889 var c = function () {}; 46890 c.prototype = parent; 46891 return new c(); 46892}; 46893 46894// private utility functions 46895 46896function __objToStr(o) { 46897 return Object.prototype.toString.call(o); 46898}; 46899clone.__objToStr = __objToStr; 46900 46901function __isDate(o) { 46902 return typeof o === 'object' && __objToStr(o) === '[object Date]'; 46903}; 46904clone.__isDate = __isDate; 46905 46906function __isArray(o) { 46907 return typeof o === 'object' && __objToStr(o) === '[object Array]'; 46908}; 46909clone.__isArray = __isArray; 46910 46911function __isRegExp(o) { 46912 return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; 46913}; 46914clone.__isRegExp = __isRegExp; 46915 46916function __getRegExpFlags(re) { 46917 var flags = ''; 46918 if (re.global) flags += 'g'; 46919 if (re.ignoreCase) flags += 'i'; 46920 if (re.multiline) flags += 'm'; 46921 return flags; 46922}; 46923clone.__getRegExpFlags = __getRegExpFlags; 46924 46925return clone; 46926})(); 46927 46928if (typeof module === 'object' && module.exports) { 46929 module.exports = clone; 46930} 46931 46932/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 46933
vendor: 5,300 bytes, lines 46934-47107
46934/***/ }), 46935/* 284 */ 46936/***/ (function(module, exports, __webpack_require__) { 46937 46938module.exports = __webpack_require__(117).BrotliDecompressBuffer; 46939 46940 46941/***/ }), 46942/* 285 */ 46943/***/ (function(module, exports) { 46944 46945/* Copyright 2013 Google Inc. All Rights Reserved. 46946 46947 Licensed under the Apache License, Version 2.0 (the "License"); 46948 you may not use this file except in compliance with the License. 46949 You may obtain a copy of the License at 46950 46951 http://www.apache.org/licenses/LICENSE-2.0 46952 46953 Unless required by applicable law or agreed to in writing, software 46954 distributed under the License is distributed on an "AS IS" BASIS, 46955 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 46956 See the License for the specific language governing permissions and 46957 limitations under the License. 46958 46959 Bit reading helpers 46960*/ 46961 46962var BROTLI_READ_SIZE = 4096; 46963var BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32); 46964var BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1); 46965 46966var kBitMask = new Uint32Array([ 46967 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 46968 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215 46969]); 46970 46971/* Input byte buffer, consist of a ringbuffer and a "slack" region where */ 46972/* bytes from the start of the ringbuffer are copied. */ 46973function BrotliBitReader(input) { 46974 this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE); 46975 this.input_ = input; /* input callback */ 46976 46977 this.reset(); 46978} 46979 46980BrotliBitReader.READ_SIZE = BROTLI_READ_SIZE; 46981BrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK; 46982 46983BrotliBitReader.prototype.reset = function() { 46984 this.buf_ptr_ = 0; /* next input will write here */ 46985 this.val_ = 0; /* pre-fetched bits */ 46986 this.pos_ = 0; /* byte position in stream */ 46987 this.bit_pos_ = 0; /* current bit-reading position in val_ */ 46988 this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */ 46989 this.eos_ = 0; /* input stream is finished */ 46990 46991 this.readMoreInput(); 46992 for (var i = 0; i < 4; i++) { 46993 this.val_ |= this.buf_[this.pos_] << (8 * i); 46994 ++this.pos_; 46995 } 46996 46997 return this.bit_end_pos_ > 0; 46998}; 46999 47000/* Fills up the input ringbuffer by calling the input callback. 47001 47002 Does nothing if there are at least 32 bytes present after current position. 47003 47004 Returns 0 if either: 47005 - the input callback returned an error, or 47006 - there is no more input and the position is past the end of the stream. 47007 47008 After encountering the end of the input stream, 32 additional zero bytes are 47009 copied to the ringbuffer, therefore it is safe to call this function after 47010 every 32 bytes of input is read. 47011*/ 47012BrotliBitReader.prototype.readMoreInput = function() { 47013 if (this.bit_end_pos_ > 256) { 47014 return; 47015 } else if (this.eos_) { 47016 if (this.bit_pos_ > this.bit_end_pos_) 47017 throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_); 47018 } else { 47019 var dst = this.buf_ptr_; 47020 var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE); 47021 if (bytes_read < 0) { 47022 throw new Error('Unexpected end of input'); 47023 } 47024 47025 if (bytes_read < BROTLI_READ_SIZE) { 47026 this.eos_ = 1; 47027 /* Store 32 bytes of zero after the stream end. */ 47028 for (var p = 0; p < 32; p++) 47029 this.buf_[dst + bytes_read + p] = 0; 47030 } 47031 47032 if (dst === 0) { 47033 /* Copy the head of the ringbuffer to the slack region. */ 47034 for (var p = 0; p < 32; p++) 47035 this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p]; 47036 47037 this.buf_ptr_ = BROTLI_READ_SIZE; 47038 } else { 47039 this.buf_ptr_ = 0; 47040 } 47041 47042 this.bit_end_pos_ += bytes_read << 3; 47043 } 47044}; 47045 47046/* Guarantees that there are at least 24 bits in the buffer. */ 47047BrotliBitReader.prototype.fillBitWindow = function() { 47048 while (this.bit_pos_ >= 8) { 47049 this.val_ >>>= 8; 47050 this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24; 47051 ++this.pos_; 47052 this.bit_pos_ = this.bit_pos_ - 8 >>> 0; 47053 this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0; 47054 } 47055}; 47056 47057/* Reads the specified number of bits from Read Buffer. */ 47058BrotliBitReader.prototype.readBits = function(n_bits) { 47059 if (32 - this.bit_pos_ < n_bits) { 47060 this.fillBitWindow(); 47061 } 47062 47063 var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]); 47064 this.bit_pos_ += n_bits; 47065 return val; 47066}; 47067 47068module.exports = BrotliBitReader; 47069 47070 47071/***/ }), 47072/* 286 */ 47073/***/ (function(module, exports, __webpack_require__) { 47074 47075var base64 = __webpack_require__(287); 47076var fs = __webpack_require__(8); 47077 47078/** 47079 * The normal dictionary-data.js is quite large, which makes it 47080 * unsuitable for browser usage. In order to make it smaller, 47081 * we read dictionary.bin, which is a compressed version of 47082 * the dictionary, and on initial load, Brotli decompresses 47083 * it's own dictionary. ð 47084 */ 47085exports.init = function() { 47086 var BrotliDecompressBuffer = __webpack_require__(117).BrotliDecompressBuffer; 47087 var compressed = base64.toByteArray(__webpack_require__(288)); 47088 return BrotliDecompressBuffer(compressed); 47089}; 47090 47091 47092/***/ }), 47093/* 287 */ 47094/***/ (function(module, exports, __webpack_require__) { 47095 47096"use strict"; 47097 47098 47099exports.byteLength = byteLength 47100exports.toByteArray = toByteArray 47101exports.fromByteArray = fromByteArray 47102 47103var lookup = [] 47104var revLookup = [] 47105var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array 47106 47107var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
vendor: 3,403 bytes, lines 47107-47219
47107+/' 47108for (var i = 0, len = code.length; i < len; ++i) { 47109 lookup[i] = code[i] 47110 revLookup[code.charCodeAt(i)] = i 47111} 47112 47113// Support decoding URL-safe base64 strings, as Node.js does. 47114// See: https://en.wikipedia.org/wiki/Base64#URL_applications 47115revLookup['-'.charCodeAt(0)] = 62 47116revLookup['_'.charCodeAt(0)] = 63 47117 47118function placeHoldersCount (b64) { 47119 var len = b64.length 47120 if (len % 4 > 0) { 47121 throw new Error('Invalid string. Length must be a multiple of 4') 47122 } 47123 47124 // the number of equal signs (place holders) 47125 // if there are two placeholders, than the two characters before it 47126 // represent one byte 47127 // if there is only one, then the three characters before it represent 2 bytes 47128 // this is just a cheap hack to not do indexOf twice 47129 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 47130} 47131 47132function byteLength (b64) { 47133 // base64 is 4/3 + up to two characters of the original data 47134 return (b64.length * 3 / 4) - placeHoldersCount(b64) 47135} 47136 47137function toByteArray (b64) { 47138 var i, l, tmp, placeHolders, arr 47139 var len = b64.length 47140 placeHolders = placeHoldersCount(b64) 47141 47142 arr = new Arr((len * 3 / 4) - placeHolders) 47143 47144 // if there are placeholders, only get up to the last complete 4 chars 47145 l = placeHolders > 0 ? len - 4 : len 47146 47147 var L = 0 47148 47149 for (i = 0; i < l; i += 4) { 47150 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] 47151 arr[L++] = (tmp >> 16) & 0xFF 47152 arr[L++] = (tmp >> 8) & 0xFF 47153 arr[L++] = tmp & 0xFF 47154 } 47155 47156 if (placeHolders === 2) { 47157 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) 47158 arr[L++] = tmp & 0xFF 47159 } else if (placeHolders === 1) { 47160 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) 47161 arr[L++] = (tmp >> 8) & 0xFF 47162 arr[L++] = tmp & 0xFF 47163 } 47164 47165 return arr 47166} 47167 47168function tripletToBase64 (num) { 47169 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] 47170} 47171 47172function encodeChunk (uint8, start, end) { 47173 var tmp 47174 var output = [] 47175 for (var i = start; i < end; i += 3) { 47176 tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) 47177 output.push(tripletToBase64(tmp)) 47178 } 47179 return output.join('') 47180} 47181 47182function fromByteArray (uint8) { 47183 var tmp 47184 var len = uint8.length 47185 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes 47186 var output = '' 47187 var parts = [] 47188 var maxChunkLength = 16383 // must be multiple of 3 47189 47190 // go through the array every three bytes, we'll deal with trailing stuff later 47191 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { 47192 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) 47193 } 47194 47195 // pad the end with zeros, but make sure to not forget the extra bytes 47196 if (extraBytes === 1) { 47197 tmp = uint8[len - 1] 47198 output += lookup[tmp >> 2] 47199 output += lookup[(tmp << 4) & 0x3F] 47200 output += '==' 47201 } else if (extraBytes === 2) { 47202 tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) 47203 output += lookup[tmp >> 10] 47204 output += lookup[(tmp >> 4) & 0x3F] 47205 output += lookup[(tmp << 2) & 0x3F] 47206 output += '=' 47207 } 47208 47209 parts.push(output) 47210 47211 return parts.join('') 47212} 47213 47214 47215/***/ }), 47216/* 288 */ 47217/***/ (function(module, exports) { 47218 47219module.exports=
vendor: 69,005 bytes, lines 47219-47220
47219"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"; 47220
47221 47222/***/ }), 47223/* 289 */ 47224/***/ (function(
vendor: 12,244 bytes, lines 47224-47478
47224module, exports) { 47225 47226/* Copyright 2013 Google Inc. All Rights Reserved. 47227 47228 Licensed under the Apache License, Version 2.0 (the "License"); 47229 you may not use this file except in compliance with the License. 47230 You may obtain a copy of the License at 47231 47232 http://www.apache.org/licenses/LICENSE-2.0 47233 47234 Unless required by applicable law or agreed to in writing, software 47235 distributed under the License is distributed on an "AS IS" BASIS, 47236 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 47237 See the License for the specific language governing permissions and 47238 limitations under the License. 47239 47240 Lookup table to map the previous two bytes to a context id. 47241 47242 There are four different context modeling modes defined here: 47243 CONTEXT_LSB6: context id is the least significant 6 bits of the last byte, 47244 CONTEXT_MSB6: context id is the most significant 6 bits of the last byte, 47245 CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, 47246 CONTEXT_SIGNED: second-order context model tuned for signed integers. 47247 47248 The context id for the UTF8 context model is calculated as follows. If p1 47249 and p2 are the previous two bytes, we calcualte the context as 47250 47251 context = kContextLookup[p1] | kContextLookup[p2 + 256]. 47252 47253 If the previous two bytes are ASCII characters (i.e. < 128), this will be 47254 equivalent to 47255 47256 context = 4 * context1(p1) + context2(p2), 47257 47258 where context1 is based on the previous byte in the following way: 47259 47260 0 : non-ASCII control 47261 1 : \t, \n, \r 47262 2 : space 47263 3 : other punctuation 47264 4 : " ' 47265 5 : % 47266 6 : ( < [ { 47267 7 : ) > ] } 47268 8 : , ; : 47269 9 : . 47270 10 : = 47271 11 : number 47272 12 : upper-case vowel 47273 13 : upper-case consonant 47274 14 : lower-case vowel 47275 15 : lower-case consonant 47276 47277 and context2 is based on the second last byte: 47278 47279 0 : control, space 47280 1 : punctuation 47281 2 : upper-case letter, number 47282 3 : lower-case letter 47283 47284 If the last byte is ASCII, and the second last byte is not (in a valid UTF8 47285 stream it will be a continuation byte, value between 128 and 191), the 47286 context is the same as if the second last byte was an ASCII control or space. 47287 47288 If the last byte is a UTF8 lead byte (value >= 192), then the next byte will 47289 be a continuation byte and the context id is 2 or 3 depending on the LSB of 47290 the last byte and to a lesser extent on the second last byte if it is ASCII. 47291 47292 If the last byte is a UTF8 continuation byte, the second last byte can be: 47293 - continuation byte: the next byte is probably ASCII or lead byte (assuming 47294 4-byte UTF8 characters are rare) and the context id is 0 or 1. 47295 - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 47296 - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 47297 47298 The possible value combinations of the previous two bytes, the range of 47299 context ids and the type of the next byte is summarized in the table below: 47300 47301 |--------\-----------------------------------------------------------------| 47302 | \ Last byte | 47303 | Second \---------------------------------------------------------------| 47304 | last byte \ ASCII | cont. byte | lead byte | 47305 | \ (0-127) | (128-191) | (192-) | 47306 |=============|===================|=====================|==================| 47307 | ASCII | next: ASCII/lead | not valid | next: cont. | 47308 | (0-127) | context: 4 - 63 | | context: 2 - 3 | 47309 |-------------|-------------------|---------------------|------------------| 47310 | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | 47311 | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | 47312 |-------------|-------------------|---------------------|------------------| 47313 | lead byte | not valid | next: ASCII/lead | not valid | 47314 | (192-207) | | context: 0 - 1 | | 47315 |-------------|-------------------|---------------------|------------------| 47316 | lead byte | not valid | next: cont. | not valid | 47317 | (208-) | | context: 2 - 3 | | 47318 |-------------|-------------------|---------------------|------------------| 47319 47320 The context id for the signed context mode is calculated as: 47321 47322 context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2]. 47323 47324 For any context modeling modes, the context ids can be calculated by |-ing 47325 together two lookups from one table using context model dependent offsets: 47326 47327 context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2]. 47328 47329 where offset1 and offset2 are dependent on the context mode. 47330*/ 47331 47332var CONTEXT_LSB6 = 0; 47333var CONTEXT_MSB6 = 1; 47334var CONTEXT_UTF8 = 2; 47335var CONTEXT_SIGNED = 3; 47336 47337/* Common context lookup table for all context modes. */ 47338exports.lookup = new Uint8Array([ 47339 /* CONTEXT_UTF8, last byte. */ 47340 /* ASCII range. */ 47341 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 47342 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47343 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 47344 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, 47345 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, 47346 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 47347 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 47348 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, 47349 /* UTF8 continuation byte range. */ 47350 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 47351 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 47352 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 47353 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 47354 /* UTF8 lead byte range. */ 47355 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 47356 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 47357 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 47358 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 47359 /* CONTEXT_UTF8 second last byte. */ 47360 /* ASCII range. */ 47361 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47362 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47363 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 47365 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47366 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 47367 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 47368 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 47369 /* UTF8 continuation byte range. */ 47370 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47372 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47373 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47374 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47375 /* UTF8 lead byte range. */ 47376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47377 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47378 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47379 /* CONTEXT_SIGNED, second last byte. */ 47380 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47381 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47382 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47383 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47384 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 47385 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 47386 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 47387 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 47388 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47389 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47390 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47391 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 47392 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 47393 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 47394 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 47395 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 47396 /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ 47397 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 47398 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47399 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47400 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47401 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 47402 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 47403 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 47404 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 47405 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47406 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47407 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47408 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 47409 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 47410 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 47411 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 47412 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 47413 /* CONTEXT_LSB6, last byte. */ 47414 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 47415 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 47416 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47417 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 47418 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 47419 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 47420 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47421 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 47422 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 47423 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 47424 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47425 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 47426 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 47427 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 47428 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 47429 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 47430 /* CONTEXT_MSB6, last byte. */ 47431 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 47432 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 47433 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 47434 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 47435 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 47436 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 47437 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 47438 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 47439 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 47440 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 47441 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 47442 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 47443 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 47444 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 47445 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 47446 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 47447 /* CONTEXT_{M,L}SB6, second last byte, */ 47448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47449 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47454 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47456 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47457 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47458 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47459 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47460 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47462 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47464]); 47465 47466exports.lookupOffsets = new Uint16Array([ 47467 /* CONTEXT_LSB6 */ 47468 1024, 1536, 47469 /* CONTEXT_MSB6 */ 47470 1280, 1536, 47471 /* CONTEXT_UTF8 */ 47472 0, 256, 47473 /* CONTEXT_SIGNED */ 47474 768, 512, 47475]); 47476 47477 47478/***/ }
47478), 47479/* 290 */ 47480/***/ (function(module, exports) { 47481 47482/* Copyright 2013 Google Inc. All Rights Reserved. 47483 47484 Licensed under the Apache License, Version 2.0 (the "License"); 47485 you may not use this file except in compliance with the License. 47486 You may obtain a copy of the License at 47487 47488 http://www.apache.org/licenses/LICENSE-2.0 47489 47490 Unless required by applicable law or agreed to in writing, software 47491 distributed under the License is distributed on an "AS IS" BASIS, 47492 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 47493 See the License for the specific language governing permissions and 47494 limitations under the License. 47495 47496 Lookup tables to map prefix codes to value ranges. This is used during 47497 decoding of the block lengths, literal insertion lengths and copy lengths. 47498*/ 47499 47500/* Represents the range of values belonging to a prefix code: */ 47501/* [offset, offset + 2^nbits) */ 47502function PrefixCodeRange(offset, nbits) { 47503 this.offset = offset; 47504 this.nbits = nbits; 47505} 47506 47507exports.kBlockLengthPrefixCode = [ 47508 new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2), 47509 new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3), 47510 new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4), 47511 new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5), 47512 new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8), 47513 new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12), 47514 new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24) 47515]; 47516 47517exports.kInsertLengthPrefixCode = [ 47518 new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), 47519 new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1), 47520 new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3), 47521 new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5), 47522 new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9), 47523 new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24), 47524]; 47525 47526exports.kCopyLengthPrefixCode = [ 47527 new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), 47528 new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0), 47529 new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2), 47530 new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4), 47531 new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7), 47532 new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2
vendor: 16,208 bytes, lines 47532-47952
47532118, 24), 47533]; 47534 47535exports.kInsertRangeLut = [ 47536 0, 0, 8, 8, 0, 16, 8, 16, 16, 47537]; 47538 47539exports.kCopyRangeLut = [ 47540 0, 8, 0, 8, 16, 0, 16, 8, 16, 47541]; 47542 47543 47544/***/ }), 47545/* 291 */ 47546/***/ (function(module, exports, __webpack_require__) { 47547 47548/* Copyright 2013 Google Inc. All Rights Reserved. 47549 47550 Licensed under the Apache License, Version 2.0 (the "License"); 47551 you may not use this file except in compliance with the License. 47552 You may obtain a copy of the License at 47553 47554 http://www.apache.org/licenses/LICENSE-2.0 47555 47556 Unless required by applicable law or agreed to in writing, software 47557 distributed under the License is distributed on an "AS IS" BASIS, 47558 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 47559 See the License for the specific language governing permissions and 47560 limitations under the License. 47561 47562 Transformations on dictionary words. 47563*/ 47564 47565var BrotliDictionary = __webpack_require__(119); 47566 47567var kIdentity = 0; 47568var kOmitLast1 = 1; 47569var kOmitLast2 = 2; 47570var kOmitLast3 = 3; 47571var kOmitLast4 = 4; 47572var kOmitLast5 = 5; 47573var kOmitLast6 = 6; 47574var kOmitLast7 = 7; 47575var kOmitLast8 = 8; 47576var kOmitLast9 = 9; 47577var kUppercaseFirst = 10; 47578var kUppercaseAll = 11; 47579var kOmitFirst1 = 12; 47580var kOmitFirst2 = 13; 47581var kOmitFirst3 = 14; 47582var kOmitFirst4 = 15; 47583var kOmitFirst5 = 16; 47584var kOmitFirst6 = 17; 47585var kOmitFirst7 = 18; 47586var kOmitFirst8 = 19; 47587var kOmitFirst9 = 20; 47588 47589function Transform(prefix, transform, suffix) { 47590 this.prefix = new Uint8Array(prefix.length); 47591 this.transform = transform; 47592 this.suffix = new Uint8Array(suffix.length); 47593 47594 for (var i = 0; i < prefix.length; i++) 47595 this.prefix[i] = prefix.charCodeAt(i); 47596 47597 for (var i = 0; i < suffix.length; i++) 47598 this.suffix[i] = suffix.charCodeAt(i); 47599} 47600 47601var kTransforms = [ 47602 new Transform( "", kIdentity, "" ), 47603 new Transform( "", kIdentity, " " ), 47604 new Transform( " ", kIdentity, " " ), 47605 new Transform( "", kOmitFirst1, "" ), 47606 new Transform( "", kUppercaseFirst, " " ), 47607 new Transform( "", kIdentity, " the " ), 47608 new Transform( " ", kIdentity, "" ), 47609 new Transform( "s ", kIdentity, " " ), 47610 new Transform( "", kIdentity, " of " ), 47611 new Transform( "", kUppercaseFirst, "" ), 47612 new Transform( "", kIdentity, " and " ), 47613 new Transform( "", kOmitFirst2, "" ), 47614 new Transform( "", kOmitLast1, "" ), 47615 new Transform( ", ", kIdentity, " " ), 47616 new Transform( "", kIdentity, ", " ), 47617 new Transform( " ", kUppercaseFirst, " " ), 47618 new Transform( "", kIdentity, " in " ), 47619 new Transform( "", kIdentity, " to " ), 47620 new Transform( "e ", kIdentity, " " ), 47621 new Transform( "", kIdentity, "\"" ), 47622 new Transform( "", kIdentity, "." ), 47623 new Transform( "", kIdentity, "\">" ), 47624 new Transform( "", kIdentity, "\n" ), 47625 new Transform( "", kOmitLast3, "" ), 47626 new Transform( "", kIdentity, "]" ), 47627 new Transform( "", kIdentity, " for " ), 47628 new Transform( "", kOmitFirst3, "" ), 47629 new Transform( "", kOmitLast2, "" ), 47630 new Transform( "", kIdentity, " a " ), 47631 new Transform( "", kIdentity, " that " ), 47632 new Transform( " ", kUppercaseFirst, "" ), 47633 new Transform( "", kIdentity, ". " ), 47634 new Transform( ".", kIdentity, "" ), 47635 new Transform( " ", kIdentity, ", " ), 47636 new Transform( "", kOmitFirst4, "" ), 47637 new Transform( "", kIdentity, " with " ), 47638 new Transform( "", kIdentity, "'" ), 47639 new Transform( "", kIdentity, " from " ), 47640 new Transform( "", kIdentity, " by " ), 47641 new Transform( "", kOmitFirst5, "" ), 47642 new Transform( "", kOmitFirst6, "" ), 47643 new Transform( " the ", kIdentity, "" ), 47644 new Transform( "", kOmitLast4, "" ), 47645 new Transform( "", kIdentity, ". The " ), 47646 new Transform( "", kUppercaseAll, "" ), 47647 new Transform( "", kIdentity, " on " ), 47648 new Transform( "", kIdentity, " as " ), 47649 new Transform( "", kIdentity, " is " ), 47650 new Transform( "", kOmitLast7, "" ), 47651 new Transform( "", kOmitLast1, "ing " ), 47652 new Transform( "", kIdentity, "\n\t" ), 47653 new Transform( "", kIdentity, ":" ), 47654 new Transform( " ", kIdentity, ". " ), 47655 new Transform( "", kIdentity, "ed " ), 47656 new Transform( "", kOmitFirst9, "" ), 47657 new Transform( "", kOmitFirst7, "" ), 47658 new Transform( "", kOmitLast6, "" ), 47659 new Transform( "", kIdentity, "(" ), 47660 new Transform( "", kUppercaseFirst, ", " ), 47661 new Transform( "", kOmitLast8, "" ), 47662 new Transform( "", kIdentity, " at " ), 47663 new Transform( "", kIdentity, "ly " ), 47664 new Transform( " the ", kIdentity, " of " ), 47665 new Transform( "", kOmitLast5, "" ), 47666 new Transform( "", kOmitLast9, "" ), 47667 new Transform( " ", kUppercaseFirst, ", " ), 47668 new Transform( "", kUppercaseFirst, "\"" ), 47669 new Transform( ".", kIdentity, "(" ), 47670 new Transform( "", kUppercaseAll, " " ), 47671 new Transform( "", kUppercaseFirst, "\">" ), 47672 new Transform( "", kIdentity, "=\"" ), 47673 new Transform( " ", kIdentity, "." ), 47674 new Transform( ".com/", kIdentity, "" ), 47675 new Transform( " the ", kIdentity, " of the " ), 47676 new Transform( "", kUppercaseFirst, "'" ), 47677 new Transform( "", kIdentity, ". This " ), 47678 new Transform( "", kIdentity, "," ), 47679 new Transform( ".", kIdentity, " " ), 47680 new Transform( "", kUppercaseFirst, "(" ), 47681 new Transform( "", kUppercaseFirst, "." ), 47682 new Transform( "", kIdentity, " not " ), 47683 new Transform( " ", kIdentity, "=\"" ), 47684 new Transform( "", kIdentity, "er " ), 47685 new Transform( " ", kUppercaseAll, " " ), 47686 new Transform( "", kIdentity, "al " ), 47687 new Transform( " ", kUppercaseAll, "" ), 47688 new Transform( "", kIdentity, "='" ), 47689 new Transform( "", kUppercaseAll, "\"" ), 47690 new Transform( "", kUppercaseFirst, ". " ), 47691 new Transform( " ", kIdentity, "(" ), 47692 new Transform( "", kIdentity, "ful " ), 47693 new Transform( " ", kUppercaseFirst, ". " ), 47694 new Transform( "", kIdentity, "ive " ), 47695 new Transform( "", kIdentity, "less " ), 47696 new Transform( "", kUppercaseAll, "'" ), 47697 new Transform( "", kIdentity, "est " ), 47698 new Transform( " ", kUppercaseFirst, "." ), 47699 new Transform( "", kUppercaseAll, "\">" ), 47700 new Transform( " ", kIdentity, "='" ), 47701 new Transform( "", kUppercaseFirst, "," ), 47702 new Transform( "", kIdentity, "ize " ), 47703 new Transform( "", kUppercaseAll, "." ), 47704 new Transform( "\xc2\xa0", kIdentity, "" ), 47705 new Transform( " ", kIdentity, "," ), 47706 new Transform( "", kUppercaseFirst, "=\"" ), 47707 new Transform( "", kUppercaseAll, "=\"" ), 47708 new Transform( "", kIdentity, "ous " ), 47709 new Transform( "", kUppercaseAll, ", " ), 47710 new Transform( "", kUppercaseFirst, "='" ), 47711 new Transform( " ", kUppercaseFirst, "," ), 47712 new Transform( " ", kUppercaseAll, "=\"" ), 47713 new Transform( " ", kUppercaseAll, ", " ), 47714 new Transform( "", kUppercaseAll, "," ), 47715 new Transform( "", kUppercaseAll, "(" ), 47716 new Transform( "", kUppercaseAll, ". " ), 47717 new Transform( " ", kUppercaseAll, "." ), 47718 new Transform( "", kUppercaseAll, "='" ), 47719 new Transform( " ", kUppercaseAll, ". " ), 47720 new Transform( " ", kUppercaseFirst, "=\"" ), 47721 new Transform( " ", kUppercaseAll, "='" ), 47722 new Transform( " ", kUppercaseFirst, "='" ) 47723]; 47724 47725exports.kTransforms = kTransforms; 47726exports.kNumTransforms = kTransforms.length; 47727 47728function ToUpperCase(p, i) { 47729 if (p[i] < 0xc0) { 47730 if (p[i] >= 97 && p[i] <= 122) { 47731 p[i] ^= 32; 47732 } 47733 return 1; 47734 } 47735 47736 /* An overly simplified uppercasing model for utf-8. */ 47737 if (p[i] < 0xe0) { 47738 p[i + 1] ^= 32; 47739 return 2; 47740 } 47741 47742 /* An arbitrary transform for three byte characters. */ 47743 p[i + 2] ^= 5; 47744 return 3; 47745} 47746 47747exports.transformDictionaryWord = function(dst, idx, word, len, transform) { 47748 var prefix = kTransforms[transform].prefix; 47749 var suffix = kTransforms[transform].suffix; 47750 var t = kTransforms[transform].transform; 47751 var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1); 47752 var i = 0; 47753 var start_idx = idx; 47754 var uppercase; 47755 47756 if (skip > len) { 47757 skip = len; 47758 } 47759 47760 var prefix_pos = 0; 47761 while (prefix_pos < prefix.length) { 47762 dst[idx++] = prefix[prefix_pos++]; 47763 } 47764 47765 word += skip; 47766 len -= skip; 47767 47768 if (t <= kOmitLast9) { 47769 len -= t; 47770 } 47771 47772 for (i = 0; i < len; i++) { 47773 dst[idx++] = BrotliDictionary.dictionary[word + i]; 47774 } 47775 47776 uppercase = idx - len; 47777 47778 if (t === kUppercaseFirst) { 47779 ToUpperCase(dst, uppercase); 47780 } else if (t === kUppercaseAll) { 47781 while (len > 0) { 47782 var step = ToUpperCase(dst, uppercase); 47783 uppercase += step; 47784 len -= step; 47785 } 47786 } 47787 47788 var suffix_pos = 0; 47789 while (suffix_pos < suffix.length) { 47790 dst[idx++] = suffix[suffix_pos++]; 47791 } 47792 47793 return idx - start_idx; 47794} 47795 47796 47797/***/ }), 47798/* 292 */ 47799/***/ (function(module, exports, __webpack_require__) { 47800 47801/* WEBPACK VAR INJECTION */(function(__dirname) {// Generated by CoffeeScript 1.12.6 47802(function() { 47803 var AFMFont, PDFFont, StandardFont, fs, 47804 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 47805 hasProp = {}.hasOwnProperty; 47806 47807 AFMFont = __webpack_require__(293); 47808 47809 PDFFont = __webpack_require__(50); 47810 47811 fs = __webpack_require__(8); 47812 47813 StandardFont = (function(superClass) { 47814 var STANDARD_FONTS; 47815 47816 extend(StandardFont, superClass); 47817 47818 function StandardFont(document, name1, id) { 47819 var ref; 47820 this.document = document; 47821 this.name = name1; 47822 this.id = id; 47823 this.font = new AFMFont(STANDARD_FONTS[this.name]()); 47824 ref = this.font, this.ascender = ref.ascender, this.descender = ref.descender, this.bbox = ref.bbox, this.lineGap = ref.lineGap; 47825 } 47826 47827 StandardFont.prototype.embed = function() { 47828 this.dictionary.data = { 47829 Type: 'Font', 47830 BaseFont: this.name, 47831 Subtype: 'Type1', 47832 Encoding: 'WinAnsiEncoding' 47833 }; 47834 return this.dictionary.end(); 47835 }; 47836 47837 StandardFont.prototype.encode = function(text) { 47838 var advances, encoded, glyph, glyphs, i, j, len, positions; 47839 encoded = this.font.encodeText(text); 47840 glyphs = this.font.glyphsForString('' + text); 47841 advances = this.font.advancesForGlyphs(glyphs); 47842 positions = []; 47843 for (i = j = 0, len = glyphs.length; j < len; i = ++j) { 47844 glyph = glyphs[i]; 47845 positions.push({ 47846 xAdvance: advances[i], 47847 yAdvance: 0, 47848 xOffset: 0, 47849 yOffset: 0, 47850 advanceWidth: this.font.widthOfGlyph(glyph) 47851 }); 47852 } 47853 return [encoded, positions]; 47854 }; 47855 47856 StandardFont.prototype.widthOfString = function(string, size) { 47857 var advance, advances, glyphs, j, len, scale, width; 47858 glyphs = this.font.glyphsForString('' + string); 47859 advances = this.font.advancesForGlyphs(glyphs); 47860 width = 0; 47861 for (j = 0, len = advances.length; j < len; j++) { 47862 advance = advances[j]; 47863 width += advance; 47864 } 47865 scale = size / 1000; 47866 return width * scale; 47867 }; 47868 47869 StandardFont.isStandardFont = function(name) { 47870 return name in STANDARD_FONTS; 47871 }; 47872 47873 STANDARD_FONTS = { 47874 "Courier": function() { 47875 return fs.readFileSync(__dirname + "/../font/data/Courier.afm", 'utf8'); 47876 }, 47877 "Courier-Bold": function() { 47878 return fs.readFileSync(__dirname + "/../font/data/Courier-Bold.afm", 'utf8'); 47879 }, 47880 "Courier-Oblique": function() { 47881 return fs.readFileSync(__dirname + "/../font/data/Courier-Oblique.afm", 'utf8'); 47882 }, 47883 "Courier-BoldOblique": function() { 47884 return fs.readFileSync(__dirname + "/../font/data/Courier-BoldOblique.afm", 'utf8'); 47885 }, 47886 "Helvetica": function() { 47887 return fs.readFileSync(__dirname + "/../font/data/Helvetica.afm", 'utf8'); 47888 }, 47889 "Helvetica-Bold": function() { 47890 return fs.readFileSync(__dirname + "/../font/data/Helvetica-Bold.afm", 'utf8'); 47891 }, 47892 "Helvetica-Oblique": function() { 47893 return fs.readFileSync(__dirname + "/../font/data/Helvetica-Oblique.afm", 'utf8'); 47894 }, 47895 "Helvetica-BoldOblique": function() { 47896 return fs.readFileSync(__dirname + "/../font/data/Helvetica-BoldOblique.afm", 'utf8'); 47897 }, 47898 "Times-Roman": function() { 47899 return fs.readFileSync(__dirname + "/../font/data/Times-Roman.afm", 'utf8'); 47900 }, 47901 "Times-Bold": function() { 47902 return fs.readFileSync(__dirname + "/../font/data/Times-Bold.afm", 'utf8'); 47903 }, 47904 "Times-Italic": function() { 47905 return fs.readFileSync(__dirname + "/../font/data/Times-Italic.afm", 'utf8'); 47906 }, 47907 "Times-BoldItalic": function() { 47908 return fs.readFileSync(__dirname + "/../font/data/Times-BoldItalic.afm", 'utf8'); 47909 }, 47910 "Symbol": function() { 47911 return fs.readFileSync(__dirname + "/../font/data/Symbol.afm", 'utf8'); 47912 }, 47913 "ZapfDingbats": function() { 47914 return fs.readFileSync(__dirname + "/../font/data/ZapfDingbats.afm", 'utf8'); 47915 } 47916 }; 47917 47918 return StandardFont; 47919 47920 })(PDFFont); 47921 47922 module.exports = StandardFont; 47923 47924}).call(this); 47925 47926/* WEBPACK VAR INJECTION */}.call(exports, "/")) 47927 47928/***/ }), 47929/* 293 */ 47930/***/ (function(module, exports, __webpack_require__) { 47931 47932// Generated by CoffeeScript 1.12.6 47933(function() { 47934 var AFMFont, fs; 47935 47936 fs = __webpack_require__(8); 47937 47938 AFMFont = (function() { 47939 var WIN_ANSI_MAP, characters; 47940 47941 AFMFont.open = function(filename) { 47942 return new AFMFont(fs.readFileSync(filename, 'utf8')); 47943 }; 47944 47945 function AFMFont(contents) { 47946 var e, i; 47947 this.contents = contents; 47948 this.attributes = {}; 47949 this.glyphWidths = {}; 47950 this.boundingBoxes = {}; 47951 this.kernPairs = {}; 47952 this.parse();
47953 this.charWidths = (function() { 47954 var j, results; 47955 results = []; 47956 for (i = j = 0; j <= 255; i = ++j) { 47957 results.push(this.glyphWidths[characters[i]]); 47958 } 47959 return results; 47960 }).call(this); 47961 this.bbox = (function() { 47962 var j, len, ref, results; 47963 ref = this.attributes['FontBBox'].split(/\s+/); 47964 results = []; 47965 for (j = 0, len = ref.length; j < len; j++) { 47966 e = ref[j]; 47967 results.push(+e); 47968 } 47969 return results; 47970 }).call(this); 47971 this.ascender = +(this.attributes['Ascender'] || 0); 47972 this.descender = +(this.attributes['Descender'] || 0); 47973 this.lineGap = (this.bbox[3] - this.bbox[1]) - (this.ascender - this.descender); 47974 } 47975 47976 AFMFont.prototype.parse = function() { 47977 var a, j, key, len, line, match, name, ref, section, value; 47978 section = ''; 47979 ref = this.contents.split('\n'); 47980 for (j = 0, len = ref.length; j < len; j++) { 47981 line = ref[j]; 47982 if (match = line.match(/^Start(\w+)/)) { 47983 section = match[1]; 47984 continue; 47985 } else if (match = line.match(/^End(\w+)/)) { 47986 section = ''; 47987 continue; 47988 } 47989 switch (section) { 47990 case 'FontMetrics': 47991 match = line.match(/(^\w+)\s+(.*)/); 47992 key = match[1]; 47993 value = match[2]; 47994 if (a = this.attributes[key]) { 47995 if (!Array.isArray(a)) { 47996 a = this.attributes[key] = [a]; 47997 } 47998 a.push(value); 47999 } else { 48000 this.attributes[key] = value; 48001 } 48002 break; 48003 case 'CharMetrics': 48004 if (!/^CH?\s/.test(line)) { 48005 continue; 48006 } 48007 name = line.match(/\bN\s+(\.?\w+)\s*;/)[1]; 48008 this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1]; 48009 break; 48010 case 'KernPairs': 48011 match = line.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/); 48012 if (match) { 48013 this.kernPairs[match[1] + '\0' + match[2]] = parseInt(match[3]); 48014 } 48015 } 48016 } 48017 }; 48018 48019 WIN_ANSI_MAP = { 48020 402: 131, 48021 8211: 150, 48022 8212: 151, 48023 8216: 145, 48024 8217: 146, 48025 8218: 130, 48026 8220: 147, 48027 8221: 148, 48028 8222: 132, 48029 8224: 134, 48030 8225: 135, 48031 8226: 149, 48032 8230: 133, 48033 8364: 128, 48034 8240: 137, 48035 8249: 139, 48036 8250: 155, 48037 710: 136, 48038 8482: 153, 48039 338: 140, 48040 339: 156, 48041 732: 152, 48042 352: 138, 48043 353: 154, 48044 376: 159, 48045 381: 142, 48046 382: 158 48047 }; 48048 48049 AFMFont.prototype.encodeText = function(text) { 48050 var char, i, j, ref, res; 48051 res = []; 48052 for (i = j = 0, ref = text.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 48053 char = text.charCodeAt(i); 48054 char = WIN_ANSI_MAP[char] || char; 48055 res.push(char.toString(16)); 48056 } 48057 return res; 48058 }; 48059 48060 AFMFont.prototype.glyphsForString = function(string) { 48061 var charCode, glyphs, i, j, ref; 48062 glyphs = []; 48063 for (i = j = 0, ref = string.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 48064 charCode = string.charCodeAt(i); 48065 glyphs.push(this.characterToGlyph(charCode)); 48066 } 48067 return glyphs; 48068 }; 48069 48070 AFMFont.prototype.characterToGlyph = function(character) { 48071 return characters[WIN_ANSI_MAP[character] || character] || '.notdef'; 48072 }; 48073 48074 AFMFont.prototype.widthOfGlyph = function(glyph) { 48075 return this.glyphWidths[glyph] || 0; 48076 }; 48077 48078 AFMFont.prototype.getKernPair = function(left, right) { 48079 return this.kernPairs[left + '\0' + right] || 0; 48080 }; 48081 48082 AFMFont.prototype.advancesForGlyphs = function(glyphs) { 48083 var advances, index, j, left, len, right; 48084 advances = []; 48085 for (index = j = 0, len = glyphs.length; j < len; index = ++j) { 48086 left = glyphs[index]; 48087 right = glyphs[index + 1]; 48088 advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right)); 48089 } 48090 return advances; 48091 }; 48092 48093 characters = '.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n\nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n\nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n\ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n\nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n\nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodce
48093ntered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n\nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n\nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis'.split(/\s+/); 48094 48095 return AFMFont; 48096 48097 })(); 48098 48099 module.exports = AFMFont; 48100 48101}).call(this); 48102 48103 48104/***/ }), 48105/* 294 */ 48106/***/ (function(module, exports, __webpack_require__) { 48107 48108// Generated by CoffeeScript 1.12.6 48109(function() { 48110 var EmbeddedFont, PDFFont, PDFObject, 48111 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 48112 hasProp = {}.hasOwnProperty, 48113 slice = [].slice; 48114 48115 PDFFont = __webpack_require__(50); 48116 48117 PDFObject = __webpack_require__(26); 48118 48119 EmbeddedFont = (function(superClass) { 48120 var toHex; 48121 48122 extend(EmbeddedFont, superClass); 48123 48124 function EmbeddedFont(document, font, id) { 48125 this.document = document; 48126 this.font = font; 48127 this.id = id; 48128 this.subset = this.font.createSubset(); 48129 this.unicode = [[0]]; 48130 this.widths = [this.font.getGlyph(0).advanceWidth]; 48131 this.name = this.font.postscriptName; 48132 this.scale = 1000 / this.font.unitsPerEm; 48133 this.ascender = this.font.ascent * this.scale; 48134 this.descender = this.font.descent * this.scale; 48135 this.lineGap = this.font.lineGap * this.scale; 48136 this.bbox = this.font.bbox; 48137 this.layoutCache = Object.create(null); 48138 } 48139 48140 EmbeddedFont.prototype.layoutRun = function(text, features) { 48141 var i, j, key, len, position, ref, run; 48142 run = this.font.layout(text, features); 48143 ref = run.positions; 48144 for (i = j = 0, len = ref.length; j < len; i = ++j) { 48145 position = ref[i]; 48146 for (key in position) { 48147 position[key] *= this.scale; 48148 } 48149 position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; 48150 } 48151 return run; 48152 }; 48153 48154 EmbeddedFont.prototype.layoutCached = function(text) { 48155 var cached, run; 48156 if (cached = this.layoutCache[text]) { 48157 return cached; 48158 } 48159 run = this.layoutRun(text); 48160 this.layoutCache[text] = run; 48161 return run; 48162 }; 48163 48164 EmbeddedFont.prototype.layout = function(text, features, onlyWidth) { 48165 var advanceWidth, glyphs, index, last, positions, ref, run; 48166 if (onlyWidth == null) { 48167 onlyWidth = false; 48168 } 48169 if (features) { 48170 return this.layoutRun(text, features); 48171 } 48172 glyphs = onlyWidth ? null : []; 48173 positions = onlyWidth ? null : []; 48174 advanceWidth = 0; 48175 last = 0; 48176 index = 0; 48177 while (index <= text.length) { 48178 if ((index === text.length && last < index) || ((ref = text.charAt(index)) === ' ' || ref === '\t')) { 48179 run = this.layoutCached(text.slice(last, ++index)); 48180 if (!onlyWidth) { 48181 glyphs.push.apply(glyphs, run.glyphs); 48182 positions.push.apply(positions, run.positions); 48183 } 48184 advanceWidth += run.advanceWidth; 48185 last = index; 48186 } else { 48187 index++; 48188 } 48189 } 48190 return { 48191 glyphs: glyphs, 48192 positions: positions, 48193 advanceWidth: advanceWidth 48194 }; 48195 }; 48196 48197 EmbeddedFont.prototype.encode = function(text, features) { 48198 var base, base1, gid, glyph, glyphs, i, j, len, positions, ref, res; 48199 ref = this.layout(text, features), glyphs = ref.glyphs, positions = ref.positions; 48200 res = []; 48201 for (i = j = 0, len = glyphs.length; j < len; i = ++j) { 48202 glyph = glyphs[i]; 48203 gid = this.subset.includeGlyph(glyph.id); 48204 res.push(('0000' + gid.toString(16)).slice(-4)); 48205 if ((base = this.widths)[gid] == null) { 48206 base[gid] = glyph.advanceWidth * this.scale; 48207 } 48208 if ((base1 = this.unicode)[gid] == null) { 48209 base1[gid] = glyph.codePoints; 48210 } 48211 } 48212 return [res, positions]; 48213 }; 48214 48215 EmbeddedFont.prototype.widthOfString = function(string, size, features) { 48216 var scale, width; 48217 width = this.layout(string, features, true).advanceWidth; 48218 scale = size / 1000; 48219 return width * scale; 48220 }; 48221 48222 EmbeddedFont.prototype.embed = function() { 48223 var bbox, descendantFont, descriptor, familyClass, flags, fontFile, i, isCFF, name, ref, tag; 48224 isCFF = this.subset.cff != null; 48225 fontFile = this.document.ref(); 48226 if (isCFF) { 48227 fontFile.data.Subtype = 'CIDFontType0C'; 48228 } 48229 this.subset.encodeStream().pipe(fontFile); 48230 familyClass = (((ref = this.font['OS/2']) != null ? ref.sFamilyClass : void 0) || 0) >> 8; 48231 flags = 0; 48232 if (this.font.post.isFixedPitch) { 48233 flags |= 1 << 0; 48234 } 48235 if ((1 <= familyClass && familyClass <= 7)) { 48236 flags |= 1 << 1; 48237 } 48238 flags |= 1 << 2; 48239 if (familyClass === 10) { 48240 flags |= 1 << 3; 48241 } 48242 if (this.font.head.macStyle.italic) { 48243 flags |= 1 << 6; 48244 } 48245 tag = ((function() { 48246 var j, results; 48247 results = []; 48248 for (i = j = 0; j < 6; i = ++j) { 48249 results.push(String.fromCharCode(Math.random() * 26 + 65)); 48250 } 48251 return results; 48252 })()).join(''); 48253 name = tag + '+' + this.font.postscriptName; 48254 bbox = this.font.bbox; 48255 descriptor = this.document.ref({ 48256 Type: 'FontDescriptor', 48257 FontName: name, 48258 Flags: flags, 48259 FontBBox: [bbox.minX * this.scale, bbox.minY * this.scale, bbox.maxX * this.scale, bbox.maxY * this.scale], 48260 ItalicAngle: this.font.italicAngle, 48261 Ascent: this.ascender, 48262 Descent: this.descender, 48263 CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,
48264 XHeight: (this.font.xHeight || 0) * this.scale, 48265 StemV: 0 48266 }); 48267 if (isCFF) { 48268 descriptor.data.FontFile3 = fontFile; 48269 } else { 48270 descriptor.data.FontFile2 = fontFile; 48271 } 48272 descriptor.end(); 48273 descendantFont = this.document.ref({ 48274 Type: 'Font', 48275 Subtype: isCFF ? 'CIDFontType0' : 'CIDFontType2', 48276 BaseFont: name, 48277 CIDSystemInfo: { 48278 Registry: new String('Adobe'), 48279 Ordering: new String('Identity'), 48280 Supplement: 0 48281 }, 48282 FontDescriptor: descriptor, 48283 W: [0, this.widths] 48284 }); 48285 descendantFont.end(); 48286 this.dictionary.data = { 48287 Type: 'Font', 48288 Subtype: 'Type0', 48289 BaseFont: name, 48290 Encoding: 'Identity-H', 48291 DescendantFonts: [descendantFont], 48292 ToUnicode: this.toUnicodeCmap() 48293 }; 48294 return this.dictionary.end(); 48295 }; 48296 48297 toHex = function() { 48298 var code, codePoints, codes; 48299 codePoints = 1 <= arguments.length ? slice.call(arguments, 0) : []; 48300 codes = (function() { 48301 var j, len, results; 48302 results = []; 48303 for (j = 0, len = codePoints.length; j < len; j++) { 48304 code = codePoints[j]; 48305 results.push(('0000' + code.toString(16)).slice(-4)); 48306 } 48307 return results; 48308 })(); 48309 return codes.join(''); 48310 }; 48311 48312 EmbeddedFont.prototype.toUnicodeCmap = function() { 48313 var cmap, codePoints, encoded, entries, j, k, len, len1, ref, value; 48314 cmap = this.document.ref(); 48315 entries = []; 48316 ref = this.unicode; 48317 for (j = 0, len = ref.length; j < len; j++) { 48318 codePoints = ref[j]; 48319 encoded = []; 48320 for (k = 0, len1 = codePoints.length; k < len1; k++) { 48321 value = codePoints[k]; 48322 if (value > 0xffff) { 48323 value -= 0x10000; 48324 encoded.push(toHex(value >>> 10 & 0x3ff | 0xd800)); 48325 value = 0xdc00 | value & 0x3ff; 48326 } 48327 encoded.push(toHex(value)); 48328 } 48329 entries.push("<" + (encoded.join(' ')) + ">"); 48330 } 48331 cmap.end("/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000><ffff>\nendcodespacerange\n1 beginbfrange\n<0000> <" + (toHex(entries.length - 1)) + "> [" + (entries.join(' ')) + "]\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"); 48332 return cmap; 48333 }; 48334 48335 return EmbeddedFont; 48336 48337 })(PDFFont); 48338 48339 module.exports = EmbeddedFont; 48340 48341}).call(this); 48342 48343 48344/***/ }), 48345/* 295 */ 48346/***/ (function(module, exports, __webpack_require__) { 48347 48348// Generated by CoffeeScript 1.12.6 48349(function() { 48350 var LineWrapper, number; 48351 48352 LineWrapper = __webpack_require__(296); 48353 48354 number = __webpack_require__(26).number; 48355 48356 module.exports = { 48357 initText: function() { 48358 this.x = 0; 48359 this.y = 0; 48360 return this._lineGap = 0; 48361 }, 48362 lineGap: function(_lineGap) { 48363 this._lineGap = _lineGap; 48364 return this; 48365 }, 48366 moveDown: function(lines) { 48367 if (lines == null) { 48368 lines = 1; 48369 } 48370 this.y += this.currentLineHeight(true) * lines + this._lineGap; 48371 return this; 48372 }, 48373 moveUp: function(lines) { 48374 if (lines == null) { 48375 lines = 1; 48376 } 48377 this.y -= this.currentLineHeight(true) * lines + this._lineGap; 48378 return this; 48379 }, 48380 _text: function(text, x, y, options, lineCallback) { 48381 var j, len, line, ref, wrapper; 48382 options = this._initOptions(x, y, options); 48383 text = text == null ? '' : '' + text; 48384 if (options.wordSpacing) { 48385 text = text.replace(/\s{2,}/g, ' '); 48386 } 48387 if (options.width) { 48388 wrapper = this._wrapper; 48389 if (!wrapper) { 48390 wrapper = new LineWrapper(this, options); 48391 wrapper.on('line', lineCallback); 48392 } 48393 this._wrapper = options.continued ? wrapper : null; 48394 this._textOptions = options.continued ? options : null; 48395 wrapper.wrap(text, options); 48396 } else { 48397 ref = text.split('\n'); 48398 for (j = 0, len = ref.length; j < len; j++) { 48399 line = ref[j]; 48400 lineCallback(line, options); 48401 } 48402 } 48403 return this; 48404 }, 48405 text: function(text, x, y, options) { 48406 return this._text(text, x, y, options, this._line.bind(this)); 48407 }, 48408 widthOfString: function(string, options) { 48409 if (options == null) { 48410 options = {}; 48411 } 48412 return this._font.widthOfString(string, this._fontSize, options.features) + (options.characterSpacing || 0) * (string.length - 1); 48413 }, 48414 heightOfString: function(text, options) { 48415 var height, lineGap, ref, x, y; 48416 if (options == null) { 48417 options = {}; 48418 } 48419 ref = this, x = ref.x, y = ref.y; 48420 options = this._initOptions(options); 48421 options.height = 2e308; 48422 lineGap = options.lineGap || this._lineGap || 0; 48423 this._text(text, this.x, this.y, options, (function(_this) { 48424 return function(line, options) { 48425 return _this.y += _this.currentLineHeight(true) + lineGap; 48426 }; 48427 })(this)); 48428 height = this.y - y; 48429 this.x = x; 48430 this.y = y; 48431 return height; 48432 }, 48433 list: function(list, x, y, options, wrapper) { 48434 var flatten, i, indent, itemIndent, items, level, levels, midLine, r; 48435 options = this._initOptions(x, y, options); 48436 midLine = Math.round((this._font.ascender / 1000 * this._fontSize) / 2); 48437 r = options.bulletRadius || Math.round((this._font.ascender / 1000 * this._fontSize) / 3); 48438 indent = options.textIndent || r * 5; 48439 itemIndent = options.bulletIndent || r * 8; 48440 level = 1; 48441 items = []; 48442 levels = []; 48443 flatten = function(list) { 48444 var i, item, j, len, results; 48445 results = []; 48446 for (i = j = 0, len = list.length; j < len; i = ++j) { 48447 item = list[i]; 48448 if (Array.isArray(item)) { 48449 level++; 48450 flatten(item); 48451 results.push(level--); 48452 } else { 48453 items.push(item); 48454 results.push(levels.push(level)); 48455 } 48456 } 48457 return results; 48458 }; 48459 flatten(list); 48460 wrapper = new LineWrapper(this, options); 48461 wrapper.on('line', this._line.bind(this)); 48462 level = 1; 48463 i = 0; 48464 wrapper.on('firstLine', (function(_this) { 48465 return function() { 48466 var diff, l; 48467 if ((l = levels[i++]) !== level) { 48468 diff = itemIndent * (l - level); 48469 _this.x += diff; 48470 wrapper.lineWidth -= diff; 48471 level = l; 48472 } 48473 _this.circle(_this.x - indent + r, _this.y + midLine, r); 48474 return _this.fill(); 48475 }; 48476 })(this)); 48477 wrapper.on('sectionStart', (function(_this) { 48478 return function() { 48479 var pos; 48480 pos = indent + itemIndent * (level - 1); 48481 _this.x += pos; 48482 return wrapper.lineWidth -= pos; 48483 }; 48484 })(this)); 48485 wrapper.on('sectionEnd', (function(_this) { 48486 return function() { 48487 var pos; 48488 pos = indent + itemIndent * (level - 1); 48489 _this.x -= pos; 48490 return wrapper.lineWidth += pos; 48491 }; 48492 })(this)); 48493 wrapper.wrap(items.join('\n'), options); 48494 return this; 48495 }, 48496 _initOptions: function(x, y, options) { 48497 var key, ref, val; 48498 if (x == null) { 48499 x = {}; 48500 } 48501 if (options == null) { 48502 options = {}; 48503 } 48504 if (typeof x === 'object') { 48505 options = x; 48506 x = null; 48507 } 48508 options = (function() { 48509 var k, opts, v; 48510 opts = {}; 48511 for (k in options) { 48512 v = options[k]; 48513 opts[k] = v; 48514 } 48515 return opts; 48516 })(); 48517 if (this._textOptions) { 48518 ref = this._textOptions; 48519 for (key in ref) { 48520 val = ref[key]; 48521 if (key !== 'continued') { 48522 if (options[key] == null) { 48523 options[key] = val; 48524 } 48525 } 48526 } 48527 } 48528 if (x != null) { 48529 this.x = x; 48530 } 48531 if (y != null) { 48532 this.y = y; 48533 } 48534 if (options.lineBreak !== false) { 48535 if (options.width == null) { 48536 options.width = this.page.width - this.x - this.page.margins.right; 48537 } 48538 } 48539 options.columns || (options.columns = 0); 48540 if (options.columnGap == null) { 48541 options.columnGap = 18; 48542 } 48543 return options; 48544 }, 48545 _line: function(text, options, wrapper) { 48546 var lineGap; 48547 if (options == null) { 48548 options = {}; 48549 } 48550 this._fragment(text, this.x, this.y, options); 48551 lineGap = options.lineGap || this._lineGap || 0; 48552 if (!wrapper) { 48553 return this.x += this.widthOfString(text); 48554 } else { 48555 return this.y += this.currentLineHeight(true) + lineGap; 48556 } 48557 }, 48558 _fragment: function(text, x, y, options) { 48559 var addSegment, align, base, characterSpacing, commands, d, encoded, encodedWord, flush, hadOffset, i, j, key, last, len, len1, lineWidth, lineY, m, mode, name, pos, positions, positionsWord, ref, ref1, ref2, renderedWidth, scale, space, spaceWidth, textWidth, val, word, wordSpacing, words; 48560 text = ('' + text).replace(/\n/g, ''); 48561 if (text.length === 0) { 48562 return; 48563 } 48564 align = options.align || 'left'; 48565 wordSpacing = options.wordSpacing || 0; 48566 characterSpacing = options.characterSpacing || 0; 48567 if (options.width) { 48568 switch (align) { 48569 case 'right': 48570 textWidth = this.widthOfString(text.replace(/\s+$/, ''), options); 48571 x += options.lineWidth - textWidth; 48572 break; 48573 case 'center': 48574 x += options.lineWidth / 2 - options.textWidth / 2; 48575 break; 48576 case 'justify': 48577 words = text.trim().split(/\s+/); 48578 textWidth = this.widthOfString(text.replace(/\s+/g, ''), options); 48579 spaceWidth = this.widthOfString(' ') + characterSpacing; 48580 wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWi
48580dth); 48581 } 48582 } 48583 renderedWidth = options.textWidth + (wordSpacing * (options.wordCount - 1)) + (characterSpacing * (text.length - 1)); 48584 if (options.link) { 48585 this.link(x, y, renderedWidth, this.currentLineHeight(), options.link); 48586 } 48587 if (options.underline || options.strike) { 48588 this.save(); 48589 if (!options.stroke) { 48590 this.strokeColor.apply(this, this._fillColor); 48591 } 48592 lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10); 48593 this.lineWidth(lineWidth); 48594 d = options.underline ? 1 : 2; 48595 lineY = y + this.currentLineHeight() / d; 48596 if (options.underline) { 48597 lineY -= lineWidth; 48598 } 48599 this.moveTo(x, lineY); 48600 this.lineTo(x + renderedWidth, lineY); 48601 this.stroke(); 48602 this.restore(); 48603 } 48604 this.save(); 48605 this.transform(1, 0, 0, -1, 0, this.page.height); 48606 y = this.page.height - y - (this._font.ascender / 1000 * this._fontSize); 48607 if ((base = this.page.fonts)[name = this._font.id] == null) { 48608 base[name] = this._font.ref(); 48609 } 48610 this.addContent("BT"); 48611 this.addContent("1 0 0 1 " + (number(x)) + " " + (number(y)) + " Tm"); 48612 this.addContent("/" + this._font.id + " " + (number(this._fontSize)) + " Tf"); 48613 mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0; 48614 if (mode) { 48615 this.addContent(mode + " Tr"); 48616 } 48617 if (characterSpacing) { 48618 this.addContent((number(characterSpacing)) + " Tc"); 48619 } 48620 if (wordSpacing) { 48621 words = text.trim().split(/\s+/); 48622 wordSpacing += this.widthOfString(' ') + characterSpacing; 48623 wordSpacing *= 1000 / this._fontSize; 48624 encoded = []; 48625 positions = []; 48626 for (j = 0, len = words.length; j < len; j++) { 48627 word = words[j]; 48628 ref = this._font.encode(word, options.features), encodedWord = ref[0], positionsWord = ref[1]; 48629 encoded.push.apply(encoded, encodedWord); 48630 positions.push.apply(positions, positionsWord); 48631 space = {}; 48632 ref1 = positions[positions.length - 1]; 48633 for (key in ref1) { 48634 val = ref1[key]; 48635 space[key] = val; 48636 } 48637 space.xAdvance += wordSpacing; 48638 positions[positions.length - 1] = space; 48639 } 48640 } else { 48641 ref2 = this._font.encode(text, options.features), encoded = ref2[0], positions = ref2[1]; 48642 } 48643 scale = this._fontSize / 1000; 48644 commands = []; 48645 last = 0; 48646 hadOffset = false; 48647 addSegment = (function(_this) { 48648 return function(cur) { 48649 var advance, hex; 48650 if (last < cur) { 48651 hex = encoded.slice(last, cur).join(''); 48652 advance = positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth; 48653 commands.push("<" + hex + "> " + (number(-advance))); 48654 } 48655 return last = cur; 48656 }; 48657 })(this); 48658 flush = (function(_this) { 48659 return function(i) { 48660 addSegment(i); 48661 if (commands.length > 0) { 48662 _this.addContent("[" + (commands.join(' ')) + "] TJ"); 48663 return commands.length = 0; 48664 } 48665 }; 48666 })(this); 48667 for (i = m = 0, len1 = positions.length; m < len1; i = ++m) { 48668 pos = positions[i]; 48669 if (pos.xOffset || pos.yOffset) { 48670 flush(i); 48671 this.addContent("1 0 0 1 " + (number(x + pos.xOffset * scale)) + " " + (number(y + pos.yOffset * scale)) + " Tm"); 48672 flush(i + 1); 48673 hadOffset = true; 48674 } else { 48675 if (hadOffset) { 48676 this.addContent("1 0 0 1 " + (number(x)) + " " + (number(y)) + " Tm"); 48677 hadOffset = false; 48678 } 48679 if (pos.xAdvance - pos.advanceWidth !== 0) { 48680 addSegment(i + 1); 48681 } 48682 } 48683 x += pos.xAdvance * scale; 48684 } 48685 flush(i); 48686 this.addContent("ET"); 48687 return this.restore(); 48688 } 48689 }; 48690 48691}).call(this); 48692 48693 48694/***/ }), 48695/* 296 */ 48696/***/ (function(module, exports, __webpack_require__) { 48697 48698// Generated by CoffeeScript 1.12.6 48699(function() { 48700 var EventEmitter, LineBreaker, LineWrapper, 48701 extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, 48702 hasProp = {}.hasOwnProperty; 48703 48704 EventEmitter = __webpack_require__(31).EventEmitter; 48705 48706 LineBreaker = __webpack_require__(78); 48707 48708 LineWrapper = (function(superClass) { 48709 extend(LineWrapper, superClass); 48710 48711 function LineWrapper(document, options) { 48712 var ref; 48713 this.document = document; 48714 this.indent = options.indent || 0; 48715 this.characterSpacing = options.characterSpacing || 0; 48716 this.wordSpacing = options.wordSpacing === 0; 48717 this.columns = options.columns || 1;
48718 this.columnGap = (ref = options.columnGap) != null ? ref : 18; 48719 this.lineWidth = (options.width - (this.columnGap * (this.columns - 1))) / this.columns; 48720 this.spaceLeft = this.lineWidth; 48721 this.startX = this.document.x; 48722 this.startY = this.document.y; 48723 this.column = 1; 48724 this.ellipsis = options.ellipsis; 48725 this.continuedX = 0; 48726 this.features = options.features; 48727 if (options.height != null) { 48728 this.height = options.height; 48729 this.maxY = this.startY + options.height; 48730 } else { 48731 this.maxY = this.document.page.maxY(); 48732 } 48733 this.on('firstLine', (function(_this) { 48734 return function(options) { 48735 var indent; 48736 indent = _this.continuedX || _this.indent; 48737 _this.document.x += indent; 48738 _this.lineWidth -= indent; 48739 return _this.once('line', function() { 48740 _this.document.x -= indent; 48741 _this.lineWidth += indent; 48742 if (options.continued && !_this.continuedX) { 48743 _this.continuedX = _this.indent; 48744 } 48745 if (!options.continued) { 48746 return _this.continuedX = 0; 48747 } 48748 }); 48749 }; 48750 })(this)); 48751 this.on('lastLine', (function(_this) { 48752 return function(options) { 48753 var align; 48754 align = options.align; 48755 if (align === 'justify') { 48756 options.align = 'left'; 48757 } 48758 _this.lastLine = true; 48759 return _this.once('line', function() { 48760 _this.document.y += options.paragraphGap || 0; 48761 options.align = align; 48762 return _this.lastLine = false; 48763 }); 48764 }; 48765 })(this)); 48766 } 48767 48768 LineWrapper.prototype.wordWidth = function(word) { 48769 return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing; 48770 }; 48771 48772 LineWrapper.prototype.eachWord = function(text, fn) { 48773 var bk, breaker, fbk, l, last, lbk, shouldContinue, w, word, wordWidths; 48774 breaker = new LineBreaker(text); 48775 last = null; 48776 wordWidths = Object.create(null); 48777 while (bk = breaker.nextBreak()) { 48778 word = text.slice((last != null ? last.position : void 0) || 0, bk.position); 48779 w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word); 48780 if (w > this.lineWidth + this.continuedX) { 48781 lbk = last; 48782 fbk = {}; 48783 while (word.length) { 48784 l = word.length; 48785 while (w > this.spaceLeft) { 48786 w = this.wordWidth(word.slice(0, --l)); 48787 } 48788 fbk.required = l < word.length; 48789 shouldContinue = fn(word.slice(0, l), w, fbk, lbk); 48790 lbk = { 48791 required: false 48792 }; 48793 word = word.slice(l); 48794 w = this.wordWidth(word); 48795 if (shouldContinue === false) { 48796 break; 48797 } 48798 } 48799 } else { 48800 shouldContinue = fn(word, w, bk, last); 48801 } 48802 if (shouldContinue === false) { 48803 break; 48804 } 48805 last = bk; 48806 } 48807 }; 48808 48809 LineWrapper.prototype.wrap = function(text, options) { 48810 var buffer, emitLine, lc, nextY, textWidth, wc, y; 48811 if (options.indent != null) { 48812 this.indent = options.indent; 48813 } 48814 if (options.characterSpacing != null) { 48815 this.characterSpacing = options.characterSpacing; 48816 } 48817 if (options.wordSpacing != null) { 48818 this.wordSpacing = options.wordSpacing; 48819 } 48820 if (options.ellipsis != null) { 48821 this.ellipsis = options.ellipsis; 48822 } 48823 nextY = this.document.y + this.document.currentLineHeight(true); 48824 if (this.document.y > this.maxY || nextY > this.maxY) { 48825 this.nextSection(); 48826 } 48827 buffer = ''; 48828 textWidth = 0; 48829 wc = 0; 48830 lc = 0; 48831 y = this.document.y; 48832 emitLine = (function(_this) { 48833 return function() { 48834 options.textWidth = textWidth + _this.wordSpacing * (wc - 1); 48835 options.wordCount = wc; 48836 options.lineWidth = _this.lineWidth; 48837 y = _this.document.y;
48838 _this.emit('line', buffer, options, _this); 48839 return lc++; 48840 }; 48841 })(this); 48842 this.emit('sectionStart', options, this); 48843 this.eachWord(text, (function(_this) { 48844 return function(word, w, bk, last) { 48845 var lh, shouldContinue; 48846 if ((last == null) || last.required) { 48847 _this.emit('firstLine', options, _this); 48848 _this.spaceLeft = _this.lineWidth; 48849 } 48850 if (w <= _this.spaceLeft) { 48851 buffer += word; 48852 textWidth += w; 48853 wc++; 48854 } 48855 if (bk.required || w > _this.spaceLeft) { 48856 if (bk.required) { 48857 _this.emit('lastLine', options, _this); 48858 } 48859 lh = _this.document.currentLineHeight(true); 48860 if ((_this.height != null) && _this.ellipsis && _this.document.y + lh * 2 > _this.maxY && _this.column >= _this.columns) { 48861 if (_this.ellipsis === true) { 48862 _this.ellipsis = 'â¦'; 48863 } 48864 buffer = buffer.replace(/\s+$/, ''); 48865 textWidth = _this.wordWidth(buffer + _this.ellipsis); 48866 while (textWidth > _this.lineWidth) { 48867 buffer = buffer.slice(0, -1).replace(/\s+$/, ''); 48868 textWidth = _this.wordWidth(buffer + _this.ellipsis); 48869 } 48870 buffer = buffer + _this.ellipsis; 48871 } 48872 if (bk.required && w > _this.spaceLeft) { 48873 buffer = word; 48874 textWidth = w; 48875 wc = 1; 48876 } 48877 emitLine(); 48878 if (_this.document.y + lh > _this.maxY) { 48879 shouldContinue = _this.nextSection(); 48880 if (!shouldContinue) { 48881 wc = 0; 48882 buffer = ''; 48883 return false; 48884 } 48885 } 48886 if (bk.required) { 48887 _this.spaceLeft = _this.lineWidth; 48888 buffer = ''; 48889 textWidth = 0; 48890 return wc = 0; 48891 } else { 48892 _this.spaceLeft = _this.lineWidth - w; 48893 buffer = word; 48894 textWidth = w; 48895 return wc = 1; 48896 } 48897 } else { 48898 return _this.spaceLeft -= w; 48899 } 48900 }; 48901 })(this)); 48902 if (wc > 0) { 48903 this.emit('lastLine', options, this); 48904 emitLine(); 48905 } 48906 this.emit('sectionEnd', options, this); 48907 if (options.continued === true) { 48908 if (lc > 1) { 48909 this.continuedX = 0; 48910 } 48911 this.continuedX += options.textWidth; 48912 return this.document.y = y; 48913 } else { 48914 return this.document.x = this.startX; 48915 } 48916 }; 48917 48918 LineWrapper.prototype.nextSection = function(options) { 48919 var ref; 48920 this.emit('sectionEnd', options, this); 48921 if (++this.column > this.columns) { 48922 if (this.height != null) { 48923 return false; 48924 } 48925 this.document.addPage(); 48926 this.column = 1; 48927 this.startY = this.document.page.margins.top; 48928 this.maxY = this.document.page.maxY(); 48929 this.document.x = this.startX; 48930 if (this.document._fillColor) { 48931 (ref = this.document).fillColor.apply(ref, this.document._fillColor); 48932 } 48933 this.emit('pageBreak', options, this); 48934 } else { 48935 this.document.x += this.lineWidth + this.columnGap; 48936 this.document.y = this.startY; 48937 this.emit('columnBreak', options, this); 48938 } 48939 this.emit('sectionStart', options, this); 48940 return true; 48941 }; 48942 48943 return LineWrapper; 48944 48945 })(EventEmitter); 48946 48947 module.exports = LineWrapper; 48948 48949}).call(this); 48950 48951 48952/***/ }), 48953/* 297 */ 48954/***/ (function(module, exports, __webpack_require__) { 48955 48956// Generated by CoffeeScript 1.12.6 48957(function() { 48958 var PDFImage; 48959 48960 PDFImage = __webpack_require__(121); 48961 48962 module.exports = { 48963 initImages: function() { 48964 this._imageRegistry = {}; 48965 return this._imageCount = 0; 48966 }, 48967 image: function(src, x, y, options) { 48968 var base, bh, bp, bw, h, hp, image, ip, name, ref, ref1, ref2, ref3, w, wp; 48969 if (options == null) { 48970 options = {}; 48971 } 48972 if (typeof x === 'object') { 48973 options = x; 48974 x = null; 48975 } 48976 x = (ref = x != null ? x : options.x) != null ? ref : this.x; 48977 y = (ref1 = y != null ? y : options.y) != null ? ref1 : this.y; 48978 if (typeof src === 'string') { 48979 image = this._imageRegistry[src]; 48980 } 48981 if (!image) { 48982 if (src.width && src.height) { 48983 image = src; 48984 } else { 48985 image = this.openImage(src); 48986 } 48987 } 48988 if (!image.obj) { 48989 image.embed(this); 48990 } 48991 if ((base = this.page.xobjects)[name = image.label] == null) { 48992 base[name] = image.obj; 48993 } 48994 w = options.width || image.width; 48995 h = options.height || image.height; 48996 if (options.width && !options.height) { 48997 wp = w / image.width; 48998 w = image.width * wp; 48999 h = image.height * wp; 49000 } else if (options.height && !options.width) { 49001 hp = h / image.height; 49002 w = image.width * hp; 49003 h = image.height * hp; 49004 } else if (options.scale) { 49005 w = image.width * options.scale; 49006 h = image.height * options.scale; 49007 } else if (options.fit) { 49008 ref2 = options.fit, bw = ref2[0], bh = ref2[1]; 49009 bp = bw / bh; 49010 ip = image.width / image.height; 49011 if (ip > bp) { 49012 w = bw; 49013 h = bw / ip; 49014 } else { 49015 h = bh; 49016 w = bh * ip; 49017 } 49018 } else if (options.cover) { 49019 ref3 = options.cover, bw = ref3[0], bh = ref3[1]; 49020 bp = bw / bh; 49021 ip = image.width / image.height; 49022 if (ip > bp) { 49023 h = bh; 49024 w = bh * ip; 49025 } else { 49026 w = bw; 49027 h = bw / ip; 49028 } 49029 } 49030 if (options.fit || options.cover) { 49031 if (options.align === 'center') { 49032 x = x + bw / 2 - w / 2; 49033 } else if (options.align === 'right') { 49034 x = x + bw - w; 49035 } 49036 if (options.valign === 'center') { 49037 y = y + bh / 2 - h / 2; 49038 } else if (options.valign === 'bottom') { 49039 y = y + bh - h; 49040 } 49041 } 49042 if (this.y === y) { 49043 this.y += h; 49044 } 49045 this.save(); 49046 this.transform(w, 0, 0, -h, x, y + h); 49047 this.addContent("/" + image.label + " Do");
49048 this.restore(); 49049 return this; 49050 }, 49051 openImage: function(src) { 49052 var image; 49053 if (typeof src === 'string') { 49054 image = this._imageRegistry[src]; 49055 } 49056 if (!image) { 49057 image = PDFImage.open(src, 'I' + (++this._imageCount)); 49058 if (typeof src === 'string') { 49059 this._imageRegistry[src] = image; 49060 } 49061 } 49062 return image; 49063 } 49064 }; 49065 49066}).call(this); 49067 49068 49069/***/ }), 49070/* 298 */ 49071/***/ (function(module, exports) { 49072 49073// Generated by CoffeeScript 1.12.6 49074(function() { 49075 var Data; 49076 49077 Data = (function() { 49078 function Data(data) { 49079 this.data = data != null ? data : []; 49080 this.pos = 0; 49081 this.length = this.data.length; 49082 } 49083 49084 Data.prototype.readByte = function() { 49085 return this.data[this.pos++]; 49086 }; 49087 49088 Data.prototype.writeByte = function(byte) { 49089 return this.data[this.pos++] = byte; 49090 }; 49091 49092 Data.prototype.byteAt = function(index) { 49093 return this.data[index]; 49094 }; 49095 49096 Data.prototype.readBool = function() { 49097 return !!this.readByte(); 49098 }; 49099 49100 Data.prototype.writeBool = function(val) { 49101 return this.writeByte(val ? 1 : 0); 49102 }; 49103 49104 Data.prototype.readUInt32 = function() { 49105 var b1, b2, b3, b4; 49106 b1 = this.readByte() * 0x1000000; 49107 b2 = this.readByte() << 16; 49108 b3 = this.readByte() << 8; 49109 b4 = this.readByte(); 49110 return b1 + b2 + b3 + b4; 49111 }; 49112 49113 Data.prototype.writeUInt32 = function(val) { 49114 this.writeByte((val >>> 24) & 0xff); 49115 this.writeByte((val >> 16) & 0xff); 49116 this.writeByte((val >> 8) & 0xff); 49117 return this.writeByte(val & 0xff); 49118 }; 49119 49120 Data.prototype.readInt32 = function() { 49121 var int; 49122 int = this.readUInt32(); 49123 if (int >= 0x80000000) { 49124 return int - 0x100000000; 49125 } else { 49126 return int; 49127 } 49128 }; 49129 49130 Data.prototype.writeInt32 = function(val) { 49131 if (val < 0) { 49132 val += 0x100000000; 49133 } 49134 return this.writeUInt32(val); 49135 }; 49136 49137 Data.prototype.readUInt16 = function() { 49138 var b1, b2; 49139 b1 = this.readByte() << 8; 49140 b2 = this.readByte(); 49141 return b1 | b2; 49142 }; 49143 49144 Data.prototype.writeUInt16 = function(val) { 49145 this.writeByte((val >> 8) & 0xff); 49146 return this.writeByte(val & 0xff); 49147 }; 49148 49149 Data.prototype.readInt16 = function() { 49150 var int; 49151 int = this.readUInt16(); 49152 if (int >= 0x8000) { 49153 return int - 0x10000; 49154 } else { 49155 return int; 49156 } 49157 }; 49158 49159 Data.prototype.writeInt16 = function(val) { 49160 if (val < 0) { 49161 val += 0x10000; 49162 } 49163 return this.writeUInt16(val); 49164 }; 49165 49166 Data.prototype.readString = function(length) { 49167 var i, j, ref, ret; 49168 ret = []; 49169 for (i = j = 0, ref = length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 49170 ret[i] = String.fromCharCode(this.readByte()); 49171 } 49172 return ret.join(''); 49173 }; 49174 49175 Data.prototype.writeString = function(val) { 49176 var i, j, ref, results; 49177 results = []; 49178 for (i = j = 0, ref = val.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 49179 results.push(this.writeByte(val.charCodeAt(i))); 49180 } 49181 return results; 49182 }; 49183 49184 Data.prototype.stringAt = function(pos, length) { 49185 this.pos = pos; 49186 return this.readString(length); 49187 }; 49188 49189 Data.prototype.readShort = function() { 49190 return this.readInt16(); 49191 }; 49192 49193 Data.prototype.writeShort = function(val) { 49194 return this.writeInt16(val); 49195 }; 49196 49197 Data.prototype.readLongLong = function() { 49198 var b1, b2, b3, b4, b5, b6, b7, b8; 49199 b1 = this.readByte(); 49200 b2 = this.readByte(); 49201 b3 = this.readByte(); 49202 b4 = this.readByte(); 49203 b5 = this.readByte(); 49204 b6 = this.readByte(); 49205 b7 = this.readByte(); 49206 b8 = this.readByte(); 49207 if (b1 & 0x80) { 49208 return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1; 49209 } 49210 return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8; 49211 }; 49212 49213 Data.prototype.writeLongLong = function(val) { 49214 var high, low; 49215 high = Math.floor(val / 0x100000000); 49216 low = val & 0xffffffff; 49217 this.writeByte((high >> 24) & 0xff); 49218 this.writeByte((high >> 16) & 0xff); 49219 this.writeByte((high >> 8) & 0xff); 49220 this.writeByte(high & 0xff); 49221 this.writeByte((low >> 24) & 0xff); 49222 this.writeByte((low >> 16) & 0xff); 49223 this.writeByte((low >> 8) & 0xff); 49224 return this.writeByte(low & 0xff); 49225 }; 49226 49227 Data.prototype.readInt = function() { 49228 return this.readInt32(); 49229 }; 49230 49231 Data.prototype.writeInt = function(val) { 49232 return this.writeInt32(val); 49233 }; 49234 49235 Data.prototype.slice = function(start, end) { 49236 return this.data.slice(start, end); 49237 }; 49238 49239 Data.prototype.read = function(bytes) { 49240 var buf, i, j, ref; 49241 buf = []; 49242 for (i = j = 0, ref = bytes; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { 49243 buf.push(this.readByte()); 49244 } 49245 return buf; 49246 }; 49247 49248 Data.prototype.write = function(bytes) { 49249 var byte, j, len, results; 49250 results = []; 49251 for (j = 0, len = bytes.length; j < len; j++) { 49252 byte = bytes[j]; 49253 results.push(this.writeByte(byte)); 49254 } 49255 return results; 49256 }; 49257 49258 return Data; 49259 49260 })(); 49261 49262 module.exports = Data; 49263 49264}).call(this); 49265 49266 49267/***/ }), 49268/* 299 */ 49269/***/ (function(module, exports, __webpack_require__) { 49270 49271// Generated by CoffeeScript 1.12.6 49272(function() { 49273 var JPEG, fs, 49274 indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; 49275 49276 fs = __webpack_require__(8); 49277 49278 JPEG = (function() { 49279 var MARKERS; 49280 49281 MARKERS = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF]; 49282 49283 function JPEG(data, label) { 49284 var channels, marker, pos; 49285 this.data = data; 49286 this.label = label; 49287 if (this.data.readUInt16BE(0) !== 0xFFD8) { 49288 throw "SOI not found in JPEG"; 49289 } 49290 pos = 2; 49291 while (pos < this.data.length) { 49292 marker = this.data.readUInt16BE(pos); 49293 pos += 2; 49294 if (indexOf.call(MARKERS, marker) >= 0) { 49295 break; 49296 } 49297 pos += this.data.readUInt16BE(pos); 49298 } 49299 if (indexOf.call(MARKERS, marker) < 0) { 49300 throw "Invalid JPEG."; 49301 } 49302 pos += 2; 49303 this.bits = this.data[pos++]; 49304 this.height = this.data.readUInt16BE(pos); 49305 pos += 2; 49306 this.width = this.data.readUInt16BE(pos); 49307 pos += 2; 49308 channels = this.data[pos++]; 49309 this.colorSpace = (function() { 49310 switch (channels) { 49311 case 1: 49312 return 'DeviceGray'; 49313 case 3: 49314 return 'DeviceRGB'; 49315 case 4: 49316 return 'DeviceCMYK'; 49317 } 49318 })(); 49319 this.obj = null; 49320 } 49321 49322 JPEG.prototype.embed = function(document) { 49323 if (this.obj) { 49324 return; 49325 } 49326 this.obj = document.ref({ 49327 Type: 'XObject', 49328 Subtype: 'Image', 49329 BitsPerComponent: this.bits, 49330 Width: this.width, 49331 Height: this.height, 49332 ColorSpace: this.colorSpace, 49333 Filter: 'DCTDecode' 49334 }); 49335 if (this.colorSpace === 'DeviceCMYK') { 49336 this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]; 49337 } 49338 this.obj.end(this.data); 49339 return this.data = null; 49340 }; 49341 49342 return JPEG; 49343 49344 })(); 49345 49346 module.exports = JPEG; 49347 49348}).call(this); 49349 49350 49351/***/ }), 49352/* 300 */ 49353/***/ (function(module, exports, __webpack_require__) { 49354 49355/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.12.6 49356(function() { 49357 var PNG, PNGImage, zlib; 49358 49359 zlib = __webpack_require__(48); 49360 49361 PNG = __webpack_require__(301); 49362 49363 PNGImage = (function() { 49364 function PNGImage(data, label) { 49365 this.label = label; 49366 this.image = new PNG(data); 49367 this.width = this.image.width; 49368 this.height = this.image.height; 49369 this.imgData = this.image.imgData; 49370 this.obj = null; 49371 } 49372 49373 PNGImage.prototype.embed = function(document) { 49374 var k, len1, mask, palette, params, rgb, val, x; 49375 this.document = document; 49376 if (this.obj) { 49377 return; 49378 } 49379 this.obj = this.document.ref({ 49380 Type: 'XObject', 49381 Subtype: 'Image', 49382 BitsPerComponent: this.image.bits, 49383 Width: this.width, 49384 Height: this.height, 49385 Filter: 'FlateDecode' 49386 }); 49387 if (!this.image.hasAlphaChannel) { 49388 params = this.document.ref({ 49389 Predictor: 15, 49390 Colors: this.image.colors, 49391 BitsPerComponent: this.image.bits, 49392 Columns: this.width 49393 }); 49394 this.obj.data['DecodeParms'] = params; 49395 params.end(); 49396 } 49397 if (this.image.palette.length === 0) { 49398 this.obj.data['ColorSpace'] = this.image.colorSpace; 49399 } else { 49400 palette = this.document.ref(); 49401 palette.end(new Buffer(this.image.palette)); 49402 this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', (this.image.palette.length / 3) - 1, palette]; 49403 } 49404 if (this.image.transparency.grayscale) { 49405 val = this.image.transparency.greyscale; 49406 return this.obj.data['Mask'] = [val, val]; 49407 } else if (this.image.transparency.rgb) { 49408 rgb = this.image.transparency.rgb; 49409 mask = []; 49410 for (k = 0, len1 = rgb.length; k < len1; k++) { 49411 x = rgb[k]; 49412 mask.push(x, x); 49413 } 49414 return this.obj.data['Mask'] = mask; 49415 } else if (this.image.transparency.indexed) { 49416 return this.loadIndexedAlphaChannel(); 49417 } else if (this.image.hasAlphaChannel) { 49418 return this.splitAlphaChannel(); 49419 } else { 49420 return this.finalize(); 49421 } 49422 }; 49423 49424 PNGImage.prototype.finalize = function() { 49425 var sMask; 49426 if (this.alphaChannel) { 49427 sMask = this.document.ref({ 49428 Type: 'XObject', 49429 Subtype: 'Image', 49430 Height: this.height, 49431 Width: this.width, 49432 BitsPerComponent: 8, 49433 Filter: 'FlateDecode', 49434 ColorSpace: 'DeviceGray', 49435 Decode: [0, 1] 49436 }); 49437 sMask.end(this.alphaChannel); 49438 this.obj.data['SMask'] = sMask; 49439 } 49440 this.obj.end(this.imgData); 49441 this.image = null; 49442 return this.imgData = null; 49443 }; 49444 49445 PNGImage.prototype.splitAlphaChannel = function() { 49446 return this.image.decodePixels((function(_this) { 49447 return function(pixels) { 49448 var a, alphaChannel, colorByteSize, done, i, imgData, len, p, pixelCount; 49449 colorByteSize = _this.image.colors * _this.image.bits / 8; 49450 pixelCount = _this.width * _this.height; 49451 imgData = new Buffer(pixelCount * colorByteSize); 49452 alphaChannel = new Buffer(pixelCount); 49453 i = p = a = 0; 49454 len = pixels.length; 49455 while (i < len) { 49456 imgData[p++] = pixels[i++]; 49457 imgData[p++] = pixels[i++]; 49458 imgData[p++] = pixels[i++]; 49459 alphaChannel[a++] = pixels[i++]; 49460 } 49461 done = 0; 49462 zlib.deflate(imgData, function(err, imgData1) { 49463 _this.imgData = imgData1; 49464 if (err) { 49465 throw err; 49466 } 49467 if (++done === 2) { 49468 return _this.finalize(); 49469 } 49470 }); 49471 return zlib.deflate(alphaChannel, function(err, alphaChannel1) { 49472 _this.alphaChannel = alphaChannel1; 49473 if (err) { 49474 throw err; 49475 } 49476 if (++done === 2) { 49477 return _this.finalize(); 49478 } 49479 }); 49480 }; 49481 })(this)); 49482 }; 49483 49484 PNGImage.prototype.loadIndexedAlphaChannel = function(fn) { 49485 var transparency; 49486 transparency = this.image.transparency.indexed; 49487 return this.image.decodePixels((function(_this) { 49488 return function(pixels) { 49489 var alphaChannel, i, j, k, ref; 49490 alphaChannel = new Buffer(_this.width * _this.height); 49491 i = 0; 49492 for (j = k = 0, ref = pixels.length; k < ref; j = k += 1) { 49493 alphaChannel[i++] = transparency[pixels[j]]; 49494 } 49495 return zlib.deflate(alphaChannel, function(err, alphaChannel1) { 49496 _this.alphaChannel = alphaChannel1; 49497 if (err) { 49498 throw err; 49499 } 49500 return _this.finalize(); 49501 }); 49502 }; 49503 })(this)); 49504 }; 49505 49506 return PNGImage; 49507 49508 })(); 49509 49510 module.exports = PNGImage; 49511 49512}).call(this); 49513 49514/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 49515
49516/***/ }), 49517/* 301 */ 49518/***/ (function(module, exports, __webpack_require__) { 49519 49520/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.4.0 49521 49522/* 49523# MIT LICENSE 49524# Copyright (c) 2011 Devon Govett 49525# 49526# Permission is hereby granted, free of charge, to any person obtaining a copy of this 49527# software and associated documentation files (the "Software"), to deal in the Software 49528# without restriction, including without limitation the rights to use, copy, modify, merge, 49529# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 49530# to whom the Software is furnished to do so, subject to the following conditions: 49531# 49532# The above copyright notice and this permission notice shall be included in all copies or 49533# substantial portions of the Software. 49534# 49535# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 49536# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 49537# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 49538# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 49539# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 49540*/ 49541 49542 49543(function() { 49544 var PNG, fs, zlib; 49545 49546 fs = __webpack_require__(8); 49547 49548 zlib = __webpack_require__(48); 49549 49550 module.exports = PNG = (function() { 49551 49552 PNG.decode = function(path, fn) { 49553 return fs.readFile(path, function(err, file) { 49554 var png; 49555 png = new PNG(file); 49556 return png.decode(function(pixels) { 49557 return fn(pixels); 49558 }); 49559 }); 49560 }; 49561 49562 PNG.load = function(path) { 49563 var file; 49564 file = fs.readFileSync(path); 49565 return new PNG(file); 49566 }; 49567 49568 function PNG(data) { 49569 var chunkSize, colors, i, index, key, section, short, text, _i, _j, _ref; 49570 this.data = data; 49571 this.pos = 8; 49572 this.palette = []; 49573 this.imgData = []; 49574 this.transparency = {}; 49575 this.text = {}; 49576 while (true) { 49577 chunkSize = this.readUInt32(); 49578 section = ((function() { 49579 var _i, _results; 49580 _results = []; 49581 for (i = _i = 0; _i < 4; i = ++_i) { 49582 _results.push(String.fromCharCode(this.data[this.pos++])); 49583 } 49584 return _results; 49585 }).call(this)).join(''); 49586 switch (section) { 49587 case 'IHDR': 49588 this.width = this.readUInt32(); 49589 this.height = this.readUInt32(); 49590 this.bits = this.data[this.pos++]; 49591 this.colorType = this.data[this.pos++]; 49592 this.compressionMethod = this.data[this.pos++]; 49593 this.filterMethod = this.data[this.pos++]; 49594 this.interlaceMethod = this.data[this.pos++]; 49595 break; 49596 case 'PLTE': 49597 this.palette = this.read(chunkSize); 49598 break; 49599 case 'IDAT': 49600 for (i = _i = 0; _i < chunkSize; i = _i += 1) { 49601 this.imgData.push(this.data[this.pos++]); 49602 } 49603 break; 49604 case 'tRNS': 49605 this.transparency = {}; 49606 switch (this.colorType) { 49607 case 3: 49608 this.transparency.indexed = this.read(chunkSize); 49609 short = 255 - this.transparency.indexed.length; 49610 if (short > 0) { 49611 for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) { 49612 this.transparency.indexed.push(255); 49613 } 49614 } 49615 break; 49616 case 0: 49617 this.transparency.grayscale = this.read(chunkSize)[0]; 49618 break; 49619 case 2: 49620 this.transparency.rgb = this.read(chunkSize); 49621 } 49622 break; 49623 case 'tEXt': 49624 text = this.read(chunkSize); 49625 index = text.indexOf(0); 49626 key = String.fromCharCode.apply(String, text.slice(0, index)); 49627 this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1)); 49628 break; 49629 case 'IEND': 49630 this.colors = (function() { 49631 switch (this.colorType) { 49632 case 0: 49633 case 3: 49634 case 4: 49635 return 1; 49636 case 2: 49637 case 6: 49638 return 3; 49639 } 49640 }).call(this); 49641 this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6; 49642 colors = this.colors + (this.hasAlphaChannel ? 1 : 0); 49643 this.pixelBitlength = this.bits * colors; 49644 this.colorSpace = (function() { 49645 switch (this.colors) { 49646 case 1: 49647 return 'DeviceGray'; 49648 case 3: 49649 return 'DeviceRGB'; 49650 } 49651 }).call(this); 49652 this.imgData = new Buffer(this.imgData); 49653 return; 49654 default: 49655 this.pos += chunkSize; 49656 } 49657 this.pos += 4; 49658 if (this.pos > this.data.length) { 49659 throw new Error("Incomplete or corrupt PNG file"); 49660 } 49661 } 49662 return; 49663 } 49664 49665 PNG.prototype.read = function(bytes) { 49666 var i, _i, _results; 49667 _results = []; 49668 for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) { 49669 _results.push(this.data[this.pos++]); 49670 } 49671 return _results; 49672 }; 49673 49674 PNG.prototype.readUInt32 = function() { 49675 var b1, b2, b3, b4; 49676 b1 = this.data[this.pos++] << 24; 49677 b2 = this.data[this.pos++] << 16; 49678 b3 = this.data[this.pos++] << 8; 49679 b4 = this.data[this.pos++]; 49680 return b1 | b2 | b3 | b4; 49681 }; 49682
49683 PNG.prototype.readUInt16 = function() { 49684 var b1, b2; 49685 b1 = this.data[this.pos++] << 8; 49686 b2 = this.data[this.pos++]; 49687 return b1 | b2; 49688 }; 49689 49690 PNG.prototype.decodePixels = function(fn) { 49691 var _this = this; 49692 return zlib.inflate(this.imgData, function(err, data) { 49693 var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m; 49694 if (err) { 49695 throw err; 49696 } 49697 pixelBytes = _this.pixelBitlength / 8; 49698 scanlineLength = pixelBytes * _this.width; 49699 pixels = new Buffer(scanlineLength * _this.height); 49700 length = data.length; 49701 row = 0; 49702 pos = 0; 49703 c = 0; 49704 while (pos < length) { 49705 switch (data[pos++]) { 49706 case 0: 49707 for (i = _i = 0; _i < scanlineLength; i = _i += 1) { 49708 pixels[c++] = data[pos++]; 49709 } 49710 break; 49711 case 1: 49712 for (i = _j = 0; _j < scanlineLength; i = _j += 1) { 49713 byte = data[pos++]; 49714 left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; 49715 pixels[c++] = (byte + left) % 256; 49716 } 49717 break; 49718 case 2: 49719 for (i = _k = 0; _k < scanlineLength; i = _k += 1) { 49720 byte = data[pos++]; 49721 col = (i - (i % pixelBytes)) / pixelBytes; 49722 upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; 49723 pixels[c++] = (upper + byte) % 256; 49724 } 49725 break; 49726 case 3: 49727 for (i = _l = 0; _l < scanlineLength; i = _l += 1) { 49728 byte = data[pos++]; 49729 col = (i - (i % pixelBytes)) / pixelBytes; 49730 left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; 49731 upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; 49732 pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256; 49733 } 49734 break; 49735 case 4: 49736 for (i = _m = 0; _m < scanlineLength; i = _m += 1) { 49737 byte = data[pos++]; 49738 col = (i - (i % pixelBytes)) / pixelBytes; 49739 left = i < pixelBytes ? 0 : pixels[c - pixelBytes]; 49740 if (row === 0) { 49741 upper = upperLeft = 0; 49742 } else { 49743 upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)]; 49744 upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)]; 49745 } 49746 p = left + upper - upperLeft; 49747 pa = Math.abs(p - left); 49748 pb = Math.abs(p - upper); 49749 pc = Math.abs(p - upperLeft); 49750 if (pa <= pb && pa <= pc) { 49751 paeth = left; 49752 } else if (pb <= pc) { 49753 paeth = upper; 49754 } else { 49755 paeth = upperLeft; 49756 } 49757 pixels[c++] = (byte + paeth) % 256; 49758 } 49759 break; 49760 default: 49761 throw new Error("Invalid filter algorithm: " + data[pos - 1]); 49762 } 49763 row++; 49764 } 49765 return fn(pixels); 49766 }); 49767 }; 49768 49769 PNG.prototype.decodePalette = function() { 49770 var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1; 49771 palette = this.palette; 49772 transparency = this.transparency.indexed || []; 49773 ret = new Buffer(transparency.length + palette.length); 49774 pos = 0; 49775 length = palette.length; 49776 c = 0; 49777 for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) { 49778 ret[pos++] = palette[i]; 49779 ret[pos++] = palette[i + 1]; 49780 ret[pos++] = palette[i + 2]; 49781 ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255; 49782 } 49783 return ret; 49784 }; 49785 49786 PNG.prototype.copyToImageData = function(imageData, pixels) { 49787 var alpha, colors, data, i, input, j, k, length, palette, v, _ref; 49788 colors = this.colors; 49789 palette = null; 49790 alpha = this.hasAlphaChannel; 49791 if (this.palette.length) { 49792 palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette(); 49793 colors = 4; 49794 alpha = true; 49795 } 49796 data = (imageData != null ? imageData.data : void 0) || imageData; 49797 length = data.length; 49798 input = palette || pixels; 49799 i = j = 0; 49800 if (colors === 1) { 49801 while (i < length) { 49802 k = palette ? pixels[i / 4] * 4 : j; 49803 v = input[k++]; 49804 data[i++] = v; 49805 data[i++] = v; 49806 data[i++] = v; 49807 data[i++] = alpha ? input[k++] : 255; 49808 j = k; 49809 } 49810 } else { 49811 while (i < length) { 49812 k = palette ? pixels[i / 4] * 4 : j; 49813 data[i++] = input[k++]; 49814 data[i++] = input[k++]; 49815 data[i++] = input[k++]; 49816 data[i++] = alpha ? input[k++] : 255; 49817 j = k; 49818 } 49819 } 49820 }; 49821 49822 PNG.prototype.decode = function(fn) { 49823 var ret, 49824 _this = this; 49825 ret = new Buffer(this.width * this.height * 4); 49826 return this.decodePixels(function(pixels) { 49827 _this.copyToImageData(ret, pixels); 49828 return fn(ret); 49829 }); 49830 }; 49831 49832 return PNG; 49833 49834 })(); 49835 49836}).call(this); 49837 49838/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 49839
vendor: 5,261 bytes, lines 49840-50029
49840/***/ }), 49841/* 302 */ 49842/***/ (function(module, exports) { 49843 49844// Generated by CoffeeScript 1.12.6 49845(function() { 49846 module.exports = { 49847 annotate: function(x, y, w, h, options) { 49848 var key, ref, val; 49849 options.Type = 'Annot'; 49850 options.Rect = this._convertRect(x, y, w, h); 49851 options.Border = [0, 0, 0]; 49852 if (options.Subtype !== 'Link') { 49853 if (options.C == null) { 49854 options.C = this._normalizeColor(options.color || [0, 0, 0]); 49855 } 49856 } 49857 delete options.color; 49858 if (typeof options.Dest === 'string') { 49859 options.Dest = new String(options.Dest); 49860 } 49861 for (key in options) { 49862 val = options[key]; 49863 options[key[0].toUpperCase() + key.slice(1)] = val; 49864 } 49865 ref = this.ref(options); 49866 this.page.annotations.push(ref); 49867 ref.end(); 49868 return this; 49869 }, 49870 note: function(x, y, w, h, contents, options) { 49871 if (options == null) { 49872 options = {}; 49873 } 49874 options.Subtype = 'Text'; 49875 options.Contents = new String(contents); 49876 options.Name = 'Comment'; 49877 if (options.color == null) { 49878 options.color = [243, 223, 92]; 49879 } 49880 return this.annotate(x, y, w, h, options); 49881 }, 49882 link: function(x, y, w, h, url, options) { 49883 if (options == null) { 49884 options = {}; 49885 } 49886 options.Subtype = 'Link'; 49887 options.A = this.ref({ 49888 S: 'URI', 49889 URI: new String(url) 49890 }); 49891 options.A.end(); 49892 return this.annotate(x, y, w, h, options); 49893 }, 49894 _markup: function(x, y, w, h, options) { 49895 var ref1, x1, x2, y1, y2; 49896 if (options == null) { 49897 options = {}; 49898 } 49899 ref1 = this._convertRect(x, y, w, h), x1 = ref1[0], y1 = ref1[1], x2 = ref1[2], y2 = ref1[3]; 49900 options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1]; 49901 options.Contents = new String; 49902 return this.annotate(x, y, w, h, options); 49903 }, 49904 highlight: function(x, y, w, h, options) { 49905 if (options == null) { 49906 options = {}; 49907 } 49908 options.Subtype = 'Highlight'; 49909 if (options.color == null) { 49910 options.color = [241, 238, 148]; 49911 } 49912 return this._markup(x, y, w, h, options); 49913 }, 49914 underline: function(x, y, w, h, options) { 49915 if (options == null) { 49916 options = {}; 49917 } 49918 options.Subtype = 'Underline'; 49919 return this._markup(x, y, w, h, options); 49920 }, 49921 strike: function(x, y, w, h, options) { 49922 if (options == null) { 49923 options = {}; 49924 } 49925 options.Subtype = 'StrikeOut'; 49926 return this._markup(x, y, w, h, options); 49927 }, 49928 lineAnnotation: function(x1, y1, x2, y2, options) { 49929 if (options == null) { 49930 options = {}; 49931 } 49932 options.Subtype = 'Line'; 49933 options.Contents = new String; 49934 options.L = [x1, this.page.height - y1, x2, this.page.height - y2]; 49935 return this.annotate(x1, y1, x2, y2, options); 49936 }, 49937 rectAnnotation: function(x, y, w, h, options) { 49938 if (options == null) { 49939 options = {}; 49940 } 49941 options.Subtype = 'Square'; 49942 options.Contents = new String; 49943 return this.annotate(x, y, w, h, options); 49944 }, 49945 ellipseAnnotation: function(x, y, w, h, options) { 49946 if (options == null) { 49947 options = {}; 49948 } 49949 options.Subtype = 'Circle'; 49950 options.Contents = new String; 49951 return this.annotate(x, y, w, h, options); 49952 }, 49953 textAnnotation: function(x, y, w, h, text, options) { 49954 if (options == null) { 49955 options = {}; 49956 } 49957 options.Subtype = 'FreeText'; 49958 options.Contents = new String(text); 49959 options.DA = new String; 49960 return this.annotate(x, y, w, h, options); 49961 }, 49962 _convertRect: function(x1, y1, w, h) { 49963 var m0, m1, m2, m3, m4, m5, ref1, x2, y2; 49964 y2 = y1; 49965 y1 += h; 49966 x2 = x1 + w; 49967 ref1 = this._ctm, m0 = ref1[0], m1 = ref1[1], m2 = ref1[2], m3 = ref1[3], m4 = ref1[4], m5 = ref1[5]; 49968 x1 = m0 * x1 + m2 * y1 + m4; 49969 y1 = m1 * x1 + m3 * y1 + m5; 49970 x2 = m0 * x2 + m2 * y2 + m4; 49971 y2 = m1 * x2 + m3 * y2 + m5; 49972 return [x1, y1, x2, y2]; 49973 } 49974 }; 49975 49976}).call(this); 49977 49978 49979/***/ }), 49980/* 303 */ 49981/***/ (function(module, exports, __webpack_require__) { 49982 49983"use strict"; 49984 49985 49986module.exports = { 49987 '4A0': [4767.87, 6740.79], 49988 '2A0': [3370.39, 4767.87], 49989 A0: [2383.94, 3370.39], 49990 A1: [1683.78, 2383.94], 49991 A2: [1190.55, 1683.78], 49992 A3: [841.89, 1190.55], 49993 A4: [595.28, 841.89], 49994 A5: [419.53, 595.28], 49995 A6: [297.64, 419.53], 49996 A7: [209.76, 297.64], 49997 A8: [147.40, 209.76], 49998 A9: [104.88, 147.40], 49999 A10: [73.70, 104.88], 50000 B0: [2834.65, 4008.19], 50001 B1: [2004.09, 2834.65], 50002 B2: [1417.32, 2004.09], 50003 B3: [1000.63, 1417.32], 50004 B4: [708.66, 1000.63], 50005 B5: [498.90, 708.66], 50006 B6: [354.33, 498.90], 50007 B7: [249.45, 354.33], 50008 B8: [175.75, 249.45], 50009 B9: [124.72, 175.75], 50010 B10: [87.87, 124.72], 50011 C0: [2599.37, 3676.54], 50012 C1: [1836.85, 2599.37], 50013 C2: [1298.27, 1836.85], 50014 C3: [918.43, 1298.27], 50015 C4: [649.13, 918.43], 50016 C5: [459.21, 649.13], 50017 C6: [323.15, 459.21], 50018 C7: [229.61, 323.15], 50019 C8: [161.57, 229.61], 50020 C9: [113.39, 161.57], 50021 C10: [79.37, 113.39], 50022 RA0: [2437.80, 3458.27], 50023 RA1: [1729.13, 2437.80], 50024 RA2: [1218.90, 1729.13], 50025 RA3: [864.57, 1218.90], 50026 RA4: [609.45, 864.57], 50027 SRA0: [2551.18, 3628.35], 50028 SRA1: [1814.17, 2551.18], 50029 SRA2: [1275.59, 1814.17],
50030 SRA3: [907.09, 1275.59], 50031 SRA4: [637.80, 907.09], 50032 EXECUTIVE: [521.86, 756.00], 50033 FOLIO: [612.00, 936.00], 50034 LEGAL: [612.00, 1008.00], 50035 LETTER: [612.00, 792.00], 50036 TABLOID: [792.00, 1224.00] 50037}; 50038 50039 50040/***/ }), 50041/* 304 */ 50042/***/ (function(module, exports, __webpack_require__) { 50043 50044"use strict"; 50045/* WEBPACK VAR INJECTION */(function(Buffer) { 50046 50047var PDFImage = __webpack_require__(121); 50048 50049function ImageMeasure(pdfKitDoc, imageDictionary) { 50050 this.pdfKitDoc = pdfKitDoc; 50051 this.imageDictionary = imageDictionary || {}; 50052} 50053 50054ImageMeasure.prototype.measureImage = function (src) { 50055 var image, label; 50056 var that = this; 50057 50058 if (!this.pdfKitDoc._imageRegistry[src]) { 50059 label = 'I' + (++this.pdfKitDoc._imageCount); 50060 try { 50061 image = PDFImage.open(realImageSrc(src), label); 50062 } catch (error) { 50063 image = null; 50064 } 50065 if (image === null || image === undefined) { 50066 throw 'invalid image, images dictionary should contain dataURL entries (or local file paths in node.js)'; 50067 } 50068 image.embed(this.pdfKitDoc); 50069 this.pdfKitDoc._imageRegistry[src] = image; 50070 } else { 50071 image = this.pdfKitDoc._imageRegistry[src]; 50072 } 50073 50074 return {width: image.width, height: image.height}; 50075 50076 function realImageSrc(src) { 50077 var img = that.imageDictionary[src]; 50078 50079 if (!img) { 50080 return src; 50081 } 50082 50083 var index = img.indexOf('base64,'); 50084 if (index < 0) { 50085 return that.imageDictionary[src]; 50086 } 50087 50088 return Buffer.from(img.substring(index + 7), 'base64'); 50089 } 50090}; 50091 50092module.exports = ImageMeasure; 50093 50094/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1).Buffer)) 50095 50096/***/ }), 50097/* 305 */ 50098/***/ (function(module, exports, __webpack_require__) { 50099 50100"use strict"; 50101 50102 50103var isArray = __webpack_require__(0).isArray; 50104 50105function groupDecorations(line) { 50106 var groups = [], currentGroup = null; 50107 for (var i = 0, l = line.inlines.length; i < l; i++) { 50108 var inline = line.inlines[i]; 50109 var decoration = inline.decoration; 50110 if (!decoration) { 50111 currentGroup = null; 50112 continue; 50113 } 50114 if (!isArray(decoration)) { 50115 decoration = [decoration]; 50116 } 50117 var color = inline.decorationColor || inline.color || 'black'; 50118 var style = inline.decorationStyle || 'solid'; 50119 for (var ii = 0, ll = decoration.length; ii < ll; ii++) { 50120 var decorationItem = decoration[ii]; 50121 if (!currentGroup || decorationItem !== currentGroup.decoration || 50122 style !== currentGroup.decorationStyle || color !== currentGroup.decorationColor || 50123 decorationItem === 'lineThrough') { 50124 50125 currentGroup = { 50126 line: line, 50127 decoration: decorationItem, 50128 decorationColor: color, 50129 decorationStyle: style, 50130 inlines: [inline] 50131 }; 50132 groups.push(currentGroup); 50133 } else { 50134 currentGroup.inlines.push(inline); 50135 } 50136 } 50137 } 50138 50139 return groups; 50140} 50141 50142function drawDecoration(group, x, y, pdfKitDoc) { 50143 function maxInline() { 50144 var max = 0; 50145 for (var i = 0, l = group.inlines.length; i < l; i++) { 50146 var inline = group.inlines[i]; 50147 max = inline.fontSize > max ? i : max; 50148 } 50149 return group.inlines[max]; 50150 } 50151 function width() { 50152 var sum = 0; 50153 for (var i = 0, l = group.inlines.length; i < l; i++) { 50154 sum += group.inlines[i].width; 50155 } 50156 return sum; 50157 } 50158 var firstInline = group.inlines[0], 50159 biggerInline = maxInline(), 50160 totalWidth = width(), 50161 lineAscent = group.line.getAscenderHeight(), 50162 ascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize, 50163 height = biggerInline.height, 50164 descent = height - ascent; 50165 50166 var lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12; 50167 50168 switch (group.decoration) { 50169 case 'underline': 50170 y += lineAscent + descent * 0.45; 50171 break; 50172 case 'overline': 50173 y += lineAscent - (ascent * 0.85); 50174 break; 50175 case 'lineThrough': 50176 y += lineAscent - (ascent * 0.25); 50177 break; 50178 default: 50179 throw 'Unkown decoration : ' + group.decoration; 50180 } 50181 pdfKitDoc.save(); 50182 50183 if (group.decorationStyle === 'double') { 50184 var gap = Math.max(0.5, lw * 2); 50185 pdfKitDoc.fillColor(group.decorationColor) 50186 .rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill() 50187 .rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill(); 50188 } else if (group.decorationStyle === 'dashed') { 50189 var nbDashes = Math.ceil(totalWidth / (3.96 + 2.84)); 50190 var rdx = x + firstInline.x; 50191 pdfKitDoc.rect(rdx, y, totalWidth, lw).clip(); 50192 pdfKitDoc.fillColor(group.decorationColor); 50193 for (var i = 0; i < nbDashes; i++) { 50194 pdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill(); 50195 rdx += 3.96 + 2.84; 50196 } 50197 } else if (group.decorationStyle === 'dotted') { 50198 var nbDots = Math.ceil(totalWidth / (lw * 3)); 50199 var rx = x + firstInline.x; 50200 pdfKitDoc.rect(rx, y, totalWidth, lw).clip(); 50201 pdfKitDoc.fillColor(group.decorationColor); 50202 for (var ii = 0; ii < nbDots; ii++) { 50203 pdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill(); 50204 rx += (lw * 3); 50205 } 50206 } else if (group.decorationStyle === 'wavy') { 50207 var sh = 0.7, sv = 1; 50208 var nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1; 50209 var rwx = x + firstInline.x - 1; 50210 pdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip(); 50211 pdfKitDoc.lineWidth(0.24); 50212 pdfKitDoc.moveTo(rwx, y); 50213 for (var iii = 0; iii < nbWaves; iii++) { 50214 pdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y) 50215 .bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y); 50216 rwx += sh * 6; 50217 } 50218 pdfKitDoc.stroke(group.decorationColor); 50219 } else { 50220 pdfKitDoc.fillColor(group.decorationColor) 50221 .rect(x + firstInline.x, y - lw / 2, totalWidth, lw) 50222 .fill(); 50223 }
vendor: 4,392 bytes, lines 50224-50357
50224 pdfKitDoc.restore(); 50225} 50226 50227function drawDecorations(line, x, y, pdfKitDoc) { 50228 var groups = groupDecorations(line); 50229 for (var i = 0, l = groups.length; i < l; i++) { 50230 drawDecoration(groups[i], x, y, pdfKitDoc); 50231 } 50232} 50233 50234function drawBackground(line, x, y, pdfKitDoc) { 50235 var height = line.getHeight(); 50236 for (var i = 0, l = line.inlines.length; i < l; i++) { 50237 var inline = line.inlines[i]; 50238 if (!inline.background) { 50239 continue; 50240 } 50241 var justifyShift = (inline.justifyShift || 0); 50242 pdfKitDoc.fillColor(inline.background) 50243 .rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height) 50244 .fill(); 50245 } 50246} 50247 50248module.exports = { 50249 drawBackground: drawBackground, 50250 drawDecorations: drawDecorations 50251}; 50252 50253/***/ }), 50254/* 306 */ 50255/***/ (function(module, exports, __webpack_require__) { 50256 50257var __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js 50258 * A saveAs() FileSaver implementation. 50259 * 1.3.2 50260 * 2016-06-16 18:25:19 50261 * 50262 * By Eli Grey, http://eligrey.com 50263 * License: MIT 50264 * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md 50265 */ 50266 50267/*global self */ 50268/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ 50269 50270/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ 50271 50272var saveAs = saveAs || (function(view) { 50273 "use strict"; 50274 // IE <10 is explicitly unsupported 50275 if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { 50276 return; 50277 } 50278 var 50279 doc = view.document 50280 // only get URL when necessary in case Blob.js hasn't overridden it yet 50281 , get_URL = function() { 50282 return view.URL || view.webkitURL || view; 50283 } 50284 , save_link = doc ? doc.createElementNS("http://www.w3.org/1999/xhtml", "a") : [] 50285 , can_use_save_link = "download" in save_link 50286 , click = function(node) { 50287 var event = new MouseEvent("click"); 50288 node.dispatchEvent(event); 50289 } 50290 , is_safari = /constructor/i.test(view.HTMLElement) || view.safari 50291 , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) 50292 , throw_outside = function(ex) { 50293 (view.setImmediate || view.setTimeout)(function() { 50294 throw ex; 50295 }, 0); 50296 } 50297 , force_saveable_type = "application/octet-stream" 50298 // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to 50299 , arbitrary_revoke_timeout = 1000 * 40 // in ms 50300 , revoke = function(file) { 50301 var revoker = function() { 50302 if (typeof file === "string") { // file is an object URL 50303 get_URL().revokeObjectURL(file); 50304 } else { // file is a File 50305 file.remove(); 50306 } 50307 }; 50308 setTimeout(revoker, arbitrary_revoke_timeout); 50309 } 50310 , dispatch = function(filesaver, event_types, event) { 50311 event_types = [].concat(event_types); 50312 var i = event_types.length; 50313 while (i--) { 50314 var listener = filesaver["on" + event_types[i]]; 50315 if (typeof listener === "function") { 50316 try { 50317 listener.call(filesaver, event || filesaver); 50318 } catch (ex) { 50319 throw_outside(ex); 50320 } 50321 } 50322 } 50323 } 50324 , auto_bom = function(blob) { 50325 // prepend BOM for UTF-8 XML and text/* types (including HTML) 50326 // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF 50327 if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { 50328 return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); 50329 } 50330 return blob; 50331 } 50332 , FileSaver = function(blob, name, no_auto_bom) { 50333 if (!no_auto_bom) { 50334 blob = auto_bom(blob); 50335 } 50336 // First try a.download, then web filesystem, then object URLs 50337 var 50338 filesaver = this 50339 , type = blob.type 50340 , force = type === force_saveable_type 50341 , object_url 50342 , dispatch_all = function() { 50343 dispatch(filesaver, "writestart progress write writeend".split(" ")); 50344 } 50345 // on any filesys errors revert to saving with object URLs 50346 , fs_error = function() { 50347 if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { 50348 // Safari doesn't allow downloading of blob urls 50349 var reader = new FileReader(); 50350 reader.onloadend = function() { 50351 var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); 50352 var popup = view.open(url, '_blank'); 50353 if(!popup) view.location.href = url; 50354 url=undefined; // release reference before dispatching 50355 filesaver.readyState = filesaver.DONE; 50356 dispatch_all(); 50357 };
50358 reader.readAsDataURL(blob); 50359 filesaver.readyState = filesaver.INIT; 50360 return; 50361 } 50362 // don't create more object URLs than needed 50363 if (!object_url) { 50364 object_url = get_URL().createObjectURL(blob); 50365 } 50366 if (force) { 50367 view.location.href = object_url; 50368 } else { 50369 var opened = view.open(object_url, "_blank"); 50370 if (!opened) { 50371 // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html 50372 view.location.href = object_url; 50373 } 50374 } 50375 filesaver.readyState = filesaver.DONE; 50376 dispatch_all(); 50377 revoke(object_url); 50378 } 50379 ; 50380 filesaver.readyState = filesaver.INIT; 50381 50382 if (can_use_save_link) { 50383 object_url = get_URL().createObjectURL(blob); 50384 setTimeout(function() { 50385 save_link.href = object_url; 50386 save_link.download = name; 50387 click(save_link); 50388 dispatch_all(); 50389 revoke(object_url); 50390 filesaver.readyState = filesaver.DONE; 50391 }); 50392 return; 50393 } 50394 50395 fs_error(); 50396 } 50397 , FS_proto = FileSaver.prototype 50398 , saveAs = function(blob, name, no_auto_bom) { 50399 return new FileSaver(blob, name || blob.name || "download", no_auto_bom); 50400 } 50401 ; 50402 // IE 10+ (native saveAs) 50403 if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { 50404 return function(blob, name, no_auto_bom) { 50405 name = name || blob.name || "download"; 50406 50407 if (!no_auto_bom) { 50408 blob = auto_bom(blob); 50409 } 50410 return navigator.msSaveOrOpenBlob(blob, name); 50411 }; 50412 } 50413 50414 FS_proto.abort = function(){}; 50415 FS_proto.readyState = FS_proto.INIT = 0; 50416 FS_proto.WRITING = 1; 50417 FS_proto.DONE = 2; 50418 50419 FS_proto.error = 50420 FS_proto.onwritestart = 50421 FS_proto.onprogress = 50422 FS_proto.onwrite = 50423 FS_proto.onabort = 50424 FS_proto.onerror = 50425 FS_proto.onwriteend = 50426 null; 50427 50428 return saveAs; 50429}( 50430 typeof self !== "undefined" && self 50431 || typeof window !== "undefined" && window 50432 || this.content 50433)); 50434// `self` is undefined in Firefox for Android content script context 50435// while `this` is nsIContentFrameMessageManager 50436// with an attribute `content` that corresponds to the window 50437 50438if (typeof module !== "undefined" && module.exports) { 50439 module.exports.saveAs = saveAs; 50440} else if (("function" !== "undefined" && __webpack_require__(307) !== null) && (__webpack_require__(308) !== null)) { 50441 !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() { 50442 return saveAs; 50443 }).call(exports, __webpack_require__, exports, module), 50444 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 50445} 50446 50447 50448/***/ }), 50449/* 307 */ 50450/***/ (function(module, exports) { 50451 50452module.exports = function() { 50453 throw new Error("define cannot be used indirect"); 50454}; 50455 50456 50457/***/ }), 50458/* 308 */ 50459/***/ (function(module, exports) { 50460 50461/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ 50462module.exports = __webpack_amd_options__; 50463 50464/* WEBPACK VAR INJECTION */}.call(exports, {})) 50465 50466/***/ }) 50467/******/ ]); 50468});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.