{"version":3,"sources":["kendo.dataviz.qrcode.js"],"names":["f","define","defined","value","UNDEFINED","round","precision","power","pow","math","p","limitValue","min","max","rad","degrees","DEG_TO_RAD","deg","radians","isNumber","val","isNaN","valueOrDefault","defaultValue","sqr","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","hashObject","arrayLimits","arr","MAX_NUM","MIN_NUM","arrayMin","arrayMax","sparseArrayMin","sparseArrayLimits","sparseArrayMax","n","isFinite","undefined","last","array","append","first","second","apply","renderTemplate","text","kendo","template","useWithBlock","paramName","renderAttr","name","renderAllAttr","attrs","output","renderStyle","renderSize","size","renderPos","pos","result","toHyphens","split","isTransparent","color","arabicToRoman","literals","1","10","100","2","20","200","3","30","300","4","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","values","roman","shift","romanToArabic","r","digits","prev","v","toLowerCase","x","l","c","d","m","charAt","memoize","cache","Object","create","id","arguments","this","ucs2decode","string","extra","counter","ucs2encode","map","String","fromCharCode","mergeSort","a","cmp","merge","b","ai","bi","slice","left","right","Math","floor","window","deepExtend","PI","Number","MAX_VALUE","now","Date","getTime","util","drawing","dataviz","amd","a1","a2","a3","$","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","loadFonts","fonts","callback","promises","document","font","load","e","logToConsole","Promise","all","then","doc","Class","LRUCache","extend","init","_size","_length","_map","put","lru","entry","_head","_tail","newer","older","get","defaultMeasureBox","options","_cache","_initOptions","baselineMarkerSize","box","styleKey","cacheKey","cachedResult","baselineMarker","_baselineMarker","cloneNode","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","jQuery","encodeBase64","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","encodeUTF8","KEY_STR","inArray","ObserversMixin","observers","_observers","addObserver","element","removeObserver","index","splice","trigger","methodName","event","observer","idx","_suspended","optionsChange","geometryChange","suspend","resume","_observerField","field","mixins","toDecimal","parseInt","toBitsString","toString","Array","splitInto","substring","fillFunctionCell","matrices","bit","y","fillDataCell","maskPatternConditions","generatePowersOfTwo","powersOfTwoResult","powersOfTwo","generateGeneratorPolynomials","firstPolynomial","secondPolynomial","maxErrorCorrectionCodeWordsCount","generatorPolynomials","multiplyPolynomials","multiplyByConstant","polynomial","getNumberAt","scoreFinderPatternOccurance","patterns","scores","rowColumn","finderPatternValue","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","total","percent","mod5","previous","abs","next","score","modeInstances","mode","FreeCellVisitor","fillData","padDataString","xorPolynomials","generateErrorCodewords","getBlocks","chooseMode","getModes","getDataCodewordsCount","getVersion","getDataString","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","draw","Widget","ui","Box2D","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","0","irregularAlignmentPatternsStartDistance","15","16","18","19","22","24","26","28","31","32","33","36","37","39","versionsCodewordsInformation","L","groups","totalDataCodewords","errorCodewordsPerBlock","M","Q","H","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","row","column","numberRegex","alphaPattern","alphaExclusiveSet","alphaRegex","RegExp","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","QRDataMode","getVersionIndex","version","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","encode","getStringBitsLength","getValue","modes","character","inputLength","mod3","characters","A","B","C","D","E","F","G","I","J","K","N","O","P","R","S","T","U","V","W","X","Y","Z"," ","%","*","+","-",".","/",":","code","Error","matrix","that","startColumn","dir","move","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","cell","blockIdx","j","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","data","errorCodewordsCount","divisor","generator","concat","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","groupIdx","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","exec","numericMatch","alpha","alphaMatch","alphaNumeric","alphaNumericMatch","test","nextMode","substr","ceil","dataCodewordsCount","errorCorrectionLevel","format","encodedString","formatNumber","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","formatString","quotient","mod","x1","y1","x2","y2","pattern","direction","nextX","nextY","pointsCount","points","startDistance","distance","k","minIdx","adjacentSameBits","getEncodingResult","inputString","encodingMode","fn","prototype","utfBOM","initialModeCountStringLength","dataLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","ranges","encoding","indexOf","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","call","wrapper","addClass","surfaceWrap","css","appendTo","surface","Surface","type","renderAs","setOptions","redraw","_getSize","clear","createVisual","visual","getSize","dimensions","_resize","_render","exportVisual","baseUnit","quietZoneSize","dataSize","contentSize","_value","border","padding","borderWidth","Group","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","path","MultiPath","fill","stroke","moveTo","lineTo","close","unpad","Path","fromRect","toRect","background","ExportMixin","plugin","QRCodeFunctions","QRCodeFields"],"mappings":"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","file":"kendo.dataviz.qrcode.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend;\n var DEG_TO_RAD = math.PI / 180, MAX_NUM = Number.MAX_VALUE, MIN_NUM = -Number.MAX_VALUE, UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function round(value, precision) {\n var power = pow(precision);\n return math.round(value * power) / power;\n }\n function pow(p) {\n if (p) {\n return math.pow(10, p);\n } else {\n return 1;\n }\n }\n function limitValue(value, min, max) {\n return math.max(math.min(value, max), min);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function sqr(value) {\n return value * value;\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function hashObject(object) {\n return hashKey(objectKey(object));\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function arrayLimits(arr) {\n var length = arr.length, i, min = MAX_NUM, max = MIN_NUM;\n for (i = 0; i < length; i++) {\n max = math.max(max, arr[i]);\n min = math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n function arrayMin(arr) {\n return arrayLimits(arr).min;\n }\n function arrayMax(arr) {\n return arrayLimits(arr).max;\n }\n function sparseArrayMin(arr) {\n return sparseArrayLimits(arr).min;\n }\n function sparseArrayMax(arr) {\n return sparseArrayLimits(arr).max;\n }\n function sparseArrayLimits(arr) {\n var min = MAX_NUM, max = MIN_NUM;\n for (var i = 0, length = arr.length; i < length; i++) {\n var n = arr[i];\n if (n !== null && isFinite(n)) {\n min = math.min(min, n);\n max = math.max(max, n);\n }\n }\n return {\n min: min === MAX_NUM ? undefined : min,\n max: max === MIN_NUM ? undefined : max\n };\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n function renderTemplate(text) {\n return kendo.template(text, {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function ucs2decode(string) {\n var output = [], counter = 0, length = string.length, value, extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < length) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function ucs2encode(array) {\n return array.map(function (value) {\n var output = '';\n if (value > 65535) {\n value -= 65536;\n output += String.fromCharCode(value >>> 10 & 1023 | 55296);\n value = 56320 | value & 1023;\n }\n output += String.fromCharCode(value);\n return output;\n }).join('');\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n deepExtend(kendo, {\n util: {\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM,\n append: append,\n arrayLimits: arrayLimits,\n arrayMin: arrayMin,\n arrayMax: arrayMax,\n defined: defined,\n deg: deg,\n hashKey: hashKey,\n hashObject: hashObject,\n isNumber: isNumber,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n now: now,\n objectKey: objectKey,\n round: round,\n rad: rad,\n renderAttr: renderAttr,\n renderAllAttr: renderAllAttr,\n renderPos: renderPos,\n renderSize: renderSize,\n renderStyle: renderStyle,\n renderTemplate: renderTemplate,\n sparseArrayLimits: sparseArrayLimits,\n sparseArrayMin: sparseArrayMin,\n sparseArrayMax: sparseArrayMax,\n sqr: sqr,\n valueOrDefault: valueOrDefault,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n ucs2encode: ucs2encode,\n ucs2decode: ucs2decode,\n mergeSort: mergeSort\n }\n });\n kendo.drawing.util = kendo.util;\n kendo.dataviz.util = kendo.util;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', [\n 'kendo.core',\n 'util/main'\n ], f);\n}(function () {\n (function ($) {\n var doc = document, kendo = window.kendo, Class = kendo.Class, util = kendo.util, defined = util.defined;\n var LRUCache = Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var lru = this, map = lru._map, entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!lru._head) {\n lru._head = lru._tail = entry;\n } else {\n lru._tail.newer = entry;\n entry.older = lru._tail;\n lru._tail = entry;\n }\n if (lru._length >= lru._size) {\n map[lru._head.key] = null;\n lru._head = lru._head.newer;\n lru._head.older = null;\n } else {\n lru._length++;\n }\n },\n get: function (key) {\n var lru = this, entry = lru._map[key];\n if (entry) {\n if (entry === lru._head && entry !== lru._tail) {\n lru._head = entry.newer;\n lru._head.older = null;\n }\n if (entry !== lru._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = lru._tail;\n entry.newer = null;\n lru._tail.newer = entry;\n lru._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var defaultMeasureBox = $('
')[0];\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var TextMetrics = Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this._initOptions(options);\n },\n options: { baselineMarkerSize: 1 },\n measure: function (text, style, box) {\n if (!text) {\n return zeroSize();\n }\n var styleKey = util.objectKey(style), cacheKey = util.hashKey(text + styleKey), cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = box ? box : defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (defined(value)) {\n measureBox.style[key] = value;\n }\n }\n $(measureBox).text(text);\n measureBox.appendChild(baselineMarker);\n doc.body.appendChild(measureBox);\n if ((text + '').length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n return $('')[0];\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n function loadFonts(fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n }\n kendo.util.TextMetrics = TextMetrics;\n kendo.util.LRUCache = LRUCache;\n kendo.util.loadFonts = loadFonts;\n kendo.util.measureText = measureText;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/base64', ['util/main'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend, fromCharCode = String.fromCharCode;\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function encodeBase64(input) {\n var output = '';\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n input = encodeUTF8(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n deepExtend(kendo.util, {\n encodeBase64: encodeBase64,\n encodeUTF8: encodeUTF8\n });\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('mixins/observers', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var math = Math, kendo = window.kendo, deepExtend = kendo.deepExtend, inArray = $.inArray;\n var ObserversMixin = {\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = inArray(element, observers);\n if (index != -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n var observer;\n var idx;\n if (observers && !this._suspended) {\n for (idx = 0; idx < observers.length; idx++) {\n observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n e = e || {};\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n deepExtend(kendo, { mixins: { ObserversMixin: ObserversMixin } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}