diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index fc95f9c7..2ae6659f 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -66,5 +66,6 @@ "better-word-count", "obsidian-open-weather", "obsidian-bulk-rename-plugin", - "recent-files-obsidian" + "recent-files-obsidian", + "msg-handler" ] \ No newline at end of file diff --git a/.obsidian/plugins/emoji-shortcodes/data.json b/.obsidian/plugins/emoji-shortcodes/data.json index 679e2d92..3229d1d0 100644 --- a/.obsidian/plugins/emoji-shortcodes/data.json +++ b/.obsidian/plugins/emoji-shortcodes/data.json @@ -4,6 +4,9 @@ "historyPriority": true, "historyLimit": 100, "history": [ + ":musical_score:", + ":tv:", + ":clapper:", ":soccer:", ":plate_with_cutlery:", ":car:", @@ -11,14 +14,12 @@ ":crocodile:", ":ferris_wheel:", ":cake:", - ":tv:", ":horse_racing:", ":fork_and_knife:", ":family_man_woman_girl_boy:", ":rugby_football:", ":birthday:", ":medical_symbol:", - ":clapper:", ":star:", ":racing_car:", ":hotel:", diff --git a/.obsidian/plugins/msg-handler/main.js b/.obsidian/plugins/msg-handler/main.js new file mode 100644 index 00000000..9b8f858b --- /dev/null +++ b/.obsidian/plugins/msg-handler/main.js @@ -0,0 +1,11649 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/fuzzysort/fuzzysort.js +var require_fuzzysort = __commonJS({ + "node_modules/fuzzysort/fuzzysort.js"(exports, module2) { + ((root, UMD) => { + if (typeof define === "function" && define.amd) + define([], UMD); + else if (typeof module2 === "object" && module2.exports) + module2.exports = UMD(); + else + root["fuzzysort"] = UMD(); + })(exports, (_3) => { + "use strict"; + var single = (search, target) => { + if (search == "farzher") + return { target: "farzher was here (^-^*)/", score: 0, _indexes: [0] }; + if (!search || !target) + return NULL; + var preparedSearch = getPreparedSearch(search); + if (!isObj(target)) + target = getPrepared(target); + var searchBitflags = preparedSearch.bitflags; + if ((searchBitflags & target._bitflags) !== searchBitflags) + return NULL; + return algorithm(preparedSearch, target); + }; + var go = (search, targets, options) => { + if (search == "farzher") + return [{ target: "farzher was here (^-^*)/", score: 0, _indexes: [0], obj: targets ? targets[0] : NULL }]; + if (!search) + return options && options.all ? all(search, targets, options) : noResults; + var preparedSearch = getPreparedSearch(search); + var searchBitflags = preparedSearch.bitflags; + var containsSpace = preparedSearch.containsSpace; + var threshold = options && options.threshold || INT_MIN; + var limit = options && options["limit"] || INT_MAX; + var resultsLen = 0; + var limitedCount = 0; + var targetsLen = targets.length; + if (options && options.key) { + var key = options.key; + for (var i4 = 0; i4 < targetsLen; ++i4) { + var obj = targets[i4]; + var target = getValue(obj, key); + if (!target) + continue; + if (!isObj(target)) + target = getPrepared(target); + if ((searchBitflags & target._bitflags) !== searchBitflags) + continue; + var result = algorithm(preparedSearch, target); + if (result === NULL) + continue; + if (result.score < threshold) + continue; + result = { target: result.target, _targetLower: "", _targetLowerCodes: NULL, _nextBeginningIndexes: NULL, _bitflags: 0, score: result.score, _indexes: result._indexes, obj }; + if (resultsLen < limit) { + q4.add(result); + ++resultsLen; + } else { + ++limitedCount; + if (result.score > q4.peek().score) + q4.replaceTop(result); + } + } + } else if (options && options.keys) { + var scoreFn = options["scoreFn"] || defaultScoreFn; + var keys2 = options.keys; + var keysLen = keys2.length; + for (var i4 = 0; i4 < targetsLen; ++i4) { + var obj = targets[i4]; + var objResults = new Array(keysLen); + for (var keyI = 0; keyI < keysLen; ++keyI) { + var key = keys2[keyI]; + var target = getValue(obj, key); + if (!target) { + objResults[keyI] = NULL; + continue; + } + if (!isObj(target)) + target = getPrepared(target); + if ((searchBitflags & target._bitflags) !== searchBitflags) + objResults[keyI] = NULL; + else + objResults[keyI] = algorithm(preparedSearch, target); + } + objResults.obj = obj; + var score = scoreFn(objResults); + if (score === NULL) + continue; + if (score < threshold) + continue; + objResults.score = score; + if (resultsLen < limit) { + q4.add(objResults); + ++resultsLen; + } else { + ++limitedCount; + if (score > q4.peek().score) + q4.replaceTop(objResults); + } + } + } else { + for (var i4 = 0; i4 < targetsLen; ++i4) { + var target = targets[i4]; + if (!target) + continue; + if (!isObj(target)) + target = getPrepared(target); + if ((searchBitflags & target._bitflags) !== searchBitflags) + continue; + var result = algorithm(preparedSearch, target); + if (result === NULL) + continue; + if (result.score < threshold) + continue; + if (resultsLen < limit) { + q4.add(result); + ++resultsLen; + } else { + ++limitedCount; + if (result.score > q4.peek().score) + q4.replaceTop(result); + } + } + } + if (resultsLen === 0) + return noResults; + var results = new Array(resultsLen); + for (var i4 = resultsLen - 1; i4 >= 0; --i4) + results[i4] = q4.poll(); + results.total = resultsLen + limitedCount; + return results; + }; + var highlight = (result, hOpen, hClose) => { + if (typeof hOpen === "function") + return highlightCallback(result, hOpen); + if (result === NULL) + return NULL; + if (hOpen === void 0) + hOpen = ""; + if (hClose === void 0) + hClose = ""; + var highlighted = ""; + var matchesIndex = 0; + var opened = false; + var target = result.target; + var targetLen = target.length; + var indexes2 = result._indexes; + indexes2 = indexes2.slice(0, indexes2.len).sort((a3, b3) => a3 - b3); + for (var i4 = 0; i4 < targetLen; ++i4) { + var char = target[i4]; + if (indexes2[matchesIndex] === i4) { + ++matchesIndex; + if (!opened) { + opened = true; + highlighted += hOpen; + } + if (matchesIndex === indexes2.length) { + highlighted += char + hClose + target.substr(i4 + 1); + break; + } + } else { + if (opened) { + opened = false; + highlighted += hClose; + } + } + highlighted += char; + } + return highlighted; + }; + var highlightCallback = (result, cb) => { + if (result === NULL) + return NULL; + var target = result.target; + var targetLen = target.length; + var indexes2 = result._indexes; + indexes2 = indexes2.slice(0, indexes2.len).sort((a3, b3) => a3 - b3); + var highlighted = ""; + var matchI = 0; + var indexesI = 0; + var opened = false; + var result = []; + for (var i4 = 0; i4 < targetLen; ++i4) { + var char = target[i4]; + if (indexes2[indexesI] === i4) { + ++indexesI; + if (!opened) { + opened = true; + result.push(highlighted); + highlighted = ""; + } + if (indexesI === indexes2.length) { + highlighted += char; + result.push(cb(highlighted, matchI++)); + highlighted = ""; + result.push(target.substr(i4 + 1)); + break; + } + } else { + if (opened) { + opened = false; + result.push(cb(highlighted, matchI++)); + highlighted = ""; + } + } + highlighted += char; + } + return result; + }; + var indexes = (result) => result._indexes.slice(0, result._indexes.len).sort((a3, b3) => a3 - b3); + var prepare = (target) => { + if (typeof target !== "string") + target = ""; + var info = prepareLowerInfo(target); + return { "target": target, _targetLower: info._lower, _targetLowerCodes: info.lowerCodes, _nextBeginningIndexes: NULL, _bitflags: info.bitflags, "score": NULL, _indexes: [0], "obj": NULL }; + }; + var prepareSearch = (search) => { + if (typeof search !== "string") + search = ""; + search = search.trim(); + var info = prepareLowerInfo(search); + var spaceSearches = []; + if (info.containsSpace) { + var searches = search.split(/\s+/); + searches = [...new Set(searches)]; + for (var i4 = 0; i4 < searches.length; i4++) { + if (searches[i4] === "") + continue; + var _info = prepareLowerInfo(searches[i4]); + spaceSearches.push({ lowerCodes: _info.lowerCodes, _lower: searches[i4].toLowerCase(), containsSpace: false }); + } + } + return { lowerCodes: info.lowerCodes, bitflags: info.bitflags, containsSpace: info.containsSpace, _lower: info._lower, spaceSearches }; + }; + var getPrepared = (target) => { + if (target.length > 999) + return prepare(target); + var targetPrepared = preparedCache.get(target); + if (targetPrepared !== void 0) + return targetPrepared; + targetPrepared = prepare(target); + preparedCache.set(target, targetPrepared); + return targetPrepared; + }; + var getPreparedSearch = (search) => { + if (search.length > 999) + return prepareSearch(search); + var searchPrepared = preparedSearchCache.get(search); + if (searchPrepared !== void 0) + return searchPrepared; + searchPrepared = prepareSearch(search); + preparedSearchCache.set(search, searchPrepared); + return searchPrepared; + }; + var all = (search, targets, options) => { + var results = []; + results.total = targets.length; + var limit = options && options.limit || INT_MAX; + if (options && options.key) { + for (var i4 = 0; i4 < targets.length; i4++) { + var obj = targets[i4]; + var target = getValue(obj, options.key); + if (!target) + continue; + if (!isObj(target)) + target = getPrepared(target); + target.score = INT_MIN; + target._indexes.len = 0; + var result = target; + result = { target: result.target, _targetLower: "", _targetLowerCodes: NULL, _nextBeginningIndexes: NULL, _bitflags: 0, score: target.score, _indexes: NULL, obj }; + results.push(result); + if (results.length >= limit) + return results; + } + } else if (options && options.keys) { + for (var i4 = 0; i4 < targets.length; i4++) { + var obj = targets[i4]; + var objResults = new Array(options.keys.length); + for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) { + var target = getValue(obj, options.keys[keyI]); + if (!target) { + objResults[keyI] = NULL; + continue; + } + if (!isObj(target)) + target = getPrepared(target); + target.score = INT_MIN; + target._indexes.len = 0; + objResults[keyI] = target; + } + objResults.obj = obj; + objResults.score = INT_MIN; + results.push(objResults); + if (results.length >= limit) + return results; + } + } else { + for (var i4 = 0; i4 < targets.length; i4++) { + var target = targets[i4]; + if (!target) + continue; + if (!isObj(target)) + target = getPrepared(target); + target.score = INT_MIN; + target._indexes.len = 0; + results.push(target); + if (results.length >= limit) + return results; + } + } + return results; + }; + var algorithm = (preparedSearch, prepared, allowSpaces = false) => { + if (allowSpaces === false && preparedSearch.containsSpace) + return algorithmSpaces(preparedSearch, prepared); + var searchLower = preparedSearch._lower; + var searchLowerCodes = preparedSearch.lowerCodes; + var searchLowerCode = searchLowerCodes[0]; + var targetLowerCodes = prepared._targetLowerCodes; + var searchLen = searchLowerCodes.length; + var targetLen = targetLowerCodes.length; + var searchI = 0; + var targetI = 0; + var matchesSimpleLen = 0; + for (; ; ) { + var isMatch = searchLowerCode === targetLowerCodes[targetI]; + if (isMatch) { + matchesSimple[matchesSimpleLen++] = targetI; + ++searchI; + if (searchI === searchLen) + break; + searchLowerCode = searchLowerCodes[searchI]; + } + ++targetI; + if (targetI >= targetLen) + return NULL; + } + var searchI = 0; + var successStrict = false; + var matchesStrictLen = 0; + var nextBeginningIndexes = prepared._nextBeginningIndexes; + if (nextBeginningIndexes === NULL) + nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target); + var firstPossibleI = targetI = matchesSimple[0] === 0 ? 0 : nextBeginningIndexes[matchesSimple[0] - 1]; + var backtrackCount = 0; + if (targetI !== targetLen) + for (; ; ) { + if (targetI >= targetLen) { + if (searchI <= 0) + break; + ++backtrackCount; + if (backtrackCount > 200) + break; + --searchI; + var lastMatch = matchesStrict[--matchesStrictLen]; + targetI = nextBeginningIndexes[lastMatch]; + } else { + var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]; + if (isMatch) { + matchesStrict[matchesStrictLen++] = targetI; + ++searchI; + if (searchI === searchLen) { + successStrict = true; + break; + } + ++targetI; + } else { + targetI = nextBeginningIndexes[targetI]; + } + } + } + var substringIndex = prepared._targetLower.indexOf(searchLower, matchesSimple[0]); + var isSubstring = ~substringIndex; + if (isSubstring && !successStrict) { + for (var i4 = 0; i4 < matchesSimpleLen; ++i4) + matchesSimple[i4] = substringIndex + i4; + } + var isSubstringBeginning = false; + if (isSubstring) { + isSubstringBeginning = prepared._nextBeginningIndexes[substringIndex - 1] === substringIndex; + } + { + if (successStrict) { + var matchesBest = matchesStrict; + var matchesBestLen = matchesStrictLen; + } else { + var matchesBest = matchesSimple; + var matchesBestLen = matchesSimpleLen; + } + var score = 0; + var extraMatchGroupCount = 0; + for (var i4 = 1; i4 < searchLen; ++i4) { + if (matchesBest[i4] - matchesBest[i4 - 1] !== 1) { + score -= matchesBest[i4]; + ++extraMatchGroupCount; + } + } + var unmatchedDistance = matchesBest[searchLen - 1] - matchesBest[0] - (searchLen - 1); + score -= (12 + unmatchedDistance) * extraMatchGroupCount; + if (matchesBest[0] !== 0) + score -= matchesBest[0] * matchesBest[0] * 0.2; + if (!successStrict) { + score *= 1e3; + } else { + var uniqueBeginningIndexes = 1; + for (var i4 = nextBeginningIndexes[0]; i4 < targetLen; i4 = nextBeginningIndexes[i4]) + ++uniqueBeginningIndexes; + if (uniqueBeginningIndexes > 24) + score *= (uniqueBeginningIndexes - 24) * 10; + } + if (isSubstring) + score /= 1 + searchLen * searchLen * 1; + if (isSubstringBeginning) + score /= 1 + searchLen * searchLen * 1; + score -= targetLen - searchLen; + prepared.score = score; + for (var i4 = 0; i4 < matchesBestLen; ++i4) + prepared._indexes[i4] = matchesBest[i4]; + prepared._indexes.len = matchesBestLen; + return prepared; + } + }; + var algorithmSpaces = (preparedSearch, target) => { + var seen_indexes = /* @__PURE__ */ new Set(); + var score = 0; + var result = NULL; + var first_seen_index_last_search = 0; + var searches = preparedSearch.spaceSearches; + for (var i4 = 0; i4 < searches.length; ++i4) { + var search = searches[i4]; + result = algorithm(search, target); + if (result === NULL) + return NULL; + score += result.score; + if (result._indexes[0] < first_seen_index_last_search) { + score -= first_seen_index_last_search - result._indexes[0]; + } + first_seen_index_last_search = result._indexes[0]; + for (var j4 = 0; j4 < result._indexes.len; ++j4) + seen_indexes.add(result._indexes[j4]); + } + var allowSpacesResult = algorithm( + preparedSearch, + target, + /*allowSpaces=*/ + true + ); + if (allowSpacesResult !== NULL && allowSpacesResult.score > score) { + return allowSpacesResult; + } + result.score = score; + var i4 = 0; + for (let index of seen_indexes) + result._indexes[i4++] = index; + result._indexes.len = i4; + return result; + }; + var prepareLowerInfo = (str) => { + var strLen = str.length; + var lower = str.toLowerCase(); + var lowerCodes = []; + var bitflags = 0; + var containsSpace = false; + for (var i4 = 0; i4 < strLen; ++i4) { + var lowerCode = lowerCodes[i4] = lower.charCodeAt(i4); + if (lowerCode === 32) { + containsSpace = true; + continue; + } + var bit = lowerCode >= 97 && lowerCode <= 122 ? lowerCode - 97 : lowerCode >= 48 && lowerCode <= 57 ? 26 : lowerCode <= 127 ? 30 : 31; + bitflags |= 1 << bit; + } + return { lowerCodes, bitflags, containsSpace, _lower: lower }; + }; + var prepareBeginningIndexes = (target) => { + var targetLen = target.length; + var beginningIndexes = []; + var beginningIndexesLen = 0; + var wasUpper = false; + var wasAlphanum = false; + for (var i4 = 0; i4 < targetLen; ++i4) { + var targetCode = target.charCodeAt(i4); + var isUpper = targetCode >= 65 && targetCode <= 90; + var isAlphanum = isUpper || targetCode >= 97 && targetCode <= 122 || targetCode >= 48 && targetCode <= 57; + var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum; + wasUpper = isUpper; + wasAlphanum = isAlphanum; + if (isBeginning) + beginningIndexes[beginningIndexesLen++] = i4; + } + return beginningIndexes; + }; + var prepareNextBeginningIndexes = (target) => { + var targetLen = target.length; + var beginningIndexes = prepareBeginningIndexes(target); + var nextBeginningIndexes = []; + var lastIsBeginning = beginningIndexes[0]; + var lastIsBeginningI = 0; + for (var i4 = 0; i4 < targetLen; ++i4) { + if (lastIsBeginning > i4) { + nextBeginningIndexes[i4] = lastIsBeginning; + } else { + lastIsBeginning = beginningIndexes[++lastIsBeginningI]; + nextBeginningIndexes[i4] = lastIsBeginning === void 0 ? targetLen : lastIsBeginning; + } + } + return nextBeginningIndexes; + }; + var cleanup = () => { + preparedCache.clear(); + preparedSearchCache.clear(); + matchesSimple = []; + matchesStrict = []; + }; + var preparedCache = /* @__PURE__ */ new Map(); + var preparedSearchCache = /* @__PURE__ */ new Map(); + var matchesSimple = []; + var matchesStrict = []; + var defaultScoreFn = (a3) => { + var max = INT_MIN; + var len = a3.length; + for (var i4 = 0; i4 < len; ++i4) { + var result = a3[i4]; + if (result === NULL) + continue; + var score = result.score; + if (score > max) + max = score; + } + if (max === INT_MIN) + return NULL; + return max; + }; + var getValue = (obj, prop) => { + var tmp = obj[prop]; + if (tmp !== void 0) + return tmp; + var segs = prop; + if (!Array.isArray(prop)) + segs = prop.split("."); + var len = segs.length; + var i4 = -1; + while (obj && ++i4 < len) + obj = obj[segs[i4]]; + return obj; + }; + var isObj = (x4) => { + return typeof x4 === "object"; + }; + var INT_MAX = Infinity; + var INT_MIN = -INT_MAX; + var noResults = []; + noResults.total = 0; + var NULL = null; + var fastpriorityqueue = (r3) => { + var e3 = [], o3 = 0, a3 = {}, v3 = (r4) => { + for (var a4 = 0, v4 = e3[a4], c4 = 1; c4 < o3; ) { + var s4 = c4 + 1; + a4 = c4, s4 < o3 && e3[s4].score < e3[c4].score && (a4 = s4), e3[a4 - 1 >> 1] = e3[a4], c4 = 1 + (a4 << 1); + } + for (var f3 = a4 - 1 >> 1; a4 > 0 && v4.score < e3[f3].score; f3 = (a4 = f3) - 1 >> 1) + e3[a4] = e3[f3]; + e3[a4] = v4; + }; + return a3.add = (r4) => { + var a4 = o3; + e3[o3++] = r4; + for (var v4 = a4 - 1 >> 1; a4 > 0 && r4.score < e3[v4].score; v4 = (a4 = v4) - 1 >> 1) + e3[a4] = e3[v4]; + e3[a4] = r4; + }, a3.poll = (r4) => { + if (0 !== o3) { + var a4 = e3[0]; + return e3[0] = e3[--o3], v3(), a4; + } + }, a3.peek = (r4) => { + if (0 !== o3) + return e3[0]; + }, a3.replaceTop = (r4) => { + e3[0] = r4, v3(); + }, a3; + }; + var q4 = fastpriorityqueue(); + return { "single": single, "go": go, "highlight": highlight, "prepare": prepare, "indexes": indexes, "cleanup": cleanup }; + }); + } +}); + +// src/modules/msgreader.js +var require_msgreader = __commonJS({ + "src/modules/msgreader.js"(exports, module2) { + DataStream = function(arrayBuffer, byteOffset, endianness) { + this._byteOffset = byteOffset || 0; + if (arrayBuffer instanceof ArrayBuffer) { + this.buffer = arrayBuffer; + } else if (typeof arrayBuffer == "object") { + this.dataView = arrayBuffer; + if (byteOffset) { + this._byteOffset += byteOffset; + } + } else { + this.buffer = new ArrayBuffer(arrayBuffer || 1); + } + this.position = 0; + this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness; + }; + DataStream.prototype = {}; + if (Uint8Array.prototype.BYTES_PER_ELEMENT === void 0) { + Uint8Array.prototype.BYTES_PER_ELEMENT = Uint8Array.BYTES_PER_ELEMENT; + Int8Array.prototype.BYTES_PER_ELEMENT = Int8Array.BYTES_PER_ELEMENT; + Uint8ClampedArray.prototype.BYTES_PER_ELEMENT = Uint8ClampedArray.BYTES_PER_ELEMENT; + Uint16Array.prototype.BYTES_PER_ELEMENT = Uint16Array.BYTES_PER_ELEMENT; + Int16Array.prototype.BYTES_PER_ELEMENT = Int16Array.BYTES_PER_ELEMENT; + Uint32Array.prototype.BYTES_PER_ELEMENT = Uint32Array.BYTES_PER_ELEMENT; + Int32Array.prototype.BYTES_PER_ELEMENT = Int32Array.BYTES_PER_ELEMENT; + Float64Array.prototype.BYTES_PER_ELEMENT = Float64Array.BYTES_PER_ELEMENT; + } + DataStream.prototype.save = function(filename) { + var blob = new Blob(this.buffer); + var URL = window.webkitURL || window.URL; + if (URL && URL.createObjectURL) { + var url = URL.createObjectURL(blob); + var a3 = document.createElement("a"); + a3.setAttribute("href", url); + a3.setAttribute("download", filename); + a3.click(); + URL.revokeObjectURL(url); + } else { + throw "DataStream.save: Can't create object URL."; + } + }; + DataStream.BIG_ENDIAN = false; + DataStream.LITTLE_ENDIAN = true; + DataStream.prototype._dynamicSize = true; + Object.defineProperty(DataStream.prototype, "dynamicSize", { + get: function() { + return this._dynamicSize; + }, + set: function(v3) { + if (!v3) { + this._trimAlloc(); + } + this._dynamicSize = v3; + } + }); + DataStream.prototype._byteLength = 0; + Object.defineProperty(DataStream.prototype, "byteLength", { + get: function() { + return this._byteLength - this._byteOffset; + } + }); + Object.defineProperty(DataStream.prototype, "buffer", { + get: function() { + this._trimAlloc(); + return this._buffer; + }, + set: function(v3) { + this._buffer = v3; + this._dataView = new DataView(this._buffer, this._byteOffset); + this._byteLength = this._buffer.byteLength; + } + }); + Object.defineProperty(DataStream.prototype, "byteOffset", { + get: function() { + return this._byteOffset; + }, + set: function(v3) { + this._byteOffset = v3; + this._dataView = new DataView(this._buffer, this._byteOffset); + this._byteLength = this._buffer.byteLength; + } + }); + Object.defineProperty(DataStream.prototype, "dataView", { + get: function() { + return this._dataView; + }, + set: function(v3) { + this._byteOffset = v3.byteOffset; + this._buffer = v3.buffer; + this._dataView = new DataView(this._buffer, this._byteOffset); + this._byteLength = this._byteOffset + v3.byteLength; + } + }); + DataStream.prototype._realloc = function(extra) { + if (!this._dynamicSize) { + return; + } + var req = this._byteOffset + this.position + extra; + var blen = this._buffer.byteLength; + if (req <= blen) { + if (req > this._byteLength) { + this._byteLength = req; + } + return; + } + if (blen < 1) { + blen = 1; + } + while (req > blen) { + blen *= 2; + } + var buf = new ArrayBuffer(blen); + var src = new Uint8Array(this._buffer); + var dst = new Uint8Array(buf, 0, src.length); + dst.set(src); + this.buffer = buf; + this._byteLength = req; + }; + DataStream.prototype._trimAlloc = function() { + if (this._byteLength == this._buffer.byteLength) { + return; + } + var buf = new ArrayBuffer(this._byteLength); + var dst = new Uint8Array(buf); + var src = new Uint8Array(this._buffer, 0, dst.length); + dst.set(src); + this.buffer = buf; + }; + DataStream.prototype.seek = function(pos) { + var npos = Math.max(0, Math.min(this.byteLength, pos)); + this.position = isNaN(npos) || !isFinite(npos) ? 0 : npos; + }; + DataStream.prototype.isEof = function() { + return this.position >= this.byteLength; + }; + DataStream.prototype.mapInt32Array = function(length, e3) { + this._realloc(length * 4); + var arr = new Int32Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 4; + return arr; + }; + DataStream.prototype.mapInt16Array = function(length, e3) { + this._realloc(length * 2); + var arr = new Int16Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 2; + return arr; + }; + DataStream.prototype.mapInt8Array = function(length) { + this._realloc(length * 1); + var arr = new Int8Array(this._buffer, this.byteOffset + this.position, length); + this.position += length * 1; + return arr; + }; + DataStream.prototype.mapUint32Array = function(length, e3) { + this._realloc(length * 4); + var arr = new Uint32Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 4; + return arr; + }; + DataStream.prototype.mapUint16Array = function(length, e3) { + this._realloc(length * 2); + var arr = new Uint16Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 2; + return arr; + }; + DataStream.prototype.mapUint8Array = function(length) { + this._realloc(length * 1); + var arr = new Uint8Array(this._buffer, this.byteOffset + this.position, length); + this.position += length * 1; + return arr; + }; + DataStream.prototype.mapFloat64Array = function(length, e3) { + this._realloc(length * 8); + var arr = new Float64Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 8; + return arr; + }; + DataStream.prototype.mapFloat32Array = function(length, e3) { + this._realloc(length * 4); + var arr = new Float32Array(this._buffer, this.byteOffset + this.position, length); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += length * 4; + return arr; + }; + DataStream.prototype.readInt32Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 4 : length; + var arr = new Int32Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readInt16Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 2 : length; + var arr = new Int16Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readInt8Array = function(length) { + length = length == null ? this.byteLength - this.position : length; + var arr = new Int8Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readUint32Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 4 : length; + var arr = new Uint32Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readUint16Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 2 : length; + var arr = new Uint16Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readUint8Array = function(length) { + length = length == null ? this.byteLength - this.position : length; + var arr = new Uint8Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readFloat64Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 8 : length; + var arr = new Float64Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.readFloat32Array = function(length, e3) { + length = length == null ? this.byteLength - this.position / 4 : length; + var arr = new Float32Array(length); + DataStream.memcpy(arr.buffer, 0, this.buffer, this.byteOffset + this.position, length * arr.BYTES_PER_ELEMENT); + DataStream.arrayToNative(arr, e3 == null ? this.endianness : e3); + this.position += arr.byteLength; + return arr; + }; + DataStream.prototype.writeInt32Array = function(arr, e3) { + this._realloc(arr.length * 4); + if (arr instanceof Int32Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapInt32Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeInt32(arr[i4], e3); + } + } + }; + DataStream.prototype.writeInt16Array = function(arr, e3) { + this._realloc(arr.length * 2); + if (arr instanceof Int16Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapInt16Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeInt16(arr[i4], e3); + } + } + }; + DataStream.prototype.writeInt8Array = function(arr) { + this._realloc(arr.length * 1); + if (arr instanceof Int8Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapInt8Array(arr.length); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeInt8(arr[i4]); + } + } + }; + DataStream.prototype.writeUint32Array = function(arr, e3) { + this._realloc(arr.length * 4); + if (arr instanceof Uint32Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapUint32Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeUint32(arr[i4], e3); + } + } + }; + DataStream.prototype.writeUint16Array = function(arr, e3) { + this._realloc(arr.length * 2); + if (arr instanceof Uint16Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapUint16Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeUint16(arr[i4], e3); + } + } + }; + DataStream.prototype.writeUint8Array = function(arr) { + this._realloc(arr.length * 1); + if (arr instanceof Uint8Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapUint8Array(arr.length); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeUint8(arr[i4]); + } + } + }; + DataStream.prototype.writeFloat64Array = function(arr, e3) { + this._realloc(arr.length * 8); + if (arr instanceof Float64Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapFloat64Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeFloat64(arr[i4], e3); + } + } + }; + DataStream.prototype.writeFloat32Array = function(arr, e3) { + this._realloc(arr.length * 4); + if (arr instanceof Float32Array && this.byteOffset + this.position % arr.BYTES_PER_ELEMENT == 0) { + DataStream.memcpy(this._buffer, this.byteOffset + this.position, arr.buffer, 0, arr.byteLength); + this.mapFloat32Array(arr.length, e3); + } else { + for (var i4 = 0; i4 < arr.length; i4++) { + this.writeFloat32(arr[i4], e3); + } + } + }; + DataStream.prototype.readInt32 = function(e3) { + var v3 = this._dataView.getInt32(this.position, e3 == null ? this.endianness : e3); + this.position += 4; + return v3; + }; + DataStream.prototype.readInt = function(offset) { + this.seek(offset); + return this.readInt32(); + }; + DataStream.prototype.readInt16 = function(e3) { + var v3 = this._dataView.getInt16(this.position, e3 == null ? this.endianness : e3); + this.position += 2; + return v3; + }; + DataStream.prototype.readShort = function(offset) { + this.seek(offset); + return this.readInt16(); + }; + DataStream.prototype.readInt8 = function() { + var v3 = this._dataView.getInt8(this.position); + this.position += 1; + return v3; + }; + DataStream.prototype.readByte = function(offset) { + this.seek(offset); + return this.readInt8(); + }; + DataStream.prototype.readUint32 = function(e3) { + var v3 = this._dataView.getUint32(this.position, e3 == null ? this.endianness : e3); + this.position += 4; + return v3; + }; + DataStream.prototype.readUint16 = function(e3) { + var v3 = this._dataView.getUint16(this.position, e3 == null ? this.endianness : e3); + this.position += 2; + return v3; + }; + DataStream.prototype.readUint8 = function() { + var v3 = this._dataView.getUint8(this.position); + this.position += 1; + return v3; + }; + DataStream.prototype.readFloat32 = function(e3) { + var v3 = this._dataView.getFloat32(this.position, e3 == null ? this.endianness : e3); + this.position += 4; + return v3; + }; + DataStream.prototype.readFloat64 = function(e3) { + var v3 = this._dataView.getFloat64(this.position, e3 == null ? this.endianness : e3); + this.position += 8; + return v3; + }; + DataStream.prototype.writeInt32 = function(v3, e3) { + this._realloc(4); + this._dataView.setInt32(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 4; + }; + DataStream.prototype.writeInt16 = function(v3, e3) { + this._realloc(2); + this._dataView.setInt16(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 2; + }; + DataStream.prototype.writeInt8 = function(v3) { + this._realloc(1); + this._dataView.setInt8(this.position, v3); + this.position += 1; + }; + DataStream.prototype.writeUint32 = function(v3, e3) { + this._realloc(4); + this._dataView.setUint32(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 4; + }; + DataStream.prototype.writeUint16 = function(v3, e3) { + this._realloc(2); + this._dataView.setUint16(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 2; + }; + DataStream.prototype.writeUint8 = function(v3) { + this._realloc(1); + this._dataView.setUint8(this.position, v3); + this.position += 1; + }; + DataStream.prototype.writeFloat32 = function(v3, e3) { + this._realloc(4); + this._dataView.setFloat32(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 4; + }; + DataStream.prototype.writeFloat64 = function(v3, e3) { + this._realloc(8); + this._dataView.setFloat64(this.position, v3, e3 == null ? this.endianness : e3); + this.position += 8; + }; + DataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0; + DataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) { + var dstU8 = new Uint8Array(dst, dstOffset, byteLength); + var srcU8 = new Uint8Array(src, srcOffset, byteLength); + dstU8.set(srcU8); + }; + DataStream.arrayToNative = function(array, arrayIsLittleEndian) { + if (arrayIsLittleEndian == this.endianness) { + return array; + } else { + return this.flipArrayEndianness(array); + } + }; + DataStream.nativeToEndian = function(array, littleEndian) { + if (this.endianness == littleEndian) { + return array; + } else { + return this.flipArrayEndianness(array); + } + }; + DataStream.flipArrayEndianness = function(array) { + var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength); + for (var i4 = 0; i4 < array.byteLength; i4 += array.BYTES_PER_ELEMENT) { + for (var j4 = i4 + array.BYTES_PER_ELEMENT - 1, k4 = i4; j4 > k4; j4--, k4++) { + var tmp = u8[k4]; + u8[k4] = u8[j4]; + u8[j4] = tmp; + } + } + return array; + }; + DataStream.createStringFromArray = function(array) { + var str = ""; + for (var i4 = 0; i4 < array.length; i4++) { + str += String.fromCharCode(array[i4]); + } + return str; + }; + DataStream.prototype.failurePosition = 0; + DataStream.prototype.readStruct = function(structDefinition) { + var struct = {}, t3, v3, n3; + var p3 = this.position; + for (var i4 = 0; i4 < structDefinition.length; i4 += 2) { + t3 = structDefinition[i4 + 1]; + v3 = this.readType(t3, struct); + if (v3 == null) { + if (this.failurePosition == 0) { + this.failurePosition = this.position; + } + this.position = p3; + return null; + } + struct[structDefinition[i4]] = v3; + } + return struct; + }; + DataStream.prototype.readUCS2String = function(length, endianness) { + return DataStream.createStringFromArray(this.readUint16Array(length, endianness)); + }; + DataStream.prototype.readStringAt = function(offset, length) { + this.seek(offset); + return this.readUCS2String(length); + }; + DataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) { + if (lengthOverride == null) { + lengthOverride = str.length; + } + for (var i4 = 0; i4 < str.length && i4 < lengthOverride; i4++) { + this.writeUint16(str.charCodeAt(i4), endianness); + } + for (; i4 < lengthOverride; i4++) { + this.writeUint16(0); + } + }; + DataStream.prototype.readString = function(length, encoding) { + if (encoding == null || encoding == "ASCII") { + return DataStream.createStringFromArray( + this.mapUint8Array(length == null ? this.byteLength - this.position : length) + ); + } else { + return new TextDecoder(encoding).decode(this.mapUint8Array(length)); + } + }; + DataStream.prototype.writeString = function(s4, encoding, length) { + if (encoding == null || encoding == "ASCII") { + if (length != null) { + var i4 = 0; + var len = Math.min(s4.length, length); + for (i4 = 0; i4 < len; i4++) { + this.writeUint8(s4.charCodeAt(i4)); + } + for (; i4 < length; i4++) { + this.writeUint8(0); + } + } else { + for (var i4 = 0; i4 < s4.length; i4++) { + this.writeUint8(s4.charCodeAt(i4)); + } + } + } else { + this.writeUint8Array(new TextEncoder(encoding).encode(s4.substring(0, length))); + } + }; + DataStream.prototype.readCString = function(length) { + var blen = this.byteLength - this.position; + var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position); + var len = blen; + if (length != null) { + len = Math.min(length, blen); + } + for (var i4 = 0; i4 < len && u8[i4] != 0; i4++) + ; + var s4 = DataStream.createStringFromArray(this.mapUint8Array(i4)); + if (length != null) { + this.position += len - i4; + } else if (i4 != blen) { + this.position += 1; + } + return s4; + }; + DataStream.prototype.writeCString = function(s4, length) { + if (length != null) { + var i4 = 0; + var len = Math.min(s4.length, length); + for (i4 = 0; i4 < len; i4++) { + this.writeUint8(s4.charCodeAt(i4)); + } + for (; i4 < length; i4++) { + this.writeUint8(0); + } + } else { + for (var i4 = 0; i4 < s4.length; i4++) { + this.writeUint8(s4.charCodeAt(i4)); + } + this.writeUint8(0); + } + }; + DataStream.prototype.readType = function(t3, struct) { + if (typeof t3 == "function") { + return t3(this, struct); + } else if (typeof t3 == "object" && !(t3 instanceof Array)) { + return t3.get(this, struct); + } else if (t3 instanceof Array && t3.length != 3) { + return this.readStruct(t3, struct); + } + var v3 = null; + var lengthOverride = null; + var charset = "ASCII"; + var pos = this.position; + var len; + if (typeof t3 == "string" && /:/.test(t3)) { + var tp = t3.split(":"); + t3 = tp[0]; + len = tp[1]; + if (struct[len] != null) { + lengthOverride = parseInt(struct[len]); + } else { + lengthOverride = parseInt(tp[1]); + } + } + if (typeof t3 == "string" && /,/.test(t3)) { + var tp = t3.split(","); + t3 = tp[0]; + charset = parseInt(tp[1]); + } + switch (t3) { + case "uint8": + v3 = this.readUint8(); + break; + case "int8": + v3 = this.readInt8(); + break; + case "uint16": + v3 = this.readUint16(this.endianness); + break; + case "int16": + v3 = this.readInt16(this.endianness); + break; + case "uint32": + v3 = this.readUint32(this.endianness); + break; + case "int32": + v3 = this.readInt32(this.endianness); + break; + case "float32": + v3 = this.readFloat32(this.endianness); + break; + case "float64": + v3 = this.readFloat64(this.endianness); + break; + case "uint16be": + v3 = this.readUint16(DataStream.BIG_ENDIAN); + break; + case "int16be": + v3 = this.readInt16(DataStream.BIG_ENDIAN); + break; + case "uint32be": + v3 = this.readUint32(DataStream.BIG_ENDIAN); + break; + case "int32be": + v3 = this.readInt32(DataStream.BIG_ENDIAN); + break; + case "float32be": + v3 = this.readFloat32(DataStream.BIG_ENDIAN); + break; + case "float64be": + v3 = this.readFloat64(DataStream.BIG_ENDIAN); + break; + case "uint16le": + v3 = this.readUint16(DataStream.LITTLE_ENDIAN); + break; + case "int16le": + v3 = this.readInt16(DataStream.LITTLE_ENDIAN); + break; + case "uint32le": + v3 = this.readUint32(DataStream.LITTLE_ENDIAN); + break; + case "int32le": + v3 = this.readInt32(DataStream.LITTLE_ENDIAN); + break; + case "float32le": + v3 = this.readFloat32(DataStream.LITTLE_ENDIAN); + break; + case "float64le": + v3 = this.readFloat64(DataStream.LITTLE_ENDIAN); + break; + case "cstring": + v3 = this.readCString(lengthOverride); + break; + case "string": + v3 = this.readString(lengthOverride, charset); + break; + case "u16string": + v3 = this.readUCS2String(lengthOverride, this.endianness); + break; + case "u16stringle": + v3 = this.readUCS2String(lengthOverride, DataStream.LITTLE_ENDIAN); + break; + case "u16stringbe": + v3 = this.readUCS2String(lengthOverride, DataStream.BIG_ENDIAN); + break; + default: + if (t3.length == 3) { + var ta = t3[1]; + var len = t3[2]; + var length = 0; + if (typeof len == "function") { + length = len(struct, this, t3); + } else if (typeof len == "string" && struct[len] != null) { + length = parseInt(struct[len]); + } else { + length = parseInt(len); + } + if (typeof ta == "string") { + var tap = ta.replace(/(le|be)$/, ""); + var endianness = null; + if (/le$/.test(ta)) { + endianness = DataStream.LITTLE_ENDIAN; + } else if (/be$/.test(ta)) { + endianness = DataStream.BIG_ENDIAN; + } + if (len == "*") { + length = null; + } + switch (tap) { + case "uint8": + v3 = this.readUint8Array(length); + break; + case "uint16": + v3 = this.readUint16Array(length, endianness); + break; + case "uint32": + v3 = this.readUint32Array(length, endianness); + break; + case "int8": + v3 = this.readInt8Array(length); + break; + case "int16": + v3 = this.readInt16Array(length, endianness); + break; + case "int32": + v3 = this.readInt32Array(length, endianness); + break; + case "float32": + v3 = this.readFloat32Array(length, endianness); + break; + case "float64": + v3 = this.readFloat64Array(length, endianness); + break; + case "cstring": + case "utf16string": + case "string": + if (length == null) { + v3 = []; + while (!this.isEof()) { + var u3 = this.readType(ta, struct); + if (u3 == null) + break; + v3.push(u3); + } + } else { + v3 = new Array(length); + for (var i4 = 0; i4 < length; i4++) { + v3[i4] = this.readType(ta, struct); + } + } + break; + } + } else { + if (len == "*") { + v3 = []; + this.buffer; + while (true) { + var p3 = this.position; + try { + var o3 = this.readType(ta, struct); + if (o3 == null) { + this.position = p3; + break; + } + v3.push(o3); + } catch (e3) { + this.position = p3; + break; + } + } + } else { + v3 = new Array(length); + for (var i4 = 0; i4 < length; i4++) { + var u3 = this.readType(ta, struct); + if (u3 == null) + return null; + v3[i4] = u3; + } + } + } + break; + } + } + if (lengthOverride != null) { + this.position = pos + lengthOverride; + } + return v3; + }; + DataStream.prototype.writeStruct = function(structDefinition, struct) { + for (var i4 = 0; i4 < structDefinition.length; i4 += 2) { + var t3 = structDefinition[i4 + 1]; + this.writeType(t3, struct[structDefinition[i4]], struct); + } + }; + DataStream.prototype.writeType = function(t3, v3, struct) { + if (typeof t3 == "function") { + return t3(this, v3); + } else if (typeof t3 == "object" && !(t3 instanceof Array)) { + return t3.set(this, v3, struct); + } + var lengthOverride = null; + var charset = "ASCII"; + var pos = this.position; + if (typeof t3 == "string" && /:/.test(t3)) { + var tp = t3.split(":"); + t3 = tp[0]; + lengthOverride = parseInt(tp[1]); + } + if (typeof t3 == "string" && /,/.test(t3)) { + var tp = t3.split(","); + t3 = tp[0]; + charset = parseInt(tp[1]); + } + switch (t3) { + case "uint8": + this.writeUint8(v3); + break; + case "int8": + this.writeInt8(v3); + break; + case "uint16": + this.writeUint16(v3, this.endianness); + break; + case "int16": + this.writeInt16(v3, this.endianness); + break; + case "uint32": + this.writeUint32(v3, this.endianness); + break; + case "int32": + this.writeInt32(v3, this.endianness); + break; + case "float32": + this.writeFloat32(v3, this.endianness); + break; + case "float64": + this.writeFloat64(v3, this.endianness); + break; + case "uint16be": + this.writeUint16(v3, DataStream.BIG_ENDIAN); + break; + case "int16be": + this.writeInt16(v3, DataStream.BIG_ENDIAN); + break; + case "uint32be": + this.writeUint32(v3, DataStream.BIG_ENDIAN); + break; + case "int32be": + this.writeInt32(v3, DataStream.BIG_ENDIAN); + break; + case "float32be": + this.writeFloat32(v3, DataStream.BIG_ENDIAN); + break; + case "float64be": + this.writeFloat64(v3, DataStream.BIG_ENDIAN); + break; + case "uint16le": + this.writeUint16(v3, DataStream.LITTLE_ENDIAN); + break; + case "int16le": + this.writeInt16(v3, DataStream.LITTLE_ENDIAN); + break; + case "uint32le": + this.writeUint32(v3, DataStream.LITTLE_ENDIAN); + break; + case "int32le": + this.writeInt32(v3, DataStream.LITTLE_ENDIAN); + break; + case "float32le": + this.writeFloat32(v3, DataStream.LITTLE_ENDIAN); + break; + case "float64le": + this.writeFloat64(v3, DataStream.LITTLE_ENDIAN); + break; + case "cstring": + this.writeCString(v3, lengthOverride); + break; + case "string": + this.writeString(v3, charset, lengthOverride); + break; + case "u16string": + this.writeUCS2String(v3, this.endianness, lengthOverride); + break; + case "u16stringle": + this.writeUCS2String(v3, DataStream.LITTLE_ENDIAN, lengthOverride); + break; + case "u16stringbe": + this.writeUCS2String(v3, DataStream.BIG_ENDIAN, lengthOverride); + break; + default: + if (t3.length == 3) { + var ta = t3[1]; + for (var i4 = 0; i4 < v3.length; i4++) { + this.writeType(ta, v3[i4]); + } + break; + } else { + this.writeStruct(t3, v3); + break; + } + } + if (lengthOverride != null) { + this.position = pos; + this._realloc(lengthOverride); + this.position = pos + lengthOverride; + } + }; + if (typeof define === "function" && define.amd) { + define("DataStream", [], function() { + return DataStream; + }); + } + var CONST = { + FILE_HEADER: uInt2int([208, 207, 17, 224, 161, 177, 26, 225]), + MSG: { + UNUSED_BLOCK: -1, + END_OF_CHAIN: -2, + S_BIG_BLOCK_SIZE: 512, + S_BIG_BLOCK_MARK: 9, + L_BIG_BLOCK_SIZE: 4096, + L_BIG_BLOCK_MARK: 12, + SMALL_BLOCK_SIZE: 64, + BIG_BLOCK_MIN_DOC_SIZE: 4096, + HEADER: { + PROPERTY_START_OFFSET: 48, + BAT_START_OFFSET: 76, + BAT_COUNT_OFFSET: 44, + SBAT_START_OFFSET: 60, + SBAT_COUNT_OFFSET: 64, + XBAT_START_OFFSET: 68, + XBAT_COUNT_OFFSET: 72 + }, + PROP: { + NO_INDEX: -1, + PROPERTY_SIZE: 128, + NAME_SIZE_OFFSET: 64, + MAX_NAME_LENGTH: ( + /*NAME_SIZE_OFFSET*/ + 64 / 2 - 1 + ), + TYPE_OFFSET: 66, + PREVIOUS_PROPERTY_OFFSET: 68, + NEXT_PROPERTY_OFFSET: 72, + CHILD_PROPERTY_OFFSET: 76, + START_BLOCK_OFFSET: 116, + SIZE_OFFSET: 120, + TYPE_ENUM: { + DIRECTORY: 1, + DOCUMENT: 2, + ROOT: 5 + } + }, + FIELD: { + PREFIX: { + ATTACHMENT: "__attach_version1.0", + RECIPIENT: "__recip_version1.0", + DOCUMENT: "__substg1." + }, + // example (use fields as needed) + NAME_MAPPING: { + // email specific + "0037": "subject", + "0c1a": "senderName", + "5d02": "senderEmail", + 1e3: "body", + 1013: "bodyHTML", + "007d": "headers", + // attachment specific + 3703: "extension", + 3704: "fileNameShort", + 3707: "fileName", + 3712: "pidContentId", + "370e": "mimeType", + // recipient specific + 3001: "name", + "39fe": "email" + }, + CLASS_MAPPING: { + ATTACHMENT_DATA: "3701" + }, + TYPE_MAPPING: { + "001e": "string", + "001f": "unicode", + "0102": "binary" + }, + DIR_TYPE: { + INNER_MSG: "000d" + } + } + } + }; + function arraysEqual(a3, b3) { + if (a3 === b3) + return true; + if (a3 == null || b3 == null) + return false; + if (a3.length != b3.length) + return false; + for (var i4 = 0; i4 < a3.length; i4++) { + if (a3[i4] !== b3[i4]) + return false; + } + return true; + } + function uInt2int(data) { + var result = new Array(data.length); + for (var i4 = 0; i4 < data.length; i4++) { + result[i4] = data[i4] << 24 >> 24; + } + return result; + } + function isMSGFile(ds) { + ds.seek(0); + return arraysEqual(CONST.FILE_HEADER, ds.readInt8Array(CONST.FILE_HEADER.length)); + } + function getBlockOffsetAt(msgData, offset) { + return (offset + 1) * msgData.bigBlockSize; + } + function getBlockAt(ds, msgData, offset) { + var startOffset = getBlockOffsetAt(msgData, offset); + ds.seek(startOffset); + return ds.readInt32Array(msgData.bigBlockLength); + } + function getNextBlockInner(ds, msgData, offset, blockOffsetData) { + var currentBlock = Math.floor(offset / msgData.bigBlockLength); + var currentBlockIndex = offset % msgData.bigBlockLength; + var startBlockOffset = blockOffsetData[currentBlock]; + return getBlockAt(ds, msgData, startBlockOffset)[currentBlockIndex]; + } + function getNextBlock(ds, msgData, offset) { + return getNextBlockInner(ds, msgData, offset, msgData.batData); + } + function getNextBlockSmall(ds, msgData, offset) { + return getNextBlockInner(ds, msgData, offset, msgData.sbatData); + } + function parseMsgData(ds) { + var msgData = headerData(ds); + msgData.batData = batData(ds, msgData); + msgData.sbatData = sbatData(ds, msgData); + if (msgData.xbatCount > 0) { + xbatData(ds, msgData); + } + msgData.propertyData = propertyData(ds, msgData); + msgData.fieldsData = fieldsData(ds, msgData); + return msgData; + } + function headerData(ds) { + var headerData2 = {}; + headerData2.bigBlockSize = ds.readByte( + /*const position*/ + 30 + ) == CONST.MSG.L_BIG_BLOCK_MARK ? CONST.MSG.L_BIG_BLOCK_SIZE : CONST.MSG.S_BIG_BLOCK_SIZE; + headerData2.bigBlockLength = headerData2.bigBlockSize / 4; + headerData2.xBlockLength = headerData2.bigBlockLength - 1; + headerData2.batCount = ds.readInt(CONST.MSG.HEADER.BAT_COUNT_OFFSET); + headerData2.propertyStart = ds.readInt(CONST.MSG.HEADER.PROPERTY_START_OFFSET); + headerData2.sbatStart = ds.readInt(CONST.MSG.HEADER.SBAT_START_OFFSET); + headerData2.sbatCount = ds.readInt(CONST.MSG.HEADER.SBAT_COUNT_OFFSET); + headerData2.xbatStart = ds.readInt(CONST.MSG.HEADER.XBAT_START_OFFSET); + headerData2.xbatCount = ds.readInt(CONST.MSG.HEADER.XBAT_COUNT_OFFSET); + return headerData2; + } + function batCountInHeader(msgData) { + var maxBatsInHeader = (CONST.MSG.S_BIG_BLOCK_SIZE - CONST.MSG.HEADER.BAT_START_OFFSET) / 4; + return Math.min(msgData.batCount, maxBatsInHeader); + } + function batData(ds, msgData) { + var result = new Array(batCountInHeader(msgData)); + ds.seek(CONST.MSG.HEADER.BAT_START_OFFSET); + for (var i4 = 0; i4 < result.length; i4++) { + result[i4] = ds.readInt32(); + } + return result; + } + function sbatData(ds, msgData) { + var result = []; + var startIndex = msgData.sbatStart; + for (var i4 = 0; i4 < msgData.sbatCount && startIndex != CONST.MSG.END_OF_CHAIN; i4++) { + result.push(startIndex); + startIndex = getNextBlock(ds, msgData, startIndex); + } + return result; + } + function xbatData(ds, msgData) { + var batCount = batCountInHeader(msgData); + var batCountTotal = msgData.batCount; + var remainingBlocks = batCountTotal - batCount; + var nextBlockAt = msgData.xbatStart; + for (var i4 = 0; i4 < msgData.xbatCount; i4++) { + var xBatBlock = getBlockAt(ds, msgData, nextBlockAt); + nextBlockAt = xBatBlock[msgData.xBlockLength]; + var blocksToProcess = Math.min(remainingBlocks, msgData.xBlockLength); + for (var j4 = 0; j4 < blocksToProcess; j4++) { + var blockStartAt = xBatBlock[j4]; + if (blockStartAt == CONST.MSG.UNUSED_BLOCK || blockStartAt == CONST.MSG.END_OF_CHAIN) { + break; + } + msgData.batData.push(blockStartAt); + } + remainingBlocks -= blocksToProcess; + } + } + function propertyData(ds, msgData) { + var props2 = []; + var currentOffset = msgData.propertyStart; + while (currentOffset != CONST.MSG.END_OF_CHAIN) { + convertBlockToProperties(ds, msgData, currentOffset, props2); + currentOffset = getNextBlock(ds, msgData, currentOffset); + } + createPropertyHierarchy( + props2, + /*property with index 0 (zero) always as root*/ + props2[0] + ); + return props2; + } + function convertName(ds, offset) { + var nameLength = ds.readShort(offset + CONST.MSG.PROP.NAME_SIZE_OFFSET); + if (nameLength < 1) { + return ""; + } else { + return ds.readStringAt(offset, nameLength / 2); + } + } + function convertProperty(ds, index, offset) { + return { + index, + type: ds.readByte(offset + CONST.MSG.PROP.TYPE_OFFSET), + name: convertName(ds, offset), + // hierarchy + previousProperty: ds.readInt(offset + CONST.MSG.PROP.PREVIOUS_PROPERTY_OFFSET), + nextProperty: ds.readInt(offset + CONST.MSG.PROP.NEXT_PROPERTY_OFFSET), + childProperty: ds.readInt(offset + CONST.MSG.PROP.CHILD_PROPERTY_OFFSET), + // data offset + startBlock: ds.readInt(offset + CONST.MSG.PROP.START_BLOCK_OFFSET), + sizeBlock: ds.readInt(offset + CONST.MSG.PROP.SIZE_OFFSET) + }; + } + function convertBlockToProperties(ds, msgData, propertyBlockOffset, props2) { + var propertyCount = msgData.bigBlockSize / CONST.MSG.PROP.PROPERTY_SIZE; + var propertyOffset = getBlockOffsetAt(msgData, propertyBlockOffset); + for (var i4 = 0; i4 < propertyCount; i4++) { + var propertyType = ds.readByte(propertyOffset + CONST.MSG.PROP.TYPE_OFFSET); + switch (propertyType) { + case CONST.MSG.PROP.TYPE_ENUM.ROOT: + case CONST.MSG.PROP.TYPE_ENUM.DIRECTORY: + case CONST.MSG.PROP.TYPE_ENUM.DOCUMENT: + props2.push(convertProperty(ds, props2.length, propertyOffset)); + break; + default: + props2.push(null); + } + propertyOffset += CONST.MSG.PROP.PROPERTY_SIZE; + } + } + function createPropertyHierarchy(props2, nodeProperty) { + if (nodeProperty.childProperty == CONST.MSG.PROP.NO_INDEX) { + return; + } + nodeProperty.children = []; + var children = [nodeProperty.childProperty]; + while (children.length != 0) { + var currentIndex = children.shift(); + var current = props2[currentIndex]; + if (current == null) { + continue; + } + nodeProperty.children.push(currentIndex); + if (current.type == CONST.MSG.PROP.TYPE_ENUM.DIRECTORY) { + createPropertyHierarchy(props2, current); + } + if (current.previousProperty != CONST.MSG.PROP.NO_INDEX) { + children.push(current.previousProperty); + } + if (current.nextProperty != CONST.MSG.PROP.NO_INDEX) { + children.push(current.nextProperty); + } + } + } + function fieldsData(ds, msgData) { + var fields = { + attachments: [], + recipients: [] + }; + fieldsDataDir(ds, msgData, msgData.propertyData[0], fields); + return fields; + } + function fieldsDataDir(ds, msgData, dirProperty, fields) { + if (dirProperty.children && dirProperty.children.length > 0) { + for (var i4 = 0; i4 < dirProperty.children.length; i4++) { + var childProperty = msgData.propertyData[dirProperty.children[i4]]; + if (childProperty.type == CONST.MSG.PROP.TYPE_ENUM.DIRECTORY) { + fieldsDataDirInner(ds, msgData, childProperty, fields); + } else if (childProperty.type == CONST.MSG.PROP.TYPE_ENUM.DOCUMENT && childProperty.name.indexOf(CONST.MSG.FIELD.PREFIX.DOCUMENT) == 0) { + fieldsDataDocument(ds, msgData, childProperty, fields); + } + } + } + } + function fieldsDataDirInner(ds, msgData, dirProperty, fields) { + if (dirProperty.name.indexOf(CONST.MSG.FIELD.PREFIX.ATTACHMENT) == 0) { + var attachmentField = {}; + fields.attachments.push(attachmentField); + fieldsDataDir(ds, msgData, dirProperty, attachmentField); + } else if (dirProperty.name.indexOf(CONST.MSG.FIELD.PREFIX.RECIPIENT) == 0) { + var recipientField = {}; + fields.recipients.push(recipientField); + fieldsDataDir(ds, msgData, dirProperty, recipientField); + } else { + var childFieldType = getFieldType(dirProperty); + if (childFieldType != CONST.MSG.FIELD.DIR_TYPE.INNER_MSG) { + fieldsDataDir(ds, msgData, dirProperty, fields); + } else { + fields.innerMsgContent = true; + } + } + } + function isAddPropertyValue(fieldName, fieldTypeMapped) { + return fieldName !== "body" || fieldTypeMapped !== "binary"; + } + function fieldsDataDocument(ds, msgData, documentProperty, fields) { + var value = documentProperty.name.substring(12).toLowerCase(); + var fieldClass = value.substring(0, 4); + var fieldType = value.substring(4, 8); + var fieldName = CONST.MSG.FIELD.NAME_MAPPING[fieldClass]; + var fieldTypeMapped = CONST.MSG.FIELD.TYPE_MAPPING[fieldType]; + if (fieldName) { + var fieldValue = getFieldValue(ds, msgData, documentProperty, fieldTypeMapped); + if (isAddPropertyValue(fieldName, fieldTypeMapped)) { + fields[fieldName] = applyValueConverter(fieldName, fieldTypeMapped, fieldValue); + } + } + if (fieldClass == CONST.MSG.FIELD.CLASS_MAPPING.ATTACHMENT_DATA) { + fields["dataId"] = documentProperty.index; + fields["contentLength"] = documentProperty.sizeBlock; + } + } + function applyValueConverter(fieldName, fieldTypeMapped, fieldValue) { + if (fieldTypeMapped === "binary" && fieldName === "bodyHTML") { + return convertUint8ArrayToString(fieldValue); + } + return fieldValue; + } + function getFieldType(fieldProperty) { + var value = fieldProperty.name.substring(12).toLowerCase(); + return value.substring(4, 8); + } + var extractorFieldValue = { + sbat: { + extractor: function extractDataViaSbat(ds, msgData, fieldProperty, dataTypeExtractor) { + var chain = getChainByBlockSmall(ds, msgData, fieldProperty); + if (chain.length == 1) { + return readDataByBlockSmall( + ds, + msgData, + fieldProperty.startBlock, + fieldProperty.sizeBlock, + dataTypeExtractor + ); + } else if (chain.length > 1) { + return readChainDataByBlockSmall(ds, msgData, fieldProperty, chain, dataTypeExtractor); + } + return null; + }, + dataType: { + string: function extractBatString(ds, msgData, blockStartOffset, bigBlockOffset, blockSize) { + ds.seek(blockStartOffset + bigBlockOffset); + return ds.readString(blockSize); + }, + unicode: function extractBatUnicode(ds, msgData, blockStartOffset, bigBlockOffset, blockSize) { + ds.seek(blockStartOffset + bigBlockOffset); + return ds.readUCS2String(blockSize / 2); + }, + binary: function extractBatBinary(ds, msgData, blockStartOffset, bigBlockOffset, blockSize) { + ds.seek(blockStartOffset + bigBlockOffset); + return ds.readUint8Array(blockSize); + } + } + }, + bat: { + extractor: function extractDataViaBat(ds, msgData, fieldProperty, dataTypeExtractor) { + var offset = getBlockOffsetAt(msgData, fieldProperty.startBlock); + ds.seek(offset); + return dataTypeExtractor(ds, fieldProperty); + }, + dataType: { + string: function extractSbatString(ds, fieldProperty) { + return ds.readString(fieldProperty.sizeBlock); + }, + unicode: function extractSbatUnicode(ds, fieldProperty) { + return ds.readUCS2String(fieldProperty.sizeBlock / 2); + }, + binary: function extractSbatBinary(ds, fieldProperty) { + return ds.readUint8Array(fieldProperty.sizeBlock); + } + } + } + }; + function readDataByBlockSmall(ds, msgData, startBlock, blockSize, dataTypeExtractor) { + var byteOffset = startBlock * CONST.MSG.SMALL_BLOCK_SIZE; + var bigBlockNumber = Math.floor(byteOffset / msgData.bigBlockSize); + var bigBlockOffset = byteOffset % msgData.bigBlockSize; + var rootProp = msgData.propertyData[0]; + var nextBlock = rootProp.startBlock; + for (var i4 = 0; i4 < bigBlockNumber; i4++) { + nextBlock = getNextBlock(ds, msgData, nextBlock); + } + var blockStartOffset = getBlockOffsetAt(msgData, nextBlock); + return dataTypeExtractor(ds, msgData, blockStartOffset, bigBlockOffset, blockSize); + } + function readChainDataByBlockSmall(ds, msgData, fieldProperty, chain, dataTypeExtractor) { + var resultData = new Int8Array(fieldProperty.sizeBlock); + for (var i4 = 0, idx = 0; i4 < chain.length; i4++) { + var data = readDataByBlockSmall( + ds, + msgData, + chain[i4], + CONST.MSG.SMALL_BLOCK_SIZE, + extractorFieldValue.sbat.dataType.binary + ); + for (var j4 = 0; j4 < data.length; j4++) { + resultData[idx++] = data[j4]; + } + } + var localDs = new DataStream(resultData, 0, DataStream.LITTLE_ENDIAN); + return dataTypeExtractor(localDs, msgData, 0, 0, fieldProperty.sizeBlock); + } + function getChainByBlockSmall(ds, msgData, fieldProperty) { + var blockChain = []; + var nextBlockSmall = fieldProperty.startBlock; + while (nextBlockSmall != CONST.MSG.END_OF_CHAIN) { + blockChain.push(nextBlockSmall); + nextBlockSmall = getNextBlockSmall(ds, msgData, nextBlockSmall); + } + return blockChain; + } + function getFieldValue(ds, msgData, fieldProperty, typeMapped) { + var value = null; + var valueExtractor = fieldProperty.sizeBlock < CONST.MSG.BIG_BLOCK_MIN_DOC_SIZE ? extractorFieldValue.sbat : extractorFieldValue.bat; + var dataTypeExtractor = valueExtractor.dataType[typeMapped]; + if (dataTypeExtractor) { + value = valueExtractor.extractor(ds, msgData, fieldProperty, dataTypeExtractor); + } + return value; + } + function convertUint8ArrayToString(uint8ArraValue) { + return new TextDecoder("utf-8").decode(uint8ArraValue); + } + var MSGReader2 = function(arrayBuffer) { + this.ds = new DataStream(arrayBuffer, 0, DataStream.LITTLE_ENDIAN); + }; + MSGReader2.prototype = { + /** + Converts bytes to fields information + + @return {Object} The fields data for MSG file + */ + getFileData: function() { + if (!isMSGFile(this.ds)) { + return { error: "Unsupported file type!" }; + } + if (this.fileData == null) { + this.fileData = parseMsgData(this.ds); + } + return this.fileData.fieldsData; + }, + /** + Reads an attachment content by key/ID + + @return {Object} The attachment for specific attachment key + */ + getAttachment: function(attach) { + var attachData = typeof attach === "number" ? this.fileData.fieldsData.attachments[attach] : attach; + var fieldProperty = this.fileData.propertyData[attachData.dataId]; + var fieldTypeMapped = CONST.MSG.FIELD.TYPE_MAPPING[getFieldType(fieldProperty)]; + var fieldData = getFieldValue(this.ds, this.fileData, fieldProperty, fieldTypeMapped); + return { fileName: attachData.fileName, content: fieldData }; + } + }; + module2.exports = { + MSGReader: MSGReader2, + DataStream + }; + } +}); + +// node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js +var require_encoding_indexes = __commonJS({ + "node_modules/@sinonjs/text-encoding/lib/encoding-indexes.js"(exports, module2) { + (function(global2) { + "use strict"; + if (typeof module2 !== "undefined" && module2.exports) { + module2.exports = global2; + } + global2["encoding-indexes"] = { + "big5": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 17392, 19506, 17923, 17830, 17784, 160359, 19831, 17843, 162993, 19682, 163013, 15253, 18230, 18244, 19527, 19520, 148159, 144919, 160594, 159371, 159954, 19543, 172881, 18255, 17882, 19589, 162924, 19719, 19108, 18081, 158499, 29221, 154196, 137827, 146950, 147297, 26189, 22267, null, 32149, 22813, 166841, 15860, 38708, 162799, 23515, 138590, 23204, 13861, 171696, 23249, 23479, 23804, 26478, 34195, 170309, 29793, 29853, 14453, 138579, 145054, 155681, 16108, 153822, 15093, 31484, 40855, 147809, 166157, 143850, 133770, 143966, 17162, 33924, 40854, 37935, 18736, 34323, 22678, 38730, 37400, 31184, 31282, 26208, 27177, 34973, 29772, 31685, 26498, 31276, 21071, 36934, 13542, 29636, 155065, 29894, 40903, 22451, 18735, 21580, 16689, 145038, 22552, 31346, 162661, 35727, 18094, 159368, 16769, 155033, 31662, 140476, 40904, 140481, 140489, 140492, 40905, 34052, 144827, 16564, 40906, 17633, 175615, 25281, 28782, 40907, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 12736, 12737, 12738, 12739, 12740, 131340, 12741, 131281, 131277, 12742, 12743, 131275, 139240, 12744, 131274, 12745, 12746, 12747, 12748, 131342, 12749, 12750, 256, 193, 461, 192, 274, 201, 282, 200, 332, 211, 465, 210, null, 7870, null, 7872, 202, 257, 225, 462, 224, 593, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, null, 7871, null, 7873, 234, 609, 9178, 9179, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 172969, 135493, null, 25866, null, null, 20029, 28381, 40270, 37343, null, null, 161589, 25745, 20250, 20264, 20392, 20822, 20852, 20892, 20964, 21153, 21160, 21307, 21326, 21457, 21464, 22242, 22768, 22788, 22791, 22834, 22836, 23398, 23454, 23455, 23706, 24198, 24635, 25993, 26622, 26628, 26725, 27982, 28860, 30005, 32420, 32428, 32442, 32455, 32463, 32479, 32518, 32567, 33402, 33487, 33647, 35270, 35774, 35810, 36710, 36711, 36718, 29713, 31996, 32205, 26950, 31433, 21031, null, null, null, null, 37260, 30904, 37214, 32956, null, 36107, 33014, 133607, null, null, 32927, 40647, 19661, 40393, 40460, 19518, 171510, 159758, 40458, 172339, 13761, null, 28314, 33342, 29977, null, 18705, 39532, 39567, 40857, 31111, 164972, 138698, 132560, 142054, 20004, 20097, 20096, 20103, 20159, 20203, 20279, 13388, 20413, 15944, 20483, 20616, 13437, 13459, 13477, 20870, 22789, 20955, 20988, 20997, 20105, 21113, 21136, 21287, 13767, 21417, 13649, 21424, 13651, 21442, 21539, 13677, 13682, 13953, 21651, 21667, 21684, 21689, 21712, 21743, 21784, 21795, 21800, 13720, 21823, 13733, 13759, 21975, 13765, 163204, 21797, null, 134210, 134421, 151851, 21904, 142534, 14828, 131905, 36422, 150968, 169189, 16467, 164030, 30586, 142392, 14900, 18389, 164189, 158194, 151018, 25821, 134524, 135092, 134357, 135412, 25741, 36478, 134806, 134155, 135012, 142505, 164438, 148691, null, 134470, 170573, 164073, 18420, 151207, 142530, 39602, 14951, 169460, 16365, 13574, 152263, 169940, 161992, 142660, 40302, 38933, null, 17369, 155813, 25780, 21731, 142668, 142282, 135287, 14843, 135279, 157402, 157462, 162208, 25834, 151634, 134211, 36456, 139681, 166732, 132913, null, 18443, 131497, 16378, 22643, 142733, null, 148936, 132348, 155799, 134988, 134550, 21881, 16571, 17338, null, 19124, 141926, 135325, 33194, 39157, 134556, 25465, 14846, 141173, 36288, 22177, 25724, 15939, null, 173569, 134665, 142031, 142537, null, 135368, 145858, 14738, 14854, 164507, 13688, 155209, 139463, 22098, 134961, 142514, 169760, 13500, 27709, 151099, null, null, 161140, 142987, 139784, 173659, 167117, 134778, 134196, 157724, 32659, 135375, 141315, 141625, 13819, 152035, 134796, 135053, 134826, 16275, 134960, 134471, 135503, 134732, null, 134827, 134057, 134472, 135360, 135485, 16377, 140950, 25650, 135085, 144372, 161337, 142286, 134526, 134527, 142417, 142421, 14872, 134808, 135367, 134958, 173618, 158544, 167122, 167321, 167114, 38314, 21708, 33476, 21945, null, 171715, 39974, 39606, 161630, 142830, 28992, 33133, 33004, 23580, 157042, 33076, 14231, 21343, 164029, 37302, 134906, 134671, 134775, 134907, 13789, 151019, 13833, 134358, 22191, 141237, 135369, 134672, 134776, 135288, 135496, 164359, 136277, 134777, 151120, 142756, 23124, 135197, 135198, 135413, 135414, 22428, 134673, 161428, 164557, 135093, 134779, 151934, 14083, 135094, 135552, 152280, 172733, 149978, 137274, 147831, 164476, 22681, 21096, 13850, 153405, 31666, 23400, 18432, 19244, 40743, 18919, 39967, 39821, 154484, 143677, 22011, 13810, 22153, 20008, 22786, 138177, 194680, 38737, 131206, 20059, 20155, 13630, 23587, 24401, 24516, 14586, 25164, 25909, 27514, 27701, 27706, 28780, 29227, 20012, 29357, 149737, 32594, 31035, 31993, 32595, 156266, 13505, null, 156491, 32770, 32896, 157202, 158033, 21341, 34916, 35265, 161970, 35744, 36125, 38021, 38264, 38271, 38376, 167439, 38886, 39029, 39118, 39134, 39267, 17e4, 40060, 40479, 40644, 27503, 63751, 20023, 131207, 38429, 25143, 38050, null, 20539, 28158, 171123, 40870, 15817, 34959, 147790, 28791, 23797, 19232, 152013, 13657, 154928, 24866, 166450, 36775, 37366, 29073, 26393, 29626, 144001, 172295, 15499, 137600, 19216, 30948, 29698, 20910, 165647, 16393, 27235, 172730, 16931, 34319, 133743, 31274, 170311, 166634, 38741, 28749, 21284, 139390, 37876, 30425, 166371, 40871, 30685, 20131, 20464, 20668, 20015, 20247, 40872, 21556, 32139, 22674, 22736, 138678, 24210, 24217, 24514, 141074, 25995, 144377, 26905, 27203, 146531, 27903, null, 29184, 148741, 29580, 16091, 150035, 23317, 29881, 35715, 154788, 153237, 31379, 31724, 31939, 32364, 33528, 34199, 40873, 34960, 40874, 36537, 40875, 36815, 34143, 39392, 37409, 40876, 167353, 136255, 16497, 17058, 23066, null, null, null, 39016, 26475, 17014, 22333, null, 34262, 149883, 33471, 160013, 19585, 159092, 23931, 158485, 159678, 40877, 40878, 23446, 40879, 26343, 32347, 28247, 31178, 15752, 17603, 143958, 141206, 17306, 17718, null, 23765, 146202, 35577, 23672, 15634, 144721, 23928, 40882, 29015, 17752, 147692, 138787, 19575, 14712, 13386, 131492, 158785, 35532, 20404, 131641, 22975, 33132, 38998, 170234, 24379, 134047, null, 139713, 166253, 16642, 18107, 168057, 16135, 40883, 172469, 16632, 14294, 18167, 158790, 16764, 165554, 160767, 17773, 14548, 152730, 17761, 17691, 19849, 19579, 19830, 17898, 16328, 150287, 13921, 17630, 17597, 16877, 23870, 23880, 23894, 15868, 14351, 23972, 23993, 14368, 14392, 24130, 24253, 24357, 24451, 14600, 14612, 14655, 14669, 24791, 24893, 23781, 14729, 25015, 25017, 25039, 14776, 25132, 25232, 25317, 25368, 14840, 22193, 14851, 25570, 25595, 25607, 25690, 14923, 25792, 23829, 22049, 40863, 14999, 25990, 15037, 26111, 26195, 15090, 26258, 15138, 26390, 15170, 26532, 26624, 15192, 26698, 26756, 15218, 15217, 15227, 26889, 26947, 29276, 26980, 27039, 27013, 15292, 27094, 15325, 27237, 27252, 27249, 27266, 15340, 27289, 15346, 27307, 27317, 27348, 27382, 27521, 27585, 27626, 27765, 27818, 15563, 27906, 27910, 27942, 28033, 15599, 28068, 28081, 28181, 28184, 28201, 28294, 166336, 28347, 28386, 28378, 40831, 28392, 28393, 28452, 28468, 15686, 147265, 28545, 28606, 15722, 15733, 29111, 23705, 15754, 28716, 15761, 28752, 28756, 28783, 28799, 28809, 131877, 17345, 13809, 134872, 147159, 22462, 159443, 28990, 153568, 13902, 27042, 166889, 23412, 31305, 153825, 169177, 31333, 31357, 154028, 31419, 31408, 31426, 31427, 29137, 156813, 16842, 31450, 31453, 31466, 16879, 21682, 154625, 31499, 31573, 31529, 152334, 154878, 31650, 31599, 33692, 154548, 158847, 31696, 33825, 31634, 31672, 154912, 15789, 154725, 33938, 31738, 31750, 31797, 154817, 31812, 31875, 149634, 31910, 26237, 148856, 31945, 31943, 31974, 31860, 31987, 31989, 31950, 32359, 17693, 159300, 32093, 159446, 29837, 32137, 32171, 28981, 32179, 32210, 147543, 155689, 32228, 15635, 32245, 137209, 32229, 164717, 32285, 155937, 155994, 32366, 32402, 17195, 37996, 32295, 32576, 32577, 32583, 31030, 156368, 39393, 32663, 156497, 32675, 136801, 131176, 17756, 145254, 17667, 164666, 32762, 156809, 32773, 32776, 32797, 32808, 32815, 172167, 158915, 32827, 32828, 32865, 141076, 18825, 157222, 146915, 157416, 26405, 32935, 166472, 33031, 33050, 22704, 141046, 27775, 156824, 151480, 25831, 136330, 33304, 137310, 27219, 150117, 150165, 17530, 33321, 133901, 158290, 146814, 20473, 136445, 34018, 33634, 158474, 149927, 144688, 137075, 146936, 33450, 26907, 194964, 16859, 34123, 33488, 33562, 134678, 137140, 14017, 143741, 144730, 33403, 33506, 33560, 147083, 159139, 158469, 158615, 144846, 15807, 33565, 21996, 33669, 17675, 159141, 33708, 33729, 33747, 13438, 159444, 27223, 34138, 13462, 159298, 143087, 33880, 154596, 33905, 15827, 17636, 27303, 33866, 146613, 31064, 33960, 158614, 159351, 159299, 34014, 33807, 33681, 17568, 33939, 34020, 154769, 16960, 154816, 17731, 34100, 23282, 159385, 17703, 34163, 17686, 26559, 34326, 165413, 165435, 34241, 159880, 34306, 136578, 159949, 194994, 17770, 34344, 13896, 137378, 21495, 160666, 34430, 34673, 172280, 34798, 142375, 34737, 34778, 34831, 22113, 34412, 26710, 17935, 34885, 34886, 161248, 146873, 161252, 34910, 34972, 18011, 34996, 34997, 25537, 35013, 30583, 161551, 35207, 35210, 35238, 35241, 35239, 35260, 166437, 35303, 162084, 162493, 35484, 30611, 37374, 35472, 162393, 31465, 162618, 147343, 18195, 162616, 29052, 35596, 35615, 152624, 152933, 35647, 35660, 35661, 35497, 150138, 35728, 35739, 35503, 136927, 17941, 34895, 35995, 163156, 163215, 195028, 14117, 163155, 36054, 163224, 163261, 36114, 36099, 137488, 36059, 28764, 36113, 150729, 16080, 36215, 36265, 163842, 135188, 149898, 15228, 164284, 160012, 31463, 36525, 36534, 36547, 37588, 36633, 36653, 164709, 164882, 36773, 37635, 172703, 133712, 36787, 18730, 166366, 165181, 146875, 24312, 143970, 36857, 172052, 165564, 165121, 140069, 14720, 159447, 36919, 165180, 162494, 36961, 165228, 165387, 37032, 165651, 37060, 165606, 37038, 37117, 37223, 15088, 37289, 37316, 31916, 166195, 138889, 37390, 27807, 37441, 37474, 153017, 37561, 166598, 146587, 166668, 153051, 134449, 37676, 37739, 166625, 166891, 28815, 23235, 166626, 166629, 18789, 37444, 166892, 166969, 166911, 37747, 37979, 36540, 38277, 38310, 37926, 38304, 28662, 17081, 140922, 165592, 135804, 146990, 18911, 27676, 38523, 38550, 16748, 38563, 159445, 25050, 38582, 30965, 166624, 38589, 21452, 18849, 158904, 131700, 156688, 168111, 168165, 150225, 137493, 144138, 38705, 34370, 38710, 18959, 17725, 17797, 150249, 28789, 23361, 38683, 38748, 168405, 38743, 23370, 168427, 38751, 37925, 20688, 143543, 143548, 38793, 38815, 38833, 38846, 38848, 38866, 38880, 152684, 38894, 29724, 169011, 38911, 38901, 168989, 162170, 19153, 38964, 38963, 38987, 39014, 15118, 160117, 15697, 132656, 147804, 153350, 39114, 39095, 39112, 39111, 19199, 159015, 136915, 21936, 39137, 39142, 39148, 37752, 39225, 150057, 19314, 170071, 170245, 39413, 39436, 39483, 39440, 39512, 153381, 14020, 168113, 170965, 39648, 39650, 170757, 39668, 19470, 39700, 39725, 165376, 20532, 39732, 158120, 14531, 143485, 39760, 39744, 171326, 23109, 137315, 39822, 148043, 39938, 39935, 39948, 171624, 40404, 171959, 172434, 172459, 172257, 172323, 172511, 40318, 40323, 172340, 40462, 26760, 40388, 139611, 172435, 172576, 137531, 172595, 40249, 172217, 172724, 40592, 40597, 40606, 40610, 19764, 40618, 40623, 148324, 40641, 15200, 14821, 15645, 20274, 14270, 166955, 40706, 40712, 19350, 37924, 159138, 40727, 40726, 40761, 22175, 22154, 40773, 39352, 168075, 38898, 33919, 40802, 40809, 31452, 40846, 29206, 19390, 149877, 149947, 29047, 150008, 148296, 150097, 29598, 166874, 137466, 31135, 166270, 167478, 37737, 37875, 166468, 37612, 37761, 37835, 166252, 148665, 29207, 16107, 30578, 31299, 28880, 148595, 148472, 29054, 137199, 28835, 137406, 144793, 16071, 137349, 152623, 137208, 14114, 136955, 137273, 14049, 137076, 137425, 155467, 14115, 136896, 22363, 150053, 136190, 135848, 136134, 136374, 34051, 145062, 34051, 33877, 149908, 160101, 146993, 152924, 147195, 159826, 17652, 145134, 170397, 159526, 26617, 14131, 15381, 15847, 22636, 137506, 26640, 16471, 145215, 147681, 147595, 147727, 158753, 21707, 22174, 157361, 22162, 135135, 134056, 134669, 37830, 166675, 37788, 20216, 20779, 14361, 148534, 20156, 132197, 131967, 20299, 20362, 153169, 23144, 131499, 132043, 14745, 131850, 132116, 13365, 20265, 131776, 167603, 131701, 35546, 131596, 20120, 20685, 20749, 20386, 20227, 150030, 147082, 20290, 20526, 20588, 20609, 20428, 20453, 20568, 20732, 20825, 20827, 20829, 20830, 28278, 144789, 147001, 147135, 28018, 137348, 147081, 20904, 20931, 132576, 17629, 132259, 132242, 132241, 36218, 166556, 132878, 21081, 21156, 133235, 21217, 37742, 18042, 29068, 148364, 134176, 149932, 135396, 27089, 134685, 29817, 16094, 29849, 29716, 29782, 29592, 19342, 150204, 147597, 21456, 13700, 29199, 147657, 21940, 131909, 21709, 134086, 22301, 37469, 38644, 37734, 22493, 22413, 22399, 13886, 22731, 23193, 166470, 136954, 137071, 136976, 23084, 22968, 37519, 23166, 23247, 23058, 153926, 137715, 137313, 148117, 14069, 27909, 29763, 23073, 155267, 23169, 166871, 132115, 37856, 29836, 135939, 28933, 18802, 37896, 166395, 37821, 14240, 23582, 23710, 24158, 24136, 137622, 137596, 146158, 24269, 23375, 137475, 137476, 14081, 137376, 14045, 136958, 14035, 33066, 166471, 138682, 144498, 166312, 24332, 24334, 137511, 137131, 23147, 137019, 23364, 34324, 161277, 34912, 24702, 141408, 140843, 24539, 16056, 140719, 140734, 168072, 159603, 25024, 131134, 131142, 140827, 24985, 24984, 24693, 142491, 142599, 149204, 168269, 25713, 149093, 142186, 14889, 142114, 144464, 170218, 142968, 25399, 173147, 25782, 25393, 25553, 149987, 142695, 25252, 142497, 25659, 25963, 26994, 15348, 143502, 144045, 149897, 144043, 21773, 144096, 137433, 169023, 26318, 144009, 143795, 15072, 16784, 152964, 166690, 152975, 136956, 152923, 152613, 30958, 143619, 137258, 143924, 13412, 143887, 143746, 148169, 26254, 159012, 26219, 19347, 26160, 161904, 138731, 26211, 144082, 144097, 26142, 153714, 14545, 145466, 145340, 15257, 145314, 144382, 29904, 15254, 26511, 149034, 26806, 26654, 15300, 27326, 14435, 145365, 148615, 27187, 27218, 27337, 27397, 137490, 25873, 26776, 27212, 15319, 27258, 27479, 147392, 146586, 37792, 37618, 166890, 166603, 37513, 163870, 166364, 37991, 28069, 28427, 149996, 28007, 147327, 15759, 28164, 147516, 23101, 28170, 22599, 27940, 30786, 28987, 148250, 148086, 28913, 29264, 29319, 29332, 149391, 149285, 20857, 150180, 132587, 29818, 147192, 144991, 150090, 149783, 155617, 16134, 16049, 150239, 166947, 147253, 24743, 16115, 29900, 29756, 37767, 29751, 17567, 159210, 17745, 30083, 16227, 150745, 150790, 16216, 30037, 30323, 173510, 15129, 29800, 166604, 149931, 149902, 15099, 15821, 150094, 16127, 149957, 149747, 37370, 22322, 37698, 166627, 137316, 20703, 152097, 152039, 30584, 143922, 30478, 30479, 30587, 149143, 145281, 14942, 149744, 29752, 29851, 16063, 150202, 150215, 16584, 150166, 156078, 37639, 152961, 30750, 30861, 30856, 30930, 29648, 31065, 161601, 153315, 16654, 31131, 33942, 31141, 27181, 147194, 31290, 31220, 16750, 136934, 16690, 37429, 31217, 134476, 149900, 131737, 146874, 137070, 13719, 21867, 13680, 13994, 131540, 134157, 31458, 23129, 141045, 154287, 154268, 23053, 131675, 30960, 23082, 154566, 31486, 16889, 31837, 31853, 16913, 154547, 155324, 155302, 31949, 150009, 137136, 31886, 31868, 31918, 27314, 32220, 32263, 32211, 32590, 156257, 155996, 162632, 32151, 155266, 17002, 158581, 133398, 26582, 131150, 144847, 22468, 156690, 156664, 149858, 32733, 31527, 133164, 154345, 154947, 31500, 155150, 39398, 34373, 39523, 27164, 144447, 14818, 150007, 157101, 39455, 157088, 33920, 160039, 158929, 17642, 33079, 17410, 32966, 33033, 33090, 157620, 39107, 158274, 33378, 33381, 158289, 33875, 159143, 34320, 160283, 23174, 16767, 137280, 23339, 137377, 23268, 137432, 34464, 195004, 146831, 34861, 160802, 23042, 34926, 20293, 34951, 35007, 35046, 35173, 35149, 153219, 35156, 161669, 161668, 166901, 166873, 166812, 166393, 16045, 33955, 18165, 18127, 14322, 35389, 35356, 169032, 24397, 37419, 148100, 26068, 28969, 28868, 137285, 40301, 35999, 36073, 163292, 22938, 30659, 23024, 17262, 14036, 36394, 36519, 150537, 36656, 36682, 17140, 27736, 28603, 140065, 18587, 28537, 28299, 137178, 39913, 14005, 149807, 37051, 37015, 21873, 18694, 37307, 37892, 166475, 16482, 166652, 37927, 166941, 166971, 34021, 35371, 38297, 38311, 38295, 38294, 167220, 29765, 16066, 149759, 150082, 148458, 16103, 143909, 38543, 167655, 167526, 167525, 16076, 149997, 150136, 147438, 29714, 29803, 16124, 38721, 168112, 26695, 18973, 168083, 153567, 38749, 37736, 166281, 166950, 166703, 156606, 37562, 23313, 35689, 18748, 29689, 147995, 38811, 38769, 39224, 134950, 24001, 166853, 150194, 38943, 169178, 37622, 169431, 37349, 17600, 166736, 150119, 166756, 39132, 166469, 16128, 37418, 18725, 33812, 39227, 39245, 162566, 15869, 39323, 19311, 39338, 39516, 166757, 153800, 27279, 39457, 23294, 39471, 170225, 19344, 170312, 39356, 19389, 19351, 37757, 22642, 135938, 22562, 149944, 136424, 30788, 141087, 146872, 26821, 15741, 37976, 14631, 24912, 141185, 141675, 24839, 40015, 40019, 40059, 39989, 39952, 39807, 39887, 171565, 39839, 172533, 172286, 40225, 19630, 147716, 40472, 19632, 40204, 172468, 172269, 172275, 170287, 40357, 33981, 159250, 159711, 158594, 34300, 17715, 159140, 159364, 159216, 33824, 34286, 159232, 145367, 155748, 31202, 144796, 144960, 18733, 149982, 15714, 37851, 37566, 37704, 131775, 30905, 37495, 37965, 20452, 13376, 36964, 152925, 30781, 30804, 30902, 30795, 137047, 143817, 149825, 13978, 20338, 28634, 28633, 28702, 28702, 21524, 147893, 22459, 22771, 22410, 40214, 22487, 28980, 13487, 147884, 29163, 158784, 151447, 23336, 137141, 166473, 24844, 23246, 23051, 17084, 148616, 14124, 19323, 166396, 37819, 37816, 137430, 134941, 33906, 158912, 136211, 148218, 142374, 148417, 22932, 146871, 157505, 32168, 155995, 155812, 149945, 149899, 166394, 37605, 29666, 16105, 29876, 166755, 137375, 16097, 150195, 27352, 29683, 29691, 16086, 150078, 150164, 137177, 150118, 132007, 136228, 149989, 29768, 149782, 28837, 149878, 37508, 29670, 37727, 132350, 37681, 166606, 166422, 37766, 166887, 153045, 18741, 166530, 29035, 149827, 134399, 22180, 132634, 134123, 134328, 21762, 31172, 137210, 32254, 136898, 150096, 137298, 17710, 37889, 14090, 166592, 149933, 22960, 137407, 137347, 160900, 23201, 14050, 146779, 14e3, 37471, 23161, 166529, 137314, 37748, 15565, 133812, 19094, 14730, 20724, 15721, 15692, 136092, 29045, 17147, 164376, 28175, 168164, 17643, 27991, 163407, 28775, 27823, 15574, 147437, 146989, 28162, 28428, 15727, 132085, 30033, 14012, 13512, 18048, 16090, 18545, 22980, 37486, 18750, 36673, 166940, 158656, 22546, 22472, 14038, 136274, 28926, 148322, 150129, 143331, 135856, 140221, 26809, 26983, 136088, 144613, 162804, 145119, 166531, 145366, 144378, 150687, 27162, 145069, 158903, 33854, 17631, 17614, 159014, 159057, 158850, 159710, 28439, 160009, 33597, 137018, 33773, 158848, 159827, 137179, 22921, 23170, 137139, 23137, 23153, 137477, 147964, 14125, 23023, 137020, 14023, 29070, 37776, 26266, 148133, 23150, 23083, 148115, 27179, 147193, 161590, 148571, 148170, 28957, 148057, 166369, 20400, 159016, 23746, 148686, 163405, 148413, 27148, 148054, 135940, 28838, 28979, 148457, 15781, 27871, 194597, 150095, 32357, 23019, 23855, 15859, 24412, 150109, 137183, 32164, 33830, 21637, 146170, 144128, 131604, 22398, 133333, 132633, 16357, 139166, 172726, 28675, 168283, 23920, 29583, 31955, 166489, 168992, 20424, 32743, 29389, 29456, 162548, 29496, 29497, 153334, 29505, 29512, 16041, 162584, 36972, 29173, 149746, 29665, 33270, 16074, 30476, 16081, 27810, 22269, 29721, 29726, 29727, 16098, 16112, 16116, 16122, 29907, 16142, 16211, 30018, 30061, 30066, 30093, 16252, 30152, 30172, 16320, 30285, 16343, 30324, 16348, 30330, 151388, 29064, 22051, 35200, 22633, 16413, 30531, 16441, 26465, 16453, 13787, 30616, 16490, 16495, 23646, 30654, 30667, 22770, 30744, 28857, 30748, 16552, 30777, 30791, 30801, 30822, 33864, 152885, 31027, 26627, 31026, 16643, 16649, 31121, 31129, 36795, 31238, 36796, 16743, 31377, 16818, 31420, 33401, 16836, 31439, 31451, 16847, 20001, 31586, 31596, 31611, 31762, 31771, 16992, 17018, 31867, 31900, 17036, 31928, 17044, 31981, 36755, 28864, 134351, 32207, 32212, 32208, 32253, 32686, 32692, 29343, 17303, 32800, 32805, 31545, 32814, 32817, 32852, 15820, 22452, 28832, 32951, 33001, 17389, 33036, 29482, 33038, 33042, 30048, 33044, 17409, 15161, 33110, 33113, 33114, 17427, 22586, 33148, 33156, 17445, 33171, 17453, 33189, 22511, 33217, 33252, 33364, 17551, 33446, 33398, 33482, 33496, 33535, 17584, 33623, 38505, 27018, 33797, 28917, 33892, 24803, 33928, 17668, 33982, 34017, 34040, 34064, 34104, 34130, 17723, 34159, 34160, 34272, 17783, 34418, 34450, 34482, 34543, 38469, 34699, 17926, 17943, 34990, 35071, 35108, 35143, 35217, 162151, 35369, 35384, 35476, 35508, 35921, 36052, 36082, 36124, 18328, 22623, 36291, 18413, 20206, 36410, 21976, 22356, 36465, 22005, 36528, 18487, 36558, 36578, 36580, 36589, 36594, 36791, 36801, 36810, 36812, 36915, 39364, 18605, 39136, 37395, 18718, 37416, 37464, 37483, 37553, 37550, 37567, 37603, 37611, 37619, 37620, 37629, 37699, 37764, 37805, 18757, 18769, 40639, 37911, 21249, 37917, 37933, 37950, 18794, 37972, 38009, 38189, 38306, 18855, 38388, 38451, 18917, 26528, 18980, 38720, 18997, 38834, 38850, 22100, 19172, 24808, 39097, 19225, 39153, 22596, 39182, 39193, 20916, 39196, 39223, 39234, 39261, 39266, 19312, 39365, 19357, 39484, 39695, 31363, 39785, 39809, 39901, 39921, 39924, 19565, 39968, 14191, 138178, 40265, 39994, 40702, 22096, 40339, 40381, 40384, 40444, 38134, 36790, 40571, 40620, 40625, 40637, 40646, 38108, 40674, 40689, 40696, 31432, 40772, 131220, 131767, 132e3, 26906, 38083, 22956, 132311, 22592, 38081, 14265, 132565, 132629, 132726, 136890, 22359, 29043, 133826, 133837, 134079, 21610, 194619, 134091, 21662, 134139, 134203, 134227, 134245, 134268, 24807, 134285, 22138, 134325, 134365, 134381, 134511, 134578, 134600, 26965, 39983, 34725, 134660, 134670, 134871, 135056, 134957, 134771, 23584, 135100, 24075, 135260, 135247, 135286, 26398, 135291, 135304, 135318, 13895, 135359, 135379, 135471, 135483, 21348, 33965, 135907, 136053, 135990, 35713, 136567, 136729, 137155, 137159, 20088, 28859, 137261, 137578, 137773, 137797, 138282, 138352, 138412, 138952, 25283, 138965, 139029, 29080, 26709, 139333, 27113, 14024, 139900, 140247, 140282, 141098, 141425, 141647, 33533, 141671, 141715, 142037, 35237, 142056, 36768, 142094, 38840, 142143, 38983, 39613, 142412, null, 142472, 142519, 154600, 142600, 142610, 142775, 142741, 142914, 143220, 143308, 143411, 143462, 144159, 144350, 24497, 26184, 26303, 162425, 144743, 144883, 29185, 149946, 30679, 144922, 145174, 32391, 131910, 22709, 26382, 26904, 146087, 161367, 155618, 146961, 147129, 161278, 139418, 18640, 19128, 147737, 166554, 148206, 148237, 147515, 148276, 148374, 150085, 132554, 20946, 132625, 22943, 138920, 15294, 146687, 148484, 148694, 22408, 149108, 14747, 149295, 165352, 170441, 14178, 139715, 35678, 166734, 39382, 149522, 149755, 150037, 29193, 150208, 134264, 22885, 151205, 151430, 132985, 36570, 151596, 21135, 22335, 29041, 152217, 152601, 147274, 150183, 21948, 152646, 152686, 158546, 37332, 13427, 152895, 161330, 152926, 18200, 152930, 152934, 153543, 149823, 153693, 20582, 13563, 144332, 24798, 153859, 18300, 166216, 154286, 154505, 154630, 138640, 22433, 29009, 28598, 155906, 162834, 36950, 156082, 151450, 35682, 156674, 156746, 23899, 158711, 36662, 156804, 137500, 35562, 150006, 156808, 147439, 156946, 19392, 157119, 157365, 141083, 37989, 153569, 24981, 23079, 194765, 20411, 22201, 148769, 157436, 20074, 149812, 38486, 28047, 158909, 13848, 35191, 157593, 157806, 156689, 157790, 29151, 157895, 31554, 168128, 133649, 157990, 37124, 158009, 31301, 40432, 158202, 39462, 158253, 13919, 156777, 131105, 31107, 158260, 158555, 23852, 144665, 33743, 158621, 18128, 158884, 30011, 34917, 159150, 22710, 14108, 140685, 159819, 160205, 15444, 160384, 160389, 37505, 139642, 160395, 37680, 160486, 149968, 27705, 38047, 160848, 134904, 34855, 35061, 141606, 164979, 137137, 28344, 150058, 137248, 14756, 14009, 23568, 31203, 17727, 26294, 171181, 170148, 35139, 161740, 161880, 22230, 16607, 136714, 14753, 145199, 164072, 136133, 29101, 33638, 162269, 168360, 23143, 19639, 159919, 166315, 162301, 162314, 162571, 163174, 147834, 31555, 31102, 163849, 28597, 172767, 27139, 164632, 21410, 159239, 37823, 26678, 38749, 164207, 163875, 158133, 136173, 143919, 163912, 23941, 166960, 163971, 22293, 38947, 166217, 23979, 149896, 26046, 27093, 21458, 150181, 147329, 15377, 26422, 163984, 164084, 164142, 139169, 164175, 164233, 164271, 164378, 164614, 164655, 164746, 13770, 164968, 165546, 18682, 25574, 166230, 30728, 37461, 166328, 17394, 166375, 17375, 166376, 166726, 166868, 23032, 166921, 36619, 167877, 168172, 31569, 168208, 168252, 15863, 168286, 150218, 36816, 29327, 22155, 169191, 169449, 169392, 169400, 169778, 170193, 170313, 170346, 170435, 170536, 170766, 171354, 171419, 32415, 171768, 171811, 19620, 38215, 172691, 29090, 172799, 19857, 36882, 173515, 19868, 134300, 36798, 21953, 36794, 140464, 36793, 150163, 17673, 32383, 28502, 27313, 20202, 13540, 166700, 161949, 14138, 36480, 137205, 163876, 166764, 166809, 162366, 157359, 15851, 161365, 146615, 153141, 153942, 20122, 155265, 156248, 22207, 134765, 36366, 23405, 147080, 150686, 25566, 25296, 137206, 137339, 25904, 22061, 154698, 21530, 152337, 15814, 171416, 19581, 22050, 22046, 32585, 155352, 22901, 146752, 34672, 19996, 135146, 134473, 145082, 33047, 40286, 36120, 30267, 40005, 30286, 30649, 37701, 21554, 33096, 33527, 22053, 33074, 33816, 32957, 21994, 31074, 22083, 21526, 134813, 13774, 22021, 22001, 26353, 164578, 13869, 30004, 22e3, 21946, 21655, 21874, 134209, 134294, 24272, 151880, 134774, 142434, 134818, 40619, 32090, 21982, 135285, 25245, 38765, 21652, 36045, 29174, 37238, 25596, 25529, 25598, 21865, 142147, 40050, 143027, 20890, 13535, 134567, 20903, 21581, 21790, 21779, 30310, 36397, 157834, 30129, 32950, 34820, 34694, 35015, 33206, 33820, 135361, 17644, 29444, 149254, 23440, 33547, 157843, 22139, 141044, 163119, 147875, 163187, 159440, 160438, 37232, 135641, 37384, 146684, 173737, 134828, 134905, 29286, 138402, 18254, 151490, 163833, 135147, 16634, 40029, 25887, 142752, 18675, 149472, 171388, 135148, 134666, 24674, 161187, 135149, null, 155720, 135559, 29091, 32398, 40272, 19994, 19972, 13687, 23309, 27826, 21351, 13996, 14812, 21373, 13989, 149016, 22682, 150382, 33325, 21579, 22442, 154261, 133497, null, 14930, 140389, 29556, 171692, 19721, 39917, 146686, 171824, 19547, 151465, 169374, 171998, 33884, 146870, 160434, 157619, 145184, 25390, 32037, 147191, 146988, 14890, 36872, 21196, 15988, 13946, 17897, 132238, 30272, 23280, 134838, 30842, 163630, 22695, 16575, 22140, 39819, 23924, 30292, 173108, 40581, 19681, 30201, 14331, 24857, 143578, 148466, null, 22109, 135849, 22439, 149859, 171526, 21044, 159918, 13741, 27722, 40316, 31830, 39737, 22494, 137068, 23635, 25811, 169168, 156469, 160100, 34477, 134440, 159010, 150242, 134513, null, 20990, 139023, 23950, 38659, 138705, 40577, 36940, 31519, 39682, 23761, 31651, 25192, 25397, 39679, 31695, 39722, 31870, 39726, 31810, 31878, 39957, 31740, 39689, 40727, 39963, 149822, 40794, 21875, 23491, 20477, 40600, 20466, 21088, 15878, 21201, 22375, 20566, 22967, 24082, 38856, 40363, 36700, 21609, 38836, 39232, 38842, 21292, 24880, 26924, 21466, 39946, 40194, 19515, 38465, 27008, 20646, 30022, 137069, 39386, 21107, null, 37209, 38529, 37212, null, 37201, 167575, 25471, 159011, 27338, 22033, 37262, 30074, 25221, 132092, 29519, 31856, 154657, 146685, null, 149785, 30422, 39837, 20010, 134356, 33726, 34882, null, 23626, 27072, 20717, 22394, 21023, 24053, 20174, 27697, 131570, 20281, 21660, 21722, 21146, 36226, 13822, 24332, 13811, null, 27474, 37244, 40869, 39831, 38958, 39092, 39610, 40616, 40580, 29050, 31508, null, 27642, 34840, 32632, null, 22048, 173642, 36471, 40787, null, 36308, 36431, 40476, 36353, 25218, 164733, 36392, 36469, 31443, 150135, 31294, 30936, 27882, 35431, 30215, 166490, 40742, 27854, 34774, 30147, 172722, 30803, 194624, 36108, 29410, 29553, 35629, 29442, 29937, 36075, 150203, 34351, 24506, 34976, 17591, null, 137275, 159237, null, 35454, 140571, null, 24829, 30311, 39639, 40260, 37742, 39823, 34805, null, 34831, 36087, 29484, 38689, 39856, 13782, 29362, 19463, 31825, 39242, 155993, 24921, 19460, 40598, 24957, null, 22367, 24943, 25254, 25145, 25294, 14940, 25058, 21418, 144373, 25444, 26626, 13778, 23895, 166850, 36826, 167481, null, 20697, 138566, 30982, 21298, 38456, 134971, 16485, null, 30718, null, 31938, 155418, 31962, 31277, 32870, 32867, 32077, 29957, 29938, 35220, 33306, 26380, 32866, 160902, 32859, 29936, 33027, 30500, 35209, 157644, 30035, 159441, 34729, 34766, 33224, 34700, 35401, 36013, 35651, 30507, 29944, 34010, 13877, 27058, 36262, null, 35241, 29800, 28089, 34753, 147473, 29927, 15835, 29046, 24740, 24988, 15569, 29026, 24695, null, 32625, 166701, 29264, 24809, 19326, 21024, 15384, 146631, 155351, 161366, 152881, 137540, 135934, 170243, 159196, 159917, 23745, 156077, 166415, 145015, 131310, 157766, 151310, 17762, 23327, 156492, 40784, 40614, 156267, 12288, 65292, 12289, 12290, 65294, 8231, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65105, 65106, 183, 65108, 65109, 65110, 65111, 65372, 8211, 65073, 8212, 65075, 9588, 65076, 65103, 65288, 65289, 65077, 65078, 65371, 65373, 65079, 65080, 12308, 12309, 65081, 65082, 12304, 12305, 65083, 65084, 12298, 12299, 65085, 65086, 12296, 12297, 65087, 65088, 12300, 12301, 65089, 65090, 12302, 12303, 65091, 65092, 65113, 65114, 65115, 65116, 65117, 65118, 8216, 8217, 8220, 8221, 12317, 12318, 8245, 8242, 65283, 65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733, 9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 175, 65507, 65343, 717, 65097, 65098, 65101, 65102, 65099, 65100, 65119, 65120, 65121, 65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, 8806, 8807, 8800, 8734, 8786, 8801, 65122, 65123, 65124, 65125, 65126, 65374, 8745, 8746, 8869, 8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 8853, 8857, 8593, 8595, 8592, 8594, 8598, 8599, 8601, 8600, 8741, 8739, 65295, 65340, 8725, 65128, 65284, 65509, 12306, 65504, 65505, 65285, 65312, 8451, 8457, 65129, 65130, 65131, 13269, 13212, 13213, 13214, 13262, 13217, 13198, 13199, 13252, 176, 20825, 20827, 20830, 20829, 20833, 20835, 21991, 29929, 31950, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9615, 9614, 9613, 9612, 9611, 9610, 9609, 9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492, 9496, 9581, 9582, 9584, 9583, 9552, 9566, 9578, 9569, 9698, 9699, 9701, 9700, 9585, 9586, 9587, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 21313, 21316, 21317, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 729, 713, 714, 711, 715, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9249, 8364, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19968, 20057, 19969, 19971, 20035, 20061, 20102, 20108, 20154, 20799, 20837, 20843, 20960, 20992, 20993, 21147, 21269, 21313, 21340, 21448, 19977, 19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062, 20110, 20129, 20800, 20995, 21242, 21315, 21449, 21475, 22303, 22763, 22805, 22823, 22899, 23376, 23377, 23379, 23544, 23567, 23586, 23608, 23665, 24029, 24037, 24049, 24050, 24051, 24062, 24178, 24318, 24331, 24339, 25165, 19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113, 20117, 20114, 20116, 20130, 20161, 20160, 20163, 20166, 20167, 20173, 20170, 20171, 20164, 20803, 20801, 20839, 20845, 20846, 20844, 20887, 20982, 20998, 20999, 21e3, 21243, 21246, 21247, 21270, 21305, 21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825, 22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187, 24319, 24340, 24341, 24515, 25096, 25142, 25163, 25166, 25903, 25991, 26007, 26020, 26041, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27595, 27604, 27611, 27663, 27700, 28779, 29226, 29238, 29243, 29255, 29273, 29275, 29356, 29579, 19993, 19990, 19989, 19988, 19992, 20027, 20045, 20047, 20046, 20197, 20184, 20180, 20181, 20182, 20183, 20195, 20196, 20185, 20190, 20805, 20804, 20873, 20874, 20908, 20985, 20986, 20984, 21002, 21152, 21151, 21253, 21254, 21271, 21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487, 21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483, 21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234, 22806, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039, 24038, 24066, 24067, 24179, 24188, 24321, 24344, 24343, 24517, 25098, 25171, 25172, 25170, 25169, 26021, 26086, 26414, 26412, 26410, 26411, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712, 27710, 29359, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 29993, 3e4, 30001, 30002, 30003, 30091, 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31166, 31348, 31435, 19998, 19999, 20050, 20051, 20073, 20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237, 20240, 20241, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225, 20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015, 21009, 21010, 21006, 21014, 21155, 21256, 21281, 21280, 21360, 21361, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508, 21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237, 22323, 22320, 22312, 22317, 22316, 22319, 22313, 22809, 22810, 22839, 22840, 22916, 22904, 22915, 22909, 22905, 22914, 22913, 23383, 23384, 23431, 23432, 23429, 23433, 23546, 23574, 23673, 24030, 24070, 24182, 24180, 24335, 24347, 24537, 24534, 25102, 25100, 25101, 25104, 25187, 25179, 25176, 25910, 26089, 26088, 26092, 26093, 26354, 26355, 26377, 26429, 26420, 26417, 26421, 27425, 27492, 27515, 27670, 27741, 27735, 27737, 27743, 27744, 27728, 27733, 27745, 27739, 27725, 27726, 28784, 29279, 29277, 30334, 31481, 31859, 31992, 32566, 32650, 32701, 32769, 32771, 32780, 32786, 32819, 32895, 32905, 32907, 32908, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33406, 34411, 34880, 34892, 34915, 35199, 38433, 20018, 20136, 20301, 20303, 20295, 20311, 20318, 20276, 20315, 20309, 20272, 20304, 20305, 20285, 20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271, 20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853, 20918, 20919, 21029, 21028, 21033, 21034, 21032, 21163, 21161, 21162, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566, 21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545, 21578, 21561, 21563, 21560, 21550, 21557, 21558, 21536, 21564, 21568, 21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353, 22336, 22349, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846, 22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931, 22922, 22949, 23389, 23388, 23386, 23387, 23436, 23435, 23439, 23596, 23616, 23617, 23615, 23614, 23696, 23697, 23700, 23692, 24043, 24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439, 24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106, 25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212, 25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233, 25222, 25913, 25915, 25912, 26097, 26356, 26463, 26446, 26447, 26448, 26449, 26460, 26454, 26462, 26441, 26438, 26464, 26451, 26455, 27493, 27599, 27714, 27742, 27801, 27777, 27784, 27785, 27781, 27803, 27754, 27770, 27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774, 27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, 28796, 28797, 28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995, 30007, 30008, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995, 32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426, 33419, 33421, 35211, 35282, 35328, 35895, 35910, 35925, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36802, 36806, 36805, 36804, 24033, 37009, 37026, 37034, 37030, 37027, 37193, 37318, 37324, 38450, 38446, 38449, 38442, 38444, 20006, 20054, 20083, 20107, 20123, 20126, 20139, 20140, 20335, 20381, 20365, 20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360, 20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821, 20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050, 21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329, 21350, 21367, 21368, 21369, 21462, 21460, 21463, 21619, 21621, 21654, 21624, 21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617, 21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403, 22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857, 22855, 22856, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993, 22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981, 23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578, 23624, 23621, 23622, 23735, 23713, 23736, 23721, 23723, 23729, 23731, 24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220, 24213, 24214, 24310, 24358, 24359, 24361, 24448, 24449, 24447, 24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629, 24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109, 25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273, 25298, 25307, 25259, 25299, 25300, 25291, 25288, 25256, 25277, 25276, 25296, 25305, 25287, 25293, 25269, 25306, 25265, 25304, 25302, 25303, 25286, 25260, 25294, 25918, 26023, 26044, 26106, 26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122, 26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487, 26503, 26525, 26519, 26479, 26480, 26495, 26505, 26494, 26512, 26485, 26522, 26515, 26492, 26474, 26482, 27427, 27494, 27495, 27519, 27667, 27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, 27837, 27838, 27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822, 27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887, 27868, 27862, 27872, 28821, 28814, 28818, 28810, 28825, 29228, 29229, 29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609, 29608, 29599, 29611, 29605, 30013, 30109, 30105, 30106, 30340, 30402, 30450, 30452, 30693, 30717, 31038, 31040, 31041, 31177, 31176, 31354, 31353, 31482, 31998, 32596, 32652, 32651, 32773, 32954, 32933, 32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278, 33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452, 33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021, 34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319, 37329, 38263, 38272, 38428, 38464, 38463, 38459, 38468, 38466, 38585, 38632, 38738, 38750, 20127, 20141, 20142, 20449, 20405, 20399, 20415, 20448, 20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398, 20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881, 20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193, 21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672, 21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697, 21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271, 22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865, 22863, 22862, 22864, 23004, 23e3, 23039, 23011, 23016, 23043, 23013, 23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458, 23461, 23553, 23630, 23631, 23629, 23627, 23769, 23762, 24055, 24093, 24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456, 24453, 24458, 24459, 24455, 24460, 24457, 24594, 24605, 24608, 24613, 24590, 24616, 24653, 24688, 24680, 24674, 24646, 24643, 24684, 24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345, 25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361, 25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151, 26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580, 26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548, 26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589, 26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915, 27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 27963, 27965, 27966, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950, 27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856, 28846, 28836, 29232, 29298, 29295, 29300, 29417, 29408, 29409, 29623, 29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028, 30030, 30027, 30123, 30116, 30117, 30114, 30115, 30328, 30342, 30343, 30344, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473, 30475, 30462, 30460, 30471, 30684, 30722, 30740, 30732, 30733, 31046, 31049, 31048, 31047, 31161, 31162, 31185, 31186, 31179, 31359, 31361, 31487, 31485, 31869, 32002, 32005, 32e3, 32009, 32007, 32004, 32006, 32568, 32654, 32703, 32772, 32784, 32781, 32785, 32822, 32982, 32997, 32986, 32963, 32964, 32972, 32993, 32987, 32974, 32990, 32996, 32989, 33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509, 33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502, 33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923, 35201, 35284, 35336, 35330, 35331, 35998, 36e3, 36212, 36211, 36276, 36557, 36556, 36848, 36838, 36834, 36842, 36837, 36845, 36843, 36836, 36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480, 38475, 38476, 38477, 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 20056, 20147, 20492, 20493, 20515, 20463, 20518, 20517, 20472, 20521, 20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500, 20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522, 20478, 20523, 20489, 20860, 20900, 20901, 20898, 20941, 20940, 20934, 20939, 21078, 21084, 21076, 21083, 21085, 21290, 21375, 21407, 21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766, 21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799, 21767, 21757, 21775, 22275, 22276, 22466, 22484, 22475, 22467, 22537, 22799, 22871, 22872, 22874, 23057, 23064, 23068, 23071, 23067, 23059, 23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472, 23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637, 23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796, 24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464, 24665, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735, 24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343, 25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424, 25405, 25386, 25387, 25384, 25421, 25420, 25928, 25929, 26009, 26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177, 26360, 26388, 26389, 26391, 26657, 26680, 26696, 26694, 26707, 26681, 26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704, 26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529, 27575, 27683, 27687, 27688, 27686, 27684, 27888, 28010, 28053, 28040, 28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994, 28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888, 28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432, 29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045, 30044, 30042, 30041, 30142, 30149, 30151, 30130, 30131, 30141, 30140, 30137, 30146, 30136, 30347, 30384, 30410, 30413, 30414, 30505, 30495, 30496, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775, 30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062, 31070, 31069, 31063, 31066, 31204, 31203, 31207, 31199, 31206, 31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023, 32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013, 32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32792, 32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005, 33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261, 33260, 33280, 33296, 33322, 33323, 33320, 33324, 33467, 33579, 33618, 33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593, 33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451, 34468, 34473, 34444, 34467, 34460, 34928, 34935, 34945, 34946, 34941, 34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350, 35343, 35345, 35912, 35962, 35961, 36001, 36002, 36215, 36524, 36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852, 36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197, 37196, 37336, 37341, 37335, 37340, 37337, 38275, 38498, 38499, 38497, 38491, 38493, 38500, 38488, 38494, 38587, 39138, 39340, 39592, 39640, 39717, 39730, 39740, 20094, 20602, 20605, 20572, 20551, 20547, 20556, 20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559, 20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209, 21208, 21205, 21264, 21263, 21273, 21311, 21312, 21310, 21443, 26364, 21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846, 21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811, 21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496, 22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105, 23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408, 23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648, 23644, 23645, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849, 23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119, 24247, 24248, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425, 24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739, 24713, 24736, 24744, 24779, 24756, 24806, 24765, 24773, 24763, 24757, 24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775, 25114, 25115, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463, 25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512, 25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449, 25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944, 25941, 25940, 26012, 26011, 26028, 26063, 26059, 26060, 26062, 26205, 26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799, 26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755, 26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754, 27442, 27578, 27627, 27628, 27691, 28046, 28092, 28147, 28121, 28082, 28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113, 28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085, 28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074, 28140, 28095, 28134, 28921, 28937, 28938, 28925, 28911, 29245, 29309, 29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699, 29702, 29694, 29709, 29920, 29942, 29943, 29980, 29986, 30053, 30054, 30050, 30064, 30095, 30164, 30165, 30133, 30154, 30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520, 30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381, 31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895, 31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051, 32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718, 32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072, 33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656, 33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655, 33659, 33660, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500, 34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987, 34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365, 35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011, 36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889, 36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896, 36879, 36898, 36886, 36891, 36884, 37096, 37101, 37117, 37207, 37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517, 38515, 38520, 38512, 38516, 38518, 38519, 38508, 38592, 38634, 38633, 31456, 31455, 38914, 38915, 39770, 40165, 40565, 40575, 40613, 40635, 20642, 20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977, 21106, 21108, 21109, 21097, 21214, 21213, 21211, 21338, 21413, 21883, 21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908, 21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947, 21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580, 22564, 22576, 22577, 22561, 22557, 22560, 22777, 22778, 22880, 23159, 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506, 23500, 23507, 23504, 23562, 23563, 23601, 23884, 23888, 23860, 23879, 24061, 24133, 24125, 24128, 24131, 24190, 24266, 24257, 24258, 24260, 24380, 24429, 24489, 24490, 24488, 24785, 24801, 24754, 24758, 24800, 24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846, 24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536, 25577, 25545, 25542, 25549, 25554, 25571, 25552, 25569, 25558, 25581, 25582, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950, 25958, 25954, 25955, 26001, 26e3, 26031, 26222, 26224, 26228, 26230, 26223, 26257, 26234, 26238, 26231, 26366, 26367, 26399, 26397, 26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855, 26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825, 26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631, 27694, 27695, 27692, 28207, 28216, 28244, 28193, 28210, 28263, 28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270, 28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, 28189, 28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255, 28953, 28954, 28966, 28976, 28961, 28982, 29038, 28956, 29260, 29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730, 29733, 29749, 29750, 29748, 29743, 29723, 29734, 29736, 29989, 29990, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174, 30176, 30331, 30332, 30358, 30355, 30388, 30428, 30543, 30701, 30813, 30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 31383, 31382, 31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563, 31567, 31569, 31903, 31909, 32094, 32080, 32104, 32085, 32043, 32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, 32724, 32725, 32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094, 33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805, 33760, 33733, 33803, 33729, 33775, 33777, 33780, 33879, 33802, 33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756, 33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532, 34512, 34526, 34903, 35009, 35010, 34993, 35203, 35222, 35387, 35424, 35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386, 35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027, 36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302, 36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604, 36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129, 37118, 37219, 37221, 37327, 37396, 37397, 37411, 37385, 37406, 37389, 37392, 37383, 37393, 38292, 38287, 38283, 38289, 38291, 38290, 38286, 38538, 38542, 38539, 38525, 38533, 38534, 38541, 38514, 38532, 38593, 38597, 38596, 38598, 38599, 38639, 38642, 38860, 38917, 38918, 38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341, 40643, 40653, 40657, 20098, 20653, 20661, 20658, 20659, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119, 21111, 21117, 21215, 21222, 21220, 21218, 21219, 21295, 21983, 21992, 21971, 21990, 21966, 21980, 21959, 21969, 21987, 21988, 21999, 21978, 21985, 21957, 21958, 21989, 21961, 22290, 22291, 22622, 22609, 22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610, 22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234, 23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492, 24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840, 24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887, 25121, 25122, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615, 25628, 25620, 25613, 25654, 25622, 25623, 25606, 25964, 26015, 26032, 26263, 26249, 26247, 26248, 26262, 26244, 26264, 26253, 26371, 27028, 26989, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984, 26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506, 27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304, 28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310, 28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028, 29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032, 29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781, 29791, 29790, 29761, 29759, 29785, 29787, 29788, 30070, 30072, 30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195, 30430, 30431, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572, 30556, 30565, 30568, 30562, 30702, 30862, 30896, 30871, 30872, 30860, 30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165, 31260, 31258, 31264, 31252, 31263, 31262, 31391, 31392, 31607, 31680, 31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129, 32143, 32091, 32622, 32617, 32618, 32626, 32681, 32680, 32676, 32854, 32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131, 33145, 33146, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909, 33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897, 33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560, 34558, 34555, 34562, 34563, 34566, 34570, 34905, 35039, 35028, 35033, 35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435, 35442, 35443, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441, 35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938, 35978, 35977, 36042, 36039, 36040, 36036, 36018, 36035, 36034, 36037, 36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530, 36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930, 36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926, 36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432, 37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453, 37445, 37433, 37439, 37466, 38296, 38552, 38548, 38549, 38605, 38603, 38601, 38602, 38647, 38651, 38649, 38646, 38742, 38772, 38774, 38928, 38929, 38931, 38922, 38930, 38924, 39164, 39156, 39165, 39166, 39347, 39345, 39348, 39649, 40169, 40578, 40718, 40723, 40736, 20711, 20718, 20709, 20694, 20717, 20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123, 21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022, 22025, 22029, 22030, 22007, 22038, 22047, 22024, 22032, 22006, 22296, 22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781, 22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254, 23256, 23267, 23413, 23518, 23527, 23521, 23525, 23526, 23528, 23522, 23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151, 24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907, 24951, 24930, 24931, 24927, 24922, 24920, 24949, 25130, 25735, 25688, 25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723, 25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029, 27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088, 27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467, 28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418, 28450, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459, 28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081, 29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796, 29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217, 30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887, 30899, 30889, 30883, 31118, 31119, 31117, 31278, 31281, 31402, 31401, 31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631, 31672, 31623, 31620, 31929, 31933, 31934, 32187, 32176, 32156, 32189, 32190, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191, 32181, 32184, 32173, 32210, 32199, 32172, 32624, 32736, 32737, 32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151, 33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990, 33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936, 33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584, 34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048, 35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492, 35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980, 36051, 36049, 36050, 36203, 36249, 36245, 36348, 36628, 36626, 36629, 36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957, 36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521, 38305, 38312, 38313, 38307, 38309, 38308, 38553, 38556, 38555, 38604, 38610, 38656, 38780, 38789, 38902, 38935, 38936, 39087, 39089, 39171, 39173, 39180, 39177, 39361, 39599, 39600, 39654, 39745, 39746, 40180, 40182, 40179, 40636, 40763, 40778, 20740, 20736, 20731, 20725, 20729, 20738, 20744, 20745, 20741, 20956, 21127, 21128, 21129, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066, 22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, 22063, 22064, 22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305, 23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531, 23652, 23653, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287, 24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942, 24925, 24917, 24962, 24956, 24944, 24939, 24958, 24999, 24976, 25003, 24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721, 25758, 25778, 25736, 25744, 25776, 25765, 25747, 25749, 25769, 25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973, 25975, 25976, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137, 27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117, 27153, 27472, 27470, 27556, 27589, 27590, 28479, 28540, 28548, 28497, 28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528, 28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105, 29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824, 30079, 30240, 30249, 30239, 30244, 30246, 30241, 30242, 30362, 30394, 30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922, 30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291, 31407, 31406, 31661, 31665, 31684, 31668, 31686, 31687, 31681, 31648, 31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232, 32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631, 32687, 32745, 32806, 33179, 33180, 33181, 33184, 33178, 33176, 34071, 34109, 34074, 34030, 34092, 34093, 34067, 34065, 34083, 34081, 34068, 34028, 34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664, 34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, 35090, 35091, 35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506, 35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916, 35918, 35948, 36064, 36062, 36070, 36068, 36076, 36077, 36066, 36067, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368, 36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635, 36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968, 36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251, 37573, 37563, 37559, 37610, 37548, 37604, 37569, 37555, 37564, 37586, 37575, 37616, 37554, 38317, 38321, 38660, 38662, 38663, 38665, 38752, 38797, 38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192, 39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607, 39662, 39663, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 40195, 40617, 40638, 40654, 22696, 40786, 20754, 20760, 20756, 20752, 20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137, 22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114, 22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536, 23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034, 25032, 25136, 25797, 25793, 25803, 25787, 25788, 25818, 25796, 25799, 25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297, 26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193, 27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511, 27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608, 28601, 28598, 28582, 28576, 28596, 29118, 29129, 29136, 29138, 29128, 29141, 29113, 29134, 29145, 29148, 29123, 29124, 29544, 29852, 29859, 29848, 29855, 29854, 29922, 29964, 29965, 30260, 30264, 30266, 30439, 30437, 30624, 30622, 30623, 30629, 30952, 30938, 30956, 30951, 31142, 31309, 31310, 31302, 31308, 31307, 31418, 31705, 31761, 31689, 31716, 31707, 31713, 31721, 31718, 31957, 31958, 32266, 32273, 32264, 32283, 32291, 32286, 32285, 32265, 32272, 32633, 32690, 32752, 32753, 32750, 32808, 33203, 33193, 33192, 33275, 33288, 33368, 33369, 34122, 34137, 34120, 34152, 34153, 34115, 34121, 34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114, 35122, 35109, 35115, 35105, 35242, 35238, 35558, 35578, 35563, 35569, 35584, 35548, 35559, 35566, 35582, 35585, 35586, 35575, 35565, 35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404, 36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981, 36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624, 37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665, 37653, 37678, 37657, 38331, 38567, 38568, 38570, 38613, 38670, 38673, 38678, 38669, 38675, 38671, 38747, 38748, 38758, 38808, 38960, 38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195, 39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720, 39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660, 40845, 40860, 20778, 20767, 20769, 20786, 21237, 22158, 22144, 22160, 22149, 22151, 22159, 22741, 22739, 22737, 22734, 23344, 23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171, 24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806, 25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837, 25986, 25987, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355, 27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632, 28657, 28639, 28640, 28635, 28644, 28651, 28655, 28544, 28652, 28641, 28649, 28629, 28654, 28656, 29159, 29151, 29166, 29158, 29157, 29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872, 29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636, 30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146, 31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964, 31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306, 32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309, 32319, 32303, 32580, 32755, 32764, 32881, 32882, 32880, 32879, 32883, 33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256, 33289, 33393, 34218, 34180, 34174, 34204, 34193, 34196, 34223, 34203, 34183, 34216, 34186, 34407, 34752, 34769, 34739, 34770, 34758, 34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133, 35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600, 35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425, 36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989, 36996, 36993, 36994, 36992, 37177, 37283, 37278, 37276, 37709, 37762, 37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744, 37722, 37716, 38346, 38347, 38348, 38344, 38342, 38577, 38584, 38614, 38684, 38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851, 39850, 39853, 40251, 40255, 40587, 40655, 40670, 40668, 40669, 40667, 40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059, 25139, 25844, 25842, 25854, 25862, 25850, 25851, 25847, 26039, 26332, 26406, 27315, 27308, 27331, 27323, 27320, 27330, 27310, 27311, 27487, 27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687, 29179, 29180, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294, 30296, 30290, 30653, 30655, 30651, 30652, 30990, 31150, 31329, 31330, 31328, 31428, 31429, 31787, 31783, 31786, 31774, 31779, 31777, 31975, 32340, 32341, 32350, 32346, 32353, 32338, 32345, 32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217, 34253, 34256, 34249, 34224, 34234, 34233, 34214, 34799, 34796, 34802, 34784, 35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441, 36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995, 37e3, 37291, 37292, 37328, 37780, 37770, 37782, 37794, 37811, 37806, 37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626, 38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989, 38991, 38988, 38990, 38995, 39098, 39230, 39231, 39229, 39214, 39333, 39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933, 39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181, 22750, 22751, 22754, 23541, 40848, 24300, 25074, 25079, 25078, 25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699, 28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346, 29560, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663, 31001, 31153, 31339, 31337, 31806, 31807, 31800, 31805, 31799, 31808, 32363, 32365, 32377, 32361, 32362, 32645, 32371, 32694, 32697, 32696, 33240, 34281, 34269, 34282, 34261, 34276, 34277, 34295, 34811, 34821, 34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672, 35657, 35674, 35662, 35663, 35654, 35673, 36104, 36106, 36476, 36466, 36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, 37002, 37003, 37297, 37294, 37857, 37841, 37855, 37827, 37832, 37852, 37853, 37846, 37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698, 38695, 38753, 38876, 38907, 39006, 39e3, 39003, 39100, 39237, 39241, 39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306, 40298, 40300, 40594, 40599, 40595, 40628, 21240, 22184, 22199, 22198, 22196, 22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880, 25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563, 29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820, 31811, 31821, 31983, 31984, 36782, 32381, 32380, 32386, 32588, 32768, 33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314, 34836, 34837, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679, 35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912, 37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472, 39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803, 40801, 20791, 20792, 22209, 22208, 22210, 22804, 23660, 24013, 25084, 25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748, 29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700, 34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261, 35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306, 37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, 38712, 38713, 38706, 38911, 39015, 39013, 39255, 39493, 39491, 39488, 39486, 39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605, 40687, 40729, 40796, 40806, 40807, 20796, 20795, 22216, 22218, 22217, 23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760, 29568, 29924, 30090, 30318, 30316, 31155, 31840, 31839, 32894, 32893, 33247, 35186, 35183, 35324, 35712, 36118, 36119, 36497, 36499, 36705, 37192, 37956, 37969, 37970, 38717, 38718, 38851, 38849, 39019, 39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403, 40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899, 25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406, 32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984, 37988, 38760, 39023, 39260, 39514, 39515, 39511, 39635, 39636, 39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900, 28766, 30321, 30322, 30679, 32592, 32648, 34870, 34873, 34914, 35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724, 38854, 39024, 39519, 39714, 39768, 40031, 40441, 40442, 40572, 40573, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854, 34875, 35264, 36513, 37313, 38002, 38e3, 39025, 39262, 39638, 39715, 40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740, 36522, 37317, 38013, 38014, 38012, 40055, 40056, 40695, 35924, 38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 20022, 20031, 20101, 20128, 20866, 20886, 20907, 21241, 21304, 21353, 21430, 22794, 23424, 24027, 12083, 24191, 24308, 24400, 24417, 25908, 26080, 30098, 30326, 36789, 38582, 168, 710, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 65339, 65341, 10045, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8679, 8632, 8633, 12751, 131276, 20058, 131210, 20994, 17553, 40880, 20872, 40881, 161287, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 12443, 12444, 11904, 11908, 11910, 11911, 11912, 11914, 11916, 11917, 11925, 11932, 11933, 11941, 11943, 11946, 11948, 11950, 11958, 11964, 11966, 11974, 11978, 11980, 11981, 11983, 11990, 11991, 11998, 12003, null, null, null, 643, 592, 603, 596, 629, 339, 248, 331, 650, 618, 20034, 20060, 20981, 21274, 21378, 19975, 19980, 20039, 20109, 22231, 64012, 23662, 24435, 19983, 20871, 19982, 20014, 20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787, 22828, 23568, 24063, 26081, 27571, 27596, 27668, 29247, 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186, 21004, 21276, 21324, 22306, 22307, 22807, 22831, 23425, 23428, 23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168, 27669, 27702, 27715, 27711, 27707, 29358, 29360, 29578, 31160, 32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215, 20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913, 21011, 21001, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239, 22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903, 22911, 23382, 23573, 23589, 23676, 23674, 23675, 23678, 24031, 24181, 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180, 25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419, 27672, 27718, 27730, 27740, 27727, 27722, 27732, 27723, 27724, 28785, 29278, 29364, 29365, 29582, 29994, 30335, 31349, 32593, 33400, 33404, 33408, 33405, 33407, 34381, 35198, 37017, 37015, 37016, 37019, 37012, 38434, 38436, 38432, 38435, 20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319, 20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022, 21025, 21165, 21166, 21257, 21347, 21362, 21390, 21391, 21552, 21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 21565, 21583, 21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348, 22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926, 22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693, 23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032, 24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440, 24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548, 24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228, 25230, 25231, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224, 25207, 25213, 25202, 25204, 25911, 26096, 26100, 26099, 26098, 26101, 26437, 26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600, 27673, 27674, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759, 27753, 27802, 27757, 27783, 27797, 27804, 27750, 27763, 27749, 27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377, 29370, 29381, 29589, 29591, 29587, 29588, 29586, 30010, 30009, 30100, 30101, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924, 33424, 33423, 33413, 33422, 33425, 33427, 33418, 33411, 33412, 35960, 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024, 38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352, 20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378, 20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373, 20331, 20334, 20894, 20924, 20926, 21045, 21042, 21043, 21062, 21041, 21180, 21258, 21259, 21308, 21394, 21396, 21639, 21631, 21633, 21649, 21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645, 21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383, 22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395, 22387, 22388, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991, 22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973, 22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623, 23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725, 23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084, 24089, 24360, 24354, 24355, 24356, 24404, 24450, 24446, 24445, 24542, 24549, 24621, 24614, 24601, 24626, 24587, 24628, 24586, 24599, 24627, 24602, 24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585, 24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290, 25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043, 26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117, 26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486, 26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513, 26521, 26499, 26493, 26497, 26488, 26489, 26516, 27429, 27520, 27518, 27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821, 27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858, 27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847, 27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806, 28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400, 29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613, 29606, 29602, 29600, 29612, 29597, 29917, 29928, 30015, 30016, 30014, 30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713, 30715, 30714, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861, 31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440, 33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438, 33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442, 34416, 34415, 34413, 34414, 35926, 36818, 36811, 36819, 36813, 36822, 36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460, 38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436, 20444, 20441, 20411, 20403, 20443, 20423, 20438, 20410, 20416, 20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398, 21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687, 21678, 21718, 21686, 21701, 21702, 21664, 21616, 21692, 21666, 21694, 21618, 21726, 21680, 22453, 22430, 22431, 22436, 22412, 22423, 22429, 22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797, 22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036, 23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038, 23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771, 23774, 23770, 23753, 23751, 23754, 23766, 23763, 23764, 23759, 23752, 23750, 23758, 23775, 23800, 24057, 24097, 24098, 24099, 24096, 24100, 24240, 24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631, 24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652, 24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, 25154, 25155, 25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356, 25336, 25334, 25344, 25363, 25364, 25338, 25365, 25339, 25328, 25921, 25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146, 26163, 26155, 26170, 26141, 26164, 26169, 26158, 26383, 26384, 26561, 26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565, 26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595, 26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572, 26542, 26598, 26587, 26618, 26569, 26570, 26563, 26602, 26571, 27432, 27522, 27524, 27574, 27606, 27608, 27616, 27680, 27681, 27944, 27956, 27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929, 27962, 27930, 27921, 27904, 27933, 27970, 27905, 27928, 27959, 27907, 27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855, 28831, 28862, 28849, 28848, 28833, 28852, 28853, 28841, 29249, 29257, 29258, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419, 29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625, 29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624, 29643, 29932, 29934, 29998, 30023, 30024, 30119, 30122, 30329, 30404, 30472, 30467, 30468, 30469, 30474, 30455, 30459, 30458, 30695, 30696, 30726, 30737, 30738, 30725, 30736, 30735, 30734, 30729, 30723, 30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190, 31182, 31360, 31358, 31441, 31488, 31489, 31866, 31864, 31865, 31871, 31872, 31873, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775, 32782, 32783, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962, 32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983, 32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512, 33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525, 33548, 33531, 33526, 33520, 33514, 33508, 33504, 33530, 33523, 33517, 34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283, 35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055, 37077, 37061, 37054, 37063, 37067, 37064, 37332, 37331, 38484, 38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514, 20528, 20507, 20469, 20468, 20531, 20535, 20524, 20470, 20471, 20503, 20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883, 20938, 20932, 20933, 20936, 20942, 21089, 21082, 21074, 21086, 21087, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783, 21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777, 21765, 21745, 21770, 21755, 21751, 21752, 21728, 21774, 21763, 21771, 22273, 22274, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460, 22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065, 23062, 23085, 23086, 23061, 23055, 23063, 23050, 23070, 23091, 23404, 23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793, 23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371, 24368, 24423, 24669, 24666, 24679, 24641, 24738, 24712, 24704, 24722, 24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113, 25158, 25330, 25360, 25430, 25388, 25412, 25413, 25398, 25411, 25572, 25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433, 25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930, 25926, 26054, 26051, 26052, 26050, 26186, 26207, 26183, 26193, 26386, 26387, 26655, 26650, 26697, 26674, 26675, 26683, 26699, 26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692, 26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661, 26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622, 27620, 27624, 27619, 27618, 27623, 27685, 28026, 28003, 28004, 28022, 27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143, 28031, 28038, 27998, 28007, 28e3, 28055, 28016, 28028, 27999, 28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035, 28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569, 28898, 28887, 28882, 28894, 28896, 28884, 28877, 28869, 28870, 28871, 28890, 28878, 28897, 29250, 29304, 29303, 29302, 29440, 29434, 29428, 29438, 29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671, 29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, 29655, 29656, 29672, 29918, 29919, 29940, 29941, 29985, 30043, 30047, 30128, 30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493, 30491, 30480, 30483, 30482, 30499, 30481, 30485, 30489, 30490, 30498, 30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753, 30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058, 31057, 31211, 31212, 31200, 31214, 31213, 31210, 31196, 31198, 31197, 31366, 31369, 31365, 31371, 31372, 31370, 31367, 31448, 31504, 31492, 31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889, 31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024, 32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608, 32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825, 33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317, 33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574, 33564, 33570, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558, 33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566, 33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445, 34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457, 34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, 34883, 34884, 34925, 34933, 34934, 34930, 34944, 34929, 34943, 34927, 34947, 34942, 34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216, 36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859, 36868, 36860, 36854, 37078, 37088, 37081, 37082, 37091, 37087, 37093, 37080, 37083, 37079, 37084, 37092, 37200, 37198, 37199, 37333, 37346, 37338, 38492, 38495, 38588, 39139, 39647, 39727, 20095, 20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552, 20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587, 20579, 20580, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099, 21101, 21100, 21102, 21206, 21203, 21293, 21404, 21877, 21878, 21820, 21837, 21840, 21812, 21802, 21841, 21858, 21814, 21813, 21808, 21842, 21829, 21772, 21810, 21861, 21838, 21817, 21832, 21805, 21819, 21824, 21835, 22282, 22279, 22523, 22548, 22498, 22518, 22492, 22516, 22528, 22509, 22525, 22536, 22520, 22539, 22515, 22479, 22535, 22510, 22499, 22514, 22501, 22508, 22497, 22542, 22524, 22544, 22503, 22529, 22540, 22513, 22505, 22512, 22541, 22532, 22876, 23136, 23128, 23125, 23143, 23134, 23096, 23093, 23149, 23120, 23135, 23141, 23148, 23123, 23140, 23127, 23107, 23133, 23122, 23108, 23131, 23112, 23182, 23102, 23117, 23097, 23116, 23152, 23145, 23111, 23121, 23126, 23106, 23132, 23410, 23406, 23489, 23488, 23641, 23838, 23819, 23837, 23834, 23840, 23820, 23848, 23821, 23846, 23845, 23823, 23856, 23826, 23843, 23839, 23854, 24126, 24116, 24241, 24244, 24249, 24242, 24243, 24374, 24376, 24475, 24470, 24479, 24714, 24720, 24710, 24766, 24752, 24762, 24787, 24788, 24783, 24804, 24793, 24797, 24776, 24753, 24795, 24759, 24778, 24767, 24771, 24781, 24768, 25394, 25445, 25482, 25474, 25469, 25533, 25502, 25517, 25501, 25495, 25515, 25486, 25455, 25479, 25488, 25454, 25519, 25461, 25500, 25453, 25518, 25468, 25508, 25403, 25503, 25464, 25477, 25473, 25489, 25485, 25456, 25939, 26061, 26213, 26209, 26203, 26201, 26204, 26210, 26392, 26745, 26759, 26768, 26780, 26733, 26734, 26798, 26795, 26966, 26735, 26787, 26796, 26793, 26741, 26740, 26802, 26767, 26743, 26770, 26748, 26731, 26738, 26794, 26752, 26737, 26750, 26779, 26774, 26763, 26784, 26761, 26788, 26744, 26747, 26769, 26764, 26762, 26749, 27446, 27443, 27447, 27448, 27537, 27535, 27533, 27534, 27532, 27690, 28096, 28075, 28084, 28083, 28276, 28076, 28137, 28130, 28087, 28150, 28116, 28160, 28104, 28128, 28127, 28118, 28094, 28133, 28124, 28125, 28123, 28148, 28106, 28093, 28141, 28144, 28090, 28117, 28098, 28111, 28105, 28112, 28146, 28115, 28157, 28119, 28109, 28131, 28091, 28922, 28941, 28919, 28951, 28916, 28940, 28912, 28932, 28915, 28944, 28924, 28927, 28934, 28947, 28928, 28920, 28918, 28939, 28930, 28942, 29310, 29307, 29308, 29311, 29469, 29463, 29447, 29457, 29464, 29450, 29448, 29439, 29455, 29470, 29576, 29686, 29688, 29685, 29700, 29697, 29693, 29703, 29696, 29690, 29692, 29695, 29708, 29707, 29684, 29704, 30052, 30051, 30158, 30162, 30159, 30155, 30156, 30161, 30160, 30351, 30345, 30419, 30521, 30511, 30509, 30513, 30514, 30516, 30515, 30525, 30501, 30523, 30517, 30792, 30802, 30793, 30797, 30794, 30796, 30758, 30789, 30800, 31076, 31079, 31081, 31082, 31075, 31083, 31073, 31163, 31226, 31224, 31222, 31223, 31375, 31380, 31376, 31541, 31559, 31540, 31525, 31536, 31522, 31524, 31539, 31512, 31530, 31517, 31537, 31531, 31533, 31535, 31538, 31544, 31514, 31523, 31892, 31896, 31894, 31907, 32053, 32061, 32056, 32054, 32058, 32069, 32044, 32041, 32065, 32071, 32062, 32063, 32074, 32059, 32040, 32611, 32661, 32668, 32669, 32667, 32714, 32715, 32717, 32720, 32721, 32711, 32719, 32713, 32799, 32798, 32795, 32839, 32835, 32840, 33048, 33061, 33049, 33051, 33069, 33055, 33068, 33054, 33057, 33045, 33063, 33053, 33058, 33297, 33336, 33331, 33338, 33332, 33330, 33396, 33680, 33699, 33704, 33677, 33658, 33651, 33700, 33652, 33679, 33665, 33685, 33689, 33653, 33684, 33705, 33661, 33667, 33676, 33693, 33691, 33706, 33675, 33662, 33701, 33711, 33672, 33687, 33712, 33663, 33702, 33671, 33710, 33654, 33690, 34393, 34390, 34495, 34487, 34498, 34497, 34501, 34490, 34480, 34504, 34489, 34483, 34488, 34508, 34484, 34491, 34492, 34499, 34493, 34494, 34898, 34953, 34965, 34984, 34978, 34986, 34970, 34961, 34977, 34975, 34968, 34983, 34969, 34971, 34967, 34980, 34988, 34956, 34963, 34958, 35202, 35286, 35289, 35285, 35376, 35367, 35372, 35358, 35897, 35899, 35932, 35933, 35965, 36005, 36221, 36219, 36217, 36284, 36290, 36281, 36287, 36289, 36568, 36574, 36573, 36572, 36567, 36576, 36577, 36900, 36875, 36881, 36892, 36876, 36897, 37103, 37098, 37104, 37108, 37106, 37107, 37076, 37099, 37100, 37097, 37206, 37208, 37210, 37203, 37205, 37356, 37364, 37361, 37363, 37368, 37348, 37369, 37354, 37355, 37367, 37352, 37358, 38266, 38278, 38280, 38524, 38509, 38507, 38513, 38511, 38591, 38762, 38916, 39141, 39319, 20635, 20629, 20628, 20638, 20619, 20643, 20611, 20620, 20622, 20637, 20584, 20636, 20626, 20610, 20615, 20831, 20948, 21266, 21265, 21412, 21415, 21905, 21928, 21925, 21933, 21879, 22085, 21922, 21907, 21896, 21903, 21941, 21889, 21923, 21906, 21924, 21885, 21900, 21926, 21887, 21909, 21921, 21902, 22284, 22569, 22583, 22553, 22558, 22567, 22563, 22568, 22517, 22600, 22565, 22556, 22555, 22579, 22591, 22582, 22574, 22585, 22584, 22573, 22572, 22587, 22881, 23215, 23188, 23199, 23162, 23202, 23198, 23160, 23206, 23164, 23205, 23212, 23189, 23214, 23095, 23172, 23178, 23191, 23171, 23179, 23209, 23163, 23165, 23180, 23196, 23183, 23187, 23197, 23530, 23501, 23499, 23508, 23505, 23498, 23502, 23564, 23600, 23863, 23875, 23915, 23873, 23883, 23871, 23861, 23889, 23886, 23893, 23859, 23866, 23890, 23869, 23857, 23897, 23874, 23865, 23881, 23864, 23868, 23858, 23862, 23872, 23877, 24132, 24129, 24408, 24486, 24485, 24491, 24777, 24761, 24780, 24802, 24782, 24772, 24852, 24818, 24842, 24854, 24837, 24821, 24851, 24824, 24828, 24830, 24769, 24835, 24856, 24861, 24848, 24831, 24836, 24843, 25162, 25492, 25521, 25520, 25550, 25573, 25576, 25583, 25539, 25757, 25587, 25546, 25568, 25590, 25557, 25586, 25589, 25697, 25567, 25534, 25565, 25564, 25540, 25560, 25555, 25538, 25543, 25548, 25547, 25544, 25584, 25559, 25561, 25906, 25959, 25962, 25956, 25948, 25960, 25957, 25996, 26013, 26014, 26030, 26064, 26066, 26236, 26220, 26235, 26240, 26225, 26233, 26218, 26226, 26369, 26892, 26835, 26884, 26844, 26922, 26860, 26858, 26865, 26895, 26838, 26871, 26859, 26852, 26870, 26899, 26896, 26867, 26849, 26887, 26828, 26888, 26992, 26804, 26897, 26863, 26822, 26900, 26872, 26832, 26877, 26876, 26856, 26891, 26890, 26903, 26830, 26824, 26845, 26846, 26854, 26868, 26833, 26886, 26836, 26857, 26901, 26917, 26823, 27449, 27451, 27455, 27452, 27540, 27543, 27545, 27541, 27581, 27632, 27634, 27635, 27696, 28156, 28230, 28231, 28191, 28233, 28296, 28220, 28221, 28229, 28258, 28203, 28223, 28225, 28253, 28275, 28188, 28211, 28235, 28224, 28241, 28219, 28163, 28206, 28254, 28264, 28252, 28257, 28209, 28200, 28256, 28273, 28267, 28217, 28194, 28208, 28243, 28261, 28199, 28280, 28260, 28279, 28245, 28281, 28242, 28262, 28213, 28214, 28250, 28960, 28958, 28975, 28923, 28974, 28977, 28963, 28965, 28962, 28978, 28959, 28968, 28986, 28955, 29259, 29274, 29320, 29321, 29318, 29317, 29323, 29458, 29451, 29488, 29474, 29489, 29491, 29479, 29490, 29485, 29478, 29475, 29493, 29452, 29742, 29740, 29744, 29739, 29718, 29722, 29729, 29741, 29745, 29732, 29731, 29725, 29737, 29728, 29746, 29947, 29999, 30063, 30060, 30183, 30170, 30177, 30182, 30173, 30175, 30180, 30167, 30357, 30354, 30426, 30534, 30535, 30532, 30541, 30533, 30538, 30542, 30539, 30540, 30686, 30700, 30816, 30820, 30821, 30812, 30829, 30833, 30826, 30830, 30832, 30825, 30824, 30814, 30818, 31092, 31091, 31090, 31088, 31234, 31242, 31235, 31244, 31236, 31385, 31462, 31460, 31562, 31547, 31556, 31560, 31564, 31566, 31552, 31576, 31557, 31906, 31902, 31912, 31905, 32088, 32111, 32099, 32083, 32086, 32103, 32106, 32079, 32109, 32092, 32107, 32082, 32084, 32105, 32081, 32095, 32078, 32574, 32575, 32613, 32614, 32674, 32672, 32673, 32727, 32849, 32847, 32848, 33022, 32980, 33091, 33098, 33106, 33103, 33095, 33085, 33101, 33082, 33254, 33262, 33271, 33272, 33273, 33284, 33340, 33341, 33343, 33397, 33595, 33743, 33785, 33827, 33728, 33768, 33810, 33767, 33764, 33788, 33782, 33808, 33734, 33736, 33771, 33763, 33727, 33793, 33757, 33765, 33752, 33791, 33761, 33739, 33742, 33750, 33781, 33737, 33801, 33807, 33758, 33809, 33798, 33730, 33779, 33749, 33786, 33735, 33745, 33770, 33811, 33731, 33772, 33774, 33732, 33787, 33751, 33762, 33819, 33755, 33790, 34520, 34530, 34534, 34515, 34531, 34522, 34538, 34525, 34539, 34524, 34540, 34537, 34519, 34536, 34513, 34888, 34902, 34901, 35002, 35031, 35001, 35e3, 35008, 35006, 34998, 35004, 34999, 35005, 34994, 35073, 35017, 35221, 35224, 35223, 35293, 35290, 35291, 35406, 35405, 35385, 35417, 35392, 35415, 35416, 35396, 35397, 35410, 35400, 35409, 35402, 35404, 35407, 35935, 35969, 35968, 36026, 36030, 36016, 36025, 36021, 36228, 36224, 36233, 36312, 36307, 36301, 36295, 36310, 36316, 36303, 36309, 36313, 36296, 36311, 36293, 36591, 36599, 36602, 36601, 36582, 36590, 36581, 36597, 36583, 36584, 36598, 36587, 36593, 36588, 36596, 36585, 36909, 36916, 36911, 37126, 37164, 37124, 37119, 37116, 37128, 37113, 37115, 37121, 37120, 37127, 37125, 37123, 37217, 37220, 37215, 37218, 37216, 37377, 37386, 37413, 37379, 37402, 37414, 37391, 37388, 37376, 37394, 37375, 37373, 37382, 37380, 37415, 37378, 37404, 37412, 37401, 37399, 37381, 37398, 38267, 38285, 38284, 38288, 38535, 38526, 38536, 38537, 38531, 38528, 38594, 38600, 38595, 38641, 38640, 38764, 38768, 38766, 38919, 39081, 39147, 40166, 40697, 20099, 20100, 20150, 20669, 20671, 20678, 20654, 20676, 20682, 20660, 20680, 20674, 20656, 20673, 20666, 20657, 20683, 20681, 20662, 20664, 20951, 21114, 21112, 21115, 21116, 21955, 21979, 21964, 21968, 21963, 21962, 21981, 21952, 21972, 21956, 21993, 21951, 21970, 21901, 21967, 21973, 21986, 21974, 21960, 22002, 21965, 21977, 21954, 22292, 22611, 22632, 22628, 22607, 22605, 22601, 22639, 22613, 22606, 22621, 22617, 22629, 22619, 22589, 22627, 22641, 22780, 23239, 23236, 23243, 23226, 23224, 23217, 23221, 23216, 23231, 23240, 23227, 23238, 23223, 23232, 23242, 23220, 23222, 23245, 23225, 23184, 23510, 23512, 23513, 23583, 23603, 23921, 23907, 23882, 23909, 23922, 23916, 23902, 23912, 23911, 23906, 24048, 24143, 24142, 24138, 24141, 24139, 24261, 24268, 24262, 24267, 24263, 24384, 24495, 24493, 24823, 24905, 24906, 24875, 24901, 24886, 24882, 24878, 24902, 24879, 24911, 24873, 24896, 25120, 37224, 25123, 25125, 25124, 25541, 25585, 25579, 25616, 25618, 25609, 25632, 25636, 25651, 25667, 25631, 25621, 25624, 25657, 25655, 25634, 25635, 25612, 25638, 25648, 25640, 25665, 25653, 25647, 25610, 25626, 25664, 25637, 25639, 25611, 25575, 25627, 25646, 25633, 25614, 25967, 26002, 26067, 26246, 26252, 26261, 26256, 26251, 26250, 26265, 26260, 26232, 26400, 26982, 26975, 26936, 26958, 26978, 26993, 26943, 26949, 26986, 26937, 26946, 26967, 26969, 27002, 26952, 26953, 26933, 26988, 26931, 26941, 26981, 26864, 27e3, 26932, 26985, 26944, 26991, 26948, 26998, 26968, 26945, 26996, 26956, 26939, 26955, 26935, 26972, 26959, 26961, 26930, 26962, 26927, 27003, 26940, 27462, 27461, 27459, 27458, 27464, 27457, 27547, 64013, 27643, 27644, 27641, 27639, 27640, 28315, 28374, 28360, 28303, 28352, 28319, 28307, 28308, 28320, 28337, 28345, 28358, 28370, 28349, 28353, 28318, 28361, 28343, 28336, 28365, 28326, 28367, 28338, 28350, 28355, 28380, 28376, 28313, 28306, 28302, 28301, 28324, 28321, 28351, 28339, 28368, 28362, 28311, 28334, 28323, 28999, 29012, 29010, 29027, 29024, 28993, 29021, 29026, 29042, 29048, 29034, 29025, 28994, 29016, 28995, 29003, 29040, 29023, 29008, 29011, 28996, 29005, 29018, 29263, 29325, 29324, 29329, 29328, 29326, 29500, 29506, 29499, 29498, 29504, 29514, 29513, 29764, 29770, 29771, 29778, 29777, 29783, 29760, 29775, 29776, 29774, 29762, 29766, 29773, 29780, 29921, 29951, 29950, 29949, 29981, 30073, 30071, 27011, 30191, 30223, 30211, 30199, 30206, 30204, 30201, 30200, 30224, 30203, 30198, 30189, 30197, 30205, 30361, 30389, 30429, 30549, 30559, 30560, 30546, 30550, 30554, 30569, 30567, 30548, 30553, 30573, 30688, 30855, 30874, 30868, 30863, 30852, 30869, 30853, 30854, 30881, 30851, 30841, 30873, 30848, 30870, 30843, 31100, 31106, 31101, 31097, 31249, 31256, 31257, 31250, 31255, 31253, 31266, 31251, 31259, 31248, 31395, 31394, 31390, 31467, 31590, 31588, 31597, 31604, 31593, 31602, 31589, 31603, 31601, 31600, 31585, 31608, 31606, 31587, 31922, 31924, 31919, 32136, 32134, 32128, 32141, 32127, 32133, 32122, 32142, 32123, 32131, 32124, 32140, 32148, 32132, 32125, 32146, 32621, 32619, 32615, 32616, 32620, 32678, 32677, 32679, 32731, 32732, 32801, 33124, 33120, 33143, 33116, 33129, 33115, 33122, 33138, 26401, 33118, 33142, 33127, 33135, 33092, 33121, 33309, 33353, 33348, 33344, 33346, 33349, 34033, 33855, 33878, 33910, 33913, 33935, 33933, 33893, 33873, 33856, 33926, 33895, 33840, 33869, 33917, 33882, 33881, 33908, 33907, 33885, 34055, 33886, 33847, 33850, 33844, 33914, 33859, 33912, 33842, 33861, 33833, 33753, 33867, 33839, 33858, 33837, 33887, 33904, 33849, 33870, 33868, 33874, 33903, 33989, 33934, 33851, 33863, 33846, 33843, 33896, 33918, 33860, 33835, 33888, 33876, 33902, 33872, 34571, 34564, 34551, 34572, 34554, 34518, 34549, 34637, 34552, 34574, 34569, 34561, 34550, 34573, 34565, 35030, 35019, 35021, 35022, 35038, 35035, 35034, 35020, 35024, 35205, 35227, 35295, 35301, 35300, 35297, 35296, 35298, 35292, 35302, 35446, 35462, 35455, 35425, 35391, 35447, 35458, 35460, 35445, 35459, 35457, 35444, 35450, 35900, 35915, 35914, 35941, 35940, 35942, 35974, 35972, 35973, 36044, 36200, 36201, 36241, 36236, 36238, 36239, 36237, 36243, 36244, 36240, 36242, 36336, 36320, 36332, 36337, 36334, 36304, 36329, 36323, 36322, 36327, 36338, 36331, 36340, 36614, 36607, 36609, 36608, 36613, 36615, 36616, 36610, 36619, 36946, 36927, 36932, 36937, 36925, 37136, 37133, 37135, 37137, 37142, 37140, 37131, 37134, 37230, 37231, 37448, 37458, 37424, 37434, 37478, 37427, 37477, 37470, 37507, 37422, 37450, 37446, 37485, 37484, 37455, 37472, 37479, 37487, 37430, 37473, 37488, 37425, 37460, 37475, 37456, 37490, 37454, 37459, 37452, 37462, 37426, 38303, 38300, 38302, 38299, 38546, 38547, 38545, 38551, 38606, 38650, 38653, 38648, 38645, 38771, 38775, 38776, 38770, 38927, 38925, 38926, 39084, 39158, 39161, 39343, 39346, 39344, 39349, 39597, 39595, 39771, 40170, 40173, 40167, 40576, 40701, 20710, 20692, 20695, 20712, 20723, 20699, 20714, 20701, 20708, 20691, 20716, 20720, 20719, 20707, 20704, 20952, 21120, 21121, 21225, 21227, 21296, 21420, 22055, 22037, 22028, 22034, 22012, 22031, 22044, 22017, 22035, 22018, 22010, 22045, 22020, 22015, 22009, 22665, 22652, 22672, 22680, 22662, 22657, 22655, 22644, 22667, 22650, 22663, 22673, 22670, 22646, 22658, 22664, 22651, 22676, 22671, 22782, 22891, 23260, 23278, 23269, 23253, 23274, 23258, 23277, 23275, 23283, 23266, 23264, 23259, 23276, 23262, 23261, 23257, 23272, 23263, 23415, 23520, 23523, 23651, 23938, 23936, 23933, 23942, 23930, 23937, 23927, 23946, 23945, 23944, 23934, 23932, 23949, 23929, 23935, 24152, 24153, 24147, 24280, 24273, 24279, 24270, 24284, 24277, 24281, 24274, 24276, 24388, 24387, 24431, 24502, 24876, 24872, 24897, 24926, 24945, 24947, 24914, 24915, 24946, 24940, 24960, 24948, 24916, 24954, 24923, 24933, 24891, 24938, 24929, 24918, 25129, 25127, 25131, 25643, 25677, 25691, 25693, 25716, 25718, 25714, 25715, 25725, 25717, 25702, 25766, 25678, 25730, 25694, 25692, 25675, 25683, 25696, 25680, 25727, 25663, 25708, 25707, 25689, 25701, 25719, 25971, 26016, 26273, 26272, 26271, 26373, 26372, 26402, 27057, 27062, 27081, 27040, 27086, 27030, 27056, 27052, 27068, 27025, 27033, 27022, 27047, 27021, 27049, 27070, 27055, 27071, 27076, 27069, 27044, 27092, 27065, 27082, 27034, 27087, 27059, 27027, 27050, 27041, 27038, 27097, 27031, 27024, 27074, 27061, 27045, 27078, 27466, 27469, 27467, 27550, 27551, 27552, 27587, 27588, 27646, 28366, 28405, 28401, 28419, 28453, 28408, 28471, 28411, 28462, 28425, 28494, 28441, 28442, 28455, 28440, 28475, 28434, 28397, 28426, 28470, 28531, 28409, 28398, 28461, 28480, 28464, 28476, 28469, 28395, 28423, 28430, 28483, 28421, 28413, 28406, 28473, 28444, 28412, 28474, 28447, 28429, 28446, 28424, 28449, 29063, 29072, 29065, 29056, 29061, 29058, 29071, 29051, 29062, 29057, 29079, 29252, 29267, 29335, 29333, 29331, 29507, 29517, 29521, 29516, 29794, 29811, 29809, 29813, 29810, 29799, 29806, 29952, 29954, 29955, 30077, 30096, 30230, 30216, 30220, 30229, 30225, 30218, 30228, 30392, 30593, 30588, 30597, 30594, 30574, 30592, 30575, 30590, 30595, 30898, 30890, 30900, 30893, 30888, 30846, 30891, 30878, 30885, 30880, 30892, 30882, 30884, 31128, 31114, 31115, 31126, 31125, 31124, 31123, 31127, 31112, 31122, 31120, 31275, 31306, 31280, 31279, 31272, 31270, 31400, 31403, 31404, 31470, 31624, 31644, 31626, 31633, 31632, 31638, 31629, 31628, 31643, 31630, 31621, 31640, 21124, 31641, 31652, 31618, 31931, 31935, 31932, 31930, 32167, 32183, 32194, 32163, 32170, 32193, 32192, 32197, 32157, 32206, 32196, 32198, 32203, 32204, 32175, 32185, 32150, 32188, 32159, 32166, 32174, 32169, 32161, 32201, 32627, 32738, 32739, 32741, 32734, 32804, 32861, 32860, 33161, 33158, 33155, 33159, 33165, 33164, 33163, 33301, 33943, 33956, 33953, 33951, 33978, 33998, 33986, 33964, 33966, 33963, 33977, 33972, 33985, 33997, 33962, 33946, 33969, 34e3, 33949, 33959, 33979, 33954, 33940, 33991, 33996, 33947, 33961, 33967, 33960, 34006, 33944, 33974, 33999, 33952, 34007, 34004, 34002, 34011, 33968, 33937, 34401, 34611, 34595, 34600, 34667, 34624, 34606, 34590, 34593, 34585, 34587, 34627, 34604, 34625, 34622, 34630, 34592, 34610, 34602, 34605, 34620, 34578, 34618, 34609, 34613, 34626, 34598, 34599, 34616, 34596, 34586, 34608, 34577, 35063, 35047, 35057, 35058, 35066, 35070, 35054, 35068, 35062, 35067, 35056, 35052, 35051, 35229, 35233, 35231, 35230, 35305, 35307, 35304, 35499, 35481, 35467, 35474, 35471, 35478, 35901, 35944, 35945, 36053, 36047, 36055, 36246, 36361, 36354, 36351, 36365, 36349, 36362, 36355, 36359, 36358, 36357, 36350, 36352, 36356, 36624, 36625, 36622, 36621, 37155, 37148, 37152, 37154, 37151, 37149, 37146, 37156, 37153, 37147, 37242, 37234, 37241, 37235, 37541, 37540, 37494, 37531, 37498, 37536, 37524, 37546, 37517, 37542, 37530, 37547, 37497, 37527, 37503, 37539, 37614, 37518, 37506, 37525, 37538, 37501, 37512, 37537, 37514, 37510, 37516, 37529, 37543, 37502, 37511, 37545, 37533, 37515, 37421, 38558, 38561, 38655, 38744, 38781, 38778, 38782, 38787, 38784, 38786, 38779, 38788, 38785, 38783, 38862, 38861, 38934, 39085, 39086, 39170, 39168, 39175, 39325, 39324, 39363, 39353, 39355, 39354, 39362, 39357, 39367, 39601, 39651, 39655, 39742, 39743, 39776, 39777, 39775, 40177, 40178, 40181, 40615, 20735, 20739, 20784, 20728, 20742, 20743, 20726, 20734, 20747, 20748, 20733, 20746, 21131, 21132, 21233, 21231, 22088, 22082, 22092, 22069, 22081, 22090, 22089, 22086, 22104, 22106, 22080, 22067, 22077, 22060, 22078, 22072, 22058, 22074, 22298, 22699, 22685, 22705, 22688, 22691, 22703, 22700, 22693, 22689, 22783, 23295, 23284, 23293, 23287, 23286, 23299, 23288, 23298, 23289, 23297, 23303, 23301, 23311, 23655, 23961, 23959, 23967, 23954, 23970, 23955, 23957, 23968, 23964, 23969, 23962, 23966, 24169, 24157, 24160, 24156, 32243, 24283, 24286, 24289, 24393, 24498, 24971, 24963, 24953, 25009, 25008, 24994, 24969, 24987, 24979, 25007, 25005, 24991, 24978, 25002, 24993, 24973, 24934, 25011, 25133, 25710, 25712, 25750, 25760, 25733, 25751, 25756, 25743, 25739, 25738, 25740, 25763, 25759, 25704, 25777, 25752, 25974, 25978, 25977, 25979, 26034, 26035, 26293, 26288, 26281, 26290, 26295, 26282, 26287, 27136, 27142, 27159, 27109, 27128, 27157, 27121, 27108, 27168, 27135, 27116, 27106, 27163, 27165, 27134, 27175, 27122, 27118, 27156, 27127, 27111, 27200, 27144, 27110, 27131, 27149, 27132, 27115, 27145, 27140, 27160, 27173, 27151, 27126, 27174, 27143, 27124, 27158, 27473, 27557, 27555, 27554, 27558, 27649, 27648, 27647, 27650, 28481, 28454, 28542, 28551, 28614, 28562, 28557, 28553, 28556, 28514, 28495, 28549, 28506, 28566, 28534, 28524, 28546, 28501, 28530, 28498, 28496, 28503, 28564, 28563, 28509, 28416, 28513, 28523, 28541, 28519, 28560, 28499, 28555, 28521, 28543, 28565, 28515, 28535, 28522, 28539, 29106, 29103, 29083, 29104, 29088, 29082, 29097, 29109, 29085, 29093, 29086, 29092, 29089, 29098, 29084, 29095, 29107, 29336, 29338, 29528, 29522, 29534, 29535, 29536, 29533, 29531, 29537, 29530, 29529, 29538, 29831, 29833, 29834, 29830, 29825, 29821, 29829, 29832, 29820, 29817, 29960, 29959, 30078, 30245, 30238, 30233, 30237, 30236, 30243, 30234, 30248, 30235, 30364, 30365, 30366, 30363, 30605, 30607, 30601, 30600, 30925, 30907, 30927, 30924, 30929, 30926, 30932, 30920, 30915, 30916, 30921, 31130, 31137, 31136, 31132, 31138, 31131, 27510, 31289, 31410, 31412, 31411, 31671, 31691, 31678, 31660, 31694, 31663, 31673, 31690, 31669, 31941, 31944, 31948, 31947, 32247, 32219, 32234, 32231, 32215, 32225, 32259, 32250, 32230, 32246, 32241, 32240, 32238, 32223, 32630, 32684, 32688, 32685, 32749, 32747, 32746, 32748, 32742, 32744, 32868, 32871, 33187, 33183, 33182, 33173, 33186, 33177, 33175, 33302, 33359, 33363, 33362, 33360, 33358, 33361, 34084, 34107, 34063, 34048, 34089, 34062, 34057, 34061, 34079, 34058, 34087, 34076, 34043, 34091, 34042, 34056, 34060, 34036, 34090, 34034, 34069, 34039, 34027, 34035, 34044, 34066, 34026, 34025, 34070, 34046, 34088, 34077, 34094, 34050, 34045, 34078, 34038, 34097, 34086, 34023, 34024, 34032, 34031, 34041, 34072, 34080, 34096, 34059, 34073, 34095, 34402, 34646, 34659, 34660, 34679, 34785, 34675, 34648, 34644, 34651, 34642, 34657, 34650, 34641, 34654, 34669, 34666, 34640, 34638, 34655, 34653, 34671, 34668, 34682, 34670, 34652, 34661, 34639, 34683, 34677, 34658, 34663, 34665, 34906, 35077, 35084, 35092, 35083, 35095, 35096, 35097, 35078, 35094, 35089, 35086, 35081, 35234, 35236, 35235, 35309, 35312, 35308, 35535, 35526, 35512, 35539, 35537, 35540, 35541, 35515, 35543, 35518, 35520, 35525, 35544, 35523, 35514, 35517, 35545, 35902, 35917, 35983, 36069, 36063, 36057, 36072, 36058, 36061, 36071, 36256, 36252, 36257, 36251, 36384, 36387, 36389, 36388, 36398, 36373, 36379, 36374, 36369, 36377, 36390, 36391, 36372, 36370, 36376, 36371, 36380, 36375, 36378, 36652, 36644, 36632, 36634, 36640, 36643, 36630, 36631, 36979, 36976, 36975, 36967, 36971, 37167, 37163, 37161, 37162, 37170, 37158, 37166, 37253, 37254, 37258, 37249, 37250, 37252, 37248, 37584, 37571, 37572, 37568, 37593, 37558, 37583, 37617, 37599, 37592, 37609, 37591, 37597, 37580, 37615, 37570, 37608, 37578, 37576, 37582, 37606, 37581, 37589, 37577, 37600, 37598, 37607, 37585, 37587, 37557, 37601, 37574, 37556, 38268, 38316, 38315, 38318, 38320, 38564, 38562, 38611, 38661, 38664, 38658, 38746, 38794, 38798, 38792, 38864, 38863, 38942, 38941, 38950, 38953, 38952, 38944, 38939, 38951, 39090, 39176, 39162, 39185, 39188, 39190, 39191, 39189, 39388, 39373, 39375, 39379, 39380, 39374, 39369, 39382, 39384, 39371, 39383, 39372, 39603, 39660, 39659, 39667, 39666, 39665, 39750, 39747, 39783, 39796, 39793, 39782, 39798, 39797, 39792, 39784, 39780, 39788, 40188, 40186, 40189, 40191, 40183, 40199, 40192, 40185, 40187, 40200, 40197, 40196, 40579, 40659, 40719, 40720, 20764, 20755, 20759, 20762, 20753, 20958, 21300, 21473, 22128, 22112, 22126, 22131, 22118, 22115, 22125, 22130, 22110, 22135, 22300, 22299, 22728, 22717, 22729, 22719, 22714, 22722, 22716, 22726, 23319, 23321, 23323, 23329, 23316, 23315, 23312, 23318, 23336, 23322, 23328, 23326, 23535, 23980, 23985, 23977, 23975, 23989, 23984, 23982, 23978, 23976, 23986, 23981, 23983, 23988, 24167, 24168, 24166, 24175, 24297, 24295, 24294, 24296, 24293, 24395, 24508, 24989, 25e3, 24982, 25029, 25012, 25030, 25025, 25036, 25018, 25023, 25016, 24972, 25815, 25814, 25808, 25807, 25801, 25789, 25737, 25795, 25819, 25843, 25817, 25907, 25983, 25980, 26018, 26312, 26302, 26304, 26314, 26315, 26319, 26301, 26299, 26298, 26316, 26403, 27188, 27238, 27209, 27239, 27186, 27240, 27198, 27229, 27245, 27254, 27227, 27217, 27176, 27226, 27195, 27199, 27201, 27242, 27236, 27216, 27215, 27220, 27247, 27241, 27232, 27196, 27230, 27222, 27221, 27213, 27214, 27206, 27477, 27476, 27478, 27559, 27562, 27563, 27592, 27591, 27652, 27651, 27654, 28589, 28619, 28579, 28615, 28604, 28622, 28616, 28510, 28612, 28605, 28574, 28618, 28584, 28676, 28581, 28590, 28602, 28588, 28586, 28623, 28607, 28600, 28578, 28617, 28587, 28621, 28591, 28594, 28592, 29125, 29122, 29119, 29112, 29142, 29120, 29121, 29131, 29140, 29130, 29127, 29135, 29117, 29144, 29116, 29126, 29146, 29147, 29341, 29342, 29545, 29542, 29543, 29548, 29541, 29547, 29546, 29823, 29850, 29856, 29844, 29842, 29845, 29857, 29963, 30080, 30255, 30253, 30257, 30269, 30259, 30268, 30261, 30258, 30256, 30395, 30438, 30618, 30621, 30625, 30620, 30619, 30626, 30627, 30613, 30617, 30615, 30941, 30953, 30949, 30954, 30942, 30947, 30939, 30945, 30946, 30957, 30943, 30944, 31140, 31300, 31304, 31303, 31414, 31416, 31413, 31409, 31415, 31710, 31715, 31719, 31709, 31701, 31717, 31706, 31720, 31737, 31700, 31722, 31714, 31708, 31723, 31704, 31711, 31954, 31956, 31959, 31952, 31953, 32274, 32289, 32279, 32268, 32287, 32288, 32275, 32270, 32284, 32277, 32282, 32290, 32267, 32271, 32278, 32269, 32276, 32293, 32292, 32579, 32635, 32636, 32634, 32689, 32751, 32810, 32809, 32876, 33201, 33190, 33198, 33209, 33205, 33195, 33200, 33196, 33204, 33202, 33207, 33191, 33266, 33365, 33366, 33367, 34134, 34117, 34155, 34125, 34131, 34145, 34136, 34112, 34118, 34148, 34113, 34146, 34116, 34129, 34119, 34147, 34110, 34139, 34161, 34126, 34158, 34165, 34133, 34151, 34144, 34188, 34150, 34141, 34132, 34149, 34156, 34403, 34405, 34404, 34715, 34703, 34711, 34707, 34706, 34696, 34689, 34710, 34712, 34681, 34695, 34723, 34693, 34704, 34705, 34717, 34692, 34708, 34716, 34714, 34697, 35102, 35110, 35120, 35117, 35118, 35111, 35121, 35106, 35113, 35107, 35119, 35116, 35103, 35313, 35552, 35554, 35570, 35572, 35573, 35549, 35604, 35556, 35551, 35568, 35528, 35550, 35553, 35560, 35583, 35567, 35579, 35985, 35986, 35984, 36085, 36078, 36081, 36080, 36083, 36204, 36206, 36261, 36263, 36403, 36414, 36408, 36416, 36421, 36406, 36412, 36413, 36417, 36400, 36415, 36541, 36662, 36654, 36661, 36658, 36665, 36663, 36660, 36982, 36985, 36987, 36998, 37114, 37171, 37173, 37174, 37267, 37264, 37265, 37261, 37263, 37671, 37662, 37640, 37663, 37638, 37647, 37754, 37688, 37692, 37659, 37667, 37650, 37633, 37702, 37677, 37646, 37645, 37579, 37661, 37626, 37669, 37651, 37625, 37623, 37684, 37634, 37668, 37631, 37673, 37689, 37685, 37674, 37652, 37644, 37643, 37630, 37641, 37632, 37627, 37654, 38332, 38349, 38334, 38329, 38330, 38326, 38335, 38325, 38333, 38569, 38612, 38667, 38674, 38672, 38809, 38807, 38804, 38896, 38904, 38965, 38959, 38962, 39204, 39199, 39207, 39209, 39326, 39406, 39404, 39397, 39396, 39408, 39395, 39402, 39401, 39399, 39609, 39615, 39604, 39611, 39670, 39674, 39673, 39671, 39731, 39808, 39813, 39815, 39804, 39806, 39803, 39810, 39827, 39826, 39824, 39802, 39829, 39805, 39816, 40229, 40215, 40224, 40222, 40212, 40233, 40221, 40216, 40226, 40208, 40217, 40223, 40584, 40582, 40583, 40622, 40621, 40661, 40662, 40698, 40722, 40765, 20774, 20773, 20770, 20772, 20768, 20777, 21236, 22163, 22156, 22157, 22150, 22148, 22147, 22142, 22146, 22143, 22145, 22742, 22740, 22735, 22738, 23341, 23333, 23346, 23331, 23340, 23335, 23334, 23343, 23342, 23419, 23537, 23538, 23991, 24172, 24170, 24510, 24507, 25027, 25013, 25020, 25063, 25056, 25061, 25060, 25064, 25054, 25839, 25833, 25827, 25835, 25828, 25832, 25985, 25984, 26038, 26074, 26322, 27277, 27286, 27265, 27301, 27273, 27295, 27291, 27297, 27294, 27271, 27283, 27278, 27285, 27267, 27304, 27300, 27281, 27263, 27302, 27290, 27269, 27276, 27282, 27483, 27565, 27657, 28620, 28585, 28660, 28628, 28643, 28636, 28653, 28647, 28646, 28638, 28658, 28637, 28642, 28648, 29153, 29169, 29160, 29170, 29156, 29168, 29154, 29555, 29550, 29551, 29847, 29874, 29867, 29840, 29866, 29869, 29873, 29861, 29871, 29968, 29969, 29970, 29967, 30084, 30275, 30280, 30281, 30279, 30372, 30441, 30645, 30635, 30642, 30647, 30646, 30644, 30641, 30632, 30704, 30963, 30973, 30978, 30971, 30972, 30962, 30981, 30969, 30974, 30980, 31147, 31144, 31324, 31323, 31318, 31320, 31316, 31322, 31422, 31424, 31425, 31749, 31759, 31730, 31744, 31743, 31739, 31758, 31732, 31755, 31731, 31746, 31753, 31747, 31745, 31736, 31741, 31750, 31728, 31729, 31760, 31754, 31976, 32301, 32316, 32322, 32307, 38984, 32312, 32298, 32329, 32320, 32327, 32297, 32332, 32304, 32315, 32310, 32324, 32314, 32581, 32639, 32638, 32637, 32756, 32754, 32812, 33211, 33220, 33228, 33226, 33221, 33223, 33212, 33257, 33371, 33370, 33372, 34179, 34176, 34191, 34215, 34197, 34208, 34187, 34211, 34171, 34212, 34202, 34206, 34167, 34172, 34185, 34209, 34170, 34168, 34135, 34190, 34198, 34182, 34189, 34201, 34205, 34177, 34210, 34178, 34184, 34181, 34169, 34166, 34200, 34192, 34207, 34408, 34750, 34730, 34733, 34757, 34736, 34732, 34745, 34741, 34748, 34734, 34761, 34755, 34754, 34764, 34743, 34735, 34756, 34762, 34740, 34742, 34751, 34744, 34749, 34782, 34738, 35125, 35123, 35132, 35134, 35137, 35154, 35127, 35138, 35245, 35247, 35246, 35314, 35315, 35614, 35608, 35606, 35601, 35589, 35595, 35618, 35599, 35602, 35605, 35591, 35597, 35592, 35590, 35612, 35603, 35610, 35919, 35952, 35954, 35953, 35951, 35989, 35988, 36089, 36207, 36430, 36429, 36435, 36432, 36428, 36423, 36675, 36672, 36997, 36990, 37176, 37274, 37282, 37275, 37273, 37279, 37281, 37277, 37280, 37793, 37763, 37807, 37732, 37718, 37703, 37756, 37720, 37724, 37750, 37705, 37712, 37713, 37728, 37741, 37775, 37708, 37738, 37753, 37719, 37717, 37714, 37711, 37745, 37751, 37755, 37729, 37726, 37731, 37735, 37760, 37710, 37721, 38343, 38336, 38345, 38339, 38341, 38327, 38574, 38576, 38572, 38688, 38687, 38680, 38685, 38681, 38810, 38817, 38812, 38814, 38813, 38869, 38868, 38897, 38977, 38980, 38986, 38985, 38981, 38979, 39205, 39211, 39212, 39210, 39219, 39218, 39215, 39213, 39217, 39216, 39320, 39331, 39329, 39426, 39418, 39412, 39415, 39417, 39416, 39414, 39419, 39421, 39422, 39420, 39427, 39614, 39678, 39677, 39681, 39676, 39752, 39834, 39848, 39838, 39835, 39846, 39841, 39845, 39844, 39814, 39842, 39840, 39855, 40243, 40257, 40295, 40246, 40238, 40239, 40241, 40248, 40240, 40261, 40258, 40259, 40254, 40247, 40256, 40253, 32757, 40237, 40586, 40585, 40589, 40624, 40648, 40666, 40699, 40703, 40740, 40739, 40738, 40788, 40864, 20785, 20781, 20782, 22168, 22172, 22167, 22170, 22173, 22169, 22896, 23356, 23657, 23658, 24e3, 24173, 24174, 25048, 25055, 25069, 25070, 25073, 25066, 25072, 25067, 25046, 25065, 25855, 25860, 25853, 25848, 25857, 25859, 25852, 26004, 26075, 26330, 26331, 26328, 27333, 27321, 27325, 27361, 27334, 27322, 27318, 27319, 27335, 27316, 27309, 27486, 27593, 27659, 28679, 28684, 28685, 28673, 28677, 28692, 28686, 28671, 28672, 28667, 28710, 28668, 28663, 28682, 29185, 29183, 29177, 29187, 29181, 29558, 29880, 29888, 29877, 29889, 29886, 29878, 29883, 29890, 29972, 29971, 30300, 30308, 30297, 30288, 30291, 30295, 30298, 30374, 30397, 30444, 30658, 30650, 30975, 30988, 30995, 30996, 30985, 30992, 30994, 30993, 31149, 31148, 31327, 31772, 31785, 31769, 31776, 31775, 31789, 31773, 31782, 31784, 31778, 31781, 31792, 32348, 32336, 32342, 32355, 32344, 32354, 32351, 32337, 32352, 32343, 32339, 32693, 32691, 32759, 32760, 32885, 33233, 33234, 33232, 33375, 33374, 34228, 34246, 34240, 34243, 34242, 34227, 34229, 34237, 34247, 34244, 34239, 34251, 34254, 34248, 34245, 34225, 34230, 34258, 34340, 34232, 34231, 34238, 34409, 34791, 34790, 34786, 34779, 34795, 34794, 34789, 34783, 34803, 34788, 34772, 34780, 34771, 34797, 34776, 34787, 34724, 34775, 34777, 34817, 34804, 34792, 34781, 35155, 35147, 35151, 35148, 35142, 35152, 35153, 35145, 35626, 35623, 35619, 35635, 35632, 35637, 35655, 35631, 35644, 35646, 35633, 35621, 35639, 35622, 35638, 35630, 35620, 35643, 35645, 35642, 35906, 35957, 35993, 35992, 35991, 36094, 36100, 36098, 36096, 36444, 36450, 36448, 36439, 36438, 36446, 36453, 36455, 36443, 36442, 36449, 36445, 36457, 36436, 36678, 36679, 36680, 36683, 37160, 37178, 37179, 37182, 37288, 37285, 37287, 37295, 37290, 37813, 37772, 37778, 37815, 37787, 37789, 37769, 37799, 37774, 37802, 37790, 37798, 37781, 37768, 37785, 37791, 37773, 37809, 37777, 37810, 37796, 37800, 37812, 37795, 37797, 38354, 38355, 38353, 38579, 38615, 38618, 24002, 38623, 38616, 38621, 38691, 38690, 38693, 38828, 38830, 38824, 38827, 38820, 38826, 38818, 38821, 38871, 38873, 38870, 38872, 38906, 38992, 38993, 38994, 39096, 39233, 39228, 39226, 39439, 39435, 39433, 39437, 39428, 39441, 39434, 39429, 39431, 39430, 39616, 39644, 39688, 39684, 39685, 39721, 39733, 39754, 39756, 39755, 39879, 39878, 39875, 39871, 39873, 39861, 39864, 39891, 39862, 39876, 39865, 39869, 40284, 40275, 40271, 40266, 40283, 40267, 40281, 40278, 40268, 40279, 40274, 40276, 40287, 40280, 40282, 40590, 40588, 40671, 40705, 40704, 40726, 40741, 40747, 40746, 40745, 40744, 40780, 40789, 20788, 20789, 21142, 21239, 21428, 22187, 22189, 22182, 22183, 22186, 22188, 22746, 22749, 22747, 22802, 23357, 23358, 23359, 24003, 24176, 24511, 25083, 25863, 25872, 25869, 25865, 25868, 25870, 25988, 26078, 26077, 26334, 27367, 27360, 27340, 27345, 27353, 27339, 27359, 27356, 27344, 27371, 27343, 27341, 27358, 27488, 27568, 27660, 28697, 28711, 28704, 28694, 28715, 28705, 28706, 28707, 28713, 28695, 28708, 28700, 28714, 29196, 29194, 29191, 29186, 29189, 29349, 29350, 29348, 29347, 29345, 29899, 29893, 29879, 29891, 29974, 30304, 30665, 30666, 30660, 30705, 31005, 31003, 31009, 31004, 30999, 31006, 31152, 31335, 31336, 31795, 31804, 31801, 31788, 31803, 31980, 31978, 32374, 32373, 32376, 32368, 32375, 32367, 32378, 32370, 32372, 32360, 32587, 32586, 32643, 32646, 32695, 32765, 32766, 32888, 33239, 33237, 33380, 33377, 33379, 34283, 34289, 34285, 34265, 34273, 34280, 34266, 34263, 34284, 34290, 34296, 34264, 34271, 34275, 34268, 34257, 34288, 34278, 34287, 34270, 34274, 34816, 34810, 34819, 34806, 34807, 34825, 34828, 34827, 34822, 34812, 34824, 34815, 34826, 34818, 35170, 35162, 35163, 35159, 35169, 35164, 35160, 35165, 35161, 35208, 35255, 35254, 35318, 35664, 35656, 35658, 35648, 35667, 35670, 35668, 35659, 35669, 35665, 35650, 35666, 35671, 35907, 35959, 35958, 35994, 36102, 36103, 36105, 36268, 36266, 36269, 36267, 36461, 36472, 36467, 36458, 36463, 36475, 36546, 36690, 36689, 36687, 36688, 36691, 36788, 37184, 37183, 37296, 37293, 37854, 37831, 37839, 37826, 37850, 37840, 37881, 37868, 37836, 37849, 37801, 37862, 37834, 37844, 37870, 37859, 37845, 37828, 37838, 37824, 37842, 37863, 38269, 38362, 38363, 38625, 38697, 38699, 38700, 38696, 38694, 38835, 38839, 38838, 38877, 38878, 38879, 39004, 39001, 39005, 38999, 39103, 39101, 39099, 39102, 39240, 39239, 39235, 39334, 39335, 39450, 39445, 39461, 39453, 39460, 39451, 39458, 39456, 39463, 39459, 39454, 39452, 39444, 39618, 39691, 39690, 39694, 39692, 39735, 39914, 39915, 39904, 39902, 39908, 39910, 39906, 39920, 39892, 39895, 39916, 39900, 39897, 39909, 39893, 39905, 39898, 40311, 40321, 40330, 40324, 40328, 40305, 40320, 40312, 40326, 40331, 40332, 40317, 40299, 40308, 40309, 40304, 40297, 40325, 40307, 40315, 40322, 40303, 40313, 40319, 40327, 40296, 40596, 40593, 40640, 40700, 40749, 40768, 40769, 40781, 40790, 40791, 40792, 21303, 22194, 22197, 22195, 22755, 23365, 24006, 24007, 24302, 24303, 24512, 24513, 25081, 25879, 25878, 25877, 25875, 26079, 26344, 26339, 26340, 27379, 27376, 27370, 27368, 27385, 27377, 27374, 27375, 28732, 28725, 28719, 28727, 28724, 28721, 28738, 28728, 28735, 28730, 28729, 28736, 28731, 28723, 28737, 29203, 29204, 29352, 29565, 29564, 29882, 30379, 30378, 30398, 30445, 30668, 30670, 30671, 30669, 30706, 31013, 31011, 31015, 31016, 31012, 31017, 31154, 31342, 31340, 31341, 31479, 31817, 31816, 31818, 31815, 31813, 31982, 32379, 32382, 32385, 32384, 32698, 32767, 32889, 33243, 33241, 33291, 33384, 33385, 34338, 34303, 34305, 34302, 34331, 34304, 34294, 34308, 34313, 34309, 34316, 34301, 34841, 34832, 34833, 34839, 34835, 34838, 35171, 35174, 35257, 35319, 35680, 35690, 35677, 35688, 35683, 35685, 35687, 35693, 36270, 36486, 36488, 36484, 36697, 36694, 36695, 36693, 36696, 36698, 37005, 37187, 37185, 37303, 37301, 37298, 37299, 37899, 37907, 37883, 37920, 37903, 37908, 37886, 37909, 37904, 37928, 37913, 37901, 37877, 37888, 37879, 37895, 37902, 37910, 37906, 37882, 37897, 37880, 37898, 37887, 37884, 37900, 37878, 37905, 37894, 38366, 38368, 38367, 38702, 38703, 38841, 38843, 38909, 38910, 39008, 39010, 39011, 39007, 39105, 39106, 39248, 39246, 39257, 39244, 39243, 39251, 39474, 39476, 39473, 39468, 39466, 39478, 39465, 39470, 39480, 39469, 39623, 39626, 39622, 39696, 39698, 39697, 39947, 39944, 39927, 39941, 39954, 39928, 4e4, 39943, 39950, 39942, 39959, 39956, 39945, 40351, 40345, 40356, 40349, 40338, 40344, 40336, 40347, 40352, 40340, 40348, 40362, 40343, 40353, 40346, 40354, 40360, 40350, 40355, 40383, 40361, 40342, 40358, 40359, 40601, 40603, 40602, 40677, 40676, 40679, 40678, 40752, 40750, 40795, 40800, 40798, 40797, 40793, 40849, 20794, 20793, 21144, 21143, 22211, 22205, 22206, 23368, 23367, 24011, 24015, 24305, 25085, 25883, 27394, 27388, 27395, 27384, 27392, 28739, 28740, 28746, 28744, 28745, 28741, 28742, 29213, 29210, 29209, 29566, 29975, 30314, 30672, 31021, 31025, 31023, 31828, 31827, 31986, 32394, 32391, 32392, 32395, 32390, 32397, 32589, 32699, 32816, 33245, 34328, 34346, 34342, 34335, 34339, 34332, 34329, 34343, 34350, 34337, 34336, 34345, 34334, 34341, 34857, 34845, 34843, 34848, 34852, 34844, 34859, 34890, 35181, 35177, 35182, 35179, 35322, 35705, 35704, 35653, 35706, 35707, 36112, 36116, 36271, 36494, 36492, 36702, 36699, 36701, 37190, 37188, 37189, 37305, 37951, 37947, 37942, 37929, 37949, 37948, 37936, 37945, 37930, 37943, 37932, 37952, 37937, 38373, 38372, 38371, 38709, 38714, 38847, 38881, 39012, 39113, 39110, 39104, 39256, 39254, 39481, 39485, 39494, 39492, 39490, 39489, 39482, 39487, 39629, 39701, 39703, 39704, 39702, 39738, 39762, 39979, 39965, 39964, 39980, 39971, 39976, 39977, 39972, 39969, 40375, 40374, 40380, 40385, 40391, 40394, 40399, 40382, 40389, 40387, 40379, 40373, 40398, 40377, 40378, 40364, 40392, 40369, 40365, 40396, 40371, 40397, 40370, 40570, 40604, 40683, 40686, 40685, 40731, 40728, 40730, 40753, 40782, 40805, 40804, 40850, 20153, 22214, 22213, 22219, 22897, 23371, 23372, 24021, 24017, 24306, 25889, 25888, 25894, 25890, 27403, 27400, 27401, 27661, 28757, 28758, 28759, 28754, 29214, 29215, 29353, 29567, 29912, 29909, 29913, 29911, 30317, 30381, 31029, 31156, 31344, 31345, 31831, 31836, 31833, 31835, 31834, 31988, 31985, 32401, 32591, 32647, 33246, 33387, 34356, 34357, 34355, 34348, 34354, 34358, 34860, 34856, 34854, 34858, 34853, 35185, 35263, 35262, 35323, 35710, 35716, 35714, 35718, 35717, 35711, 36117, 36501, 36500, 36506, 36498, 36496, 36502, 36503, 36704, 36706, 37191, 37964, 37968, 37962, 37963, 37967, 37959, 37957, 37960, 37961, 37958, 38719, 38883, 39018, 39017, 39115, 39252, 39259, 39502, 39507, 39508, 39500, 39503, 39496, 39498, 39497, 39506, 39504, 39632, 39705, 39723, 39739, 39766, 39765, 40006, 40008, 39999, 40004, 39993, 39987, 40001, 39996, 39991, 39988, 39986, 39997, 39990, 40411, 40402, 40414, 40410, 40395, 40400, 40412, 40401, 40415, 40425, 40409, 40408, 40406, 40437, 40405, 40413, 40630, 40688, 40757, 40755, 40754, 40770, 40811, 40853, 40866, 20797, 21145, 22760, 22759, 22898, 23373, 24024, 34863, 24399, 25089, 25091, 25092, 25897, 25893, 26006, 26347, 27409, 27410, 27407, 27594, 28763, 28762, 29218, 29570, 29569, 29571, 30320, 30676, 31847, 31846, 32405, 33388, 34362, 34368, 34361, 34364, 34353, 34363, 34366, 34864, 34866, 34862, 34867, 35190, 35188, 35187, 35326, 35724, 35726, 35723, 35720, 35909, 36121, 36504, 36708, 36707, 37308, 37986, 37973, 37981, 37975, 37982, 38852, 38853, 38912, 39510, 39513, 39710, 39711, 39712, 40018, 40024, 40016, 40010, 40013, 40011, 40021, 40025, 40012, 40014, 40443, 40439, 40431, 40419, 40427, 40440, 40420, 40438, 40417, 40430, 40422, 40434, 40432, 40418, 40428, 40436, 40435, 40424, 40429, 40642, 40656, 40690, 40691, 40710, 40732, 40760, 40759, 40758, 40771, 40783, 40817, 40816, 40814, 40815, 22227, 22221, 23374, 23661, 25901, 26349, 26350, 27411, 28767, 28769, 28765, 28768, 29219, 29915, 29925, 30677, 31032, 31159, 31158, 31850, 32407, 32649, 33389, 34371, 34872, 34871, 34869, 34891, 35732, 35733, 36510, 36511, 36512, 36509, 37310, 37309, 37314, 37995, 37992, 37993, 38629, 38726, 38723, 38727, 38855, 38885, 39518, 39637, 39769, 40035, 40039, 40038, 40034, 40030, 40032, 40450, 40446, 40455, 40451, 40454, 40453, 40448, 40449, 40457, 40447, 40445, 40452, 40608, 40734, 40774, 40820, 40821, 40822, 22228, 25902, 26040, 27416, 27417, 27415, 27418, 28770, 29222, 29354, 30680, 30681, 31033, 31849, 31851, 31990, 32410, 32408, 32411, 32409, 33248, 33249, 34374, 34375, 34376, 35193, 35194, 35196, 35195, 35327, 35736, 35737, 36517, 36516, 36515, 37998, 37997, 37999, 38001, 38003, 38729, 39026, 39263, 40040, 40046, 40045, 40459, 40461, 40464, 40463, 40466, 40465, 40609, 40693, 40713, 40775, 40824, 40827, 40826, 40825, 22302, 28774, 31855, 34876, 36274, 36518, 37315, 38004, 38008, 38006, 38005, 39520, 40052, 40051, 40049, 40053, 40468, 40467, 40694, 40714, 40868, 28776, 28773, 31991, 34410, 34878, 34877, 34879, 35742, 35996, 36521, 36553, 38731, 39027, 39028, 39116, 39265, 39339, 39524, 39526, 39527, 39716, 40469, 40471, 40776, 25095, 27422, 29223, 34380, 36520, 38018, 38016, 38017, 39529, 39528, 39726, 40473, 29225, 34379, 35743, 38019, 40057, 40631, 30325, 39531, 40058, 40477, 28777, 28778, 40612, 40830, 40777, 40856, 30849, 37561, 35023, 22715, 24658, 31911, 23290, 9556, 9574, 9559, 9568, 9580, 9571, 9562, 9577, 9565, 9554, 9572, 9557, 9566, 9578, 9569, 9560, 9575, 9563, 9555, 9573, 9558, 9567, 9579, 9570, 9561, 9576, 9564, 9553, 9552, 9581, 9582, 9584, 9583, 65517, 132423, 37595, 132575, 147397, 34124, 17077, 29679, 20917, 13897, 149826, 166372, 37700, 137691, 33518, 146632, 30780, 26436, 25311, 149811, 166314, 131744, 158643, 135941, 20395, 140525, 20488, 159017, 162436, 144896, 150193, 140563, 20521, 131966, 24484, 131968, 131911, 28379, 132127, 20605, 20737, 13434, 20750, 39020, 14147, 33814, 149924, 132231, 20832, 144308, 20842, 134143, 139516, 131813, 140592, 132494, 143923, 137603, 23426, 34685, 132531, 146585, 20914, 20920, 40244, 20937, 20943, 20945, 15580, 20947, 150182, 20915, 20962, 21314, 20973, 33741, 26942, 145197, 24443, 21003, 21030, 21052, 21173, 21079, 21140, 21177, 21189, 31765, 34114, 21216, 34317, 158483, 21253, 166622, 21833, 28377, 147328, 133460, 147436, 21299, 21316, 134114, 27851, 136998, 26651, 29653, 24650, 16042, 14540, 136936, 29149, 17570, 21357, 21364, 165547, 21374, 21375, 136598, 136723, 30694, 21395, 166555, 21408, 21419, 21422, 29607, 153458, 16217, 29596, 21441, 21445, 27721, 20041, 22526, 21465, 15019, 134031, 21472, 147435, 142755, 21494, 134263, 21523, 28793, 21803, 26199, 27995, 21613, 158547, 134516, 21853, 21647, 21668, 18342, 136973, 134877, 15796, 134477, 166332, 140952, 21831, 19693, 21551, 29719, 21894, 21929, 22021, 137431, 147514, 17746, 148533, 26291, 135348, 22071, 26317, 144010, 26276, 26285, 22093, 22095, 30961, 22257, 38791, 21502, 22272, 22255, 22253, 166758, 13859, 135759, 22342, 147877, 27758, 28811, 22338, 14001, 158846, 22502, 136214, 22531, 136276, 148323, 22566, 150517, 22620, 22698, 13665, 22752, 22748, 135740, 22779, 23551, 22339, 172368, 148088, 37843, 13729, 22815, 26790, 14019, 28249, 136766, 23076, 21843, 136850, 34053, 22985, 134478, 158849, 159018, 137180, 23001, 137211, 137138, 159142, 28017, 137256, 136917, 23033, 159301, 23211, 23139, 14054, 149929, 23159, 14088, 23190, 29797, 23251, 159649, 140628, 15749, 137489, 14130, 136888, 24195, 21200, 23414, 25992, 23420, 162318, 16388, 18525, 131588, 23509, 24928, 137780, 154060, 132517, 23539, 23453, 19728, 23557, 138052, 23571, 29646, 23572, 138405, 158504, 23625, 18653, 23685, 23785, 23791, 23947, 138745, 138807, 23824, 23832, 23878, 138916, 23738, 24023, 33532, 14381, 149761, 139337, 139635, 33415, 14390, 15298, 24110, 27274, 24181, 24186, 148668, 134355, 21414, 20151, 24272, 21416, 137073, 24073, 24308, 164994, 24313, 24315, 14496, 24316, 26686, 37915, 24333, 131521, 194708, 15070, 18606, 135994, 24378, 157832, 140240, 24408, 140401, 24419, 38845, 159342, 24434, 37696, 166454, 24487, 23990, 15711, 152144, 139114, 159992, 140904, 37334, 131742, 166441, 24625, 26245, 137335, 14691, 15815, 13881, 22416, 141236, 31089, 15936, 24734, 24740, 24755, 149890, 149903, 162387, 29860, 20705, 23200, 24932, 33828, 24898, 194726, 159442, 24961, 20980, 132694, 24967, 23466, 147383, 141407, 25043, 166813, 170333, 25040, 14642, 141696, 141505, 24611, 24924, 25886, 25483, 131352, 25285, 137072, 25301, 142861, 25452, 149983, 14871, 25656, 25592, 136078, 137212, 25744, 28554, 142902, 38932, 147596, 153373, 25825, 25829, 38011, 14950, 25658, 14935, 25933, 28438, 150056, 150051, 25989, 25965, 25951, 143486, 26037, 149824, 19255, 26065, 16600, 137257, 26080, 26083, 24543, 144384, 26136, 143863, 143864, 26180, 143780, 143781, 26187, 134773, 26215, 152038, 26227, 26228, 138813, 143921, 165364, 143816, 152339, 30661, 141559, 39332, 26370, 148380, 150049, 15147, 27130, 145346, 26462, 26471, 26466, 147917, 168173, 26583, 17641, 26658, 28240, 37436, 26625, 144358, 159136, 26717, 144495, 27105, 27147, 166623, 26995, 26819, 144845, 26881, 26880, 15666, 14849, 144956, 15232, 26540, 26977, 166474, 17148, 26934, 27032, 15265, 132041, 33635, 20624, 27129, 144985, 139562, 27205, 145155, 27293, 15347, 26545, 27336, 168348, 15373, 27421, 133411, 24798, 27445, 27508, 141261, 28341, 146139, 132021, 137560, 14144, 21537, 146266, 27617, 147196, 27612, 27703, 140427, 149745, 158545, 27738, 33318, 27769, 146876, 17605, 146877, 147876, 149772, 149760, 146633, 14053, 15595, 134450, 39811, 143865, 140433, 32655, 26679, 159013, 159137, 159211, 28054, 27996, 28284, 28420, 149887, 147589, 159346, 34099, 159604, 20935, 27804, 28189, 33838, 166689, 28207, 146991, 29779, 147330, 31180, 28239, 23185, 143435, 28664, 14093, 28573, 146992, 28410, 136343, 147517, 17749, 37872, 28484, 28508, 15694, 28532, 168304, 15675, 28575, 147780, 28627, 147601, 147797, 147513, 147440, 147380, 147775, 20959, 147798, 147799, 147776, 156125, 28747, 28798, 28839, 28801, 28876, 28885, 28886, 28895, 16644, 15848, 29108, 29078, 148087, 28971, 28997, 23176, 29002, 29038, 23708, 148325, 29007, 37730, 148161, 28972, 148570, 150055, 150050, 29114, 166888, 28861, 29198, 37954, 29205, 22801, 37955, 29220, 37697, 153093, 29230, 29248, 149876, 26813, 29269, 29271, 15957, 143428, 26637, 28477, 29314, 29482, 29483, 149539, 165931, 18669, 165892, 29480, 29486, 29647, 29610, 134202, 158254, 29641, 29769, 147938, 136935, 150052, 26147, 14021, 149943, 149901, 150011, 29687, 29717, 26883, 150054, 29753, 132547, 16087, 29788, 141485, 29792, 167602, 29767, 29668, 29814, 33721, 29804, 14128, 29812, 37873, 27180, 29826, 18771, 150156, 147807, 150137, 166799, 23366, 166915, 137374, 29896, 137608, 29966, 29929, 29982, 167641, 137803, 23511, 167596, 37765, 30029, 30026, 30055, 30062, 151426, 16132, 150803, 30094, 29789, 30110, 30132, 30210, 30252, 30289, 30287, 30319, 30326, 156661, 30352, 33263, 14328, 157969, 157966, 30369, 30373, 30391, 30412, 159647, 33890, 151709, 151933, 138780, 30494, 30502, 30528, 25775, 152096, 30552, 144044, 30639, 166244, 166248, 136897, 30708, 30729, 136054, 150034, 26826, 30895, 30919, 30931, 38565, 31022, 153056, 30935, 31028, 30897, 161292, 36792, 34948, 166699, 155779, 140828, 31110, 35072, 26882, 31104, 153687, 31133, 162617, 31036, 31145, 28202, 160038, 16040, 31174, 168205, 31188], + "euc-kr": [44034, 44035, 44037, 44038, 44043, 44044, 44045, 44046, 44047, 44056, 44062, 44063, 44065, 44066, 44067, 44069, 44070, 44071, 44072, 44073, 44074, 44075, 44078, 44082, 44083, 44084, null, null, null, null, null, null, 44085, 44086, 44087, 44090, 44091, 44093, 44094, 44095, 44097, 44098, 44099, 44100, 44101, 44102, 44103, 44104, 44105, 44106, 44108, 44110, 44111, 44112, 44113, 44114, 44115, 44117, null, null, null, null, null, null, 44118, 44119, 44121, 44122, 44123, 44125, 44126, 44127, 44128, 44129, 44130, 44131, 44132, 44133, 44134, 44135, 44136, 44137, 44138, 44139, 44140, 44141, 44142, 44143, 44146, 44147, 44149, 44150, 44153, 44155, 44156, 44157, 44158, 44159, 44162, 44167, 44168, 44173, 44174, 44175, 44177, 44178, 44179, 44181, 44182, 44183, 44184, 44185, 44186, 44187, 44190, 44194, 44195, 44196, 44197, 44198, 44199, 44203, 44205, 44206, 44209, 44210, 44211, 44212, 44213, 44214, 44215, 44218, 44222, 44223, 44224, 44226, 44227, 44229, 44230, 44231, 44233, 44234, 44235, 44237, 44238, 44239, 44240, 44241, 44242, 44243, 44244, 44246, 44248, 44249, 44250, 44251, 44252, 44253, 44254, 44255, 44258, 44259, 44261, 44262, 44265, 44267, 44269, 44270, 44274, 44276, 44279, 44280, 44281, 44282, 44283, 44286, 44287, 44289, 44290, 44291, 44293, 44295, 44296, 44297, 44298, 44299, 44302, 44304, 44306, 44307, 44308, 44309, 44310, 44311, 44313, 44314, 44315, 44317, 44318, 44319, 44321, 44322, 44323, 44324, 44325, 44326, 44327, 44328, 44330, 44331, 44334, 44335, 44336, 44337, 44338, 44339, null, null, null, null, null, null, 44342, 44343, 44345, 44346, 44347, 44349, 44350, 44351, 44352, 44353, 44354, 44355, 44358, 44360, 44362, 44363, 44364, 44365, 44366, 44367, 44369, 44370, 44371, 44373, 44374, 44375, null, null, null, null, null, null, 44377, 44378, 44379, 44380, 44381, 44382, 44383, 44384, 44386, 44388, 44389, 44390, 44391, 44392, 44393, 44394, 44395, 44398, 44399, 44401, 44402, 44407, 44408, 44409, 44410, 44414, 44416, 44419, 44420, 44421, 44422, 44423, 44426, 44427, 44429, 44430, 44431, 44433, 44434, 44435, 44436, 44437, 44438, 44439, 44440, 44441, 44442, 44443, 44446, 44447, 44448, 44449, 44450, 44451, 44453, 44454, 44455, 44456, 44457, 44458, 44459, 44460, 44461, 44462, 44463, 44464, 44465, 44466, 44467, 44468, 44469, 44470, 44472, 44473, 44474, 44475, 44476, 44477, 44478, 44479, 44482, 44483, 44485, 44486, 44487, 44489, 44490, 44491, 44492, 44493, 44494, 44495, 44498, 44500, 44501, 44502, 44503, 44504, 44505, 44506, 44507, 44509, 44510, 44511, 44513, 44514, 44515, 44517, 44518, 44519, 44520, 44521, 44522, 44523, 44524, 44525, 44526, 44527, 44528, 44529, 44530, 44531, 44532, 44533, 44534, 44535, 44538, 44539, 44541, 44542, 44546, 44547, 44548, 44549, 44550, 44551, 44554, 44556, 44558, 44559, 44560, 44561, 44562, 44563, 44565, 44566, 44567, 44568, 44569, 44570, 44571, 44572, null, null, null, null, null, null, 44573, 44574, 44575, 44576, 44577, 44578, 44579, 44580, 44581, 44582, 44583, 44584, 44585, 44586, 44587, 44588, 44589, 44590, 44591, 44594, 44595, 44597, 44598, 44601, 44603, 44604, null, null, null, null, null, null, 44605, 44606, 44607, 44610, 44612, 44615, 44616, 44617, 44619, 44623, 44625, 44626, 44627, 44629, 44631, 44632, 44633, 44634, 44635, 44638, 44642, 44643, 44644, 44646, 44647, 44650, 44651, 44653, 44654, 44655, 44657, 44658, 44659, 44660, 44661, 44662, 44663, 44666, 44670, 44671, 44672, 44673, 44674, 44675, 44678, 44679, 44680, 44681, 44682, 44683, 44685, 44686, 44687, 44688, 44689, 44690, 44691, 44692, 44693, 44694, 44695, 44696, 44697, 44698, 44699, 44700, 44701, 44702, 44703, 44704, 44705, 44706, 44707, 44708, 44709, 44710, 44711, 44712, 44713, 44714, 44715, 44716, 44717, 44718, 44719, 44720, 44721, 44722, 44723, 44724, 44725, 44726, 44727, 44728, 44729, 44730, 44731, 44735, 44737, 44738, 44739, 44741, 44742, 44743, 44744, 44745, 44746, 44747, 44750, 44754, 44755, 44756, 44757, 44758, 44759, 44762, 44763, 44765, 44766, 44767, 44768, 44769, 44770, 44771, 44772, 44773, 44774, 44775, 44777, 44778, 44780, 44782, 44783, 44784, 44785, 44786, 44787, 44789, 44790, 44791, 44793, 44794, 44795, 44797, 44798, 44799, 44800, 44801, 44802, 44803, 44804, 44805, null, null, null, null, null, null, 44806, 44809, 44810, 44811, 44812, 44814, 44815, 44817, 44818, 44819, 44820, 44821, 44822, 44823, 44824, 44825, 44826, 44827, 44828, 44829, 44830, 44831, 44832, 44833, 44834, 44835, null, null, null, null, null, null, 44836, 44837, 44838, 44839, 44840, 44841, 44842, 44843, 44846, 44847, 44849, 44851, 44853, 44854, 44855, 44856, 44857, 44858, 44859, 44862, 44864, 44868, 44869, 44870, 44871, 44874, 44875, 44876, 44877, 44878, 44879, 44881, 44882, 44883, 44884, 44885, 44886, 44887, 44888, 44889, 44890, 44891, 44894, 44895, 44896, 44897, 44898, 44899, 44902, 44903, 44904, 44905, 44906, 44907, 44908, 44909, 44910, 44911, 44912, 44913, 44914, 44915, 44916, 44917, 44918, 44919, 44920, 44922, 44923, 44924, 44925, 44926, 44927, 44929, 44930, 44931, 44933, 44934, 44935, 44937, 44938, 44939, 44940, 44941, 44942, 44943, 44946, 44947, 44948, 44950, 44951, 44952, 44953, 44954, 44955, 44957, 44958, 44959, 44960, 44961, 44962, 44963, 44964, 44965, 44966, 44967, 44968, 44969, 44970, 44971, 44972, 44973, 44974, 44975, 44976, 44977, 44978, 44979, 44980, 44981, 44982, 44983, 44986, 44987, 44989, 44990, 44991, 44993, 44994, 44995, 44996, 44997, 44998, 45002, 45004, 45007, 45008, 45009, 45010, 45011, 45013, 45014, 45015, 45016, 45017, 45018, 45019, 45021, 45022, 45023, 45024, 45025, null, null, null, null, null, null, 45026, 45027, 45028, 45029, 45030, 45031, 45034, 45035, 45036, 45037, 45038, 45039, 45042, 45043, 45045, 45046, 45047, 45049, 45050, 45051, 45052, 45053, 45054, 45055, 45058, 45059, null, null, null, null, null, null, 45061, 45062, 45063, 45064, 45065, 45066, 45067, 45069, 45070, 45071, 45073, 45074, 45075, 45077, 45078, 45079, 45080, 45081, 45082, 45083, 45086, 45087, 45088, 45089, 45090, 45091, 45092, 45093, 45094, 45095, 45097, 45098, 45099, 45100, 45101, 45102, 45103, 45104, 45105, 45106, 45107, 45108, 45109, 45110, 45111, 45112, 45113, 45114, 45115, 45116, 45117, 45118, 45119, 45120, 45121, 45122, 45123, 45126, 45127, 45129, 45131, 45133, 45135, 45136, 45137, 45138, 45142, 45144, 45146, 45147, 45148, 45150, 45151, 45152, 45153, 45154, 45155, 45156, 45157, 45158, 45159, 45160, 45161, 45162, 45163, 45164, 45165, 45166, 45167, 45168, 45169, 45170, 45171, 45172, 45173, 45174, 45175, 45176, 45177, 45178, 45179, 45182, 45183, 45185, 45186, 45187, 45189, 45190, 45191, 45192, 45193, 45194, 45195, 45198, 45200, 45202, 45203, 45204, 45205, 45206, 45207, 45211, 45213, 45214, 45219, 45220, 45221, 45222, 45223, 45226, 45232, 45234, 45238, 45239, 45241, 45242, 45243, 45245, 45246, 45247, 45248, 45249, 45250, 45251, 45254, 45258, 45259, 45260, 45261, 45262, 45263, 45266, null, null, null, null, null, null, 45267, 45269, 45270, 45271, 45273, 45274, 45275, 45276, 45277, 45278, 45279, 45281, 45282, 45283, 45284, 45286, 45287, 45288, 45289, 45290, 45291, 45292, 45293, 45294, 45295, 45296, null, null, null, null, null, null, 45297, 45298, 45299, 45300, 45301, 45302, 45303, 45304, 45305, 45306, 45307, 45308, 45309, 45310, 45311, 45312, 45313, 45314, 45315, 45316, 45317, 45318, 45319, 45322, 45325, 45326, 45327, 45329, 45332, 45333, 45334, 45335, 45338, 45342, 45343, 45344, 45345, 45346, 45350, 45351, 45353, 45354, 45355, 45357, 45358, 45359, 45360, 45361, 45362, 45363, 45366, 45370, 45371, 45372, 45373, 45374, 45375, 45378, 45379, 45381, 45382, 45383, 45385, 45386, 45387, 45388, 45389, 45390, 45391, 45394, 45395, 45398, 45399, 45401, 45402, 45403, 45405, 45406, 45407, 45409, 45410, 45411, 45412, 45413, 45414, 45415, 45416, 45417, 45418, 45419, 45420, 45421, 45422, 45423, 45424, 45425, 45426, 45427, 45428, 45429, 45430, 45431, 45434, 45435, 45437, 45438, 45439, 45441, 45443, 45444, 45445, 45446, 45447, 45450, 45452, 45454, 45455, 45456, 45457, 45461, 45462, 45463, 45465, 45466, 45467, 45469, 45470, 45471, 45472, 45473, 45474, 45475, 45476, 45477, 45478, 45479, 45481, 45482, 45483, 45484, 45485, 45486, 45487, 45488, 45489, 45490, 45491, 45492, 45493, 45494, 45495, 45496, null, null, null, null, null, null, 45497, 45498, 45499, 45500, 45501, 45502, 45503, 45504, 45505, 45506, 45507, 45508, 45509, 45510, 45511, 45512, 45513, 45514, 45515, 45517, 45518, 45519, 45521, 45522, 45523, 45525, null, null, null, null, null, null, 45526, 45527, 45528, 45529, 45530, 45531, 45534, 45536, 45537, 45538, 45539, 45540, 45541, 45542, 45543, 45546, 45547, 45549, 45550, 45551, 45553, 45554, 45555, 45556, 45557, 45558, 45559, 45560, 45562, 45564, 45566, 45567, 45568, 45569, 45570, 45571, 45574, 45575, 45577, 45578, 45581, 45582, 45583, 45584, 45585, 45586, 45587, 45590, 45592, 45594, 45595, 45596, 45597, 45598, 45599, 45601, 45602, 45603, 45604, 45605, 45606, 45607, 45608, 45609, 45610, 45611, 45612, 45613, 45614, 45615, 45616, 45617, 45618, 45619, 45621, 45622, 45623, 45624, 45625, 45626, 45627, 45629, 45630, 45631, 45632, 45633, 45634, 45635, 45636, 45637, 45638, 45639, 45640, 45641, 45642, 45643, 45644, 45645, 45646, 45647, 45648, 45649, 45650, 45651, 45652, 45653, 45654, 45655, 45657, 45658, 45659, 45661, 45662, 45663, 45665, 45666, 45667, 45668, 45669, 45670, 45671, 45674, 45675, 45676, 45677, 45678, 45679, 45680, 45681, 45682, 45683, 45686, 45687, 45688, 45689, 45690, 45691, 45693, 45694, 45695, 45696, 45697, 45698, 45699, 45702, 45703, 45704, 45706, 45707, 45708, 45709, 45710, null, null, null, null, null, null, 45711, 45714, 45715, 45717, 45718, 45719, 45723, 45724, 45725, 45726, 45727, 45730, 45732, 45735, 45736, 45737, 45739, 45741, 45742, 45743, 45745, 45746, 45747, 45749, 45750, 45751, null, null, null, null, null, null, 45752, 45753, 45754, 45755, 45756, 45757, 45758, 45759, 45760, 45761, 45762, 45763, 45764, 45765, 45766, 45767, 45770, 45771, 45773, 45774, 45775, 45777, 45779, 45780, 45781, 45782, 45783, 45786, 45788, 45790, 45791, 45792, 45793, 45795, 45799, 45801, 45802, 45808, 45809, 45810, 45814, 45820, 45821, 45822, 45826, 45827, 45829, 45830, 45831, 45833, 45834, 45835, 45836, 45837, 45838, 45839, 45842, 45846, 45847, 45848, 45849, 45850, 45851, 45853, 45854, 45855, 45856, 45857, 45858, 45859, 45860, 45861, 45862, 45863, 45864, 45865, 45866, 45867, 45868, 45869, 45870, 45871, 45872, 45873, 45874, 45875, 45876, 45877, 45878, 45879, 45880, 45881, 45882, 45883, 45884, 45885, 45886, 45887, 45888, 45889, 45890, 45891, 45892, 45893, 45894, 45895, 45896, 45897, 45898, 45899, 45900, 45901, 45902, 45903, 45904, 45905, 45906, 45907, 45911, 45913, 45914, 45917, 45920, 45921, 45922, 45923, 45926, 45928, 45930, 45932, 45933, 45935, 45938, 45939, 45941, 45942, 45943, 45945, 45946, 45947, 45948, 45949, 45950, 45951, 45954, 45958, 45959, 45960, 45961, 45962, 45963, 45965, null, null, null, null, null, null, 45966, 45967, 45969, 45970, 45971, 45973, 45974, 45975, 45976, 45977, 45978, 45979, 45980, 45981, 45982, 45983, 45986, 45987, 45988, 45989, 45990, 45991, 45993, 45994, 45995, 45997, null, null, null, null, null, null, 45998, 45999, 46e3, 46001, 46002, 46003, 46004, 46005, 46006, 46007, 46008, 46009, 46010, 46011, 46012, 46013, 46014, 46015, 46016, 46017, 46018, 46019, 46022, 46023, 46025, 46026, 46029, 46031, 46033, 46034, 46035, 46038, 46040, 46042, 46044, 46046, 46047, 46049, 46050, 46051, 46053, 46054, 46055, 46057, 46058, 46059, 46060, 46061, 46062, 46063, 46064, 46065, 46066, 46067, 46068, 46069, 46070, 46071, 46072, 46073, 46074, 46075, 46077, 46078, 46079, 46080, 46081, 46082, 46083, 46084, 46085, 46086, 46087, 46088, 46089, 46090, 46091, 46092, 46093, 46094, 46095, 46097, 46098, 46099, 46100, 46101, 46102, 46103, 46105, 46106, 46107, 46109, 46110, 46111, 46113, 46114, 46115, 46116, 46117, 46118, 46119, 46122, 46124, 46125, 46126, 46127, 46128, 46129, 46130, 46131, 46133, 46134, 46135, 46136, 46137, 46138, 46139, 46140, 46141, 46142, 46143, 46144, 46145, 46146, 46147, 46148, 46149, 46150, 46151, 46152, 46153, 46154, 46155, 46156, 46157, 46158, 46159, 46162, 46163, 46165, 46166, 46167, 46169, 46170, 46171, 46172, 46173, 46174, 46175, 46178, 46180, 46182, null, null, null, null, null, null, 46183, 46184, 46185, 46186, 46187, 46189, 46190, 46191, 46192, 46193, 46194, 46195, 46196, 46197, 46198, 46199, 46200, 46201, 46202, 46203, 46204, 46205, 46206, 46207, 46209, 46210, null, null, null, null, null, null, 46211, 46212, 46213, 46214, 46215, 46217, 46218, 46219, 46220, 46221, 46222, 46223, 46224, 46225, 46226, 46227, 46228, 46229, 46230, 46231, 46232, 46233, 46234, 46235, 46236, 46238, 46239, 46240, 46241, 46242, 46243, 46245, 46246, 46247, 46249, 46250, 46251, 46253, 46254, 46255, 46256, 46257, 46258, 46259, 46260, 46262, 46264, 46266, 46267, 46268, 46269, 46270, 46271, 46273, 46274, 46275, 46277, 46278, 46279, 46281, 46282, 46283, 46284, 46285, 46286, 46287, 46289, 46290, 46291, 46292, 46294, 46295, 46296, 46297, 46298, 46299, 46302, 46303, 46305, 46306, 46309, 46311, 46312, 46313, 46314, 46315, 46318, 46320, 46322, 46323, 46324, 46325, 46326, 46327, 46329, 46330, 46331, 46332, 46333, 46334, 46335, 46336, 46337, 46338, 46339, 46340, 46341, 46342, 46343, 46344, 46345, 46346, 46347, 46348, 46349, 46350, 46351, 46352, 46353, 46354, 46355, 46358, 46359, 46361, 46362, 46365, 46366, 46367, 46368, 46369, 46370, 46371, 46374, 46379, 46380, 46381, 46382, 46383, 46386, 46387, 46389, 46390, 46391, 46393, 46394, 46395, 46396, 46397, 46398, 46399, 46402, 46406, null, null, null, null, null, null, 46407, 46408, 46409, 46410, 46414, 46415, 46417, 46418, 46419, 46421, 46422, 46423, 46424, 46425, 46426, 46427, 46430, 46434, 46435, 46436, 46437, 46438, 46439, 46440, 46441, 46442, null, null, null, null, null, null, 46443, 46444, 46445, 46446, 46447, 46448, 46449, 46450, 46451, 46452, 46453, 46454, 46455, 46456, 46457, 46458, 46459, 46460, 46461, 46462, 46463, 46464, 46465, 46466, 46467, 46468, 46469, 46470, 46471, 46472, 46473, 46474, 46475, 46476, 46477, 46478, 46479, 46480, 46481, 46482, 46483, 46484, 46485, 46486, 46487, 46488, 46489, 46490, 46491, 46492, 46493, 46494, 46495, 46498, 46499, 46501, 46502, 46503, 46505, 46508, 46509, 46510, 46511, 46514, 46518, 46519, 46520, 46521, 46522, 46526, 46527, 46529, 46530, 46531, 46533, 46534, 46535, 46536, 46537, 46538, 46539, 46542, 46546, 46547, 46548, 46549, 46550, 46551, 46553, 46554, 46555, 46556, 46557, 46558, 46559, 46560, 46561, 46562, 46563, 46564, 46565, 46566, 46567, 46568, 46569, 46570, 46571, 46573, 46574, 46575, 46576, 46577, 46578, 46579, 46580, 46581, 46582, 46583, 46584, 46585, 46586, 46587, 46588, 46589, 46590, 46591, 46592, 46593, 46594, 46595, 46596, 46597, 46598, 46599, 46600, 46601, 46602, 46603, 46604, 46605, 46606, 46607, 46610, 46611, 46613, 46614, 46615, 46617, 46618, 46619, 46620, 46621, null, null, null, null, null, null, 46622, 46623, 46624, 46625, 46626, 46627, 46628, 46630, 46631, 46632, 46633, 46634, 46635, 46637, 46638, 46639, 46640, 46641, 46642, 46643, 46645, 46646, 46647, 46648, 46649, 46650, null, null, null, null, null, null, 46651, 46652, 46653, 46654, 46655, 46656, 46657, 46658, 46659, 46660, 46661, 46662, 46663, 46665, 46666, 46667, 46668, 46669, 46670, 46671, 46672, 46673, 46674, 46675, 46676, 46677, 46678, 46679, 46680, 46681, 46682, 46683, 46684, 46685, 46686, 46687, 46688, 46689, 46690, 46691, 46693, 46694, 46695, 46697, 46698, 46699, 46700, 46701, 46702, 46703, 46704, 46705, 46706, 46707, 46708, 46709, 46710, 46711, 46712, 46713, 46714, 46715, 46716, 46717, 46718, 46719, 46720, 46721, 46722, 46723, 46724, 46725, 46726, 46727, 46728, 46729, 46730, 46731, 46732, 46733, 46734, 46735, 46736, 46737, 46738, 46739, 46740, 46741, 46742, 46743, 46744, 46745, 46746, 46747, 46750, 46751, 46753, 46754, 46755, 46757, 46758, 46759, 46760, 46761, 46762, 46765, 46766, 46767, 46768, 46770, 46771, 46772, 46773, 46774, 46775, 46776, 46777, 46778, 46779, 46780, 46781, 46782, 46783, 46784, 46785, 46786, 46787, 46788, 46789, 46790, 46791, 46792, 46793, 46794, 46795, 46796, 46797, 46798, 46799, 46800, 46801, 46802, 46803, 46805, 46806, 46807, 46808, 46809, 46810, 46811, 46812, 46813, null, null, null, null, null, null, 46814, 46815, 46816, 46817, 46818, 46819, 46820, 46821, 46822, 46823, 46824, 46825, 46826, 46827, 46828, 46829, 46830, 46831, 46833, 46834, 46835, 46837, 46838, 46839, 46841, 46842, null, null, null, null, null, null, 46843, 46844, 46845, 46846, 46847, 46850, 46851, 46852, 46854, 46855, 46856, 46857, 46858, 46859, 46860, 46861, 46862, 46863, 46864, 46865, 46866, 46867, 46868, 46869, 46870, 46871, 46872, 46873, 46874, 46875, 46876, 46877, 46878, 46879, 46880, 46881, 46882, 46883, 46884, 46885, 46886, 46887, 46890, 46891, 46893, 46894, 46897, 46898, 46899, 46900, 46901, 46902, 46903, 46906, 46908, 46909, 46910, 46911, 46912, 46913, 46914, 46915, 46917, 46918, 46919, 46921, 46922, 46923, 46925, 46926, 46927, 46928, 46929, 46930, 46931, 46934, 46935, 46936, 46937, 46938, 46939, 46940, 46941, 46942, 46943, 46945, 46946, 46947, 46949, 46950, 46951, 46953, 46954, 46955, 46956, 46957, 46958, 46959, 46962, 46964, 46966, 46967, 46968, 46969, 46970, 46971, 46974, 46975, 46977, 46978, 46979, 46981, 46982, 46983, 46984, 46985, 46986, 46987, 46990, 46995, 46996, 46997, 47002, 47003, 47005, 47006, 47007, 47009, 47010, 47011, 47012, 47013, 47014, 47015, 47018, 47022, 47023, 47024, 47025, 47026, 47027, 47030, 47031, 47033, 47034, 47035, 47036, 47037, 47038, 47039, 47040, 47041, null, null, null, null, null, null, 47042, 47043, 47044, 47045, 47046, 47048, 47050, 47051, 47052, 47053, 47054, 47055, 47056, 47057, 47058, 47059, 47060, 47061, 47062, 47063, 47064, 47065, 47066, 47067, 47068, 47069, null, null, null, null, null, null, 47070, 47071, 47072, 47073, 47074, 47075, 47076, 47077, 47078, 47079, 47080, 47081, 47082, 47083, 47086, 47087, 47089, 47090, 47091, 47093, 47094, 47095, 47096, 47097, 47098, 47099, 47102, 47106, 47107, 47108, 47109, 47110, 47114, 47115, 47117, 47118, 47119, 47121, 47122, 47123, 47124, 47125, 47126, 47127, 47130, 47132, 47134, 47135, 47136, 47137, 47138, 47139, 47142, 47143, 47145, 47146, 47147, 47149, 47150, 47151, 47152, 47153, 47154, 47155, 47158, 47162, 47163, 47164, 47165, 47166, 47167, 47169, 47170, 47171, 47173, 47174, 47175, 47176, 47177, 47178, 47179, 47180, 47181, 47182, 47183, 47184, 47186, 47188, 47189, 47190, 47191, 47192, 47193, 47194, 47195, 47198, 47199, 47201, 47202, 47203, 47205, 47206, 47207, 47208, 47209, 47210, 47211, 47214, 47216, 47218, 47219, 47220, 47221, 47222, 47223, 47225, 47226, 47227, 47229, 47230, 47231, 47232, 47233, 47234, 47235, 47236, 47237, 47238, 47239, 47240, 47241, 47242, 47243, 47244, 47246, 47247, 47248, 47249, 47250, 47251, 47252, 47253, 47254, 47255, 47256, 47257, 47258, 47259, 47260, 47261, 47262, 47263, null, null, null, null, null, null, 47264, 47265, 47266, 47267, 47268, 47269, 47270, 47271, 47273, 47274, 47275, 47276, 47277, 47278, 47279, 47281, 47282, 47283, 47285, 47286, 47287, 47289, 47290, 47291, 47292, 47293, null, null, null, null, null, null, 47294, 47295, 47298, 47300, 47302, 47303, 47304, 47305, 47306, 47307, 47309, 47310, 47311, 47313, 47314, 47315, 47317, 47318, 47319, 47320, 47321, 47322, 47323, 47324, 47326, 47328, 47330, 47331, 47332, 47333, 47334, 47335, 47338, 47339, 47341, 47342, 47343, 47345, 47346, 47347, 47348, 47349, 47350, 47351, 47354, 47356, 47358, 47359, 47360, 47361, 47362, 47363, 47365, 47366, 47367, 47368, 47369, 47370, 47371, 47372, 47373, 47374, 47375, 47376, 47377, 47378, 47379, 47380, 47381, 47382, 47383, 47385, 47386, 47387, 47388, 47389, 47390, 47391, 47393, 47394, 47395, 47396, 47397, 47398, 47399, 47400, 47401, 47402, 47403, 47404, 47405, 47406, 47407, 47408, 47409, 47410, 47411, 47412, 47413, 47414, 47415, 47416, 47417, 47418, 47419, 47422, 47423, 47425, 47426, 47427, 47429, 47430, 47431, 47432, 47433, 47434, 47435, 47437, 47438, 47440, 47442, 47443, 47444, 47445, 47446, 47447, 47450, 47451, 47453, 47454, 47455, 47457, 47458, 47459, 47460, 47461, 47462, 47463, 47466, 47468, 47470, 47471, 47472, 47473, 47474, 47475, 47478, 47479, 47481, 47482, 47483, 47485, null, null, null, null, null, null, 47486, 47487, 47488, 47489, 47490, 47491, 47494, 47496, 47499, 47500, 47503, 47504, 47505, 47506, 47507, 47508, 47509, 47510, 47511, 47512, 47513, 47514, 47515, 47516, 47517, 47518, null, null, null, null, null, null, 47519, 47520, 47521, 47522, 47523, 47524, 47525, 47526, 47527, 47528, 47529, 47530, 47531, 47534, 47535, 47537, 47538, 47539, 47541, 47542, 47543, 47544, 47545, 47546, 47547, 47550, 47552, 47554, 47555, 47556, 47557, 47558, 47559, 47562, 47563, 47565, 47571, 47572, 47573, 47574, 47575, 47578, 47580, 47583, 47584, 47586, 47590, 47591, 47593, 47594, 47595, 47597, 47598, 47599, 47600, 47601, 47602, 47603, 47606, 47611, 47612, 47613, 47614, 47615, 47618, 47619, 47620, 47621, 47622, 47623, 47625, 47626, 47627, 47628, 47629, 47630, 47631, 47632, 47633, 47634, 47635, 47636, 47638, 47639, 47640, 47641, 47642, 47643, 47644, 47645, 47646, 47647, 47648, 47649, 47650, 47651, 47652, 47653, 47654, 47655, 47656, 47657, 47658, 47659, 47660, 47661, 47662, 47663, 47664, 47665, 47666, 47667, 47668, 47669, 47670, 47671, 47674, 47675, 47677, 47678, 47679, 47681, 47683, 47684, 47685, 47686, 47687, 47690, 47692, 47695, 47696, 47697, 47698, 47702, 47703, 47705, 47706, 47707, 47709, 47710, 47711, 47712, 47713, 47714, 47715, 47718, 47722, 47723, 47724, 47725, 47726, 47727, null, null, null, null, null, null, 47730, 47731, 47733, 47734, 47735, 47737, 47738, 47739, 47740, 47741, 47742, 47743, 47744, 47745, 47746, 47750, 47752, 47753, 47754, 47755, 47757, 47758, 47759, 47760, 47761, 47762, null, null, null, null, null, null, 47763, 47764, 47765, 47766, 47767, 47768, 47769, 47770, 47771, 47772, 47773, 47774, 47775, 47776, 47777, 47778, 47779, 47780, 47781, 47782, 47783, 47786, 47789, 47790, 47791, 47793, 47795, 47796, 47797, 47798, 47799, 47802, 47804, 47806, 47807, 47808, 47809, 47810, 47811, 47813, 47814, 47815, 47817, 47818, 47819, 47820, 47821, 47822, 47823, 47824, 47825, 47826, 47827, 47828, 47829, 47830, 47831, 47834, 47835, 47836, 47837, 47838, 47839, 47840, 47841, 47842, 47843, 47844, 47845, 47846, 47847, 47848, 47849, 47850, 47851, 47852, 47853, 47854, 47855, 47856, 47857, 47858, 47859, 47860, 47861, 47862, 47863, 47864, 47865, 47866, 47867, 47869, 47870, 47871, 47873, 47874, 47875, 47877, 47878, 47879, 47880, 47881, 47882, 47883, 47884, 47886, 47888, 47890, 47891, 47892, 47893, 47894, 47895, 47897, 47898, 47899, 47901, 47902, 47903, 47905, 47906, 47907, 47908, 47909, 47910, 47911, 47912, 47914, 47916, 47917, 47918, 47919, 47920, 47921, 47922, 47923, 47927, 47929, 47930, 47935, 47936, 47937, 47938, 47939, 47942, 47944, 47946, 47947, 47948, 47950, 47953, 47954, null, null, null, null, null, null, 47955, 47957, 47958, 47959, 47961, 47962, 47963, 47964, 47965, 47966, 47967, 47968, 47970, 47972, 47973, 47974, 47975, 47976, 47977, 47978, 47979, 47981, 47982, 47983, 47984, 47985, null, null, null, null, null, null, 47986, 47987, 47988, 47989, 47990, 47991, 47992, 47993, 47994, 47995, 47996, 47997, 47998, 47999, 48e3, 48001, 48002, 48003, 48004, 48005, 48006, 48007, 48009, 48010, 48011, 48013, 48014, 48015, 48017, 48018, 48019, 48020, 48021, 48022, 48023, 48024, 48025, 48026, 48027, 48028, 48029, 48030, 48031, 48032, 48033, 48034, 48035, 48037, 48038, 48039, 48041, 48042, 48043, 48045, 48046, 48047, 48048, 48049, 48050, 48051, 48053, 48054, 48056, 48057, 48058, 48059, 48060, 48061, 48062, 48063, 48065, 48066, 48067, 48069, 48070, 48071, 48073, 48074, 48075, 48076, 48077, 48078, 48079, 48081, 48082, 48084, 48085, 48086, 48087, 48088, 48089, 48090, 48091, 48092, 48093, 48094, 48095, 48096, 48097, 48098, 48099, 48100, 48101, 48102, 48103, 48104, 48105, 48106, 48107, 48108, 48109, 48110, 48111, 48112, 48113, 48114, 48115, 48116, 48117, 48118, 48119, 48122, 48123, 48125, 48126, 48129, 48131, 48132, 48133, 48134, 48135, 48138, 48142, 48144, 48146, 48147, 48153, 48154, 48160, 48161, 48162, 48163, 48166, 48168, 48170, 48171, 48172, 48174, 48175, 48178, 48179, 48181, null, null, null, null, null, null, 48182, 48183, 48185, 48186, 48187, 48188, 48189, 48190, 48191, 48194, 48198, 48199, 48200, 48202, 48203, 48206, 48207, 48209, 48210, 48211, 48212, 48213, 48214, 48215, 48216, 48217, null, null, null, null, null, null, 48218, 48219, 48220, 48222, 48223, 48224, 48225, 48226, 48227, 48228, 48229, 48230, 48231, 48232, 48233, 48234, 48235, 48236, 48237, 48238, 48239, 48240, 48241, 48242, 48243, 48244, 48245, 48246, 48247, 48248, 48249, 48250, 48251, 48252, 48253, 48254, 48255, 48256, 48257, 48258, 48259, 48262, 48263, 48265, 48266, 48269, 48271, 48272, 48273, 48274, 48275, 48278, 48280, 48283, 48284, 48285, 48286, 48287, 48290, 48291, 48293, 48294, 48297, 48298, 48299, 48300, 48301, 48302, 48303, 48306, 48310, 48311, 48312, 48313, 48314, 48315, 48318, 48319, 48321, 48322, 48323, 48325, 48326, 48327, 48328, 48329, 48330, 48331, 48332, 48334, 48338, 48339, 48340, 48342, 48343, 48345, 48346, 48347, 48349, 48350, 48351, 48352, 48353, 48354, 48355, 48356, 48357, 48358, 48359, 48360, 48361, 48362, 48363, 48364, 48365, 48366, 48367, 48368, 48369, 48370, 48371, 48375, 48377, 48378, 48379, 48381, 48382, 48383, 48384, 48385, 48386, 48387, 48390, 48392, 48394, 48395, 48396, 48397, 48398, 48399, 48401, 48402, 48403, 48405, 48406, 48407, 48408, 48409, 48410, 48411, 48412, 48413, null, null, null, null, null, null, 48414, 48415, 48416, 48417, 48418, 48419, 48421, 48422, 48423, 48424, 48425, 48426, 48427, 48429, 48430, 48431, 48432, 48433, 48434, 48435, 48436, 48437, 48438, 48439, 48440, 48441, null, null, null, null, null, null, 48442, 48443, 48444, 48445, 48446, 48447, 48449, 48450, 48451, 48452, 48453, 48454, 48455, 48458, 48459, 48461, 48462, 48463, 48465, 48466, 48467, 48468, 48469, 48470, 48471, 48474, 48475, 48476, 48477, 48478, 48479, 48480, 48481, 48482, 48483, 48485, 48486, 48487, 48489, 48490, 48491, 48492, 48493, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48501, 48502, 48503, 48504, 48505, 48506, 48507, 48508, 48509, 48510, 48511, 48514, 48515, 48517, 48518, 48523, 48524, 48525, 48526, 48527, 48530, 48532, 48534, 48535, 48536, 48539, 48541, 48542, 48543, 48544, 48545, 48546, 48547, 48549, 48550, 48551, 48552, 48553, 48554, 48555, 48556, 48557, 48558, 48559, 48561, 48562, 48563, 48564, 48565, 48566, 48567, 48569, 48570, 48571, 48572, 48573, 48574, 48575, 48576, 48577, 48578, 48579, 48580, 48581, 48582, 48583, 48584, 48585, 48586, 48587, 48588, 48589, 48590, 48591, 48592, 48593, 48594, 48595, 48598, 48599, 48601, 48602, 48603, 48605, 48606, 48607, 48608, 48609, 48610, 48611, 48612, 48613, 48614, 48615, 48616, 48618, 48619, 48620, 48621, 48622, 48623, 48625, null, null, null, null, null, null, 48626, 48627, 48629, 48630, 48631, 48633, 48634, 48635, 48636, 48637, 48638, 48639, 48641, 48642, 48644, 48646, 48647, 48648, 48649, 48650, 48651, 48654, 48655, 48657, 48658, 48659, null, null, null, null, null, null, 48661, 48662, 48663, 48664, 48665, 48666, 48667, 48670, 48672, 48673, 48674, 48675, 48676, 48677, 48678, 48679, 48680, 48681, 48682, 48683, 48684, 48685, 48686, 48687, 48688, 48689, 48690, 48691, 48692, 48693, 48694, 48695, 48696, 48697, 48698, 48699, 48700, 48701, 48702, 48703, 48704, 48705, 48706, 48707, 48710, 48711, 48713, 48714, 48715, 48717, 48719, 48720, 48721, 48722, 48723, 48726, 48728, 48732, 48733, 48734, 48735, 48738, 48739, 48741, 48742, 48743, 48745, 48747, 48748, 48749, 48750, 48751, 48754, 48758, 48759, 48760, 48761, 48762, 48766, 48767, 48769, 48770, 48771, 48773, 48774, 48775, 48776, 48777, 48778, 48779, 48782, 48786, 48787, 48788, 48789, 48790, 48791, 48794, 48795, 48796, 48797, 48798, 48799, 48800, 48801, 48802, 48803, 48804, 48805, 48806, 48807, 48809, 48810, 48811, 48812, 48813, 48814, 48815, 48816, 48817, 48818, 48819, 48820, 48821, 48822, 48823, 48824, 48825, 48826, 48827, 48828, 48829, 48830, 48831, 48832, 48833, 48834, 48835, 48836, 48837, 48838, 48839, 48840, 48841, 48842, 48843, 48844, 48845, 48846, 48847, 48850, 48851, null, null, null, null, null, null, 48853, 48854, 48857, 48858, 48859, 48860, 48861, 48862, 48863, 48865, 48866, 48870, 48871, 48872, 48873, 48874, 48875, 48877, 48878, 48879, 48880, 48881, 48882, 48883, 48884, 48885, null, null, null, null, null, null, 48886, 48887, 48888, 48889, 48890, 48891, 48892, 48893, 48894, 48895, 48896, 48898, 48899, 48900, 48901, 48902, 48903, 48906, 48907, 48908, 48909, 48910, 48911, 48912, 48913, 48914, 48915, 48916, 48917, 48918, 48919, 48922, 48926, 48927, 48928, 48929, 48930, 48931, 48932, 48933, 48934, 48935, 48936, 48937, 48938, 48939, 48940, 48941, 48942, 48943, 48944, 48945, 48946, 48947, 48948, 48949, 48950, 48951, 48952, 48953, 48954, 48955, 48956, 48957, 48958, 48959, 48962, 48963, 48965, 48966, 48967, 48969, 48970, 48971, 48972, 48973, 48974, 48975, 48978, 48979, 48980, 48982, 48983, 48984, 48985, 48986, 48987, 48988, 48989, 48990, 48991, 48992, 48993, 48994, 48995, 48996, 48997, 48998, 48999, 49e3, 49001, 49002, 49003, 49004, 49005, 49006, 49007, 49008, 49009, 49010, 49011, 49012, 49013, 49014, 49015, 49016, 49017, 49018, 49019, 49020, 49021, 49022, 49023, 49024, 49025, 49026, 49027, 49028, 49029, 49030, 49031, 49032, 49033, 49034, 49035, 49036, 49037, 49038, 49039, 49040, 49041, 49042, 49043, 49045, 49046, 49047, 49048, 49049, 49050, 49051, 49052, 49053, null, null, null, null, null, null, 49054, 49055, 49056, 49057, 49058, 49059, 49060, 49061, 49062, 49063, 49064, 49065, 49066, 49067, 49068, 49069, 49070, 49071, 49073, 49074, 49075, 49076, 49077, 49078, 49079, 49080, null, null, null, null, null, null, 49081, 49082, 49083, 49084, 49085, 49086, 49087, 49088, 49089, 49090, 49091, 49092, 49094, 49095, 49096, 49097, 49098, 49099, 49102, 49103, 49105, 49106, 49107, 49109, 49110, 49111, 49112, 49113, 49114, 49115, 49117, 49118, 49120, 49122, 49123, 49124, 49125, 49126, 49127, 49128, 49129, 49130, 49131, 49132, 49133, 49134, 49135, 49136, 49137, 49138, 49139, 49140, 49141, 49142, 49143, 49144, 49145, 49146, 49147, 49148, 49149, 49150, 49151, 49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49162, 49163, 49164, 49165, 49166, 49167, 49168, 49169, 49170, 49171, 49172, 49173, 49174, 49175, 49176, 49177, 49178, 49179, 49180, 49181, 49182, 49183, 49184, 49185, 49186, 49187, 49188, 49189, 49190, 49191, 49192, 49193, 49194, 49195, 49196, 49197, 49198, 49199, 49200, 49201, 49202, 49203, 49204, 49205, 49206, 49207, 49208, 49209, 49210, 49211, 49213, 49214, 49215, 49216, 49217, 49218, 49219, 49220, 49221, 49222, 49223, 49224, 49225, 49226, 49227, 49228, 49229, 49230, 49231, 49232, 49234, 49235, 49236, 49237, 49238, 49239, 49241, 49242, 49243, null, null, null, null, null, null, 49245, 49246, 49247, 49249, 49250, 49251, 49252, 49253, 49254, 49255, 49258, 49259, 49260, 49261, 49262, 49263, 49264, 49265, 49266, 49267, 49268, 49269, 49270, 49271, 49272, 49273, null, null, null, null, null, null, 49274, 49275, 49276, 49277, 49278, 49279, 49280, 49281, 49282, 49283, 49284, 49285, 49286, 49287, 49288, 49289, 49290, 49291, 49292, 49293, 49294, 49295, 49298, 49299, 49301, 49302, 49303, 49305, 49306, 49307, 49308, 49309, 49310, 49311, 49314, 49316, 49318, 49319, 49320, 49321, 49322, 49323, 49326, 49329, 49330, 49335, 49336, 49337, 49338, 49339, 49342, 49346, 49347, 49348, 49350, 49351, 49354, 49355, 49357, 49358, 49359, 49361, 49362, 49363, 49364, 49365, 49366, 49367, 49370, 49374, 49375, 49376, 49377, 49378, 49379, 49382, 49383, 49385, 49386, 49387, 49389, 49390, 49391, 49392, 49393, 49394, 49395, 49398, 49400, 49402, 49403, 49404, 49405, 49406, 49407, 49409, 49410, 49411, 49413, 49414, 49415, 49417, 49418, 49419, 49420, 49421, 49422, 49423, 49425, 49426, 49427, 49428, 49430, 49431, 49432, 49433, 49434, 49435, 49441, 49442, 49445, 49448, 49449, 49450, 49451, 49454, 49458, 49459, 49460, 49461, 49463, 49466, 49467, 49469, 49470, 49471, 49473, 49474, 49475, 49476, 49477, 49478, 49479, 49482, 49486, 49487, 49488, 49489, 49490, 49491, 49494, 49495, null, null, null, null, null, null, 49497, 49498, 49499, 49501, 49502, 49503, 49504, 49505, 49506, 49507, 49510, 49514, 49515, 49516, 49517, 49518, 49519, 49521, 49522, 49523, 49525, 49526, 49527, 49529, 49530, 49531, null, null, null, null, null, null, 49532, 49533, 49534, 49535, 49536, 49537, 49538, 49539, 49540, 49542, 49543, 49544, 49545, 49546, 49547, 49551, 49553, 49554, 49555, 49557, 49559, 49560, 49561, 49562, 49563, 49566, 49568, 49570, 49571, 49572, 49574, 49575, 49578, 49579, 49581, 49582, 49583, 49585, 49586, 49587, 49588, 49589, 49590, 49591, 49592, 49593, 49594, 49595, 49596, 49598, 49599, 49600, 49601, 49602, 49603, 49605, 49606, 49607, 49609, 49610, 49611, 49613, 49614, 49615, 49616, 49617, 49618, 49619, 49621, 49622, 49625, 49626, 49627, 49628, 49629, 49630, 49631, 49633, 49634, 49635, 49637, 49638, 49639, 49641, 49642, 49643, 49644, 49645, 49646, 49647, 49650, 49652, 49653, 49654, 49655, 49656, 49657, 49658, 49659, 49662, 49663, 49665, 49666, 49667, 49669, 49670, 49671, 49672, 49673, 49674, 49675, 49678, 49680, 49682, 49683, 49684, 49685, 49686, 49687, 49690, 49691, 49693, 49694, 49697, 49698, 49699, 49700, 49701, 49702, 49703, 49706, 49708, 49710, 49712, 49715, 49717, 49718, 49719, 49720, 49721, 49722, 49723, 49724, 49725, 49726, 49727, 49728, 49729, 49730, 49731, 49732, 49733, null, null, null, null, null, null, 49734, 49735, 49737, 49738, 49739, 49740, 49741, 49742, 49743, 49746, 49747, 49749, 49750, 49751, 49753, 49754, 49755, 49756, 49757, 49758, 49759, 49761, 49762, 49763, 49764, 49766, null, null, null, null, null, null, 49767, 49768, 49769, 49770, 49771, 49774, 49775, 49777, 49778, 49779, 49781, 49782, 49783, 49784, 49785, 49786, 49787, 49790, 49792, 49794, 49795, 49796, 49797, 49798, 49799, 49802, 49803, 49804, 49805, 49806, 49807, 49809, 49810, 49811, 49812, 49813, 49814, 49815, 49817, 49818, 49820, 49822, 49823, 49824, 49825, 49826, 49827, 49830, 49831, 49833, 49834, 49835, 49838, 49839, 49840, 49841, 49842, 49843, 49846, 49848, 49850, 49851, 49852, 49853, 49854, 49855, 49856, 49857, 49858, 49859, 49860, 49861, 49862, 49863, 49864, 49865, 49866, 49867, 49868, 49869, 49870, 49871, 49872, 49873, 49874, 49875, 49876, 49877, 49878, 49879, 49880, 49881, 49882, 49883, 49886, 49887, 49889, 49890, 49893, 49894, 49895, 49896, 49897, 49898, 49902, 49904, 49906, 49907, 49908, 49909, 49911, 49914, 49917, 49918, 49919, 49921, 49922, 49923, 49924, 49925, 49926, 49927, 49930, 49931, 49934, 49935, 49936, 49937, 49938, 49942, 49943, 49945, 49946, 49947, 49949, 49950, 49951, 49952, 49953, 49954, 49955, 49958, 49959, 49962, 49963, 49964, 49965, 49966, 49967, 49968, 49969, 49970, null, null, null, null, null, null, 49971, 49972, 49973, 49974, 49975, 49976, 49977, 49978, 49979, 49980, 49981, 49982, 49983, 49984, 49985, 49986, 49987, 49988, 49990, 49991, 49992, 49993, 49994, 49995, 49996, 49997, null, null, null, null, null, null, 49998, 49999, 5e4, 50001, 50002, 50003, 50004, 50005, 50006, 50007, 50008, 50009, 50010, 50011, 50012, 50013, 50014, 50015, 50016, 50017, 50018, 50019, 50020, 50021, 50022, 50023, 50026, 50027, 50029, 50030, 50031, 50033, 50035, 50036, 50037, 50038, 50039, 50042, 50043, 50046, 50047, 50048, 50049, 50050, 50051, 50053, 50054, 50055, 50057, 50058, 50059, 50061, 50062, 50063, 50064, 50065, 50066, 50067, 50068, 50069, 50070, 50071, 50072, 50073, 50074, 50075, 50076, 50077, 50078, 50079, 50080, 50081, 50082, 50083, 50084, 50085, 50086, 50087, 50088, 50089, 50090, 50091, 50092, 50093, 50094, 50095, 50096, 50097, 50098, 50099, 50100, 50101, 50102, 50103, 50104, 50105, 50106, 50107, 50108, 50109, 50110, 50111, 50113, 50114, 50115, 50116, 50117, 50118, 50119, 50120, 50121, 50122, 50123, 50124, 50125, 50126, 50127, 50128, 50129, 50130, 50131, 50132, 50133, 50134, 50135, 50138, 50139, 50141, 50142, 50145, 50147, 50148, 50149, 50150, 50151, 50154, 50155, 50156, 50158, 50159, 50160, 50161, 50162, 50163, 50166, 50167, 50169, 50170, 50171, 50172, 50173, 50174, null, null, null, null, null, null, 50175, 50176, 50177, 50178, 50179, 50180, 50181, 50182, 50183, 50185, 50186, 50187, 50188, 50189, 50190, 50191, 50193, 50194, 50195, 50196, 50197, 50198, 50199, 50200, 50201, 50202, null, null, null, null, null, null, 50203, 50204, 50205, 50206, 50207, 50208, 50209, 50210, 50211, 50213, 50214, 50215, 50216, 50217, 50218, 50219, 50221, 50222, 50223, 50225, 50226, 50227, 50229, 50230, 50231, 50232, 50233, 50234, 50235, 50238, 50239, 50240, 50241, 50242, 50243, 50244, 50245, 50246, 50247, 50249, 50250, 50251, 50252, 50253, 50254, 50255, 50256, 50257, 50258, 50259, 50260, 50261, 50262, 50263, 50264, 50265, 50266, 50267, 50268, 50269, 50270, 50271, 50272, 50273, 50274, 50275, 50278, 50279, 50281, 50282, 50283, 50285, 50286, 50287, 50288, 50289, 50290, 50291, 50294, 50295, 50296, 50298, 50299, 50300, 50301, 50302, 50303, 50305, 50306, 50307, 50308, 50309, 50310, 50311, 50312, 50313, 50314, 50315, 50316, 50317, 50318, 50319, 50320, 50321, 50322, 50323, 50325, 50326, 50327, 50328, 50329, 50330, 50331, 50333, 50334, 50335, 50336, 50337, 50338, 50339, 50340, 50341, 50342, 50343, 50344, 50345, 50346, 50347, 50348, 50349, 50350, 50351, 50352, 50353, 50354, 50355, 50356, 50357, 50358, 50359, 50361, 50362, 50363, 50365, 50366, 50367, 50368, 50369, 50370, 50371, 50372, 50373, null, null, null, null, null, null, 50374, 50375, 50376, 50377, 50378, 50379, 50380, 50381, 50382, 50383, 50384, 50385, 50386, 50387, 50388, 50389, 50390, 50391, 50392, 50393, 50394, 50395, 50396, 50397, 50398, 50399, null, null, null, null, null, null, 50400, 50401, 50402, 50403, 50404, 50405, 50406, 50407, 50408, 50410, 50411, 50412, 50413, 50414, 50415, 50418, 50419, 50421, 50422, 50423, 50425, 50427, 50428, 50429, 50430, 50434, 50435, 50436, 50437, 50438, 50439, 50440, 50441, 50442, 50443, 50445, 50446, 50447, 50449, 50450, 50451, 50453, 50454, 50455, 50456, 50457, 50458, 50459, 50461, 50462, 50463, 50464, 50465, 50466, 50467, 50468, 50469, 50470, 50471, 50474, 50475, 50477, 50478, 50479, 50481, 50482, 50483, 50484, 50485, 50486, 50487, 50490, 50492, 50494, 50495, 50496, 50497, 50498, 50499, 50502, 50503, 50507, 50511, 50512, 50513, 50514, 50518, 50522, 50523, 50524, 50527, 50530, 50531, 50533, 50534, 50535, 50537, 50538, 50539, 50540, 50541, 50542, 50543, 50546, 50550, 50551, 50552, 50553, 50554, 50555, 50558, 50559, 50561, 50562, 50563, 50565, 50566, 50568, 50569, 50570, 50571, 50574, 50576, 50578, 50579, 50580, 50582, 50585, 50586, 50587, 50589, 50590, 50591, 50593, 50594, 50595, 50596, 50597, 50598, 50599, 50600, 50602, 50603, 50604, 50605, 50606, 50607, 50608, 50609, 50610, 50611, 50614, null, null, null, null, null, null, 50615, 50618, 50623, 50624, 50625, 50626, 50627, 50635, 50637, 50639, 50642, 50643, 50645, 50646, 50647, 50649, 50650, 50651, 50652, 50653, 50654, 50655, 50658, 50660, 50662, 50663, null, null, null, null, null, null, 50664, 50665, 50666, 50667, 50671, 50673, 50674, 50675, 50677, 50680, 50681, 50682, 50683, 50690, 50691, 50692, 50697, 50698, 50699, 50701, 50702, 50703, 50705, 50706, 50707, 50708, 50709, 50710, 50711, 50714, 50717, 50718, 50719, 50720, 50721, 50722, 50723, 50726, 50727, 50729, 50730, 50731, 50735, 50737, 50738, 50742, 50744, 50746, 50748, 50749, 50750, 50751, 50754, 50755, 50757, 50758, 50759, 50761, 50762, 50763, 50764, 50765, 50766, 50767, 50770, 50774, 50775, 50776, 50777, 50778, 50779, 50782, 50783, 50785, 50786, 50787, 50788, 50789, 50790, 50791, 50792, 50793, 50794, 50795, 50797, 50798, 50800, 50802, 50803, 50804, 50805, 50806, 50807, 50810, 50811, 50813, 50814, 50815, 50817, 50818, 50819, 50820, 50821, 50822, 50823, 50826, 50828, 50830, 50831, 50832, 50833, 50834, 50835, 50838, 50839, 50841, 50842, 50843, 50845, 50846, 50847, 50848, 50849, 50850, 50851, 50854, 50856, 50858, 50859, 50860, 50861, 50862, 50863, 50866, 50867, 50869, 50870, 50871, 50875, 50876, 50877, 50878, 50879, 50882, 50884, 50886, 50887, 50888, 50889, 50890, 50891, 50894, null, null, null, null, null, null, 50895, 50897, 50898, 50899, 50901, 50902, 50903, 50904, 50905, 50906, 50907, 50910, 50911, 50914, 50915, 50916, 50917, 50918, 50919, 50922, 50923, 50925, 50926, 50927, 50929, 50930, null, null, null, null, null, null, 50931, 50932, 50933, 50934, 50935, 50938, 50939, 50940, 50942, 50943, 50944, 50945, 50946, 50947, 50950, 50951, 50953, 50954, 50955, 50957, 50958, 50959, 50960, 50961, 50962, 50963, 50966, 50968, 50970, 50971, 50972, 50973, 50974, 50975, 50978, 50979, 50981, 50982, 50983, 50985, 50986, 50987, 50988, 50989, 50990, 50991, 50994, 50996, 50998, 51e3, 51001, 51002, 51003, 51006, 51007, 51009, 51010, 51011, 51013, 51014, 51015, 51016, 51017, 51019, 51022, 51024, 51033, 51034, 51035, 51037, 51038, 51039, 51041, 51042, 51043, 51044, 51045, 51046, 51047, 51049, 51050, 51052, 51053, 51054, 51055, 51056, 51057, 51058, 51059, 51062, 51063, 51065, 51066, 51067, 51071, 51072, 51073, 51074, 51078, 51083, 51084, 51085, 51087, 51090, 51091, 51093, 51097, 51099, 51100, 51101, 51102, 51103, 51106, 51111, 51112, 51113, 51114, 51115, 51118, 51119, 51121, 51122, 51123, 51125, 51126, 51127, 51128, 51129, 51130, 51131, 51134, 51138, 51139, 51140, 51141, 51142, 51143, 51146, 51147, 51149, 51151, 51153, 51154, 51155, 51156, 51157, 51158, 51159, 51161, 51162, 51163, 51164, null, null, null, null, null, null, 51166, 51167, 51168, 51169, 51170, 51171, 51173, 51174, 51175, 51177, 51178, 51179, 51181, 51182, 51183, 51184, 51185, 51186, 51187, 51188, 51189, 51190, 51191, 51192, 51193, 51194, null, null, null, null, null, null, 51195, 51196, 51197, 51198, 51199, 51202, 51203, 51205, 51206, 51207, 51209, 51211, 51212, 51213, 51214, 51215, 51218, 51220, 51223, 51224, 51225, 51226, 51227, 51230, 51231, 51233, 51234, 51235, 51237, 51238, 51239, 51240, 51241, 51242, 51243, 51246, 51248, 51250, 51251, 51252, 51253, 51254, 51255, 51257, 51258, 51259, 51261, 51262, 51263, 51265, 51266, 51267, 51268, 51269, 51270, 51271, 51274, 51275, 51278, 51279, 51280, 51281, 51282, 51283, 51285, 51286, 51287, 51288, 51289, 51290, 51291, 51292, 51293, 51294, 51295, 51296, 51297, 51298, 51299, 51300, 51301, 51302, 51303, 51304, 51305, 51306, 51307, 51308, 51309, 51310, 51311, 51314, 51315, 51317, 51318, 51319, 51321, 51323, 51324, 51325, 51326, 51327, 51330, 51332, 51336, 51337, 51338, 51342, 51343, 51344, 51345, 51346, 51347, 51349, 51350, 51351, 51352, 51353, 51354, 51355, 51356, 51358, 51360, 51362, 51363, 51364, 51365, 51366, 51367, 51369, 51370, 51371, 51372, 51373, 51374, 51375, 51376, 51377, 51378, 51379, 51380, 51381, 51382, 51383, 51384, 51385, 51386, 51387, 51390, 51391, 51392, 51393, null, null, null, null, null, null, 51394, 51395, 51397, 51398, 51399, 51401, 51402, 51403, 51405, 51406, 51407, 51408, 51409, 51410, 51411, 51414, 51416, 51418, 51419, 51420, 51421, 51422, 51423, 51426, 51427, 51429, null, null, null, null, null, null, 51430, 51431, 51432, 51433, 51434, 51435, 51436, 51437, 51438, 51439, 51440, 51441, 51442, 51443, 51444, 51446, 51447, 51448, 51449, 51450, 51451, 51454, 51455, 51457, 51458, 51459, 51463, 51464, 51465, 51466, 51467, 51470, 12288, 12289, 12290, 183, 8229, 8230, 168, 12291, 173, 8213, 8741, 65340, 8764, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 177, 215, 247, 8800, 8804, 8805, 8734, 8756, 176, 8242, 8243, 8451, 8491, 65504, 65505, 65509, 9794, 9792, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 167, 8251, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8594, 8592, 8593, 8595, 8596, 12307, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, 8743, 8744, 65506, 51472, 51474, 51475, 51476, 51477, 51478, 51479, 51481, 51482, 51483, 51484, 51485, 51486, 51487, 51488, 51489, 51490, 51491, 51492, 51493, 51494, 51495, 51496, 51497, 51498, 51499, null, null, null, null, null, null, 51501, 51502, 51503, 51504, 51505, 51506, 51507, 51509, 51510, 51511, 51512, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51526, 51527, null, null, null, null, null, null, 51528, 51529, 51530, 51531, 51532, 51533, 51534, 51535, 51538, 51539, 51541, 51542, 51543, 51545, 51546, 51547, 51548, 51549, 51550, 51551, 51554, 51556, 51557, 51558, 51559, 51560, 51561, 51562, 51563, 51565, 51566, 51567, 8658, 8660, 8704, 8707, 180, 65374, 711, 728, 733, 730, 729, 184, 731, 161, 191, 720, 8750, 8721, 8719, 164, 8457, 8240, 9665, 9664, 9655, 9654, 9828, 9824, 9825, 9829, 9831, 9827, 8857, 9672, 9635, 9680, 9681, 9618, 9636, 9637, 9640, 9639, 9638, 9641, 9832, 9743, 9742, 9756, 9758, 182, 8224, 8225, 8597, 8599, 8601, 8598, 8600, 9837, 9833, 9834, 9836, 12927, 12828, 8470, 13255, 8482, 13250, 13272, 8481, 8364, 174, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51569, 51570, 51571, 51573, 51574, 51575, 51576, 51577, 51578, 51579, 51581, 51582, 51583, 51584, 51585, 51586, 51587, 51588, 51589, 51590, 51591, 51594, 51595, 51597, 51598, 51599, null, null, null, null, null, null, 51601, 51602, 51603, 51604, 51605, 51606, 51607, 51610, 51612, 51614, 51615, 51616, 51617, 51618, 51619, 51620, 51621, 51622, 51623, 51624, 51625, 51626, 51627, 51628, 51629, 51630, null, null, null, null, null, null, 51631, 51632, 51633, 51634, 51635, 51636, 51637, 51638, 51639, 51640, 51641, 51642, 51643, 51644, 51645, 51646, 51647, 51650, 51651, 51653, 51654, 51657, 51659, 51660, 51661, 51662, 51663, 51666, 51668, 51671, 51672, 51675, 65281, 65282, 65283, 65284, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65510, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 51678, 51679, 51681, 51683, 51685, 51686, 51688, 51689, 51690, 51691, 51694, 51698, 51699, 51700, 51701, 51702, 51703, 51706, 51707, 51709, 51710, 51711, 51713, 51714, 51715, 51716, null, null, null, null, null, null, 51717, 51718, 51719, 51722, 51726, 51727, 51728, 51729, 51730, 51731, 51733, 51734, 51735, 51737, 51738, 51739, 51740, 51741, 51742, 51743, 51744, 51745, 51746, 51747, 51748, 51749, null, null, null, null, null, null, 51750, 51751, 51752, 51754, 51755, 51756, 51757, 51758, 51759, 51760, 51761, 51762, 51763, 51764, 51765, 51766, 51767, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 51783, 51784, 51785, 51786, 51787, 51790, 51791, 51793, 51794, 51795, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51806, 51810, 51811, 51812, 51813, 51814, 51815, 51817, 51818, null, null, null, null, null, null, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51826, 51827, 51828, 51829, 51830, 51831, 51832, 51833, 51834, 51835, 51836, 51838, 51839, 51840, 51841, 51842, 51843, 51845, 51846, null, null, null, null, null, null, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51865, 51866, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, null, null, null, null, null, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51902, 51903, 51905, 51906, 51907, 51909, null, null, null, null, null, null, 51910, 51911, 51912, 51913, 51914, 51915, 51918, 51920, 51922, 51924, 51925, 51926, 51927, 51930, 51931, 51932, 51933, 51934, 51935, 51937, 51938, 51939, 51940, 51941, 51942, 51943, null, null, null, null, null, null, 51944, 51945, 51946, 51947, 51949, 51950, 51951, 51952, 51953, 51954, 51955, 51957, 51958, 51959, 51960, 51961, 51962, 51963, 51964, 51965, 51966, 51967, 51968, 51969, 51970, 51971, 51972, 51973, 51974, 51975, 51977, 51978, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, 9490, 9489, 9498, 9497, 9494, 9493, 9486, 9485, 9502, 9503, 9505, 9506, 9510, 9511, 9513, 9514, 9517, 9518, 9521, 9522, 9525, 9526, 9529, 9530, 9533, 9534, 9536, 9537, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51979, 51980, 51981, 51982, 51983, 51985, 51986, 51987, 51989, 51990, 51991, 51993, 51994, 51995, 51996, 51997, 51998, 51999, 52002, 52003, 52004, 52005, 52006, 52007, 52008, 52009, null, null, null, null, null, null, 52010, 52011, 52012, 52013, 52014, 52015, 52016, 52017, 52018, 52019, 52020, 52021, 52022, 52023, 52024, 52025, 52026, 52027, 52028, 52029, 52030, 52031, 52032, 52034, 52035, 52036, null, null, null, null, null, null, 52037, 52038, 52039, 52042, 52043, 52045, 52046, 52047, 52049, 52050, 52051, 52052, 52053, 52054, 52055, 52058, 52059, 52060, 52062, 52063, 52064, 52065, 52066, 52067, 52069, 52070, 52071, 52072, 52073, 52074, 52075, 52076, 13205, 13206, 13207, 8467, 13208, 13252, 13219, 13220, 13221, 13222, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13258, 13197, 13198, 13199, 13263, 13192, 13193, 13256, 13223, 13224, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13184, 13185, 13186, 13187, 13188, 13242, 13243, 13244, 13245, 13246, 13247, 13200, 13201, 13202, 13203, 13204, 8486, 13248, 13249, 13194, 13195, 13196, 13270, 13253, 13229, 13230, 13231, 13275, 13225, 13226, 13227, 13228, 13277, 13264, 13267, 13251, 13257, 13276, 13254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52077, 52078, 52079, 52080, 52081, 52082, 52083, 52084, 52085, 52086, 52087, 52090, 52091, 52092, 52093, 52094, 52095, 52096, 52097, 52098, 52099, 52100, 52101, 52102, 52103, 52104, null, null, null, null, null, null, 52105, 52106, 52107, 52108, 52109, 52110, 52111, 52112, 52113, 52114, 52115, 52116, 52117, 52118, 52119, 52120, 52121, 52122, 52123, 52125, 52126, 52127, 52128, 52129, 52130, 52131, null, null, null, null, null, null, 52132, 52133, 52134, 52135, 52136, 52137, 52138, 52139, 52140, 52141, 52142, 52143, 52144, 52145, 52146, 52147, 52148, 52149, 52150, 52151, 52153, 52154, 52155, 52156, 52157, 52158, 52159, 52160, 52161, 52162, 52163, 52164, 198, 208, 170, 294, null, 306, null, 319, 321, 216, 338, 186, 222, 358, 330, null, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 189, 8531, 8532, 188, 190, 8539, 8540, 8541, 8542, 52165, 52166, 52167, 52168, 52169, 52170, 52171, 52172, 52173, 52174, 52175, 52176, 52177, 52178, 52179, 52181, 52182, 52183, 52184, 52185, 52186, 52187, 52188, 52189, 52190, 52191, null, null, null, null, null, null, 52192, 52193, 52194, 52195, 52197, 52198, 52200, 52202, 52203, 52204, 52205, 52206, 52207, 52208, 52209, 52210, 52211, 52212, 52213, 52214, 52215, 52216, 52217, 52218, 52219, 52220, null, null, null, null, null, null, 52221, 52222, 52223, 52224, 52225, 52226, 52227, 52228, 52229, 52230, 52231, 52232, 52233, 52234, 52235, 52238, 52239, 52241, 52242, 52243, 52245, 52246, 52247, 52248, 52249, 52250, 52251, 52254, 52255, 52256, 52259, 52260, 230, 273, 240, 295, 305, 307, 312, 320, 322, 248, 339, 223, 254, 359, 331, 329, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 185, 178, 179, 8308, 8319, 8321, 8322, 8323, 8324, 52261, 52262, 52266, 52267, 52269, 52271, 52273, 52274, 52275, 52276, 52277, 52278, 52279, 52282, 52287, 52288, 52289, 52290, 52291, 52294, 52295, 52297, 52298, 52299, 52301, 52302, null, null, null, null, null, null, 52303, 52304, 52305, 52306, 52307, 52310, 52314, 52315, 52316, 52317, 52318, 52319, 52321, 52322, 52323, 52325, 52327, 52329, 52330, 52331, 52332, 52333, 52334, 52335, 52337, 52338, null, null, null, null, null, null, 52339, 52340, 52342, 52343, 52344, 52345, 52346, 52347, 52348, 52349, 52350, 52351, 52352, 52353, 52354, 52355, 52356, 52357, 52358, 52359, 52360, 52361, 52362, 52363, 52364, 52365, 52366, 52367, 52368, 52369, 52370, 52371, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 52372, 52373, 52374, 52375, 52378, 52379, 52381, 52382, 52383, 52385, 52386, 52387, 52388, 52389, 52390, 52391, 52394, 52398, 52399, 52400, 52401, 52402, 52403, 52406, 52407, 52409, null, null, null, null, null, null, 52410, 52411, 52413, 52414, 52415, 52416, 52417, 52418, 52419, 52422, 52424, 52426, 52427, 52428, 52429, 52430, 52431, 52433, 52434, 52435, 52437, 52438, 52439, 52440, 52441, 52442, null, null, null, null, null, null, 52443, 52444, 52445, 52446, 52447, 52448, 52449, 52450, 52451, 52453, 52454, 52455, 52456, 52457, 52458, 52459, 52461, 52462, 52463, 52465, 52466, 52467, 52468, 52469, 52470, 52471, 52472, 52473, 52474, 52475, 52476, 52477, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 52478, 52479, 52480, 52482, 52483, 52484, 52485, 52486, 52487, 52490, 52491, 52493, 52494, 52495, 52497, 52498, 52499, 52500, 52501, 52502, 52503, 52506, 52508, 52510, 52511, 52512, null, null, null, null, null, null, 52513, 52514, 52515, 52517, 52518, 52519, 52521, 52522, 52523, 52525, 52526, 52527, 52528, 52529, 52530, 52531, 52532, 52533, 52534, 52535, 52536, 52538, 52539, 52540, 52541, 52542, null, null, null, null, null, null, 52543, 52544, 52545, 52546, 52547, 52548, 52549, 52550, 52551, 52552, 52553, 52554, 52555, 52556, 52557, 52558, 52559, 52560, 52561, 52562, 52563, 52564, 52565, 52566, 52567, 52568, 52569, 52570, 52571, 52573, 52574, 52575, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 52577, 52578, 52579, 52581, 52582, 52583, 52584, 52585, 52586, 52587, 52590, 52592, 52594, 52595, 52596, 52597, 52598, 52599, 52601, 52602, 52603, 52604, 52605, 52606, 52607, 52608, null, null, null, null, null, null, 52609, 52610, 52611, 52612, 52613, 52614, 52615, 52617, 52618, 52619, 52620, 52621, 52622, 52623, 52624, 52625, 52626, 52627, 52630, 52631, 52633, 52634, 52635, 52637, 52638, 52639, null, null, null, null, null, null, 52640, 52641, 52642, 52643, 52646, 52648, 52650, 52651, 52652, 52653, 52654, 52655, 52657, 52658, 52659, 52660, 52661, 52662, 52663, 52664, 52665, 52666, 52667, 52668, 52669, 52670, 52671, 52672, 52673, 52674, 52675, 52677, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52678, 52679, 52680, 52681, 52682, 52683, 52685, 52686, 52687, 52689, 52690, 52691, 52692, 52693, 52694, 52695, 52696, 52697, 52698, 52699, 52700, 52701, 52702, 52703, 52704, 52705, null, null, null, null, null, null, 52706, 52707, 52708, 52709, 52710, 52711, 52713, 52714, 52715, 52717, 52718, 52719, 52721, 52722, 52723, 52724, 52725, 52726, 52727, 52730, 52732, 52734, 52735, 52736, 52737, 52738, null, null, null, null, null, null, 52739, 52741, 52742, 52743, 52745, 52746, 52747, 52749, 52750, 52751, 52752, 52753, 52754, 52755, 52757, 52758, 52759, 52760, 52762, 52763, 52764, 52765, 52766, 52767, 52770, 52771, 52773, 52774, 52775, 52777, 52778, 52779, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52780, 52781, 52782, 52783, 52786, 52788, 52790, 52791, 52792, 52793, 52794, 52795, 52796, 52797, 52798, 52799, 52800, 52801, 52802, 52803, 52804, 52805, 52806, 52807, 52808, 52809, null, null, null, null, null, null, 52810, 52811, 52812, 52813, 52814, 52815, 52816, 52817, 52818, 52819, 52820, 52821, 52822, 52823, 52826, 52827, 52829, 52830, 52834, 52835, 52836, 52837, 52838, 52839, 52842, 52844, null, null, null, null, null, null, 52846, 52847, 52848, 52849, 52850, 52851, 52854, 52855, 52857, 52858, 52859, 52861, 52862, 52863, 52864, 52865, 52866, 52867, 52870, 52872, 52874, 52875, 52876, 52877, 52878, 52879, 52882, 52883, 52885, 52886, 52887, 52889, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52890, 52891, 52892, 52893, 52894, 52895, 52898, 52902, 52903, 52904, 52905, 52906, 52907, 52910, 52911, 52912, 52913, 52914, 52915, 52916, 52917, 52918, 52919, 52920, 52921, 52922, null, null, null, null, null, null, 52923, 52924, 52925, 52926, 52927, 52928, 52930, 52931, 52932, 52933, 52934, 52935, 52936, 52937, 52938, 52939, 52940, 52941, 52942, 52943, 52944, 52945, 52946, 52947, 52948, 52949, null, null, null, null, null, null, 52950, 52951, 52952, 52953, 52954, 52955, 52956, 52957, 52958, 52959, 52960, 52961, 52962, 52963, 52966, 52967, 52969, 52970, 52973, 52974, 52975, 52976, 52977, 52978, 52979, 52982, 52986, 52987, 52988, 52989, 52990, 52991, 44032, 44033, 44036, 44039, 44040, 44041, 44042, 44048, 44049, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44064, 44068, 44076, 44077, 44079, 44080, 44081, 44088, 44089, 44092, 44096, 44107, 44109, 44116, 44120, 44124, 44144, 44145, 44148, 44151, 44152, 44154, 44160, 44161, 44163, 44164, 44165, 44166, 44169, 44170, 44171, 44172, 44176, 44180, 44188, 44189, 44191, 44192, 44193, 44200, 44201, 44202, 44204, 44207, 44208, 44216, 44217, 44219, 44220, 44221, 44225, 44228, 44232, 44236, 44245, 44247, 44256, 44257, 44260, 44263, 44264, 44266, 44268, 44271, 44272, 44273, 44275, 44277, 44278, 44284, 44285, 44288, 44292, 44294, 52994, 52995, 52997, 52998, 52999, 53001, 53002, 53003, 53004, 53005, 53006, 53007, 53010, 53012, 53014, 53015, 53016, 53017, 53018, 53019, 53021, 53022, 53023, 53025, 53026, 53027, null, null, null, null, null, null, 53029, 53030, 53031, 53032, 53033, 53034, 53035, 53038, 53042, 53043, 53044, 53045, 53046, 53047, 53049, 53050, 53051, 53052, 53053, 53054, 53055, 53056, 53057, 53058, 53059, 53060, null, null, null, null, null, null, 53061, 53062, 53063, 53064, 53065, 53066, 53067, 53068, 53069, 53070, 53071, 53072, 53073, 53074, 53075, 53078, 53079, 53081, 53082, 53083, 53085, 53086, 53087, 53088, 53089, 53090, 53091, 53094, 53096, 53098, 53099, 53100, 44300, 44301, 44303, 44305, 44312, 44316, 44320, 44329, 44332, 44333, 44340, 44341, 44344, 44348, 44356, 44357, 44359, 44361, 44368, 44372, 44376, 44385, 44387, 44396, 44397, 44400, 44403, 44404, 44405, 44406, 44411, 44412, 44413, 44415, 44417, 44418, 44424, 44425, 44428, 44432, 44444, 44445, 44452, 44471, 44480, 44481, 44484, 44488, 44496, 44497, 44499, 44508, 44512, 44516, 44536, 44537, 44540, 44543, 44544, 44545, 44552, 44553, 44555, 44557, 44564, 44592, 44593, 44596, 44599, 44600, 44602, 44608, 44609, 44611, 44613, 44614, 44618, 44620, 44621, 44622, 44624, 44628, 44630, 44636, 44637, 44639, 44640, 44641, 44645, 44648, 44649, 44652, 44656, 44664, 53101, 53102, 53103, 53106, 53107, 53109, 53110, 53111, 53113, 53114, 53115, 53116, 53117, 53118, 53119, 53121, 53122, 53123, 53124, 53126, 53127, 53128, 53129, 53130, 53131, 53133, null, null, null, null, null, null, 53134, 53135, 53136, 53137, 53138, 53139, 53140, 53141, 53142, 53143, 53144, 53145, 53146, 53147, 53148, 53149, 53150, 53151, 53152, 53154, 53155, 53156, 53157, 53158, 53159, 53161, null, null, null, null, null, null, 53162, 53163, 53164, 53165, 53166, 53167, 53169, 53170, 53171, 53172, 53173, 53174, 53175, 53176, 53177, 53178, 53179, 53180, 53181, 53182, 53183, 53184, 53185, 53186, 53187, 53189, 53190, 53191, 53192, 53193, 53194, 53195, 44665, 44667, 44668, 44669, 44676, 44677, 44684, 44732, 44733, 44734, 44736, 44740, 44748, 44749, 44751, 44752, 44753, 44760, 44761, 44764, 44776, 44779, 44781, 44788, 44792, 44796, 44807, 44808, 44813, 44816, 44844, 44845, 44848, 44850, 44852, 44860, 44861, 44863, 44865, 44866, 44867, 44872, 44873, 44880, 44892, 44893, 44900, 44901, 44921, 44928, 44932, 44936, 44944, 44945, 44949, 44956, 44984, 44985, 44988, 44992, 44999, 45e3, 45001, 45003, 45005, 45006, 45012, 45020, 45032, 45033, 45040, 45041, 45044, 45048, 45056, 45057, 45060, 45068, 45072, 45076, 45084, 45085, 45096, 45124, 45125, 45128, 45130, 45132, 45134, 45139, 45140, 45141, 45143, 45145, 53196, 53197, 53198, 53199, 53200, 53201, 53202, 53203, 53204, 53205, 53206, 53207, 53208, 53209, 53210, 53211, 53212, 53213, 53214, 53215, 53218, 53219, 53221, 53222, 53223, 53225, null, null, null, null, null, null, 53226, 53227, 53228, 53229, 53230, 53231, 53234, 53236, 53238, 53239, 53240, 53241, 53242, 53243, 53245, 53246, 53247, 53249, 53250, 53251, 53253, 53254, 53255, 53256, 53257, 53258, null, null, null, null, null, null, 53259, 53260, 53261, 53262, 53263, 53264, 53266, 53267, 53268, 53269, 53270, 53271, 53273, 53274, 53275, 53276, 53277, 53278, 53279, 53280, 53281, 53282, 53283, 53284, 53285, 53286, 53287, 53288, 53289, 53290, 53291, 53292, 45149, 45180, 45181, 45184, 45188, 45196, 45197, 45199, 45201, 45208, 45209, 45210, 45212, 45215, 45216, 45217, 45218, 45224, 45225, 45227, 45228, 45229, 45230, 45231, 45233, 45235, 45236, 45237, 45240, 45244, 45252, 45253, 45255, 45256, 45257, 45264, 45265, 45268, 45272, 45280, 45285, 45320, 45321, 45323, 45324, 45328, 45330, 45331, 45336, 45337, 45339, 45340, 45341, 45347, 45348, 45349, 45352, 45356, 45364, 45365, 45367, 45368, 45369, 45376, 45377, 45380, 45384, 45392, 45393, 45396, 45397, 45400, 45404, 45408, 45432, 45433, 45436, 45440, 45442, 45448, 45449, 45451, 45453, 45458, 45459, 45460, 45464, 45468, 45480, 45516, 45520, 45524, 45532, 45533, 53294, 53295, 53296, 53297, 53298, 53299, 53302, 53303, 53305, 53306, 53307, 53309, 53310, 53311, 53312, 53313, 53314, 53315, 53318, 53320, 53322, 53323, 53324, 53325, 53326, 53327, null, null, null, null, null, null, 53329, 53330, 53331, 53333, 53334, 53335, 53337, 53338, 53339, 53340, 53341, 53342, 53343, 53345, 53346, 53347, 53348, 53349, 53350, 53351, 53352, 53353, 53354, 53355, 53358, 53359, null, null, null, null, null, null, 53361, 53362, 53363, 53365, 53366, 53367, 53368, 53369, 53370, 53371, 53374, 53375, 53376, 53378, 53379, 53380, 53381, 53382, 53383, 53384, 53385, 53386, 53387, 53388, 53389, 53390, 53391, 53392, 53393, 53394, 53395, 53396, 45535, 45544, 45545, 45548, 45552, 45561, 45563, 45565, 45572, 45573, 45576, 45579, 45580, 45588, 45589, 45591, 45593, 45600, 45620, 45628, 45656, 45660, 45664, 45672, 45673, 45684, 45685, 45692, 45700, 45701, 45705, 45712, 45713, 45716, 45720, 45721, 45722, 45728, 45729, 45731, 45733, 45734, 45738, 45740, 45744, 45748, 45768, 45769, 45772, 45776, 45778, 45784, 45785, 45787, 45789, 45794, 45796, 45797, 45798, 45800, 45803, 45804, 45805, 45806, 45807, 45811, 45812, 45813, 45815, 45816, 45817, 45818, 45819, 45823, 45824, 45825, 45828, 45832, 45840, 45841, 45843, 45844, 45845, 45852, 45908, 45909, 45910, 45912, 45915, 45916, 45918, 45919, 45924, 45925, 53397, 53398, 53399, 53400, 53401, 53402, 53403, 53404, 53405, 53406, 53407, 53408, 53409, 53410, 53411, 53414, 53415, 53417, 53418, 53419, 53421, 53422, 53423, 53424, 53425, 53426, null, null, null, null, null, null, 53427, 53430, 53432, 53434, 53435, 53436, 53437, 53438, 53439, 53442, 53443, 53445, 53446, 53447, 53450, 53451, 53452, 53453, 53454, 53455, 53458, 53462, 53463, 53464, 53465, 53466, null, null, null, null, null, null, 53467, 53470, 53471, 53473, 53474, 53475, 53477, 53478, 53479, 53480, 53481, 53482, 53483, 53486, 53490, 53491, 53492, 53493, 53494, 53495, 53497, 53498, 53499, 53500, 53501, 53502, 53503, 53504, 53505, 53506, 53507, 53508, 45927, 45929, 45931, 45934, 45936, 45937, 45940, 45944, 45952, 45953, 45955, 45956, 45957, 45964, 45968, 45972, 45984, 45985, 45992, 45996, 46020, 46021, 46024, 46027, 46028, 46030, 46032, 46036, 46037, 46039, 46041, 46043, 46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112, 46120, 46121, 46123, 46132, 46160, 46161, 46164, 46168, 46176, 46177, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248, 46252, 46261, 46263, 46265, 46272, 46276, 46280, 46288, 46293, 46300, 46301, 46304, 46307, 46308, 46310, 46316, 46317, 46319, 46321, 46328, 46356, 46357, 46360, 46363, 46364, 46372, 46373, 46375, 46376, 46377, 46378, 46384, 46385, 46388, 46392, 53509, 53510, 53511, 53512, 53513, 53514, 53515, 53516, 53518, 53519, 53520, 53521, 53522, 53523, 53524, 53525, 53526, 53527, 53528, 53529, 53530, 53531, 53532, 53533, 53534, 53535, null, null, null, null, null, null, 53536, 53537, 53538, 53539, 53540, 53541, 53542, 53543, 53544, 53545, 53546, 53547, 53548, 53549, 53550, 53551, 53554, 53555, 53557, 53558, 53559, 53561, 53563, 53564, 53565, 53566, null, null, null, null, null, null, 53567, 53570, 53574, 53575, 53576, 53577, 53578, 53579, 53582, 53583, 53585, 53586, 53587, 53589, 53590, 53591, 53592, 53593, 53594, 53595, 53598, 53600, 53602, 53603, 53604, 53605, 53606, 53607, 53609, 53610, 53611, 53613, 46400, 46401, 46403, 46404, 46405, 46411, 46412, 46413, 46416, 46420, 46428, 46429, 46431, 46432, 46433, 46496, 46497, 46500, 46504, 46506, 46507, 46512, 46513, 46515, 46516, 46517, 46523, 46524, 46525, 46528, 46532, 46540, 46541, 46543, 46544, 46545, 46552, 46572, 46608, 46609, 46612, 46616, 46629, 46636, 46644, 46664, 46692, 46696, 46748, 46749, 46752, 46756, 46763, 46764, 46769, 46804, 46832, 46836, 46840, 46848, 46849, 46853, 46888, 46889, 46892, 46895, 46896, 46904, 46905, 46907, 46916, 46920, 46924, 46932, 46933, 46944, 46948, 46952, 46960, 46961, 46963, 46965, 46972, 46973, 46976, 46980, 46988, 46989, 46991, 46992, 46993, 46994, 46998, 46999, 53614, 53615, 53616, 53617, 53618, 53619, 53620, 53621, 53622, 53623, 53624, 53625, 53626, 53627, 53629, 53630, 53631, 53632, 53633, 53634, 53635, 53637, 53638, 53639, 53641, 53642, null, null, null, null, null, null, 53643, 53644, 53645, 53646, 53647, 53648, 53649, 53650, 53651, 53652, 53653, 53654, 53655, 53656, 53657, 53658, 53659, 53660, 53661, 53662, 53663, 53666, 53667, 53669, 53670, 53671, null, null, null, null, null, null, 53673, 53674, 53675, 53676, 53677, 53678, 53679, 53682, 53684, 53686, 53687, 53688, 53689, 53691, 53693, 53694, 53695, 53697, 53698, 53699, 53700, 53701, 53702, 53703, 53704, 53705, 53706, 53707, 53708, 53709, 53710, 53711, 47e3, 47001, 47004, 47008, 47016, 47017, 47019, 47020, 47021, 47028, 47029, 47032, 47047, 47049, 47084, 47085, 47088, 47092, 47100, 47101, 47103, 47104, 47105, 47111, 47112, 47113, 47116, 47120, 47128, 47129, 47131, 47133, 47140, 47141, 47144, 47148, 47156, 47157, 47159, 47160, 47161, 47168, 47172, 47185, 47187, 47196, 47197, 47200, 47204, 47212, 47213, 47215, 47217, 47224, 47228, 47245, 47272, 47280, 47284, 47288, 47296, 47297, 47299, 47301, 47308, 47312, 47316, 47325, 47327, 47329, 47336, 47337, 47340, 47344, 47352, 47353, 47355, 47357, 47364, 47384, 47392, 47420, 47421, 47424, 47428, 47436, 47439, 47441, 47448, 47449, 47452, 47456, 47464, 47465, 53712, 53713, 53714, 53715, 53716, 53717, 53718, 53719, 53721, 53722, 53723, 53724, 53725, 53726, 53727, 53728, 53729, 53730, 53731, 53732, 53733, 53734, 53735, 53736, 53737, 53738, null, null, null, null, null, null, 53739, 53740, 53741, 53742, 53743, 53744, 53745, 53746, 53747, 53749, 53750, 53751, 53753, 53754, 53755, 53756, 53757, 53758, 53759, 53760, 53761, 53762, 53763, 53764, 53765, 53766, null, null, null, null, null, null, 53768, 53770, 53771, 53772, 53773, 53774, 53775, 53777, 53778, 53779, 53780, 53781, 53782, 53783, 53784, 53785, 53786, 53787, 53788, 53789, 53790, 53791, 53792, 53793, 53794, 53795, 53796, 53797, 53798, 53799, 53800, 53801, 47467, 47469, 47476, 47477, 47480, 47484, 47492, 47493, 47495, 47497, 47498, 47501, 47502, 47532, 47533, 47536, 47540, 47548, 47549, 47551, 47553, 47560, 47561, 47564, 47566, 47567, 47568, 47569, 47570, 47576, 47577, 47579, 47581, 47582, 47585, 47587, 47588, 47589, 47592, 47596, 47604, 47605, 47607, 47608, 47609, 47610, 47616, 47617, 47624, 47637, 47672, 47673, 47676, 47680, 47682, 47688, 47689, 47691, 47693, 47694, 47699, 47700, 47701, 47704, 47708, 47716, 47717, 47719, 47720, 47721, 47728, 47729, 47732, 47736, 47747, 47748, 47749, 47751, 47756, 47784, 47785, 47787, 47788, 47792, 47794, 47800, 47801, 47803, 47805, 47812, 47816, 47832, 47833, 47868, 53802, 53803, 53806, 53807, 53809, 53810, 53811, 53813, 53814, 53815, 53816, 53817, 53818, 53819, 53822, 53824, 53826, 53827, 53828, 53829, 53830, 53831, 53833, 53834, 53835, 53836, null, null, null, null, null, null, 53837, 53838, 53839, 53840, 53841, 53842, 53843, 53844, 53845, 53846, 53847, 53848, 53849, 53850, 53851, 53853, 53854, 53855, 53856, 53857, 53858, 53859, 53861, 53862, 53863, 53864, null, null, null, null, null, null, 53865, 53866, 53867, 53868, 53869, 53870, 53871, 53872, 53873, 53874, 53875, 53876, 53877, 53878, 53879, 53880, 53881, 53882, 53883, 53884, 53885, 53886, 53887, 53890, 53891, 53893, 53894, 53895, 53897, 53898, 53899, 53900, 47872, 47876, 47885, 47887, 47889, 47896, 47900, 47904, 47913, 47915, 47924, 47925, 47926, 47928, 47931, 47932, 47933, 47934, 47940, 47941, 47943, 47945, 47949, 47951, 47952, 47956, 47960, 47969, 47971, 47980, 48008, 48012, 48016, 48036, 48040, 48044, 48052, 48055, 48064, 48068, 48072, 48080, 48083, 48120, 48121, 48124, 48127, 48128, 48130, 48136, 48137, 48139, 48140, 48141, 48143, 48145, 48148, 48149, 48150, 48151, 48152, 48155, 48156, 48157, 48158, 48159, 48164, 48165, 48167, 48169, 48173, 48176, 48177, 48180, 48184, 48192, 48193, 48195, 48196, 48197, 48201, 48204, 48205, 48208, 48221, 48260, 48261, 48264, 48267, 48268, 48270, 48276, 48277, 48279, 53901, 53902, 53903, 53906, 53907, 53908, 53910, 53911, 53912, 53913, 53914, 53915, 53917, 53918, 53919, 53921, 53922, 53923, 53925, 53926, 53927, 53928, 53929, 53930, 53931, 53933, null, null, null, null, null, null, 53934, 53935, 53936, 53938, 53939, 53940, 53941, 53942, 53943, 53946, 53947, 53949, 53950, 53953, 53955, 53956, 53957, 53958, 53959, 53962, 53964, 53965, 53966, 53967, 53968, 53969, null, null, null, null, null, null, 53970, 53971, 53973, 53974, 53975, 53977, 53978, 53979, 53981, 53982, 53983, 53984, 53985, 53986, 53987, 53990, 53991, 53992, 53993, 53994, 53995, 53996, 53997, 53998, 53999, 54002, 54003, 54005, 54006, 54007, 54009, 54010, 48281, 48282, 48288, 48289, 48292, 48295, 48296, 48304, 48305, 48307, 48308, 48309, 48316, 48317, 48320, 48324, 48333, 48335, 48336, 48337, 48341, 48344, 48348, 48372, 48373, 48374, 48376, 48380, 48388, 48389, 48391, 48393, 48400, 48404, 48420, 48428, 48448, 48456, 48457, 48460, 48464, 48472, 48473, 48484, 48488, 48512, 48513, 48516, 48519, 48520, 48521, 48522, 48528, 48529, 48531, 48533, 48537, 48538, 48540, 48548, 48560, 48568, 48596, 48597, 48600, 48604, 48617, 48624, 48628, 48632, 48640, 48643, 48645, 48652, 48653, 48656, 48660, 48668, 48669, 48671, 48708, 48709, 48712, 48716, 48718, 48724, 48725, 48727, 48729, 48730, 48731, 48736, 48737, 48740, 54011, 54012, 54013, 54014, 54015, 54018, 54020, 54022, 54023, 54024, 54025, 54026, 54027, 54031, 54033, 54034, 54035, 54037, 54039, 54040, 54041, 54042, 54043, 54046, 54050, 54051, null, null, null, null, null, null, 54052, 54054, 54055, 54058, 54059, 54061, 54062, 54063, 54065, 54066, 54067, 54068, 54069, 54070, 54071, 54074, 54078, 54079, 54080, 54081, 54082, 54083, 54086, 54087, 54088, 54089, null, null, null, null, null, null, 54090, 54091, 54092, 54093, 54094, 54095, 54096, 54097, 54098, 54099, 54100, 54101, 54102, 54103, 54104, 54105, 54106, 54107, 54108, 54109, 54110, 54111, 54112, 54113, 54114, 54115, 54116, 54117, 54118, 54119, 54120, 54121, 48744, 48746, 48752, 48753, 48755, 48756, 48757, 48763, 48764, 48765, 48768, 48772, 48780, 48781, 48783, 48784, 48785, 48792, 48793, 48808, 48848, 48849, 48852, 48855, 48856, 48864, 48867, 48868, 48869, 48876, 48897, 48904, 48905, 48920, 48921, 48923, 48924, 48925, 48960, 48961, 48964, 48968, 48976, 48977, 48981, 49044, 49072, 49093, 49100, 49101, 49104, 49108, 49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248, 49256, 49257, 49296, 49297, 49300, 49304, 49312, 49313, 49315, 49317, 49324, 49325, 49327, 49328, 49331, 49332, 49333, 49334, 49340, 49341, 49343, 49344, 49345, 49349, 49352, 49353, 49356, 49360, 49368, 49369, 49371, 49372, 49373, 49380, 54122, 54123, 54124, 54125, 54126, 54127, 54128, 54129, 54130, 54131, 54132, 54133, 54134, 54135, 54136, 54137, 54138, 54139, 54142, 54143, 54145, 54146, 54147, 54149, 54150, 54151, null, null, null, null, null, null, 54152, 54153, 54154, 54155, 54158, 54162, 54163, 54164, 54165, 54166, 54167, 54170, 54171, 54173, 54174, 54175, 54177, 54178, 54179, 54180, 54181, 54182, 54183, 54186, 54188, 54190, null, null, null, null, null, null, 54191, 54192, 54193, 54194, 54195, 54197, 54198, 54199, 54201, 54202, 54203, 54205, 54206, 54207, 54208, 54209, 54210, 54211, 54214, 54215, 54218, 54219, 54220, 54221, 54222, 54223, 54225, 54226, 54227, 54228, 54229, 54230, 49381, 49384, 49388, 49396, 49397, 49399, 49401, 49408, 49412, 49416, 49424, 49429, 49436, 49437, 49438, 49439, 49440, 49443, 49444, 49446, 49447, 49452, 49453, 49455, 49456, 49457, 49462, 49464, 49465, 49468, 49472, 49480, 49481, 49483, 49484, 49485, 49492, 49493, 49496, 49500, 49508, 49509, 49511, 49512, 49513, 49520, 49524, 49528, 49541, 49548, 49549, 49550, 49552, 49556, 49558, 49564, 49565, 49567, 49569, 49573, 49576, 49577, 49580, 49584, 49597, 49604, 49608, 49612, 49620, 49623, 49624, 49632, 49636, 49640, 49648, 49649, 49651, 49660, 49661, 49664, 49668, 49676, 49677, 49679, 49681, 49688, 49689, 49692, 49695, 49696, 49704, 49705, 49707, 49709, 54231, 54233, 54234, 54235, 54236, 54237, 54238, 54239, 54240, 54242, 54244, 54245, 54246, 54247, 54248, 54249, 54250, 54251, 54254, 54255, 54257, 54258, 54259, 54261, 54262, 54263, null, null, null, null, null, null, 54264, 54265, 54266, 54267, 54270, 54272, 54274, 54275, 54276, 54277, 54278, 54279, 54281, 54282, 54283, 54284, 54285, 54286, 54287, 54288, 54289, 54290, 54291, 54292, 54293, 54294, null, null, null, null, null, null, 54295, 54296, 54297, 54298, 54299, 54300, 54302, 54303, 54304, 54305, 54306, 54307, 54308, 54309, 54310, 54311, 54312, 54313, 54314, 54315, 54316, 54317, 54318, 54319, 54320, 54321, 54322, 54323, 54324, 54325, 54326, 54327, 49711, 49713, 49714, 49716, 49736, 49744, 49745, 49748, 49752, 49760, 49765, 49772, 49773, 49776, 49780, 49788, 49789, 49791, 49793, 49800, 49801, 49808, 49816, 49819, 49821, 49828, 49829, 49832, 49836, 49837, 49844, 49845, 49847, 49849, 49884, 49885, 49888, 49891, 49892, 49899, 49900, 49901, 49903, 49905, 49910, 49912, 49913, 49915, 49916, 49920, 49928, 49929, 49932, 49933, 49939, 49940, 49941, 49944, 49948, 49956, 49957, 49960, 49961, 49989, 50024, 50025, 50028, 50032, 50034, 50040, 50041, 50044, 50045, 50052, 50056, 50060, 50112, 50136, 50137, 50140, 50143, 50144, 50146, 50152, 50153, 50157, 50164, 50165, 50168, 50184, 50192, 50212, 50220, 50224, 54328, 54329, 54330, 54331, 54332, 54333, 54334, 54335, 54337, 54338, 54339, 54341, 54342, 54343, 54344, 54345, 54346, 54347, 54348, 54349, 54350, 54351, 54352, 54353, 54354, 54355, null, null, null, null, null, null, 54356, 54357, 54358, 54359, 54360, 54361, 54362, 54363, 54365, 54366, 54367, 54369, 54370, 54371, 54373, 54374, 54375, 54376, 54377, 54378, 54379, 54380, 54382, 54384, 54385, 54386, null, null, null, null, null, null, 54387, 54388, 54389, 54390, 54391, 54394, 54395, 54397, 54398, 54401, 54403, 54404, 54405, 54406, 54407, 54410, 54412, 54414, 54415, 54416, 54417, 54418, 54419, 54421, 54422, 54423, 54424, 54425, 54426, 54427, 54428, 54429, 50228, 50236, 50237, 50248, 50276, 50277, 50280, 50284, 50292, 50293, 50297, 50304, 50324, 50332, 50360, 50364, 50409, 50416, 50417, 50420, 50424, 50426, 50431, 50432, 50433, 50444, 50448, 50452, 50460, 50472, 50473, 50476, 50480, 50488, 50489, 50491, 50493, 50500, 50501, 50504, 50505, 50506, 50508, 50509, 50510, 50515, 50516, 50517, 50519, 50520, 50521, 50525, 50526, 50528, 50529, 50532, 50536, 50544, 50545, 50547, 50548, 50549, 50556, 50557, 50560, 50564, 50567, 50572, 50573, 50575, 50577, 50581, 50583, 50584, 50588, 50592, 50601, 50612, 50613, 50616, 50617, 50619, 50620, 50621, 50622, 50628, 50629, 50630, 50631, 50632, 50633, 50634, 50636, 50638, 54430, 54431, 54432, 54433, 54434, 54435, 54436, 54437, 54438, 54439, 54440, 54442, 54443, 54444, 54445, 54446, 54447, 54448, 54449, 54450, 54451, 54452, 54453, 54454, 54455, 54456, null, null, null, null, null, null, 54457, 54458, 54459, 54460, 54461, 54462, 54463, 54464, 54465, 54466, 54467, 54468, 54469, 54470, 54471, 54472, 54473, 54474, 54475, 54477, 54478, 54479, 54481, 54482, 54483, 54485, null, null, null, null, null, null, 54486, 54487, 54488, 54489, 54490, 54491, 54493, 54494, 54496, 54497, 54498, 54499, 54500, 54501, 54502, 54503, 54505, 54506, 54507, 54509, 54510, 54511, 54513, 54514, 54515, 54516, 54517, 54518, 54519, 54521, 54522, 54524, 50640, 50641, 50644, 50648, 50656, 50657, 50659, 50661, 50668, 50669, 50670, 50672, 50676, 50678, 50679, 50684, 50685, 50686, 50687, 50688, 50689, 50693, 50694, 50695, 50696, 50700, 50704, 50712, 50713, 50715, 50716, 50724, 50725, 50728, 50732, 50733, 50734, 50736, 50739, 50740, 50741, 50743, 50745, 50747, 50752, 50753, 50756, 50760, 50768, 50769, 50771, 50772, 50773, 50780, 50781, 50784, 50796, 50799, 50801, 50808, 50809, 50812, 50816, 50824, 50825, 50827, 50829, 50836, 50837, 50840, 50844, 50852, 50853, 50855, 50857, 50864, 50865, 50868, 50872, 50873, 50874, 50880, 50881, 50883, 50885, 50892, 50893, 50896, 50900, 50908, 50909, 50912, 50913, 50920, 54526, 54527, 54528, 54529, 54530, 54531, 54533, 54534, 54535, 54537, 54538, 54539, 54541, 54542, 54543, 54544, 54545, 54546, 54547, 54550, 54552, 54553, 54554, 54555, 54556, 54557, null, null, null, null, null, null, 54558, 54559, 54560, 54561, 54562, 54563, 54564, 54565, 54566, 54567, 54568, 54569, 54570, 54571, 54572, 54573, 54574, 54575, 54576, 54577, 54578, 54579, 54580, 54581, 54582, 54583, null, null, null, null, null, null, 54584, 54585, 54586, 54587, 54590, 54591, 54593, 54594, 54595, 54597, 54598, 54599, 54600, 54601, 54602, 54603, 54606, 54608, 54610, 54611, 54612, 54613, 54614, 54615, 54618, 54619, 54621, 54622, 54623, 54625, 54626, 54627, 50921, 50924, 50928, 50936, 50937, 50941, 50948, 50949, 50952, 50956, 50964, 50965, 50967, 50969, 50976, 50977, 50980, 50984, 50992, 50993, 50995, 50997, 50999, 51004, 51005, 51008, 51012, 51018, 51020, 51021, 51023, 51025, 51026, 51027, 51028, 51029, 51030, 51031, 51032, 51036, 51040, 51048, 51051, 51060, 51061, 51064, 51068, 51069, 51070, 51075, 51076, 51077, 51079, 51080, 51081, 51082, 51086, 51088, 51089, 51092, 51094, 51095, 51096, 51098, 51104, 51105, 51107, 51108, 51109, 51110, 51116, 51117, 51120, 51124, 51132, 51133, 51135, 51136, 51137, 51144, 51145, 51148, 51150, 51152, 51160, 51165, 51172, 51176, 51180, 51200, 51201, 51204, 51208, 51210, 54628, 54630, 54631, 54634, 54636, 54638, 54639, 54640, 54641, 54642, 54643, 54646, 54647, 54649, 54650, 54651, 54653, 54654, 54655, 54656, 54657, 54658, 54659, 54662, 54666, 54667, null, null, null, null, null, null, 54668, 54669, 54670, 54671, 54673, 54674, 54675, 54676, 54677, 54678, 54679, 54680, 54681, 54682, 54683, 54684, 54685, 54686, 54687, 54688, 54689, 54690, 54691, 54692, 54694, 54695, null, null, null, null, null, null, 54696, 54697, 54698, 54699, 54700, 54701, 54702, 54703, 54704, 54705, 54706, 54707, 54708, 54709, 54710, 54711, 54712, 54713, 54714, 54715, 54716, 54717, 54718, 54719, 54720, 54721, 54722, 54723, 54724, 54725, 54726, 54727, 51216, 51217, 51219, 51221, 51222, 51228, 51229, 51232, 51236, 51244, 51245, 51247, 51249, 51256, 51260, 51264, 51272, 51273, 51276, 51277, 51284, 51312, 51313, 51316, 51320, 51322, 51328, 51329, 51331, 51333, 51334, 51335, 51339, 51340, 51341, 51348, 51357, 51359, 51361, 51368, 51388, 51389, 51396, 51400, 51404, 51412, 51413, 51415, 51417, 51424, 51425, 51428, 51445, 51452, 51453, 51456, 51460, 51461, 51462, 51468, 51469, 51471, 51473, 51480, 51500, 51508, 51536, 51537, 51540, 51544, 51552, 51553, 51555, 51564, 51568, 51572, 51580, 51592, 51593, 51596, 51600, 51608, 51609, 51611, 51613, 51648, 51649, 51652, 51655, 51656, 51658, 51664, 51665, 51667, 54730, 54731, 54733, 54734, 54735, 54737, 54739, 54740, 54741, 54742, 54743, 54746, 54748, 54750, 54751, 54752, 54753, 54754, 54755, 54758, 54759, 54761, 54762, 54763, 54765, 54766, null, null, null, null, null, null, 54767, 54768, 54769, 54770, 54771, 54774, 54776, 54778, 54779, 54780, 54781, 54782, 54783, 54786, 54787, 54789, 54790, 54791, 54793, 54794, 54795, 54796, 54797, 54798, 54799, 54802, null, null, null, null, null, null, 54806, 54807, 54808, 54809, 54810, 54811, 54813, 54814, 54815, 54817, 54818, 54819, 54821, 54822, 54823, 54824, 54825, 54826, 54827, 54828, 54830, 54831, 54832, 54833, 54834, 54835, 54836, 54837, 54838, 54839, 54842, 54843, 51669, 51670, 51673, 51674, 51676, 51677, 51680, 51682, 51684, 51687, 51692, 51693, 51695, 51696, 51697, 51704, 51705, 51708, 51712, 51720, 51721, 51723, 51724, 51725, 51732, 51736, 51753, 51788, 51789, 51792, 51796, 51804, 51805, 51807, 51808, 51809, 51816, 51837, 51844, 51864, 51900, 51901, 51904, 51908, 51916, 51917, 51919, 51921, 51923, 51928, 51929, 51936, 51948, 51956, 51976, 51984, 51988, 51992, 52e3, 52001, 52033, 52040, 52041, 52044, 52048, 52056, 52057, 52061, 52068, 52088, 52089, 52124, 52152, 52180, 52196, 52199, 52201, 52236, 52237, 52240, 52244, 52252, 52253, 52257, 52258, 52263, 52264, 52265, 52268, 52270, 52272, 52280, 52281, 52283, 54845, 54846, 54847, 54849, 54850, 54851, 54852, 54854, 54855, 54858, 54860, 54862, 54863, 54864, 54866, 54867, 54870, 54871, 54873, 54874, 54875, 54877, 54878, 54879, 54880, 54881, null, null, null, null, null, null, 54882, 54883, 54884, 54885, 54886, 54888, 54890, 54891, 54892, 54893, 54894, 54895, 54898, 54899, 54901, 54902, 54903, 54904, 54905, 54906, 54907, 54908, 54909, 54910, 54911, 54912, null, null, null, null, null, null, 54913, 54914, 54916, 54918, 54919, 54920, 54921, 54922, 54923, 54926, 54927, 54929, 54930, 54931, 54933, 54934, 54935, 54936, 54937, 54938, 54939, 54940, 54942, 54944, 54946, 54947, 54948, 54949, 54950, 54951, 54953, 54954, 52284, 52285, 52286, 52292, 52293, 52296, 52300, 52308, 52309, 52311, 52312, 52313, 52320, 52324, 52326, 52328, 52336, 52341, 52376, 52377, 52380, 52384, 52392, 52393, 52395, 52396, 52397, 52404, 52405, 52408, 52412, 52420, 52421, 52423, 52425, 52432, 52436, 52452, 52460, 52464, 52481, 52488, 52489, 52492, 52496, 52504, 52505, 52507, 52509, 52516, 52520, 52524, 52537, 52572, 52576, 52580, 52588, 52589, 52591, 52593, 52600, 52616, 52628, 52629, 52632, 52636, 52644, 52645, 52647, 52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, 52728, 52729, 52731, 52733, 52740, 52744, 52748, 52756, 52761, 52768, 52769, 52772, 52776, 52784, 52785, 52787, 52789, 54955, 54957, 54958, 54959, 54961, 54962, 54963, 54964, 54965, 54966, 54967, 54968, 54970, 54972, 54973, 54974, 54975, 54976, 54977, 54978, 54979, 54982, 54983, 54985, 54986, 54987, null, null, null, null, null, null, 54989, 54990, 54991, 54992, 54994, 54995, 54997, 54998, 55e3, 55002, 55003, 55004, 55005, 55006, 55007, 55009, 55010, 55011, 55013, 55014, 55015, 55017, 55018, 55019, 55020, 55021, null, null, null, null, null, null, 55022, 55023, 55025, 55026, 55027, 55028, 55030, 55031, 55032, 55033, 55034, 55035, 55038, 55039, 55041, 55042, 55043, 55045, 55046, 55047, 55048, 55049, 55050, 55051, 55052, 55053, 55054, 55055, 55056, 55058, 55059, 55060, 52824, 52825, 52828, 52831, 52832, 52833, 52840, 52841, 52843, 52845, 52852, 52853, 52856, 52860, 52868, 52869, 52871, 52873, 52880, 52881, 52884, 52888, 52896, 52897, 52899, 52900, 52901, 52908, 52909, 52929, 52964, 52965, 52968, 52971, 52972, 52980, 52981, 52983, 52984, 52985, 52992, 52993, 52996, 53e3, 53008, 53009, 53011, 53013, 53020, 53024, 53028, 53036, 53037, 53039, 53040, 53041, 53048, 53076, 53077, 53080, 53084, 53092, 53093, 53095, 53097, 53104, 53105, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168, 53188, 53216, 53217, 53220, 53224, 53232, 53233, 53235, 53237, 53244, 53248, 53252, 53265, 53272, 53293, 53300, 53301, 53304, 53308, 55061, 55062, 55063, 55066, 55067, 55069, 55070, 55071, 55073, 55074, 55075, 55076, 55077, 55078, 55079, 55082, 55084, 55086, 55087, 55088, 55089, 55090, 55091, 55094, 55095, 55097, null, null, null, null, null, null, 55098, 55099, 55101, 55102, 55103, 55104, 55105, 55106, 55107, 55109, 55110, 55112, 55114, 55115, 55116, 55117, 55118, 55119, 55122, 55123, 55125, 55130, 55131, 55132, 55133, 55134, null, null, null, null, null, null, 55135, 55138, 55140, 55142, 55143, 55144, 55146, 55147, 55149, 55150, 55151, 55153, 55154, 55155, 55157, 55158, 55159, 55160, 55161, 55162, 55163, 55166, 55167, 55168, 55170, 55171, 55172, 55173, 55174, 55175, 55178, 55179, 53316, 53317, 53319, 53321, 53328, 53332, 53336, 53344, 53356, 53357, 53360, 53364, 53372, 53373, 53377, 53412, 53413, 53416, 53420, 53428, 53429, 53431, 53433, 53440, 53441, 53444, 53448, 53449, 53456, 53457, 53459, 53460, 53461, 53468, 53469, 53472, 53476, 53484, 53485, 53487, 53488, 53489, 53496, 53517, 53552, 53553, 53556, 53560, 53562, 53568, 53569, 53571, 53572, 53573, 53580, 53581, 53584, 53588, 53596, 53597, 53599, 53601, 53608, 53612, 53628, 53636, 53640, 53664, 53665, 53668, 53672, 53680, 53681, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752, 53767, 53769, 53776, 53804, 53805, 53808, 53812, 53820, 53821, 53823, 53825, 53832, 53852, 55181, 55182, 55183, 55185, 55186, 55187, 55188, 55189, 55190, 55191, 55194, 55196, 55198, 55199, 55200, 55201, 55202, 55203, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 53860, 53888, 53889, 53892, 53896, 53904, 53905, 53909, 53916, 53920, 53924, 53932, 53937, 53944, 53945, 53948, 53951, 53952, 53954, 53960, 53961, 53963, 53972, 53976, 53980, 53988, 53989, 54e3, 54001, 54004, 54008, 54016, 54017, 54019, 54021, 54028, 54029, 54030, 54032, 54036, 54038, 54044, 54045, 54047, 54048, 54049, 54053, 54056, 54057, 54060, 54064, 54072, 54073, 54075, 54076, 54077, 54084, 54085, 54140, 54141, 54144, 54148, 54156, 54157, 54159, 54160, 54161, 54168, 54169, 54172, 54176, 54184, 54185, 54187, 54189, 54196, 54200, 54204, 54212, 54213, 54216, 54217, 54224, 54232, 54241, 54243, 54252, 54253, 54256, 54260, 54268, 54269, 54271, 54273, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54280, 54301, 54336, 54340, 54364, 54368, 54372, 54381, 54383, 54392, 54393, 54396, 54399, 54400, 54402, 54408, 54409, 54411, 54413, 54420, 54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520, 54523, 54525, 54532, 54536, 54540, 54548, 54549, 54551, 54588, 54589, 54592, 54596, 54604, 54605, 54607, 54609, 54616, 54617, 54620, 54624, 54629, 54632, 54633, 54635, 54637, 54644, 54645, 54648, 54652, 54660, 54661, 54663, 54664, 54665, 54672, 54693, 54728, 54729, 54732, 54736, 54738, 54744, 54745, 54747, 54749, 54756, 54757, 54760, 54764, 54772, 54773, 54775, 54777, 54784, 54785, 54788, 54792, 54800, 54801, 54803, 54804, 54805, 54812, 54816, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54820, 54829, 54840, 54841, 54844, 54848, 54853, 54856, 54857, 54859, 54861, 54865, 54868, 54869, 54872, 54876, 54887, 54889, 54896, 54897, 54900, 54915, 54917, 54924, 54925, 54928, 54932, 54941, 54943, 54945, 54952, 54956, 54960, 54969, 54971, 54980, 54981, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012, 55016, 55024, 55029, 55036, 55037, 55040, 55044, 55057, 55064, 55065, 55068, 55072, 55080, 55081, 55083, 55085, 55092, 55093, 55096, 55100, 55108, 55111, 55113, 55120, 55121, 55124, 55126, 55127, 55128, 55129, 55136, 55137, 55139, 55141, 55145, 55148, 55152, 55156, 55164, 55165, 55169, 55176, 55177, 55180, 55184, 55192, 55193, 55195, 55197, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20285, 20339, 20551, 20729, 21152, 21487, 21621, 21733, 22025, 23233, 23478, 26247, 26550, 26551, 26607, 27468, 29634, 30146, 31292, 33499, 33540, 34903, 34952, 35382, 36040, 36303, 36603, 36838, 39381, 21051, 21364, 21508, 24682, 24932, 27580, 29647, 33050, 35258, 35282, 38307, 20355, 21002, 22718, 22904, 23014, 24178, 24185, 25031, 25536, 26438, 26604, 26751, 28567, 30286, 30475, 30965, 31240, 31487, 31777, 32925, 33390, 33393, 35563, 38291, 20075, 21917, 26359, 28212, 30883, 31469, 33883, 35088, 34638, 38824, 21208, 22350, 22570, 23884, 24863, 25022, 25121, 25954, 26577, 27204, 28187, 29976, 30131, 30435, 30640, 32058, 37039, 37969, 37970, 40853, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21283, 23724, 30002, 32987, 37440, 38296, 21083, 22536, 23004, 23713, 23831, 24247, 24378, 24394, 24951, 27743, 30074, 30086, 31968, 32115, 32177, 32652, 33108, 33313, 34193, 35137, 35611, 37628, 38477, 40007, 20171, 20215, 20491, 20977, 22607, 24887, 24894, 24936, 25913, 27114, 28433, 30117, 30342, 30422, 31623, 33445, 33995, 63744, 37799, 38283, 21888, 23458, 22353, 63745, 31923, 32697, 37301, 20520, 21435, 23621, 24040, 25298, 25454, 25818, 25831, 28192, 28844, 31067, 36317, 36382, 63746, 36989, 37445, 37624, 20094, 20214, 20581, 24062, 24314, 24838, 26967, 33137, 34388, 36423, 37749, 39467, 20062, 20625, 26480, 26688, 20745, 21133, 21138, 27298, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30652, 37392, 40660, 21163, 24623, 36850, 20552, 25001, 25581, 25802, 26684, 27268, 28608, 33160, 35233, 38548, 22533, 29309, 29356, 29956, 32121, 32365, 32937, 35211, 35700, 36963, 40273, 25225, 27770, 28500, 32080, 32570, 35363, 20860, 24906, 31645, 35609, 37463, 37772, 20140, 20435, 20510, 20670, 20742, 21185, 21197, 21375, 22384, 22659, 24218, 24465, 24950, 25004, 25806, 25964, 26223, 26299, 26356, 26775, 28039, 28805, 28913, 29855, 29861, 29898, 30169, 30828, 30956, 31455, 31478, 32069, 32147, 32789, 32831, 33051, 33686, 35686, 36629, 36885, 37857, 38915, 38968, 39514, 39912, 20418, 21843, 22586, 22865, 23395, 23622, 24760, 25106, 26690, 26800, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26856, 28330, 30028, 30328, 30926, 31293, 31995, 32363, 32380, 35336, 35489, 35903, 38542, 40388, 21476, 21481, 21578, 21617, 22266, 22993, 23396, 23611, 24235, 25335, 25911, 25925, 25970, 26272, 26543, 27073, 27837, 30204, 30352, 30590, 31295, 32660, 32771, 32929, 33167, 33510, 33533, 33776, 34241, 34865, 34996, 35493, 63747, 36764, 37678, 38599, 39015, 39640, 40723, 21741, 26011, 26354, 26767, 31296, 35895, 40288, 22256, 22372, 23825, 26118, 26801, 26829, 28414, 29736, 34974, 39908, 27752, 63748, 39592, 20379, 20844, 20849, 21151, 23380, 24037, 24656, 24685, 25329, 25511, 25915, 29657, 31354, 34467, 36002, 38799, 20018, 23521, 25096, 26524, 29916, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31185, 33747, 35463, 35506, 36328, 36942, 37707, 38982, 24275, 27112, 34303, 37101, 63749, 20896, 23448, 23532, 24931, 26874, 27454, 28748, 29743, 29912, 31649, 32592, 33733, 35264, 36011, 38364, 39208, 21038, 24669, 25324, 36866, 20362, 20809, 21281, 22745, 24291, 26336, 27960, 28826, 29378, 29654, 31568, 33009, 37979, 21350, 25499, 32619, 20054, 20608, 22602, 22750, 24618, 24871, 25296, 27088, 39745, 23439, 32024, 32945, 36703, 20132, 20689, 21676, 21932, 23308, 23968, 24039, 25898, 25934, 26657, 27211, 29409, 30350, 30703, 32094, 32761, 33184, 34126, 34527, 36611, 36686, 37066, 39171, 39509, 39851, 19992, 20037, 20061, 20167, 20465, 20855, 21246, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21312, 21475, 21477, 21646, 22036, 22389, 22434, 23495, 23943, 24272, 25084, 25304, 25937, 26552, 26601, 27083, 27472, 27590, 27628, 27714, 28317, 28792, 29399, 29590, 29699, 30655, 30697, 31350, 32127, 32777, 33276, 33285, 33290, 33503, 34914, 35635, 36092, 36544, 36881, 37041, 37476, 37558, 39378, 39493, 40169, 40407, 40860, 22283, 23616, 33738, 38816, 38827, 40628, 21531, 31384, 32676, 35033, 36557, 37089, 22528, 23624, 25496, 31391, 23470, 24339, 31353, 31406, 33422, 36524, 20518, 21048, 21240, 21367, 22280, 25331, 25458, 27402, 28099, 30519, 21413, 29527, 34152, 36470, 38357, 26426, 27331, 28528, 35437, 36556, 39243, 63750, 26231, 27512, 36020, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 39740, 63751, 21483, 22317, 22862, 25542, 27131, 29674, 30789, 31418, 31429, 31998, 33909, 35215, 36211, 36917, 38312, 21243, 22343, 30023, 31584, 33740, 37406, 63752, 27224, 20811, 21067, 21127, 25119, 26840, 26997, 38553, 20677, 21156, 21220, 25027, 26020, 26681, 27135, 29822, 31563, 33465, 33771, 35250, 35641, 36817, 39241, 63753, 20170, 22935, 25810, 26129, 27278, 29748, 31105, 31165, 33449, 34942, 34943, 35167, 63754, 37670, 20235, 21450, 24613, 25201, 27762, 32026, 32102, 20120, 20834, 30684, 32943, 20225, 20238, 20854, 20864, 21980, 22120, 22331, 22522, 22524, 22804, 22855, 22931, 23492, 23696, 23822, 24049, 24190, 24524, 25216, 26071, 26083, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26398, 26399, 26462, 26827, 26820, 27231, 27450, 27683, 27773, 27778, 28103, 29592, 29734, 29738, 29826, 29859, 30072, 30079, 30849, 30959, 31041, 31047, 31048, 31098, 31637, 32e3, 32186, 32648, 32774, 32813, 32908, 35352, 35663, 35912, 36215, 37665, 37668, 39138, 39249, 39438, 39439, 39525, 40594, 32202, 20342, 21513, 25326, 26708, 37329, 21931, 20794, 63755, 63756, 23068, 25062, 63757, 25295, 25343, 63758, 63759, 63760, 63761, 63762, 63763, 37027, 63764, 63765, 63766, 63767, 63768, 35582, 63769, 63770, 63771, 63772, 26262, 63773, 29014, 63774, 63775, 38627, 63776, 25423, 25466, 21335, 63777, 26511, 26976, 28275, 63778, 30007, 63779, 63780, 63781, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32013, 63782, 63783, 34930, 22218, 23064, 63784, 63785, 63786, 63787, 63788, 20035, 63789, 20839, 22856, 26608, 32784, 63790, 22899, 24180, 25754, 31178, 24565, 24684, 25288, 25467, 23527, 23511, 21162, 63791, 22900, 24361, 24594, 63792, 63793, 63794, 29785, 63795, 63796, 63797, 63798, 63799, 63800, 39377, 63801, 63802, 63803, 63804, 63805, 63806, 63807, 63808, 63809, 63810, 63811, 28611, 63812, 63813, 33215, 36786, 24817, 63814, 63815, 33126, 63816, 63817, 23615, 63818, 63819, 63820, 63821, 63822, 63823, 63824, 63825, 23273, 35365, 26491, 32016, 63826, 63827, 63828, 63829, 63830, 63831, 33021, 63832, 63833, 23612, 27877, 21311, 28346, 22810, 33590, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20025, 20150, 20294, 21934, 22296, 22727, 24406, 26039, 26086, 27264, 27573, 28237, 30701, 31471, 31774, 32222, 34507, 34962, 37170, 37723, 25787, 28606, 29562, 30136, 36948, 21846, 22349, 25018, 25812, 26311, 28129, 28251, 28525, 28601, 30192, 32835, 33213, 34113, 35203, 35527, 35674, 37663, 27795, 30035, 31572, 36367, 36957, 21776, 22530, 22616, 24162, 25095, 25758, 26848, 30070, 31958, 34739, 40680, 20195, 22408, 22382, 22823, 23565, 23729, 24118, 24453, 25140, 25825, 29619, 33274, 34955, 36024, 38538, 40667, 23429, 24503, 24755, 20498, 20992, 21040, 22294, 22581, 22615, 23566, 23648, 23798, 23947, 24230, 24466, 24764, 25361, 25481, 25623, 26691, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26873, 27330, 28120, 28193, 28372, 28644, 29182, 30428, 30585, 31153, 31291, 33796, 35241, 36077, 36339, 36424, 36867, 36884, 36947, 37117, 37709, 38518, 38876, 27602, 28678, 29272, 29346, 29544, 30563, 31167, 31716, 32411, 35712, 22697, 24775, 25958, 26109, 26302, 27788, 28958, 29129, 35930, 38931, 20077, 31361, 20189, 20908, 20941, 21205, 21516, 24999, 26481, 26704, 26847, 27934, 28540, 30140, 30643, 31461, 33012, 33891, 37509, 20828, 26007, 26460, 26515, 30168, 31431, 33651, 63834, 35910, 36887, 38957, 23663, 33216, 33434, 36929, 36975, 37389, 24471, 23965, 27225, 29128, 30331, 31561, 34276, 35588, 37159, 39472, 21895, 25078, 63835, 30313, 32645, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34367, 34746, 35064, 37007, 63836, 27931, 28889, 29662, 32097, 33853, 63837, 37226, 39409, 63838, 20098, 21365, 27396, 27410, 28734, 29211, 34349, 40478, 21068, 36771, 23888, 25829, 25900, 27414, 28651, 31811, 32412, 34253, 35172, 35261, 25289, 33240, 34847, 24266, 26391, 28010, 29436, 29701, 29807, 34690, 37086, 20358, 23821, 24480, 33802, 20919, 25504, 30053, 20142, 20486, 20841, 20937, 26753, 27153, 31918, 31921, 31975, 33391, 35538, 36635, 37327, 20406, 20791, 21237, 21570, 24300, 24942, 25150, 26053, 27354, 28670, 31018, 34268, 34851, 38317, 39522, 39530, 40599, 40654, 21147, 26310, 27511, 28701, 31019, 36706, 38722, 24976, 25088, 25891, 28451, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29001, 29833, 32244, 32879, 34030, 36646, 36899, 37706, 20925, 21015, 21155, 27916, 28872, 35010, 24265, 25986, 27566, 28610, 31806, 29557, 20196, 20278, 22265, 63839, 23738, 23994, 24604, 29618, 31533, 32666, 32718, 32838, 36894, 37428, 38646, 38728, 38936, 40801, 20363, 28583, 31150, 37300, 38583, 21214, 63840, 25736, 25796, 27347, 28510, 28696, 29200, 30439, 32769, 34310, 34396, 36335, 36613, 38706, 39791, 40442, 40565, 30860, 31103, 32160, 33737, 37636, 40575, 40595, 35542, 22751, 24324, 26407, 28711, 29903, 31840, 32894, 20769, 28712, 29282, 30922, 36034, 36058, 36084, 38647, 20102, 20698, 23534, 24278, 26009, 29134, 30274, 30637, 32842, 34044, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36988, 39719, 40845, 22744, 23105, 23650, 27155, 28122, 28431, 30267, 32047, 32311, 34078, 35128, 37860, 38475, 21129, 26066, 26611, 27060, 27969, 28316, 28687, 29705, 29792, 30041, 30244, 30827, 35628, 39006, 20845, 25134, 38520, 20374, 20523, 23833, 28138, 32184, 36650, 24459, 24900, 26647, 63841, 38534, 21202, 32907, 20956, 20940, 26974, 31260, 32190, 33777, 38517, 20442, 21033, 21400, 21519, 21774, 23653, 24743, 26446, 26792, 28012, 29313, 29432, 29702, 29827, 63842, 30178, 31852, 32633, 32696, 33673, 35023, 35041, 37324, 37328, 38626, 39881, 21533, 28542, 29136, 29848, 34298, 36522, 38563, 40023, 40607, 26519, 28107, 29747, 33256, 38678, 30764, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31435, 31520, 31890, 25705, 29802, 30194, 30908, 30952, 39340, 39764, 40635, 23518, 24149, 28448, 33180, 33707, 37e3, 19975, 21325, 23081, 24018, 24398, 24930, 25405, 26217, 26364, 28415, 28459, 28771, 30622, 33836, 34067, 34875, 36627, 39237, 39995, 21788, 25273, 26411, 27819, 33545, 35178, 38778, 20129, 22916, 24536, 24537, 26395, 32178, 32596, 33426, 33579, 33725, 36638, 37017, 22475, 22969, 23186, 23504, 26151, 26522, 26757, 27599, 29028, 32629, 36023, 36067, 36993, 39749, 33032, 35978, 38476, 39488, 40613, 23391, 27667, 29467, 30450, 30431, 33804, 20906, 35219, 20813, 20885, 21193, 26825, 27796, 30468, 30496, 32191, 32236, 38754, 40629, 28357, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34065, 20901, 21517, 21629, 26126, 26269, 26919, 28319, 30399, 30609, 33559, 33986, 34719, 37225, 37528, 40180, 34946, 20398, 20882, 21215, 22982, 24125, 24917, 25720, 25721, 26286, 26576, 27169, 27597, 27611, 29279, 29281, 29761, 30520, 30683, 32791, 33468, 33541, 35584, 35624, 35980, 26408, 27792, 29287, 30446, 30566, 31302, 40361, 27519, 27794, 22818, 26406, 33945, 21359, 22675, 22937, 24287, 25551, 26164, 26483, 28218, 29483, 31447, 33495, 37672, 21209, 24043, 25006, 25035, 25098, 25287, 25771, 26080, 26969, 27494, 27595, 28961, 29687, 30045, 32326, 33310, 33538, 34154, 35491, 36031, 38695, 40289, 22696, 40664, 20497, 21006, 21563, 21839, 25991, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27766, 32010, 32011, 32862, 34442, 38272, 38639, 21247, 27797, 29289, 21619, 23194, 23614, 23883, 24396, 24494, 26410, 26806, 26979, 28220, 28228, 30473, 31859, 32654, 34183, 35598, 36855, 38753, 40692, 23735, 24758, 24845, 25003, 25935, 26107, 26108, 27665, 27887, 29599, 29641, 32225, 38292, 23494, 34588, 35600, 21085, 21338, 25293, 25615, 25778, 26420, 27192, 27850, 29632, 29854, 31636, 31893, 32283, 33162, 33334, 34180, 36843, 38649, 39361, 20276, 21322, 21453, 21467, 25292, 25644, 25856, 26001, 27075, 27886, 28504, 29677, 30036, 30242, 30436, 30460, 30928, 30971, 31020, 32070, 33324, 34784, 36820, 38930, 39151, 21187, 25300, 25765, 28196, 28497, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30332, 36299, 37297, 37474, 39662, 39747, 20515, 20621, 22346, 22952, 23592, 24135, 24439, 25151, 25918, 26041, 26049, 26121, 26507, 27036, 28354, 30917, 32033, 32938, 33152, 33323, 33459, 33953, 34444, 35370, 35607, 37030, 38450, 40848, 20493, 20467, 63843, 22521, 24472, 25308, 25490, 26479, 28227, 28953, 30403, 32972, 32986, 35060, 35061, 35097, 36064, 36649, 37197, 38506, 20271, 20336, 24091, 26575, 26658, 30333, 30334, 39748, 24161, 27146, 29033, 29140, 30058, 63844, 32321, 34115, 34281, 39132, 20240, 31567, 32624, 38309, 20961, 24070, 26805, 27710, 27726, 27867, 29359, 31684, 33539, 27861, 29754, 20731, 21128, 22721, 25816, 27287, 29863, 30294, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30887, 34327, 38370, 38713, 63845, 21342, 24321, 35722, 36776, 36783, 37002, 21029, 30629, 40009, 40712, 19993, 20482, 20853, 23643, 24183, 26142, 26170, 26564, 26821, 28851, 29953, 30149, 31177, 31453, 36647, 39200, 39432, 20445, 22561, 22577, 23542, 26222, 27493, 27921, 28282, 28541, 29668, 29995, 33769, 35036, 35091, 35676, 36628, 20239, 20693, 21264, 21340, 23443, 24489, 26381, 31119, 33145, 33583, 34068, 35079, 35206, 36665, 36667, 39333, 39954, 26412, 20086, 20472, 22857, 23553, 23791, 23792, 25447, 26834, 28925, 29090, 29739, 32299, 34028, 34562, 36898, 37586, 40179, 19981, 20184, 20463, 20613, 21078, 21103, 21542, 21648, 22496, 22827, 23142, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23386, 23413, 23500, 24220, 63846, 25206, 25975, 26023, 28014, 28325, 29238, 31526, 31807, 32566, 33104, 33105, 33178, 33344, 33433, 33705, 35331, 36e3, 36070, 36091, 36212, 36282, 37096, 37340, 38428, 38468, 39385, 40167, 21271, 20998, 21545, 22132, 22707, 22868, 22894, 24575, 24996, 25198, 26128, 27774, 28954, 30406, 31881, 31966, 32027, 33452, 36033, 38640, 63847, 20315, 24343, 24447, 25282, 23849, 26379, 26842, 30844, 32323, 40300, 19989, 20633, 21269, 21290, 21329, 22915, 23138, 24199, 24754, 24970, 25161, 25209, 26e3, 26503, 27047, 27604, 27606, 27607, 27608, 27832, 63848, 29749, 30202, 30738, 30865, 31189, 31192, 31875, 32203, 32737, 32933, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 33086, 33218, 33778, 34586, 35048, 35513, 35692, 36027, 37145, 38750, 39131, 40763, 22188, 23338, 24428, 25996, 27315, 27567, 27996, 28657, 28693, 29277, 29613, 36007, 36051, 38971, 24977, 27703, 32856, 39425, 20045, 20107, 20123, 20181, 20282, 20284, 20351, 20447, 20735, 21490, 21496, 21766, 21987, 22235, 22763, 22882, 23057, 23531, 23546, 23556, 24051, 24107, 24473, 24605, 25448, 26012, 26031, 26614, 26619, 26797, 27515, 27801, 27863, 28195, 28681, 29509, 30722, 31038, 31040, 31072, 31169, 31721, 32023, 32114, 32902, 33293, 33678, 34001, 34503, 35039, 35408, 35422, 35613, 36060, 36198, 36781, 37034, 39164, 39391, 40605, 21066, 63849, 26388, 63850, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20632, 21034, 23665, 25955, 27733, 29642, 29987, 30109, 31639, 33948, 37240, 38704, 20087, 25746, 27578, 29022, 34217, 19977, 63851, 26441, 26862, 28183, 33439, 34072, 34923, 25591, 28545, 37394, 39087, 19978, 20663, 20687, 20767, 21830, 21930, 22039, 23360, 23577, 23776, 24120, 24202, 24224, 24258, 24819, 26705, 27233, 28248, 29245, 29248, 29376, 30456, 31077, 31665, 32724, 35059, 35316, 35443, 35937, 36062, 38684, 22622, 29885, 36093, 21959, 63852, 31329, 32034, 33394, 29298, 29983, 29989, 63853, 31513, 22661, 22779, 23996, 24207, 24246, 24464, 24661, 25234, 25471, 25933, 26257, 26329, 26360, 26646, 26866, 29312, 29790, 31598, 32110, 32214, 32626, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32997, 33298, 34223, 35199, 35475, 36893, 37604, 40653, 40736, 22805, 22893, 24109, 24796, 26132, 26227, 26512, 27728, 28101, 28511, 30707, 30889, 33990, 37323, 37675, 20185, 20682, 20808, 21892, 23307, 23459, 25159, 25982, 26059, 28210, 29053, 29697, 29764, 29831, 29887, 30316, 31146, 32218, 32341, 32680, 33146, 33203, 33337, 34330, 34796, 35445, 36323, 36984, 37521, 37925, 39245, 39854, 21352, 23633, 26964, 27844, 27945, 28203, 33292, 34203, 35131, 35373, 35498, 38634, 40807, 21089, 26297, 27570, 32406, 34814, 36109, 38275, 38493, 25885, 28041, 29166, 63854, 22478, 22995, 23468, 24615, 24826, 25104, 26143, 26207, 29481, 29689, 30427, 30465, 31596, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32854, 32882, 33125, 35488, 37266, 19990, 21218, 27506, 27927, 31237, 31545, 32048, 63855, 36016, 21484, 22063, 22609, 23477, 23567, 23569, 24034, 25152, 25475, 25620, 26157, 26803, 27836, 28040, 28335, 28703, 28836, 29138, 29990, 30095, 30094, 30233, 31505, 31712, 31787, 32032, 32057, 34092, 34157, 34311, 35380, 36877, 36961, 37045, 37559, 38902, 39479, 20439, 23660, 26463, 28049, 31903, 32396, 35606, 36118, 36895, 23403, 24061, 25613, 33984, 36956, 39137, 29575, 23435, 24730, 26494, 28126, 35359, 35494, 36865, 38924, 21047, 63856, 28753, 30862, 37782, 34928, 37335, 20462, 21463, 22013, 22234, 22402, 22781, 23234, 23432, 23723, 23744, 24101, 24833, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 25101, 25163, 25480, 25628, 25910, 25976, 27193, 27530, 27700, 27929, 28465, 29159, 29417, 29560, 29703, 29874, 30246, 30561, 31168, 31319, 31466, 31929, 32143, 32172, 32353, 32670, 33065, 33585, 33936, 34010, 34282, 34966, 35504, 35728, 36664, 36930, 36995, 37228, 37526, 37561, 38539, 38567, 38568, 38614, 38656, 38920, 39318, 39635, 39706, 21460, 22654, 22809, 23408, 23487, 28113, 28506, 29087, 29729, 29881, 32901, 33789, 24033, 24455, 24490, 24642, 26092, 26642, 26991, 27219, 27529, 27957, 28147, 29667, 30462, 30636, 31565, 32020, 33059, 33308, 33600, 34036, 34147, 35426, 35524, 37255, 37662, 38918, 39348, 25100, 34899, 36848, 37477, 23815, 23847, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23913, 29791, 33181, 34664, 28629, 25342, 32722, 35126, 35186, 19998, 20056, 20711, 21213, 21319, 25215, 26119, 32361, 34821, 38494, 20365, 21273, 22070, 22987, 23204, 23608, 23630, 23629, 24066, 24337, 24643, 26045, 26159, 26178, 26558, 26612, 29468, 30690, 31034, 32709, 33940, 33997, 35222, 35430, 35433, 35553, 35925, 35962, 22516, 23508, 24335, 24687, 25325, 26893, 27542, 28252, 29060, 31698, 34645, 35672, 36606, 39135, 39166, 20280, 20353, 20449, 21627, 23072, 23480, 24892, 26032, 26216, 29180, 30003, 31070, 32051, 33102, 33251, 33688, 34218, 34254, 34563, 35338, 36523, 36763, 63857, 36805, 22833, 23460, 23526, 24713, 23529, 23563, 24515, 27777, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63858, 28145, 28683, 29978, 33455, 35574, 20160, 21313, 63859, 38617, 27663, 20126, 20420, 20818, 21854, 23077, 23784, 25105, 29273, 33469, 33706, 34558, 34905, 35357, 38463, 38597, 39187, 40201, 40285, 22538, 23731, 23997, 24132, 24801, 24853, 25569, 27138, 28197, 37122, 37716, 38990, 39952, 40823, 23433, 23736, 25353, 26191, 26696, 30524, 38593, 38797, 38996, 39839, 26017, 35585, 36555, 38332, 21813, 23721, 24022, 24245, 26263, 30284, 33780, 38343, 22739, 25276, 29390, 40232, 20208, 22830, 24591, 26171, 27523, 31207, 40230, 21395, 21696, 22467, 23830, 24859, 26326, 28079, 30861, 33406, 38552, 38724, 21380, 25212, 25494, 28082, 32266, 33099, 38989, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27387, 32588, 40367, 40474, 20063, 20539, 20918, 22812, 24825, 25590, 26928, 29242, 32822, 63860, 37326, 24369, 63861, 63862, 32004, 33509, 33903, 33979, 34277, 36493, 63863, 20335, 63864, 63865, 22756, 23363, 24665, 25562, 25880, 25965, 26264, 63866, 26954, 27171, 27915, 28673, 29036, 30162, 30221, 31155, 31344, 63867, 32650, 63868, 35140, 63869, 35731, 37312, 38525, 63870, 39178, 22276, 24481, 26044, 28417, 30208, 31142, 35486, 39341, 39770, 40812, 20740, 25014, 25233, 27277, 33222, 20547, 22576, 24422, 28937, 35328, 35578, 23420, 34326, 20474, 20796, 22196, 22852, 25513, 28153, 23978, 26989, 20870, 20104, 20313, 63871, 63872, 63873, 22914, 63874, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63875, 27487, 27741, 63876, 29877, 30998, 63877, 33287, 33349, 33593, 36671, 36701, 63878, 39192, 63879, 63880, 63881, 20134, 63882, 22495, 24441, 26131, 63883, 63884, 30123, 32377, 35695, 63885, 36870, 39515, 22181, 22567, 23032, 23071, 23476, 63886, 24310, 63887, 63888, 25424, 25403, 63889, 26941, 27783, 27839, 28046, 28051, 28149, 28436, 63890, 28895, 28982, 29017, 63891, 29123, 29141, 63892, 30799, 30831, 63893, 31605, 32227, 63894, 32303, 63895, 34893, 36575, 63896, 63897, 63898, 37467, 63899, 40182, 63900, 63901, 63902, 24709, 28037, 63903, 29105, 63904, 63905, 38321, 21421, 63906, 63907, 63908, 26579, 63909, 28814, 28976, 29744, 33398, 33490, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63910, 38331, 39653, 40573, 26308, 63911, 29121, 33865, 63912, 63913, 22603, 63914, 63915, 23992, 24433, 63916, 26144, 26254, 27001, 27054, 27704, 27891, 28214, 28481, 28634, 28699, 28719, 29008, 29151, 29552, 63917, 29787, 63918, 29908, 30408, 31310, 32403, 63919, 63920, 33521, 35424, 36814, 63921, 37704, 63922, 38681, 63923, 63924, 20034, 20522, 63925, 21e3, 21473, 26355, 27757, 28618, 29450, 30591, 31330, 33454, 34269, 34306, 63926, 35028, 35427, 35709, 35947, 63927, 37555, 63928, 38675, 38928, 20116, 20237, 20425, 20658, 21320, 21566, 21555, 21978, 22626, 22714, 22887, 23067, 23524, 24735, 63929, 25034, 25942, 26111, 26212, 26791, 27738, 28595, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28879, 29100, 29522, 31613, 34568, 35492, 39986, 40711, 23627, 27779, 29508, 29577, 37434, 28331, 29797, 30239, 31337, 32277, 34314, 20800, 22725, 25793, 29934, 29973, 30320, 32705, 37013, 38605, 39252, 28198, 29926, 31401, 31402, 33253, 34521, 34680, 35355, 23113, 23436, 23451, 26785, 26880, 28003, 29609, 29715, 29740, 30871, 32233, 32747, 33048, 33109, 33694, 35916, 38446, 38929, 26352, 24448, 26106, 26505, 27754, 29579, 20525, 23043, 27498, 30702, 22806, 23916, 24013, 29477, 30031, 63930, 63931, 20709, 20985, 22575, 22829, 22934, 23002, 23525, 63932, 63933, 23970, 25303, 25622, 25747, 25854, 63934, 26332, 63935, 27208, 63936, 29183, 29796, 63937, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31368, 31407, 32327, 32350, 32768, 33136, 63938, 34799, 35201, 35616, 36953, 63939, 36992, 39250, 24958, 27442, 28020, 32287, 35109, 36785, 20433, 20653, 20887, 21191, 22471, 22665, 23481, 24248, 24898, 27029, 28044, 28263, 28342, 29076, 29794, 29992, 29996, 32883, 33592, 33993, 36362, 37780, 37854, 63940, 20110, 20305, 20598, 20778, 21448, 21451, 21491, 23431, 23507, 23588, 24858, 24962, 26100, 29275, 29591, 29760, 30402, 31056, 31121, 31161, 32006, 32701, 33419, 34261, 34398, 36802, 36935, 37109, 37354, 38533, 38632, 38633, 21206, 24423, 26093, 26161, 26671, 29020, 31286, 37057, 38922, 20113, 63941, 27218, 27550, 28560, 29065, 32792, 33464, 34131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36939, 38549, 38642, 38907, 34074, 39729, 20112, 29066, 38596, 20803, 21407, 21729, 22291, 22290, 22435, 23195, 23236, 23491, 24616, 24895, 25588, 27781, 27961, 28274, 28304, 29232, 29503, 29783, 33489, 34945, 36677, 36960, 63942, 38498, 39e3, 40219, 26376, 36234, 37470, 20301, 20553, 20702, 21361, 22285, 22996, 23041, 23561, 24944, 26256, 28205, 29234, 29771, 32239, 32963, 33806, 33894, 34111, 34655, 34907, 35096, 35586, 36949, 38859, 39759, 20083, 20369, 20754, 20842, 63943, 21807, 21929, 23418, 23461, 24188, 24189, 24254, 24736, 24799, 24840, 24841, 25540, 25912, 26377, 63944, 26580, 26586, 63945, 26977, 26978, 27833, 27943, 63946, 28216, 63947, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28641, 29494, 29495, 63948, 29788, 30001, 63949, 30290, 63950, 63951, 32173, 33278, 33848, 35029, 35480, 35547, 35565, 36400, 36418, 36938, 36926, 36986, 37193, 37321, 37742, 63952, 63953, 22537, 63954, 27603, 32905, 32946, 63955, 63956, 20801, 22891, 23609, 63957, 63958, 28516, 29607, 32996, 36103, 63959, 37399, 38287, 63960, 63961, 63962, 63963, 32895, 25102, 28700, 32104, 34701, 63964, 22432, 24681, 24903, 27575, 35518, 37504, 38577, 20057, 21535, 28139, 34093, 38512, 38899, 39150, 25558, 27875, 37009, 20957, 25033, 33210, 40441, 20381, 20506, 20736, 23452, 24847, 25087, 25836, 26885, 27589, 30097, 30691, 32681, 33380, 34191, 34811, 34915, 35516, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 35696, 37291, 20108, 20197, 20234, 63965, 63966, 22839, 23016, 63967, 24050, 24347, 24411, 24609, 63968, 63969, 63970, 63971, 29246, 29669, 63972, 30064, 30157, 63973, 31227, 63974, 32780, 32819, 32900, 33505, 33617, 63975, 63976, 36029, 36019, 36999, 63977, 63978, 39156, 39180, 63979, 63980, 28727, 30410, 32714, 32716, 32764, 35610, 20154, 20161, 20995, 21360, 63981, 21693, 22240, 23035, 23493, 24341, 24525, 28270, 63982, 63983, 32106, 33589, 63984, 34451, 35469, 63985, 38765, 38775, 63986, 63987, 19968, 20314, 20350, 22777, 26085, 28322, 36920, 37808, 39353, 20219, 22764, 22922, 23001, 24641, 63988, 63989, 31252, 63990, 33615, 36035, 20837, 21316, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63991, 63992, 63993, 20173, 21097, 23381, 33471, 20180, 21050, 21672, 22985, 23039, 23376, 23383, 23388, 24675, 24904, 28363, 28825, 29038, 29574, 29943, 30133, 30913, 32043, 32773, 33258, 33576, 34071, 34249, 35566, 36039, 38604, 20316, 21242, 22204, 26027, 26152, 28796, 28856, 29237, 32189, 33421, 37196, 38592, 40306, 23409, 26855, 27544, 28538, 30430, 23697, 26283, 28507, 31668, 31786, 34870, 38620, 19976, 20183, 21280, 22580, 22715, 22767, 22892, 23559, 24115, 24196, 24373, 25484, 26290, 26454, 27167, 27299, 27404, 28479, 29254, 63994, 29520, 29835, 31456, 31911, 33144, 33247, 33255, 33674, 33900, 34083, 34196, 34255, 35037, 36115, 37292, 38263, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38556, 20877, 21705, 22312, 23472, 25165, 26448, 26685, 26771, 28221, 28371, 28797, 32289, 35009, 36001, 36617, 40779, 40782, 29229, 31631, 35533, 37658, 20295, 20302, 20786, 21632, 22992, 24213, 25269, 26485, 26990, 27159, 27822, 28186, 29401, 29482, 30141, 31672, 32053, 33511, 33785, 33879, 34295, 35419, 36015, 36487, 36889, 37048, 38606, 40799, 21219, 21514, 23265, 23490, 25688, 25973, 28404, 29380, 63995, 30340, 31309, 31515, 31821, 32318, 32735, 33659, 35627, 36042, 36196, 36321, 36447, 36842, 36857, 36969, 37841, 20291, 20346, 20659, 20840, 20856, 21069, 21098, 22625, 22652, 22880, 23560, 23637, 24283, 24731, 25136, 26643, 27583, 27656, 28593, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29006, 29728, 3e4, 30008, 30033, 30322, 31564, 31627, 31661, 31686, 32399, 35438, 36670, 36681, 37439, 37523, 37666, 37931, 38651, 39002, 39019, 39198, 20999, 25130, 25240, 27993, 30308, 31434, 31680, 32118, 21344, 23742, 24215, 28472, 28857, 31896, 38673, 39822, 40670, 25509, 25722, 34678, 19969, 20117, 20141, 20572, 20597, 21576, 22979, 23450, 24128, 24237, 24311, 24449, 24773, 25402, 25919, 25972, 26060, 26230, 26232, 26622, 26984, 27273, 27491, 27712, 28096, 28136, 28191, 28254, 28702, 28833, 29582, 29693, 30010, 30555, 30855, 31118, 31243, 31357, 31934, 32142, 33351, 35330, 35562, 35998, 37165, 37194, 37336, 37478, 37580, 37664, 38662, 38742, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38748, 38914, 40718, 21046, 21137, 21884, 22564, 24093, 24351, 24716, 25552, 26799, 28639, 31085, 31532, 33229, 34234, 35069, 35576, 36420, 37261, 38500, 38555, 38717, 38988, 40778, 20430, 20806, 20939, 21161, 22066, 24340, 24427, 25514, 25805, 26089, 26177, 26362, 26361, 26397, 26781, 26839, 27133, 28437, 28526, 29031, 29157, 29226, 29866, 30522, 31062, 31066, 31199, 31264, 31381, 31895, 31967, 32068, 32368, 32903, 34299, 34468, 35412, 35519, 36249, 36481, 36896, 36973, 37347, 38459, 38613, 40165, 26063, 31751, 36275, 37827, 23384, 23562, 21330, 25305, 29469, 20519, 23447, 24478, 24752, 24939, 26837, 28121, 29742, 31278, 32066, 32156, 32305, 33131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36394, 36405, 37758, 37912, 20304, 22352, 24038, 24231, 25387, 32618, 20027, 20303, 20367, 20570, 23005, 32964, 21610, 21608, 22014, 22863, 23449, 24030, 24282, 26205, 26417, 26609, 26666, 27880, 27954, 28234, 28557, 28855, 29664, 30087, 31820, 32002, 32044, 32162, 33311, 34523, 35387, 35461, 36208, 36490, 36659, 36913, 37198, 37202, 37956, 39376, 31481, 31909, 20426, 20737, 20934, 22472, 23535, 23803, 26201, 27197, 27994, 28310, 28652, 28940, 30063, 31459, 34850, 36897, 36981, 38603, 39423, 33537, 20013, 20210, 34886, 37325, 21373, 27355, 26987, 27713, 33914, 22686, 24974, 26366, 25327, 28893, 29969, 30151, 32338, 33976, 35657, 36104, 20043, 21482, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21675, 22320, 22336, 24535, 25345, 25351, 25711, 25903, 26088, 26234, 26525, 26547, 27490, 27744, 27802, 28460, 30693, 30757, 31049, 31063, 32025, 32930, 33026, 33267, 33437, 33463, 34584, 35468, 63996, 36100, 36286, 36978, 30452, 31257, 31287, 32340, 32887, 21767, 21972, 22645, 25391, 25634, 26185, 26187, 26733, 27035, 27524, 27941, 28337, 29645, 29800, 29857, 30043, 30137, 30433, 30494, 30603, 31206, 32265, 32285, 33275, 34095, 34967, 35386, 36049, 36587, 36784, 36914, 37805, 38499, 38515, 38663, 20356, 21489, 23018, 23241, 24089, 26702, 29894, 30142, 31209, 31378, 33187, 34541, 36074, 36300, 36845, 26015, 26389, 63997, 22519, 28503, 32221, 36655, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37878, 38598, 24501, 25074, 28548, 19988, 20376, 20511, 21449, 21983, 23919, 24046, 27425, 27492, 30923, 31642, 63998, 36425, 36554, 36974, 25417, 25662, 30528, 31364, 37679, 38015, 40810, 25776, 28591, 29158, 29864, 29914, 31428, 31762, 32386, 31922, 32408, 35738, 36106, 38013, 39184, 39244, 21049, 23519, 25830, 26413, 32046, 20717, 21443, 22649, 24920, 24921, 25082, 26028, 31449, 35730, 35734, 20489, 20513, 21109, 21809, 23100, 24288, 24432, 24884, 25950, 26124, 26166, 26274, 27085, 28356, 28466, 29462, 30241, 31379, 33081, 33369, 33750, 33980, 20661, 22512, 23488, 23528, 24425, 25505, 30758, 32181, 33756, 34081, 37319, 37365, 20874, 26613, 31574, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36012, 20932, 22971, 24765, 34389, 20508, 63999, 21076, 23610, 24957, 25114, 25299, 25842, 26021, 28364, 30240, 33034, 36448, 38495, 38587, 20191, 21315, 21912, 22825, 24029, 25797, 27849, 28154, 29588, 31359, 33307, 34214, 36068, 36368, 36983, 37351, 38369, 38433, 38854, 20984, 21746, 21894, 24505, 25764, 28552, 32180, 36639, 36685, 37941, 20681, 23574, 27838, 28155, 29979, 30651, 31805, 31844, 35449, 35522, 22558, 22974, 24086, 25463, 29266, 30090, 30571, 35548, 36028, 36626, 24307, 26228, 28152, 32893, 33729, 35531, 38737, 39894, 64e3, 21059, 26367, 28053, 28399, 32224, 35558, 36910, 36958, 39636, 21021, 21119, 21736, 24980, 25220, 25307, 26786, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26898, 26970, 27189, 28818, 28966, 30813, 30977, 30990, 31186, 31245, 32918, 33400, 33493, 33609, 34121, 35970, 36229, 37218, 37259, 37294, 20419, 22225, 29165, 30679, 34560, 35320, 23544, 24534, 26449, 37032, 21474, 22618, 23541, 24740, 24961, 25696, 32317, 32880, 34085, 37507, 25774, 20652, 23828, 26368, 22684, 25277, 25512, 26894, 27e3, 27166, 28267, 30394, 31179, 33467, 33833, 35535, 36264, 36861, 37138, 37195, 37276, 37648, 37656, 37786, 38619, 39478, 39949, 19985, 30044, 31069, 31482, 31569, 31689, 32302, 33988, 36441, 36468, 36600, 36880, 26149, 26943, 29763, 20986, 26414, 40668, 20805, 24544, 27798, 34802, 34909, 34935, 24756, 33205, 33795, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36101, 21462, 21561, 22068, 23094, 23601, 28810, 32736, 32858, 33030, 33261, 36259, 37257, 39519, 40434, 20596, 20164, 21408, 24827, 28204, 23652, 20360, 20516, 21988, 23769, 24159, 24677, 26772, 27835, 28100, 29118, 30164, 30196, 30305, 31258, 31305, 32199, 32251, 32622, 33268, 34473, 36636, 38601, 39347, 40786, 21063, 21189, 39149, 35242, 19971, 26578, 28422, 20405, 23522, 26517, 27784, 28024, 29723, 30759, 37341, 37756, 34756, 31204, 31281, 24555, 20182, 21668, 21822, 22702, 22949, 24816, 25171, 25302, 26422, 26965, 33333, 38464, 39345, 39389, 20524, 21331, 21828, 22396, 64001, 25176, 64002, 25826, 26219, 26589, 28609, 28655, 29730, 29752, 35351, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37944, 21585, 22022, 22374, 24392, 24986, 27470, 28760, 28845, 32187, 35477, 22890, 33067, 25506, 30472, 32829, 36010, 22612, 25645, 27067, 23445, 24081, 28271, 64003, 34153, 20812, 21488, 22826, 24608, 24907, 27526, 27760, 27888, 31518, 32974, 33492, 36294, 37040, 39089, 64004, 25799, 28580, 25745, 25860, 20814, 21520, 22303, 35342, 24927, 26742, 64005, 30171, 31570, 32113, 36890, 22534, 27084, 33151, 35114, 36864, 38969, 20600, 22871, 22956, 25237, 36879, 39722, 24925, 29305, 38358, 22369, 23110, 24052, 25226, 25773, 25850, 26487, 27874, 27966, 29228, 29750, 30772, 32631, 33453, 36315, 38935, 21028, 22338, 26495, 29256, 29923, 36009, 36774, 37393, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38442, 20843, 21485, 25420, 20329, 21764, 24726, 25943, 27803, 28031, 29260, 29437, 31255, 35207, 35997, 24429, 28558, 28921, 33192, 24846, 20415, 20559, 25153, 29255, 31687, 32232, 32745, 36941, 38829, 39449, 36022, 22378, 24179, 26544, 33805, 35413, 21536, 23318, 24163, 24290, 24330, 25987, 32954, 34109, 38281, 38491, 20296, 21253, 21261, 21263, 21638, 21754, 22275, 24067, 24598, 25243, 25265, 25429, 64006, 27873, 28006, 30129, 30770, 32990, 33071, 33502, 33889, 33970, 34957, 35090, 36875, 37610, 39165, 39825, 24133, 26292, 26333, 28689, 29190, 64007, 20469, 21117, 24426, 24915, 26451, 27161, 28418, 29922, 31080, 34920, 35961, 39111, 39108, 39491, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21697, 31263, 26963, 35575, 35914, 39080, 39342, 24444, 25259, 30130, 30382, 34987, 36991, 38466, 21305, 24380, 24517, 27852, 29644, 30050, 30091, 31558, 33534, 39325, 20047, 36924, 19979, 20309, 21414, 22799, 24264, 26160, 27827, 29781, 33655, 34662, 36032, 36944, 38686, 39957, 22737, 23416, 34384, 35604, 40372, 23506, 24680, 24717, 26097, 27735, 28450, 28579, 28698, 32597, 32752, 38289, 38290, 38480, 38867, 21106, 36676, 20989, 21547, 21688, 21859, 21898, 27323, 28085, 32216, 33382, 37532, 38519, 40569, 21512, 21704, 30418, 34532, 38308, 38356, 38492, 20130, 20233, 23022, 23270, 24055, 24658, 25239, 26477, 26689, 27782, 28207, 32568, 32923, 33322, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 64008, 64009, 38917, 20133, 20565, 21683, 22419, 22874, 23401, 23475, 25032, 26999, 28023, 28707, 34809, 35299, 35442, 35559, 36994, 39405, 39608, 21182, 26680, 20502, 24184, 26447, 33607, 34892, 20139, 21521, 22190, 29670, 37141, 38911, 39177, 39255, 39321, 22099, 22687, 34395, 35377, 25010, 27382, 29563, 36562, 27463, 38570, 39511, 22869, 29184, 36203, 38761, 20436, 23796, 24358, 25080, 26203, 27883, 28843, 29572, 29625, 29694, 30505, 30541, 32067, 32098, 32291, 33335, 34898, 64010, 36066, 37449, 39023, 23377, 31348, 34880, 38913, 23244, 20448, 21332, 22846, 23805, 25406, 28025, 29433, 33029, 33031, 33698, 37583, 38960, 20136, 20804, 21009, 22411, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24418, 27842, 28366, 28677, 28752, 28847, 29074, 29673, 29801, 33610, 34722, 34913, 36872, 37026, 37795, 39336, 20846, 24407, 24800, 24935, 26291, 34137, 36426, 37295, 38795, 20046, 20114, 21628, 22741, 22778, 22909, 23733, 24359, 25142, 25160, 26122, 26215, 27627, 28009, 28111, 28246, 28408, 28564, 28640, 28649, 28765, 29392, 29733, 29786, 29920, 30355, 31068, 31946, 32286, 32993, 33446, 33899, 33983, 34382, 34399, 34676, 35703, 35946, 37804, 38912, 39013, 24785, 25110, 37239, 23130, 26127, 28151, 28222, 29759, 39746, 24573, 24794, 31503, 21700, 24344, 27742, 27859, 27946, 28888, 32005, 34425, 35340, 40251, 21270, 21644, 23301, 27194, 28779, 30069, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31117, 31166, 33457, 33775, 35441, 35649, 36008, 38772, 64011, 25844, 25899, 30906, 30907, 31339, 20024, 21914, 22864, 23462, 24187, 24739, 25563, 27489, 26213, 26707, 28185, 29029, 29872, 32008, 36996, 39529, 39973, 27963, 28369, 29502, 35905, 38346, 20976, 24140, 24488, 24653, 24822, 24880, 24908, 26179, 26180, 27045, 27841, 28255, 28361, 28514, 29004, 29852, 30343, 31681, 31783, 33618, 34647, 36945, 38541, 40643, 21295, 22238, 24315, 24458, 24674, 24724, 25079, 26214, 26371, 27292, 28142, 28590, 28784, 29546, 32362, 33214, 33588, 34516, 35496, 36036, 21123, 29554, 23446, 27243, 37892, 21742, 22150, 23389, 25928, 25989, 26313, 26783, 28045, 28102, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29243, 32948, 37237, 39501, 20399, 20505, 21402, 21518, 21564, 21897, 21957, 24127, 24460, 26429, 29030, 29661, 36869, 21211, 21235, 22628, 22734, 28932, 29071, 29179, 34224, 35347, 26248, 34216, 21927, 26244, 29002, 33841, 21321, 21913, 27585, 24409, 24509, 25582, 26249, 28999, 35569, 36637, 40638, 20241, 25658, 28875, 30054, 34407, 24676, 35662, 40440, 20807, 20982, 21256, 27958, 33016, 40657, 26133, 27427, 28824, 30165, 21507, 23673, 32007, 35350, 27424, 27453, 27462, 21560, 24688, 27965, 32725, 33288, 20694, 20958, 21916, 22123, 22221, 23020, 23305, 24076, 24985, 24984, 25137, 26206, 26342, 29081, 29113, 29114, 29351, 31143, 31232, 32690, 35440, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "gb18030": [19970, 19972, 19973, 19974, 19983, 19986, 19991, 19999, 2e4, 20001, 20003, 20006, 20009, 20014, 20015, 20017, 20019, 20021, 20023, 20028, 20032, 20033, 20034, 20036, 20038, 20042, 20049, 20053, 20055, 20058, 20059, 20066, 20067, 20068, 20069, 20071, 20072, 20074, 20075, 20076, 20077, 20078, 20079, 20082, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091, 20092, 20093, 20095, 20096, 20097, 20098, 20099, 20100, 20101, 20103, 20106, 20112, 20118, 20119, 20121, 20124, 20125, 20126, 20131, 20138, 20143, 20144, 20145, 20148, 20150, 20151, 20152, 20153, 20156, 20157, 20158, 20168, 20172, 20175, 20176, 20178, 20186, 20187, 20188, 20192, 20194, 20198, 20199, 20201, 20205, 20206, 20207, 20209, 20212, 20216, 20217, 20218, 20220, 20222, 20224, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20235, 20236, 20242, 20243, 20244, 20245, 20246, 20252, 20253, 20257, 20259, 20264, 20265, 20268, 20269, 20270, 20273, 20275, 20277, 20279, 20281, 20283, 20286, 20287, 20288, 20289, 20290, 20292, 20293, 20295, 20296, 20297, 20298, 20299, 20300, 20306, 20308, 20310, 20321, 20322, 20326, 20328, 20330, 20331, 20333, 20334, 20337, 20338, 20341, 20343, 20344, 20345, 20346, 20349, 20352, 20353, 20354, 20357, 20358, 20359, 20362, 20364, 20366, 20368, 20370, 20371, 20373, 20374, 20376, 20377, 20378, 20380, 20382, 20383, 20385, 20386, 20388, 20395, 20397, 20400, 20401, 20402, 20403, 20404, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20416, 20417, 20418, 20422, 20423, 20424, 20425, 20427, 20428, 20429, 20434, 20435, 20436, 20437, 20438, 20441, 20443, 20448, 20450, 20452, 20453, 20455, 20459, 20460, 20464, 20466, 20468, 20469, 20470, 20471, 20473, 20475, 20476, 20477, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 20494, 20496, 20497, 20499, 20501, 20502, 20503, 20507, 20509, 20510, 20512, 20514, 20515, 20516, 20519, 20523, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20536, 20537, 20539, 20541, 20543, 20544, 20545, 20546, 20548, 20549, 20550, 20553, 20554, 20555, 20557, 20560, 20561, 20562, 20563, 20564, 20566, 20567, 20568, 20569, 20571, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20582, 20583, 20584, 20585, 20586, 20587, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20600, 20601, 20602, 20604, 20605, 20609, 20610, 20611, 20612, 20614, 20615, 20617, 20618, 20619, 20620, 20622, 20623, 20624, 20625, 20626, 20627, 20628, 20629, 20630, 20631, 20632, 20633, 20634, 20635, 20636, 20637, 20638, 20639, 20640, 20641, 20642, 20644, 20646, 20650, 20651, 20653, 20654, 20655, 20656, 20657, 20659, 20660, 20661, 20662, 20663, 20664, 20665, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20685, 20686, 20688, 20689, 20690, 20691, 20692, 20693, 20695, 20696, 20697, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20712, 20713, 20714, 20715, 20719, 20720, 20721, 20722, 20724, 20726, 20727, 20728, 20729, 20730, 20732, 20733, 20734, 20735, 20736, 20737, 20738, 20739, 20740, 20741, 20744, 20745, 20746, 20748, 20749, 20750, 20751, 20752, 20753, 20755, 20756, 20757, 20758, 20759, 20760, 20761, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20770, 20771, 20772, 20773, 20774, 20775, 20776, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20802, 20807, 20810, 20812, 20814, 20815, 20816, 20818, 20819, 20823, 20824, 20825, 20827, 20829, 20830, 20831, 20832, 20833, 20835, 20836, 20838, 20839, 20841, 20842, 20847, 20850, 20858, 20862, 20863, 20867, 20868, 20870, 20871, 20874, 20875, 20878, 20879, 20880, 20881, 20883, 20884, 20888, 20890, 20893, 20894, 20895, 20897, 20899, 20902, 20903, 20904, 20905, 20906, 20909, 20910, 20916, 20920, 20921, 20922, 20926, 20927, 20929, 20930, 20931, 20933, 20936, 20938, 20941, 20942, 20944, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20956, 20958, 20959, 20962, 20963, 20965, 20966, 20967, 20968, 20969, 20970, 20972, 20974, 20977, 20978, 20980, 20983, 20990, 20996, 20997, 21001, 21003, 21004, 21007, 21008, 21011, 21012, 21013, 21020, 21022, 21023, 21025, 21026, 21027, 21029, 21030, 21031, 21034, 21036, 21039, 21041, 21042, 21044, 21045, 21052, 21054, 21060, 21061, 21062, 21063, 21064, 21065, 21067, 21070, 21071, 21074, 21075, 21077, 21079, 21080, 21081, 21082, 21083, 21085, 21087, 21088, 21090, 21091, 21092, 21094, 21096, 21099, 21100, 21101, 21102, 21104, 21105, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21118, 21120, 21123, 21124, 21125, 21126, 21127, 21129, 21130, 21131, 21132, 21133, 21134, 21135, 21137, 21138, 21140, 21141, 21142, 21143, 21144, 21145, 21146, 21148, 21156, 21157, 21158, 21159, 21166, 21167, 21168, 21172, 21173, 21174, 21175, 21176, 21177, 21178, 21179, 21180, 21181, 21184, 21185, 21186, 21188, 21189, 21190, 21192, 21194, 21196, 21197, 21198, 21199, 21201, 21203, 21204, 21205, 21207, 21209, 21210, 21211, 21212, 21213, 21214, 21216, 21217, 21218, 21219, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21243, 21244, 21245, 21249, 21250, 21251, 21252, 21255, 21257, 21258, 21259, 21260, 21262, 21265, 21266, 21267, 21268, 21272, 21275, 21276, 21278, 21279, 21282, 21284, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21308, 21309, 21312, 21314, 21316, 21318, 21323, 21324, 21325, 21328, 21332, 21336, 21337, 21339, 21341, 21349, 21352, 21354, 21356, 21357, 21362, 21366, 21369, 21371, 21372, 21373, 21374, 21376, 21377, 21379, 21383, 21384, 21386, 21390, 21391, 21392, 21393, 21394, 21395, 21396, 21398, 21399, 21401, 21403, 21404, 21406, 21408, 21409, 21412, 21415, 21418, 21419, 21420, 21421, 21423, 21424, 21425, 21426, 21427, 21428, 21429, 21431, 21432, 21433, 21434, 21436, 21437, 21438, 21440, 21443, 21444, 21445, 21446, 21447, 21454, 21455, 21456, 21458, 21459, 21461, 21466, 21468, 21469, 21470, 21473, 21474, 21479, 21492, 21498, 21502, 21503, 21504, 21506, 21509, 21511, 21515, 21524, 21528, 21529, 21530, 21532, 21538, 21540, 21541, 21546, 21552, 21555, 21558, 21559, 21562, 21565, 21567, 21569, 21570, 21572, 21573, 21575, 21577, 21580, 21581, 21582, 21583, 21585, 21594, 21597, 21598, 21599, 21600, 21601, 21603, 21605, 21607, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21620, 21625, 21626, 21630, 21631, 21633, 21635, 21637, 21639, 21640, 21641, 21642, 21645, 21649, 21651, 21655, 21656, 21660, 21662, 21663, 21664, 21665, 21666, 21669, 21678, 21680, 21682, 21685, 21686, 21687, 21689, 21690, 21692, 21694, 21699, 21701, 21706, 21707, 21718, 21720, 21723, 21728, 21729, 21730, 21731, 21732, 21739, 21740, 21743, 21744, 21745, 21748, 21749, 21750, 21751, 21752, 21753, 21755, 21758, 21760, 21762, 21763, 21764, 21765, 21768, 21770, 21771, 21772, 21773, 21774, 21778, 21779, 21781, 21782, 21783, 21784, 21785, 21786, 21788, 21789, 21790, 21791, 21793, 21797, 21798, 21800, 21801, 21803, 21805, 21810, 21812, 21813, 21814, 21816, 21817, 21818, 21819, 21821, 21824, 21826, 21829, 21831, 21832, 21835, 21836, 21837, 21838, 21839, 21841, 21842, 21843, 21844, 21847, 21848, 21849, 21850, 21851, 21853, 21854, 21855, 21856, 21858, 21859, 21864, 21865, 21867, 21871, 21872, 21873, 21874, 21875, 21876, 21881, 21882, 21885, 21887, 21893, 21894, 21900, 21901, 21902, 21904, 21906, 21907, 21909, 21910, 21911, 21914, 21915, 21918, 21920, 21921, 21922, 21923, 21924, 21925, 21926, 21928, 21929, 21930, 21931, 21932, 21933, 21934, 21935, 21936, 21938, 21940, 21942, 21944, 21946, 21948, 21951, 21952, 21953, 21954, 21955, 21958, 21959, 21960, 21962, 21963, 21966, 21967, 21968, 21973, 21975, 21976, 21977, 21978, 21979, 21982, 21984, 21986, 21991, 21993, 21997, 21998, 22e3, 22001, 22004, 22006, 22008, 22009, 22010, 22011, 22012, 22015, 22018, 22019, 22020, 22021, 22022, 22023, 22026, 22027, 22029, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22041, 22042, 22044, 22045, 22048, 22049, 22050, 22053, 22054, 22056, 22057, 22058, 22059, 22062, 22063, 22064, 22067, 22069, 22071, 22072, 22074, 22076, 22077, 22078, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22095, 22096, 22097, 22098, 22099, 22101, 22102, 22106, 22107, 22109, 22110, 22111, 22112, 22113, 22115, 22117, 22118, 22119, 22125, 22126, 22127, 22128, 22130, 22131, 22132, 22133, 22135, 22136, 22137, 22138, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22160, 22161, 22162, 22164, 22165, 22166, 22167, 22168, 22169, 22170, 22171, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22200, 22201, 22202, 22203, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22229, 22230, 22232, 22233, 22236, 22243, 22245, 22246, 22247, 22248, 22249, 22250, 22252, 22254, 22255, 22258, 22259, 22262, 22263, 22264, 22267, 22268, 22272, 22273, 22274, 22277, 22279, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22301, 22302, 22304, 22305, 22306, 22308, 22309, 22310, 22311, 22315, 22321, 22322, 22324, 22325, 22326, 22327, 22328, 22332, 22333, 22335, 22337, 22339, 22340, 22341, 22342, 22344, 22345, 22347, 22354, 22355, 22356, 22357, 22358, 22360, 22361, 22370, 22371, 22373, 22375, 22380, 22382, 22384, 22385, 22386, 22388, 22389, 22392, 22393, 22394, 22397, 22398, 22399, 22400, 22401, 22407, 22408, 22409, 22410, 22413, 22414, 22415, 22416, 22417, 22420, 22421, 22422, 22423, 22424, 22425, 22426, 22428, 22429, 22430, 22431, 22437, 22440, 22442, 22444, 22447, 22448, 22449, 22451, 22453, 22454, 22455, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22476, 22477, 22480, 22481, 22483, 22486, 22487, 22491, 22492, 22494, 22497, 22498, 22499, 22501, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22510, 22512, 22513, 22514, 22515, 22517, 22518, 22519, 22523, 22524, 22526, 22527, 22529, 22531, 22532, 22533, 22536, 22537, 22538, 22540, 22542, 22543, 22544, 22546, 22547, 22548, 22550, 22551, 22552, 22554, 22555, 22556, 22557, 22559, 22562, 22563, 22565, 22566, 22567, 22568, 22569, 22571, 22572, 22573, 22574, 22575, 22577, 22578, 22579, 22580, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22606, 22607, 22608, 22610, 22611, 22613, 22614, 22615, 22617, 22618, 22619, 22620, 22621, 22623, 22624, 22625, 22626, 22627, 22628, 22630, 22631, 22632, 22633, 22634, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22655, 22658, 22660, 22662, 22663, 22664, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22676, 22677, 22678, 22679, 22680, 22683, 22684, 22685, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22717, 22718, 22719, 22720, 22722, 22723, 22724, 22726, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22738, 22739, 22740, 22742, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22757, 22758, 22759, 22760, 22761, 22762, 22765, 22767, 22769, 22770, 22772, 22773, 22775, 22776, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22787, 22789, 22790, 22792, 22793, 22794, 22795, 22796, 22798, 22800, 22801, 22802, 22803, 22807, 22808, 22811, 22813, 22814, 22816, 22817, 22818, 22819, 22822, 22824, 22828, 22832, 22834, 22835, 22837, 22838, 22843, 22845, 22846, 22847, 22848, 22851, 22853, 22854, 22858, 22860, 22861, 22864, 22866, 22867, 22873, 22875, 22876, 22877, 22878, 22879, 22881, 22883, 22884, 22886, 22887, 22888, 22889, 22890, 22891, 22892, 22893, 22894, 22895, 22896, 22897, 22898, 22901, 22903, 22906, 22907, 22908, 22910, 22911, 22912, 22917, 22921, 22923, 22924, 22926, 22927, 22928, 22929, 22932, 22933, 22936, 22938, 22939, 22940, 22941, 22943, 22944, 22945, 22946, 22950, 22951, 22956, 22957, 22960, 22961, 22963, 22964, 22965, 22966, 22967, 22968, 22970, 22972, 22973, 22975, 22976, 22977, 22978, 22979, 22980, 22981, 22983, 22984, 22985, 22988, 22989, 22990, 22991, 22997, 22998, 23001, 23003, 23006, 23007, 23008, 23009, 23010, 23012, 23014, 23015, 23017, 23018, 23019, 23021, 23022, 23023, 23024, 23025, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23034, 23036, 23037, 23038, 23040, 23042, 23050, 23051, 23053, 23054, 23055, 23056, 23058, 23060, 23061, 23062, 23063, 23065, 23066, 23067, 23069, 23070, 23073, 23074, 23076, 23078, 23079, 23080, 23082, 23083, 23084, 23085, 23086, 23087, 23088, 23091, 23093, 23095, 23096, 23097, 23098, 23099, 23101, 23102, 23103, 23105, 23106, 23107, 23108, 23109, 23111, 23112, 23115, 23116, 23117, 23118, 23119, 23120, 23121, 23122, 23123, 23124, 23126, 23127, 23128, 23129, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23139, 23140, 23141, 23142, 23144, 23145, 23147, 23148, 23149, 23150, 23151, 23152, 23153, 23154, 23155, 23160, 23161, 23163, 23164, 23165, 23166, 23168, 23169, 23170, 23171, 23172, 23173, 23174, 23175, 23176, 23177, 23178, 23179, 23180, 23181, 23182, 23183, 23184, 23185, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23196, 23197, 23198, 23199, 23200, 23201, 23202, 23203, 23204, 23205, 23206, 23207, 23208, 23209, 23211, 23212, 23213, 23214, 23215, 23216, 23217, 23220, 23222, 23223, 23225, 23226, 23227, 23228, 23229, 23231, 23232, 23235, 23236, 23237, 23238, 23239, 23240, 23242, 23243, 23245, 23246, 23247, 23248, 23249, 23251, 23253, 23255, 23257, 23258, 23259, 23261, 23262, 23263, 23266, 23268, 23269, 23271, 23272, 23274, 23276, 23277, 23278, 23279, 23280, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23300, 23301, 23302, 23303, 23304, 23306, 23307, 23308, 23309, 23310, 23311, 23312, 23313, 23314, 23315, 23316, 23317, 23320, 23321, 23322, 23323, 23324, 23325, 23326, 23327, 23328, 23329, 23330, 23331, 23332, 23333, 23334, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23343, 23344, 23345, 23347, 23349, 23350, 23352, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23361, 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, 23372, 23373, 23374, 23375, 23378, 23382, 23390, 23392, 23393, 23399, 23400, 23403, 23405, 23406, 23407, 23410, 23412, 23414, 23415, 23416, 23417, 23419, 23420, 23422, 23423, 23426, 23430, 23434, 23437, 23438, 23440, 23441, 23442, 23444, 23446, 23455, 23463, 23464, 23465, 23468, 23469, 23470, 23471, 23473, 23474, 23479, 23482, 23483, 23484, 23488, 23489, 23491, 23496, 23497, 23498, 23499, 23501, 23502, 23503, 23505, 23508, 23509, 23510, 23511, 23512, 23513, 23514, 23515, 23516, 23520, 23522, 23523, 23526, 23527, 23529, 23530, 23531, 23532, 23533, 23535, 23537, 23538, 23539, 23540, 23541, 23542, 23543, 23549, 23550, 23552, 23554, 23555, 23557, 23559, 23560, 23563, 23564, 23565, 23566, 23568, 23570, 23571, 23575, 23577, 23579, 23582, 23583, 23584, 23585, 23587, 23590, 23592, 23593, 23594, 23595, 23597, 23598, 23599, 23600, 23602, 23603, 23605, 23606, 23607, 23619, 23620, 23622, 23623, 23628, 23629, 23634, 23635, 23636, 23638, 23639, 23640, 23642, 23643, 23644, 23645, 23647, 23650, 23652, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23664, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23675, 23676, 23677, 23678, 23680, 23683, 23684, 23685, 23686, 23687, 23689, 23690, 23691, 23694, 23695, 23698, 23699, 23701, 23709, 23710, 23711, 23712, 23713, 23716, 23717, 23718, 23719, 23720, 23722, 23726, 23727, 23728, 23730, 23732, 23734, 23737, 23738, 23739, 23740, 23742, 23744, 23746, 23747, 23749, 23750, 23751, 23752, 23753, 23754, 23756, 23757, 23758, 23759, 23760, 23761, 23763, 23764, 23765, 23766, 23767, 23768, 23770, 23771, 23772, 23773, 23774, 23775, 23776, 23778, 23779, 23783, 23785, 23787, 23788, 23790, 23791, 23793, 23794, 23795, 23796, 23797, 23798, 23799, 23800, 23801, 23802, 23804, 23805, 23806, 23807, 23808, 23809, 23812, 23813, 23816, 23817, 23818, 23819, 23820, 23821, 23823, 23824, 23825, 23826, 23827, 23829, 23831, 23832, 23833, 23834, 23836, 23837, 23839, 23840, 23841, 23842, 23843, 23845, 23848, 23850, 23851, 23852, 23855, 23856, 23857, 23858, 23859, 23861, 23862, 23863, 23864, 23865, 23866, 23867, 23868, 23871, 23872, 23873, 23874, 23875, 23876, 23877, 23878, 23880, 23881, 23885, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23895, 23897, 23898, 23900, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23911, 23912, 23914, 23917, 23918, 23920, 23921, 23922, 23923, 23925, 23926, 23927, 23928, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23936, 23937, 23939, 23940, 23941, 23942, 23943, 23944, 23945, 23946, 23947, 23948, 23949, 23950, 23951, 23952, 23953, 23954, 23955, 23956, 23957, 23958, 23959, 23960, 23962, 23963, 23964, 23966, 23967, 23968, 23969, 23970, 23971, 23972, 23973, 23974, 23975, 23976, 23977, 23978, 23979, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23988, 23989, 23990, 23992, 23993, 23994, 23995, 23996, 23997, 23998, 23999, 24e3, 24001, 24002, 24003, 24004, 24006, 24007, 24008, 24009, 24010, 24011, 24012, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24024, 24025, 24026, 24028, 24031, 24032, 24035, 24036, 24042, 24044, 24045, 24048, 24053, 24054, 24056, 24057, 24058, 24059, 24060, 24063, 24064, 24068, 24071, 24073, 24074, 24075, 24077, 24078, 24082, 24083, 24087, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24104, 24105, 24106, 24107, 24108, 24111, 24112, 24114, 24115, 24116, 24117, 24118, 24121, 24122, 24126, 24127, 24128, 24129, 24131, 24134, 24135, 24136, 24137, 24138, 24139, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24150, 24151, 24152, 24153, 24154, 24156, 24157, 24159, 24160, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 24174, 24175, 24176, 24177, 24181, 24183, 24185, 24190, 24193, 24194, 24195, 24197, 24200, 24201, 24204, 24205, 24206, 24210, 24216, 24219, 24221, 24225, 24226, 24227, 24228, 24232, 24233, 24234, 24235, 24236, 24238, 24239, 24240, 24241, 24242, 24244, 24250, 24251, 24252, 24253, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24267, 24268, 24269, 24270, 24271, 24272, 24276, 24277, 24279, 24280, 24281, 24282, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24297, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24309, 24312, 24313, 24315, 24316, 24317, 24325, 24326, 24327, 24329, 24332, 24333, 24334, 24336, 24338, 24340, 24342, 24345, 24346, 24348, 24349, 24350, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24379, 24381, 24382, 24383, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24401, 24404, 24409, 24410, 24411, 24412, 24414, 24415, 24416, 24419, 24421, 24423, 24424, 24427, 24430, 24431, 24434, 24436, 24437, 24438, 24440, 24442, 24445, 24446, 24447, 24451, 24454, 24461, 24462, 24463, 24465, 24467, 24468, 24470, 24474, 24475, 24477, 24478, 24479, 24480, 24482, 24483, 24484, 24485, 24486, 24487, 24489, 24491, 24492, 24495, 24496, 24497, 24498, 24499, 24500, 24502, 24504, 24505, 24506, 24507, 24510, 24511, 24512, 24513, 24514, 24519, 24520, 24522, 24523, 24526, 24531, 24532, 24533, 24538, 24539, 24540, 24542, 24543, 24546, 24547, 24549, 24550, 24552, 24553, 24556, 24559, 24560, 24562, 24563, 24564, 24566, 24567, 24569, 24570, 24572, 24583, 24584, 24585, 24587, 24588, 24592, 24593, 24595, 24599, 24600, 24602, 24606, 24607, 24610, 24611, 24612, 24620, 24621, 24622, 24624, 24625, 24626, 24627, 24628, 24630, 24631, 24632, 24633, 24634, 24637, 24638, 24640, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24652, 24654, 24655, 24657, 24659, 24660, 24662, 24663, 24664, 24667, 24668, 24670, 24671, 24672, 24673, 24677, 24678, 24686, 24689, 24690, 24692, 24693, 24695, 24702, 24704, 24705, 24706, 24709, 24710, 24711, 24712, 24714, 24715, 24718, 24719, 24720, 24721, 24723, 24725, 24727, 24728, 24729, 24732, 24734, 24737, 24738, 24740, 24741, 24743, 24745, 24746, 24750, 24752, 24755, 24757, 24758, 24759, 24761, 24762, 24765, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24775, 24776, 24777, 24780, 24781, 24782, 24783, 24784, 24786, 24787, 24788, 24790, 24791, 24793, 24795, 24798, 24801, 24802, 24803, 24804, 24805, 24810, 24817, 24818, 24821, 24823, 24824, 24827, 24828, 24829, 24830, 24831, 24834, 24835, 24836, 24837, 24839, 24842, 24843, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24856, 24857, 24859, 24860, 24861, 24862, 24865, 24866, 24869, 24872, 24873, 24874, 24876, 24877, 24878, 24879, 24880, 24881, 24882, 24883, 24884, 24885, 24886, 24887, 24888, 24889, 24890, 24891, 24892, 24893, 24894, 24896, 24897, 24898, 24899, 24900, 24901, 24902, 24903, 24905, 24907, 24909, 24911, 24912, 24914, 24915, 24916, 24918, 24919, 24920, 24921, 24922, 24923, 24924, 24926, 24927, 24928, 24929, 24931, 24932, 24933, 24934, 24937, 24938, 24939, 24940, 24941, 24942, 24943, 24945, 24946, 24947, 24948, 24950, 24952, 24953, 24954, 24955, 24956, 24957, 24958, 24959, 24960, 24961, 24962, 24963, 24964, 24965, 24966, 24967, 24968, 24969, 24970, 24972, 24973, 24975, 24976, 24977, 24978, 24979, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 25002, 25003, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25016, 25017, 25018, 25019, 25020, 25021, 25023, 25024, 25025, 25027, 25028, 25029, 25030, 25031, 25033, 25036, 25037, 25038, 25039, 25040, 25043, 25045, 25046, 25047, 25048, 25049, 25050, 25051, 25052, 25053, 25054, 25055, 25056, 25057, 25058, 25059, 25060, 25061, 25063, 25064, 25065, 25066, 25067, 25068, 25069, 25070, 25071, 25072, 25073, 25074, 25075, 25076, 25078, 25079, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25088, 25089, 25090, 25091, 25092, 25093, 25095, 25097, 25107, 25108, 25113, 25116, 25117, 25118, 25120, 25123, 25126, 25127, 25128, 25129, 25131, 25133, 25135, 25136, 25137, 25138, 25141, 25142, 25144, 25145, 25146, 25147, 25148, 25154, 25156, 25157, 25158, 25162, 25167, 25168, 25173, 25174, 25175, 25177, 25178, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25188, 25189, 25192, 25201, 25202, 25204, 25205, 25207, 25208, 25210, 25211, 25213, 25217, 25218, 25219, 25221, 25222, 25223, 25224, 25227, 25228, 25229, 25230, 25231, 25232, 25236, 25241, 25244, 25245, 25246, 25251, 25254, 25255, 25257, 25258, 25261, 25262, 25263, 25264, 25266, 25267, 25268, 25270, 25271, 25272, 25274, 25278, 25280, 25281, 25283, 25291, 25295, 25297, 25301, 25309, 25310, 25312, 25313, 25316, 25322, 25323, 25328, 25330, 25333, 25336, 25337, 25338, 25339, 25344, 25347, 25348, 25349, 25350, 25354, 25355, 25356, 25357, 25359, 25360, 25362, 25363, 25364, 25365, 25367, 25368, 25369, 25372, 25382, 25383, 25385, 25388, 25389, 25390, 25392, 25393, 25395, 25396, 25397, 25398, 25399, 25400, 25403, 25404, 25406, 25407, 25408, 25409, 25412, 25415, 25416, 25418, 25425, 25426, 25427, 25428, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25440, 25444, 25445, 25446, 25448, 25450, 25451, 25452, 25455, 25456, 25458, 25459, 25460, 25461, 25464, 25465, 25468, 25469, 25470, 25471, 25473, 25475, 25476, 25477, 25478, 25483, 25485, 25489, 25491, 25492, 25493, 25495, 25497, 25498, 25499, 25500, 25501, 25502, 25503, 25505, 25508, 25510, 25515, 25519, 25521, 25522, 25525, 25526, 25529, 25531, 25533, 25535, 25536, 25537, 25538, 25539, 25541, 25543, 25544, 25546, 25547, 25548, 25553, 25555, 25556, 25557, 25559, 25560, 25561, 25562, 25563, 25564, 25565, 25567, 25570, 25572, 25573, 25574, 25575, 25576, 25579, 25580, 25582, 25583, 25584, 25585, 25587, 25589, 25591, 25593, 25594, 25595, 25596, 25598, 25603, 25604, 25606, 25607, 25608, 25609, 25610, 25613, 25614, 25617, 25618, 25621, 25622, 25623, 25624, 25625, 25626, 25629, 25631, 25634, 25635, 25636, 25637, 25639, 25640, 25641, 25643, 25646, 25647, 25648, 25649, 25650, 25651, 25653, 25654, 25655, 25656, 25657, 25659, 25660, 25662, 25664, 25666, 25667, 25673, 25675, 25676, 25677, 25678, 25679, 25680, 25681, 25683, 25685, 25686, 25687, 25689, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25698, 25699, 25700, 25701, 25702, 25704, 25706, 25707, 25708, 25710, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25731, 25734, 25736, 25737, 25738, 25739, 25740, 25741, 25742, 25743, 25744, 25747, 25748, 25751, 25752, 25754, 25755, 25756, 25757, 25759, 25760, 25761, 25762, 25763, 25765, 25766, 25767, 25768, 25770, 25771, 25775, 25777, 25778, 25779, 25780, 25782, 25785, 25787, 25789, 25790, 25791, 25793, 25795, 25796, 25798, 25799, 25800, 25801, 25802, 25803, 25804, 25807, 25809, 25811, 25812, 25813, 25814, 25817, 25818, 25819, 25820, 25821, 25823, 25824, 25825, 25827, 25829, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25857, 25858, 25859, 25860, 25861, 25862, 25863, 25864, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25875, 25876, 25877, 25878, 25879, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25894, 25895, 25896, 25897, 25898, 25900, 25901, 25904, 25905, 25906, 25907, 25911, 25914, 25916, 25917, 25920, 25921, 25922, 25923, 25924, 25926, 25927, 25930, 25931, 25933, 25934, 25936, 25938, 25939, 25940, 25943, 25944, 25946, 25948, 25951, 25952, 25953, 25956, 25957, 25959, 25960, 25961, 25962, 25965, 25966, 25967, 25969, 25971, 25973, 25974, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25992, 25993, 25994, 25997, 25998, 25999, 26002, 26004, 26005, 26006, 26008, 26010, 26013, 26014, 26016, 26018, 26019, 26022, 26024, 26026, 26028, 26030, 26033, 26034, 26035, 26036, 26037, 26038, 26039, 26040, 26042, 26043, 26046, 26047, 26048, 26050, 26055, 26056, 26057, 26058, 26061, 26064, 26065, 26067, 26068, 26069, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26081, 26083, 26084, 26090, 26091, 26098, 26099, 26100, 26101, 26104, 26105, 26107, 26108, 26109, 26110, 26111, 26113, 26116, 26117, 26119, 26120, 26121, 26123, 26125, 26128, 26129, 26130, 26134, 26135, 26136, 26138, 26139, 26140, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26162, 26163, 26167, 26168, 26169, 26170, 26171, 26173, 26175, 26176, 26178, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26189, 26190, 26192, 26193, 26200, 26201, 26203, 26204, 26205, 26206, 26208, 26210, 26211, 26213, 26215, 26217, 26218, 26219, 26220, 26221, 26225, 26226, 26227, 26229, 26232, 26233, 26235, 26236, 26237, 26239, 26240, 26241, 26243, 26245, 26246, 26248, 26249, 26250, 26251, 26253, 26254, 26255, 26256, 26258, 26259, 26260, 26261, 26264, 26265, 26266, 26267, 26268, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26281, 26282, 26283, 26284, 26285, 26287, 26288, 26289, 26290, 26291, 26293, 26294, 26295, 26296, 26298, 26299, 26300, 26301, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26310, 26311, 26312, 26313, 26314, 26315, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26323, 26324, 26325, 26326, 26327, 26328, 26330, 26334, 26335, 26336, 26337, 26338, 26339, 26340, 26341, 26343, 26344, 26346, 26347, 26348, 26349, 26350, 26351, 26353, 26357, 26358, 26360, 26362, 26363, 26365, 26369, 26370, 26371, 26372, 26373, 26374, 26375, 26380, 26382, 26383, 26385, 26386, 26387, 26390, 26392, 26393, 26394, 26396, 26398, 26400, 26401, 26402, 26403, 26404, 26405, 26407, 26409, 26414, 26416, 26418, 26419, 26422, 26423, 26424, 26425, 26427, 26428, 26430, 26431, 26433, 26436, 26437, 26439, 26442, 26443, 26445, 26450, 26452, 26453, 26455, 26456, 26457, 26458, 26459, 26461, 26466, 26467, 26468, 26470, 26471, 26475, 26476, 26478, 26481, 26484, 26486, 26488, 26489, 26490, 26491, 26493, 26496, 26498, 26499, 26501, 26502, 26504, 26506, 26508, 26509, 26510, 26511, 26513, 26514, 26515, 26516, 26518, 26521, 26523, 26527, 26528, 26529, 26532, 26534, 26537, 26540, 26542, 26545, 26546, 26548, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26560, 26562, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26581, 26582, 26583, 26587, 26591, 26593, 26595, 26596, 26598, 26599, 26600, 26602, 26603, 26605, 26606, 26610, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26622, 26625, 26626, 26627, 26628, 26630, 26637, 26640, 26642, 26644, 26645, 26648, 26649, 26650, 26651, 26652, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26676, 26677, 26678, 26682, 26683, 26687, 26695, 26699, 26701, 26703, 26706, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26730, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26741, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26754, 26756, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26768, 26769, 26770, 26772, 26773, 26774, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26787, 26788, 26789, 26793, 26794, 26795, 26796, 26798, 26801, 26802, 26804, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26817, 26819, 26820, 26821, 26822, 26823, 26824, 26826, 26828, 26830, 26831, 26832, 26833, 26835, 26836, 26838, 26839, 26841, 26843, 26844, 26845, 26846, 26847, 26849, 26850, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26863, 26866, 26867, 26868, 26870, 26871, 26872, 26875, 26877, 26878, 26879, 26880, 26882, 26883, 26884, 26886, 26887, 26888, 26889, 26890, 26892, 26895, 26897, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26913, 26914, 26915, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26926, 26927, 26929, 26930, 26931, 26933, 26934, 26935, 26936, 26938, 26939, 26940, 26942, 26944, 26945, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26965, 26966, 26968, 26969, 26971, 26972, 26975, 26977, 26978, 26980, 26981, 26983, 26984, 26985, 26986, 26988, 26989, 26991, 26992, 26994, 26995, 26996, 26997, 26998, 27002, 27003, 27005, 27006, 27007, 27009, 27011, 27013, 27018, 27019, 27020, 27022, 27023, 27024, 27025, 27026, 27027, 27030, 27031, 27033, 27034, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27049, 27050, 27052, 27054, 27055, 27056, 27058, 27059, 27061, 27062, 27064, 27065, 27066, 27068, 27069, 27070, 27071, 27072, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27083, 27085, 27087, 27089, 27090, 27091, 27093, 27094, 27095, 27096, 27097, 27098, 27100, 27101, 27102, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27118, 27119, 27120, 27121, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27134, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27161, 27162, 27163, 27164, 27165, 27166, 27168, 27170, 27171, 27172, 27173, 27174, 27175, 27177, 27179, 27180, 27181, 27182, 27184, 27186, 27187, 27188, 27190, 27191, 27192, 27193, 27194, 27195, 27196, 27199, 27200, 27201, 27202, 27203, 27205, 27206, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27215, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27226, 27228, 27229, 27230, 27231, 27232, 27234, 27235, 27236, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27258, 27259, 27261, 27262, 27263, 27265, 27266, 27267, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27279, 27282, 27283, 27284, 27285, 27286, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27297, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27306, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27429, 27430, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27443, 27444, 27445, 27446, 27448, 27451, 27452, 27453, 27455, 27456, 27457, 27458, 27460, 27461, 27464, 27466, 27467, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27478, 27479, 27480, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27496, 27497, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27514, 27517, 27518, 27519, 27520, 27525, 27528, 27532, 27534, 27535, 27536, 27537, 27540, 27541, 27543, 27544, 27545, 27548, 27549, 27550, 27551, 27552, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27574, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27584, 27587, 27588, 27590, 27591, 27592, 27593, 27594, 27596, 27598, 27600, 27601, 27608, 27610, 27612, 27613, 27614, 27615, 27616, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27628, 27629, 27630, 27632, 27633, 27634, 27636, 27638, 27639, 27640, 27642, 27643, 27644, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27656, 27657, 27658, 27659, 27660, 27662, 27666, 27671, 27676, 27677, 27678, 27680, 27683, 27685, 27691, 27692, 27693, 27697, 27699, 27702, 27703, 27705, 27706, 27707, 27708, 27710, 27711, 27715, 27716, 27717, 27720, 27723, 27724, 27725, 27726, 27727, 27729, 27730, 27731, 27734, 27736, 27737, 27738, 27746, 27747, 27749, 27750, 27751, 27755, 27756, 27757, 27758, 27759, 27761, 27763, 27765, 27767, 27768, 27770, 27771, 27772, 27775, 27776, 27780, 27783, 27786, 27787, 27789, 27790, 27793, 27794, 27797, 27798, 27799, 27800, 27802, 27804, 27805, 27806, 27808, 27810, 27816, 27820, 27823, 27824, 27828, 27829, 27830, 27831, 27834, 27840, 27841, 27842, 27843, 27846, 27847, 27848, 27851, 27853, 27854, 27855, 27857, 27858, 27864, 27865, 27866, 27868, 27869, 27871, 27876, 27878, 27879, 27881, 27884, 27885, 27890, 27892, 27897, 27903, 27904, 27906, 27907, 27909, 27910, 27912, 27913, 27914, 27917, 27919, 27920, 27921, 27923, 27924, 27925, 27926, 27928, 27932, 27933, 27935, 27936, 27937, 27938, 27939, 27940, 27942, 27944, 27945, 27948, 27949, 27951, 27952, 27956, 27958, 27959, 27960, 27962, 27967, 27968, 27970, 27972, 27977, 27980, 27984, 27989, 27990, 27991, 27992, 27995, 27997, 27999, 28001, 28002, 28004, 28005, 28007, 28008, 28011, 28012, 28013, 28016, 28017, 28018, 28019, 28021, 28022, 28025, 28026, 28027, 28029, 28030, 28031, 28032, 28033, 28035, 28036, 28038, 28039, 28042, 28043, 28045, 28047, 28048, 28050, 28054, 28055, 28056, 28057, 28058, 28060, 28066, 28069, 28076, 28077, 28080, 28081, 28083, 28084, 28086, 28087, 28089, 28090, 28091, 28092, 28093, 28094, 28097, 28098, 28099, 28104, 28105, 28106, 28109, 28110, 28111, 28112, 28114, 28115, 28116, 28117, 28119, 28122, 28123, 28124, 28127, 28130, 28131, 28133, 28135, 28136, 28137, 28138, 28141, 28143, 28144, 28146, 28148, 28149, 28150, 28152, 28154, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28166, 28167, 28168, 28169, 28171, 28175, 28178, 28179, 28181, 28184, 28185, 28187, 28188, 28190, 28191, 28194, 28198, 28199, 28200, 28202, 28204, 28206, 28208, 28209, 28211, 28213, 28214, 28215, 28217, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28239, 28240, 28241, 28242, 28245, 28247, 28249, 28250, 28252, 28253, 28254, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28268, 28269, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28288, 28289, 28290, 28292, 28295, 28296, 28298, 28299, 28300, 28301, 28302, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28313, 28314, 28315, 28317, 28318, 28320, 28321, 28323, 28324, 28326, 28328, 28329, 28331, 28332, 28333, 28334, 28336, 28339, 28341, 28344, 28345, 28348, 28350, 28351, 28352, 28355, 28356, 28357, 28358, 28360, 28361, 28362, 28364, 28365, 28366, 28368, 28370, 28374, 28376, 28377, 28379, 28380, 28381, 28387, 28391, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28405, 28406, 28407, 28408, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28419, 28420, 28421, 28423, 28424, 28426, 28427, 28428, 28429, 28430, 28432, 28433, 28434, 28438, 28439, 28440, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28449, 28450, 28451, 28453, 28454, 28455, 28456, 28460, 28462, 28464, 28466, 28468, 28469, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28488, 28489, 28490, 28492, 28494, 28495, 28496, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28505, 28506, 28507, 28509, 28511, 28512, 28513, 28515, 28516, 28517, 28519, 28520, 28521, 28522, 28523, 28524, 28527, 28528, 28529, 28531, 28533, 28534, 28535, 28537, 28539, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28549, 28550, 28551, 28554, 28555, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28573, 28574, 28575, 28576, 28578, 28579, 28580, 28581, 28582, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28596, 28597, 28599, 28600, 28602, 28603, 28604, 28605, 28606, 28607, 28609, 28611, 28612, 28613, 28614, 28615, 28616, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28639, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28650, 28651, 28652, 28653, 28656, 28657, 28658, 28659, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28688, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28726, 28727, 28728, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28749, 28750, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28767, 28768, 28769, 28770, 28771, 28772, 28773, 28774, 28775, 28776, 28777, 28778, 28782, 28785, 28786, 28787, 28788, 28791, 28793, 28794, 28795, 28797, 28801, 28802, 28803, 28804, 28806, 28807, 28808, 28811, 28812, 28813, 28815, 28816, 28817, 28819, 28823, 28824, 28826, 28827, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28848, 28850, 28852, 28853, 28854, 28858, 28862, 28863, 28868, 28869, 28870, 28871, 28873, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28883, 28884, 28885, 28886, 28887, 28890, 28892, 28893, 28894, 28896, 28897, 28898, 28899, 28901, 28906, 28910, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28920, 28922, 28923, 28924, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28939, 28940, 28941, 28942, 28943, 28945, 28946, 28948, 28951, 28955, 28956, 28957, 28958, 28959, 28960, 28961, 28962, 28963, 28964, 28965, 28967, 28968, 28969, 28970, 28971, 28972, 28973, 28974, 28978, 28979, 28980, 28981, 28983, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 28991, 28992, 28993, 28994, 28995, 28996, 28998, 28999, 29e3, 29001, 29003, 29005, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29021, 29023, 29024, 29025, 29026, 29027, 29029, 29033, 29034, 29035, 29036, 29037, 29039, 29040, 29041, 29044, 29045, 29046, 29047, 29049, 29051, 29052, 29054, 29055, 29056, 29057, 29058, 29059, 29061, 29062, 29063, 29064, 29065, 29067, 29068, 29069, 29070, 29072, 29073, 29074, 29075, 29077, 29078, 29079, 29082, 29083, 29084, 29085, 29086, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29097, 29098, 29099, 29101, 29102, 29103, 29104, 29105, 29106, 29108, 29110, 29111, 29112, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29135, 29136, 29137, 29138, 29139, 29142, 29143, 29144, 29145, 29146, 29147, 29148, 29149, 29150, 29151, 29153, 29154, 29155, 29156, 29158, 29160, 29161, 29162, 29163, 29164, 29165, 29167, 29168, 29169, 29170, 29171, 29172, 29173, 29174, 29175, 29176, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29191, 29192, 29193, 29194, 29195, 29196, 29197, 29198, 29199, 29200, 29201, 29202, 29203, 29204, 29205, 29206, 29207, 29208, 29209, 29210, 29211, 29212, 29214, 29215, 29216, 29217, 29218, 29219, 29220, 29221, 29222, 29223, 29225, 29227, 29229, 29230, 29231, 29234, 29235, 29236, 29242, 29244, 29246, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29257, 29258, 29259, 29262, 29263, 29264, 29265, 29267, 29268, 29269, 29271, 29272, 29274, 29276, 29278, 29280, 29283, 29284, 29285, 29288, 29290, 29291, 29292, 29293, 29296, 29297, 29299, 29300, 29302, 29303, 29304, 29307, 29308, 29309, 29314, 29315, 29317, 29318, 29319, 29320, 29321, 29324, 29326, 29328, 29329, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29358, 29361, 29362, 29363, 29365, 29370, 29371, 29372, 29373, 29374, 29375, 29376, 29381, 29382, 29383, 29385, 29386, 29387, 29388, 29391, 29393, 29395, 29396, 29397, 29398, 29400, 29402, 29403, 58566, 58567, 58568, 58569, 58570, 58571, 58572, 58573, 58574, 58575, 58576, 58577, 58578, 58579, 58580, 58581, 58582, 58583, 58584, 58585, 58586, 58587, 58588, 58589, 58590, 58591, 58592, 58593, 58594, 58595, 58596, 58597, 58598, 58599, 58600, 58601, 58602, 58603, 58604, 58605, 58606, 58607, 58608, 58609, 58610, 58611, 58612, 58613, 58614, 58615, 58616, 58617, 58618, 58619, 58620, 58621, 58622, 58623, 58624, 58625, 58626, 58627, 58628, 58629, 58630, 58631, 58632, 58633, 58634, 58635, 58636, 58637, 58638, 58639, 58640, 58641, 58642, 58643, 58644, 58645, 58646, 58647, 58648, 58649, 58650, 58651, 58652, 58653, 58654, 58655, 58656, 58657, 58658, 58659, 58660, 58661, 12288, 12289, 12290, 183, 713, 711, 168, 12291, 12293, 8212, 65374, 8214, 8230, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12310, 12311, 12304, 12305, 177, 215, 247, 8758, 8743, 8744, 8721, 8719, 8746, 8745, 8712, 8759, 8730, 8869, 8741, 8736, 8978, 8857, 8747, 8750, 8801, 8780, 8776, 8765, 8733, 8800, 8814, 8815, 8804, 8805, 8734, 8757, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65284, 164, 65504, 65505, 8240, 167, 8470, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 8251, 8594, 8592, 8593, 8595, 12307, 58662, 58663, 58664, 58665, 58666, 58667, 58668, 58669, 58670, 58671, 58672, 58673, 58674, 58675, 58676, 58677, 58678, 58679, 58680, 58681, 58682, 58683, 58684, 58685, 58686, 58687, 58688, 58689, 58690, 58691, 58692, 58693, 58694, 58695, 58696, 58697, 58698, 58699, 58700, 58701, 58702, 58703, 58704, 58705, 58706, 58707, 58708, 58709, 58710, 58711, 58712, 58713, 58714, 58715, 58716, 58717, 58718, 58719, 58720, 58721, 58722, 58723, 58724, 58725, 58726, 58727, 58728, 58729, 58730, 58731, 58732, 58733, 58734, 58735, 58736, 58737, 58738, 58739, 58740, 58741, 58742, 58743, 58744, 58745, 58746, 58747, 58748, 58749, 58750, 58751, 58752, 58753, 58754, 58755, 58756, 58757, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 59238, 59239, 59240, 59241, 59242, 59243, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 8364, 59245, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 59246, 59247, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 59248, 59249, 58758, 58759, 58760, 58761, 58762, 58763, 58764, 58765, 58766, 58767, 58768, 58769, 58770, 58771, 58772, 58773, 58774, 58775, 58776, 58777, 58778, 58779, 58780, 58781, 58782, 58783, 58784, 58785, 58786, 58787, 58788, 58789, 58790, 58791, 58792, 58793, 58794, 58795, 58796, 58797, 58798, 58799, 58800, 58801, 58802, 58803, 58804, 58805, 58806, 58807, 58808, 58809, 58810, 58811, 58812, 58813, 58814, 58815, 58816, 58817, 58818, 58819, 58820, 58821, 58822, 58823, 58824, 58825, 58826, 58827, 58828, 58829, 58830, 58831, 58832, 58833, 58834, 58835, 58836, 58837, 58838, 58839, 58840, 58841, 58842, 58843, 58844, 58845, 58846, 58847, 58848, 58849, 58850, 58851, 58852, 12288, 65281, 65282, 65283, 65509, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65340, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 58854, 58855, 58856, 58857, 58858, 58859, 58860, 58861, 58862, 58863, 58864, 58865, 58866, 58867, 58868, 58869, 58870, 58871, 58872, 58873, 58874, 58875, 58876, 58877, 58878, 58879, 58880, 58881, 58882, 58883, 58884, 58885, 58886, 58887, 58888, 58889, 58890, 58891, 58892, 58893, 58894, 58895, 58896, 58897, 58898, 58899, 58900, 58901, 58902, 58903, 58904, 58905, 58906, 58907, 58908, 58909, 58910, 58911, 58912, 58913, 58914, 58915, 58916, 58917, 58918, 58919, 58920, 58921, 58922, 58923, 58924, 58925, 58926, 58927, 58928, 58929, 58930, 58931, 58932, 58933, 58934, 58935, 58936, 58937, 58938, 58939, 58940, 58941, 58942, 58943, 58944, 58945, 58946, 58947, 58948, 58949, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 59250, 59251, 59252, 59253, 59254, 59255, 59256, 59257, 59258, 59259, 59260, 58950, 58951, 58952, 58953, 58954, 58955, 58956, 58957, 58958, 58959, 58960, 58961, 58962, 58963, 58964, 58965, 58966, 58967, 58968, 58969, 58970, 58971, 58972, 58973, 58974, 58975, 58976, 58977, 58978, 58979, 58980, 58981, 58982, 58983, 58984, 58985, 58986, 58987, 58988, 58989, 58990, 58991, 58992, 58993, 58994, 58995, 58996, 58997, 58998, 58999, 59e3, 59001, 59002, 59003, 59004, 59005, 59006, 59007, 59008, 59009, 59010, 59011, 59012, 59013, 59014, 59015, 59016, 59017, 59018, 59019, 59020, 59021, 59022, 59023, 59024, 59025, 59026, 59027, 59028, 59029, 59030, 59031, 59032, 59033, 59034, 59035, 59036, 59037, 59038, 59039, 59040, 59041, 59042, 59043, 59044, 59045, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 59261, 59262, 59263, 59264, 59265, 59266, 59267, 59268, 59046, 59047, 59048, 59049, 59050, 59051, 59052, 59053, 59054, 59055, 59056, 59057, 59058, 59059, 59060, 59061, 59062, 59063, 59064, 59065, 59066, 59067, 59068, 59069, 59070, 59071, 59072, 59073, 59074, 59075, 59076, 59077, 59078, 59079, 59080, 59081, 59082, 59083, 59084, 59085, 59086, 59087, 59088, 59089, 59090, 59091, 59092, 59093, 59094, 59095, 59096, 59097, 59098, 59099, 59100, 59101, 59102, 59103, 59104, 59105, 59106, 59107, 59108, 59109, 59110, 59111, 59112, 59113, 59114, 59115, 59116, 59117, 59118, 59119, 59120, 59121, 59122, 59123, 59124, 59125, 59126, 59127, 59128, 59129, 59130, 59131, 59132, 59133, 59134, 59135, 59136, 59137, 59138, 59139, 59140, 59141, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 59269, 59270, 59271, 59272, 59273, 59274, 59275, 59276, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 59277, 59278, 59279, 59280, 59281, 59282, 59283, 65077, 65078, 65081, 65082, 65087, 65088, 65085, 65086, 65089, 65090, 65091, 65092, 59284, 59285, 65083, 65084, 65079, 65080, 65073, 59286, 65075, 65076, 59287, 59288, 59289, 59290, 59291, 59292, 59293, 59294, 59295, 59142, 59143, 59144, 59145, 59146, 59147, 59148, 59149, 59150, 59151, 59152, 59153, 59154, 59155, 59156, 59157, 59158, 59159, 59160, 59161, 59162, 59163, 59164, 59165, 59166, 59167, 59168, 59169, 59170, 59171, 59172, 59173, 59174, 59175, 59176, 59177, 59178, 59179, 59180, 59181, 59182, 59183, 59184, 59185, 59186, 59187, 59188, 59189, 59190, 59191, 59192, 59193, 59194, 59195, 59196, 59197, 59198, 59199, 59200, 59201, 59202, 59203, 59204, 59205, 59206, 59207, 59208, 59209, 59210, 59211, 59212, 59213, 59214, 59215, 59216, 59217, 59218, 59219, 59220, 59221, 59222, 59223, 59224, 59225, 59226, 59227, 59228, 59229, 59230, 59231, 59232, 59233, 59234, 59235, 59236, 59237, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 59296, 59297, 59298, 59299, 59300, 59301, 59302, 59303, 59304, 59305, 59306, 59307, 59308, 59309, 59310, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 59311, 59312, 59313, 59314, 59315, 59316, 59317, 59318, 59319, 59320, 59321, 59322, 59323, 714, 715, 729, 8211, 8213, 8229, 8245, 8453, 8457, 8598, 8599, 8600, 8601, 8725, 8735, 8739, 8786, 8806, 8807, 8895, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9619, 9620, 9621, 9660, 9661, 9698, 9699, 9700, 9701, 9737, 8853, 12306, 12317, 12318, 59324, 59325, 59326, 59327, 59328, 59329, 59330, 59331, 59332, 59333, 59334, 257, 225, 462, 224, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, 234, 593, 7743, 324, 328, 505, 609, 59337, 59338, 59339, 59340, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 59341, 59342, 59343, 59344, 59345, 59346, 59347, 59348, 59349, 59350, 59351, 59352, 59353, 59354, 59355, 59356, 59357, 59358, 59359, 59360, 59361, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12963, 13198, 13199, 13212, 13213, 13214, 13217, 13252, 13262, 13265, 13266, 13269, 65072, 65506, 65508, 59362, 8481, 12849, 59363, 8208, 59364, 59365, 59366, 12540, 12443, 12444, 12541, 12542, 12294, 12445, 12446, 65097, 65098, 65099, 65100, 65101, 65102, 65103, 65104, 65105, 65106, 65108, 65109, 65110, 65111, 65113, 65114, 65115, 65116, 65117, 65118, 65119, 65120, 65121, 65122, 65123, 65124, 65125, 65126, 65128, 65129, 65130, 65131, 12350, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12295, 59380, 59381, 59382, 59383, 59384, 59385, 59386, 59387, 59388, 59389, 59390, 59391, 59392, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 59393, 59394, 59395, 59396, 59397, 59398, 59399, 59400, 59401, 59402, 59403, 59404, 59405, 59406, 59407, 29404, 29405, 29407, 29410, 29411, 29412, 29413, 29414, 29415, 29418, 29419, 29429, 29430, 29433, 29437, 29438, 29439, 29440, 29442, 29444, 29445, 29446, 29447, 29448, 29449, 29451, 29452, 29453, 29455, 29456, 29457, 29458, 29460, 29464, 29465, 29466, 29471, 29472, 29475, 29476, 29478, 29479, 29480, 29485, 29487, 29488, 29490, 29491, 29493, 29494, 29498, 29499, 29500, 29501, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29518, 29519, 29521, 29523, 29524, 29525, 29526, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29550, 29552, 29553, 57344, 57345, 57346, 57347, 57348, 57349, 57350, 57351, 57352, 57353, 57354, 57355, 57356, 57357, 57358, 57359, 57360, 57361, 57362, 57363, 57364, 57365, 57366, 57367, 57368, 57369, 57370, 57371, 57372, 57373, 57374, 57375, 57376, 57377, 57378, 57379, 57380, 57381, 57382, 57383, 57384, 57385, 57386, 57387, 57388, 57389, 57390, 57391, 57392, 57393, 57394, 57395, 57396, 57397, 57398, 57399, 57400, 57401, 57402, 57403, 57404, 57405, 57406, 57407, 57408, 57409, 57410, 57411, 57412, 57413, 57414, 57415, 57416, 57417, 57418, 57419, 57420, 57421, 57422, 57423, 57424, 57425, 57426, 57427, 57428, 57429, 57430, 57431, 57432, 57433, 57434, 57435, 57436, 57437, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29567, 29568, 29569, 29570, 29571, 29573, 29574, 29576, 29578, 29580, 29581, 29583, 29584, 29586, 29587, 29588, 29589, 29591, 29592, 29593, 29594, 29596, 29597, 29598, 29600, 29601, 29603, 29604, 29605, 29606, 29607, 29608, 29610, 29612, 29613, 29617, 29620, 29621, 29622, 29624, 29625, 29628, 29629, 29630, 29631, 29633, 29635, 29636, 29637, 29638, 29639, 29643, 29644, 29646, 29650, 29651, 29652, 29653, 29654, 29655, 29656, 29658, 29659, 29660, 29661, 29663, 29665, 29666, 29667, 29668, 29670, 29672, 29674, 29675, 29676, 29678, 29679, 29680, 29681, 29683, 29684, 29685, 29686, 29687, 57438, 57439, 57440, 57441, 57442, 57443, 57444, 57445, 57446, 57447, 57448, 57449, 57450, 57451, 57452, 57453, 57454, 57455, 57456, 57457, 57458, 57459, 57460, 57461, 57462, 57463, 57464, 57465, 57466, 57467, 57468, 57469, 57470, 57471, 57472, 57473, 57474, 57475, 57476, 57477, 57478, 57479, 57480, 57481, 57482, 57483, 57484, 57485, 57486, 57487, 57488, 57489, 57490, 57491, 57492, 57493, 57494, 57495, 57496, 57497, 57498, 57499, 57500, 57501, 57502, 57503, 57504, 57505, 57506, 57507, 57508, 57509, 57510, 57511, 57512, 57513, 57514, 57515, 57516, 57517, 57518, 57519, 57520, 57521, 57522, 57523, 57524, 57525, 57526, 57527, 57528, 57529, 57530, 57531, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29700, 29703, 29704, 29707, 29708, 29709, 29710, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29724, 29725, 29726, 29727, 29728, 29729, 29731, 29732, 29735, 29737, 29739, 29741, 29743, 29745, 29746, 29751, 29752, 29753, 29754, 29755, 29757, 29758, 29759, 29760, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29779, 29780, 29782, 29784, 29789, 29792, 29793, 29794, 29795, 29796, 29797, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29806, 29807, 29809, 29810, 29811, 29812, 29813, 29816, 29817, 29818, 57532, 57533, 57534, 57535, 57536, 57537, 57538, 57539, 57540, 57541, 57542, 57543, 57544, 57545, 57546, 57547, 57548, 57549, 57550, 57551, 57552, 57553, 57554, 57555, 57556, 57557, 57558, 57559, 57560, 57561, 57562, 57563, 57564, 57565, 57566, 57567, 57568, 57569, 57570, 57571, 57572, 57573, 57574, 57575, 57576, 57577, 57578, 57579, 57580, 57581, 57582, 57583, 57584, 57585, 57586, 57587, 57588, 57589, 57590, 57591, 57592, 57593, 57594, 57595, 57596, 57597, 57598, 57599, 57600, 57601, 57602, 57603, 57604, 57605, 57606, 57607, 57608, 57609, 57610, 57611, 57612, 57613, 57614, 57615, 57616, 57617, 57618, 57619, 57620, 57621, 57622, 57623, 57624, 57625, 29819, 29820, 29821, 29823, 29826, 29828, 29829, 29830, 29832, 29833, 29834, 29836, 29837, 29839, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29853, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29866, 29867, 29868, 29869, 29870, 29871, 29872, 29873, 29874, 29875, 29876, 29877, 29878, 29879, 29880, 29881, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29917, 29919, 29921, 29925, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29936, 29937, 29938, 57626, 57627, 57628, 57629, 57630, 57631, 57632, 57633, 57634, 57635, 57636, 57637, 57638, 57639, 57640, 57641, 57642, 57643, 57644, 57645, 57646, 57647, 57648, 57649, 57650, 57651, 57652, 57653, 57654, 57655, 57656, 57657, 57658, 57659, 57660, 57661, 57662, 57663, 57664, 57665, 57666, 57667, 57668, 57669, 57670, 57671, 57672, 57673, 57674, 57675, 57676, 57677, 57678, 57679, 57680, 57681, 57682, 57683, 57684, 57685, 57686, 57687, 57688, 57689, 57690, 57691, 57692, 57693, 57694, 57695, 57696, 57697, 57698, 57699, 57700, 57701, 57702, 57703, 57704, 57705, 57706, 57707, 57708, 57709, 57710, 57711, 57712, 57713, 57714, 57715, 57716, 57717, 57718, 57719, 29939, 29941, 29944, 29945, 29946, 29947, 29948, 29949, 29950, 29952, 29953, 29954, 29955, 29957, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29966, 29968, 29970, 29972, 29973, 29974, 29975, 29979, 29981, 29982, 29984, 29985, 29986, 29987, 29988, 29990, 29991, 29994, 29998, 30004, 30006, 30009, 30012, 30013, 30015, 30017, 30018, 30019, 30020, 30022, 30023, 30025, 30026, 30029, 30032, 30033, 30034, 30035, 30037, 30038, 30039, 30040, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30055, 30056, 30057, 30059, 30060, 30061, 30062, 30063, 30064, 30065, 30067, 30069, 30070, 30071, 30074, 30075, 30076, 30077, 30078, 30080, 30081, 30082, 30084, 30085, 30087, 57720, 57721, 57722, 57723, 57724, 57725, 57726, 57727, 57728, 57729, 57730, 57731, 57732, 57733, 57734, 57735, 57736, 57737, 57738, 57739, 57740, 57741, 57742, 57743, 57744, 57745, 57746, 57747, 57748, 57749, 57750, 57751, 57752, 57753, 57754, 57755, 57756, 57757, 57758, 57759, 57760, 57761, 57762, 57763, 57764, 57765, 57766, 57767, 57768, 57769, 57770, 57771, 57772, 57773, 57774, 57775, 57776, 57777, 57778, 57779, 57780, 57781, 57782, 57783, 57784, 57785, 57786, 57787, 57788, 57789, 57790, 57791, 57792, 57793, 57794, 57795, 57796, 57797, 57798, 57799, 57800, 57801, 57802, 57803, 57804, 57805, 57806, 57807, 57808, 57809, 57810, 57811, 57812, 57813, 30088, 30089, 30090, 30092, 30093, 30094, 30096, 30099, 30101, 30104, 30107, 30108, 30110, 30114, 30118, 30119, 30120, 30121, 30122, 30125, 30134, 30135, 30138, 30139, 30143, 30144, 30145, 30150, 30155, 30156, 30158, 30159, 30160, 30161, 30163, 30167, 30169, 30170, 30172, 30173, 30175, 30176, 30177, 30181, 30185, 30188, 30189, 30190, 30191, 30194, 30195, 30197, 30198, 30199, 30200, 30202, 30203, 30205, 30206, 30210, 30212, 30214, 30215, 30216, 30217, 30219, 30221, 30222, 30223, 30225, 30226, 30227, 30228, 30230, 30234, 30236, 30237, 30238, 30241, 30243, 30247, 30248, 30252, 30254, 30255, 30257, 30258, 30262, 30263, 30265, 30266, 30267, 30269, 30273, 30274, 30276, 57814, 57815, 57816, 57817, 57818, 57819, 57820, 57821, 57822, 57823, 57824, 57825, 57826, 57827, 57828, 57829, 57830, 57831, 57832, 57833, 57834, 57835, 57836, 57837, 57838, 57839, 57840, 57841, 57842, 57843, 57844, 57845, 57846, 57847, 57848, 57849, 57850, 57851, 57852, 57853, 57854, 57855, 57856, 57857, 57858, 57859, 57860, 57861, 57862, 57863, 57864, 57865, 57866, 57867, 57868, 57869, 57870, 57871, 57872, 57873, 57874, 57875, 57876, 57877, 57878, 57879, 57880, 57881, 57882, 57883, 57884, 57885, 57886, 57887, 57888, 57889, 57890, 57891, 57892, 57893, 57894, 57895, 57896, 57897, 57898, 57899, 57900, 57901, 57902, 57903, 57904, 57905, 57906, 57907, 30277, 30278, 30279, 30280, 30281, 30282, 30283, 30286, 30287, 30288, 30289, 30290, 30291, 30293, 30295, 30296, 30297, 30298, 30299, 30301, 30303, 30304, 30305, 30306, 30308, 30309, 30310, 30311, 30312, 30313, 30314, 30316, 30317, 30318, 30320, 30321, 30322, 30323, 30324, 30325, 30326, 30327, 30329, 30330, 30332, 30335, 30336, 30337, 30339, 30341, 30345, 30346, 30348, 30349, 30351, 30352, 30354, 30356, 30357, 30359, 30360, 30362, 30363, 30364, 30365, 30366, 30367, 30368, 30369, 30370, 30371, 30373, 30374, 30375, 30376, 30377, 30378, 30379, 30380, 30381, 30383, 30384, 30387, 30389, 30390, 30391, 30392, 30393, 30394, 30395, 30396, 30397, 30398, 30400, 30401, 30403, 21834, 38463, 22467, 25384, 21710, 21769, 21696, 30353, 30284, 34108, 30702, 33406, 30861, 29233, 38552, 38797, 27688, 23433, 20474, 25353, 26263, 23736, 33018, 26696, 32942, 26114, 30414, 20985, 25942, 29100, 32753, 34948, 20658, 22885, 25034, 28595, 33453, 25420, 25170, 21485, 21543, 31494, 20843, 30116, 24052, 25300, 36299, 38774, 25226, 32793, 22365, 38712, 32610, 29240, 30333, 26575, 30334, 25670, 20336, 36133, 25308, 31255, 26001, 29677, 25644, 25203, 33324, 39041, 26495, 29256, 25198, 25292, 20276, 29923, 21322, 21150, 32458, 37030, 24110, 26758, 27036, 33152, 32465, 26834, 30917, 34444, 38225, 20621, 35876, 33502, 32990, 21253, 35090, 21093, 30404, 30407, 30409, 30411, 30412, 30419, 30421, 30425, 30426, 30428, 30429, 30430, 30432, 30433, 30434, 30435, 30436, 30438, 30439, 30440, 30441, 30442, 30443, 30444, 30445, 30448, 30451, 30453, 30454, 30455, 30458, 30459, 30461, 30463, 30464, 30466, 30467, 30469, 30470, 30474, 30476, 30478, 30479, 30480, 30481, 30482, 30483, 30484, 30485, 30486, 30487, 30488, 30491, 30492, 30493, 30494, 30497, 30499, 30500, 30501, 30503, 30506, 30507, 30508, 30510, 30512, 30513, 30514, 30515, 30516, 30521, 30523, 30525, 30526, 30527, 30530, 30532, 30533, 30534, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30556, 34180, 38649, 20445, 22561, 39281, 23453, 25265, 25253, 26292, 35961, 40077, 29190, 26479, 30865, 24754, 21329, 21271, 36744, 32972, 36125, 38049, 20493, 29384, 22791, 24811, 28953, 34987, 22868, 33519, 26412, 31528, 23849, 32503, 29997, 27893, 36454, 36856, 36924, 40763, 27604, 37145, 31508, 24444, 30887, 34006, 34109, 27605, 27609, 27606, 24065, 24199, 30201, 38381, 25949, 24330, 24517, 36767, 22721, 33218, 36991, 38491, 38829, 36793, 32534, 36140, 25153, 20415, 21464, 21342, 36776, 36777, 36779, 36941, 26631, 24426, 33176, 34920, 40150, 24971, 21035, 30250, 24428, 25996, 28626, 28392, 23486, 25672, 20853, 20912, 26564, 19993, 31177, 39292, 28851, 30557, 30558, 30559, 30560, 30564, 30567, 30569, 30570, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30588, 30593, 30594, 30595, 30598, 30599, 30600, 30601, 30602, 30603, 30607, 30608, 30611, 30612, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30620, 30621, 30622, 30625, 30627, 30628, 30630, 30632, 30635, 30637, 30638, 30639, 30641, 30642, 30644, 30646, 30647, 30648, 30649, 30650, 30652, 30654, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30665, 30666, 30667, 30668, 30670, 30671, 30672, 30673, 30674, 30675, 30676, 30677, 30678, 30680, 30681, 30682, 30685, 30686, 30687, 30688, 30689, 30692, 30149, 24182, 29627, 33760, 25773, 25320, 38069, 27874, 21338, 21187, 25615, 38082, 31636, 20271, 24091, 33334, 33046, 33162, 28196, 27850, 39539, 25429, 21340, 21754, 34917, 22496, 19981, 24067, 27493, 31807, 37096, 24598, 25830, 29468, 35009, 26448, 25165, 36130, 30572, 36393, 37319, 24425, 33756, 34081, 39184, 21442, 34453, 27531, 24813, 24808, 28799, 33485, 33329, 20179, 27815, 34255, 25805, 31961, 27133, 26361, 33609, 21397, 31574, 20391, 20876, 27979, 23618, 36461, 25554, 21449, 33580, 33590, 26597, 30900, 25661, 23519, 23700, 24046, 35815, 25286, 26612, 35962, 25600, 25530, 34633, 39307, 35863, 32544, 38130, 20135, 38416, 39076, 26124, 29462, 30694, 30696, 30698, 30703, 30704, 30705, 30706, 30708, 30709, 30711, 30713, 30714, 30715, 30716, 30723, 30724, 30725, 30726, 30727, 30728, 30730, 30731, 30734, 30735, 30736, 30739, 30741, 30745, 30747, 30750, 30752, 30753, 30754, 30756, 30760, 30762, 30763, 30766, 30767, 30769, 30770, 30771, 30773, 30774, 30781, 30783, 30785, 30786, 30787, 30788, 30790, 30792, 30793, 30794, 30795, 30797, 30799, 30801, 30803, 30804, 30808, 30809, 30810, 30811, 30812, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30831, 30832, 30833, 30834, 30835, 30836, 30837, 30838, 30840, 30841, 30842, 30843, 30845, 30846, 30847, 30848, 30849, 30850, 30851, 22330, 23581, 24120, 38271, 20607, 32928, 21378, 25950, 30021, 21809, 20513, 36229, 25220, 38046, 26397, 22066, 28526, 24034, 21557, 28818, 36710, 25199, 25764, 25507, 24443, 28552, 37108, 33251, 36784, 23576, 26216, 24561, 27785, 38472, 36225, 34924, 25745, 31216, 22478, 27225, 25104, 21576, 20056, 31243, 24809, 28548, 35802, 25215, 36894, 39563, 31204, 21507, 30196, 25345, 21273, 27744, 36831, 24347, 39536, 32827, 40831, 20360, 23610, 36196, 32709, 26021, 28861, 20805, 20914, 34411, 23815, 23456, 25277, 37228, 30068, 36364, 31264, 24833, 31609, 20167, 32504, 30597, 19985, 33261, 21021, 20986, 27249, 21416, 36487, 38148, 38607, 28353, 38500, 26970, 30852, 30853, 30854, 30856, 30858, 30859, 30863, 30864, 30866, 30868, 30869, 30870, 30873, 30877, 30878, 30880, 30882, 30884, 30886, 30888, 30889, 30890, 30891, 30892, 30893, 30894, 30895, 30901, 30902, 30903, 30904, 30906, 30907, 30908, 30909, 30911, 30912, 30914, 30915, 30916, 30918, 30919, 30920, 30924, 30925, 30926, 30927, 30929, 30930, 30931, 30934, 30935, 30936, 30938, 30939, 30940, 30941, 30942, 30943, 30944, 30945, 30946, 30947, 30948, 30949, 30950, 30951, 30953, 30954, 30955, 30957, 30958, 30959, 30960, 30961, 30963, 30965, 30966, 30968, 30969, 30971, 30972, 30973, 30974, 30975, 30976, 30978, 30979, 30980, 30982, 30983, 30984, 30985, 30986, 30987, 30988, 30784, 20648, 30679, 25616, 35302, 22788, 25571, 24029, 31359, 26941, 20256, 33337, 21912, 20018, 30126, 31383, 24162, 24202, 38383, 21019, 21561, 28810, 25462, 38180, 22402, 26149, 26943, 37255, 21767, 28147, 32431, 34850, 25139, 32496, 30133, 33576, 30913, 38604, 36766, 24904, 29943, 35789, 27492, 21050, 36176, 27425, 32874, 33905, 22257, 21254, 20174, 19995, 20945, 31895, 37259, 31751, 20419, 36479, 31713, 31388, 25703, 23828, 20652, 33030, 30209, 31929, 28140, 32736, 26449, 23384, 23544, 30923, 25774, 25619, 25514, 25387, 38169, 25645, 36798, 31572, 30249, 25171, 22823, 21574, 27513, 20643, 25140, 24102, 27526, 20195, 36151, 34955, 24453, 36910, 30989, 30990, 30991, 30992, 30993, 30994, 30996, 30997, 30998, 30999, 31e3, 31001, 31002, 31003, 31004, 31005, 31007, 31008, 31009, 31010, 31011, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31029, 31030, 31031, 31032, 31033, 31037, 31039, 31042, 31043, 31044, 31045, 31047, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31060, 31061, 31064, 31065, 31073, 31075, 31076, 31078, 31081, 31082, 31083, 31084, 31086, 31088, 31089, 31090, 31091, 31092, 31093, 31094, 31097, 31099, 31100, 31101, 31102, 31103, 31106, 31107, 31110, 31111, 31112, 31113, 31115, 31116, 31117, 31118, 31120, 31121, 31122, 24608, 32829, 25285, 20025, 21333, 37112, 25528, 32966, 26086, 27694, 20294, 24814, 28129, 35806, 24377, 34507, 24403, 25377, 20826, 33633, 26723, 20992, 25443, 36424, 20498, 23707, 31095, 23548, 21040, 31291, 24764, 36947, 30423, 24503, 24471, 30340, 36460, 28783, 30331, 31561, 30634, 20979, 37011, 22564, 20302, 28404, 36842, 25932, 31515, 29380, 28068, 32735, 23265, 25269, 24213, 22320, 33922, 31532, 24093, 24351, 36882, 32532, 39072, 25474, 28359, 30872, 28857, 20856, 38747, 22443, 30005, 20291, 30008, 24215, 24806, 22880, 28096, 27583, 30857, 21500, 38613, 20939, 20993, 25481, 21514, 38035, 35843, 36300, 29241, 30879, 34678, 36845, 35853, 21472, 31123, 31124, 31125, 31126, 31127, 31128, 31129, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31139, 31140, 31141, 31142, 31144, 31145, 31146, 31147, 31148, 31149, 31150, 31151, 31152, 31153, 31154, 31156, 31157, 31158, 31159, 31160, 31164, 31167, 31170, 31172, 31173, 31175, 31176, 31178, 31180, 31182, 31183, 31184, 31187, 31188, 31190, 31191, 31193, 31194, 31195, 31196, 31197, 31198, 31200, 31201, 31202, 31205, 31208, 31210, 31212, 31214, 31217, 31218, 31219, 31220, 31221, 31222, 31223, 31225, 31226, 31228, 31230, 31231, 31233, 31236, 31237, 31239, 31240, 31241, 31242, 31244, 31247, 31248, 31249, 31250, 31251, 31253, 31254, 31256, 31257, 31259, 31260, 19969, 30447, 21486, 38025, 39030, 40718, 38189, 23450, 35746, 20002, 19996, 20908, 33891, 25026, 21160, 26635, 20375, 24683, 20923, 27934, 20828, 25238, 26007, 38497, 35910, 36887, 30168, 37117, 30563, 27602, 29322, 29420, 35835, 22581, 30585, 36172, 26460, 38208, 32922, 24230, 28193, 22930, 31471, 30701, 38203, 27573, 26029, 32526, 22534, 20817, 38431, 23545, 22697, 21544, 36466, 25958, 39039, 22244, 38045, 30462, 36929, 25479, 21702, 22810, 22842, 22427, 36530, 26421, 36346, 33333, 21057, 24816, 22549, 34558, 23784, 40517, 20420, 39069, 35769, 23077, 24694, 21380, 25212, 36943, 37122, 39295, 24681, 32780, 20799, 32819, 23572, 39285, 27953, 20108, 31261, 31263, 31265, 31266, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31284, 31285, 31286, 31288, 31290, 31294, 31296, 31297, 31298, 31299, 31300, 31301, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31314, 31315, 31316, 31317, 31318, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 31337, 31338, 31339, 31340, 31341, 31342, 31343, 31345, 31346, 31347, 31349, 31355, 31356, 31357, 31358, 31362, 31365, 31367, 31369, 31370, 31371, 31372, 31374, 31375, 31376, 31379, 31380, 31385, 31386, 31387, 31390, 31393, 31394, 36144, 21457, 32602, 31567, 20240, 20047, 38400, 27861, 29648, 34281, 24070, 30058, 32763, 27146, 30718, 38034, 32321, 20961, 28902, 21453, 36820, 33539, 36137, 29359, 39277, 27867, 22346, 33459, 26041, 32938, 25151, 38450, 22952, 20223, 35775, 32442, 25918, 33778, 38750, 21857, 39134, 32933, 21290, 35837, 21536, 32954, 24223, 27832, 36153, 33452, 37210, 21545, 27675, 20998, 32439, 22367, 28954, 27774, 31881, 22859, 20221, 24575, 24868, 31914, 20016, 23553, 26539, 34562, 23792, 38155, 39118, 30127, 28925, 36898, 20911, 32541, 35773, 22857, 20964, 20315, 21542, 22827, 25975, 32932, 23413, 25206, 25282, 36752, 24133, 27679, 31526, 20239, 20440, 26381, 31395, 31396, 31399, 31401, 31402, 31403, 31406, 31407, 31408, 31409, 31410, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31422, 31424, 31425, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31436, 31437, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31447, 31448, 31450, 31451, 31452, 31453, 31457, 31458, 31460, 31463, 31464, 31465, 31466, 31467, 31468, 31470, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31483, 31484, 31486, 31488, 31489, 31490, 31493, 31495, 31497, 31500, 31501, 31502, 31504, 31506, 31507, 31510, 31511, 31512, 31514, 31516, 31517, 31519, 31521, 31522, 31523, 31527, 31529, 31533, 28014, 28074, 31119, 34993, 24343, 29995, 25242, 36741, 20463, 37340, 26023, 33071, 33105, 24220, 33104, 36212, 21103, 35206, 36171, 22797, 20613, 20184, 38428, 29238, 33145, 36127, 23500, 35747, 38468, 22919, 32538, 21648, 22134, 22030, 35813, 25913, 27010, 38041, 30422, 28297, 24178, 29976, 26438, 26577, 31487, 32925, 36214, 24863, 31174, 25954, 36195, 20872, 21018, 38050, 32568, 32923, 32434, 23703, 28207, 26464, 31705, 30347, 39640, 33167, 32660, 31957, 25630, 38224, 31295, 21578, 21733, 27468, 25601, 25096, 40509, 33011, 30105, 21106, 38761, 33883, 26684, 34532, 38401, 38548, 38124, 20010, 21508, 32473, 26681, 36319, 32789, 26356, 24218, 32697, 31535, 31536, 31538, 31540, 31541, 31542, 31543, 31545, 31547, 31549, 31551, 31552, 31553, 31554, 31555, 31556, 31558, 31560, 31562, 31565, 31566, 31571, 31573, 31575, 31577, 31580, 31582, 31583, 31585, 31587, 31588, 31589, 31590, 31591, 31592, 31593, 31594, 31595, 31596, 31597, 31599, 31600, 31603, 31604, 31606, 31608, 31610, 31612, 31613, 31615, 31617, 31618, 31619, 31620, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31630, 31631, 31633, 31634, 31635, 31638, 31640, 31641, 31642, 31643, 31646, 31647, 31648, 31651, 31652, 31653, 31662, 31663, 31664, 31666, 31667, 31669, 31670, 31671, 31673, 31674, 31675, 31676, 31677, 31678, 31679, 31680, 31682, 31683, 31684, 22466, 32831, 26775, 24037, 25915, 21151, 24685, 40858, 20379, 36524, 20844, 23467, 24339, 24041, 27742, 25329, 36129, 20849, 38057, 21246, 27807, 33503, 29399, 22434, 26500, 36141, 22815, 36764, 33735, 21653, 31629, 20272, 27837, 23396, 22993, 40723, 21476, 34506, 39592, 35895, 32929, 25925, 39038, 22266, 38599, 21038, 29916, 21072, 23521, 25346, 35074, 20054, 25296, 24618, 26874, 20851, 23448, 20896, 35266, 31649, 39302, 32592, 24815, 28748, 36143, 20809, 24191, 36891, 29808, 35268, 22317, 30789, 24402, 40863, 38394, 36712, 39740, 35809, 30328, 26690, 26588, 36330, 36149, 21053, 36746, 28378, 26829, 38149, 37101, 22269, 26524, 35065, 36807, 21704, 31685, 31688, 31689, 31690, 31691, 31693, 31694, 31695, 31696, 31698, 31700, 31701, 31702, 31703, 31704, 31707, 31708, 31710, 31711, 31712, 31714, 31715, 31716, 31719, 31720, 31721, 31723, 31724, 31725, 31727, 31728, 31730, 31731, 31732, 31733, 31734, 31736, 31737, 31738, 31739, 31741, 31743, 31744, 31745, 31746, 31747, 31748, 31749, 31750, 31752, 31753, 31754, 31757, 31758, 31760, 31761, 31762, 31763, 31764, 31765, 31767, 31768, 31769, 31770, 31771, 31772, 31773, 31774, 31776, 31777, 31778, 31779, 31780, 31781, 31784, 31785, 31787, 31788, 31789, 31790, 31791, 31792, 31793, 31794, 31795, 31796, 31797, 31798, 31799, 31801, 31802, 31803, 31804, 31805, 31806, 31810, 39608, 23401, 28023, 27686, 20133, 23475, 39559, 37219, 25e3, 37039, 38889, 21547, 28085, 23506, 20989, 21898, 32597, 32752, 25788, 25421, 26097, 25022, 24717, 28938, 27735, 27721, 22831, 26477, 33322, 22741, 22158, 35946, 27627, 37085, 22909, 32791, 21495, 28009, 21621, 21917, 33655, 33743, 26680, 31166, 21644, 20309, 21512, 30418, 35977, 38402, 27827, 28088, 36203, 35088, 40548, 36154, 22079, 40657, 30165, 24456, 29408, 24680, 21756, 20136, 27178, 34913, 24658, 36720, 21700, 28888, 34425, 40511, 27946, 23439, 24344, 32418, 21897, 20399, 29492, 21564, 21402, 20505, 21518, 21628, 20046, 24573, 29786, 22774, 33899, 32993, 34676, 29392, 31946, 28246, 31811, 31812, 31813, 31814, 31815, 31816, 31817, 31818, 31819, 31820, 31822, 31823, 31824, 31825, 31826, 31827, 31828, 31829, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31861, 31862, 31863, 31864, 31865, 31866, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31891, 31892, 31894, 31897, 31898, 31899, 31904, 31905, 31907, 31910, 31911, 31912, 31913, 31915, 31916, 31917, 31919, 31920, 31924, 31925, 31926, 31927, 31928, 31930, 31931, 24359, 34382, 21804, 25252, 20114, 27818, 25143, 33457, 21719, 21326, 29502, 28369, 30011, 21010, 21270, 35805, 27088, 24458, 24576, 28142, 22351, 27426, 29615, 26707, 36824, 32531, 25442, 24739, 21796, 30186, 35938, 28949, 28067, 23462, 24187, 33618, 24908, 40644, 30970, 34647, 31783, 30343, 20976, 24822, 29004, 26179, 24140, 24653, 35854, 28784, 25381, 36745, 24509, 24674, 34516, 22238, 27585, 24724, 24935, 21321, 24800, 26214, 36159, 31229, 20250, 28905, 27719, 35763, 35826, 32472, 33636, 26127, 23130, 39746, 27985, 28151, 35905, 27963, 20249, 28779, 33719, 25110, 24785, 38669, 36135, 31096, 20987, 22334, 22522, 26426, 30072, 31293, 31215, 31637, 31935, 31936, 31938, 31939, 31940, 31942, 31945, 31947, 31950, 31951, 31952, 31953, 31954, 31955, 31956, 31960, 31962, 31963, 31965, 31966, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31977, 31978, 31979, 31980, 31981, 31982, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31993, 31994, 31996, 31997, 31998, 31999, 32e3, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32033, 32035, 32036, 32037, 32038, 32040, 32041, 32042, 32044, 32045, 32046, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32908, 39269, 36857, 28608, 35749, 40481, 23020, 32489, 32521, 21513, 26497, 26840, 36753, 31821, 38598, 21450, 24613, 30142, 27762, 21363, 23241, 32423, 25380, 20960, 33034, 24049, 34015, 25216, 20864, 23395, 20238, 31085, 21058, 24760, 27982, 23492, 23490, 35745, 35760, 26082, 24524, 38469, 22931, 32487, 32426, 22025, 26551, 22841, 20339, 23478, 21152, 33626, 39050, 36158, 30002, 38078, 20551, 31292, 20215, 26550, 39550, 23233, 27516, 30417, 22362, 23574, 31546, 38388, 29006, 20860, 32937, 33392, 22904, 32516, 33575, 26816, 26604, 30897, 30839, 25315, 25441, 31616, 20461, 21098, 20943, 33616, 27099, 37492, 36341, 36145, 35265, 38190, 31661, 20214, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 20581, 33328, 21073, 39279, 28176, 28293, 28071, 24314, 20725, 23004, 23558, 27974, 27743, 30086, 33931, 26728, 22870, 35762, 21280, 37233, 38477, 34121, 26898, 30977, 28966, 33014, 20132, 37066, 27975, 39556, 23047, 22204, 25605, 38128, 30699, 20389, 33050, 29409, 35282, 39290, 32564, 32478, 21119, 25945, 37237, 36735, 36739, 21483, 31382, 25581, 25509, 30342, 31224, 34903, 38454, 25130, 21163, 33410, 26708, 26480, 25463, 30571, 31469, 27905, 32467, 35299, 22992, 25106, 34249, 33445, 30028, 20511, 20171, 30117, 35819, 23626, 24062, 31563, 26020, 37329, 20170, 27941, 35167, 32039, 38182, 20165, 35880, 36827, 38771, 26187, 31105, 36817, 28908, 28024, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32175, 32176, 32177, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32187, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 23613, 21170, 33606, 20834, 33550, 30555, 26230, 40120, 20140, 24778, 31934, 31923, 32463, 20117, 35686, 26223, 39048, 38745, 22659, 25964, 38236, 24452, 30153, 38742, 31455, 31454, 20928, 28847, 31384, 25578, 31350, 32416, 29590, 38893, 20037, 28792, 20061, 37202, 21417, 25937, 26087, 33276, 33285, 21646, 23601, 30106, 38816, 25304, 29401, 30141, 23621, 39545, 33738, 23616, 21632, 30697, 20030, 27822, 32858, 25298, 25454, 24040, 20855, 36317, 36382, 38191, 20465, 21477, 24807, 28844, 21095, 25424, 40515, 23071, 20518, 30519, 21367, 32482, 25733, 25899, 25225, 25496, 20500, 29237, 35273, 20915, 35776, 32477, 22343, 33740, 38055, 20891, 21531, 23803, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32316, 32317, 32318, 32319, 32320, 32322, 32323, 32324, 32325, 32326, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 20426, 31459, 27994, 37089, 39567, 21888, 21654, 21345, 21679, 24320, 25577, 26999, 20975, 24936, 21002, 22570, 21208, 22350, 30733, 30475, 24247, 24951, 31968, 25179, 25239, 20130, 28821, 32771, 25335, 28900, 38752, 22391, 33499, 26607, 26869, 30933, 39063, 31185, 22771, 21683, 21487, 28212, 20811, 21051, 23458, 35838, 32943, 21827, 22438, 24691, 22353, 21549, 31354, 24656, 23380, 25511, 25248, 21475, 25187, 23495, 26543, 21741, 31391, 33510, 37239, 24211, 35044, 22840, 22446, 25358, 36328, 33007, 22359, 31607, 20393, 24555, 23485, 27454, 21281, 31568, 29378, 26694, 30719, 30518, 26103, 20917, 20111, 30420, 23743, 31397, 33909, 22862, 39745, 20608, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32412, 32413, 32414, 32430, 32436, 32443, 32444, 32470, 32484, 32492, 32505, 32522, 32528, 32542, 32567, 32569, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32579, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32594, 32595, 39304, 24871, 28291, 22372, 26118, 25414, 22256, 25324, 25193, 24275, 38420, 22403, 25289, 21895, 34593, 33098, 36771, 21862, 33713, 26469, 36182, 34013, 23146, 26639, 25318, 31726, 38417, 20848, 28572, 35888, 25597, 35272, 25042, 32518, 28866, 28389, 29701, 27028, 29436, 24266, 37070, 26391, 28010, 25438, 21171, 29282, 32769, 20332, 23013, 37226, 28889, 28061, 21202, 20048, 38647, 38253, 34174, 30922, 32047, 20769, 22418, 25794, 32907, 31867, 27882, 26865, 26974, 20919, 21400, 26792, 29313, 40654, 31729, 29432, 31163, 28435, 29702, 26446, 37324, 40100, 31036, 33673, 33620, 21519, 26647, 20029, 21385, 21169, 30782, 21382, 21033, 20616, 20363, 20432, 32598, 32601, 32603, 32604, 32605, 32606, 32608, 32611, 32612, 32613, 32614, 32615, 32619, 32620, 32621, 32623, 32624, 32627, 32629, 32630, 32631, 32632, 32634, 32635, 32636, 32637, 32639, 32640, 32642, 32643, 32644, 32645, 32646, 32647, 32648, 32649, 32651, 32653, 32655, 32656, 32657, 32658, 32659, 32661, 32662, 32663, 32664, 32665, 32667, 32668, 32672, 32674, 32675, 32677, 32678, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32689, 32691, 32692, 32693, 32694, 32695, 32698, 32699, 32702, 32704, 32706, 32707, 32708, 32710, 32711, 32712, 32713, 32715, 32717, 32719, 32720, 32721, 32722, 32723, 32726, 32727, 32729, 32730, 32731, 32732, 32733, 32734, 32738, 32739, 30178, 31435, 31890, 27813, 38582, 21147, 29827, 21737, 20457, 32852, 33714, 36830, 38256, 24265, 24604, 28063, 24088, 25947, 33080, 38142, 24651, 28860, 32451, 31918, 20937, 26753, 31921, 33391, 20004, 36742, 37327, 26238, 20142, 35845, 25769, 32842, 20698, 30103, 29134, 23525, 36797, 28518, 20102, 25730, 38243, 24278, 26009, 21015, 35010, 28872, 21155, 29454, 29747, 26519, 30967, 38678, 20020, 37051, 40158, 28107, 20955, 36161, 21533, 25294, 29618, 33777, 38646, 40836, 38083, 20278, 32666, 20940, 28789, 38517, 23725, 39046, 21478, 20196, 28316, 29705, 27060, 30827, 39311, 30041, 21016, 30244, 27969, 26611, 20845, 40857, 32843, 21657, 31548, 31423, 32740, 32743, 32744, 32746, 32747, 32748, 32749, 32751, 32754, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32765, 32766, 32767, 32770, 32775, 32776, 32777, 32778, 32782, 32783, 32785, 32787, 32794, 32795, 32797, 32798, 32799, 32801, 32803, 32804, 32811, 32812, 32813, 32814, 32815, 32816, 32818, 32820, 32825, 32826, 32828, 32830, 32832, 32833, 32836, 32837, 32839, 32840, 32841, 32846, 32847, 32848, 32849, 32851, 32853, 32854, 32855, 32857, 32859, 32860, 32861, 32862, 32863, 32864, 32865, 32866, 32867, 32868, 32869, 32870, 32871, 32872, 32875, 32876, 32877, 32878, 32879, 32880, 32882, 32883, 32884, 32885, 32886, 32887, 32888, 32889, 32890, 32891, 32892, 32893, 38534, 22404, 25314, 38471, 27004, 23044, 25602, 31699, 28431, 38475, 33446, 21346, 39045, 24208, 28809, 25523, 21348, 34383, 40065, 40595, 30860, 38706, 36335, 36162, 40575, 28510, 31108, 24405, 38470, 25134, 39540, 21525, 38109, 20387, 26053, 23653, 23649, 32533, 34385, 27695, 24459, 29575, 28388, 32511, 23782, 25371, 23402, 28390, 21365, 20081, 25504, 30053, 25249, 36718, 20262, 20177, 27814, 32438, 35770, 33821, 34746, 32599, 36923, 38179, 31657, 39585, 35064, 33853, 27931, 39558, 32476, 22920, 40635, 29595, 30721, 34434, 39532, 39554, 22043, 21527, 22475, 20080, 40614, 21334, 36808, 33033, 30610, 39314, 34542, 28385, 34067, 26364, 24930, 28459, 32894, 32897, 32898, 32901, 32904, 32906, 32909, 32910, 32911, 32912, 32913, 32914, 32916, 32917, 32919, 32921, 32926, 32931, 32934, 32935, 32936, 32940, 32944, 32947, 32949, 32950, 32952, 32953, 32955, 32965, 32967, 32968, 32969, 32970, 32971, 32975, 32976, 32977, 32978, 32979, 32980, 32981, 32984, 32991, 32992, 32994, 32995, 32998, 33006, 33013, 33015, 33017, 33019, 33022, 33023, 33024, 33025, 33027, 33028, 33029, 33031, 33032, 33035, 33036, 33045, 33047, 33049, 33051, 33052, 33053, 33055, 33056, 33057, 33058, 33059, 33060, 33061, 33062, 33063, 33064, 33065, 33066, 33067, 33069, 33070, 33072, 33075, 33076, 33077, 33079, 33081, 33082, 33083, 33084, 33085, 33087, 35881, 33426, 33579, 30450, 27667, 24537, 33725, 29483, 33541, 38170, 27611, 30683, 38086, 21359, 33538, 20882, 24125, 35980, 36152, 20040, 29611, 26522, 26757, 37238, 38665, 29028, 27809, 30473, 23186, 38209, 27599, 32654, 26151, 23504, 22969, 23194, 38376, 38391, 20204, 33804, 33945, 27308, 30431, 38192, 29467, 26790, 23391, 30511, 37274, 38753, 31964, 36855, 35868, 24357, 31859, 31192, 35269, 27852, 34588, 23494, 24130, 26825, 30496, 32501, 20885, 20813, 21193, 23081, 32517, 38754, 33495, 25551, 30596, 34256, 31186, 28218, 24217, 22937, 34065, 28781, 27665, 25279, 30399, 25935, 24751, 38397, 26126, 34719, 40483, 38125, 21517, 21629, 35884, 25720, 33088, 33089, 33090, 33091, 33092, 33093, 33095, 33097, 33101, 33102, 33103, 33106, 33110, 33111, 33112, 33115, 33116, 33117, 33118, 33119, 33121, 33122, 33123, 33124, 33126, 33128, 33130, 33131, 33132, 33135, 33138, 33139, 33141, 33142, 33143, 33144, 33153, 33155, 33156, 33157, 33158, 33159, 33161, 33163, 33164, 33165, 33166, 33168, 33170, 33171, 33172, 33173, 33174, 33175, 33177, 33178, 33182, 33183, 33184, 33185, 33186, 33188, 33189, 33191, 33193, 33195, 33196, 33197, 33198, 33199, 33200, 33201, 33202, 33204, 33205, 33206, 33207, 33208, 33209, 33212, 33213, 33214, 33215, 33220, 33221, 33223, 33224, 33225, 33227, 33229, 33230, 33231, 33232, 33233, 33234, 33235, 25721, 34321, 27169, 33180, 30952, 25705, 39764, 25273, 26411, 33707, 22696, 40664, 27819, 28448, 23518, 38476, 35851, 29279, 26576, 25287, 29281, 20137, 22982, 27597, 22675, 26286, 24149, 21215, 24917, 26408, 30446, 30566, 29287, 31302, 25343, 21738, 21584, 38048, 37027, 23068, 32435, 27670, 20035, 22902, 32784, 22856, 21335, 30007, 38590, 22218, 25376, 33041, 24700, 38393, 28118, 21602, 39297, 20869, 23273, 33021, 22958, 38675, 20522, 27877, 23612, 25311, 20320, 21311, 33147, 36870, 28346, 34091, 25288, 24180, 30910, 25781, 25467, 24565, 23064, 37247, 40479, 23615, 25423, 32834, 23421, 21870, 38218, 38221, 28037, 24744, 26592, 29406, 20957, 23425, 33236, 33237, 33238, 33239, 33240, 33241, 33242, 33243, 33244, 33245, 33246, 33247, 33248, 33249, 33250, 33252, 33253, 33254, 33256, 33257, 33259, 33262, 33263, 33264, 33265, 33266, 33269, 33270, 33271, 33272, 33273, 33274, 33277, 33279, 33283, 33287, 33288, 33289, 33290, 33291, 33294, 33295, 33297, 33299, 33301, 33302, 33303, 33304, 33305, 33306, 33309, 33312, 33316, 33317, 33318, 33319, 33321, 33326, 33330, 33338, 33340, 33341, 33343, 33344, 33345, 33346, 33347, 33349, 33350, 33352, 33354, 33356, 33357, 33358, 33360, 33361, 33362, 33363, 33364, 33365, 33366, 33367, 33369, 33371, 33372, 33373, 33374, 33376, 33377, 33378, 33379, 33380, 33381, 33382, 33383, 33385, 25319, 27870, 29275, 25197, 38062, 32445, 33043, 27987, 20892, 24324, 22900, 21162, 24594, 22899, 26262, 34384, 30111, 25386, 25062, 31983, 35834, 21734, 27431, 40485, 27572, 34261, 21589, 20598, 27812, 21866, 36276, 29228, 24085, 24597, 29750, 25293, 25490, 29260, 24472, 28227, 27966, 25856, 28504, 30424, 30928, 30460, 30036, 21028, 21467, 20051, 24222, 26049, 32810, 32982, 25243, 21638, 21032, 28846, 34957, 36305, 27873, 21624, 32986, 22521, 35060, 36180, 38506, 37197, 20329, 27803, 21943, 30406, 30768, 25256, 28921, 28558, 24429, 34028, 26842, 30844, 31735, 33192, 26379, 40527, 25447, 30896, 22383, 30738, 38713, 25209, 25259, 21128, 29749, 27607, 33386, 33387, 33388, 33389, 33393, 33397, 33398, 33399, 33400, 33403, 33404, 33408, 33409, 33411, 33413, 33414, 33415, 33417, 33420, 33424, 33427, 33428, 33429, 33430, 33434, 33435, 33438, 33440, 33442, 33443, 33447, 33458, 33461, 33462, 33466, 33467, 33468, 33471, 33472, 33474, 33475, 33477, 33478, 33481, 33488, 33494, 33497, 33498, 33501, 33506, 33511, 33512, 33513, 33514, 33516, 33517, 33518, 33520, 33522, 33523, 33525, 33526, 33528, 33530, 33532, 33533, 33534, 33535, 33536, 33546, 33547, 33549, 33552, 33554, 33555, 33558, 33560, 33561, 33565, 33566, 33567, 33568, 33569, 33570, 33571, 33572, 33573, 33574, 33577, 33578, 33582, 33584, 33586, 33591, 33595, 33597, 21860, 33086, 30130, 30382, 21305, 30174, 20731, 23617, 35692, 31687, 20559, 29255, 39575, 39128, 28418, 29922, 31080, 25735, 30629, 25340, 39057, 36139, 21697, 32856, 20050, 22378, 33529, 33805, 24179, 20973, 29942, 35780, 23631, 22369, 27900, 39047, 23110, 30772, 39748, 36843, 31893, 21078, 25169, 38138, 20166, 33670, 33889, 33769, 33970, 22484, 26420, 22275, 26222, 28006, 35889, 26333, 28689, 26399, 27450, 26646, 25114, 22971, 19971, 20932, 28422, 26578, 27791, 20854, 26827, 22855, 27495, 30054, 23822, 33040, 40784, 26071, 31048, 31041, 39569, 36215, 23682, 20062, 20225, 21551, 22865, 30732, 22120, 27668, 36804, 24323, 27773, 27875, 35755, 25488, 33598, 33599, 33601, 33602, 33604, 33605, 33608, 33610, 33611, 33612, 33613, 33614, 33619, 33621, 33622, 33623, 33624, 33625, 33629, 33634, 33648, 33649, 33650, 33651, 33652, 33653, 33654, 33657, 33658, 33662, 33663, 33664, 33665, 33666, 33667, 33668, 33671, 33672, 33674, 33675, 33676, 33677, 33679, 33680, 33681, 33684, 33685, 33686, 33687, 33689, 33690, 33693, 33695, 33697, 33698, 33699, 33700, 33701, 33702, 33703, 33708, 33709, 33710, 33711, 33717, 33723, 33726, 33727, 33730, 33731, 33732, 33734, 33736, 33737, 33739, 33741, 33742, 33744, 33745, 33746, 33747, 33749, 33751, 33753, 33754, 33755, 33758, 33762, 33763, 33764, 33766, 33767, 33768, 33771, 33772, 33773, 24688, 27965, 29301, 25190, 38030, 38085, 21315, 36801, 31614, 20191, 35878, 20094, 40660, 38065, 38067, 21069, 28508, 36963, 27973, 35892, 22545, 23884, 27424, 27465, 26538, 21595, 33108, 32652, 22681, 34103, 24378, 25250, 27207, 38201, 25970, 24708, 26725, 30631, 20052, 20392, 24039, 38808, 25772, 32728, 23789, 20431, 31373, 20999, 33540, 19988, 24623, 31363, 38054, 20405, 20146, 31206, 29748, 21220, 33465, 25810, 31165, 23517, 27777, 38738, 36731, 27682, 20542, 21375, 28165, 25806, 26228, 27696, 24773, 39031, 35831, 24198, 29756, 31351, 31179, 19992, 37041, 29699, 27714, 22234, 37195, 27845, 36235, 21306, 34502, 26354, 36527, 23624, 39537, 28192, 33774, 33775, 33779, 33780, 33781, 33782, 33783, 33786, 33787, 33788, 33790, 33791, 33792, 33794, 33797, 33799, 33800, 33801, 33802, 33808, 33810, 33811, 33812, 33813, 33814, 33815, 33817, 33818, 33819, 33822, 33823, 33824, 33825, 33826, 33827, 33833, 33834, 33835, 33836, 33837, 33838, 33839, 33840, 33842, 33843, 33844, 33845, 33846, 33847, 33849, 33850, 33851, 33854, 33855, 33856, 33857, 33858, 33859, 33860, 33861, 33863, 33864, 33865, 33866, 33867, 33868, 33869, 33870, 33871, 33872, 33874, 33875, 33876, 33877, 33878, 33880, 33885, 33886, 33887, 33888, 33890, 33892, 33893, 33894, 33895, 33896, 33898, 33902, 33903, 33904, 33906, 33908, 33911, 33913, 33915, 33916, 21462, 23094, 40843, 36259, 21435, 22280, 39079, 26435, 37275, 27849, 20840, 30154, 25331, 29356, 21048, 21149, 32570, 28820, 30264, 21364, 40522, 27063, 30830, 38592, 35033, 32676, 28982, 29123, 20873, 26579, 29924, 22756, 25880, 22199, 35753, 39286, 25200, 32469, 24825, 28909, 22764, 20161, 20154, 24525, 38887, 20219, 35748, 20995, 22922, 32427, 25172, 20173, 26085, 25102, 33592, 33993, 33635, 34701, 29076, 28342, 23481, 32466, 20887, 25545, 26580, 32905, 33593, 34837, 20754, 23418, 22914, 36785, 20083, 27741, 20837, 35109, 36719, 38446, 34122, 29790, 38160, 38384, 28070, 33509, 24369, 25746, 27922, 33832, 33134, 40131, 22622, 36187, 19977, 21441, 33917, 33918, 33919, 33920, 33921, 33923, 33924, 33925, 33926, 33930, 33933, 33935, 33936, 33937, 33938, 33939, 33940, 33941, 33942, 33944, 33946, 33947, 33949, 33950, 33951, 33952, 33954, 33955, 33956, 33957, 33958, 33959, 33960, 33961, 33962, 33963, 33964, 33965, 33966, 33968, 33969, 33971, 33973, 33974, 33975, 33979, 33980, 33982, 33984, 33986, 33987, 33989, 33990, 33991, 33992, 33995, 33996, 33998, 33999, 34002, 34004, 34005, 34007, 34008, 34009, 34010, 34011, 34012, 34014, 34017, 34018, 34020, 34023, 34024, 34025, 34026, 34027, 34029, 34030, 34031, 34033, 34034, 34035, 34036, 34037, 34038, 34039, 34040, 34041, 34042, 34043, 34045, 34046, 34048, 34049, 34050, 20254, 25955, 26705, 21971, 20007, 25620, 39578, 25195, 23234, 29791, 33394, 28073, 26862, 20711, 33678, 30722, 26432, 21049, 27801, 32433, 20667, 21861, 29022, 31579, 26194, 29642, 33515, 26441, 23665, 21024, 29053, 34923, 38378, 38485, 25797, 36193, 33203, 21892, 27733, 25159, 32558, 22674, 20260, 21830, 36175, 26188, 19978, 23578, 35059, 26786, 25422, 31245, 28903, 33421, 21242, 38902, 23569, 21736, 37045, 32461, 22882, 36170, 34503, 33292, 33293, 36198, 25668, 23556, 24913, 28041, 31038, 35774, 30775, 30003, 21627, 20280, 36523, 28145, 23072, 32453, 31070, 27784, 23457, 23158, 29978, 32958, 24910, 28183, 22768, 29983, 29989, 29298, 21319, 32499, 34051, 34052, 34053, 34054, 34055, 34056, 34057, 34058, 34059, 34061, 34062, 34063, 34064, 34066, 34068, 34069, 34070, 34072, 34073, 34075, 34076, 34077, 34078, 34080, 34082, 34083, 34084, 34085, 34086, 34087, 34088, 34089, 34090, 34093, 34094, 34095, 34096, 34097, 34098, 34099, 34100, 34101, 34102, 34110, 34111, 34112, 34113, 34114, 34116, 34117, 34118, 34119, 34123, 34124, 34125, 34126, 34127, 34128, 34129, 34130, 34131, 34132, 34133, 34135, 34136, 34138, 34139, 34140, 34141, 34143, 34144, 34145, 34146, 34147, 34149, 34150, 34151, 34153, 34154, 34155, 34156, 34157, 34158, 34159, 34160, 34161, 34163, 34165, 34166, 34167, 34168, 34172, 34173, 34175, 34176, 34177, 30465, 30427, 21097, 32988, 22307, 24072, 22833, 29422, 26045, 28287, 35799, 23608, 34417, 21313, 30707, 25342, 26102, 20160, 39135, 34432, 23454, 35782, 21490, 30690, 20351, 23630, 39542, 22987, 24335, 31034, 22763, 19990, 26623, 20107, 25325, 35475, 36893, 21183, 26159, 21980, 22124, 36866, 20181, 20365, 37322, 39280, 27663, 24066, 24643, 23460, 35270, 35797, 25910, 25163, 39318, 23432, 23551, 25480, 21806, 21463, 30246, 20861, 34092, 26530, 26803, 27530, 25234, 36755, 21460, 33298, 28113, 30095, 20070, 36174, 23408, 29087, 34223, 26257, 26329, 32626, 34560, 40653, 40736, 23646, 26415, 36848, 26641, 26463, 25101, 31446, 22661, 24246, 25968, 28465, 34178, 34179, 34182, 34184, 34185, 34186, 34187, 34188, 34189, 34190, 34192, 34193, 34194, 34195, 34196, 34197, 34198, 34199, 34200, 34201, 34202, 34205, 34206, 34207, 34208, 34209, 34210, 34211, 34213, 34214, 34215, 34217, 34219, 34220, 34221, 34225, 34226, 34227, 34228, 34229, 34230, 34232, 34234, 34235, 34236, 34237, 34238, 34239, 34240, 34242, 34243, 34244, 34245, 34246, 34247, 34248, 34250, 34251, 34252, 34253, 34254, 34257, 34258, 34260, 34262, 34263, 34264, 34265, 34266, 34267, 34269, 34270, 34271, 34272, 34273, 34274, 34275, 34277, 34278, 34279, 34280, 34282, 34283, 34284, 34285, 34286, 34287, 34288, 34289, 34290, 34291, 34292, 34293, 34294, 34295, 34296, 24661, 21047, 32781, 25684, 34928, 29993, 24069, 26643, 25332, 38684, 21452, 29245, 35841, 27700, 30561, 31246, 21550, 30636, 39034, 33308, 35828, 30805, 26388, 28865, 26031, 25749, 22070, 24605, 31169, 21496, 19997, 27515, 32902, 23546, 21987, 22235, 20282, 20284, 39282, 24051, 26494, 32824, 24578, 39042, 36865, 23435, 35772, 35829, 25628, 33368, 25822, 22013, 33487, 37221, 20439, 32032, 36895, 31903, 20723, 22609, 28335, 23487, 35785, 32899, 37240, 33948, 31639, 34429, 38539, 38543, 32485, 39635, 30862, 23681, 31319, 36930, 38567, 31071, 23385, 25439, 31499, 34001, 26797, 21766, 32553, 29712, 32034, 38145, 25152, 22604, 20182, 23427, 22905, 22612, 34297, 34298, 34300, 34301, 34302, 34304, 34305, 34306, 34307, 34308, 34310, 34311, 34312, 34313, 34314, 34315, 34316, 34317, 34318, 34319, 34320, 34322, 34323, 34324, 34325, 34327, 34328, 34329, 34330, 34331, 34332, 34333, 34334, 34335, 34336, 34337, 34338, 34339, 34340, 34341, 34342, 34344, 34346, 34347, 34348, 34349, 34350, 34351, 34352, 34353, 34354, 34355, 34356, 34357, 34358, 34359, 34361, 34362, 34363, 34365, 34366, 34367, 34368, 34369, 34370, 34371, 34372, 34373, 34374, 34375, 34376, 34377, 34378, 34379, 34380, 34386, 34387, 34389, 34390, 34391, 34392, 34393, 34395, 34396, 34397, 34399, 34400, 34401, 34403, 34404, 34405, 34406, 34407, 34408, 34409, 34410, 29549, 25374, 36427, 36367, 32974, 33492, 25260, 21488, 27888, 37214, 22826, 24577, 27760, 22349, 25674, 36138, 30251, 28393, 22363, 27264, 30192, 28525, 35885, 35848, 22374, 27631, 34962, 30899, 25506, 21497, 28845, 27748, 22616, 25642, 22530, 26848, 33179, 21776, 31958, 20504, 36538, 28108, 36255, 28907, 25487, 28059, 28372, 32486, 33796, 26691, 36867, 28120, 38518, 35752, 22871, 29305, 34276, 33150, 30140, 35466, 26799, 21076, 36386, 38161, 25552, 39064, 36420, 21884, 20307, 26367, 22159, 24789, 28053, 21059, 23625, 22825, 28155, 22635, 3e4, 29980, 24684, 33300, 33094, 25361, 26465, 36834, 30522, 36339, 36148, 38081, 24086, 21381, 21548, 28867, 34413, 34415, 34416, 34418, 34419, 34420, 34421, 34422, 34423, 34424, 34435, 34436, 34437, 34438, 34439, 34440, 34441, 34446, 34447, 34448, 34449, 34450, 34452, 34454, 34455, 34456, 34457, 34458, 34459, 34462, 34463, 34464, 34465, 34466, 34469, 34470, 34475, 34477, 34478, 34482, 34483, 34487, 34488, 34489, 34491, 34492, 34493, 34494, 34495, 34497, 34498, 34499, 34501, 34504, 34508, 34509, 34514, 34515, 34517, 34518, 34519, 34522, 34524, 34525, 34528, 34529, 34530, 34531, 34533, 34534, 34535, 34536, 34538, 34539, 34540, 34543, 34549, 34550, 34551, 34554, 34555, 34556, 34557, 34559, 34561, 34564, 34565, 34566, 34571, 34572, 34574, 34575, 34576, 34577, 34580, 34582, 27712, 24311, 20572, 20141, 24237, 25402, 33351, 36890, 26704, 37230, 30643, 21516, 38108, 24420, 31461, 26742, 25413, 31570, 32479, 30171, 20599, 25237, 22836, 36879, 20984, 31171, 31361, 22270, 24466, 36884, 28034, 23648, 22303, 21520, 20820, 28237, 22242, 25512, 39059, 33151, 34581, 35114, 36864, 21534, 23663, 33216, 25302, 25176, 33073, 40501, 38464, 39534, 39548, 26925, 22949, 25299, 21822, 25366, 21703, 34521, 27964, 23043, 29926, 34972, 27498, 22806, 35916, 24367, 28286, 29609, 39037, 20024, 28919, 23436, 30871, 25405, 26202, 30358, 24779, 23451, 23113, 19975, 33109, 27754, 29579, 20129, 26505, 32593, 24448, 26106, 26395, 24536, 22916, 23041, 34585, 34587, 34589, 34591, 34592, 34596, 34598, 34599, 34600, 34602, 34603, 34604, 34605, 34607, 34608, 34610, 34611, 34613, 34614, 34616, 34617, 34618, 34620, 34621, 34624, 34625, 34626, 34627, 34628, 34629, 34630, 34634, 34635, 34637, 34639, 34640, 34641, 34642, 34644, 34645, 34646, 34648, 34650, 34651, 34652, 34653, 34654, 34655, 34657, 34658, 34662, 34663, 34664, 34665, 34666, 34667, 34668, 34669, 34671, 34673, 34674, 34675, 34677, 34679, 34680, 34681, 34682, 34687, 34688, 34689, 34692, 34694, 34695, 34697, 34698, 34700, 34702, 34703, 34704, 34705, 34706, 34708, 34709, 34710, 34712, 34713, 34714, 34715, 34716, 34717, 34718, 34720, 34721, 34722, 34723, 34724, 24013, 24494, 21361, 38886, 36829, 26693, 22260, 21807, 24799, 20026, 28493, 32500, 33479, 33806, 22996, 20255, 20266, 23614, 32428, 26410, 34074, 21619, 30031, 32963, 21890, 39759, 20301, 28205, 35859, 23561, 24944, 21355, 30239, 28201, 34442, 25991, 38395, 32441, 21563, 31283, 32010, 38382, 21985, 32705, 29934, 25373, 34583, 28065, 31389, 25105, 26017, 21351, 25569, 27779, 24043, 21596, 38056, 20044, 27745, 35820, 23627, 26080, 33436, 26791, 21566, 21556, 27595, 27494, 20116, 25410, 21320, 33310, 20237, 20398, 22366, 25098, 38654, 26212, 29289, 21247, 21153, 24735, 35823, 26132, 29081, 26512, 35199, 30802, 30717, 26224, 22075, 21560, 38177, 29306, 34725, 34726, 34727, 34729, 34730, 34734, 34736, 34737, 34738, 34740, 34742, 34743, 34744, 34745, 34747, 34748, 34750, 34751, 34753, 34754, 34755, 34756, 34757, 34759, 34760, 34761, 34764, 34765, 34766, 34767, 34768, 34772, 34773, 34774, 34775, 34776, 34777, 34778, 34780, 34781, 34782, 34783, 34785, 34786, 34787, 34788, 34790, 34791, 34792, 34793, 34795, 34796, 34797, 34799, 34800, 34801, 34802, 34803, 34804, 34805, 34806, 34807, 34808, 34810, 34811, 34812, 34813, 34815, 34816, 34817, 34818, 34820, 34821, 34822, 34823, 34824, 34825, 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, 34836, 34839, 34840, 34841, 34842, 34844, 34845, 34846, 34847, 34848, 34851, 31232, 24687, 24076, 24713, 33181, 22805, 24796, 29060, 28911, 28330, 27728, 29312, 27268, 34989, 24109, 20064, 23219, 21916, 38115, 27927, 31995, 38553, 25103, 32454, 30606, 34430, 21283, 38686, 36758, 26247, 23777, 20384, 29421, 19979, 21414, 22799, 21523, 25472, 38184, 20808, 20185, 40092, 32420, 21688, 36132, 34900, 33335, 38386, 28046, 24358, 23244, 26174, 38505, 29616, 29486, 21439, 33146, 39301, 32673, 23466, 38519, 38480, 32447, 30456, 21410, 38262, 39321, 31665, 35140, 28248, 20065, 32724, 31077, 35814, 24819, 21709, 20139, 39033, 24055, 27233, 20687, 21521, 35937, 33831, 30813, 38660, 21066, 21742, 22179, 38144, 28040, 23477, 28102, 26195, 34852, 34853, 34854, 34855, 34856, 34857, 34858, 34859, 34860, 34861, 34862, 34863, 34864, 34865, 34867, 34868, 34869, 34870, 34871, 34872, 34874, 34875, 34877, 34878, 34879, 34881, 34882, 34883, 34886, 34887, 34888, 34889, 34890, 34891, 34894, 34895, 34896, 34897, 34898, 34899, 34901, 34902, 34904, 34906, 34907, 34908, 34909, 34910, 34911, 34912, 34918, 34919, 34922, 34925, 34927, 34929, 34931, 34932, 34933, 34934, 34936, 34937, 34938, 34939, 34940, 34944, 34947, 34950, 34951, 34953, 34954, 34956, 34958, 34959, 34960, 34961, 34963, 34964, 34965, 34967, 34968, 34969, 34970, 34971, 34973, 34974, 34975, 34976, 34977, 34979, 34981, 34982, 34983, 34984, 34985, 34986, 23567, 23389, 26657, 32918, 21880, 31505, 25928, 26964, 20123, 27463, 34638, 38795, 21327, 25375, 25658, 37034, 26012, 32961, 35856, 20889, 26800, 21368, 34809, 25032, 27844, 27899, 35874, 23633, 34218, 33455, 38156, 27427, 36763, 26032, 24571, 24515, 20449, 34885, 26143, 33125, 29481, 24826, 20852, 21009, 22411, 24418, 37026, 34892, 37266, 24184, 26447, 24615, 22995, 20804, 20982, 33016, 21256, 27769, 38596, 29066, 20241, 20462, 32670, 26429, 21957, 38152, 31168, 34966, 32483, 22687, 25100, 38656, 34394, 22040, 39035, 24464, 35768, 33988, 37207, 21465, 26093, 24207, 30044, 24676, 32110, 23167, 32490, 32493, 36713, 21927, 23459, 24748, 26059, 29572, 34988, 34990, 34991, 34992, 34994, 34995, 34996, 34997, 34998, 35e3, 35001, 35002, 35003, 35005, 35006, 35007, 35008, 35011, 35012, 35015, 35016, 35018, 35019, 35020, 35021, 35023, 35024, 35025, 35027, 35030, 35031, 35034, 35035, 35036, 35037, 35038, 35040, 35041, 35046, 35047, 35049, 35050, 35051, 35052, 35053, 35054, 35055, 35058, 35061, 35062, 35063, 35066, 35067, 35069, 35071, 35072, 35073, 35075, 35076, 35077, 35078, 35079, 35080, 35081, 35083, 35084, 35085, 35086, 35087, 35089, 35092, 35093, 35094, 35095, 35096, 35100, 35101, 35102, 35103, 35104, 35106, 35107, 35108, 35110, 35111, 35112, 35113, 35116, 35117, 35118, 35119, 35121, 35122, 35123, 35125, 35127, 36873, 30307, 30505, 32474, 38772, 34203, 23398, 31348, 38634, 34880, 21195, 29071, 24490, 26092, 35810, 23547, 39535, 24033, 27529, 27739, 35757, 35759, 36874, 36805, 21387, 25276, 40486, 40493, 21568, 20011, 33469, 29273, 34460, 23830, 34905, 28079, 38597, 21713, 20122, 35766, 28937, 21693, 38409, 28895, 28153, 30416, 20005, 30740, 34578, 23721, 24310, 35328, 39068, 38414, 28814, 27839, 22852, 25513, 30524, 34893, 28436, 33395, 22576, 29141, 21388, 30746, 38593, 21761, 24422, 28976, 23476, 35866, 39564, 27523, 22830, 40495, 31207, 26472, 25196, 20335, 30113, 32650, 27915, 38451, 27687, 20208, 30162, 20859, 26679, 28478, 36992, 33136, 22934, 29814, 35128, 35129, 35130, 35131, 35132, 35133, 35134, 35135, 35136, 35138, 35139, 35141, 35142, 35143, 35144, 35145, 35146, 35147, 35148, 35149, 35150, 35151, 35152, 35153, 35154, 35155, 35156, 35157, 35158, 35159, 35160, 35161, 35162, 35163, 35164, 35165, 35168, 35169, 35170, 35171, 35172, 35173, 35175, 35176, 35177, 35178, 35179, 35180, 35181, 35182, 35183, 35184, 35185, 35186, 35187, 35188, 35189, 35190, 35191, 35192, 35193, 35194, 35196, 35197, 35198, 35200, 35202, 35204, 35205, 35207, 35208, 35209, 35210, 35211, 35212, 35213, 35214, 35215, 35216, 35217, 35218, 35219, 35220, 35221, 35222, 35223, 35224, 35225, 35226, 35227, 35228, 35229, 35230, 35231, 35232, 35233, 25671, 23591, 36965, 31377, 35875, 23002, 21676, 33280, 33647, 35201, 32768, 26928, 22094, 32822, 29239, 37326, 20918, 20063, 39029, 25494, 19994, 21494, 26355, 33099, 22812, 28082, 19968, 22777, 21307, 25558, 38129, 20381, 20234, 34915, 39056, 22839, 36951, 31227, 20202, 33008, 30097, 27778, 23452, 23016, 24413, 26885, 34433, 20506, 24050, 20057, 30691, 20197, 33402, 25233, 26131, 37009, 23673, 20159, 24441, 33222, 36920, 32900, 30123, 20134, 35028, 24847, 27589, 24518, 20041, 30410, 28322, 35811, 35758, 35850, 35793, 24322, 32764, 32716, 32462, 33589, 33643, 22240, 27575, 38899, 38452, 23035, 21535, 38134, 28139, 23493, 39278, 23609, 24341, 38544, 35234, 35235, 35236, 35237, 35238, 35239, 35240, 35241, 35242, 35243, 35244, 35245, 35246, 35247, 35248, 35249, 35250, 35251, 35252, 35253, 35254, 35255, 35256, 35257, 35258, 35259, 35260, 35261, 35262, 35263, 35264, 35267, 35277, 35283, 35284, 35285, 35287, 35288, 35289, 35291, 35293, 35295, 35296, 35297, 35298, 35300, 35303, 35304, 35305, 35306, 35308, 35309, 35310, 35312, 35313, 35314, 35316, 35317, 35318, 35319, 35320, 35321, 35322, 35323, 35324, 35325, 35326, 35327, 35329, 35330, 35331, 35332, 35333, 35334, 35336, 35337, 35338, 35339, 35340, 35341, 35342, 35343, 35344, 35345, 35346, 35347, 35348, 35349, 35350, 35351, 35352, 35353, 35354, 35355, 35356, 35357, 21360, 33521, 27185, 23156, 40560, 24212, 32552, 33721, 33828, 33829, 33639, 34631, 36814, 36194, 30408, 24433, 39062, 30828, 26144, 21727, 25317, 20323, 33219, 30152, 24248, 38605, 36362, 34553, 21647, 27891, 28044, 27704, 24703, 21191, 29992, 24189, 20248, 24736, 24551, 23588, 30001, 37038, 38080, 29369, 27833, 28216, 37193, 26377, 21451, 21491, 20305, 37321, 35825, 21448, 24188, 36802, 28132, 20110, 30402, 27014, 34398, 24858, 33286, 20313, 20446, 36926, 40060, 24841, 28189, 28180, 38533, 20104, 23089, 38632, 19982, 23679, 31161, 23431, 35821, 32701, 29577, 22495, 33419, 37057, 21505, 36935, 21947, 23786, 24481, 24840, 27442, 29425, 32946, 35465, 35358, 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, 35399, 35401, 35402, 35403, 35404, 35405, 35406, 35407, 35408, 35409, 35410, 35411, 35412, 35413, 35414, 35415, 35416, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 28020, 23507, 35029, 39044, 35947, 39533, 40499, 28170, 20900, 20803, 22435, 34945, 21407, 25588, 36757, 22253, 21592, 22278, 29503, 28304, 32536, 36828, 33489, 24895, 24616, 38498, 26352, 32422, 36234, 36291, 38053, 23731, 31908, 26376, 24742, 38405, 32792, 20113, 37095, 21248, 38504, 20801, 36816, 34164, 37213, 26197, 38901, 23381, 21277, 30776, 26434, 26685, 21705, 28798, 23472, 36733, 20877, 22312, 21681, 25874, 26242, 36190, 36163, 33039, 33900, 36973, 31967, 20991, 34299, 26531, 26089, 28577, 34468, 36481, 22122, 36896, 30338, 28790, 29157, 36131, 25321, 21017, 27901, 36156, 24590, 22686, 24974, 26366, 36192, 25166, 21939, 28195, 26413, 36711, 35457, 35458, 35459, 35460, 35461, 35462, 35463, 35464, 35467, 35468, 35469, 35470, 35471, 35472, 35473, 35474, 35476, 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, 35549, 35550, 35551, 35552, 35553, 35554, 35555, 38113, 38392, 30504, 26629, 27048, 21643, 20045, 28856, 35784, 25688, 25995, 23429, 31364, 20538, 23528, 30651, 27617, 35449, 31896, 27838, 30415, 26025, 36759, 23853, 23637, 34360, 26632, 21344, 25112, 31449, 28251, 32509, 27167, 31456, 24432, 28467, 24352, 25484, 28072, 26454, 19976, 24080, 36134, 20183, 32960, 30260, 38556, 25307, 26157, 25214, 27836, 36213, 29031, 32617, 20806, 32903, 21484, 36974, 25240, 21746, 34544, 36761, 32773, 38167, 34071, 36825, 27993, 29645, 26015, 30495, 29956, 30759, 33275, 36126, 38024, 20390, 26517, 30137, 35786, 38663, 25391, 38215, 38453, 33976, 25379, 30529, 24449, 29424, 20105, 24596, 25972, 25327, 27491, 25919, 35556, 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, 35589, 35590, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35621, 35623, 35624, 35625, 35626, 35627, 35628, 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35648, 35649, 35650, 35651, 35652, 35653, 24103, 30151, 37073, 35777, 33437, 26525, 25903, 21553, 34584, 30693, 32930, 33026, 27713, 20043, 32455, 32844, 30452, 26893, 27542, 25191, 20540, 20356, 22336, 25351, 27490, 36286, 21482, 26088, 32440, 24535, 25370, 25527, 33267, 33268, 32622, 24092, 23769, 21046, 26234, 31209, 31258, 36136, 28825, 30164, 28382, 27835, 31378, 20013, 30405, 24544, 38047, 34935, 32456, 31181, 32959, 37325, 20210, 20247, 33311, 21608, 24030, 27954, 35788, 31909, 36724, 32920, 24090, 21650, 30385, 23449, 26172, 39588, 29664, 26666, 34523, 26417, 29482, 35832, 35803, 36880, 31481, 28891, 29038, 25284, 30633, 22065, 20027, 33879, 26609, 21161, 34496, 36142, 38136, 31569, 35654, 35655, 35656, 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35664, 35665, 35666, 35667, 35668, 35669, 35670, 35671, 35672, 35673, 35674, 35675, 35676, 35677, 35678, 35679, 35680, 35681, 35682, 35683, 35684, 35685, 35687, 35688, 35689, 35690, 35691, 35693, 35694, 35695, 35696, 35697, 35698, 35699, 35700, 35701, 35702, 35703, 35704, 35705, 35706, 35707, 35708, 35709, 35710, 35711, 35712, 35713, 35714, 35715, 35716, 35717, 35718, 35719, 35720, 35721, 35722, 35723, 35724, 35725, 35726, 35727, 35728, 35729, 35730, 35731, 35732, 35733, 35734, 35735, 35736, 35737, 35738, 35739, 35740, 35741, 35742, 35743, 35756, 35761, 35771, 35783, 35792, 35818, 35849, 35870, 20303, 27880, 31069, 39547, 25235, 29226, 25341, 19987, 30742, 36716, 25776, 36186, 31686, 26729, 24196, 35013, 22918, 25758, 22766, 29366, 26894, 38181, 36861, 36184, 22368, 32512, 35846, 20934, 25417, 25305, 21331, 26700, 29730, 33537, 37196, 21828, 30528, 28796, 27978, 20857, 21672, 36164, 23039, 28363, 28100, 23388, 32043, 20180, 31869, 28371, 23376, 33258, 28173, 23383, 39683, 26837, 36394, 23447, 32508, 24635, 32437, 37049, 36208, 22863, 25549, 31199, 36275, 21330, 26063, 31062, 35781, 38459, 32452, 38075, 32386, 22068, 37257, 26368, 32618, 23562, 36981, 26152, 24038, 20304, 26590, 20570, 20316, 22352, 24231, 59408, 59409, 59410, 59411, 59412, 35896, 35897, 35898, 35899, 35900, 35901, 35902, 35903, 35904, 35906, 35907, 35908, 35909, 35912, 35914, 35915, 35917, 35918, 35919, 35920, 35921, 35922, 35923, 35924, 35926, 35927, 35928, 35929, 35931, 35932, 35933, 35934, 35935, 35936, 35939, 35940, 35941, 35942, 35943, 35944, 35945, 35948, 35949, 35950, 35951, 35952, 35953, 35954, 35956, 35957, 35958, 35959, 35963, 35964, 35965, 35966, 35967, 35968, 35969, 35971, 35972, 35974, 35975, 35976, 35979, 35981, 35982, 35983, 35984, 35985, 35986, 35987, 35989, 35990, 35991, 35993, 35994, 35995, 35996, 35997, 35998, 35999, 36e3, 36001, 36002, 36003, 36004, 36005, 36006, 36007, 36008, 36009, 36010, 36011, 36012, 36013, 20109, 19980, 20800, 19984, 24319, 21317, 19989, 20120, 19998, 39730, 23404, 22121, 20008, 31162, 20031, 21269, 20039, 22829, 29243, 21358, 27664, 22239, 32996, 39319, 27603, 30590, 40727, 20022, 20127, 40720, 20060, 20073, 20115, 33416, 23387, 21868, 22031, 20164, 21389, 21405, 21411, 21413, 21422, 38757, 36189, 21274, 21493, 21286, 21294, 21310, 36188, 21350, 21347, 20994, 21e3, 21006, 21037, 21043, 21055, 21056, 21068, 21086, 21089, 21084, 33967, 21117, 21122, 21121, 21136, 21139, 20866, 32596, 20155, 20163, 20169, 20162, 20200, 20193, 20203, 20190, 20251, 20211, 20258, 20324, 20213, 20261, 20263, 20233, 20267, 20318, 20327, 25912, 20314, 20317, 36014, 36015, 36016, 36017, 36018, 36019, 36020, 36021, 36022, 36023, 36024, 36025, 36026, 36027, 36028, 36029, 36030, 36031, 36032, 36033, 36034, 36035, 36036, 36037, 36038, 36039, 36040, 36041, 36042, 36043, 36044, 36045, 36046, 36047, 36048, 36049, 36050, 36051, 36052, 36053, 36054, 36055, 36056, 36057, 36058, 36059, 36060, 36061, 36062, 36063, 36064, 36065, 36066, 36067, 36068, 36069, 36070, 36071, 36072, 36073, 36074, 36075, 36076, 36077, 36078, 36079, 36080, 36081, 36082, 36083, 36084, 36085, 36086, 36087, 36088, 36089, 36090, 36091, 36092, 36093, 36094, 36095, 36096, 36097, 36098, 36099, 36100, 36101, 36102, 36103, 36104, 36105, 36106, 36107, 36108, 36109, 20319, 20311, 20274, 20285, 20342, 20340, 20369, 20361, 20355, 20367, 20350, 20347, 20394, 20348, 20396, 20372, 20454, 20456, 20458, 20421, 20442, 20451, 20444, 20433, 20447, 20472, 20521, 20556, 20467, 20524, 20495, 20526, 20525, 20478, 20508, 20492, 20517, 20520, 20606, 20547, 20565, 20552, 20558, 20588, 20603, 20645, 20647, 20649, 20666, 20694, 20742, 20717, 20716, 20710, 20718, 20743, 20747, 20189, 27709, 20312, 20325, 20430, 40864, 27718, 31860, 20846, 24061, 40649, 39320, 20865, 22804, 21241, 21261, 35335, 21264, 20971, 22809, 20821, 20128, 20822, 20147, 34926, 34980, 20149, 33044, 35026, 31104, 23348, 34819, 32696, 20907, 20913, 20925, 20924, 36110, 36111, 36112, 36113, 36114, 36115, 36116, 36117, 36118, 36119, 36120, 36121, 36122, 36123, 36124, 36128, 36177, 36178, 36183, 36191, 36197, 36200, 36201, 36202, 36204, 36206, 36207, 36209, 36210, 36216, 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, 36226, 36227, 36230, 36231, 36232, 36233, 36236, 36237, 36238, 36239, 36240, 36242, 36243, 36245, 36246, 36247, 36248, 36249, 36250, 36251, 36252, 36253, 36254, 36256, 36257, 36258, 36260, 36261, 36262, 36263, 36264, 36265, 36266, 36267, 36268, 36269, 36270, 36271, 36272, 36274, 36278, 36279, 36281, 36283, 36285, 36288, 36289, 36290, 36293, 36295, 36296, 36297, 36298, 36301, 36304, 36306, 36307, 36308, 20935, 20886, 20898, 20901, 35744, 35750, 35751, 35754, 35764, 35765, 35767, 35778, 35779, 35787, 35791, 35790, 35794, 35795, 35796, 35798, 35800, 35801, 35804, 35807, 35808, 35812, 35816, 35817, 35822, 35824, 35827, 35830, 35833, 35836, 35839, 35840, 35842, 35844, 35847, 35852, 35855, 35857, 35858, 35860, 35861, 35862, 35865, 35867, 35864, 35869, 35871, 35872, 35873, 35877, 35879, 35882, 35883, 35886, 35887, 35890, 35891, 35893, 35894, 21353, 21370, 38429, 38434, 38433, 38449, 38442, 38461, 38460, 38466, 38473, 38484, 38495, 38503, 38508, 38514, 38516, 38536, 38541, 38551, 38576, 37015, 37019, 37021, 37017, 37036, 37025, 37044, 37043, 37046, 37050, 36309, 36312, 36313, 36316, 36320, 36321, 36322, 36325, 36326, 36327, 36329, 36333, 36334, 36336, 36337, 36338, 36340, 36342, 36348, 36350, 36351, 36352, 36353, 36354, 36355, 36356, 36358, 36359, 36360, 36363, 36365, 36366, 36368, 36369, 36370, 36371, 36373, 36374, 36375, 36376, 36377, 36378, 36379, 36380, 36384, 36385, 36388, 36389, 36390, 36391, 36392, 36395, 36397, 36400, 36402, 36403, 36404, 36406, 36407, 36408, 36411, 36412, 36414, 36415, 36419, 36421, 36422, 36428, 36429, 36430, 36431, 36432, 36435, 36436, 36437, 36438, 36439, 36440, 36442, 36443, 36444, 36445, 36446, 36447, 36448, 36449, 36450, 36451, 36452, 36453, 36455, 36456, 36458, 36459, 36462, 36465, 37048, 37040, 37071, 37061, 37054, 37072, 37060, 37063, 37075, 37094, 37090, 37084, 37079, 37083, 37099, 37103, 37118, 37124, 37154, 37150, 37155, 37169, 37167, 37177, 37187, 37190, 21005, 22850, 21154, 21164, 21165, 21182, 21759, 21200, 21206, 21232, 21471, 29166, 30669, 24308, 20981, 20988, 39727, 21430, 24321, 30042, 24047, 22348, 22441, 22433, 22654, 22716, 22725, 22737, 22313, 22316, 22314, 22323, 22329, 22318, 22319, 22364, 22331, 22338, 22377, 22405, 22379, 22406, 22396, 22395, 22376, 22381, 22390, 22387, 22445, 22436, 22412, 22450, 22479, 22439, 22452, 22419, 22432, 22485, 22488, 22490, 22489, 22482, 22456, 22516, 22511, 22520, 22500, 22493, 36467, 36469, 36471, 36472, 36473, 36474, 36475, 36477, 36478, 36480, 36482, 36483, 36484, 36486, 36488, 36489, 36490, 36491, 36492, 36493, 36494, 36497, 36498, 36499, 36501, 36502, 36503, 36504, 36505, 36506, 36507, 36509, 36511, 36512, 36513, 36514, 36515, 36516, 36517, 36518, 36519, 36520, 36521, 36522, 36525, 36526, 36528, 36529, 36531, 36532, 36533, 36534, 36535, 36536, 36537, 36539, 36540, 36541, 36542, 36543, 36544, 36545, 36546, 36547, 36548, 36549, 36550, 36551, 36552, 36553, 36554, 36555, 36556, 36557, 36559, 36560, 36561, 36562, 36563, 36564, 36565, 36566, 36567, 36568, 36569, 36570, 36571, 36572, 36573, 36574, 36575, 36576, 36577, 36578, 36579, 36580, 22539, 22541, 22525, 22509, 22528, 22558, 22553, 22596, 22560, 22629, 22636, 22657, 22665, 22682, 22656, 39336, 40729, 25087, 33401, 33405, 33407, 33423, 33418, 33448, 33412, 33422, 33425, 33431, 33433, 33451, 33464, 33470, 33456, 33480, 33482, 33507, 33432, 33463, 33454, 33483, 33484, 33473, 33449, 33460, 33441, 33450, 33439, 33476, 33486, 33444, 33505, 33545, 33527, 33508, 33551, 33543, 33500, 33524, 33490, 33496, 33548, 33531, 33491, 33553, 33562, 33542, 33556, 33557, 33504, 33493, 33564, 33617, 33627, 33628, 33544, 33682, 33596, 33588, 33585, 33691, 33630, 33583, 33615, 33607, 33603, 33631, 33600, 33559, 33632, 33581, 33594, 33587, 33638, 33637, 36581, 36582, 36583, 36584, 36585, 36586, 36587, 36588, 36589, 36590, 36591, 36592, 36593, 36594, 36595, 36596, 36597, 36598, 36599, 36600, 36601, 36602, 36603, 36604, 36605, 36606, 36607, 36608, 36609, 36610, 36611, 36612, 36613, 36614, 36615, 36616, 36617, 36618, 36619, 36620, 36621, 36622, 36623, 36624, 36625, 36626, 36627, 36628, 36629, 36630, 36631, 36632, 36633, 36634, 36635, 36636, 36637, 36638, 36639, 36640, 36641, 36642, 36643, 36644, 36645, 36646, 36647, 36648, 36649, 36650, 36651, 36652, 36653, 36654, 36655, 36656, 36657, 36658, 36659, 36660, 36661, 36662, 36663, 36664, 36665, 36666, 36667, 36668, 36669, 36670, 36671, 36672, 36673, 36674, 36675, 36676, 33640, 33563, 33641, 33644, 33642, 33645, 33646, 33712, 33656, 33715, 33716, 33696, 33706, 33683, 33692, 33669, 33660, 33718, 33705, 33661, 33720, 33659, 33688, 33694, 33704, 33722, 33724, 33729, 33793, 33765, 33752, 22535, 33816, 33803, 33757, 33789, 33750, 33820, 33848, 33809, 33798, 33748, 33759, 33807, 33795, 33784, 33785, 33770, 33733, 33728, 33830, 33776, 33761, 33884, 33873, 33882, 33881, 33907, 33927, 33928, 33914, 33929, 33912, 33852, 33862, 33897, 33910, 33932, 33934, 33841, 33901, 33985, 33997, 34e3, 34022, 33981, 34003, 33994, 33983, 33978, 34016, 33953, 33977, 33972, 33943, 34021, 34019, 34060, 29965, 34104, 34032, 34105, 34079, 34106, 36677, 36678, 36679, 36680, 36681, 36682, 36683, 36684, 36685, 36686, 36687, 36688, 36689, 36690, 36691, 36692, 36693, 36694, 36695, 36696, 36697, 36698, 36699, 36700, 36701, 36702, 36703, 36704, 36705, 36706, 36707, 36708, 36709, 36714, 36736, 36748, 36754, 36765, 36768, 36769, 36770, 36772, 36773, 36774, 36775, 36778, 36780, 36781, 36782, 36783, 36786, 36787, 36788, 36789, 36791, 36792, 36794, 36795, 36796, 36799, 36800, 36803, 36806, 36809, 36810, 36811, 36812, 36813, 36815, 36818, 36822, 36823, 36826, 36832, 36833, 36835, 36839, 36844, 36847, 36849, 36850, 36852, 36853, 36854, 36858, 36859, 36860, 36862, 36863, 36871, 36872, 36876, 36878, 36883, 36885, 36888, 34134, 34107, 34047, 34044, 34137, 34120, 34152, 34148, 34142, 34170, 30626, 34115, 34162, 34171, 34212, 34216, 34183, 34191, 34169, 34222, 34204, 34181, 34233, 34231, 34224, 34259, 34241, 34268, 34303, 34343, 34309, 34345, 34326, 34364, 24318, 24328, 22844, 22849, 32823, 22869, 22874, 22872, 21263, 23586, 23589, 23596, 23604, 25164, 25194, 25247, 25275, 25290, 25306, 25303, 25326, 25378, 25334, 25401, 25419, 25411, 25517, 25590, 25457, 25466, 25486, 25524, 25453, 25516, 25482, 25449, 25518, 25532, 25586, 25592, 25568, 25599, 25540, 25566, 25550, 25682, 25542, 25534, 25669, 25665, 25611, 25627, 25632, 25612, 25638, 25633, 25694, 25732, 25709, 25750, 36889, 36892, 36899, 36900, 36901, 36903, 36904, 36905, 36906, 36907, 36908, 36912, 36913, 36914, 36915, 36916, 36919, 36921, 36922, 36925, 36927, 36928, 36931, 36933, 36934, 36936, 36937, 36938, 36939, 36940, 36942, 36948, 36949, 36950, 36953, 36954, 36956, 36957, 36958, 36959, 36960, 36961, 36964, 36966, 36967, 36969, 36970, 36971, 36972, 36975, 36976, 36977, 36978, 36979, 36982, 36983, 36984, 36985, 36986, 36987, 36988, 36990, 36993, 36996, 36997, 36998, 36999, 37001, 37002, 37004, 37005, 37006, 37007, 37008, 37010, 37012, 37014, 37016, 37018, 37020, 37022, 37023, 37024, 37028, 37029, 37031, 37032, 37033, 37035, 37037, 37042, 37047, 37052, 37053, 37055, 37056, 25722, 25783, 25784, 25753, 25786, 25792, 25808, 25815, 25828, 25826, 25865, 25893, 25902, 24331, 24530, 29977, 24337, 21343, 21489, 21501, 21481, 21480, 21499, 21522, 21526, 21510, 21579, 21586, 21587, 21588, 21590, 21571, 21537, 21591, 21593, 21539, 21554, 21634, 21652, 21623, 21617, 21604, 21658, 21659, 21636, 21622, 21606, 21661, 21712, 21677, 21698, 21684, 21714, 21671, 21670, 21715, 21716, 21618, 21667, 21717, 21691, 21695, 21708, 21721, 21722, 21724, 21673, 21674, 21668, 21725, 21711, 21726, 21787, 21735, 21792, 21757, 21780, 21747, 21794, 21795, 21775, 21777, 21799, 21802, 21863, 21903, 21941, 21833, 21869, 21825, 21845, 21823, 21840, 21820, 37058, 37059, 37062, 37064, 37065, 37067, 37068, 37069, 37074, 37076, 37077, 37078, 37080, 37081, 37082, 37086, 37087, 37088, 37091, 37092, 37093, 37097, 37098, 37100, 37102, 37104, 37105, 37106, 37107, 37109, 37110, 37111, 37113, 37114, 37115, 37116, 37119, 37120, 37121, 37123, 37125, 37126, 37127, 37128, 37129, 37130, 37131, 37132, 37133, 37134, 37135, 37136, 37137, 37138, 37139, 37140, 37141, 37142, 37143, 37144, 37146, 37147, 37148, 37149, 37151, 37152, 37153, 37156, 37157, 37158, 37159, 37160, 37161, 37162, 37163, 37164, 37165, 37166, 37168, 37170, 37171, 37172, 37173, 37174, 37175, 37176, 37178, 37179, 37180, 37181, 37182, 37183, 37184, 37185, 37186, 37188, 21815, 21846, 21877, 21878, 21879, 21811, 21808, 21852, 21899, 21970, 21891, 21937, 21945, 21896, 21889, 21919, 21886, 21974, 21905, 21883, 21983, 21949, 21950, 21908, 21913, 21994, 22007, 21961, 22047, 21969, 21995, 21996, 21972, 21990, 21981, 21956, 21999, 21989, 22002, 22003, 21964, 21965, 21992, 22005, 21988, 36756, 22046, 22024, 22028, 22017, 22052, 22051, 22014, 22016, 22055, 22061, 22104, 22073, 22103, 22060, 22093, 22114, 22105, 22108, 22092, 22100, 22150, 22116, 22129, 22123, 22139, 22140, 22149, 22163, 22191, 22228, 22231, 22237, 22241, 22261, 22251, 22265, 22271, 22276, 22282, 22281, 22300, 24079, 24089, 24084, 24081, 24113, 24123, 24124, 37189, 37191, 37192, 37201, 37203, 37204, 37205, 37206, 37208, 37209, 37211, 37212, 37215, 37216, 37222, 37223, 37224, 37227, 37229, 37235, 37242, 37243, 37244, 37248, 37249, 37250, 37251, 37252, 37254, 37256, 37258, 37262, 37263, 37267, 37268, 37269, 37270, 37271, 37272, 37273, 37276, 37277, 37278, 37279, 37280, 37281, 37284, 37285, 37286, 37287, 37288, 37289, 37291, 37292, 37296, 37297, 37298, 37299, 37302, 37303, 37304, 37305, 37307, 37308, 37309, 37310, 37311, 37312, 37313, 37314, 37315, 37316, 37317, 37318, 37320, 37323, 37328, 37330, 37331, 37332, 37333, 37334, 37335, 37336, 37337, 37338, 37339, 37341, 37342, 37343, 37344, 37345, 37346, 37347, 37348, 37349, 24119, 24132, 24148, 24155, 24158, 24161, 23692, 23674, 23693, 23696, 23702, 23688, 23704, 23705, 23697, 23706, 23708, 23733, 23714, 23741, 23724, 23723, 23729, 23715, 23745, 23735, 23748, 23762, 23780, 23755, 23781, 23810, 23811, 23847, 23846, 23854, 23844, 23838, 23814, 23835, 23896, 23870, 23860, 23869, 23916, 23899, 23919, 23901, 23915, 23883, 23882, 23913, 23924, 23938, 23961, 23965, 35955, 23991, 24005, 24435, 24439, 24450, 24455, 24457, 24460, 24469, 24473, 24476, 24488, 24493, 24501, 24508, 34914, 24417, 29357, 29360, 29364, 29367, 29368, 29379, 29377, 29390, 29389, 29394, 29416, 29423, 29417, 29426, 29428, 29431, 29441, 29427, 29443, 29434, 37350, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358, 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414, 37415, 37416, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437, 37438, 37439, 37440, 37441, 37442, 37443, 37444, 37445, 29435, 29463, 29459, 29473, 29450, 29470, 29469, 29461, 29474, 29497, 29477, 29484, 29496, 29489, 29520, 29517, 29527, 29536, 29548, 29551, 29566, 33307, 22821, 39143, 22820, 22786, 39267, 39271, 39272, 39273, 39274, 39275, 39276, 39284, 39287, 39293, 39296, 39300, 39303, 39306, 39309, 39312, 39313, 39315, 39316, 39317, 24192, 24209, 24203, 24214, 24229, 24224, 24249, 24245, 24254, 24243, 36179, 24274, 24273, 24283, 24296, 24298, 33210, 24516, 24521, 24534, 24527, 24579, 24558, 24580, 24545, 24548, 24574, 24581, 24582, 24554, 24557, 24568, 24601, 24629, 24614, 24603, 24591, 24589, 24617, 24619, 24586, 24639, 24609, 24696, 24697, 24699, 24698, 24642, 37446, 37447, 37448, 37449, 37450, 37451, 37452, 37453, 37454, 37455, 37456, 37457, 37458, 37459, 37460, 37461, 37462, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37470, 37471, 37472, 37473, 37474, 37475, 37476, 37477, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37487, 37488, 37489, 37490, 37491, 37493, 37494, 37495, 37496, 37497, 37498, 37499, 37500, 37501, 37502, 37503, 37504, 37505, 37506, 37507, 37508, 37509, 37510, 37511, 37512, 37513, 37514, 37515, 37516, 37517, 37519, 37520, 37521, 37522, 37523, 37524, 37525, 37526, 37527, 37528, 37529, 37530, 37531, 37532, 37533, 37534, 37535, 37536, 37537, 37538, 37539, 37540, 37541, 37542, 37543, 24682, 24701, 24726, 24730, 24749, 24733, 24707, 24722, 24716, 24731, 24812, 24763, 24753, 24797, 24792, 24774, 24794, 24756, 24864, 24870, 24853, 24867, 24820, 24832, 24846, 24875, 24906, 24949, 25004, 24980, 24999, 25015, 25044, 25077, 24541, 38579, 38377, 38379, 38385, 38387, 38389, 38390, 38396, 38398, 38403, 38404, 38406, 38408, 38410, 38411, 38412, 38413, 38415, 38418, 38421, 38422, 38423, 38425, 38426, 20012, 29247, 25109, 27701, 27732, 27740, 27722, 27811, 27781, 27792, 27796, 27788, 27752, 27753, 27764, 27766, 27782, 27817, 27856, 27860, 27821, 27895, 27896, 27889, 27863, 27826, 27872, 27862, 27898, 27883, 27886, 27825, 27859, 27887, 27902, 37544, 37545, 37546, 37547, 37548, 37549, 37551, 37552, 37553, 37554, 37555, 37556, 37557, 37558, 37559, 37560, 37561, 37562, 37563, 37564, 37565, 37566, 37567, 37568, 37569, 37570, 37571, 37572, 37573, 37574, 37575, 37577, 37578, 37579, 37580, 37581, 37582, 37583, 37584, 37585, 37586, 37587, 37588, 37589, 37590, 37591, 37592, 37593, 37594, 37595, 37596, 37597, 37598, 37599, 37600, 37601, 37602, 37603, 37604, 37605, 37606, 37607, 37608, 37609, 37610, 37611, 37612, 37613, 37614, 37615, 37616, 37617, 37618, 37619, 37620, 37621, 37622, 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, 37639, 37640, 37641, 27961, 27943, 27916, 27971, 27976, 27911, 27908, 27929, 27918, 27947, 27981, 27950, 27957, 27930, 27983, 27986, 27988, 27955, 28049, 28015, 28062, 28064, 27998, 28051, 28052, 27996, 28e3, 28028, 28003, 28186, 28103, 28101, 28126, 28174, 28095, 28128, 28177, 28134, 28125, 28121, 28182, 28075, 28172, 28078, 28203, 28270, 28238, 28267, 28338, 28255, 28294, 28243, 28244, 28210, 28197, 28228, 28383, 28337, 28312, 28384, 28461, 28386, 28325, 28327, 28349, 28347, 28343, 28375, 28340, 28367, 28303, 28354, 28319, 28514, 28486, 28487, 28452, 28437, 28409, 28463, 28470, 28491, 28532, 28458, 28425, 28457, 28553, 28557, 28556, 28536, 28530, 28540, 28538, 28625, 37642, 37643, 37644, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 37653, 37654, 37655, 37656, 37657, 37658, 37659, 37660, 37661, 37662, 37663, 37664, 37665, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, 37675, 37676, 37677, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37695, 37696, 37697, 37698, 37699, 37700, 37701, 37702, 37703, 37704, 37705, 37706, 37707, 37708, 37709, 37710, 37711, 37712, 37713, 37714, 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37722, 37723, 37724, 37725, 37726, 37727, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37736, 37737, 37739, 28617, 28583, 28601, 28598, 28610, 28641, 28654, 28638, 28640, 28655, 28698, 28707, 28699, 28729, 28725, 28751, 28766, 23424, 23428, 23445, 23443, 23461, 23480, 29999, 39582, 25652, 23524, 23534, 35120, 23536, 36423, 35591, 36790, 36819, 36821, 36837, 36846, 36836, 36841, 36838, 36851, 36840, 36869, 36868, 36875, 36902, 36881, 36877, 36886, 36897, 36917, 36918, 36909, 36911, 36932, 36945, 36946, 36944, 36968, 36952, 36962, 36955, 26297, 36980, 36989, 36994, 37e3, 36995, 37003, 24400, 24407, 24406, 24408, 23611, 21675, 23632, 23641, 23409, 23651, 23654, 32700, 24362, 24361, 24365, 33396, 24380, 39739, 23662, 22913, 22915, 22925, 22953, 22954, 22947, 37740, 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37750, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37776, 37777, 37778, 37779, 37780, 37781, 37782, 37783, 37784, 37785, 37786, 37787, 37788, 37789, 37790, 37791, 37792, 37793, 37794, 37795, 37796, 37797, 37798, 37799, 37800, 37801, 37802, 37803, 37804, 37805, 37806, 37807, 37808, 37809, 37810, 37811, 37812, 37813, 37814, 37815, 37816, 37817, 37818, 37819, 37820, 37821, 37822, 37823, 37824, 37825, 37826, 37827, 37828, 37829, 37830, 37831, 37832, 37833, 37835, 37836, 37837, 22935, 22986, 22955, 22942, 22948, 22994, 22962, 22959, 22999, 22974, 23045, 23046, 23005, 23048, 23011, 23e3, 23033, 23052, 23049, 23090, 23092, 23057, 23075, 23059, 23104, 23143, 23114, 23125, 23100, 23138, 23157, 33004, 23210, 23195, 23159, 23162, 23230, 23275, 23218, 23250, 23252, 23224, 23264, 23267, 23281, 23254, 23270, 23256, 23260, 23305, 23319, 23318, 23346, 23351, 23360, 23573, 23580, 23386, 23397, 23411, 23377, 23379, 23394, 39541, 39543, 39544, 39546, 39551, 39549, 39552, 39553, 39557, 39560, 39562, 39568, 39570, 39571, 39574, 39576, 39579, 39580, 39581, 39583, 39584, 39586, 39587, 39589, 39591, 32415, 32417, 32419, 32421, 32424, 32425, 37838, 37839, 37840, 37841, 37842, 37843, 37844, 37845, 37847, 37848, 37849, 37850, 37851, 37852, 37853, 37854, 37855, 37856, 37857, 37858, 37859, 37860, 37861, 37862, 37863, 37864, 37865, 37866, 37867, 37868, 37869, 37870, 37871, 37872, 37873, 37874, 37875, 37876, 37877, 37878, 37879, 37880, 37881, 37882, 37883, 37884, 37885, 37886, 37887, 37888, 37889, 37890, 37891, 37892, 37893, 37894, 37895, 37896, 37897, 37898, 37899, 37900, 37901, 37902, 37903, 37904, 37905, 37906, 37907, 37908, 37909, 37910, 37911, 37912, 37913, 37914, 37915, 37916, 37917, 37918, 37919, 37920, 37921, 37922, 37923, 37924, 37925, 37926, 37927, 37928, 37929, 37930, 37931, 37932, 37933, 37934, 32429, 32432, 32446, 32448, 32449, 32450, 32457, 32459, 32460, 32464, 32468, 32471, 32475, 32480, 32481, 32488, 32491, 32494, 32495, 32497, 32498, 32525, 32502, 32506, 32507, 32510, 32513, 32514, 32515, 32519, 32520, 32523, 32524, 32527, 32529, 32530, 32535, 32537, 32540, 32539, 32543, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32554, 32555, 32556, 32557, 32559, 32560, 32561, 32562, 32563, 32565, 24186, 30079, 24027, 30014, 37013, 29582, 29585, 29614, 29602, 29599, 29647, 29634, 29649, 29623, 29619, 29632, 29641, 29640, 29669, 29657, 39036, 29706, 29673, 29671, 29662, 29626, 29682, 29711, 29738, 29787, 29734, 29733, 29736, 29744, 29742, 29740, 37935, 37936, 37937, 37938, 37939, 37940, 37941, 37942, 37943, 37944, 37945, 37946, 37947, 37948, 37949, 37951, 37952, 37953, 37954, 37955, 37956, 37957, 37958, 37959, 37960, 37961, 37962, 37963, 37964, 37965, 37966, 37967, 37968, 37969, 37970, 37971, 37972, 37973, 37974, 37975, 37976, 37977, 37978, 37979, 37980, 37981, 37982, 37983, 37984, 37985, 37986, 37987, 37988, 37989, 37990, 37991, 37992, 37993, 37994, 37996, 37997, 37998, 37999, 38e3, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38009, 38010, 38011, 38012, 38013, 38014, 38015, 38016, 38017, 38018, 38019, 38020, 38033, 38038, 38040, 38087, 38095, 38099, 38100, 38106, 38118, 38139, 38172, 38176, 29723, 29722, 29761, 29788, 29783, 29781, 29785, 29815, 29805, 29822, 29852, 29838, 29824, 29825, 29831, 29835, 29854, 29864, 29865, 29840, 29863, 29906, 29882, 38890, 38891, 38892, 26444, 26451, 26462, 26440, 26473, 26533, 26503, 26474, 26483, 26520, 26535, 26485, 26536, 26526, 26541, 26507, 26487, 26492, 26608, 26633, 26584, 26634, 26601, 26544, 26636, 26585, 26549, 26586, 26547, 26589, 26624, 26563, 26552, 26594, 26638, 26561, 26621, 26674, 26675, 26720, 26721, 26702, 26722, 26692, 26724, 26755, 26653, 26709, 26726, 26689, 26727, 26688, 26686, 26698, 26697, 26665, 26805, 26767, 26740, 26743, 26771, 26731, 26818, 26990, 26876, 26911, 26912, 26873, 38183, 38195, 38205, 38211, 38216, 38219, 38229, 38234, 38240, 38254, 38260, 38261, 38263, 38264, 38265, 38266, 38267, 38268, 38269, 38270, 38272, 38273, 38274, 38275, 38276, 38277, 38278, 38279, 38280, 38281, 38282, 38283, 38284, 38285, 38286, 38287, 38288, 38289, 38290, 38291, 38292, 38293, 38294, 38295, 38296, 38297, 38298, 38299, 38300, 38301, 38302, 38303, 38304, 38305, 38306, 38307, 38308, 38309, 38310, 38311, 38312, 38313, 38314, 38315, 38316, 38317, 38318, 38319, 38320, 38321, 38322, 38323, 38324, 38325, 38326, 38327, 38328, 38329, 38330, 38331, 38332, 38333, 38334, 38335, 38336, 38337, 38338, 38339, 38340, 38341, 38342, 38343, 38344, 38345, 38346, 38347, 26916, 26864, 26891, 26881, 26967, 26851, 26896, 26993, 26937, 26976, 26946, 26973, 27012, 26987, 27008, 27032, 27e3, 26932, 27084, 27015, 27016, 27086, 27017, 26982, 26979, 27001, 27035, 27047, 27067, 27051, 27053, 27092, 27057, 27073, 27082, 27103, 27029, 27104, 27021, 27135, 27183, 27117, 27159, 27160, 27237, 27122, 27204, 27198, 27296, 27216, 27227, 27189, 27278, 27257, 27197, 27176, 27224, 27260, 27281, 27280, 27305, 27287, 27307, 29495, 29522, 27521, 27522, 27527, 27524, 27538, 27539, 27533, 27546, 27547, 27553, 27562, 36715, 36717, 36721, 36722, 36723, 36725, 36726, 36728, 36727, 36729, 36730, 36732, 36734, 36737, 36738, 36740, 36743, 36747, 38348, 38349, 38350, 38351, 38352, 38353, 38354, 38355, 38356, 38357, 38358, 38359, 38360, 38361, 38362, 38363, 38364, 38365, 38366, 38367, 38368, 38369, 38370, 38371, 38372, 38373, 38374, 38375, 38380, 38399, 38407, 38419, 38424, 38427, 38430, 38432, 38435, 38436, 38437, 38438, 38439, 38440, 38441, 38443, 38444, 38445, 38447, 38448, 38455, 38456, 38457, 38458, 38462, 38465, 38467, 38474, 38478, 38479, 38481, 38482, 38483, 38486, 38487, 38488, 38489, 38490, 38492, 38493, 38494, 38496, 38499, 38501, 38502, 38507, 38509, 38510, 38511, 38512, 38513, 38515, 38520, 38521, 38522, 38523, 38524, 38525, 38526, 38527, 38528, 38529, 38530, 38531, 38532, 38535, 38537, 38538, 36749, 36750, 36751, 36760, 36762, 36558, 25099, 25111, 25115, 25119, 25122, 25121, 25125, 25124, 25132, 33255, 29935, 29940, 29951, 29967, 29969, 29971, 25908, 26094, 26095, 26096, 26122, 26137, 26482, 26115, 26133, 26112, 28805, 26359, 26141, 26164, 26161, 26166, 26165, 32774, 26207, 26196, 26177, 26191, 26198, 26209, 26199, 26231, 26244, 26252, 26279, 26269, 26302, 26331, 26332, 26342, 26345, 36146, 36147, 36150, 36155, 36157, 36160, 36165, 36166, 36168, 36169, 36167, 36173, 36181, 36185, 35271, 35274, 35275, 35276, 35278, 35279, 35280, 35281, 29294, 29343, 29277, 29286, 29295, 29310, 29311, 29316, 29323, 29325, 29327, 29330, 25352, 25394, 25520, 38540, 38542, 38545, 38546, 38547, 38549, 38550, 38554, 38555, 38557, 38558, 38559, 38560, 38561, 38562, 38563, 38564, 38565, 38566, 38568, 38569, 38570, 38571, 38572, 38573, 38574, 38575, 38577, 38578, 38580, 38581, 38583, 38584, 38586, 38587, 38591, 38594, 38595, 38600, 38602, 38603, 38608, 38609, 38611, 38612, 38614, 38615, 38616, 38617, 38618, 38619, 38620, 38621, 38622, 38623, 38625, 38626, 38627, 38628, 38629, 38630, 38631, 38635, 38636, 38637, 38638, 38640, 38641, 38642, 38644, 38645, 38648, 38650, 38651, 38652, 38653, 38655, 38658, 38659, 38661, 38666, 38667, 38668, 38672, 38673, 38674, 38676, 38677, 38679, 38680, 38681, 38682, 38683, 38685, 38687, 38688, 25663, 25816, 32772, 27626, 27635, 27645, 27637, 27641, 27653, 27655, 27654, 27661, 27669, 27672, 27673, 27674, 27681, 27689, 27684, 27690, 27698, 25909, 25941, 25963, 29261, 29266, 29270, 29232, 34402, 21014, 32927, 32924, 32915, 32956, 26378, 32957, 32945, 32939, 32941, 32948, 32951, 32999, 33e3, 33001, 33002, 32987, 32962, 32964, 32985, 32973, 32983, 26384, 32989, 33003, 33009, 33012, 33005, 33037, 33038, 33010, 33020, 26389, 33042, 35930, 33078, 33054, 33068, 33048, 33074, 33096, 33100, 33107, 33140, 33113, 33114, 33137, 33120, 33129, 33148, 33149, 33133, 33127, 22605, 23221, 33160, 33154, 33169, 28373, 33187, 33194, 33228, 26406, 33226, 33211, 38689, 38690, 38691, 38692, 38693, 38694, 38695, 38696, 38697, 38699, 38700, 38702, 38703, 38705, 38707, 38708, 38709, 38710, 38711, 38714, 38715, 38716, 38717, 38719, 38720, 38721, 38722, 38723, 38724, 38725, 38726, 38727, 38728, 38729, 38730, 38731, 38732, 38733, 38734, 38735, 38736, 38737, 38740, 38741, 38743, 38744, 38746, 38748, 38749, 38751, 38755, 38756, 38758, 38759, 38760, 38762, 38763, 38764, 38765, 38766, 38767, 38768, 38769, 38770, 38773, 38775, 38776, 38777, 38778, 38779, 38781, 38782, 38783, 38784, 38785, 38786, 38787, 38788, 38790, 38791, 38792, 38793, 38794, 38796, 38798, 38799, 38800, 38803, 38805, 38806, 38807, 38809, 38810, 38811, 38812, 38813, 33217, 33190, 27428, 27447, 27449, 27459, 27462, 27481, 39121, 39122, 39123, 39125, 39129, 39130, 27571, 24384, 27586, 35315, 26e3, 40785, 26003, 26044, 26054, 26052, 26051, 26060, 26062, 26066, 26070, 28800, 28828, 28822, 28829, 28859, 28864, 28855, 28843, 28849, 28904, 28874, 28944, 28947, 28950, 28975, 28977, 29043, 29020, 29032, 28997, 29042, 29002, 29048, 29050, 29080, 29107, 29109, 29096, 29088, 29152, 29140, 29159, 29177, 29213, 29224, 28780, 28952, 29030, 29113, 25150, 25149, 25155, 25160, 25161, 31035, 31040, 31046, 31049, 31067, 31068, 31059, 31066, 31074, 31063, 31072, 31087, 31079, 31098, 31109, 31114, 31130, 31143, 31155, 24529, 24528, 38814, 38815, 38817, 38818, 38820, 38821, 38822, 38823, 38824, 38825, 38826, 38828, 38830, 38832, 38833, 38835, 38837, 38838, 38839, 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, 38882, 38883, 38884, 38885, 38888, 38894, 38895, 38896, 38897, 38898, 38900, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 24636, 24669, 24666, 24679, 24641, 24665, 24675, 24747, 24838, 24845, 24925, 25001, 24989, 25035, 25041, 25094, 32896, 32895, 27795, 27894, 28156, 30710, 30712, 30720, 30729, 30743, 30744, 30737, 26027, 30765, 30748, 30749, 30777, 30778, 30779, 30751, 30780, 30757, 30764, 30755, 30761, 30798, 30829, 30806, 30807, 30758, 30800, 30791, 30796, 30826, 30875, 30867, 30874, 30855, 30876, 30881, 30883, 30898, 30905, 30885, 30932, 30937, 30921, 30956, 30962, 30981, 30964, 30995, 31012, 31006, 31028, 40859, 40697, 40699, 40700, 30449, 30468, 30477, 30457, 30471, 30472, 30490, 30498, 30489, 30509, 30502, 30517, 30520, 30544, 30545, 30535, 30531, 30554, 30568, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, 38952, 38953, 38954, 38955, 38956, 38957, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, 38968, 38969, 38970, 38971, 38972, 38973, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38996, 38997, 38998, 38999, 39e3, 39001, 39002, 39003, 39004, 39005, 39006, 39007, 39008, 39009, 39010, 39011, 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 30562, 30565, 30591, 30605, 30589, 30592, 30604, 30609, 30623, 30624, 30640, 30645, 30653, 30010, 30016, 30030, 30027, 30024, 30043, 30066, 30073, 30083, 32600, 32609, 32607, 35400, 32616, 32628, 32625, 32633, 32641, 32638, 30413, 30437, 34866, 38021, 38022, 38023, 38027, 38026, 38028, 38029, 38031, 38032, 38036, 38039, 38037, 38042, 38043, 38044, 38051, 38052, 38059, 38058, 38061, 38060, 38063, 38064, 38066, 38068, 38070, 38071, 38072, 38073, 38074, 38076, 38077, 38079, 38084, 38088, 38089, 38090, 38091, 38092, 38093, 38094, 38096, 38097, 38098, 38101, 38102, 38103, 38105, 38104, 38107, 38110, 38111, 38112, 38114, 38116, 38117, 38119, 38120, 38122, 39023, 39024, 39025, 39026, 39027, 39028, 39051, 39054, 39058, 39061, 39065, 39075, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106, 39107, 39108, 39109, 39110, 39111, 39112, 39113, 39114, 39115, 39116, 39117, 39119, 39120, 39124, 39126, 39127, 39131, 39132, 39133, 39136, 39137, 39138, 39139, 39140, 39141, 39142, 39145, 39146, 39147, 39148, 39149, 39150, 39151, 39152, 39153, 39154, 39155, 39156, 39157, 39158, 39159, 39160, 39161, 39162, 39163, 39164, 39165, 39166, 39167, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 38121, 38123, 38126, 38127, 38131, 38132, 38133, 38135, 38137, 38140, 38141, 38143, 38147, 38146, 38150, 38151, 38153, 38154, 38157, 38158, 38159, 38162, 38163, 38164, 38165, 38166, 38168, 38171, 38173, 38174, 38175, 38178, 38186, 38187, 38185, 38188, 38193, 38194, 38196, 38198, 38199, 38200, 38204, 38206, 38207, 38210, 38197, 38212, 38213, 38214, 38217, 38220, 38222, 38223, 38226, 38227, 38228, 38230, 38231, 38232, 38233, 38235, 38238, 38239, 38237, 38241, 38242, 38244, 38245, 38246, 38247, 38248, 38249, 38250, 38251, 38252, 38255, 38257, 38258, 38259, 38202, 30695, 30700, 38601, 31189, 31213, 31203, 31211, 31238, 23879, 31235, 31234, 31262, 31252, 39176, 39177, 39178, 39179, 39180, 39182, 39183, 39185, 39186, 39187, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39201, 39202, 39203, 39204, 39205, 39206, 39207, 39208, 39209, 39210, 39211, 39212, 39213, 39215, 39216, 39217, 39218, 39219, 39220, 39221, 39222, 39223, 39224, 39225, 39226, 39227, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39238, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39263, 39264, 39265, 39266, 39268, 39270, 39283, 39288, 39289, 39291, 39294, 39298, 39299, 39305, 31289, 31287, 31313, 40655, 39333, 31344, 30344, 30350, 30355, 30361, 30372, 29918, 29920, 29996, 40480, 40482, 40488, 40489, 40490, 40491, 40492, 40498, 40497, 40502, 40504, 40503, 40505, 40506, 40510, 40513, 40514, 40516, 40518, 40519, 40520, 40521, 40523, 40524, 40526, 40529, 40533, 40535, 40538, 40539, 40540, 40542, 40547, 40550, 40551, 40552, 40553, 40554, 40555, 40556, 40561, 40557, 40563, 30098, 30100, 30102, 30112, 30109, 30124, 30115, 30131, 30132, 30136, 30148, 30129, 30128, 30147, 30146, 30166, 30157, 30179, 30184, 30182, 30180, 30187, 30183, 30211, 30193, 30204, 30207, 30224, 30208, 30213, 30220, 30231, 30218, 30245, 30232, 30229, 30233, 39308, 39310, 39322, 39323, 39324, 39325, 39326, 39327, 39328, 39329, 39330, 39331, 39332, 39334, 39335, 39337, 39338, 39339, 39340, 39341, 39342, 39343, 39344, 39345, 39346, 39347, 39348, 39349, 39350, 39351, 39352, 39353, 39354, 39355, 39356, 39357, 39358, 39359, 39360, 39361, 39362, 39363, 39364, 39365, 39366, 39367, 39368, 39369, 39370, 39371, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39381, 39382, 39383, 39384, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39410, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 30235, 30268, 30242, 30240, 30272, 30253, 30256, 30271, 30261, 30275, 30270, 30259, 30285, 30302, 30292, 30300, 30294, 30315, 30319, 32714, 31462, 31352, 31353, 31360, 31366, 31368, 31381, 31398, 31392, 31404, 31400, 31405, 31411, 34916, 34921, 34930, 34941, 34943, 34946, 34978, 35014, 34999, 35004, 35017, 35042, 35022, 35043, 35045, 35057, 35098, 35068, 35048, 35070, 35056, 35105, 35097, 35091, 35099, 35082, 35124, 35115, 35126, 35137, 35174, 35195, 30091, 32997, 30386, 30388, 30684, 32786, 32788, 32790, 32796, 32800, 32802, 32805, 32806, 32807, 32809, 32808, 32817, 32779, 32821, 32835, 32838, 32845, 32850, 32873, 32881, 35203, 39032, 39040, 39043, 39418, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39434, 39435, 39436, 39437, 39438, 39439, 39440, 39441, 39442, 39443, 39444, 39445, 39446, 39447, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39456, 39457, 39458, 39459, 39460, 39461, 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39469, 39470, 39471, 39472, 39473, 39474, 39475, 39476, 39477, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39489, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39501, 39502, 39503, 39504, 39505, 39506, 39507, 39508, 39509, 39510, 39511, 39512, 39513, 39049, 39052, 39053, 39055, 39060, 39066, 39067, 39070, 39071, 39073, 39074, 39077, 39078, 34381, 34388, 34412, 34414, 34431, 34426, 34428, 34427, 34472, 34445, 34443, 34476, 34461, 34471, 34467, 34474, 34451, 34473, 34486, 34500, 34485, 34510, 34480, 34490, 34481, 34479, 34505, 34511, 34484, 34537, 34545, 34546, 34541, 34547, 34512, 34579, 34526, 34548, 34527, 34520, 34513, 34563, 34567, 34552, 34568, 34570, 34573, 34569, 34595, 34619, 34590, 34597, 34606, 34586, 34622, 34632, 34612, 34609, 34601, 34615, 34623, 34690, 34594, 34685, 34686, 34683, 34656, 34672, 34636, 34670, 34699, 34643, 34659, 34684, 34660, 34649, 34661, 34707, 34735, 34728, 34770, 39514, 39515, 39516, 39517, 39518, 39519, 39520, 39521, 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530, 39531, 39538, 39555, 39561, 39565, 39566, 39572, 39573, 39577, 39590, 39593, 39594, 39595, 39596, 39597, 39598, 39599, 39602, 39603, 39604, 39605, 39609, 39611, 39613, 39614, 39615, 39619, 39620, 39622, 39623, 39624, 39625, 39626, 39629, 39630, 39631, 39632, 39634, 39636, 39637, 39638, 39639, 39641, 39642, 39643, 39644, 39645, 39646, 39648, 39650, 39651, 39652, 39653, 39655, 39656, 39657, 39658, 39660, 39662, 39664, 39665, 39666, 39667, 39668, 39669, 39670, 39671, 39672, 39674, 39676, 39677, 39678, 39679, 39680, 39681, 39682, 39684, 39685, 39686, 34758, 34696, 34693, 34733, 34711, 34691, 34731, 34789, 34732, 34741, 34739, 34763, 34771, 34749, 34769, 34752, 34762, 34779, 34794, 34784, 34798, 34838, 34835, 34814, 34826, 34843, 34849, 34873, 34876, 32566, 32578, 32580, 32581, 33296, 31482, 31485, 31496, 31491, 31492, 31509, 31498, 31531, 31503, 31559, 31544, 31530, 31513, 31534, 31537, 31520, 31525, 31524, 31539, 31550, 31518, 31576, 31578, 31557, 31605, 31564, 31581, 31584, 31598, 31611, 31586, 31602, 31601, 31632, 31654, 31655, 31672, 31660, 31645, 31656, 31621, 31658, 31644, 31650, 31659, 31668, 31697, 31681, 31692, 31709, 31706, 31717, 31718, 31722, 31756, 31742, 31740, 31759, 31766, 31755, 39687, 39689, 39690, 39691, 39692, 39693, 39694, 39696, 39697, 39698, 39700, 39701, 39702, 39703, 39704, 39705, 39706, 39707, 39708, 39709, 39710, 39712, 39713, 39714, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39728, 39729, 39731, 39732, 39733, 39734, 39735, 39736, 39737, 39738, 39741, 39742, 39743, 39744, 39750, 39754, 39755, 39756, 39758, 39760, 39762, 39763, 39765, 39766, 39767, 39768, 39769, 39770, 39771, 39772, 39773, 39774, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39802, 39803, 31775, 31786, 31782, 31800, 31809, 31808, 33278, 33281, 33282, 33284, 33260, 34884, 33313, 33314, 33315, 33325, 33327, 33320, 33323, 33336, 33339, 33331, 33332, 33342, 33348, 33353, 33355, 33359, 33370, 33375, 33384, 34942, 34949, 34952, 35032, 35039, 35166, 32669, 32671, 32679, 32687, 32688, 32690, 31868, 25929, 31889, 31901, 31900, 31902, 31906, 31922, 31932, 31933, 31937, 31943, 31948, 31949, 31944, 31941, 31959, 31976, 33390, 26280, 32703, 32718, 32725, 32741, 32737, 32742, 32745, 32750, 32755, 31992, 32119, 32166, 32174, 32327, 32411, 40632, 40628, 36211, 36228, 36244, 36241, 36273, 36199, 36205, 35911, 35913, 37194, 37200, 37198, 37199, 37220, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39813, 39814, 39815, 39816, 39817, 39818, 39819, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39828, 39829, 39830, 39831, 39832, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39878, 39879, 39880, 39881, 39882, 39883, 39884, 39885, 39886, 39887, 39888, 39889, 39890, 39891, 39892, 39893, 39894, 39895, 39896, 39897, 39898, 39899, 37218, 37217, 37232, 37225, 37231, 37245, 37246, 37234, 37236, 37241, 37260, 37253, 37264, 37261, 37265, 37282, 37283, 37290, 37293, 37294, 37295, 37301, 37300, 37306, 35925, 40574, 36280, 36331, 36357, 36441, 36457, 36277, 36287, 36284, 36282, 36292, 36310, 36311, 36314, 36318, 36302, 36303, 36315, 36294, 36332, 36343, 36344, 36323, 36345, 36347, 36324, 36361, 36349, 36372, 36381, 36383, 36396, 36398, 36387, 36399, 36410, 36416, 36409, 36405, 36413, 36401, 36425, 36417, 36418, 36433, 36434, 36426, 36464, 36470, 36476, 36463, 36468, 36485, 36495, 36500, 36496, 36508, 36510, 35960, 35970, 35978, 35973, 35992, 35988, 26011, 35286, 35294, 35290, 35292, 39900, 39901, 39902, 39903, 39904, 39905, 39906, 39907, 39908, 39909, 39910, 39911, 39912, 39913, 39914, 39915, 39916, 39917, 39918, 39919, 39920, 39921, 39922, 39923, 39924, 39925, 39926, 39927, 39928, 39929, 39930, 39931, 39932, 39933, 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39941, 39942, 39943, 39944, 39945, 39946, 39947, 39948, 39949, 39950, 39951, 39952, 39953, 39954, 39955, 39956, 39957, 39958, 39959, 39960, 39961, 39962, 39963, 39964, 39965, 39966, 39967, 39968, 39969, 39970, 39971, 39972, 39973, 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, 39990, 39991, 39992, 39993, 39994, 39995, 35301, 35307, 35311, 35390, 35622, 38739, 38633, 38643, 38639, 38662, 38657, 38664, 38671, 38670, 38698, 38701, 38704, 38718, 40832, 40835, 40837, 40838, 40839, 40840, 40841, 40842, 40844, 40702, 40715, 40717, 38585, 38588, 38589, 38606, 38610, 30655, 38624, 37518, 37550, 37576, 37694, 37738, 37834, 37775, 37950, 37995, 40063, 40066, 40069, 40070, 40071, 40072, 31267, 40075, 40078, 40080, 40081, 40082, 40084, 40085, 40090, 40091, 40094, 40095, 40096, 40097, 40098, 40099, 40101, 40102, 40103, 40104, 40105, 40107, 40109, 40110, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 40119, 40122, 40123, 40124, 40125, 40132, 40133, 40134, 40135, 40138, 40139, 39996, 39997, 39998, 39999, 4e4, 40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40035, 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 40061, 40062, 40064, 40067, 40068, 40073, 40074, 40076, 40079, 40083, 40086, 40087, 40088, 40089, 40093, 40106, 40108, 40111, 40121, 40126, 40127, 40128, 40129, 40130, 40136, 40137, 40145, 40146, 40154, 40155, 40160, 40161, 40140, 40141, 40142, 40143, 40144, 40147, 40148, 40149, 40151, 40152, 40153, 40156, 40157, 40159, 40162, 38780, 38789, 38801, 38802, 38804, 38831, 38827, 38819, 38834, 38836, 39601, 39600, 39607, 40536, 39606, 39610, 39612, 39617, 39616, 39621, 39618, 39627, 39628, 39633, 39749, 39747, 39751, 39753, 39752, 39757, 39761, 39144, 39181, 39214, 39253, 39252, 39647, 39649, 39654, 39663, 39659, 39675, 39661, 39673, 39688, 39695, 39699, 39711, 39715, 40637, 40638, 32315, 40578, 40583, 40584, 40587, 40594, 37846, 40605, 40607, 40667, 40668, 40669, 40672, 40671, 40674, 40681, 40679, 40677, 40682, 40687, 40738, 40748, 40751, 40761, 40759, 40765, 40766, 40772, 40163, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40183, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40195, 40196, 40197, 40198, 40199, 40200, 40201, 40202, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40219, 40220, 40221, 40222, 40223, 40224, 40225, 40226, 40227, 40228, 40229, 40230, 40231, 40232, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40248, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 57908, 57909, 57910, 57911, 57912, 57913, 57914, 57915, 57916, 57917, 57918, 57919, 57920, 57921, 57922, 57923, 57924, 57925, 57926, 57927, 57928, 57929, 57930, 57931, 57932, 57933, 57934, 57935, 57936, 57937, 57938, 57939, 57940, 57941, 57942, 57943, 57944, 57945, 57946, 57947, 57948, 57949, 57950, 57951, 57952, 57953, 57954, 57955, 57956, 57957, 57958, 57959, 57960, 57961, 57962, 57963, 57964, 57965, 57966, 57967, 57968, 57969, 57970, 57971, 57972, 57973, 57974, 57975, 57976, 57977, 57978, 57979, 57980, 57981, 57982, 57983, 57984, 57985, 57986, 57987, 57988, 57989, 57990, 57991, 57992, 57993, 57994, 57995, 57996, 57997, 57998, 57999, 58e3, 58001, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40354, 58002, 58003, 58004, 58005, 58006, 58007, 58008, 58009, 58010, 58011, 58012, 58013, 58014, 58015, 58016, 58017, 58018, 58019, 58020, 58021, 58022, 58023, 58024, 58025, 58026, 58027, 58028, 58029, 58030, 58031, 58032, 58033, 58034, 58035, 58036, 58037, 58038, 58039, 58040, 58041, 58042, 58043, 58044, 58045, 58046, 58047, 58048, 58049, 58050, 58051, 58052, 58053, 58054, 58055, 58056, 58057, 58058, 58059, 58060, 58061, 58062, 58063, 58064, 58065, 58066, 58067, 58068, 58069, 58070, 58071, 58072, 58073, 58074, 58075, 58076, 58077, 58078, 58079, 58080, 58081, 58082, 58083, 58084, 58085, 58086, 58087, 58088, 58089, 58090, 58091, 58092, 58093, 58094, 58095, 40355, 40356, 40357, 40358, 40359, 40360, 40361, 40362, 40363, 40364, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40389, 40390, 40391, 40392, 40393, 40394, 40395, 40396, 40397, 40398, 40399, 40400, 40401, 40402, 40403, 40404, 40405, 40406, 40407, 40408, 40409, 40410, 40411, 40412, 40413, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, 40424, 40425, 40426, 40427, 40428, 40429, 40430, 40431, 40432, 40433, 40434, 40435, 40436, 40437, 40438, 40439, 40440, 40441, 40442, 40443, 40444, 40445, 40446, 40447, 40448, 40449, 40450, 58096, 58097, 58098, 58099, 58100, 58101, 58102, 58103, 58104, 58105, 58106, 58107, 58108, 58109, 58110, 58111, 58112, 58113, 58114, 58115, 58116, 58117, 58118, 58119, 58120, 58121, 58122, 58123, 58124, 58125, 58126, 58127, 58128, 58129, 58130, 58131, 58132, 58133, 58134, 58135, 58136, 58137, 58138, 58139, 58140, 58141, 58142, 58143, 58144, 58145, 58146, 58147, 58148, 58149, 58150, 58151, 58152, 58153, 58154, 58155, 58156, 58157, 58158, 58159, 58160, 58161, 58162, 58163, 58164, 58165, 58166, 58167, 58168, 58169, 58170, 58171, 58172, 58173, 58174, 58175, 58176, 58177, 58178, 58179, 58180, 58181, 58182, 58183, 58184, 58185, 58186, 58187, 58188, 58189, 40451, 40452, 40453, 40454, 40455, 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, 40464, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40478, 40484, 40487, 40494, 40496, 40500, 40507, 40508, 40512, 40525, 40528, 40530, 40531, 40532, 40534, 40537, 40541, 40543, 40544, 40545, 40546, 40549, 40558, 40559, 40562, 40564, 40565, 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, 40576, 40577, 40579, 40580, 40581, 40582, 40585, 40586, 40588, 40589, 40590, 40591, 40592, 40593, 40596, 40597, 40598, 40599, 40600, 40601, 40602, 40603, 40604, 40606, 40608, 40609, 40610, 40611, 40612, 40613, 40615, 40616, 40617, 40618, 58190, 58191, 58192, 58193, 58194, 58195, 58196, 58197, 58198, 58199, 58200, 58201, 58202, 58203, 58204, 58205, 58206, 58207, 58208, 58209, 58210, 58211, 58212, 58213, 58214, 58215, 58216, 58217, 58218, 58219, 58220, 58221, 58222, 58223, 58224, 58225, 58226, 58227, 58228, 58229, 58230, 58231, 58232, 58233, 58234, 58235, 58236, 58237, 58238, 58239, 58240, 58241, 58242, 58243, 58244, 58245, 58246, 58247, 58248, 58249, 58250, 58251, 58252, 58253, 58254, 58255, 58256, 58257, 58258, 58259, 58260, 58261, 58262, 58263, 58264, 58265, 58266, 58267, 58268, 58269, 58270, 58271, 58272, 58273, 58274, 58275, 58276, 58277, 58278, 58279, 58280, 58281, 58282, 58283, 40619, 40620, 40621, 40622, 40623, 40624, 40625, 40626, 40627, 40629, 40630, 40631, 40633, 40634, 40636, 40639, 40640, 40641, 40642, 40643, 40645, 40646, 40647, 40648, 40650, 40651, 40652, 40656, 40658, 40659, 40661, 40662, 40663, 40665, 40666, 40670, 40673, 40675, 40676, 40678, 40680, 40683, 40684, 40685, 40686, 40688, 40689, 40690, 40691, 40692, 40693, 40694, 40695, 40696, 40698, 40701, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40716, 40719, 40721, 40722, 40724, 40725, 40726, 40728, 40730, 40731, 40732, 40733, 40734, 40735, 40737, 40739, 40740, 40741, 40742, 40743, 40744, 40745, 40746, 40747, 40749, 40750, 40752, 40753, 58284, 58285, 58286, 58287, 58288, 58289, 58290, 58291, 58292, 58293, 58294, 58295, 58296, 58297, 58298, 58299, 58300, 58301, 58302, 58303, 58304, 58305, 58306, 58307, 58308, 58309, 58310, 58311, 58312, 58313, 58314, 58315, 58316, 58317, 58318, 58319, 58320, 58321, 58322, 58323, 58324, 58325, 58326, 58327, 58328, 58329, 58330, 58331, 58332, 58333, 58334, 58335, 58336, 58337, 58338, 58339, 58340, 58341, 58342, 58343, 58344, 58345, 58346, 58347, 58348, 58349, 58350, 58351, 58352, 58353, 58354, 58355, 58356, 58357, 58358, 58359, 58360, 58361, 58362, 58363, 58364, 58365, 58366, 58367, 58368, 58369, 58370, 58371, 58372, 58373, 58374, 58375, 58376, 58377, 40754, 40755, 40756, 40757, 40758, 40760, 40762, 40764, 40767, 40768, 40769, 40770, 40771, 40773, 40774, 40775, 40776, 40777, 40778, 40779, 40780, 40781, 40782, 40783, 40786, 40787, 40788, 40789, 40790, 40791, 40792, 40793, 40794, 40795, 40796, 40797, 40798, 40799, 40800, 40801, 40802, 40803, 40804, 40805, 40806, 40807, 40808, 40809, 40810, 40811, 40812, 40813, 40814, 40815, 40816, 40817, 40818, 40819, 40820, 40821, 40822, 40823, 40824, 40825, 40826, 40827, 40828, 40829, 40830, 40833, 40834, 40845, 40846, 40847, 40848, 40849, 40850, 40851, 40852, 40853, 40854, 40855, 40856, 40860, 40861, 40862, 40865, 40866, 40867, 40868, 40869, 63788, 63865, 63893, 63975, 63985, 58378, 58379, 58380, 58381, 58382, 58383, 58384, 58385, 58386, 58387, 58388, 58389, 58390, 58391, 58392, 58393, 58394, 58395, 58396, 58397, 58398, 58399, 58400, 58401, 58402, 58403, 58404, 58405, 58406, 58407, 58408, 58409, 58410, 58411, 58412, 58413, 58414, 58415, 58416, 58417, 58418, 58419, 58420, 58421, 58422, 58423, 58424, 58425, 58426, 58427, 58428, 58429, 58430, 58431, 58432, 58433, 58434, 58435, 58436, 58437, 58438, 58439, 58440, 58441, 58442, 58443, 58444, 58445, 58446, 58447, 58448, 58449, 58450, 58451, 58452, 58453, 58454, 58455, 58456, 58457, 58458, 58459, 58460, 58461, 58462, 58463, 58464, 58465, 58466, 58467, 58468, 58469, 58470, 58471, 64012, 64013, 64014, 64015, 64017, 64019, 64020, 64024, 64031, 64032, 64033, 64035, 64036, 64039, 64040, 64041, 11905, 59414, 59415, 59416, 11908, 13427, 13383, 11912, 11915, 59422, 13726, 13850, 13838, 11916, 11927, 14702, 14616, 59430, 14799, 14815, 14963, 14800, 59435, 59436, 15182, 15470, 15584, 11943, 59441, 59442, 11946, 16470, 16735, 11950, 17207, 11955, 11958, 11959, 59451, 17329, 17324, 11963, 17373, 17622, 18017, 17996, 59459, 18211, 18217, 18300, 18317, 11978, 18759, 18810, 18813, 18818, 18819, 18821, 18822, 18847, 18843, 18871, 18870, 59476, 59477, 19619, 19615, 19616, 19617, 19575, 19618, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19886, 59492, 58472, 58473, 58474, 58475, 58476, 58477, 58478, 58479, 58480, 58481, 58482, 58483, 58484, 58485, 58486, 58487, 58488, 58489, 58490, 58491, 58492, 58493, 58494, 58495, 58496, 58497, 58498, 58499, 58500, 58501, 58502, 58503, 58504, 58505, 58506, 58507, 58508, 58509, 58510, 58511, 58512, 58513, 58514, 58515, 58516, 58517, 58518, 58519, 58520, 58521, 58522, 58523, 58524, 58525, 58526, 58527, 58528, 58529, 58530, 58531, 58532, 58533, 58534, 58535, 58536, 58537, 58538, 58539, 58540, 58541, 58542, 58543, 58544, 58545, 58546, 58547, 58548, 58549, 58550, 58551, 58552, 58553, 58554, 58555, 58556, 58557, 58558, 58559, 58560, 58561, 58562, 58563, 58564, 58565], + "gb18030-ranges": [[0, 128], [36, 165], [38, 169], [45, 178], [50, 184], [81, 216], [89, 226], [95, 235], [96, 238], [100, 244], [103, 248], [104, 251], [105, 253], [109, 258], [126, 276], [133, 284], [148, 300], [172, 325], [175, 329], [179, 334], [208, 364], [306, 463], [307, 465], [308, 467], [309, 469], [310, 471], [311, 473], [312, 475], [313, 477], [341, 506], [428, 594], [443, 610], [544, 712], [545, 716], [558, 730], [741, 930], [742, 938], [749, 962], [750, 970], [805, 1026], [819, 1104], [820, 1106], [7922, 8209], [7924, 8215], [7925, 8218], [7927, 8222], [7934, 8231], [7943, 8241], [7944, 8244], [7945, 8246], [7950, 8252], [8062, 8365], [8148, 8452], [8149, 8454], [8152, 8458], [8164, 8471], [8174, 8482], [8236, 8556], [8240, 8570], [8262, 8596], [8264, 8602], [8374, 8713], [8380, 8720], [8381, 8722], [8384, 8726], [8388, 8731], [8390, 8737], [8392, 8740], [8393, 8742], [8394, 8748], [8396, 8751], [8401, 8760], [8406, 8766], [8416, 8777], [8419, 8781], [8424, 8787], [8437, 8802], [8439, 8808], [8445, 8816], [8482, 8854], [8485, 8858], [8496, 8870], [8521, 8896], [8603, 8979], [8936, 9322], [8946, 9372], [9046, 9548], [9050, 9588], [9063, 9616], [9066, 9622], [9076, 9634], [9092, 9652], [9100, 9662], [9108, 9672], [9111, 9676], [9113, 9680], [9131, 9702], [9162, 9735], [9164, 9738], [9218, 9793], [9219, 9795], [11329, 11906], [11331, 11909], [11334, 11913], [11336, 11917], [11346, 11928], [11361, 11944], [11363, 11947], [11366, 11951], [11370, 11956], [11372, 11960], [11375, 11964], [11389, 11979], [11682, 12284], [11686, 12292], [11687, 12312], [11692, 12319], [11694, 12330], [11714, 12351], [11716, 12436], [11723, 12447], [11725, 12535], [11730, 12543], [11736, 12586], [11982, 12842], [11989, 12850], [12102, 12964], [12336, 13200], [12348, 13215], [12350, 13218], [12384, 13253], [12393, 13263], [12395, 13267], [12397, 13270], [12510, 13384], [12553, 13428], [12851, 13727], [12962, 13839], [12973, 13851], [13738, 14617], [13823, 14703], [13919, 14801], [13933, 14816], [14080, 14964], [14298, 15183], [14585, 15471], [14698, 15585], [15583, 16471], [15847, 16736], [16318, 17208], [16434, 17325], [16438, 17330], [16481, 17374], [16729, 17623], [17102, 17997], [17122, 18018], [17315, 18212], [17320, 18218], [17402, 18301], [17418, 18318], [17859, 18760], [17909, 18811], [17911, 18814], [17915, 18820], [17916, 18823], [17936, 18844], [17939, 18848], [17961, 18872], [18664, 19576], [18703, 19620], [18814, 19738], [18962, 19887], [19043, 40870], [33469, 59244], [33470, 59336], [33471, 59367], [33484, 59413], [33485, 59417], [33490, 59423], [33497, 59431], [33501, 59437], [33505, 59443], [33513, 59452], [33520, 59460], [33536, 59478], [33550, 59493], [37845, 63789], [37921, 63866], [37948, 63894], [38029, 63976], [38038, 63986], [38064, 64016], [38065, 64018], [38066, 64021], [38069, 64025], [38075, 64034], [38076, 64037], [38078, 64042], [39108, 65074], [39109, 65093], [39113, 65107], [39114, 65112], [39115, 65127], [39116, 65132], [39265, 65375], [39394, 65510], [189e3, 65536]], + "jis0208": [12288, 12289, 12290, 65292, 65294, 12539, 65306, 65307, 65311, 65281, 12443, 12444, 180, 65344, 168, 65342, 65507, 65343, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 8213, 8208, 65295, 65340, 65374, 8741, 65372, 8230, 8229, 8216, 8217, 8220, 8221, 65288, 65289, 12308, 12309, 65339, 65341, 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 65291, 65293, 177, 215, 247, 65309, 8800, 65308, 65310, 8806, 8807, 8734, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65509, 65284, 65504, 65505, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306, 8594, 8592, 8593, 8595, 12307, null, null, null, null, null, null, null, null, null, null, null, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, null, null, null, null, null, null, null, null, 8743, 8744, 65506, 8658, 8660, 8704, 8707, null, null, null, null, null, null, null, null, null, null, null, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, null, null, null, null, null, null, null, 8491, 8240, 9839, 9837, 9834, 8224, 8225, 182, null, null, null, null, 9711, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, null, null, null, null, null, null, null, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, null, null, null, null, null, null, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, null, null, null, null, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, 13129, 13076, 13090, 13133, 13080, 13095, 13059, 13110, 13137, 13143, 13069, 13094, 13091, 13099, 13130, 13115, 13212, 13213, 13214, 13198, 13199, 13252, 13217, null, null, null, null, null, null, null, null, 13179, 12317, 12319, 8470, 13261, 8481, 12964, 12965, 12966, 12967, 12968, 12849, 12850, 12857, 13182, 13181, 13180, 8786, 8801, 8747, 8750, 8721, 8730, 8869, 8736, 8735, 8895, 8757, 8745, 8746, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20124, 21782, 23043, 38463, 21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, 24746, 25569, 28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451, 22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433, 24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301, 20381, 20553, 22258, 22839, 22996, 23041, 23561, 24799, 24847, 24944, 26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806, 34915, 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946, 37057, 30959, 19968, 22769, 28322, 36920, 31282, 33576, 33419, 39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, 39154, 28139, 32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879, 32701, 36802, 38632, 21359, 40284, 31418, 19985, 30867, 33276, 28198, 22040, 21764, 27421, 34074, 39995, 23013, 21417, 28006, 29916, 38287, 22082, 20113, 36939, 38642, 33615, 39180, 21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945, 29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123, 30410, 39365, 24742, 35585, 36234, 38322, 27022, 21421, 20870, 22290, 22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814, 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467, 40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540, 25276, 26106, 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206, 40644, 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742, 29281, 20057, 20474, 21368, 24681, 28201, 31311, 38899, 19979, 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025, 22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, 27468, 27827, 28779, 29634, 31117, 31166, 31292, 31623, 33457, 33499, 33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942, 38686, 34442, 20420, 23784, 25105, 29273, 30011, 33253, 33469, 34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602, 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913, 39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809, 38283, 38542, 35997, 20977, 21182, 22806, 21683, 23475, 23830, 24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012, 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275, 25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226, 35282, 36203, 36611, 37101, 38307, 38548, 38761, 23398, 23731, 27005, 38989, 38990, 25499, 31520, 27179, 27263, 26806, 39949, 28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088, 36676, 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427, 33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, 31909, 21e3, 33477, 29926, 20094, 20355, 20896, 23506, 21002, 21208, 21223, 24059, 21914, 22570, 23014, 23436, 23448, 23515, 24178, 24185, 24739, 24863, 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454, 27475, 27735, 28450, 28567, 28485, 29872, 29976, 30435, 30475, 31487, 31649, 31777, 32233, 32566, 32752, 32925, 33382, 33694, 35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867, 39208, 33304, 20024, 21547, 23736, 24012, 29609, 30284, 30524, 23721, 32747, 36107, 38593, 38929, 38996, 39e3, 20225, 20238, 21361, 21916, 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582, 26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671, 27773, 30079, 31048, 23395, 31232, 32e3, 24509, 35215, 35352, 36020, 36215, 36556, 36637, 39138, 39438, 39740, 20096, 20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097, 31047, 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507, 21931, 26708, 27224, 35440, 30759, 26485, 40653, 21364, 23458, 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470, 24339, 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699, 31350, 31406, 31496, 32026, 31998, 32102, 26087, 29275, 21435, 23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624, 28417, 31142, 39770, 20136, 20139, 20140, 20379, 20384, 20689, 20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659, 23777, 24375, 24394, 24623, 24656, 24685, 25375, 25945, 27211, 27841, 29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911, 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997, 29577, 26704, 31873, 20677, 21220, 22343, 24062, 37670, 26020, 27427, 27453, 29748, 31105, 31165, 31563, 32202, 33465, 33740, 34943, 35167, 35641, 36817, 37329, 21535, 37504, 20061, 20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368, 39378, 20855, 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533, 20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, 36705, 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531, 34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670, 21009, 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693, 24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, 28179, 30054, 31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336, 35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119, 25731, 28608, 38553, 26689, 20625, 27424, 27770, 28500, 31348, 32080, 34880, 35363, 26376, 20214, 20537, 20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314, 25010, 25080, 25331, 25458, 26908, 27177, 29309, 29356, 29486, 30740, 30831, 32121, 30476, 32937, 35211, 35609, 36066, 36562, 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187, 24358, 28187, 28304, 29572, 29694, 32067, 33335, 35328, 35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, 23396, 24049, 24235, 24359, 25144, 25925, 26543, 28246, 29392, 31946, 34996, 32929, 32993, 33776, 34382, 35463, 36328, 37431, 38599, 39015, 40723, 20116, 20114, 20237, 21320, 21577, 21566, 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492, 35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809, 20844, 21151, 21177, 21246, 21402, 21475, 21521, 21518, 21897, 22353, 22434, 22909, 23380, 23389, 23439, 24037, 24039, 24055, 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511, 25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946, 28009, 28207, 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024, 32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, 33618, 34892, 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783, 37628, 38308, 38477, 38917, 39321, 39640, 40251, 21083, 21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, 40633, 20811, 21051, 21578, 22269, 31296, 37239, 40288, 40658, 29508, 28425, 33136, 29969, 24573, 24794, 39592, 29403, 36796, 27492, 38915, 20170, 22256, 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681, 26801, 28151, 30165, 32058, 33390, 39746, 20123, 20304, 21449, 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782, 35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622, 22971, 23472, 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319, 29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, 38555, 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018, 32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662, 26152, 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545, 21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, 27578, 34217, 38609, 30352, 39894, 25420, 37638, 39851, 30399, 26194, 19977, 20632, 21442, 23665, 24808, 25746, 25955, 26719, 29158, 29642, 29987, 31639, 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283, 27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, 22235, 22763, 22987, 22985, 23039, 23376, 23629, 24066, 24107, 24535, 24605, 25351, 25903, 23388, 26031, 26045, 26088, 26525, 27490, 27515, 27663, 29509, 31049, 31169, 31992, 32025, 32043, 32930, 33026, 33267, 35222, 35422, 35433, 35430, 35468, 35566, 36039, 36060, 38604, 39164, 27503, 20107, 20284, 20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, 27835, 29246, 29885, 30164, 30913, 31034, 32780, 32819, 33258, 33940, 36766, 27728, 40575, 24335, 35672, 40235, 31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460, 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612, 33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012, 29038, 31038, 32023, 32773, 35613, 36554, 36974, 34503, 37034, 20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509, 23490, 24369, 24825, 20027, 21462, 23432, 25163, 26417, 27530, 29417, 29664, 31278, 33131, 36259, 37202, 39318, 20754, 21463, 21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, 21608, 23447, 23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333, 32722, 33261, 33311, 33936, 34886, 35186, 35728, 36468, 36655, 36913, 37195, 37228, 38598, 37276, 20160, 20303, 20805, 21313, 24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, 21460, 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899, 36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490, 26092, 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981, 37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, 24246, 32210, 32626, 26360, 34223, 34295, 35576, 21161, 21465, 22899, 24207, 24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484, 21736, 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558, 23567, 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220, 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167, 27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465, 30813, 30977, 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750, 33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, 36062, 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055, 20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465, 26454, 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065, 22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, 33394, 35302, 39135, 34645, 36785, 23611, 20280, 20449, 20405, 21767, 23072, 23517, 23529, 24515, 24910, 25391, 26032, 26187, 26862, 27035, 28024, 28145, 30003, 30137, 30495, 31070, 31206, 32051, 33251, 33455, 34218, 35242, 35386, 36523, 36763, 36914, 37341, 38663, 20154, 20161, 20995, 22645, 22764, 23563, 29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, 35535, 38920, 37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, 27700, 28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543, 29790, 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441, 26905, 33733, 38935, 38592, 35070, 28548, 25722, 23544, 19990, 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104, 25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298, 29983, 30427, 31934, 32854, 22768, 35069, 35199, 35488, 35475, 35531, 36893, 37266, 38738, 38745, 25993, 31246, 33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, 30707, 31309, 31821, 32318, 33034, 36012, 36196, 36321, 36447, 30889, 20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634, 32118, 33292, 34633, 20185, 20808, 21315, 21344, 23459, 23554, 23574, 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927, 26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, 32330, 32680, 33146, 33307, 33337, 34214, 35438, 36046, 36341, 36984, 36983, 37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109, 32341, 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970, 29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, 32068, 34311, 35380, 38459, 36961, 40736, 20711, 21109, 21452, 21474, 20489, 21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436, 25475, 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437, 29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, 32865, 33609, 33624, 33900, 33980, 34299, 35013, 36208, 36865, 36973, 37783, 38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419, 20596, 21063, 21363, 24687, 25417, 26463, 28204, 36275, 36895, 20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, 23384, 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409, 21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364, 39464, 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907, 25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, 36024, 36864, 36910, 38538, 40667, 39899, 20195, 21488, 22823, 31532, 37261, 38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299, 27810, 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552, 21482, 21481, 20294, 36948, 36784, 22890, 33073, 24061, 31466, 36799, 26842, 35895, 29432, 40008, 27197, 35504, 20025, 21336, 22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701, 31471, 31658, 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727, 24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, 22320, 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933, 39347, 31689, 30044, 31481, 31569, 33988, 36880, 31209, 31378, 33590, 23265, 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609, 27880, 34411, 34935, 35387, 37198, 37619, 39376, 27159, 28710, 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086, 24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397, 28526, 29266, 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548, 36229, 36339, 37530, 38263, 38914, 40165, 21189, 25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684, 26894, 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131, 20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, 28528, 22378, 22775, 23340, 32044, 29226, 21514, 37347, 40372, 20141, 20302, 20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237, 24311, 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118, 31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, 37165, 37336, 40718, 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969, 37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635, 22825, 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857, 20253, 27583, 28593, 3e4, 38651, 20814, 21520, 22581, 22615, 22956, 23648, 24466, 26007, 26460, 28193, 30331, 33759, 36077, 36884, 37117, 37709, 30757, 30778, 21162, 24230, 22303, 22900, 24594, 20498, 20826, 20908, 20941, 20992, 21776, 22612, 22616, 22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812, 26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095, 31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342, 35588, 35910, 36367, 36867, 36879, 37913, 38518, 38957, 39472, 38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643, 31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499, 28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233, 20984, 31361, 26932, 23626, 40182, 33515, 23493, 37193, 28702, 22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311, 37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466, 37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741, 20108, 23612, 24336, 36841, 21250, 36049, 32905, 34425, 24319, 26085, 20083, 20837, 22914, 23615, 38894, 20219, 22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105, 24180, 24565, 25467, 25754, 29123, 31896, 20035, 24316, 20043, 22492, 22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468, 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110, 32629, 33453, 39340, 20467, 24259, 25309, 25490, 25943, 26479, 30403, 29260, 32972, 32954, 36649, 37197, 20493, 22521, 23186, 26757, 26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204, 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, 30333, 31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707, 39361, 40614, 20989, 31665, 30834, 31672, 32903, 31560, 27368, 24161, 32908, 30033, 30048, 20843, 37474, 28300, 30330, 37271, 39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532, 38588, 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495, 27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, 34281, 36009, 31684, 37318, 29033, 38930, 39151, 25405, 26217, 30058, 30436, 30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754, 25161, 25209, 25259, 26e3, 27604, 27852, 30130, 30382, 30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991, 38750, 39131, 27147, 31800, 20633, 23614, 24494, 26503, 27608, 29749, 30473, 32654, 40763, 26570, 31255, 21305, 30091, 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050, 31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426, 27161, 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551, 30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, 21697, 24428, 25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184, 22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975, 26023, 26222, 28014, 29238, 31526, 33104, 33178, 33433, 35676, 36e3, 36070, 36212, 38428, 38468, 20398, 25771, 27494, 33310, 33889, 34154, 37096, 23553, 26963, 39080, 33914, 34135, 20239, 21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343, 25173, 27832, 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996, 25198, 28954, 22894, 31881, 31966, 32027, 38640, 25991, 32862, 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109, 38281, 38491, 31859, 38913, 20731, 22721, 30294, 30887, 21029, 30629, 34065, 31622, 20559, 22793, 29255, 31687, 32232, 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303, 37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675, 24917, 25098, 26286, 27597, 31807, 33769, 20515, 20472, 21253, 21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, 25447, 25918, 26041, 26379, 27861, 27873, 28921, 30770, 32299, 32990, 33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165, 40179, 40300, 20047, 20129, 20621, 21078, 22346, 22952, 24125, 24536, 24537, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938, 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693, 21340, 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187, 27809, 27526, 22528, 24140, 22868, 26412, 32763, 20961, 30406, 25705, 30952, 39764, 40635, 22475, 22969, 26151, 26522, 27598, 21737, 27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451, 21448, 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975, 24930, 28288, 28459, 34067, 21619, 26410, 39749, 24051, 31637, 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885, 27665, 30496, 21209, 22818, 28961, 29279, 30683, 38695, 40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, 30431, 36855, 37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236, 38754, 40634, 25720, 27169, 33538, 22916, 23391, 27611, 29467, 30450, 32178, 32791, 33945, 20786, 26408, 40665, 30446, 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839, 24758, 32011, 38272, 21249, 20063, 20918, 22812, 29242, 32822, 37326, 24357, 30690, 21380, 24441, 32004, 34220, 35379, 36493, 38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664, 21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558, 26377, 26586, 28263, 28044, 29494, 29495, 30001, 31056, 35029, 35480, 36938, 37009, 37109, 38596, 34701, 22805, 20104, 20313, 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562, 25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, 29992, 31407, 32650, 32768, 33865, 33993, 35201, 35617, 36362, 36965, 38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096, 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853, 37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033, 21519, 23653, 26446, 26792, 29702, 29827, 30178, 35023, 35041, 37324, 38626, 38520, 24459, 29575, 31435, 33870, 25504, 30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534, 31452, 40845, 20406, 24942, 26053, 34396, 20102, 20142, 20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637, 31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, 21147, 32209, 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563, 40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, 20278, 20363, 20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646, 38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265, 24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676, 21570, 39791, 27347, 28809, 36034, 36335, 38706, 21172, 23105, 24266, 24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725, 32769, 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682, 35542, 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434, 20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, 30871, 33109, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24332, 19984, 19989, 20010, 20017, 20022, 20028, 20031, 20034, 20054, 20056, 20098, 20101, 35947, 20106, 33298, 24333, 20110, 20126, 20127, 20128, 20130, 20144, 20147, 20150, 20174, 20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233, 20314, 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376, 20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, 20447, 20430, 20440, 20443, 20433, 20442, 20432, 20452, 20453, 20506, 20520, 20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478, 20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570, 20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, 20681, 20682, 20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725, 20745, 20737, 20738, 20758, 20757, 20756, 20762, 20769, 20794, 20791, 20796, 20795, 20799, 20800, 20818, 20812, 20820, 20834, 31480, 20841, 20842, 20846, 20864, 20866, 22232, 20876, 20873, 20879, 20881, 20883, 20885, 20886, 20900, 20902, 20898, 20905, 20906, 20907, 20915, 20913, 20914, 20912, 20917, 20925, 20933, 20937, 20955, 20960, 34389, 20969, 20973, 20976, 20981, 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038, 21043, 21049, 21071, 21060, 21067, 21068, 21086, 21076, 21098, 21108, 21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, 21128, 21137, 36776, 36775, 21164, 21165, 21180, 21173, 21185, 21197, 21207, 21214, 21219, 21222, 39149, 21216, 21235, 21237, 21240, 21241, 21254, 21256, 30008, 21261, 21264, 21263, 21269, 21274, 21283, 21295, 21297, 21299, 21304, 21312, 21318, 21317, 19991, 21321, 21325, 20950, 21342, 21353, 21358, 22808, 21371, 21367, 21378, 21398, 21408, 21414, 21413, 21422, 21424, 21430, 21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498, 21505, 21565, 21568, 21548, 21549, 21564, 21550, 21558, 21545, 21533, 21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627, 21632, 21622, 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676, 21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720, 21733, 21734, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817, 21824, 21859, 21836, 21806, 21852, 21829, 21846, 21847, 21816, 21811, 21853, 21913, 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918, 21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956, 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009, 22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063, 22124, 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190, 22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, 22225, 22227, 22231, 22254, 22265, 22272, 22271, 22276, 22281, 22280, 22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, 22327, 22328, 22350, 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409, 22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484, 22482, 22483, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561, 22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687, 22699, 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743, 22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777, 22779, 22780, 22781, 22786, 22794, 22800, 22811, 26790, 22821, 22828, 22829, 22834, 22840, 22846, 31442, 22869, 22864, 22862, 22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, 22913, 22941, 20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, 23001, 23002, 23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113, 23093, 23094, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229, 23267, 23255, 23270, 23273, 23254, 23290, 23291, 23308, 23307, 23318, 23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381, 23386, 23387, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418, 23424, 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504, 23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, 23539, 23557, 23559, 23560, 23565, 23571, 23584, 23586, 23592, 23608, 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409, 23660, 23662, 20066, 23670, 23673, 23692, 23697, 23700, 22939, 23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785, 23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839, 23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886, 23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, 23965, 23980, 23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022, 24027, 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091, 24118, 24119, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162, 24164, 24135, 24181, 24182, 24186, 40636, 24191, 24224, 24257, 24258, 24264, 24272, 24271, 24278, 24291, 24285, 24282, 24283, 24290, 24289, 24296, 24297, 24300, 24305, 24307, 24304, 24308, 24312, 24318, 24323, 24329, 24413, 24412, 24331, 24337, 24342, 24361, 24365, 24376, 24385, 24392, 24396, 24398, 24367, 24401, 24406, 24407, 24409, 24417, 24429, 24435, 24439, 24451, 24450, 24447, 24458, 24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508, 24534, 24571, 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672, 24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591, 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675, 24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707, 24730, 24708, 24731, 24726, 24727, 24722, 24743, 24715, 24801, 24760, 24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, 24853, 24838, 24822, 24823, 24832, 24820, 24826, 24835, 24865, 24827, 24817, 24845, 24846, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876, 24884, 24893, 24898, 24900, 24947, 24951, 24920, 24921, 24922, 24939, 24948, 24943, 24933, 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967, 25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033, 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059, 25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, 25096, 25097, 25101, 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136, 25138, 25139, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212, 25218, 25225, 25214, 25234, 25235, 25238, 25300, 25219, 25236, 25303, 25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290, 25282, 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352, 25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, 25472, 25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534, 25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652, 25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711, 25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, 25788, 25818, 25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289, 25824, 25825, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850, 25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, 25908, 25909, 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933, 25944, 25950, 25949, 25970, 25976, 25986, 25987, 35722, 26011, 26015, 26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073, 26080, 26081, 26097, 26482, 26122, 26115, 26107, 26483, 26165, 26166, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205, 26212, 26215, 26216, 26207, 26210, 26224, 26243, 26248, 26254, 26249, 26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296, 26326, 26330, 26336, 26175, 26342, 26345, 26352, 26357, 26359, 26383, 26390, 26398, 26406, 26407, 38712, 26414, 26431, 26422, 26433, 26424, 26423, 26438, 26462, 26464, 26457, 26467, 26468, 26505, 26480, 26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607, 26548, 26604, 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606, 26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701, 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767, 26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784, 26810, 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918, 26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, 26839, 26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913, 26822, 27001, 26999, 26972, 27e3, 26987, 26964, 27006, 26990, 26937, 26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058, 27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, 27082, 27101, 27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102, 27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057, 27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204, 27148, 27250, 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192, 27170, 27280, 27277, 27296, 27268, 27298, 27299, 27287, 34327, 27323, 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354, 27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448, 27447, 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476, 27483, 27487, 27489, 27512, 27513, 27519, 27520, 27524, 27523, 27533, 27544, 27541, 27550, 27556, 27562, 27563, 27567, 27570, 27569, 27571, 27575, 27580, 27590, 27595, 27603, 27615, 27628, 27627, 27635, 27631, 40638, 27656, 27667, 27668, 27675, 27684, 27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803, 27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863, 27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882, 27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, 27955, 27922, 27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644, 28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140, 28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138, 28142, 28205, 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267, 28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189, 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356, 28338, 28372, 28373, 28303, 28325, 28354, 28319, 28481, 28433, 28748, 28396, 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478, 28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, 28659, 28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579, 28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632, 28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670, 28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, 28722, 28753, 28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895, 28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064, 29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096, 29100, 29143, 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164, 29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229, 29228, 29232, 29234, 29243, 29244, 29247, 29248, 29254, 29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346, 29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, 29410, 29408, 29409, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469, 29492, 29487, 29481, 29477, 29502, 29518, 29519, 40664, 29527, 29546, 29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627, 29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, 29688, 29746, 29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795, 29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681, 29920, 29923, 29927, 29929, 29934, 29938, 29936, 29937, 29944, 29943, 29956, 29955, 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990, 29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057, 30052, 30055, 30059, 30061, 30072, 30070, 30086, 30087, 30068, 30090, 30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147, 30133, 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179, 30174, 30206, 30207, 30204, 30209, 30192, 30202, 30194, 30195, 30219, 30221, 30217, 30239, 30247, 30240, 30241, 30242, 30244, 30260, 30256, 30267, 30279, 30280, 30278, 30300, 30296, 30305, 30306, 30312, 30313, 30314, 30311, 30316, 30320, 30322, 30326, 30328, 30332, 30336, 30339, 30344, 30347, 30350, 30358, 30355, 30361, 30362, 30384, 30388, 30392, 30393, 30394, 30402, 30413, 30422, 30418, 30430, 30433, 30437, 30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494, 30501, 30502, 30491, 30519, 30520, 30535, 30554, 30568, 30571, 30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, 30622, 30640, 30646, 30649, 30655, 30652, 30653, 30651, 30663, 30669, 30679, 30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018, 30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890, 30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, 30922, 30956, 30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019, 31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114, 31133, 31143, 40779, 31146, 31150, 31155, 31161, 31162, 31177, 31189, 31207, 31212, 31201, 31203, 31240, 31245, 31256, 31257, 31264, 31263, 31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, 31329, 31330, 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382, 31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434, 31437, 31439, 31445, 31443, 31449, 31450, 31453, 31457, 31458, 31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, 31512, 31513, 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564, 31557, 31605, 31589, 31604, 31591, 31600, 31601, 31596, 31598, 31645, 31640, 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641, 31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, 31764, 31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757, 31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811, 31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852, 31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, 31912, 31923, 31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954, 31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002, 32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070, 32115, 32086, 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137, 32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189, 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221, 32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274, 32305, 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313, 32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, 32345, 32346, 32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383, 32392, 32393, 32396, 32402, 32400, 32403, 32404, 32406, 32398, 32411, 32412, 32568, 32570, 32581, 32588, 32589, 32590, 32592, 32593, 32597, 32596, 32600, 32607, 32608, 32616, 32617, 32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670, 32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697, 32709, 32710, 32714, 32725, 32724, 32737, 32742, 32745, 32755, 32761, 39132, 32774, 32772, 32779, 32786, 32792, 32793, 32796, 32801, 32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866, 32872, 32883, 32882, 32880, 32886, 32889, 32893, 32895, 32900, 32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, 32997, 32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065, 33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137, 33134, 33125, 33126, 33140, 33155, 33160, 33162, 33152, 33154, 33184, 33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, 33214, 33208, 33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224, 33242, 33247, 33248, 33255, 33274, 33275, 33278, 33281, 33282, 33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331, 33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, 33384, 33386, 33387, 33326, 33393, 33399, 33400, 33406, 33421, 33426, 33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523, 33530, 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497, 33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, 33583, 33579, 33559, 33560, 33669, 33690, 33706, 33695, 33698, 33686, 33571, 33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704, 33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783, 33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, 34054, 33787, 33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922, 33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983, 33951, 34009, 33997, 33979, 34010, 34e3, 33985, 33990, 34006, 33953, 34081, 34047, 34036, 34071, 34072, 34092, 34079, 34069, 34068, 34044, 34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212, 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204, 34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269, 34277, 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338, 34330, 34352, 34367, 34381, 20053, 34388, 34399, 34407, 34417, 34451, 34467, 34473, 34474, 34443, 34444, 34486, 34479, 34500, 34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527, 34523, 34543, 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569, 34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586, 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649, 34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749, 34752, 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799, 34802, 34784, 34831, 34829, 34814, 34806, 34807, 34830, 34770, 34833, 34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884, 34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933, 34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957, 34980, 34992, 35007, 34993, 35011, 35012, 35028, 35032, 35033, 35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082, 35091, 35139, 35102, 35109, 35114, 35115, 35137, 35140, 35131, 35126, 35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183, 35188, 35191, 35198, 35203, 35208, 35210, 35219, 35224, 35233, 35241, 35238, 35244, 35247, 35250, 35258, 35261, 35263, 35264, 35290, 35292, 35293, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355, 35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437, 35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, 35493, 35494, 35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556, 35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610, 35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646, 35624, 35649, 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691, 35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, 35730, 35731, 35734, 35737, 35738, 35898, 35905, 35903, 35912, 35916, 35918, 35920, 35925, 35938, 35948, 35960, 35962, 35970, 35977, 35973, 35978, 35981, 35982, 35988, 35964, 35992, 25117, 36013, 36010, 36029, 36018, 36019, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093, 36090, 36091, 36100, 36101, 36106, 36103, 36111, 36109, 36112, 40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225, 36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, 36315, 36299, 36330, 36331, 36319, 36323, 36348, 36360, 36361, 36351, 36381, 36382, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423, 36425, 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437, 36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, 36499, 36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542, 36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618, 36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646, 36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, 36678, 36686, 36695, 36700, 36706, 36707, 36708, 36764, 36767, 36771, 36781, 36783, 36791, 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, 36857, 36858, 36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917, 36921, 36856, 36943, 36944, 36945, 36946, 36878, 36937, 36926, 36950, 36952, 36958, 36968, 36975, 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002, 37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083, 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221, 37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290, 37301, 37300, 37306, 37312, 37313, 37321, 37323, 37328, 37334, 37343, 37345, 37339, 37372, 37365, 37366, 37406, 37375, 37396, 37420, 37397, 37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451, 37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609, 37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685, 37691, 37724, 37728, 37756, 37742, 37718, 37808, 37804, 37805, 37780, 37817, 37846, 37847, 37864, 37861, 37848, 37827, 37853, 37840, 37832, 37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941, 37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994, 37417, 38e3, 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015, 38274, 38279, 38282, 38292, 38294, 38296, 38297, 38304, 38312, 38311, 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348, 38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440, 38446, 38447, 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493, 38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567, 38577, 38578, 38576, 38580, 38582, 38584, 38585, 38606, 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660, 38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, 38698, 38704, 38713, 38717, 38718, 38724, 38726, 38728, 38722, 38729, 38748, 38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780, 38785, 38778, 38790, 38795, 38799, 38800, 38812, 38824, 38822, 38819, 38835, 38836, 38851, 38854, 38856, 38859, 38876, 38893, 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968, 38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, 39023, 39024, 39025, 39028, 39027, 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145, 39147, 39171, 39177, 39186, 39188, 39192, 39201, 39197, 39198, 39204, 39200, 39212, 39214, 39229, 39230, 39234, 39241, 39237, 39248, 39243, 39249, 39250, 39244, 39253, 39319, 39320, 39333, 39341, 39342, 39356, 39391, 39387, 39389, 39384, 39377, 39405, 39406, 39409, 39410, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467, 39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511, 39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612, 39616, 39631, 39633, 39635, 39636, 39646, 39647, 39650, 39651, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675, 39686, 39704, 39706, 39711, 39714, 39715, 39717, 39719, 39720, 39721, 39722, 39726, 39727, 39730, 39748, 39747, 39759, 39757, 39758, 39761, 39768, 39796, 39827, 39811, 39825, 39830, 39831, 39839, 39840, 39848, 39860, 39872, 39882, 39865, 39878, 39887, 39889, 39890, 39907, 39906, 39908, 39892, 39905, 39994, 39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944, 39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007, 39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172, 40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, 40367, 40227, 40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264, 40285, 40286, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363, 40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376, 40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, 40429, 40431, 40445, 40474, 40475, 40478, 40565, 40569, 40573, 40577, 40584, 40587, 40588, 40594, 40597, 40593, 40605, 40613, 40617, 40632, 40618, 40621, 38753, 40652, 40654, 40655, 40656, 40660, 40668, 40670, 40669, 40672, 40677, 40680, 40687, 40692, 40694, 40695, 40697, 40699, 40700, 40701, 40711, 40712, 30391, 40725, 40737, 40748, 40766, 40778, 40786, 40788, 40803, 40799, 40800, 40801, 40806, 40807, 40812, 40810, 40823, 40818, 40822, 40853, 40860, 40864, 22575, 27079, 36953, 29796, 20956, 29081, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 65506, 65508, 65287, 65282, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 8757, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "jis0212": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 728, 711, 184, 729, 733, 175, 731, 730, 65374, 900, 901, null, null, null, null, null, null, null, null, 161, 166, 191, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 186, 170, 169, 174, 8482, 164, 8470, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 902, 904, 905, 906, 938, null, 908, null, 910, 939, null, 911, null, null, null, null, 940, 941, 942, 943, 970, 912, 972, 962, 973, 971, 944, 974, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1038, 1039, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1118, 1119, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 198, 272, null, 294, null, 306, null, 321, 319, null, 330, 216, 338, null, 358, 222, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 230, 273, 240, 295, 305, 307, 312, 322, 320, 329, 331, 248, 339, 223, 359, 254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 193, 192, 196, 194, 258, 461, 256, 260, 197, 195, 262, 264, 268, 199, 266, 270, 201, 200, 203, 202, 282, 278, 274, 280, null, 284, 286, 290, 288, 292, 205, 204, 207, 206, 463, 304, 298, 302, 296, 308, 310, 313, 317, 315, 323, 327, 325, 209, 211, 210, 214, 212, 465, 336, 332, 213, 340, 344, 342, 346, 348, 352, 350, 356, 354, 218, 217, 220, 219, 364, 467, 368, 362, 370, 366, 360, 471, 475, 473, 469, 372, 221, 376, 374, 377, 381, 379, null, null, null, null, null, null, null, 225, 224, 228, 226, 259, 462, 257, 261, 229, 227, 263, 265, 269, 231, 267, 271, 233, 232, 235, 234, 283, 279, 275, 281, 501, 285, 287, null, 289, 293, 237, 236, 239, 238, 464, null, 299, 303, 297, 309, 311, 314, 318, 316, 324, 328, 326, 241, 243, 242, 246, 244, 466, 337, 333, 245, 341, 345, 343, 347, 349, 353, 351, 357, 355, 250, 249, 252, 251, 365, 468, 369, 363, 371, 367, 361, 472, 476, 474, 470, 373, 253, 255, 375, 378, 382, 380, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19970, 19972, 19973, 19980, 19986, 19999, 20003, 20004, 20008, 20011, 20014, 20015, 20016, 20021, 20032, 20033, 20036, 20039, 20049, 20058, 20060, 20067, 20072, 20073, 20084, 20085, 20089, 20095, 20109, 20118, 20119, 20125, 20143, 20153, 20163, 20176, 20186, 20187, 20192, 20193, 20194, 20200, 20207, 20209, 20211, 20213, 20221, 20222, 20223, 20224, 20226, 20227, 20232, 20235, 20236, 20242, 20245, 20246, 20247, 20249, 20270, 20273, 20320, 20275, 20277, 20279, 20281, 20283, 20286, 20288, 20290, 20296, 20297, 20299, 20300, 20306, 20308, 20310, 20312, 20319, 20323, 20330, 20332, 20334, 20337, 20343, 20344, 20345, 20346, 20349, 20350, 20353, 20354, 20356, 20357, 20361, 20362, 20364, 20366, 20368, 20370, 20371, 20372, 20375, 20377, 20378, 20382, 20383, 20402, 20407, 20409, 20411, 20412, 20413, 20414, 20416, 20417, 20421, 20422, 20424, 20425, 20427, 20428, 20429, 20431, 20434, 20444, 20448, 20450, 20464, 20466, 20476, 20477, 20479, 20480, 20481, 20484, 20487, 20490, 20492, 20494, 20496, 20499, 20503, 20504, 20507, 20508, 20509, 20510, 20514, 20519, 20526, 20528, 20530, 20531, 20533, 20544, 20545, 20546, 20549, 20550, 20554, 20556, 20558, 20561, 20562, 20563, 20567, 20569, 20575, 20576, 20578, 20579, 20582, 20583, 20586, 20589, 20592, 20593, 20539, 20609, 20611, 20612, 20614, 20618, 20622, 20623, 20624, 20626, 20627, 20628, 20630, 20635, 20636, 20638, 20639, 20640, 20641, 20642, 20650, 20655, 20656, 20665, 20666, 20669, 20672, 20675, 20676, 20679, 20684, 20686, 20688, 20691, 20692, 20696, 20700, 20701, 20703, 20706, 20708, 20710, 20712, 20713, 20719, 20721, 20726, 20730, 20734, 20739, 20742, 20743, 20744, 20747, 20748, 20749, 20750, 20722, 20752, 20759, 20761, 20763, 20764, 20765, 20766, 20771, 20775, 20776, 20780, 20781, 20783, 20785, 20787, 20788, 20789, 20792, 20793, 20802, 20810, 20815, 20819, 20821, 20823, 20824, 20831, 20836, 20838, 20862, 20867, 20868, 20875, 20878, 20888, 20893, 20897, 20899, 20909, 20920, 20922, 20924, 20926, 20927, 20930, 20936, 20943, 20945, 20946, 20947, 20949, 20952, 20958, 20962, 20965, 20974, 20978, 20979, 20980, 20983, 20993, 20994, 20997, 21010, 21011, 21013, 21014, 21016, 21026, 21032, 21041, 21042, 21045, 21052, 21061, 21065, 21077, 21079, 21080, 21082, 21084, 21087, 21088, 21089, 21094, 21102, 21111, 21112, 21113, 21120, 21122, 21125, 21130, 21132, 21139, 21141, 21142, 21143, 21144, 21146, 21148, 21156, 21157, 21158, 21159, 21167, 21168, 21174, 21175, 21176, 21178, 21179, 21181, 21184, 21188, 21190, 21192, 21196, 21199, 21201, 21204, 21206, 21211, 21212, 21217, 21221, 21224, 21225, 21226, 21228, 21232, 21233, 21236, 21238, 21239, 21248, 21251, 21258, 21259, 21260, 21265, 21267, 21272, 21275, 21276, 21278, 21279, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21296, 21298, 21301, 21308, 21309, 21310, 21314, 21324, 21323, 21337, 21339, 21345, 21347, 21349, 21356, 21357, 21362, 21369, 21374, 21379, 21383, 21384, 21390, 21395, 21396, 21401, 21405, 21409, 21412, 21418, 21419, 21423, 21426, 21428, 21429, 21431, 21432, 21434, 21437, 21440, 21445, 21455, 21458, 21459, 21461, 21466, 21469, 21470, 21472, 21478, 21479, 21493, 21506, 21523, 21530, 21537, 21543, 21544, 21546, 21551, 21553, 21556, 21557, 21571, 21572, 21575, 21581, 21583, 21598, 21602, 21604, 21606, 21607, 21609, 21611, 21613, 21614, 21620, 21631, 21633, 21635, 21637, 21640, 21641, 21645, 21649, 21653, 21654, 21660, 21663, 21665, 21670, 21671, 21673, 21674, 21677, 21678, 21681, 21687, 21689, 21690, 21691, 21695, 21702, 21706, 21709, 21710, 21728, 21738, 21740, 21743, 21750, 21756, 21758, 21759, 21760, 21761, 21765, 21768, 21769, 21772, 21773, 21774, 21781, 21802, 21803, 21810, 21813, 21814, 21819, 21820, 21821, 21825, 21831, 21833, 21834, 21837, 21840, 21841, 21848, 21850, 21851, 21854, 21856, 21857, 21860, 21862, 21887, 21889, 21890, 21894, 21896, 21902, 21903, 21905, 21906, 21907, 21908, 21911, 21923, 21924, 21933, 21938, 21951, 21953, 21955, 21958, 21961, 21963, 21964, 21966, 21969, 21970, 21971, 21975, 21976, 21979, 21982, 21986, 21993, 22006, 22015, 22021, 22024, 22026, 22029, 22030, 22031, 22032, 22033, 22034, 22041, 22060, 22064, 22067, 22069, 22071, 22073, 22075, 22076, 22077, 22079, 22080, 22081, 22083, 22084, 22086, 22089, 22091, 22093, 22095, 22100, 22110, 22112, 22113, 22114, 22115, 22118, 22121, 22125, 22127, 22129, 22130, 22133, 22148, 22149, 22152, 22155, 22156, 22165, 22169, 22170, 22173, 22174, 22175, 22182, 22183, 22184, 22185, 22187, 22188, 22189, 22193, 22195, 22199, 22206, 22213, 22217, 22218, 22219, 22223, 22224, 22220, 22221, 22233, 22236, 22237, 22239, 22241, 22244, 22245, 22246, 22247, 22248, 22257, 22251, 22253, 22262, 22263, 22273, 22274, 22279, 22282, 22284, 22289, 22293, 22298, 22299, 22301, 22304, 22306, 22307, 22308, 22309, 22313, 22314, 22316, 22318, 22319, 22323, 22324, 22333, 22334, 22335, 22341, 22342, 22348, 22349, 22354, 22370, 22373, 22375, 22376, 22379, 22381, 22382, 22383, 22384, 22385, 22387, 22388, 22389, 22391, 22393, 22394, 22395, 22396, 22398, 22401, 22403, 22412, 22420, 22423, 22425, 22426, 22428, 22429, 22430, 22431, 22433, 22421, 22439, 22440, 22441, 22444, 22456, 22461, 22471, 22472, 22476, 22479, 22485, 22493, 22494, 22500, 22502, 22503, 22505, 22509, 22512, 22517, 22518, 22520, 22525, 22526, 22527, 22531, 22532, 22536, 22537, 22497, 22540, 22541, 22555, 22558, 22559, 22560, 22566, 22567, 22573, 22578, 22585, 22591, 22601, 22604, 22605, 22607, 22608, 22613, 22623, 22625, 22628, 22631, 22632, 22648, 22652, 22655, 22656, 22657, 22663, 22664, 22665, 22666, 22668, 22669, 22671, 22672, 22676, 22678, 22685, 22688, 22689, 22690, 22694, 22697, 22705, 22706, 22724, 22716, 22722, 22728, 22733, 22734, 22736, 22738, 22740, 22742, 22746, 22749, 22753, 22754, 22761, 22771, 22789, 22790, 22795, 22796, 22802, 22803, 22804, 34369, 22813, 22817, 22819, 22820, 22824, 22831, 22832, 22835, 22837, 22838, 22847, 22851, 22854, 22866, 22867, 22873, 22875, 22877, 22878, 22879, 22881, 22883, 22891, 22893, 22895, 22898, 22901, 22902, 22905, 22907, 22908, 22923, 22924, 22926, 22930, 22933, 22935, 22943, 22948, 22951, 22957, 22958, 22959, 22960, 22963, 22967, 22970, 22972, 22977, 22979, 22980, 22984, 22986, 22989, 22994, 23005, 23006, 23007, 23011, 23012, 23015, 23022, 23023, 23025, 23026, 23028, 23031, 23040, 23044, 23052, 23053, 23054, 23058, 23059, 23070, 23075, 23076, 23079, 23080, 23082, 23085, 23088, 23108, 23109, 23111, 23112, 23116, 23120, 23125, 23134, 23139, 23141, 23143, 23149, 23159, 23162, 23163, 23166, 23179, 23184, 23187, 23190, 23193, 23196, 23198, 23199, 23200, 23202, 23207, 23212, 23217, 23218, 23219, 23221, 23224, 23226, 23227, 23231, 23236, 23238, 23240, 23247, 23258, 23260, 23264, 23269, 23274, 23278, 23285, 23286, 23293, 23296, 23297, 23304, 23319, 23348, 23321, 23323, 23325, 23329, 23333, 23341, 23352, 23361, 23371, 23372, 23378, 23382, 23390, 23400, 23406, 23407, 23420, 23421, 23422, 23423, 23425, 23428, 23430, 23434, 23438, 23440, 23441, 23443, 23444, 23446, 23464, 23465, 23468, 23469, 23471, 23473, 23474, 23479, 23482, 23484, 23488, 23489, 23501, 23503, 23510, 23511, 23512, 23513, 23514, 23520, 23535, 23537, 23540, 23549, 23564, 23575, 23582, 23583, 23587, 23590, 23593, 23595, 23596, 23598, 23600, 23602, 23605, 23606, 23641, 23642, 23644, 23650, 23651, 23655, 23656, 23657, 23661, 23664, 23668, 23669, 23674, 23675, 23676, 23677, 23687, 23688, 23690, 23695, 23698, 23709, 23711, 23712, 23714, 23715, 23718, 23722, 23730, 23732, 23733, 23738, 23753, 23755, 23762, 23773, 23767, 23790, 23793, 23794, 23796, 23809, 23814, 23821, 23826, 23851, 23843, 23844, 23846, 23847, 23857, 23860, 23865, 23869, 23871, 23874, 23875, 23878, 23880, 23893, 23889, 23897, 23882, 23903, 23904, 23905, 23906, 23908, 23914, 23917, 23920, 23929, 23930, 23934, 23935, 23937, 23939, 23944, 23946, 23954, 23955, 23956, 23957, 23961, 23963, 23967, 23968, 23975, 23979, 23984, 23988, 23992, 23993, 24003, 24007, 24011, 24016, 24014, 24024, 24025, 24032, 24036, 24041, 24056, 24057, 24064, 24071, 24077, 24082, 24084, 24085, 24088, 24095, 24096, 24110, 24104, 24114, 24117, 24126, 24139, 24144, 24137, 24145, 24150, 24152, 24155, 24156, 24158, 24168, 24170, 24171, 24172, 24173, 24174, 24176, 24192, 24203, 24206, 24226, 24228, 24229, 24232, 24234, 24236, 24241, 24243, 24253, 24254, 24255, 24262, 24268, 24267, 24270, 24273, 24274, 24276, 24277, 24284, 24286, 24293, 24299, 24322, 24326, 24327, 24328, 24334, 24345, 24348, 24349, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24372, 24374, 24379, 24381, 24383, 24384, 24388, 24389, 24391, 24397, 24400, 24404, 24408, 24411, 24416, 24419, 24420, 24423, 24431, 24434, 24436, 24437, 24440, 24442, 24445, 24446, 24457, 24461, 24463, 24470, 24476, 24477, 24482, 24487, 24491, 24484, 24492, 24495, 24496, 24497, 24504, 24516, 24519, 24520, 24521, 24523, 24528, 24529, 24530, 24531, 24532, 24542, 24545, 24546, 24552, 24553, 24554, 24556, 24557, 24558, 24559, 24562, 24563, 24566, 24570, 24572, 24583, 24586, 24589, 24595, 24596, 24599, 24600, 24602, 24607, 24612, 24621, 24627, 24629, 24640, 24647, 24648, 24649, 24652, 24657, 24660, 24662, 24663, 24669, 24673, 24679, 24689, 24702, 24703, 24706, 24710, 24712, 24714, 24718, 24721, 24723, 24725, 24728, 24733, 24734, 24738, 24740, 24741, 24744, 24752, 24753, 24759, 24763, 24766, 24770, 24772, 24776, 24777, 24778, 24779, 24782, 24783, 24788, 24789, 24793, 24795, 24797, 24798, 24802, 24805, 24818, 24821, 24824, 24828, 24829, 24834, 24839, 24842, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24857, 24860, 24862, 24866, 24874, 24875, 24880, 24881, 24885, 24886, 24887, 24889, 24897, 24901, 24902, 24905, 24926, 24928, 24940, 24946, 24952, 24955, 24956, 24959, 24960, 24961, 24963, 24964, 24971, 24973, 24978, 24979, 24983, 24984, 24988, 24989, 24991, 24992, 24997, 25e3, 25002, 25005, 25016, 25017, 25020, 25024, 25025, 25026, 25038, 25039, 25045, 25052, 25053, 25054, 25055, 25057, 25058, 25063, 25065, 25061, 25068, 25069, 25071, 25089, 25091, 25092, 25095, 25107, 25109, 25116, 25120, 25122, 25123, 25127, 25129, 25131, 25145, 25149, 25154, 25155, 25156, 25158, 25164, 25168, 25169, 25170, 25172, 25174, 25178, 25180, 25188, 25197, 25199, 25203, 25210, 25213, 25229, 25230, 25231, 25232, 25254, 25256, 25267, 25270, 25271, 25274, 25278, 25279, 25284, 25294, 25301, 25302, 25306, 25322, 25330, 25332, 25340, 25341, 25347, 25348, 25354, 25355, 25357, 25360, 25363, 25366, 25368, 25385, 25386, 25389, 25397, 25398, 25401, 25404, 25409, 25410, 25411, 25412, 25414, 25418, 25419, 25422, 25426, 25427, 25428, 25432, 25435, 25445, 25446, 25452, 25453, 25457, 25460, 25461, 25464, 25468, 25469, 25471, 25474, 25476, 25479, 25482, 25488, 25492, 25493, 25497, 25498, 25502, 25508, 25510, 25517, 25518, 25519, 25533, 25537, 25541, 25544, 25550, 25553, 25555, 25556, 25557, 25564, 25568, 25573, 25578, 25580, 25586, 25587, 25589, 25592, 25593, 25609, 25610, 25616, 25618, 25620, 25624, 25630, 25632, 25634, 25636, 25637, 25641, 25642, 25647, 25648, 25653, 25661, 25663, 25675, 25679, 25681, 25682, 25683, 25684, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25699, 25709, 25715, 25716, 25723, 25725, 25733, 25735, 25743, 25744, 25745, 25752, 25753, 25755, 25757, 25759, 25761, 25763, 25766, 25768, 25772, 25779, 25789, 25790, 25791, 25796, 25801, 25802, 25803, 25804, 25806, 25808, 25809, 25813, 25815, 25828, 25829, 25833, 25834, 25837, 25840, 25845, 25847, 25851, 25855, 25857, 25860, 25864, 25865, 25866, 25871, 25875, 25876, 25878, 25881, 25883, 25886, 25887, 25890, 25894, 25897, 25902, 25905, 25914, 25916, 25917, 25923, 25927, 25929, 25936, 25938, 25940, 25951, 25952, 25959, 25963, 25978, 25981, 25985, 25989, 25994, 26002, 26005, 26008, 26013, 26016, 26019, 26022, 26030, 26034, 26035, 26036, 26047, 26050, 26056, 26057, 26062, 26064, 26068, 26070, 26072, 26079, 26096, 26098, 26100, 26101, 26105, 26110, 26111, 26112, 26116, 26120, 26121, 26125, 26129, 26130, 26133, 26134, 26141, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26161, 26163, 26169, 26167, 26176, 26181, 26182, 26186, 26188, 26193, 26190, 26199, 26200, 26201, 26203, 26204, 26208, 26209, 26363, 26218, 26219, 26220, 26238, 26227, 26229, 26239, 26231, 26232, 26233, 26235, 26240, 26236, 26251, 26252, 26253, 26256, 26258, 26265, 26266, 26267, 26268, 26271, 26272, 26276, 26285, 26289, 26290, 26293, 26299, 26303, 26304, 26306, 26307, 26312, 26316, 26318, 26319, 26324, 26331, 26335, 26344, 26347, 26348, 26350, 26362, 26373, 26375, 26382, 26387, 26393, 26396, 26400, 26402, 26419, 26430, 26437, 26439, 26440, 26444, 26452, 26453, 26461, 26470, 26476, 26478, 26484, 26486, 26491, 26497, 26500, 26510, 26511, 26513, 26515, 26518, 26520, 26521, 26523, 26544, 26545, 26546, 26549, 26555, 26556, 26557, 26617, 26560, 26562, 26563, 26565, 26568, 26569, 26578, 26583, 26585, 26588, 26593, 26598, 26608, 26610, 26614, 26615, 26706, 26644, 26649, 26653, 26655, 26664, 26663, 26668, 26669, 26671, 26672, 26673, 26675, 26683, 26687, 26692, 26693, 26698, 26700, 26709, 26711, 26712, 26715, 26731, 26734, 26735, 26736, 26737, 26738, 26741, 26745, 26746, 26747, 26748, 26754, 26756, 26758, 26760, 26774, 26776, 26778, 26780, 26785, 26787, 26789, 26793, 26794, 26798, 26802, 26811, 26821, 26824, 26828, 26831, 26832, 26833, 26835, 26838, 26841, 26844, 26845, 26853, 26856, 26858, 26859, 26860, 26861, 26864, 26865, 26869, 26870, 26875, 26876, 26877, 26886, 26889, 26890, 26896, 26897, 26899, 26902, 26903, 26929, 26931, 26933, 26936, 26939, 26946, 26949, 26953, 26958, 26967, 26971, 26979, 26980, 26981, 26982, 26984, 26985, 26988, 26992, 26993, 26994, 27002, 27003, 27007, 27008, 27021, 27026, 27030, 27032, 27041, 27045, 27046, 27048, 27051, 27053, 27055, 27063, 27064, 27066, 27068, 27077, 27080, 27089, 27094, 27095, 27106, 27109, 27118, 27119, 27121, 27123, 27125, 27134, 27136, 27137, 27139, 27151, 27153, 27157, 27162, 27165, 27168, 27172, 27176, 27184, 27186, 27188, 27191, 27195, 27198, 27199, 27205, 27206, 27209, 27210, 27214, 27216, 27217, 27218, 27221, 27222, 27227, 27236, 27239, 27242, 27249, 27251, 27262, 27265, 27267, 27270, 27271, 27273, 27275, 27281, 27291, 27293, 27294, 27295, 27301, 27307, 27311, 27312, 27313, 27316, 27325, 27326, 27327, 27334, 27337, 27336, 27340, 27344, 27348, 27349, 27350, 27356, 27357, 27364, 27367, 27372, 27376, 27377, 27378, 27388, 27389, 27394, 27395, 27398, 27399, 27401, 27407, 27408, 27409, 27415, 27419, 27422, 27428, 27432, 27435, 27436, 27439, 27445, 27446, 27451, 27455, 27462, 27466, 27469, 27474, 27478, 27480, 27485, 27488, 27495, 27499, 27502, 27504, 27509, 27517, 27518, 27522, 27525, 27543, 27547, 27551, 27552, 27554, 27555, 27560, 27561, 27564, 27565, 27566, 27568, 27576, 27577, 27581, 27582, 27587, 27588, 27593, 27596, 27606, 27610, 27617, 27619, 27622, 27623, 27630, 27633, 27639, 27641, 27647, 27650, 27652, 27653, 27657, 27661, 27662, 27664, 27666, 27673, 27679, 27686, 27687, 27688, 27692, 27694, 27699, 27701, 27702, 27706, 27707, 27711, 27722, 27723, 27725, 27727, 27730, 27732, 27737, 27739, 27740, 27755, 27757, 27759, 27764, 27766, 27768, 27769, 27771, 27781, 27782, 27783, 27785, 27796, 27797, 27799, 27800, 27804, 27807, 27824, 27826, 27828, 27842, 27846, 27853, 27855, 27856, 27857, 27858, 27860, 27862, 27866, 27868, 27872, 27879, 27881, 27883, 27884, 27886, 27890, 27892, 27908, 27911, 27914, 27918, 27919, 27921, 27923, 27930, 27942, 27943, 27944, 27751, 27950, 27951, 27953, 27961, 27964, 27967, 27991, 27998, 27999, 28001, 28005, 28007, 28015, 28016, 28028, 28034, 28039, 28049, 28050, 28052, 28054, 28055, 28056, 28074, 28076, 28084, 28087, 28089, 28093, 28095, 28100, 28104, 28106, 28110, 28111, 28118, 28123, 28125, 28127, 28128, 28130, 28133, 28137, 28143, 28144, 28148, 28150, 28156, 28160, 28164, 28190, 28194, 28199, 28210, 28214, 28217, 28219, 28220, 28228, 28229, 28232, 28233, 28235, 28239, 28241, 28242, 28243, 28244, 28247, 28252, 28253, 28254, 28258, 28259, 28264, 28275, 28283, 28285, 28301, 28307, 28313, 28320, 28327, 28333, 28334, 28337, 28339, 28347, 28351, 28352, 28353, 28355, 28359, 28360, 28362, 28365, 28366, 28367, 28395, 28397, 28398, 28409, 28411, 28413, 28420, 28424, 28426, 28428, 28429, 28438, 28440, 28442, 28443, 28454, 28457, 28458, 28463, 28464, 28467, 28470, 28475, 28476, 28461, 28495, 28497, 28498, 28499, 28503, 28505, 28506, 28509, 28510, 28513, 28514, 28520, 28524, 28541, 28542, 28547, 28551, 28552, 28555, 28556, 28557, 28560, 28562, 28563, 28564, 28566, 28570, 28575, 28576, 28581, 28582, 28583, 28584, 28590, 28591, 28592, 28597, 28598, 28604, 28613, 28615, 28616, 28618, 28634, 28638, 28648, 28649, 28656, 28661, 28665, 28668, 28669, 28672, 28677, 28678, 28679, 28685, 28695, 28704, 28707, 28719, 28724, 28727, 28729, 28732, 28739, 28740, 28744, 28745, 28746, 28747, 28756, 28757, 28765, 28766, 28750, 28772, 28773, 28780, 28782, 28789, 28790, 28798, 28801, 28805, 28806, 28820, 28821, 28822, 28823, 28824, 28827, 28836, 28843, 28848, 28849, 28852, 28855, 28874, 28881, 28883, 28884, 28885, 28886, 28888, 28892, 28900, 28922, 28931, 28932, 28933, 28934, 28935, 28939, 28940, 28943, 28958, 28960, 28971, 28973, 28975, 28976, 28977, 28984, 28993, 28997, 28998, 28999, 29002, 29003, 29008, 29010, 29015, 29018, 29020, 29022, 29024, 29032, 29049, 29056, 29061, 29063, 29068, 29074, 29082, 29083, 29088, 29090, 29103, 29104, 29106, 29107, 29114, 29119, 29120, 29121, 29124, 29131, 29132, 29139, 29142, 29145, 29146, 29148, 29176, 29182, 29184, 29191, 29192, 29193, 29203, 29207, 29210, 29213, 29215, 29220, 29227, 29231, 29236, 29240, 29241, 29249, 29250, 29251, 29253, 29262, 29263, 29264, 29267, 29269, 29270, 29274, 29276, 29278, 29280, 29283, 29288, 29291, 29294, 29295, 29297, 29303, 29304, 29307, 29308, 29311, 29316, 29321, 29325, 29326, 29331, 29339, 29352, 29357, 29358, 29361, 29364, 29374, 29377, 29383, 29385, 29388, 29397, 29398, 29400, 29407, 29413, 29427, 29428, 29434, 29435, 29438, 29442, 29444, 29445, 29447, 29451, 29453, 29458, 29459, 29464, 29465, 29470, 29474, 29476, 29479, 29480, 29484, 29489, 29490, 29493, 29498, 29499, 29501, 29507, 29517, 29520, 29522, 29526, 29528, 29533, 29534, 29535, 29536, 29542, 29543, 29545, 29547, 29548, 29550, 29551, 29553, 29559, 29561, 29564, 29568, 29569, 29571, 29573, 29574, 29582, 29584, 29587, 29589, 29591, 29592, 29596, 29598, 29599, 29600, 29602, 29605, 29606, 29610, 29611, 29613, 29621, 29623, 29625, 29628, 29629, 29631, 29637, 29638, 29641, 29643, 29644, 29647, 29650, 29651, 29654, 29657, 29661, 29665, 29667, 29670, 29671, 29673, 29684, 29685, 29687, 29689, 29690, 29691, 29693, 29695, 29696, 29697, 29700, 29703, 29706, 29713, 29722, 29723, 29732, 29734, 29736, 29737, 29738, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29753, 29760, 29763, 29764, 29766, 29767, 29771, 29773, 29777, 29778, 29783, 29789, 29794, 29798, 29799, 29800, 29803, 29805, 29806, 29809, 29810, 29824, 29825, 29829, 29830, 29831, 29833, 29839, 29840, 29841, 29842, 29848, 29849, 29850, 29852, 29855, 29856, 29857, 29859, 29862, 29864, 29865, 29866, 29867, 29870, 29871, 29873, 29874, 29877, 29881, 29883, 29887, 29896, 29897, 29900, 29904, 29907, 29912, 29914, 29915, 29918, 29919, 29924, 29928, 29930, 29931, 29935, 29940, 29946, 29947, 29948, 29951, 29958, 29970, 29974, 29975, 29984, 29985, 29988, 29991, 29993, 29994, 29999, 30006, 30009, 30013, 30014, 30015, 30016, 30019, 30023, 30024, 30030, 30032, 30034, 30039, 30046, 30047, 30049, 30063, 30065, 30073, 30074, 30075, 30076, 30077, 30078, 30081, 30085, 30096, 30098, 30099, 30101, 30105, 30108, 30114, 30116, 30132, 30138, 30143, 30144, 30145, 30148, 30150, 30156, 30158, 30159, 30167, 30172, 30175, 30176, 30177, 30180, 30183, 30188, 30190, 30191, 30193, 30201, 30208, 30210, 30211, 30212, 30215, 30216, 30218, 30220, 30223, 30226, 30227, 30229, 30230, 30233, 30235, 30236, 30237, 30238, 30243, 30245, 30246, 30249, 30253, 30258, 30259, 30261, 30264, 30265, 30266, 30268, 30282, 30272, 30273, 30275, 30276, 30277, 30281, 30283, 30293, 30297, 30303, 30308, 30309, 30317, 30318, 30319, 30321, 30324, 30337, 30341, 30348, 30349, 30357, 30363, 30364, 30365, 30367, 30368, 30370, 30371, 30372, 30373, 30374, 30375, 30376, 30378, 30381, 30397, 30401, 30405, 30409, 30411, 30412, 30414, 30420, 30425, 30432, 30438, 30440, 30444, 30448, 30449, 30454, 30457, 30460, 30464, 30470, 30474, 30478, 30482, 30484, 30485, 30487, 30489, 30490, 30492, 30498, 30504, 30509, 30510, 30511, 30516, 30517, 30518, 30521, 30525, 30526, 30530, 30533, 30534, 30538, 30541, 30542, 30543, 30546, 30550, 30551, 30556, 30558, 30559, 30560, 30562, 30564, 30567, 30570, 30572, 30576, 30578, 30579, 30580, 30586, 30589, 30592, 30596, 30604, 30605, 30612, 30613, 30614, 30618, 30623, 30626, 30631, 30634, 30638, 30639, 30641, 30645, 30654, 30659, 30665, 30673, 30674, 30677, 30681, 30686, 30687, 30688, 30692, 30694, 30698, 30700, 30704, 30705, 30708, 30712, 30715, 30725, 30726, 30729, 30733, 30734, 30737, 30749, 30753, 30754, 30755, 30765, 30766, 30768, 30773, 30775, 30787, 30788, 30791, 30792, 30796, 30798, 30802, 30812, 30814, 30816, 30817, 30819, 30820, 30824, 30826, 30830, 30842, 30846, 30858, 30863, 30868, 30872, 30881, 30877, 30878, 30879, 30884, 30888, 30892, 30893, 30896, 30897, 30898, 30899, 30907, 30909, 30911, 30919, 30920, 30921, 30924, 30926, 30930, 30931, 30933, 30934, 30948, 30939, 30943, 30944, 30945, 30950, 30954, 30962, 30963, 30976, 30966, 30967, 30970, 30971, 30975, 30982, 30988, 30992, 31002, 31004, 31006, 31007, 31008, 31013, 31015, 31017, 31021, 31025, 31028, 31029, 31035, 31037, 31039, 31044, 31045, 31046, 31050, 31051, 31055, 31057, 31060, 31064, 31067, 31068, 31079, 31081, 31083, 31090, 31097, 31099, 31100, 31102, 31115, 31116, 31121, 31123, 31124, 31125, 31126, 31128, 31131, 31132, 31137, 31144, 31145, 31147, 31151, 31153, 31156, 31160, 31163, 31170, 31172, 31175, 31176, 31178, 31183, 31188, 31190, 31194, 31197, 31198, 31200, 31202, 31205, 31210, 31211, 31213, 31217, 31224, 31228, 31234, 31235, 31239, 31241, 31242, 31244, 31249, 31253, 31259, 31262, 31265, 31271, 31275, 31277, 31279, 31280, 31284, 31285, 31288, 31289, 31290, 31300, 31301, 31303, 31304, 31308, 31317, 31318, 31321, 31324, 31325, 31327, 31328, 31333, 31335, 31338, 31341, 31349, 31352, 31358, 31360, 31362, 31365, 31366, 31370, 31371, 31376, 31377, 31380, 31390, 31392, 31395, 31404, 31411, 31413, 31417, 31419, 31420, 31430, 31433, 31436, 31438, 31441, 31451, 31464, 31465, 31467, 31468, 31473, 31476, 31483, 31485, 31486, 31495, 31508, 31519, 31523, 31527, 31529, 31530, 31531, 31533, 31534, 31535, 31536, 31537, 31540, 31549, 31551, 31552, 31553, 31559, 31566, 31573, 31584, 31588, 31590, 31593, 31594, 31597, 31599, 31602, 31603, 31607, 31620, 31625, 31630, 31632, 31633, 31638, 31643, 31646, 31648, 31653, 31660, 31663, 31664, 31666, 31669, 31670, 31674, 31675, 31676, 31677, 31682, 31685, 31688, 31690, 31700, 31702, 31703, 31705, 31706, 31707, 31720, 31722, 31730, 31732, 31733, 31736, 31737, 31738, 31740, 31742, 31745, 31746, 31747, 31748, 31750, 31753, 31755, 31756, 31758, 31759, 31769, 31771, 31776, 31781, 31782, 31784, 31788, 31793, 31795, 31796, 31798, 31801, 31802, 31814, 31818, 31829, 31825, 31826, 31827, 31833, 31834, 31835, 31836, 31837, 31838, 31841, 31843, 31847, 31849, 31853, 31854, 31856, 31858, 31865, 31868, 31869, 31878, 31879, 31887, 31892, 31902, 31904, 31910, 31920, 31926, 31927, 31930, 31931, 31932, 31935, 31940, 31943, 31944, 31945, 31949, 31951, 31955, 31956, 31957, 31959, 31961, 31962, 31965, 31974, 31977, 31979, 31989, 32003, 32007, 32008, 32009, 32015, 32017, 32018, 32019, 32022, 32029, 32030, 32035, 32038, 32042, 32045, 32049, 32060, 32061, 32062, 32064, 32065, 32071, 32072, 32077, 32081, 32083, 32087, 32089, 32090, 32092, 32093, 32101, 32103, 32106, 32112, 32120, 32122, 32123, 32127, 32129, 32130, 32131, 32133, 32134, 32136, 32139, 32140, 32141, 32145, 32150, 32151, 32157, 32158, 32166, 32167, 32170, 32179, 32182, 32183, 32185, 32194, 32195, 32196, 32197, 32198, 32204, 32205, 32206, 32215, 32217, 32256, 32226, 32229, 32230, 32234, 32235, 32237, 32241, 32245, 32246, 32249, 32250, 32264, 32272, 32273, 32277, 32279, 32284, 32285, 32288, 32295, 32296, 32300, 32301, 32303, 32307, 32310, 32319, 32324, 32325, 32327, 32334, 32336, 32338, 32344, 32351, 32353, 32354, 32357, 32363, 32366, 32367, 32371, 32376, 32382, 32385, 32390, 32391, 32394, 32397, 32401, 32405, 32408, 32410, 32413, 32414, 32572, 32571, 32573, 32574, 32575, 32579, 32580, 32583, 32591, 32594, 32595, 32603, 32604, 32605, 32609, 32611, 32612, 32613, 32614, 32621, 32625, 32637, 32638, 32639, 32640, 32651, 32653, 32655, 32656, 32657, 32662, 32663, 32668, 32673, 32674, 32678, 32682, 32685, 32692, 32700, 32703, 32704, 32707, 32712, 32718, 32719, 32731, 32735, 32739, 32741, 32744, 32748, 32750, 32751, 32754, 32762, 32765, 32766, 32767, 32775, 32776, 32778, 32781, 32782, 32783, 32785, 32787, 32788, 32790, 32797, 32798, 32799, 32800, 32804, 32806, 32812, 32814, 32816, 32820, 32821, 32823, 32825, 32826, 32828, 32830, 32832, 32836, 32864, 32868, 32870, 32877, 32881, 32885, 32897, 32904, 32910, 32924, 32926, 32934, 32935, 32939, 32952, 32953, 32968, 32973, 32975, 32978, 32980, 32981, 32983, 32984, 32992, 33005, 33006, 33008, 33010, 33011, 33014, 33017, 33018, 33022, 33027, 33035, 33046, 33047, 33048, 33052, 33054, 33056, 33060, 33063, 33068, 33072, 33077, 33082, 33084, 33093, 33095, 33098, 33100, 33106, 33111, 33120, 33121, 33127, 33128, 33129, 33133, 33135, 33143, 33153, 33168, 33156, 33157, 33158, 33163, 33166, 33174, 33176, 33179, 33182, 33186, 33198, 33202, 33204, 33211, 33227, 33219, 33221, 33226, 33230, 33231, 33237, 33239, 33243, 33245, 33246, 33249, 33252, 33259, 33260, 33264, 33265, 33266, 33269, 33270, 33272, 33273, 33277, 33279, 33280, 33283, 33295, 33299, 33300, 33305, 33306, 33309, 33313, 33314, 33320, 33330, 33332, 33338, 33347, 33348, 33349, 33350, 33355, 33358, 33359, 33361, 33366, 33372, 33376, 33379, 33383, 33389, 33396, 33403, 33405, 33407, 33408, 33409, 33411, 33412, 33415, 33417, 33418, 33422, 33425, 33428, 33430, 33432, 33434, 33435, 33440, 33441, 33443, 33444, 33447, 33448, 33449, 33450, 33454, 33456, 33458, 33460, 33463, 33466, 33468, 33470, 33471, 33478, 33488, 33493, 33498, 33504, 33506, 33508, 33512, 33514, 33517, 33519, 33526, 33527, 33533, 33534, 33536, 33537, 33543, 33544, 33546, 33547, 33620, 33563, 33565, 33566, 33567, 33569, 33570, 33580, 33581, 33582, 33584, 33587, 33591, 33594, 33596, 33597, 33602, 33603, 33604, 33607, 33613, 33614, 33617, 33621, 33622, 33623, 33648, 33656, 33661, 33663, 33664, 33666, 33668, 33670, 33677, 33682, 33684, 33685, 33688, 33689, 33691, 33692, 33693, 33702, 33703, 33705, 33708, 33726, 33727, 33728, 33735, 33737, 33743, 33744, 33745, 33748, 33757, 33619, 33768, 33770, 33782, 33784, 33785, 33788, 33793, 33798, 33802, 33807, 33809, 33813, 33817, 33709, 33839, 33849, 33861, 33863, 33864, 33866, 33869, 33871, 33873, 33874, 33878, 33880, 33881, 33882, 33884, 33888, 33892, 33893, 33895, 33898, 33904, 33907, 33908, 33910, 33912, 33916, 33917, 33921, 33925, 33938, 33939, 33941, 33950, 33958, 33960, 33961, 33962, 33967, 33969, 33972, 33978, 33981, 33982, 33984, 33986, 33991, 33992, 33996, 33999, 34003, 34012, 34023, 34026, 34031, 34032, 34033, 34034, 34039, 34098, 34042, 34043, 34045, 34050, 34051, 34055, 34060, 34062, 34064, 34076, 34078, 34082, 34083, 34084, 34085, 34087, 34090, 34091, 34095, 34099, 34100, 34102, 34111, 34118, 34127, 34128, 34129, 34130, 34131, 34134, 34137, 34140, 34141, 34142, 34143, 34144, 34145, 34146, 34148, 34155, 34159, 34169, 34170, 34171, 34173, 34175, 34177, 34181, 34182, 34185, 34187, 34188, 34191, 34195, 34200, 34205, 34207, 34208, 34210, 34213, 34215, 34228, 34230, 34231, 34232, 34236, 34237, 34238, 34239, 34242, 34247, 34250, 34251, 34254, 34221, 34264, 34266, 34271, 34272, 34278, 34280, 34285, 34291, 34294, 34300, 34303, 34304, 34308, 34309, 34317, 34318, 34320, 34321, 34322, 34328, 34329, 34331, 34334, 34337, 34343, 34345, 34358, 34360, 34362, 34364, 34365, 34368, 34370, 34374, 34386, 34387, 34390, 34391, 34392, 34393, 34397, 34400, 34401, 34402, 34403, 34404, 34409, 34412, 34415, 34421, 34422, 34423, 34426, 34445, 34449, 34454, 34456, 34458, 34460, 34465, 34470, 34471, 34472, 34477, 34481, 34483, 34484, 34485, 34487, 34488, 34489, 34495, 34496, 34497, 34499, 34501, 34513, 34514, 34517, 34519, 34522, 34524, 34528, 34531, 34533, 34535, 34440, 34554, 34556, 34557, 34564, 34565, 34567, 34571, 34574, 34575, 34576, 34579, 34580, 34585, 34590, 34591, 34593, 34595, 34600, 34606, 34607, 34609, 34610, 34617, 34618, 34620, 34621, 34622, 34624, 34627, 34629, 34637, 34648, 34653, 34657, 34660, 34661, 34671, 34673, 34674, 34683, 34691, 34692, 34693, 34694, 34695, 34696, 34697, 34699, 34700, 34704, 34707, 34709, 34711, 34712, 34713, 34718, 34720, 34723, 34727, 34732, 34733, 34734, 34737, 34741, 34750, 34751, 34753, 34760, 34761, 34762, 34766, 34773, 34774, 34777, 34778, 34780, 34783, 34786, 34787, 34788, 34794, 34795, 34797, 34801, 34803, 34808, 34810, 34815, 34817, 34819, 34822, 34825, 34826, 34827, 34832, 34841, 34834, 34835, 34836, 34840, 34842, 34843, 34844, 34846, 34847, 34856, 34861, 34862, 34864, 34866, 34869, 34874, 34876, 34881, 34883, 34885, 34888, 34889, 34890, 34891, 34894, 34897, 34901, 34902, 34904, 34906, 34908, 34911, 34912, 34916, 34921, 34929, 34937, 34939, 34944, 34968, 34970, 34971, 34972, 34975, 34976, 34984, 34986, 35002, 35005, 35006, 35008, 35018, 35019, 35020, 35021, 35022, 35025, 35026, 35027, 35035, 35038, 35047, 35055, 35056, 35057, 35061, 35063, 35073, 35078, 35085, 35086, 35087, 35093, 35094, 35096, 35097, 35098, 35100, 35104, 35110, 35111, 35112, 35120, 35121, 35122, 35125, 35129, 35130, 35134, 35136, 35138, 35141, 35142, 35145, 35151, 35154, 35159, 35162, 35163, 35164, 35169, 35170, 35171, 35179, 35182, 35184, 35187, 35189, 35194, 35195, 35196, 35197, 35209, 35213, 35216, 35220, 35221, 35227, 35228, 35231, 35232, 35237, 35248, 35252, 35253, 35254, 35255, 35260, 35284, 35285, 35286, 35287, 35288, 35301, 35305, 35307, 35309, 35313, 35315, 35318, 35321, 35325, 35327, 35332, 35333, 35335, 35343, 35345, 35346, 35348, 35349, 35358, 35360, 35362, 35364, 35366, 35371, 35372, 35375, 35381, 35383, 35389, 35390, 35392, 35395, 35397, 35399, 35401, 35405, 35406, 35411, 35414, 35415, 35416, 35420, 35421, 35425, 35429, 35431, 35445, 35446, 35447, 35449, 35450, 35451, 35454, 35455, 35456, 35459, 35462, 35467, 35471, 35472, 35474, 35478, 35479, 35481, 35487, 35495, 35497, 35502, 35503, 35507, 35510, 35511, 35515, 35518, 35523, 35526, 35528, 35529, 35530, 35537, 35539, 35540, 35541, 35543, 35549, 35551, 35564, 35568, 35572, 35573, 35574, 35580, 35583, 35589, 35590, 35595, 35601, 35612, 35614, 35615, 35594, 35629, 35632, 35639, 35644, 35650, 35651, 35652, 35653, 35654, 35656, 35666, 35667, 35668, 35673, 35661, 35678, 35683, 35693, 35702, 35704, 35705, 35708, 35710, 35713, 35716, 35717, 35723, 35725, 35727, 35732, 35733, 35740, 35742, 35743, 35896, 35897, 35901, 35902, 35909, 35911, 35913, 35915, 35919, 35921, 35923, 35924, 35927, 35928, 35931, 35933, 35929, 35939, 35940, 35942, 35944, 35945, 35949, 35955, 35957, 35958, 35963, 35966, 35974, 35975, 35979, 35984, 35986, 35987, 35993, 35995, 35996, 36004, 36025, 36026, 36037, 36038, 36041, 36043, 36047, 36054, 36053, 36057, 36061, 36065, 36072, 36076, 36079, 36080, 36082, 36085, 36087, 36088, 36094, 36095, 36097, 36099, 36105, 36114, 36119, 36123, 36197, 36201, 36204, 36206, 36223, 36226, 36228, 36232, 36237, 36240, 36241, 36245, 36254, 36255, 36256, 36262, 36267, 36268, 36271, 36274, 36277, 36279, 36281, 36283, 36288, 36293, 36294, 36295, 36296, 36298, 36302, 36305, 36308, 36309, 36311, 36313, 36324, 36325, 36327, 36332, 36336, 36284, 36337, 36338, 36340, 36349, 36353, 36356, 36357, 36358, 36363, 36369, 36372, 36374, 36384, 36385, 36386, 36387, 36390, 36391, 36401, 36403, 36406, 36407, 36408, 36409, 36413, 36416, 36417, 36427, 36429, 36430, 36431, 36436, 36443, 36444, 36445, 36446, 36449, 36450, 36457, 36460, 36461, 36463, 36464, 36465, 36473, 36474, 36475, 36482, 36483, 36489, 36496, 36498, 36501, 36506, 36507, 36509, 36510, 36514, 36519, 36521, 36525, 36526, 36531, 36533, 36538, 36539, 36544, 36545, 36547, 36548, 36551, 36559, 36561, 36564, 36572, 36584, 36590, 36592, 36593, 36599, 36601, 36602, 36589, 36608, 36610, 36615, 36616, 36623, 36624, 36630, 36631, 36632, 36638, 36640, 36641, 36643, 36645, 36647, 36648, 36652, 36653, 36654, 36660, 36661, 36662, 36663, 36666, 36672, 36673, 36675, 36679, 36687, 36689, 36690, 36691, 36692, 36693, 36696, 36701, 36702, 36709, 36765, 36768, 36769, 36772, 36773, 36774, 36789, 36790, 36792, 36798, 36800, 36801, 36806, 36810, 36811, 36813, 36816, 36818, 36819, 36821, 36832, 36835, 36836, 36840, 36846, 36849, 36853, 36854, 36859, 36862, 36866, 36868, 36872, 36876, 36888, 36891, 36904, 36905, 36911, 36906, 36908, 36909, 36915, 36916, 36919, 36927, 36931, 36932, 36940, 36955, 36957, 36962, 36966, 36967, 36972, 36976, 36980, 36985, 36997, 37e3, 37003, 37004, 37006, 37008, 37013, 37015, 37016, 37017, 37019, 37024, 37025, 37026, 37029, 37040, 37042, 37043, 37044, 37046, 37053, 37068, 37054, 37059, 37060, 37061, 37063, 37064, 37077, 37079, 37080, 37081, 37084, 37085, 37087, 37093, 37074, 37110, 37099, 37103, 37104, 37108, 37118, 37119, 37120, 37124, 37125, 37126, 37128, 37133, 37136, 37140, 37142, 37143, 37144, 37146, 37148, 37150, 37152, 37157, 37154, 37155, 37159, 37161, 37166, 37167, 37169, 37172, 37174, 37175, 37177, 37178, 37180, 37181, 37187, 37191, 37192, 37199, 37203, 37207, 37209, 37210, 37211, 37217, 37220, 37223, 37229, 37236, 37241, 37242, 37243, 37249, 37251, 37253, 37254, 37258, 37262, 37265, 37267, 37268, 37269, 37272, 37278, 37281, 37286, 37288, 37292, 37293, 37294, 37296, 37297, 37298, 37299, 37302, 37307, 37308, 37309, 37311, 37314, 37315, 37317, 37331, 37332, 37335, 37337, 37338, 37342, 37348, 37349, 37353, 37354, 37356, 37357, 37358, 37359, 37360, 37361, 37367, 37369, 37371, 37373, 37376, 37377, 37380, 37381, 37382, 37383, 37385, 37386, 37388, 37392, 37394, 37395, 37398, 37400, 37404, 37405, 37411, 37412, 37413, 37414, 37416, 37422, 37423, 37424, 37427, 37429, 37430, 37432, 37433, 37434, 37436, 37438, 37440, 37442, 37443, 37446, 37447, 37450, 37453, 37454, 37455, 37457, 37464, 37465, 37468, 37469, 37472, 37473, 37477, 37479, 37480, 37481, 37486, 37487, 37488, 37493, 37494, 37495, 37496, 37497, 37499, 37500, 37501, 37503, 37512, 37513, 37514, 37517, 37518, 37522, 37527, 37529, 37535, 37536, 37540, 37541, 37543, 37544, 37547, 37551, 37554, 37558, 37560, 37562, 37563, 37564, 37565, 37567, 37568, 37569, 37570, 37571, 37573, 37574, 37575, 37576, 37579, 37580, 37581, 37582, 37584, 37587, 37589, 37591, 37592, 37593, 37596, 37597, 37599, 37600, 37601, 37603, 37605, 37607, 37608, 37612, 37614, 37616, 37625, 37627, 37631, 37632, 37634, 37640, 37645, 37649, 37652, 37653, 37660, 37661, 37662, 37663, 37665, 37668, 37669, 37671, 37673, 37674, 37683, 37684, 37686, 37687, 37703, 37704, 37705, 37712, 37713, 37714, 37717, 37719, 37720, 37722, 37726, 37732, 37733, 37735, 37737, 37738, 37741, 37743, 37744, 37745, 37747, 37748, 37750, 37754, 37757, 37759, 37760, 37761, 37762, 37768, 37770, 37771, 37773, 37775, 37778, 37781, 37784, 37787, 37790, 37793, 37795, 37796, 37798, 37800, 37803, 37812, 37813, 37814, 37818, 37801, 37825, 37828, 37829, 37830, 37831, 37833, 37834, 37835, 37836, 37837, 37843, 37849, 37852, 37854, 37855, 37858, 37862, 37863, 37881, 37879, 37880, 37882, 37883, 37885, 37889, 37890, 37892, 37896, 37897, 37901, 37902, 37903, 37909, 37910, 37911, 37919, 37934, 37935, 37937, 37938, 37939, 37940, 37947, 37951, 37949, 37955, 37957, 37960, 37962, 37964, 37973, 37977, 37980, 37983, 37985, 37987, 37992, 37995, 37997, 37998, 37999, 38001, 38002, 38020, 38019, 38264, 38265, 38270, 38276, 38280, 38284, 38285, 38286, 38301, 38302, 38303, 38305, 38310, 38313, 38315, 38316, 38324, 38326, 38330, 38333, 38335, 38342, 38344, 38345, 38347, 38352, 38353, 38354, 38355, 38361, 38362, 38365, 38366, 38367, 38368, 38372, 38374, 38429, 38430, 38434, 38436, 38437, 38438, 38444, 38449, 38451, 38455, 38456, 38457, 38458, 38460, 38461, 38465, 38482, 38484, 38486, 38487, 38488, 38497, 38510, 38516, 38523, 38524, 38526, 38527, 38529, 38530, 38531, 38532, 38537, 38545, 38550, 38554, 38557, 38559, 38564, 38565, 38566, 38569, 38574, 38575, 38579, 38586, 38602, 38610, 23986, 38616, 38618, 38621, 38622, 38623, 38633, 38639, 38641, 38650, 38658, 38659, 38661, 38665, 38682, 38683, 38685, 38689, 38690, 38691, 38696, 38705, 38707, 38721, 38723, 38730, 38734, 38735, 38741, 38743, 38744, 38746, 38747, 38755, 38759, 38762, 38766, 38771, 38774, 38775, 38776, 38779, 38781, 38783, 38784, 38793, 38805, 38806, 38807, 38809, 38810, 38814, 38815, 38818, 38828, 38830, 38833, 38834, 38837, 38838, 38840, 38841, 38842, 38844, 38846, 38847, 38849, 38852, 38853, 38855, 38857, 38858, 38860, 38861, 38862, 38864, 38865, 38868, 38871, 38872, 38873, 38877, 38878, 38880, 38875, 38881, 38884, 38895, 38897, 38900, 38903, 38904, 38906, 38919, 38922, 38937, 38925, 38926, 38932, 38934, 38940, 38942, 38944, 38947, 38950, 38955, 38958, 38959, 38960, 38962, 38963, 38965, 38949, 38974, 38980, 38983, 38986, 38993, 38994, 38995, 38998, 38999, 39001, 39002, 39010, 39011, 39013, 39014, 39018, 39020, 39083, 39085, 39086, 39088, 39092, 39095, 39096, 39098, 39099, 39103, 39106, 39109, 39112, 39116, 39137, 39139, 39141, 39142, 39143, 39146, 39155, 39158, 39170, 39175, 39176, 39185, 39189, 39190, 39191, 39194, 39195, 39196, 39199, 39202, 39206, 39207, 39211, 39217, 39218, 39219, 39220, 39221, 39225, 39226, 39227, 39228, 39232, 39233, 39238, 39239, 39240, 39245, 39246, 39252, 39256, 39257, 39259, 39260, 39262, 39263, 39264, 39323, 39325, 39327, 39334, 39344, 39345, 39346, 39349, 39353, 39354, 39357, 39359, 39363, 39369, 39379, 39380, 39385, 39386, 39388, 39390, 39399, 39402, 39403, 39404, 39408, 39412, 39413, 39417, 39421, 39422, 39426, 39427, 39428, 39435, 39436, 39440, 39441, 39446, 39454, 39456, 39458, 39459, 39460, 39463, 39469, 39470, 39475, 39477, 39478, 39480, 39495, 39489, 39492, 39498, 39499, 39500, 39502, 39505, 39508, 39510, 39517, 39594, 39596, 39598, 39599, 39602, 39604, 39605, 39606, 39609, 39611, 39614, 39615, 39617, 39619, 39622, 39624, 39630, 39632, 39634, 39637, 39638, 39639, 39643, 39644, 39648, 39652, 39653, 39655, 39657, 39660, 39666, 39667, 39669, 39673, 39674, 39677, 39679, 39680, 39681, 39682, 39683, 39684, 39685, 39688, 39689, 39691, 39692, 39693, 39694, 39696, 39698, 39702, 39705, 39707, 39708, 39712, 39718, 39723, 39725, 39731, 39732, 39733, 39735, 39737, 39738, 39741, 39752, 39755, 39756, 39765, 39766, 39767, 39771, 39774, 39777, 39779, 39781, 39782, 39784, 39786, 39787, 39788, 39789, 39790, 39795, 39797, 39799, 39800, 39801, 39807, 39808, 39812, 39813, 39814, 39815, 39817, 39818, 39819, 39821, 39823, 39824, 39828, 39834, 39837, 39838, 39846, 39847, 39849, 39852, 39856, 39857, 39858, 39863, 39864, 39867, 39868, 39870, 39871, 39873, 39879, 39880, 39886, 39888, 39895, 39896, 39901, 39903, 39909, 39911, 39914, 39915, 39919, 39923, 39927, 39928, 39929, 39930, 39933, 39935, 39936, 39938, 39947, 39951, 39953, 39958, 39960, 39961, 39962, 39964, 39966, 39970, 39971, 39974, 39975, 39976, 39977, 39978, 39985, 39989, 39990, 39991, 39997, 40001, 40003, 40004, 40005, 40009, 40010, 40014, 40015, 40016, 40019, 40020, 40022, 40024, 40027, 40029, 40030, 40031, 40035, 40041, 40042, 40028, 40043, 40040, 40046, 40048, 40050, 40053, 40055, 40059, 40166, 40178, 40183, 40185, 40203, 40194, 40209, 40215, 40216, 40220, 40221, 40222, 40239, 40240, 40242, 40243, 40244, 40250, 40252, 40261, 40253, 40258, 40259, 40263, 40266, 40275, 40276, 40287, 40291, 40290, 40293, 40297, 40298, 40299, 40304, 40310, 40311, 40315, 40316, 40318, 40323, 40324, 40326, 40330, 40333, 40334, 40338, 40339, 40341, 40342, 40343, 40344, 40353, 40362, 40364, 40366, 40369, 40373, 40377, 40380, 40383, 40387, 40391, 40393, 40394, 40404, 40405, 40406, 40407, 40410, 40414, 40415, 40416, 40421, 40423, 40425, 40427, 40430, 40432, 40435, 40436, 40446, 40458, 40450, 40455, 40462, 40464, 40465, 40466, 40469, 40470, 40473, 40476, 40477, 40570, 40571, 40572, 40576, 40578, 40579, 40580, 40581, 40583, 40590, 40591, 40598, 40600, 40603, 40606, 40612, 40616, 40620, 40622, 40623, 40624, 40627, 40628, 40629, 40646, 40648, 40651, 40661, 40671, 40676, 40679, 40684, 40685, 40686, 40688, 40689, 40690, 40693, 40696, 40703, 40706, 40707, 40713, 40719, 40720, 40721, 40722, 40724, 40726, 40727, 40729, 40730, 40731, 40735, 40738, 40742, 40746, 40747, 40751, 40753, 40754, 40756, 40759, 40761, 40762, 40764, 40765, 40767, 40769, 40771, 40772, 40773, 40774, 40775, 40787, 40789, 40790, 40791, 40792, 40794, 40797, 40798, 40808, 40809, 40813, 40814, 40815, 40816, 40817, 40819, 40821, 40826, 40829, 40847, 40848, 40849, 40850, 40852, 40854, 40855, 40862, 40865, 40866, 40867, 40869, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], + "ibm866": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1025, 1105, 1028, 1108, 1031, 1111, 1038, 1118, 176, 8729, 183, 8730, 8470, 164, 9632, 160], + "iso-8859-2": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 728, 321, 164, 317, 346, 167, 168, 352, 350, 356, 377, 173, 381, 379, 176, 261, 731, 322, 180, 318, 347, 711, 184, 353, 351, 357, 378, 733, 382, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729], + "iso-8859-3": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 294, 728, 163, 164, null, 292, 167, 168, 304, 350, 286, 308, 173, null, 379, 176, 295, 178, 179, 180, 181, 293, 183, 184, 305, 351, 287, 309, 189, null, 380, 192, 193, 194, null, 196, 266, 264, 199, 200, 201, 202, 203, 204, 205, 206, 207, null, 209, 210, 211, 212, 288, 214, 215, 284, 217, 218, 219, 220, 364, 348, 223, 224, 225, 226, null, 228, 267, 265, 231, 232, 233, 234, 235, 236, 237, 238, 239, null, 241, 242, 243, 244, 289, 246, 247, 285, 249, 250, 251, 252, 365, 349, 729], + "iso-8859-4": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 312, 342, 164, 296, 315, 167, 168, 352, 274, 290, 358, 173, 381, 175, 176, 261, 731, 343, 180, 297, 316, 711, 184, 353, 275, 291, 359, 330, 382, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 298, 272, 325, 332, 310, 212, 213, 214, 215, 216, 370, 218, 219, 220, 360, 362, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 299, 273, 326, 333, 311, 244, 245, 246, 247, 248, 371, 250, 251, 252, 361, 363, 729], + "iso-8859-5": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 173, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8470, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 167, 1118, 1119], + "iso-8859-6": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, null, null, 164, null, null, null, null, null, null, null, 1548, 173, null, null, null, null, null, null, null, null, null, null, null, null, null, 1563, null, null, null, 1567, null, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, null, null, null, null, null, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, null, null, null, null, null, null, null, null, null, null, null, null, null], + "iso-8859-7": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8216, 8217, 163, 8364, 8367, 166, 167, 168, 169, 890, 171, 172, 173, null, 8213, 176, 177, 178, 179, 900, 901, 902, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null], + "iso-8859-8": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, 162, 163, 164, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8215, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null], + "iso-8859-10": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 274, 290, 298, 296, 310, 167, 315, 272, 352, 358, 381, 173, 362, 330, 176, 261, 275, 291, 299, 297, 311, 183, 316, 273, 353, 359, 382, 8213, 363, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 207, 208, 325, 332, 211, 212, 213, 214, 360, 216, 370, 218, 219, 220, 221, 222, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 239, 240, 326, 333, 243, 244, 245, 246, 361, 248, 371, 250, 251, 252, 253, 254, 312], + "iso-8859-13": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8221, 162, 163, 164, 8222, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 8220, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 8217], + "iso-8859-14": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 7682, 7683, 163, 266, 267, 7690, 167, 7808, 169, 7810, 7691, 7922, 173, 174, 376, 7710, 7711, 288, 289, 7744, 7745, 182, 7766, 7809, 7767, 7811, 7776, 7923, 7812, 7813, 7777, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 372, 209, 210, 211, 212, 213, 214, 7786, 216, 217, 218, 219, 220, 221, 374, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 373, 241, 242, 243, 244, 245, 246, 7787, 248, 249, 250, 251, 252, 253, 375, 255], + "iso-8859-15": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 8364, 165, 352, 167, 353, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 381, 181, 182, 183, 382, 185, 186, 187, 338, 339, 376, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], + "iso-8859-16": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 261, 321, 8364, 8222, 352, 167, 353, 169, 536, 171, 377, 173, 378, 379, 176, 177, 268, 322, 381, 8221, 182, 183, 382, 269, 537, 187, 338, 339, 376, 380, 192, 193, 194, 258, 196, 262, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 272, 323, 210, 211, 212, 336, 214, 346, 368, 217, 218, 219, 220, 280, 538, 223, 224, 225, 226, 259, 228, 263, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 273, 324, 242, 243, 244, 337, 246, 347, 369, 249, 250, 251, 252, 281, 539, 255], + "koi8-r": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 1025, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066], + "koi8-u": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 1108, 9556, 1110, 1111, 9559, 9560, 9561, 9562, 9563, 1169, 1118, 9566, 9567, 9568, 9569, 1025, 1028, 9571, 1030, 1031, 9574, 9575, 9576, 9577, 9578, 1168, 1038, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066], + "macintosh": [196, 197, 199, 201, 209, 214, 220, 225, 224, 226, 228, 227, 229, 231, 233, 232, 234, 235, 237, 236, 238, 239, 241, 243, 242, 244, 246, 245, 250, 249, 251, 252, 8224, 176, 162, 163, 167, 8226, 182, 223, 174, 169, 8482, 180, 168, 8800, 198, 216, 8734, 177, 8804, 8805, 165, 181, 8706, 8721, 8719, 960, 8747, 170, 186, 937, 230, 248, 191, 161, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 192, 195, 213, 338, 339, 8211, 8212, 8220, 8221, 8216, 8217, 247, 9674, 255, 376, 8260, 8364, 8249, 8250, 64257, 64258, 8225, 183, 8218, 8222, 8240, 194, 202, 193, 203, 200, 205, 206, 207, 204, 211, 212, 63743, 210, 218, 219, 217, 305, 710, 732, 175, 728, 729, 730, 184, 733, 731, 711], + "windows-874": [8364, 129, 130, 131, 132, 8230, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 153, 154, 155, 156, 157, 158, 159, 160, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, null, null, null, null, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, null, null, null, null], + "windows-1250": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 352, 8249, 346, 356, 381, 377, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 353, 8250, 347, 357, 382, 378, 160, 711, 728, 321, 164, 260, 166, 167, 168, 169, 350, 171, 172, 173, 174, 379, 176, 177, 731, 322, 180, 181, 182, 183, 184, 261, 351, 187, 317, 733, 318, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729], + "windows-1251": [1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039, 1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 1113, 8250, 1114, 1116, 1115, 1119, 160, 1038, 1118, 1032, 164, 1168, 166, 167, 1025, 169, 1028, 171, 172, 173, 174, 1031, 176, 177, 1030, 1110, 1169, 181, 182, 183, 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103], + "windows-1252": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255], + "windows-1253": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 157, 158, 159, 160, 901, 902, 163, 164, 165, 166, 167, 168, 169, null, 171, 172, 173, 174, 8213, 176, 177, 178, 179, 900, 181, 182, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null], + "windows-1254": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 286, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 304, 350, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 287, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 305, 351, 255], + "windows-1255": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 156, 157, 158, 159, 160, 161, 162, 163, 8362, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, 191, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1520, 1521, 1522, 1523, 1524, null, null, null, null, null, null, null, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null], + "windows-1256": [8364, 1662, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 1657, 8249, 338, 1670, 1688, 1672, 1711, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 1705, 8482, 1681, 8250, 339, 8204, 8205, 1722, 160, 1548, 162, 163, 164, 165, 166, 167, 168, 169, 1726, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 1563, 187, 188, 189, 190, 1567, 1729, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 215, 1591, 1592, 1593, 1594, 1600, 1601, 1602, 1603, 224, 1604, 226, 1605, 1606, 1607, 1608, 231, 232, 233, 234, 235, 1609, 1610, 238, 239, 1611, 1612, 1613, 1614, 244, 1615, 1616, 247, 1617, 249, 1618, 251, 252, 8206, 8207, 1746], + "windows-1257": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 168, 711, 184, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 175, 731, 159, 160, null, 162, 163, 164, null, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 180, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 729], + "windows-1258": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 258, 196, 197, 198, 199, 200, 201, 202, 203, 768, 205, 206, 207, 272, 209, 777, 211, 212, 416, 214, 215, 216, 217, 218, 219, 220, 431, 771, 223, 224, 225, 226, 259, 228, 229, 230, 231, 232, 233, 234, 235, 769, 237, 238, 239, 273, 241, 803, 243, 244, 417, 246, 247, 248, 249, 250, 251, 252, 432, 8363, 255], + "x-mac-cyrillic": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 8224, 176, 1168, 163, 167, 8226, 182, 1030, 174, 169, 8482, 1026, 1106, 8800, 1027, 1107, 8734, 177, 8804, 8805, 1110, 181, 1169, 1032, 1028, 1108, 1031, 1111, 1033, 1113, 1034, 1114, 1112, 1029, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 1035, 1115, 1036, 1116, 1109, 8211, 8212, 8220, 8221, 8216, 8217, 247, 8222, 1038, 1118, 1039, 1119, 8470, 1025, 1105, 1103, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 8364] + }; + })(exports || {}); + } +}); + +// node_modules/@sinonjs/text-encoding/lib/encoding.js +var require_encoding = __commonJS({ + "node_modules/@sinonjs/text-encoding/lib/encoding.js"(exports, module2) { + (function(global2) { + "use strict"; + if (typeof module2 !== "undefined" && module2.exports && !global2["encoding-indexes"]) { + global2["encoding-indexes"] = require_encoding_indexes()["encoding-indexes"]; + } + function inRange(a3, min, max) { + return min <= a3 && a3 <= max; + } + function includes(array, item) { + return array.indexOf(item) !== -1; + } + var floor = Math.floor; + function ToDictionary(o3) { + if (o3 === void 0) + return {}; + if (o3 === Object(o3)) + return o3; + throw TypeError("Could not convert argument to dictionary"); + } + function stringToCodePoints(string) { + var s4 = String(string); + var n3 = s4.length; + var i4 = 0; + var u3 = []; + while (i4 < n3) { + var c4 = s4.charCodeAt(i4); + if (c4 < 55296 || c4 > 57343) { + u3.push(c4); + } else if (56320 <= c4 && c4 <= 57343) { + u3.push(65533); + } else if (55296 <= c4 && c4 <= 56319) { + if (i4 === n3 - 1) { + u3.push(65533); + } else { + var d3 = s4.charCodeAt(i4 + 1); + if (56320 <= d3 && d3 <= 57343) { + var a3 = c4 & 1023; + var b3 = d3 & 1023; + u3.push(65536 + (a3 << 10) + b3); + i4 += 1; + } else { + u3.push(65533); + } + } + } + i4 += 1; + } + return u3; + } + function codePointsToString(code_points) { + var s4 = ""; + for (var i4 = 0; i4 < code_points.length; ++i4) { + var cp = code_points[i4]; + if (cp <= 65535) { + s4 += String.fromCharCode(cp); + } else { + cp -= 65536; + s4 += String.fromCharCode( + (cp >> 10) + 55296, + (cp & 1023) + 56320 + ); + } + } + return s4; + } + function isASCIIByte(a3) { + return 0 <= a3 && a3 <= 127; + } + var isASCIICodePoint = isASCIIByte; + var end_of_stream = -1; + function Stream(tokens) { + this.tokens = [].slice.call(tokens); + this.tokens.reverse(); + } + Stream.prototype = { + /** + * @return {boolean} True if end-of-stream has been hit. + */ + endOfStream: function() { + return !this.tokens.length; + }, + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return {number} Get the next token from the stream, or + * end_of_stream. + */ + read: function() { + if (!this.tokens.length) + return end_of_stream; + return this.tokens.pop(); + }, + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend: function(token) { + if (Array.isArray(token)) { + var tokens = ( + /**@type {!Array.}*/ + token + ); + while (tokens.length) + this.tokens.push(tokens.pop()); + } else { + this.tokens.push(token); + } + }, + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push: function(token) { + if (Array.isArray(token)) { + var tokens = ( + /**@type {!Array.}*/ + token + ); + while (tokens.length) + this.tokens.unshift(tokens.shift()); + } else { + this.tokens.unshift(token); + } + } + }; + var finished = -1; + function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError("Decoder error"); + return opt_code_point || 65533; + } + function encoderError(code_point) { + throw TypeError("The code point " + code_point + " could not be encoded."); + } + function Decoder() { + } + Decoder.prototype = { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point, or |finished|. + */ + handler: function(stream, bite) { + } + }; + function Encoder() { + } + Encoder.prototype = { + /** + * @param {Stream} stream The stream of code points being encoded. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit, or |finished|. + */ + handler: function(stream, code_point) { + } + }; + function getEncoding(label) { + label = String(label).trim().toLowerCase(); + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label]; + } + return null; + } + var encodings = [ + { + "encodings": [ + { + "labels": [ + "unicode-1-1-utf-8", + "utf-8", + "utf8" + ], + "name": "UTF-8" + } + ], + "heading": "The Encoding" + }, + { + "encodings": [ + { + "labels": [ + "866", + "cp866", + "csibm866", + "ibm866" + ], + "name": "IBM866" + }, + { + "labels": [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2" + ], + "name": "ISO-8859-2" + }, + { + "labels": [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3" + ], + "name": "ISO-8859-3" + }, + { + "labels": [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4" + ], + "name": "ISO-8859-4" + }, + { + "labels": [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988" + ], + "name": "ISO-8859-5" + }, + { + "labels": [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987" + ], + "name": "ISO-8859-6" + }, + { + "labels": [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek" + ], + "name": "ISO-8859-7" + }, + { + "labels": [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual" + ], + "name": "ISO-8859-8" + }, + { + "labels": [ + "csiso88598i", + "iso-8859-8-i", + "logical" + ], + "name": "ISO-8859-8-I" + }, + { + "labels": [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6" + ], + "name": "ISO-8859-10" + }, + { + "labels": [ + "iso-8859-13", + "iso8859-13", + "iso885913" + ], + "name": "ISO-8859-13" + }, + { + "labels": [ + "iso-8859-14", + "iso8859-14", + "iso885914" + ], + "name": "ISO-8859-14" + }, + { + "labels": [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9" + ], + "name": "ISO-8859-15" + }, + { + "labels": [ + "iso-8859-16" + ], + "name": "ISO-8859-16" + }, + { + "labels": [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r" + ], + "name": "KOI8-R" + }, + { + "labels": [ + "koi8-ru", + "koi8-u" + ], + "name": "KOI8-U" + }, + { + "labels": [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman" + ], + "name": "macintosh" + }, + { + "labels": [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874" + ], + "name": "windows-874" + }, + { + "labels": [ + "cp1250", + "windows-1250", + "x-cp1250" + ], + "name": "windows-1250" + }, + { + "labels": [ + "cp1251", + "windows-1251", + "x-cp1251" + ], + "name": "windows-1251" + }, + { + "labels": [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252" + ], + "name": "windows-1252" + }, + { + "labels": [ + "cp1253", + "windows-1253", + "x-cp1253" + ], + "name": "windows-1253" + }, + { + "labels": [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254" + ], + "name": "windows-1254" + }, + { + "labels": [ + "cp1255", + "windows-1255", + "x-cp1255" + ], + "name": "windows-1255" + }, + { + "labels": [ + "cp1256", + "windows-1256", + "x-cp1256" + ], + "name": "windows-1256" + }, + { + "labels": [ + "cp1257", + "windows-1257", + "x-cp1257" + ], + "name": "windows-1257" + }, + { + "labels": [ + "cp1258", + "windows-1258", + "x-cp1258" + ], + "name": "windows-1258" + }, + { + "labels": [ + "x-mac-cyrillic", + "x-mac-ukrainian" + ], + "name": "x-mac-cyrillic" + } + ], + "heading": "Legacy single-byte encodings" + }, + { + "encodings": [ + { + "labels": [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk" + ], + "name": "GBK" + }, + { + "labels": [ + "gb18030" + ], + "name": "gb18030" + } + ], + "heading": "Legacy multi-byte Chinese (simplified) encodings" + }, + { + "encodings": [ + { + "labels": [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5" + ], + "name": "Big5" + } + ], + "heading": "Legacy multi-byte Chinese (traditional) encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp" + ], + "name": "EUC-JP" + }, + { + "labels": [ + "csiso2022jp", + "iso-2022-jp" + ], + "name": "ISO-2022-JP" + }, + { + "labels": [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis" + ], + "name": "Shift_JIS" + } + ], + "heading": "Legacy multi-byte Japanese encodings" + }, + { + "encodings": [ + { + "labels": [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949" + ], + "name": "EUC-KR" + } + ], + "heading": "Legacy multi-byte Korean encodings" + }, + { + "encodings": [ + { + "labels": [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr" + ], + "name": "replacement" + }, + { + "labels": [ + "utf-16be" + ], + "name": "UTF-16BE" + }, + { + "labels": [ + "utf-16", + "utf-16le" + ], + "name": "UTF-16LE" + }, + { + "labels": [ + "x-user-defined" + ], + "name": "x-user-defined" + } + ], + "heading": "Legacy miscellaneous encodings" + } + ]; + var label_to_encoding = {}; + encodings.forEach(function(category) { + category.encodings.forEach(function(encoding) { + encoding.labels.forEach(function(label) { + label_to_encoding[label] = encoding; + }); + }); + }); + var encoders = {}; + var decoders = {}; + function indexCodePointFor(pointer, index2) { + if (!index2) + return null; + return index2[pointer] || null; + } + function indexPointerFor(code_point, index2) { + var pointer = index2.indexOf(code_point); + return pointer === -1 ? null : pointer; + } + function index(name) { + if (!("encoding-indexes" in global2)) { + throw Error("Indexes missing. Did you forget to include encoding-indexes.js first?"); + } + return global2["encoding-indexes"][name]; + } + function indexGB18030RangesCodePointFor(pointer) { + if (pointer > 39419 && pointer < 189e3 || pointer > 1237575) + return null; + if (pointer === 7457) + return 59335; + var offset = 0; + var code_point_offset = 0; + var idx = index("gb18030-ranges"); + var i4; + for (i4 = 0; i4 < idx.length; ++i4) { + var entry = idx[i4]; + if (entry[0] <= pointer) { + offset = entry[0]; + code_point_offset = entry[1]; + } else { + break; + } + } + return code_point_offset + pointer - offset; + } + function indexGB18030RangesPointerFor(code_point) { + if (code_point === 59335) + return 7457; + var offset = 0; + var pointer_offset = 0; + var idx = index("gb18030-ranges"); + var i4; + for (i4 = 0; i4 < idx.length; ++i4) { + var entry = idx[i4]; + if (entry[1] <= code_point) { + offset = entry[1]; + pointer_offset = entry[0]; + } else { + break; + } + } + return pointer_offset + code_point - offset; + } + function indexShiftJISPointerFor(code_point) { + shift_jis_index = shift_jis_index || index("jis0208").map(function(code_point2, pointer) { + return inRange(pointer, 8272, 8835) ? null : code_point2; + }); + var index_ = shift_jis_index; + return index_.indexOf(code_point); + } + var shift_jis_index; + function indexBig5PointerFor(code_point) { + big5_index_no_hkscs = big5_index_no_hkscs || index("big5").map(function(code_point2, pointer) { + return pointer < (161 - 129) * 157 ? null : code_point2; + }); + var index_ = big5_index_no_hkscs; + if (code_point === 9552 || code_point === 9566 || code_point === 9569 || code_point === 9578 || code_point === 21313 || code_point === 21317) { + return index_.lastIndexOf(code_point); + } + return indexPointerFor(code_point, index_); + } + var big5_index_no_hkscs; + var DEFAULT_ENCODING = "utf-8"; + function TextDecoder3(label, options) { + if (!(this instanceof TextDecoder3)) + throw TypeError("Called as a function. Did you forget 'new'?"); + label = label !== void 0 ? String(label) : DEFAULT_ENCODING; + options = ToDictionary(options); + this._encoding = null; + this._decoder = null; + this._ignoreBOM = false; + this._BOMseen = false; + this._error_mode = "replacement"; + this._do_not_flush = false; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === "replacement") + throw RangeError("Unknown encoding: " + label); + if (!decoders[encoding.name]) { + throw Error("Decoder not present. Did you forget to include encoding-indexes.js first?"); + } + var dec = this; + dec._encoding = encoding; + if (Boolean(options["fatal"])) + dec._error_mode = "fatal"; + if (Boolean(options["ignoreBOM"])) + dec._ignoreBOM = true; + if (!Object.defineProperty) { + this.encoding = dec._encoding.name.toLowerCase(); + this.fatal = dec._error_mode === "fatal"; + this.ignoreBOM = dec._ignoreBOM; + } + return dec; + } + if (Object.defineProperty) { + Object.defineProperty(TextDecoder3.prototype, "encoding", { + /** @this {TextDecoder} */ + get: function() { + return this._encoding.name.toLowerCase(); + } + }); + Object.defineProperty(TextDecoder3.prototype, "fatal", { + /** @this {TextDecoder} */ + get: function() { + return this._error_mode === "fatal"; + } + }); + Object.defineProperty(TextDecoder3.prototype, "ignoreBOM", { + /** @this {TextDecoder} */ + get: function() { + return this._ignoreBOM; + } + }); + } + TextDecoder3.prototype.decode = function decode3(input, options) { + var bytes; + if (typeof input === "object" && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input); + } else if (typeof input === "object" && "buffer" in input && input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array( + input.buffer, + input.byteOffset, + input.byteLength + ); + } else { + bytes = new Uint8Array(0); + } + options = ToDictionary(options); + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === "fatal" + }); + this._BOMseen = false; + } + this._do_not_flush = Boolean(options["stream"]); + var input_stream = new Stream(bytes); + var output = []; + var result; + while (true) { + var token = input_stream.read(); + if (token === end_of_stream) + break; + result = this._decoder.handler(input_stream, token); + if (result === finished) + break; + if (result !== null) { + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + } + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()); + if (result === finished) + break; + if (result === null) + continue; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } while (!input_stream.endOfStream()); + this._decoder = null; + } + function serializeStream(stream) { + if (includes(["UTF-8", "UTF-16LE", "UTF-16BE"], this._encoding.name) && !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 65279) { + this._BOMseen = true; + stream.shift(); + } else if (stream.length > 0) { + this._BOMseen = true; + } else { + } + } + return codePointsToString(stream); + } + return serializeStream.call(this, output); + }; + function TextEncoder3(label, options) { + if (!(this instanceof TextEncoder3)) + throw TypeError("Called as a function. Did you forget 'new'?"); + options = ToDictionary(options); + this._encoding = null; + this._encoder = null; + this._do_not_flush = false; + this._fatal = Boolean(options["fatal"]) ? "fatal" : "replacement"; + var enc = this; + if (Boolean(options["NONSTANDARD_allowLegacyEncoding"])) { + label = label !== void 0 ? String(label) : DEFAULT_ENCODING; + var encoding = getEncoding(label); + if (encoding === null || encoding.name === "replacement") + throw RangeError("Unknown encoding: " + label); + if (!encoders[encoding.name]) { + throw Error("Encoder not present. Did you forget to include encoding-indexes.js first?"); + } + enc._encoding = encoding; + } else { + enc._encoding = getEncoding("utf-8"); + if (label !== void 0 && "console" in global2) { + console.warn("TextEncoder constructor called with encoding label, which is ignored."); + } + } + if (!Object.defineProperty) + this.encoding = enc._encoding.name.toLowerCase(); + return enc; + } + if (Object.defineProperty) { + Object.defineProperty(TextEncoder3.prototype, "encoding", { + /** @this {TextEncoder} */ + get: function() { + return this._encoding.name.toLowerCase(); + } + }); + } + TextEncoder3.prototype.encode = function encode3(opt_string, options) { + opt_string = opt_string === void 0 ? "" : String(opt_string); + options = ToDictionary(options); + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === "fatal" + }); + this._do_not_flush = Boolean(options["stream"]); + var input = new Stream(stringToCodePoints(opt_string)); + var output = []; + var result; + while (true) { + var token = input.read(); + if (token === end_of_stream) + break; + result = this._encoder.handler(input, token); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()); + if (result === finished) + break; + if (Array.isArray(result)) + output.push.apply( + output, + /**@type {!Array.}*/ + result + ); + else + output.push(result); + } + this._encoder = null; + } + return new Uint8Array(output); + }; + function UTF8Decoder(options) { + var fatal = options.fatal; + var utf8_code_point = 0, utf8_bytes_seen = 0, utf8_bytes_needed = 0, utf8_lower_boundary = 128, utf8_upper_boundary = 191; + this.handler = function(stream, bite) { + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0; + return decoderError(fatal); + } + if (bite === end_of_stream) + return finished; + if (utf8_bytes_needed === 0) { + if (inRange(bite, 0, 127)) { + return bite; + } else if (inRange(bite, 194, 223)) { + utf8_bytes_needed = 1; + utf8_code_point = bite & 31; + } else if (inRange(bite, 224, 239)) { + if (bite === 224) + utf8_lower_boundary = 160; + if (bite === 237) + utf8_upper_boundary = 159; + utf8_bytes_needed = 2; + utf8_code_point = bite & 15; + } else if (inRange(bite, 240, 244)) { + if (bite === 240) + utf8_lower_boundary = 144; + if (bite === 244) + utf8_upper_boundary = 143; + utf8_bytes_needed = 3; + utf8_code_point = bite & 7; + } else { + return decoderError(fatal); + } + return null; + } + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + utf8_lower_boundary = 128; + utf8_upper_boundary = 191; + stream.prepend(bite); + return decoderError(fatal); + } + utf8_lower_boundary = 128; + utf8_upper_boundary = 191; + utf8_code_point = utf8_code_point << 6 | bite & 63; + utf8_bytes_seen += 1; + if (utf8_bytes_seen !== utf8_bytes_needed) + return null; + var code_point = utf8_code_point; + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0; + return code_point; + }; + } + function UTF8Encoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + var count, offset; + if (inRange(code_point, 128, 2047)) { + count = 1; + offset = 192; + } else if (inRange(code_point, 2048, 65535)) { + count = 2; + offset = 224; + } else if (inRange(code_point, 65536, 1114111)) { + count = 3; + offset = 240; + } + var bytes = [(code_point >> 6 * count) + offset]; + while (count > 0) { + var temp = code_point >> 6 * (count - 1); + bytes.push(128 | temp & 63); + count -= 1; + } + return bytes; + }; + } + encoders["UTF-8"] = function(options) { + return new UTF8Encoder(options); + }; + decoders["UTF-8"] = function(options) { + return new UTF8Decoder(options); + }; + function SingleByteDecoder(index2, options) { + var fatal = options.fatal; + this.handler = function(stream, bite) { + if (bite === end_of_stream) + return finished; + if (isASCIIByte(bite)) + return bite; + var code_point = index2[bite - 128]; + if (code_point === null) + return decoderError(fatal); + return code_point; + }; + } + function SingleByteEncoder(index2, options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + var pointer = indexPointerFor(code_point, index2); + if (pointer === null) + encoderError(code_point); + return pointer + 128; + }; + } + (function() { + if (!("encoding-indexes" in global2)) + return; + encodings.forEach(function(category) { + if (category.heading !== "Legacy single-byte encodings") + return; + category.encodings.forEach(function(encoding) { + var name = encoding.name; + var idx = index(name.toLowerCase()); + decoders[name] = function(options) { + return new SingleByteDecoder(idx, options); + }; + encoders[name] = function(options) { + return new SingleByteEncoder(idx, options); + }; + }); + }); + })(); + decoders["GBK"] = function(options) { + return new GB18030Decoder(options); + }; + encoders["GBK"] = function(options) { + return new GB18030Encoder(options, true); + }; + function GB18030Decoder(options) { + var fatal = options.fatal; + var gb18030_first = 0, gb18030_second = 0, gb18030_third = 0; + this.handler = function(stream, bite) { + if (bite === end_of_stream && gb18030_first === 0 && gb18030_second === 0 && gb18030_third === 0) { + return finished; + } + if (bite === end_of_stream && (gb18030_first !== 0 || gb18030_second !== 0 || gb18030_third !== 0)) { + gb18030_first = 0; + gb18030_second = 0; + gb18030_third = 0; + decoderError(fatal); + } + var code_point; + if (gb18030_third !== 0) { + code_point = null; + if (inRange(bite, 48, 57)) { + code_point = indexGB18030RangesCodePointFor( + (((gb18030_first - 129) * 10 + gb18030_second - 48) * 126 + gb18030_third - 129) * 10 + bite - 48 + ); + } + var buffer = [gb18030_second, gb18030_third, bite]; + gb18030_first = 0; + gb18030_second = 0; + gb18030_third = 0; + if (code_point === null) { + stream.prepend(buffer); + return decoderError(fatal); + } + return code_point; + } + if (gb18030_second !== 0) { + if (inRange(bite, 129, 254)) { + gb18030_third = bite; + return null; + } + stream.prepend([gb18030_second, bite]); + gb18030_first = 0; + gb18030_second = 0; + return decoderError(fatal); + } + if (gb18030_first !== 0) { + if (inRange(bite, 48, 57)) { + gb18030_second = bite; + return null; + } + var lead = gb18030_first; + var pointer = null; + gb18030_first = 0; + var offset = bite < 127 ? 64 : 65; + if (inRange(bite, 64, 126) || inRange(bite, 128, 254)) + pointer = (lead - 129) * 190 + (bite - offset); + code_point = pointer === null ? null : indexCodePointFor(pointer, index("gb18030")); + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (bite === 128) + return 8364; + if (inRange(bite, 129, 254)) { + gb18030_first = bite; + return null; + } + return decoderError(fatal); + }; + } + function GB18030Encoder(options, gbk_flag) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 58853) + return encoderError(code_point); + if (gbk_flag && code_point === 8364) + return 128; + var pointer = indexPointerFor(code_point, index("gb18030")); + if (pointer !== null) { + var lead = floor(pointer / 190) + 129; + var trail = pointer % 190; + var offset = trail < 63 ? 64 : 65; + return [lead, trail + offset]; + } + if (gbk_flag) + return encoderError(code_point); + pointer = indexGB18030RangesPointerFor(code_point); + var byte1 = floor(pointer / 10 / 126 / 10); + pointer = pointer - byte1 * 10 * 126 * 10; + var byte2 = floor(pointer / 10 / 126); + pointer = pointer - byte2 * 10 * 126; + var byte3 = floor(pointer / 10); + var byte4 = pointer - byte3 * 10; + return [ + byte1 + 129, + byte2 + 48, + byte3 + 129, + byte4 + 48 + ]; + }; + } + encoders["gb18030"] = function(options) { + return new GB18030Encoder(options); + }; + decoders["gb18030"] = function(options) { + return new GB18030Decoder(options); + }; + function Big5Decoder(options) { + var fatal = options.fatal; + var Big5_lead = 0; + this.handler = function(stream, bite) { + if (bite === end_of_stream && Big5_lead !== 0) { + Big5_lead = 0; + return decoderError(fatal); + } + if (bite === end_of_stream && Big5_lead === 0) + return finished; + if (Big5_lead !== 0) { + var lead = Big5_lead; + var pointer = null; + Big5_lead = 0; + var offset = bite < 127 ? 64 : 98; + if (inRange(bite, 64, 126) || inRange(bite, 161, 254)) + pointer = (lead - 129) * 157 + (bite - offset); + switch (pointer) { + case 1133: + return [202, 772]; + case 1135: + return [202, 780]; + case 1164: + return [234, 772]; + case 1166: + return [234, 780]; + } + var code_point = pointer === null ? null : indexCodePointFor(pointer, index("big5")); + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (inRange(bite, 129, 254)) { + Big5_lead = bite; + return null; + } + return decoderError(fatal); + }; + } + function Big5Encoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + var pointer = indexBig5PointerFor(code_point); + if (pointer === null) + return encoderError(code_point); + var lead = floor(pointer / 157) + 129; + if (lead < 161) + return encoderError(code_point); + var trail = pointer % 157; + var offset = trail < 63 ? 64 : 98; + return [lead, trail + offset]; + }; + } + encoders["Big5"] = function(options) { + return new Big5Encoder(options); + }; + decoders["Big5"] = function(options) { + return new Big5Decoder(options); + }; + function EUCJPDecoder(options) { + var fatal = options.fatal; + var eucjp_jis0212_flag = false, eucjp_lead = 0; + this.handler = function(stream, bite) { + if (bite === end_of_stream && eucjp_lead !== 0) { + eucjp_lead = 0; + return decoderError(fatal); + } + if (bite === end_of_stream && eucjp_lead === 0) + return finished; + if (eucjp_lead === 142 && inRange(bite, 161, 223)) { + eucjp_lead = 0; + return 65377 - 161 + bite; + } + if (eucjp_lead === 143 && inRange(bite, 161, 254)) { + eucjp_jis0212_flag = true; + eucjp_lead = bite; + return null; + } + if (eucjp_lead !== 0) { + var lead = eucjp_lead; + eucjp_lead = 0; + var code_point = null; + if (inRange(lead, 161, 254) && inRange(bite, 161, 254)) { + code_point = indexCodePointFor( + (lead - 161) * 94 + (bite - 161), + index(!eucjp_jis0212_flag ? "jis0208" : "jis0212") + ); + } + eucjp_jis0212_flag = false; + if (!inRange(bite, 161, 254)) + stream.prepend(bite); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (bite === 142 || bite === 143 || inRange(bite, 161, 254)) { + eucjp_lead = bite; + return null; + } + return decoderError(fatal); + }; + } + function EUCJPEncoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + if (inRange(code_point, 65377, 65439)) + return [142, code_point - 65377 + 161]; + if (code_point === 8722) + code_point = 65293; + var pointer = indexPointerFor(code_point, index("jis0208")); + if (pointer === null) + return encoderError(code_point); + var lead = floor(pointer / 94) + 161; + var trail = pointer % 94 + 161; + return [lead, trail]; + }; + } + encoders["EUC-JP"] = function(options) { + return new EUCJPEncoder(options); + }; + decoders["EUC-JP"] = function(options) { + return new EUCJPDecoder(options); + }; + function ISO2022JPDecoder(options) { + var fatal = options.fatal; + var states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6 + }; + var iso2022jp_decoder_state = states.ASCII, iso2022jp_decoder_output_state = states.ASCII, iso2022jp_lead = 0, iso2022jp_output_flag = false; + this.handler = function(stream, bite) { + switch (iso2022jp_decoder_state) { + default: + case states.ASCII: + if (bite === 27) { + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27) { + iso2022jp_output_flag = false; + return bite; + } + if (bite === end_of_stream) { + return finished; + } + iso2022jp_output_flag = false; + return decoderError(fatal); + case states.Roman: + if (bite === 27) { + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + if (bite === 92) { + iso2022jp_output_flag = false; + return 165; + } + if (bite === 126) { + iso2022jp_output_flag = false; + return 8254; + } + if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27 && bite !== 92 && bite !== 126) { + iso2022jp_output_flag = false; + return bite; + } + if (bite === end_of_stream) { + return finished; + } + iso2022jp_output_flag = false; + return decoderError(fatal); + case states.Katakana: + if (bite === 27) { + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + if (inRange(bite, 33, 95)) { + iso2022jp_output_flag = false; + return 65377 - 33 + bite; + } + if (bite === end_of_stream) { + return finished; + } + iso2022jp_output_flag = false; + return decoderError(fatal); + case states.LeadByte: + if (bite === 27) { + iso2022jp_decoder_state = states.EscapeStart; + return null; + } + if (inRange(bite, 33, 126)) { + iso2022jp_output_flag = false; + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.TrailByte; + return null; + } + if (bite === end_of_stream) { + return finished; + } + iso2022jp_output_flag = false; + return decoderError(fatal); + case states.TrailByte: + if (bite === 27) { + iso2022jp_decoder_state = states.EscapeStart; + return decoderError(fatal); + } + if (inRange(bite, 33, 126)) { + iso2022jp_decoder_state = states.LeadByte; + var pointer = (iso2022jp_lead - 33) * 94 + bite - 33; + var code_point = indexCodePointFor(pointer, index("jis0208")); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (bite === end_of_stream) { + iso2022jp_decoder_state = states.LeadByte; + stream.prepend(bite); + return decoderError(fatal); + } + iso2022jp_decoder_state = states.LeadByte; + return decoderError(fatal); + case states.EscapeStart: + if (bite === 36 || bite === 40) { + iso2022jp_lead = bite; + iso2022jp_decoder_state = states.Escape; + return null; + } + stream.prepend(bite); + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + case states.Escape: + var lead = iso2022jp_lead; + iso2022jp_lead = 0; + var state = null; + if (lead === 40 && bite === 66) + state = states.ASCII; + if (lead === 40 && bite === 74) + state = states.Roman; + if (lead === 40 && bite === 73) + state = states.Katakana; + if (lead === 36 && (bite === 64 || bite === 66)) + state = states.LeadByte; + if (state !== null) { + iso2022jp_decoder_state = iso2022jp_decoder_state = state; + var output_flag = iso2022jp_output_flag; + iso2022jp_output_flag = true; + return !output_flag ? null : decoderError(fatal); + } + stream.prepend([lead, bite]); + iso2022jp_output_flag = false; + iso2022jp_decoder_state = iso2022jp_decoder_output_state; + return decoderError(fatal); + } + }; + } + function ISO2022JPEncoder(options) { + var fatal = options.fatal; + var states = { + ASCII: 0, + Roman: 1, + jis0208: 2 + }; + var iso2022jp_state = states.ASCII; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream && iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [27, 40, 66]; + } + if (code_point === end_of_stream && iso2022jp_state === states.ASCII) + return finished; + if ((iso2022jp_state === states.ASCII || iso2022jp_state === states.Roman) && (code_point === 14 || code_point === 15 || code_point === 27)) { + return encoderError(65533); + } + if (iso2022jp_state === states.ASCII && isASCIICodePoint(code_point)) + return code_point; + if (iso2022jp_state === states.Roman && (isASCIICodePoint(code_point) && code_point !== 92 && code_point !== 126 || (code_point == 165 || code_point == 8254))) { + if (isASCIICodePoint(code_point)) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + } + if (isASCIICodePoint(code_point) && iso2022jp_state !== states.ASCII) { + stream.prepend(code_point); + iso2022jp_state = states.ASCII; + return [27, 40, 66]; + } + if ((code_point === 165 || code_point === 8254) && iso2022jp_state !== states.Roman) { + stream.prepend(code_point); + iso2022jp_state = states.Roman; + return [27, 40, 74]; + } + if (code_point === 8722) + code_point = 65293; + var pointer = indexPointerFor(code_point, index("jis0208")); + if (pointer === null) + return encoderError(code_point); + if (iso2022jp_state !== states.jis0208) { + stream.prepend(code_point); + iso2022jp_state = states.jis0208; + return [27, 36, 66]; + } + var lead = floor(pointer / 94) + 33; + var trail = pointer % 94 + 33; + return [lead, trail]; + }; + } + encoders["ISO-2022-JP"] = function(options) { + return new ISO2022JPEncoder(options); + }; + decoders["ISO-2022-JP"] = function(options) { + return new ISO2022JPDecoder(options); + }; + function ShiftJISDecoder(options) { + var fatal = options.fatal; + var Shift_JIS_lead = 0; + this.handler = function(stream, bite) { + if (bite === end_of_stream && Shift_JIS_lead !== 0) { + Shift_JIS_lead = 0; + return decoderError(fatal); + } + if (bite === end_of_stream && Shift_JIS_lead === 0) + return finished; + if (Shift_JIS_lead !== 0) { + var lead = Shift_JIS_lead; + var pointer = null; + Shift_JIS_lead = 0; + var offset = bite < 127 ? 64 : 65; + var lead_offset = lead < 160 ? 129 : 193; + if (inRange(bite, 64, 126) || inRange(bite, 128, 252)) + pointer = (lead - lead_offset) * 188 + bite - offset; + if (inRange(pointer, 8836, 10715)) + return 57344 - 8836 + pointer; + var code_point = pointer === null ? null : indexCodePointFor(pointer, index("jis0208")); + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (isASCIIByte(bite) || bite === 128) + return bite; + if (inRange(bite, 161, 223)) + return 65377 - 161 + bite; + if (inRange(bite, 129, 159) || inRange(bite, 224, 252)) { + Shift_JIS_lead = bite; + return null; + } + return decoderError(fatal); + }; + } + function ShiftJISEncoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point) || code_point === 128) + return code_point; + if (code_point === 165) + return 92; + if (code_point === 8254) + return 126; + if (inRange(code_point, 65377, 65439)) + return code_point - 65377 + 161; + if (code_point === 8722) + code_point = 65293; + var pointer = indexShiftJISPointerFor(code_point); + if (pointer === null) + return encoderError(code_point); + var lead = floor(pointer / 188); + var lead_offset = lead < 31 ? 129 : 193; + var trail = pointer % 188; + var offset = trail < 63 ? 64 : 65; + return [lead + lead_offset, trail + offset]; + }; + } + encoders["Shift_JIS"] = function(options) { + return new ShiftJISEncoder(options); + }; + decoders["Shift_JIS"] = function(options) { + return new ShiftJISDecoder(options); + }; + function EUCKRDecoder(options) { + var fatal = options.fatal; + var euckr_lead = 0; + this.handler = function(stream, bite) { + if (bite === end_of_stream && euckr_lead !== 0) { + euckr_lead = 0; + return decoderError(fatal); + } + if (bite === end_of_stream && euckr_lead === 0) + return finished; + if (euckr_lead !== 0) { + var lead = euckr_lead; + var pointer = null; + euckr_lead = 0; + if (inRange(bite, 65, 254)) + pointer = (lead - 129) * 190 + (bite - 65); + var code_point = pointer === null ? null : indexCodePointFor(pointer, index("euc-kr")); + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite); + if (code_point === null) + return decoderError(fatal); + return code_point; + } + if (isASCIIByte(bite)) + return bite; + if (inRange(bite, 129, 254)) { + euckr_lead = bite; + return null; + } + return decoderError(fatal); + }; + } + function EUCKREncoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + var pointer = indexPointerFor(code_point, index("euc-kr")); + if (pointer === null) + return encoderError(code_point); + var lead = floor(pointer / 190) + 129; + var trail = pointer % 190 + 65; + return [lead, trail]; + }; + } + encoders["EUC-KR"] = function(options) { + return new EUCKREncoder(options); + }; + decoders["EUC-KR"] = function(options) { + return new EUCKRDecoder(options); + }; + function convertCodeUnitToBytes(code_unit, utf16be) { + var byte1 = code_unit >> 8; + var byte2 = code_unit & 255; + if (utf16be) + return [byte1, byte2]; + return [byte2, byte1]; + } + function UTF16Decoder(utf16_be, options) { + var fatal = options.fatal; + var utf16_lead_byte = null, utf16_lead_surrogate = null; + this.handler = function(stream, bite) { + if (bite === end_of_stream && (utf16_lead_byte !== null || utf16_lead_surrogate !== null)) { + return decoderError(fatal); + } + if (bite === end_of_stream && utf16_lead_byte === null && utf16_lead_surrogate === null) { + return finished; + } + if (utf16_lead_byte === null) { + utf16_lead_byte = bite; + return null; + } + var code_unit; + if (utf16_be) { + code_unit = (utf16_lead_byte << 8) + bite; + } else { + code_unit = (bite << 8) + utf16_lead_byte; + } + utf16_lead_byte = null; + if (utf16_lead_surrogate !== null) { + var lead_surrogate = utf16_lead_surrogate; + utf16_lead_surrogate = null; + if (inRange(code_unit, 56320, 57343)) { + return 65536 + (lead_surrogate - 55296) * 1024 + (code_unit - 56320); + } + stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be)); + return decoderError(fatal); + } + if (inRange(code_unit, 55296, 56319)) { + utf16_lead_surrogate = code_unit; + return null; + } + if (inRange(code_unit, 56320, 57343)) + return decoderError(fatal); + return code_unit; + }; + } + function UTF16Encoder(utf16_be, options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (inRange(code_point, 0, 65535)) + return convertCodeUnitToBytes(code_point, utf16_be); + var lead = convertCodeUnitToBytes( + (code_point - 65536 >> 10) + 55296, + utf16_be + ); + var trail = convertCodeUnitToBytes( + (code_point - 65536 & 1023) + 56320, + utf16_be + ); + return lead.concat(trail); + }; + } + encoders["UTF-16BE"] = function(options) { + return new UTF16Encoder(true, options); + }; + decoders["UTF-16BE"] = function(options) { + return new UTF16Decoder(true, options); + }; + encoders["UTF-16LE"] = function(options) { + return new UTF16Encoder(false, options); + }; + decoders["UTF-16LE"] = function(options) { + return new UTF16Decoder(false, options); + }; + function XUserDefinedDecoder(options) { + var fatal = options.fatal; + this.handler = function(stream, bite) { + if (bite === end_of_stream) + return finished; + if (isASCIIByte(bite)) + return bite; + return 63360 + bite - 128; + }; + } + function XUserDefinedEncoder(options) { + var fatal = options.fatal; + this.handler = function(stream, code_point) { + if (code_point === end_of_stream) + return finished; + if (isASCIICodePoint(code_point)) + return code_point; + if (inRange(code_point, 63360, 63487)) + return code_point - 63360 + 128; + return encoderError(code_point); + }; + } + encoders["x-user-defined"] = function(options) { + return new XUserDefinedEncoder(options); + }; + decoders["x-user-defined"] = function(options) { + return new XUserDefinedDecoder(options); + }; + if (!global2["TextEncoder"]) + global2["TextEncoder"] = TextEncoder3; + if (!global2["TextDecoder"]) + global2["TextDecoder"] = TextDecoder3; + if (typeof module2 !== "undefined" && module2.exports) { + module2.exports = { + TextEncoder: global2["TextEncoder"], + TextDecoder: global2["TextDecoder"], + EncodingIndexes: global2["encoding-indexes"] + }; + } + })(exports || {}); + } +}); + +// node_modules/@sinonjs/text-encoding/index.js +var require_text_encoding = __commonJS({ + "node_modules/@sinonjs/text-encoding/index.js"(exports, module2) { + var encoding = require_encoding(); + module2.exports = { + TextEncoder: encoding.TextEncoder, + TextDecoder: encoding.TextDecoder + }; + } +}); + +// node_modules/dayjs/dayjs.min.js +var require_dayjs_min = __commonJS({ + "node_modules/dayjs/dayjs.min.js"(exports, module2) { + !function(t3, e3) { + "object" == typeof exports && "undefined" != typeof module2 ? module2.exports = e3() : "function" == typeof define && define.amd ? define(e3) : (t3 = "undefined" != typeof globalThis ? globalThis : t3 || self).dayjs = e3(); + }(exports, function() { + "use strict"; + var t3 = 1e3, e3 = 6e4, n3 = 36e5, r3 = "millisecond", i4 = "second", s4 = "minute", u3 = "hour", a3 = "day", o3 = "week", f3 = "month", h3 = "quarter", c4 = "year", d3 = "date", l3 = "Invalid Date", $3 = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y3 = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M3 = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t4) { + var e4 = ["th", "st", "nd", "rd"], n4 = t4 % 100; + return "[" + t4 + (e4[(n4 - 20) % 10] || e4[n4] || e4[0]) + "]"; + } }, m3 = function(t4, e4, n4) { + var r4 = String(t4); + return !r4 || r4.length >= e4 ? t4 : "" + Array(e4 + 1 - r4.length).join(n4) + t4; + }, v3 = { s: m3, z: function(t4) { + var e4 = -t4.utcOffset(), n4 = Math.abs(e4), r4 = Math.floor(n4 / 60), i5 = n4 % 60; + return (e4 <= 0 ? "+" : "-") + m3(r4, 2, "0") + ":" + m3(i5, 2, "0"); + }, m: function t4(e4, n4) { + if (e4.date() < n4.date()) + return -t4(n4, e4); + var r4 = 12 * (n4.year() - e4.year()) + (n4.month() - e4.month()), i5 = e4.clone().add(r4, f3), s5 = n4 - i5 < 0, u4 = e4.clone().add(r4 + (s5 ? -1 : 1), f3); + return +(-(r4 + (n4 - i5) / (s5 ? i5 - u4 : u4 - i5)) || 0); + }, a: function(t4) { + return t4 < 0 ? Math.ceil(t4) || 0 : Math.floor(t4); + }, p: function(t4) { + return { M: f3, y: c4, w: o3, d: a3, D: d3, h: u3, m: s4, s: i4, ms: r3, Q: h3 }[t4] || String(t4 || "").toLowerCase().replace(/s$/, ""); + }, u: function(t4) { + return void 0 === t4; + } }, g4 = "en", D3 = {}; + D3[g4] = M3; + var p3 = function(t4) { + return t4 instanceof _3; + }, S2 = function t4(e4, n4, r4) { + var i5; + if (!e4) + return g4; + if ("string" == typeof e4) { + var s5 = e4.toLowerCase(); + D3[s5] && (i5 = s5), n4 && (D3[s5] = n4, i5 = s5); + var u4 = e4.split("-"); + if (!i5 && u4.length > 1) + return t4(u4[0]); + } else { + var a4 = e4.name; + D3[a4] = e4, i5 = a4; + } + return !r4 && i5 && (g4 = i5), i5 || !r4 && g4; + }, w4 = function(t4, e4) { + if (p3(t4)) + return t4.clone(); + var n4 = "object" == typeof e4 ? e4 : {}; + return n4.date = t4, n4.args = arguments, new _3(n4); + }, O3 = v3; + O3.l = S2, O3.i = p3, O3.w = function(t4, e4) { + return w4(t4, { locale: e4.$L, utc: e4.$u, x: e4.$x, $offset: e4.$offset }); + }; + var _3 = function() { + function M4(t4) { + this.$L = S2(t4.locale, null, true), this.parse(t4); + } + var m4 = M4.prototype; + return m4.parse = function(t4) { + this.$d = function(t5) { + var e4 = t5.date, n4 = t5.utc; + if (null === e4) + return new Date(NaN); + if (O3.u(e4)) + return new Date(); + if (e4 instanceof Date) + return new Date(e4); + if ("string" == typeof e4 && !/Z$/i.test(e4)) { + var r4 = e4.match($3); + if (r4) { + var i5 = r4[2] - 1 || 0, s5 = (r4[7] || "0").substring(0, 3); + return n4 ? new Date(Date.UTC(r4[1], i5, r4[3] || 1, r4[4] || 0, r4[5] || 0, r4[6] || 0, s5)) : new Date(r4[1], i5, r4[3] || 1, r4[4] || 0, r4[5] || 0, r4[6] || 0, s5); + } + } + return new Date(e4); + }(t4), this.$x = t4.x || {}, this.init(); + }, m4.init = function() { + var t4 = this.$d; + this.$y = t4.getFullYear(), this.$M = t4.getMonth(), this.$D = t4.getDate(), this.$W = t4.getDay(), this.$H = t4.getHours(), this.$m = t4.getMinutes(), this.$s = t4.getSeconds(), this.$ms = t4.getMilliseconds(); + }, m4.$utils = function() { + return O3; + }, m4.isValid = function() { + return !(this.$d.toString() === l3); + }, m4.isSame = function(t4, e4) { + var n4 = w4(t4); + return this.startOf(e4) <= n4 && n4 <= this.endOf(e4); + }, m4.isAfter = function(t4, e4) { + return w4(t4) < this.startOf(e4); + }, m4.isBefore = function(t4, e4) { + return this.endOf(e4) < w4(t4); + }, m4.$g = function(t4, e4, n4) { + return O3.u(t4) ? this[e4] : this.set(n4, t4); + }, m4.unix = function() { + return Math.floor(this.valueOf() / 1e3); + }, m4.valueOf = function() { + return this.$d.getTime(); + }, m4.startOf = function(t4, e4) { + var n4 = this, r4 = !!O3.u(e4) || e4, h4 = O3.p(t4), l4 = function(t5, e5) { + var i5 = O3.w(n4.$u ? Date.UTC(n4.$y, e5, t5) : new Date(n4.$y, e5, t5), n4); + return r4 ? i5 : i5.endOf(a3); + }, $4 = function(t5, e5) { + return O3.w(n4.toDate()[t5].apply(n4.toDate("s"), (r4 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e5)), n4); + }, y4 = this.$W, M5 = this.$M, m5 = this.$D, v4 = "set" + (this.$u ? "UTC" : ""); + switch (h4) { + case c4: + return r4 ? l4(1, 0) : l4(31, 11); + case f3: + return r4 ? l4(1, M5) : l4(0, M5 + 1); + case o3: + var g5 = this.$locale().weekStart || 0, D4 = (y4 < g5 ? y4 + 7 : y4) - g5; + return l4(r4 ? m5 - D4 : m5 + (6 - D4), M5); + case a3: + case d3: + return $4(v4 + "Hours", 0); + case u3: + return $4(v4 + "Minutes", 1); + case s4: + return $4(v4 + "Seconds", 2); + case i4: + return $4(v4 + "Milliseconds", 3); + default: + return this.clone(); + } + }, m4.endOf = function(t4) { + return this.startOf(t4, false); + }, m4.$set = function(t4, e4) { + var n4, o4 = O3.p(t4), h4 = "set" + (this.$u ? "UTC" : ""), l4 = (n4 = {}, n4[a3] = h4 + "Date", n4[d3] = h4 + "Date", n4[f3] = h4 + "Month", n4[c4] = h4 + "FullYear", n4[u3] = h4 + "Hours", n4[s4] = h4 + "Minutes", n4[i4] = h4 + "Seconds", n4[r3] = h4 + "Milliseconds", n4)[o4], $4 = o4 === a3 ? this.$D + (e4 - this.$W) : e4; + if (o4 === f3 || o4 === c4) { + var y4 = this.clone().set(d3, 1); + y4.$d[l4]($4), y4.init(), this.$d = y4.set(d3, Math.min(this.$D, y4.daysInMonth())).$d; + } else + l4 && this.$d[l4]($4); + return this.init(), this; + }, m4.set = function(t4, e4) { + return this.clone().$set(t4, e4); + }, m4.get = function(t4) { + return this[O3.p(t4)](); + }, m4.add = function(r4, h4) { + var d4, l4 = this; + r4 = Number(r4); + var $4 = O3.p(h4), y4 = function(t4) { + var e4 = w4(l4); + return O3.w(e4.date(e4.date() + Math.round(t4 * r4)), l4); + }; + if ($4 === f3) + return this.set(f3, this.$M + r4); + if ($4 === c4) + return this.set(c4, this.$y + r4); + if ($4 === a3) + return y4(1); + if ($4 === o3) + return y4(7); + var M5 = (d4 = {}, d4[s4] = e3, d4[u3] = n3, d4[i4] = t3, d4)[$4] || 1, m5 = this.$d.getTime() + r4 * M5; + return O3.w(m5, this); + }, m4.subtract = function(t4, e4) { + return this.add(-1 * t4, e4); + }, m4.format = function(t4) { + var e4 = this, n4 = this.$locale(); + if (!this.isValid()) + return n4.invalidDate || l3; + var r4 = t4 || "YYYY-MM-DDTHH:mm:ssZ", i5 = O3.z(this), s5 = this.$H, u4 = this.$m, a4 = this.$M, o4 = n4.weekdays, f4 = n4.months, h4 = function(t5, n5, i6, s6) { + return t5 && (t5[n5] || t5(e4, r4)) || i6[n5].slice(0, s6); + }, c5 = function(t5) { + return O3.s(s5 % 12 || 12, t5, "0"); + }, d4 = n4.meridiem || function(t5, e5, n5) { + var r5 = t5 < 12 ? "AM" : "PM"; + return n5 ? r5.toLowerCase() : r5; + }, $4 = { YY: String(this.$y).slice(-2), YYYY: this.$y, M: a4 + 1, MM: O3.s(a4 + 1, 2, "0"), MMM: h4(n4.monthsShort, a4, f4, 3), MMMM: h4(f4, a4), D: this.$D, DD: O3.s(this.$D, 2, "0"), d: String(this.$W), dd: h4(n4.weekdaysMin, this.$W, o4, 2), ddd: h4(n4.weekdaysShort, this.$W, o4, 3), dddd: o4[this.$W], H: String(s5), HH: O3.s(s5, 2, "0"), h: c5(1), hh: c5(2), a: d4(s5, u4, true), A: d4(s5, u4, false), m: String(u4), mm: O3.s(u4, 2, "0"), s: String(this.$s), ss: O3.s(this.$s, 2, "0"), SSS: O3.s(this.$ms, 3, "0"), Z: i5 }; + return r4.replace(y3, function(t5, e5) { + return e5 || $4[t5] || i5.replace(":", ""); + }); + }, m4.utcOffset = function() { + return 15 * -Math.round(this.$d.getTimezoneOffset() / 15); + }, m4.diff = function(r4, d4, l4) { + var $4, y4 = O3.p(d4), M5 = w4(r4), m5 = (M5.utcOffset() - this.utcOffset()) * e3, v4 = this - M5, g5 = O3.m(this, M5); + return g5 = ($4 = {}, $4[c4] = g5 / 12, $4[f3] = g5, $4[h3] = g5 / 3, $4[o3] = (v4 - m5) / 6048e5, $4[a3] = (v4 - m5) / 864e5, $4[u3] = v4 / n3, $4[s4] = v4 / e3, $4[i4] = v4 / t3, $4)[y4] || v4, l4 ? g5 : O3.a(g5); + }, m4.daysInMonth = function() { + return this.endOf(f3).$D; + }, m4.$locale = function() { + return D3[this.$L]; + }, m4.locale = function(t4, e4) { + if (!t4) + return this.$L; + var n4 = this.clone(), r4 = S2(t4, e4, true); + return r4 && (n4.$L = r4), n4; + }, m4.clone = function() { + return O3.w(this.$d, this); + }, m4.toDate = function() { + return new Date(this.valueOf()); + }, m4.toJSON = function() { + return this.isValid() ? this.toISOString() : null; + }, m4.toISOString = function() { + return this.$d.toISOString(); + }, m4.toString = function() { + return this.$d.toUTCString(); + }, M4; + }(), T4 = _3.prototype; + return w4.prototype = T4, [["$ms", r3], ["$s", i4], ["$m", s4], ["$H", u3], ["$W", a3], ["$M", f3], ["$y", c4], ["$D", d3]].forEach(function(t4) { + T4[t4[1]] = function(e4) { + return this.$g(e4, t4[0], t4[1]); + }; + }), w4.extend = function(t4, e4) { + return t4.$i || (t4(e4, _3, w4), t4.$i = true), w4; + }, w4.locale = S2, w4.isDayjs = p3, w4.unix = function(t4) { + return w4(1e3 * t4); + }, w4.en = D3[g4], w4.Ls = D3, w4.p = {}, w4; + }); + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => MsgHandlerPlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian6 = require("obsidian"); + +// src/view.tsx +var import_obsidian4 = require("obsidian"); + +// node_modules/preact/dist/preact.module.js +var n2; +var l; +var u; +var i2; +var t; +var r; +var o; +var f; +var e = {}; +var c2 = []; +var s2 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; +function a(n3, l3) { + for (var u3 in l3) + n3[u3] = l3[u3]; + return n3; +} +function h(n3) { + var l3 = n3.parentNode; + l3 && l3.removeChild(n3); +} +function v(l3, u3, i4) { + var t3, r3, o3, f3 = {}; + for (o3 in u3) + "key" == o3 ? t3 = u3[o3] : "ref" == o3 ? r3 = u3[o3] : f3[o3] = u3[o3]; + if (arguments.length > 2 && (f3.children = arguments.length > 3 ? n2.call(arguments, 2) : i4), "function" == typeof l3 && null != l3.defaultProps) + for (o3 in l3.defaultProps) + void 0 === f3[o3] && (f3[o3] = l3.defaultProps[o3]); + return y(l3, f3, t3, r3, null); +} +function y(n3, i4, t3, r3, o3) { + var f3 = { type: n3, props: i4, key: t3, ref: r3, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: null == o3 ? ++u : o3 }; + return null == o3 && null != l.vnode && l.vnode(f3), f3; +} +function p() { + return { current: null }; +} +function d(n3) { + return n3.children; +} +function _(n3, l3) { + this.props = n3, this.context = l3; +} +function k(n3, l3) { + if (null == l3) + return n3.__ ? k(n3.__, n3.__.__k.indexOf(n3) + 1) : null; + for (var u3; l3 < n3.__k.length; l3++) + if (null != (u3 = n3.__k[l3]) && null != u3.__e) + return u3.__e; + return "function" == typeof n3.type ? k(n3) : null; +} +function b(n3) { + var l3, u3; + if (null != (n3 = n3.__) && null != n3.__c) { + for (n3.__e = n3.__c.base = null, l3 = 0; l3 < n3.__k.length; l3++) + if (null != (u3 = n3.__k[l3]) && null != u3.__e) { + n3.__e = n3.__c.base = u3.__e; + break; + } + return b(n3); + } +} +function g(n3) { + (!n3.__d && (n3.__d = true) && t.push(n3) && !m.__r++ || r !== l.debounceRendering) && ((r = l.debounceRendering) || o)(m); +} +function m() { + var n3, l3, u3, i4, r3, o3, f3, e3; + for (t.sort(function(n4, l4) { + return n4.__v.__b - l4.__v.__b; + }); n3 = t.shift(); ) + n3.__d && (l3 = t.length, i4 = void 0, r3 = void 0, f3 = (o3 = (u3 = n3).__v).__e, (e3 = u3.__P) && (i4 = [], (r3 = a({}, o3)).__v = o3.__v + 1, z(e3, o3, r3, u3.__n, void 0 !== e3.ownerSVGElement, null != o3.__h ? [f3] : null, i4, null == f3 ? k(o3) : f3, o3.__h), L(i4, o3), o3.__e != f3 && b(o3)), t.length > l3 && t.sort(function(n4, l4) { + return n4.__v.__b - l4.__v.__b; + })); + m.__r = 0; +} +function w(n3, l3, u3, i4, t3, r3, o3, f3, s4, a3) { + var h3, v3, p3, _3, b3, g4, m3, w4 = i4 && i4.__k || c2, A4 = w4.length; + for (u3.__k = [], h3 = 0; h3 < l3.length; h3++) + if (null != (_3 = u3.__k[h3] = null == (_3 = l3[h3]) || "boolean" == typeof _3 ? null : "string" == typeof _3 || "number" == typeof _3 || "bigint" == typeof _3 ? y(null, _3, null, null, _3) : Array.isArray(_3) ? y(d, { children: _3 }, null, null, null) : _3.__b > 0 ? y(_3.type, _3.props, _3.key, _3.ref ? _3.ref : null, _3.__v) : _3)) { + if (_3.__ = u3, _3.__b = u3.__b + 1, null === (p3 = w4[h3]) || p3 && _3.key == p3.key && _3.type === p3.type) + w4[h3] = void 0; + else + for (v3 = 0; v3 < A4; v3++) { + if ((p3 = w4[v3]) && _3.key == p3.key && _3.type === p3.type) { + w4[v3] = void 0; + break; + } + p3 = null; + } + z(n3, _3, p3 = p3 || e, t3, r3, o3, f3, s4, a3), b3 = _3.__e, (v3 = _3.ref) && p3.ref != v3 && (m3 || (m3 = []), p3.ref && m3.push(p3.ref, null, _3), m3.push(v3, _3.__c || b3, _3)), null != b3 ? (null == g4 && (g4 = b3), "function" == typeof _3.type && _3.__k === p3.__k ? _3.__d = s4 = x(_3, s4, n3) : s4 = P(n3, _3, p3, w4, b3, s4), "function" == typeof u3.type && (u3.__d = s4)) : s4 && p3.__e == s4 && s4.parentNode != n3 && (s4 = k(p3)); + } + for (u3.__e = g4, h3 = A4; h3--; ) + null != w4[h3] && ("function" == typeof u3.type && null != w4[h3].__e && w4[h3].__e == u3.__d && (u3.__d = C(i4).nextSibling), O(w4[h3], w4[h3])); + if (m3) + for (h3 = 0; h3 < m3.length; h3++) + N(m3[h3], m3[++h3], m3[++h3]); +} +function x(n3, l3, u3) { + for (var i4, t3 = n3.__k, r3 = 0; t3 && r3 < t3.length; r3++) + (i4 = t3[r3]) && (i4.__ = n3, l3 = "function" == typeof i4.type ? x(i4, l3, u3) : P(u3, i4, i4, t3, i4.__e, l3)); + return l3; +} +function A(n3, l3) { + return l3 = l3 || [], null == n3 || "boolean" == typeof n3 || (Array.isArray(n3) ? n3.some(function(n4) { + A(n4, l3); + }) : l3.push(n3)), l3; +} +function P(n3, l3, u3, i4, t3, r3) { + var o3, f3, e3; + if (void 0 !== l3.__d) + o3 = l3.__d, l3.__d = void 0; + else if (null == u3 || t3 != r3 || null == t3.parentNode) + n: + if (null == r3 || r3.parentNode !== n3) + n3.appendChild(t3), o3 = null; + else { + for (f3 = r3, e3 = 0; (f3 = f3.nextSibling) && e3 < i4.length; e3 += 1) + if (f3 == t3) + break n; + n3.insertBefore(t3, r3), o3 = r3; + } + return void 0 !== o3 ? o3 : t3.nextSibling; +} +function C(n3) { + var l3, u3, i4; + if (null == n3.type || "string" == typeof n3.type) + return n3.__e; + if (n3.__k) { + for (l3 = n3.__k.length - 1; l3 >= 0; l3--) + if ((u3 = n3.__k[l3]) && (i4 = C(u3))) + return i4; + } + return null; +} +function $(n3, l3, u3, i4, t3) { + var r3; + for (r3 in u3) + "children" === r3 || "key" === r3 || r3 in l3 || I(n3, r3, null, u3[r3], i4); + for (r3 in l3) + t3 && "function" != typeof l3[r3] || "children" === r3 || "key" === r3 || "value" === r3 || "checked" === r3 || u3[r3] === l3[r3] || I(n3, r3, l3[r3], u3[r3], i4); +} +function H(n3, l3, u3) { + "-" === l3[0] ? n3.setProperty(l3, null == u3 ? "" : u3) : n3[l3] = null == u3 ? "" : "number" != typeof u3 || s2.test(l3) ? u3 : u3 + "px"; +} +function I(n3, l3, u3, i4, t3) { + var r3; + n: + if ("style" === l3) + if ("string" == typeof u3) + n3.style.cssText = u3; + else { + if ("string" == typeof i4 && (n3.style.cssText = i4 = ""), i4) + for (l3 in i4) + u3 && l3 in u3 || H(n3.style, l3, ""); + if (u3) + for (l3 in u3) + i4 && u3[l3] === i4[l3] || H(n3.style, l3, u3[l3]); + } + else if ("o" === l3[0] && "n" === l3[1]) + r3 = l3 !== (l3 = l3.replace(/Capture$/, "")), l3 = l3.toLowerCase() in n3 ? l3.toLowerCase().slice(2) : l3.slice(2), n3.l || (n3.l = {}), n3.l[l3 + r3] = u3, u3 ? i4 || n3.addEventListener(l3, r3 ? j : T, r3) : n3.removeEventListener(l3, r3 ? j : T, r3); + else if ("dangerouslySetInnerHTML" !== l3) { + if (t3) + l3 = l3.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("width" !== l3 && "height" !== l3 && "href" !== l3 && "list" !== l3 && "form" !== l3 && "tabIndex" !== l3 && "download" !== l3 && l3 in n3) + try { + n3[l3] = null == u3 ? "" : u3; + break n; + } catch (n4) { + } + "function" == typeof u3 || (null == u3 || false === u3 && -1 == l3.indexOf("-") ? n3.removeAttribute(l3) : n3.setAttribute(l3, u3)); + } +} +function T(n3) { + return this.l[n3.type + false](l.event ? l.event(n3) : n3); +} +function j(n3) { + return this.l[n3.type + true](l.event ? l.event(n3) : n3); +} +function z(n3, u3, i4, t3, r3, o3, f3, e3, c4) { + var s4, h3, v3, y3, p3, k4, b3, g4, m3, x4, A4, P3, C3, $3, H3, I3 = u3.type; + if (void 0 !== u3.constructor) + return null; + null != i4.__h && (c4 = i4.__h, e3 = u3.__e = i4.__e, u3.__h = null, o3 = [e3]), (s4 = l.__b) && s4(u3); + try { + n: + if ("function" == typeof I3) { + if (g4 = u3.props, m3 = (s4 = I3.contextType) && t3[s4.__c], x4 = s4 ? m3 ? m3.props.value : s4.__ : t3, i4.__c ? b3 = (h3 = u3.__c = i4.__c).__ = h3.__E : ("prototype" in I3 && I3.prototype.render ? u3.__c = h3 = new I3(g4, x4) : (u3.__c = h3 = new _(g4, x4), h3.constructor = I3, h3.render = S), m3 && m3.sub(h3), h3.props = g4, h3.state || (h3.state = {}), h3.context = x4, h3.__n = t3, v3 = h3.__d = true, h3.__h = [], h3._sb = []), null == h3.__s && (h3.__s = h3.state), null != I3.getDerivedStateFromProps && (h3.__s == h3.state && (h3.__s = a({}, h3.__s)), a(h3.__s, I3.getDerivedStateFromProps(g4, h3.__s))), y3 = h3.props, p3 = h3.state, h3.__v = u3, v3) + null == I3.getDerivedStateFromProps && null != h3.componentWillMount && h3.componentWillMount(), null != h3.componentDidMount && h3.__h.push(h3.componentDidMount); + else { + if (null == I3.getDerivedStateFromProps && g4 !== y3 && null != h3.componentWillReceiveProps && h3.componentWillReceiveProps(g4, x4), !h3.__e && null != h3.shouldComponentUpdate && false === h3.shouldComponentUpdate(g4, h3.__s, x4) || u3.__v === i4.__v) { + for (u3.__v !== i4.__v && (h3.props = g4, h3.state = h3.__s, h3.__d = false), h3.__e = false, u3.__e = i4.__e, u3.__k = i4.__k, u3.__k.forEach(function(n4) { + n4 && (n4.__ = u3); + }), A4 = 0; A4 < h3._sb.length; A4++) + h3.__h.push(h3._sb[A4]); + h3._sb = [], h3.__h.length && f3.push(h3); + break n; + } + null != h3.componentWillUpdate && h3.componentWillUpdate(g4, h3.__s, x4), null != h3.componentDidUpdate && h3.__h.push(function() { + h3.componentDidUpdate(y3, p3, k4); + }); + } + if (h3.context = x4, h3.props = g4, h3.__P = n3, P3 = l.__r, C3 = 0, "prototype" in I3 && I3.prototype.render) { + for (h3.state = h3.__s, h3.__d = false, P3 && P3(u3), s4 = h3.render(h3.props, h3.state, h3.context), $3 = 0; $3 < h3._sb.length; $3++) + h3.__h.push(h3._sb[$3]); + h3._sb = []; + } else + do { + h3.__d = false, P3 && P3(u3), s4 = h3.render(h3.props, h3.state, h3.context), h3.state = h3.__s; + } while (h3.__d && ++C3 < 25); + h3.state = h3.__s, null != h3.getChildContext && (t3 = a(a({}, t3), h3.getChildContext())), v3 || null == h3.getSnapshotBeforeUpdate || (k4 = h3.getSnapshotBeforeUpdate(y3, p3)), H3 = null != s4 && s4.type === d && null == s4.key ? s4.props.children : s4, w(n3, Array.isArray(H3) ? H3 : [H3], u3, i4, t3, r3, o3, f3, e3, c4), h3.base = u3.__e, u3.__h = null, h3.__h.length && f3.push(h3), b3 && (h3.__E = h3.__ = null), h3.__e = false; + } else + null == o3 && u3.__v === i4.__v ? (u3.__k = i4.__k, u3.__e = i4.__e) : u3.__e = M(i4.__e, u3, i4, t3, r3, o3, f3, c4); + (s4 = l.diffed) && s4(u3); + } catch (n4) { + u3.__v = null, (c4 || null != o3) && (u3.__e = e3, u3.__h = !!c4, o3[o3.indexOf(e3)] = null), l.__e(n4, u3, i4); + } +} +function L(n3, u3) { + l.__c && l.__c(u3, n3), n3.some(function(u4) { + try { + n3 = u4.__h, u4.__h = [], n3.some(function(n4) { + n4.call(u4); + }); + } catch (n4) { + l.__e(n4, u4.__v); + } + }); +} +function M(l3, u3, i4, t3, r3, o3, f3, c4) { + var s4, a3, v3, y3 = i4.props, p3 = u3.props, d3 = u3.type, _3 = 0; + if ("svg" === d3 && (r3 = true), null != o3) { + for (; _3 < o3.length; _3++) + if ((s4 = o3[_3]) && "setAttribute" in s4 == !!d3 && (d3 ? s4.localName === d3 : 3 === s4.nodeType)) { + l3 = s4, o3[_3] = null; + break; + } + } + if (null == l3) { + if (null === d3) + return document.createTextNode(p3); + l3 = r3 ? document.createElementNS("http://www.w3.org/2000/svg", d3) : document.createElement(d3, p3.is && p3), o3 = null, c4 = false; + } + if (null === d3) + y3 === p3 || c4 && l3.data === p3 || (l3.data = p3); + else { + if (o3 = o3 && n2.call(l3.childNodes), a3 = (y3 = i4.props || e).dangerouslySetInnerHTML, v3 = p3.dangerouslySetInnerHTML, !c4) { + if (null != o3) + for (y3 = {}, _3 = 0; _3 < l3.attributes.length; _3++) + y3[l3.attributes[_3].name] = l3.attributes[_3].value; + (v3 || a3) && (v3 && (a3 && v3.__html == a3.__html || v3.__html === l3.innerHTML) || (l3.innerHTML = v3 && v3.__html || "")); + } + if ($(l3, p3, y3, r3, c4), v3) + u3.__k = []; + else if (_3 = u3.props.children, w(l3, Array.isArray(_3) ? _3 : [_3], u3, i4, t3, r3 && "foreignObject" !== d3, o3, f3, o3 ? o3[0] : i4.__k && k(i4, 0), c4), null != o3) + for (_3 = o3.length; _3--; ) + null != o3[_3] && h(o3[_3]); + c4 || ("value" in p3 && void 0 !== (_3 = p3.value) && (_3 !== l3.value || "progress" === d3 && !_3 || "option" === d3 && _3 !== y3.value) && I(l3, "value", _3, y3.value, false), "checked" in p3 && void 0 !== (_3 = p3.checked) && _3 !== l3.checked && I(l3, "checked", _3, y3.checked, false)); + } + return l3; +} +function N(n3, u3, i4) { + try { + "function" == typeof n3 ? n3(u3) : n3.current = u3; + } catch (n4) { + l.__e(n4, i4); + } +} +function O(n3, u3, i4) { + var t3, r3; + if (l.unmount && l.unmount(n3), (t3 = n3.ref) && (t3.current && t3.current !== n3.__e || N(t3, null, u3)), null != (t3 = n3.__c)) { + if (t3.componentWillUnmount) + try { + t3.componentWillUnmount(); + } catch (n4) { + l.__e(n4, u3); + } + t3.base = t3.__P = null, n3.__c = void 0; + } + if (t3 = n3.__k) + for (r3 = 0; r3 < t3.length; r3++) + t3[r3] && O(t3[r3], u3, i4 || "function" != typeof n3.type); + i4 || null == n3.__e || h(n3.__e), n3.__ = n3.__e = n3.__d = void 0; +} +function S(n3, l3, u3) { + return this.constructor(n3, u3); +} +function q(u3, i4, t3) { + var r3, o3, f3; + l.__ && l.__(u3, i4), o3 = (r3 = "function" == typeof t3) ? null : t3 && t3.__k || i4.__k, f3 = [], z(i4, u3 = (!r3 && t3 || i4).__k = v(d, null, [u3]), o3 || e, e, void 0 !== i4.ownerSVGElement, !r3 && t3 ? [t3] : o3 ? null : i4.firstChild ? n2.call(i4.childNodes) : null, f3, !r3 && t3 ? t3 : o3 ? o3.__e : i4.firstChild, r3), L(f3, u3); +} +function B(n3, l3) { + q(n3, l3, B); +} +function D(l3, u3, i4) { + var t3, r3, o3, f3 = a({}, l3.props); + for (o3 in u3) + "key" == o3 ? t3 = u3[o3] : "ref" == o3 ? r3 = u3[o3] : f3[o3] = u3[o3]; + return arguments.length > 2 && (f3.children = arguments.length > 3 ? n2.call(arguments, 2) : i4), y(l3.type, f3, t3 || l3.key, r3 || l3.ref, null); +} +function E(n3, l3) { + var u3 = { __c: l3 = "__cC" + f++, __: n3, Consumer: function(n4, l4) { + return n4.children(l4); + }, Provider: function(n4) { + var u4, i4; + return this.getChildContext || (u4 = [], (i4 = {})[l3] = this, this.getChildContext = function() { + return i4; + }, this.shouldComponentUpdate = function(n5) { + this.props.value !== n5.value && u4.some(function(n6) { + n6.__e = true, g(n6); + }); + }, this.sub = function(n5) { + u4.push(n5); + var l4 = n5.componentWillUnmount; + n5.componentWillUnmount = function() { + u4.splice(u4.indexOf(n5), 1), l4 && l4.call(n5); + }; + }), n4.children; + } }; + return u3.Provider.__ = u3.Consumer.contextType = u3; +} +n2 = c2.slice, l = { __e: function(n3, l3, u3, i4) { + for (var t3, r3, o3; l3 = l3.__; ) + if ((t3 = l3.__c) && !t3.__) + try { + if ((r3 = t3.constructor) && null != r3.getDerivedStateFromError && (t3.setState(r3.getDerivedStateFromError(n3)), o3 = t3.__d), null != t3.componentDidCatch && (t3.componentDidCatch(n3, i4 || {}), o3 = t3.__d), o3) + return t3.__E = t3; + } catch (l4) { + n3 = l4; + } + throw n3; +} }, u = 0, i2 = function(n3) { + return null != n3 && void 0 === n3.constructor; +}, _.prototype.setState = function(n3, l3) { + var u3; + u3 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = a({}, this.state), "function" == typeof n3 && (n3 = n3(a({}, u3), this.props)), n3 && a(u3, n3), null != n3 && this.__v && (l3 && this._sb.push(l3), g(this)); +}, _.prototype.forceUpdate = function(n3) { + this.__v && (this.__e = true, n3 && this.__h.push(n3), g(this)); +}, _.prototype.render = d, t = [], o = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, m.__r = 0, f = 0; + +// node_modules/preact/hooks/dist/hooks.module.js +var t2; +var r2; +var u2; +var i3; +var o2 = 0; +var f2 = []; +var c3 = []; +var e2 = l.__b; +var a2 = l.__r; +var v2 = l.diffed; +var l2 = l.__c; +var m2 = l.unmount; +function d2(t3, u3) { + l.__h && l.__h(r2, t3, o2 || u3), o2 = 0; + var i4 = r2.__H || (r2.__H = { __: [], __h: [] }); + return t3 >= i4.__.length && i4.__.push({ __V: c3 }), i4.__[t3]; +} +function p2(n3) { + return o2 = 1, y2(B2, n3); +} +function y2(n3, u3, i4) { + var o3 = d2(t2++, 2); + if (o3.t = n3, !o3.__c && (o3.__ = [i4 ? i4(u3) : B2(void 0, u3), function(n4) { + var t3 = o3.__N ? o3.__N[0] : o3.__[0], r3 = o3.t(t3, n4); + t3 !== r3 && (o3.__N = [r3, o3.__[1]], o3.__c.setState({})); + }], o3.__c = r2, !r2.u)) { + r2.u = true; + var f3 = r2.shouldComponentUpdate; + r2.shouldComponentUpdate = function(n4, t3, r3) { + if (!o3.__c.__H) + return true; + var u4 = o3.__c.__H.__.filter(function(n5) { + return n5.__c; + }); + if (u4.every(function(n5) { + return !n5.__N; + })) + return !f3 || f3.call(this, n4, t3, r3); + var i5 = false; + return u4.forEach(function(n5) { + if (n5.__N) { + var t4 = n5.__[0]; + n5.__ = n5.__N, n5.__N = void 0, t4 !== n5.__[0] && (i5 = true); + } + }), !(!i5 && o3.__c.props === n4) && (!f3 || f3.call(this, n4, t3, r3)); + }; + } + return o3.__N || o3.__; +} +function h2(u3, i4) { + var o3 = d2(t2++, 3); + !l.__s && z2(o3.__H, i4) && (o3.__ = u3, o3.i = i4, r2.__H.__h.push(o3)); +} +function s3(u3, i4) { + var o3 = d2(t2++, 4); + !l.__s && z2(o3.__H, i4) && (o3.__ = u3, o3.i = i4, r2.__h.push(o3)); +} +function _2(n3) { + return o2 = 5, F(function() { + return { current: n3 }; + }, []); +} +function A2(n3, t3, r3) { + o2 = 6, s3(function() { + return "function" == typeof n3 ? (n3(t3()), function() { + return n3(null); + }) : n3 ? (n3.current = t3(), function() { + return n3.current = null; + }) : void 0; + }, null == r3 ? r3 : r3.concat(n3)); +} +function F(n3, r3) { + var u3 = d2(t2++, 7); + return z2(u3.__H, r3) ? (u3.__V = n3(), u3.i = r3, u3.__h = n3, u3.__V) : u3.__; +} +function T2(n3, t3) { + return o2 = 8, F(function() { + return n3; + }, t3); +} +function q2(n3) { + var u3 = r2.context[n3.__c], i4 = d2(t2++, 9); + return i4.c = n3, u3 ? (null == i4.__ && (i4.__ = true, u3.sub(r2)), u3.props.value) : n3.__; +} +function x2(t3, r3) { + l.useDebugValue && l.useDebugValue(r3 ? r3(t3) : t3); +} +function V() { + var n3 = d2(t2++, 11); + if (!n3.__) { + for (var u3 = r2.__v; null !== u3 && !u3.__m && null !== u3.__; ) + u3 = u3.__; + var i4 = u3.__m || (u3.__m = [0, 0]); + n3.__ = "P" + i4[0] + "-" + i4[1]++; + } + return n3.__; +} +function b2() { + for (var t3; t3 = f2.shift(); ) + if (t3.__P && t3.__H) + try { + t3.__H.__h.forEach(k2), t3.__H.__h.forEach(w2), t3.__H.__h = []; + } catch (r3) { + t3.__H.__h = [], l.__e(r3, t3.__v); + } +} +l.__b = function(n3) { + r2 = null, e2 && e2(n3); +}, l.__r = function(n3) { + a2 && a2(n3), t2 = 0; + var i4 = (r2 = n3.__c).__H; + i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n4) { + n4.__N && (n4.__ = n4.__N), n4.__V = c3, n4.__N = n4.i = void 0; + })) : (i4.__h.forEach(k2), i4.__h.forEach(w2), i4.__h = [])), u2 = r2; +}, l.diffed = function(t3) { + v2 && v2(t3); + var o3 = t3.__c; + o3 && o3.__H && (o3.__H.__h.length && (1 !== f2.push(o3) && i3 === l.requestAnimationFrame || ((i3 = l.requestAnimationFrame) || j2)(b2)), o3.__H.__.forEach(function(n3) { + n3.i && (n3.__H = n3.i), n3.__V !== c3 && (n3.__ = n3.__V), n3.i = void 0, n3.__V = c3; + })), u2 = r2 = null; +}, l.__c = function(t3, r3) { + r3.some(function(t4) { + try { + t4.__h.forEach(k2), t4.__h = t4.__h.filter(function(n3) { + return !n3.__ || w2(n3); + }); + } catch (u3) { + r3.some(function(n3) { + n3.__h && (n3.__h = []); + }), r3 = [], l.__e(u3, t4.__v); + } + }), l2 && l2(t3, r3); +}, l.unmount = function(t3) { + m2 && m2(t3); + var r3, u3 = t3.__c; + u3 && u3.__H && (u3.__H.__.forEach(function(n3) { + try { + k2(n3); + } catch (n4) { + r3 = n4; + } + }), u3.__H = void 0, r3 && l.__e(r3, u3.__v)); +}; +var g2 = "function" == typeof requestAnimationFrame; +function j2(n3) { + var t3, r3 = function() { + clearTimeout(u3), g2 && cancelAnimationFrame(t3), setTimeout(n3); + }, u3 = setTimeout(r3, 100); + g2 && (t3 = requestAnimationFrame(r3)); +} +function k2(n3) { + var t3 = r2, u3 = n3.__c; + "function" == typeof u3 && (n3.__c = void 0, u3()), r2 = t3; +} +function w2(n3) { + var t3 = r2; + n3.__c = n3.__(), r2 = t3; +} +function z2(n3, t3) { + return !n3 || n3.length !== t3.length || t3.some(function(t4, r3) { + return t4 !== n3[r3]; + }); +} +function B2(n3, t3) { + return "function" == typeof t3 ? t3(n3) : t3; +} + +// node_modules/preact/compat/dist/compat.module.js +function g3(n3, t3) { + for (var e3 in t3) + n3[e3] = t3[e3]; + return n3; +} +function C2(n3, t3) { + for (var e3 in n3) + if ("__source" !== e3 && !(e3 in t3)) + return true; + for (var r3 in t3) + if ("__source" !== r3 && n3[r3] !== t3[r3]) + return true; + return false; +} +function E2(n3, t3) { + return n3 === t3 && (0 !== n3 || 1 / n3 == 1 / t3) || n3 != n3 && t3 != t3; +} +function w3(n3) { + this.props = n3; +} +function x3(n3, e3) { + function r3(n4) { + var t3 = this.props.ref, r4 = t3 == n4.ref; + return !r4 && t3 && (t3.call ? t3(null) : t3.current = null), e3 ? !e3(this.props, n4) || !r4 : C2(this.props, n4); + } + function u3(e4) { + return this.shouldComponentUpdate = r3, v(n3, e4); + } + return u3.displayName = "Memo(" + (n3.displayName || n3.name) + ")", u3.prototype.isReactComponent = true, u3.__f = true, u3; +} +(w3.prototype = new _()).isPureReactComponent = true, w3.prototype.shouldComponentUpdate = function(n3, t3) { + return C2(this.props, n3) || C2(this.state, t3); +}; +var R = l.__b; +l.__b = function(n3) { + n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), R && R(n3); +}; +var N2 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; +function k3(n3) { + function t3(t4) { + var e3 = g3({}, t4); + return delete e3.ref, n3(e3, t4.ref || null); + } + return t3.$$typeof = N2, t3.render = t3, t3.prototype.isReactComponent = t3.__f = true, t3.displayName = "ForwardRef(" + (n3.displayName || n3.name) + ")", t3; +} +var A3 = function(n3, t3) { + return null == n3 ? null : A(A(n3).map(t3)); +}; +var O2 = { map: A3, forEach: A3, count: function(n3) { + return n3 ? A(n3).length : 0; +}, only: function(n3) { + var t3 = A(n3); + if (1 !== t3.length) + throw "Children.only"; + return t3[0]; +}, toArray: A }; +var T3 = l.__e; +l.__e = function(n3, t3, e3, r3) { + if (n3.then) { + for (var u3, o3 = t3; o3 = o3.__; ) + if ((u3 = o3.__c) && u3.__c) + return null == t3.__e && (t3.__e = e3.__e, t3.__k = e3.__k), u3.__c(n3, t3); + } + T3(n3, t3, e3, r3); +}; +var I2 = l.unmount; +function L2(n3, t3, e3) { + return n3 && (n3.__c && n3.__c.__H && (n3.__c.__H.__.forEach(function(n4) { + "function" == typeof n4.__c && n4.__c(); + }), n3.__c.__H = null), null != (n3 = g3({}, n3)).__c && (n3.__c.__P === e3 && (n3.__c.__P = t3), n3.__c = null), n3.__k = n3.__k && n3.__k.map(function(n4) { + return L2(n4, t3, e3); + })), n3; +} +function U(n3, t3, e3) { + return n3 && (n3.__v = null, n3.__k = n3.__k && n3.__k.map(function(n4) { + return U(n4, t3, e3); + }), n3.__c && n3.__c.__P === t3 && (n3.__e && e3.insertBefore(n3.__e, n3.__d), n3.__c.__e = true, n3.__c.__P = e3)), n3; +} +function D2() { + this.__u = 0, this.t = null, this.__b = null; +} +function F2(n3) { + var t3 = n3.__.__c; + return t3 && t3.__a && t3.__a(n3); +} +function M2(n3) { + var e3, r3, u3; + function o3(o4) { + if (e3 || (e3 = n3()).then(function(n4) { + r3 = n4.default || n4; + }, function(n4) { + u3 = n4; + }), u3) + throw u3; + if (!r3) + throw e3; + return v(r3, o4); + } + return o3.displayName = "Lazy", o3.__f = true, o3; +} +function V2() { + this.u = null, this.o = null; +} +l.unmount = function(n3) { + var t3 = n3.__c; + t3 && t3.__R && t3.__R(), t3 && true === n3.__h && (n3.type = null), I2 && I2(n3); +}, (D2.prototype = new _()).__c = function(n3, t3) { + var e3 = t3.__c, r3 = this; + null == r3.t && (r3.t = []), r3.t.push(e3); + var u3 = F2(r3.__v), o3 = false, i4 = function() { + o3 || (o3 = true, e3.__R = null, u3 ? u3(l3) : l3()); + }; + e3.__R = i4; + var l3 = function() { + if (!--r3.__u) { + if (r3.state.__a) { + var n4 = r3.state.__a; + r3.__v.__k[0] = U(n4, n4.__c.__P, n4.__c.__O); + } + var t4; + for (r3.setState({ __a: r3.__b = null }); t4 = r3.t.pop(); ) + t4.forceUpdate(); + } + }, c4 = true === t3.__h; + r3.__u++ || c4 || r3.setState({ __a: r3.__b = r3.__v.__k[0] }), n3.then(i4, i4); +}, D2.prototype.componentWillUnmount = function() { + this.t = []; +}, D2.prototype.render = function(n3, e3) { + if (this.__b) { + if (this.__v.__k) { + var r3 = document.createElement("div"), o3 = this.__v.__k[0].__c; + this.__v.__k[0] = L2(this.__b, r3, o3.__O = o3.__P); + } + this.__b = null; + } + var i4 = e3.__a && v(d, null, n3.fallback); + return i4 && (i4.__h = null), [v(d, null, e3.__a ? null : n3.children), i4]; +}; +var W = function(n3, t3, e3) { + if (++e3[1] === e3[0] && n3.o.delete(t3), n3.props.revealOrder && ("t" !== n3.props.revealOrder[0] || !n3.o.size)) + for (e3 = n3.u; e3; ) { + for (; e3.length > 3; ) + e3.pop()(); + if (e3[1] < e3[0]) + break; + n3.u = e3 = e3[2]; + } +}; +function P2(n3) { + return this.getChildContext = function() { + return n3.context; + }, n3.children; +} +function $2(n3) { + var e3 = this, r3 = n3.i; + e3.componentWillUnmount = function() { + q(null, e3.l), e3.l = null, e3.i = null; + }, e3.i && e3.i !== r3 && e3.componentWillUnmount(), n3.__v ? (e3.l || (e3.i = r3, e3.l = { nodeType: 1, parentNode: r3, childNodes: [], appendChild: function(n4) { + this.childNodes.push(n4), e3.i.appendChild(n4); + }, insertBefore: function(n4, t3) { + this.childNodes.push(n4), e3.i.appendChild(n4); + }, removeChild: function(n4) { + this.childNodes.splice(this.childNodes.indexOf(n4) >>> 1, 1), e3.i.removeChild(n4); + } }), q(v(P2, { context: e3.context }, n3.__v), e3.l)) : e3.l && e3.componentWillUnmount(); +} +function j3(n3, e3) { + var r3 = v($2, { __v: n3, i: e3 }); + return r3.containerInfo = e3, r3; +} +(V2.prototype = new _()).__a = function(n3) { + var t3 = this, e3 = F2(t3.__v), r3 = t3.o.get(n3); + return r3[0]++, function(u3) { + var o3 = function() { + t3.props.revealOrder ? (r3.push(u3), W(t3, n3, r3)) : u3(); + }; + e3 ? e3(o3) : o3(); + }; +}, V2.prototype.render = function(n3) { + this.u = null, this.o = /* @__PURE__ */ new Map(); + var t3 = A(n3.children); + n3.revealOrder && "b" === n3.revealOrder[0] && t3.reverse(); + for (var e3 = t3.length; e3--; ) + this.o.set(t3[e3], this.u = [1, 0, this.u]); + return n3.children; +}, V2.prototype.componentDidUpdate = V2.prototype.componentDidMount = function() { + var n3 = this; + this.o.forEach(function(t3, e3) { + W(n3, e3, t3); + }); +}; +var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; +var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; +var H2 = "undefined" != typeof document; +var Z = function(n3) { + return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n3); +}; +function Y(n3, t3, e3) { + return null == t3.__k && (t3.textContent = ""), q(n3, t3), "function" == typeof e3 && e3(), n3 ? n3.__c : null; +} +function q3(n3, t3, e3) { + return B(n3, t3), "function" == typeof e3 && e3(), n3 ? n3.__c : null; +} +_.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t3) { + Object.defineProperty(_.prototype, t3, { configurable: true, get: function() { + return this["UNSAFE_" + t3]; + }, set: function(n3) { + Object.defineProperty(this, t3, { configurable: true, writable: true, value: n3 }); + } }); +}); +var G = l.event; +function J() { +} +function K() { + return this.cancelBubble; +} +function Q() { + return this.defaultPrevented; +} +l.event = function(n3) { + return G && (n3 = G(n3)), n3.persist = J, n3.isPropagationStopped = K, n3.isDefaultPrevented = Q, n3.nativeEvent = n3; +}; +var X; +var nn = { configurable: true, get: function() { + return this.class; +} }; +var tn = l.vnode; +l.vnode = function(n3) { + var t3 = n3.type, e3 = n3.props, u3 = e3; + if ("string" == typeof t3) { + var o3 = -1 === t3.indexOf("-"); + for (var i4 in u3 = {}, e3) { + var l3 = e3[i4]; + H2 && "children" === i4 && "noscript" === t3 || "value" === i4 && "defaultValue" in e3 && null == l3 || ("defaultValue" === i4 && "value" in e3 && null == e3.value ? i4 = "value" : "download" === i4 && true === l3 ? l3 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t3) && !Z(e3.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l3 && (l3 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u3[i4] && (i4 = "oninputCapture")), u3[i4] = l3); + } + "select" == t3 && u3.multiple && Array.isArray(u3.value) && (u3.value = A(e3.children).forEach(function(n4) { + n4.props.selected = -1 != u3.value.indexOf(n4.props.value); + })), "select" == t3 && null != u3.defaultValue && (u3.value = A(e3.children).forEach(function(n4) { + n4.props.selected = u3.multiple ? -1 != u3.defaultValue.indexOf(n4.props.value) : u3.defaultValue == n4.props.value; + })), n3.props = u3, e3.class != e3.className && (nn.enumerable = "className" in e3, null != e3.className && (u3.class = e3.className), Object.defineProperty(u3, "className", nn)); + } + n3.$$typeof = z3, tn && tn(n3); +}; +var en = l.__r; +l.__r = function(n3) { + en && en(n3), X = n3.__c; +}; +var rn = l.diffed; +l.diffed = function(n3) { + rn && rn(n3); + var t3 = n3.props, e3 = n3.__e; + null != e3 && "textarea" === n3.type && "value" in t3 && t3.value !== e3.value && (e3.value = null == t3.value ? "" : t3.value), X = null; +}; +var un = { ReactCurrentDispatcher: { current: { readContext: function(n3) { + return X.__n[n3.__c].props.value; +} } } }; +function ln(n3) { + return v.bind(null, n3); +} +function cn(n3) { + return !!n3 && n3.$$typeof === z3; +} +function fn(n3) { + return cn(n3) ? D.apply(null, arguments) : n3; +} +function an(n3) { + return !!n3.__k && (q(null, n3), true); +} +function sn(n3) { + return n3 && (n3.base || 1 === n3.nodeType && n3) || null; +} +var hn = function(n3, t3) { + return n3(t3); +}; +var vn = function(n3, t3) { + return n3(t3); +}; +var dn = d; +function pn(n3) { + n3(); +} +function mn(n3) { + return n3; +} +function yn() { + return [false, pn]; +} +var _n = s3; +function bn(n3, t3) { + var e3 = t3(), r3 = p2({ h: { __: e3, v: t3 } }), u3 = r3[0].h, o3 = r3[1]; + return s3(function() { + u3.__ = e3, u3.v = t3, E2(u3.__, t3()) || o3({ h: u3 }); + }, [n3, e3, t3]), h2(function() { + return E2(u3.__, u3.v()) || o3({ h: u3 }), n3(function() { + E2(u3.__, u3.v()) || o3({ h: u3 }); + }); + }, [n3]), e3; +} +var Sn = { useState: p2, useId: V, useReducer: y2, useEffect: h2, useLayoutEffect: s3, useInsertionEffect: _n, useTransition: yn, useDeferredValue: mn, useSyncExternalStore: bn, startTransition: pn, useRef: _2, useImperativeHandle: A2, useMemo: F, useCallback: T2, useContext: q2, useDebugValue: x2, version: "17.0.2", Children: O2, render: Y, hydrate: q3, unmountComponentAtNode: an, createPortal: j3, createElement: v, createContext: E, createFactory: ln, cloneElement: fn, createRef: p, Fragment: d, isValidElement: cn, findDOMNode: sn, Component: _, PureComponent: w3, memo: x3, forwardRef: k3, flushSync: vn, unstable_batchedUpdates: hn, StrictMode: dn, Suspense: D2, SuspenseList: V2, lazy: M2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: un }; + +// src/components/search/index.tsx +var import_fuzzysort2 = __toESM(require_fuzzysort()); + +// node_modules/react-icons/lib/esm/iconContext.js +var DefaultContext = { + color: void 0, + size: void 0, + className: void 0, + style: void 0, + attr: void 0 +}; +var IconContext = Sn.createContext && Sn.createContext(DefaultContext); + +// node_modules/react-icons/lib/esm/iconBase.js +var __assign = function() { + __assign = Object.assign || function(t3) { + for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { + s4 = arguments[i4]; + for (var p3 in s4) + if (Object.prototype.hasOwnProperty.call(s4, p3)) + t3[p3] = s4[p3]; + } + return t3; + }; + return __assign.apply(this, arguments); +}; +var __rest = function(s4, e3) { + var t3 = {}; + for (var p3 in s4) + if (Object.prototype.hasOwnProperty.call(s4, p3) && e3.indexOf(p3) < 0) + t3[p3] = s4[p3]; + if (s4 != null && typeof Object.getOwnPropertySymbols === "function") + for (var i4 = 0, p3 = Object.getOwnPropertySymbols(s4); i4 < p3.length; i4++) { + if (e3.indexOf(p3[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p3[i4])) + t3[p3[i4]] = s4[p3[i4]]; + } + return t3; +}; +function Tree2Element(tree) { + return tree && tree.map(function(node, i4) { + return Sn.createElement(node.tag, __assign({ + key: i4 + }, node.attr), Tree2Element(node.child)); + }); +} +function GenIcon(data) { + return function(props2) { + return Sn.createElement(IconBase, __assign({ + attr: __assign({}, data.attr) + }, props2), Tree2Element(data.child)); + }; +} +function IconBase(props2) { + var elem = function(conf) { + var attr = props2.attr, size = props2.size, title = props2.title, svgProps = __rest(props2, ["attr", "size", "title"]); + var computedSize = size || conf.size || "1em"; + var className; + if (conf.className) + className = conf.className; + if (props2.className) + className = (className ? className + " " : "") + props2.className; + return Sn.createElement("svg", __assign({ + stroke: "currentColor", + fill: "currentColor", + strokeWidth: "0" + }, conf.attr, attr, svgProps, { + className, + style: __assign(__assign({ + color: props2.color || conf.color + }, conf.style), props2.style), + height: computedSize, + width: computedSize, + xmlns: "http://www.w3.org/2000/svg" + }), title && Sn.createElement("title", null, title), props2.children); + }; + return IconContext !== void 0 ? Sn.createElement(IconContext.Consumer, null, function(conf) { + return elem(conf); + }) : elem(DefaultContext); +} + +// node_modules/react-icons/md/index.esm.js +function MdKeyboardArrowDown(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "d": "M0 0h24v24H0V0z" } }, { "tag": "path", "attr": { "d": "M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z" } }] })(props2); +} +function MdKeyboardArrowRight(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "d": "M0 0h24v24H0V0z" } }, { "tag": "path", "attr": { "d": "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" } }] })(props2); +} +function MdClose(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "fill": "none", "d": "M0 0h24v24H0z" } }, { "tag": "path", "attr": { "d": "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" } }] })(props2); +} + +// node_modules/react-icons/cg/index.esm.js +function CgChevronDoubleDown(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "none" }, "child": [{ "tag": "path", "attr": { "d": "M7.75735 5.63605L6.34314 7.05026L12 12.7071L17.6569 7.05029L16.2427 5.63608L12 9.87872L7.75735 5.63605Z", "fill": "currentColor" } }, { "tag": "path", "attr": { "d": "M6.34314 12.7071L7.75735 11.2929L12 15.5356L16.2427 11.2929L17.6569 12.7071L12 18.364L6.34314 12.7071Z", "fill": "currentColor" } }] })(props2); +} +function CgChevronDoubleUp(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 24 24", "fill": "none" }, "child": [{ "tag": "path", "attr": { "d": "M17.6569 11.2929L16.2427 12.7071L12 8.46444L7.75735 12.7071L6.34314 11.2929L12 5.63605L17.6569 11.2929Z", "fill": "currentColor" } }, { "tag": "path", "attr": { "d": "M17.6569 16.9497L16.2427 18.3639L12 14.1213L7.75735 18.364L6.34314 16.9498L12 11.2929L17.6569 16.9497Z", "fill": "currentColor" } }] })(props2); +} + +// node_modules/dexie/dist/modern/dexie.mjs +var _global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global; +var keys = Object.keys; +var isArray = Array.isArray; +if (typeof Promise !== "undefined" && !_global.Promise) { + _global.Promise = Promise; +} +function extend(obj, extension) { + if (typeof extension !== "object") + return obj; + keys(extension).forEach(function(key) { + obj[key] = extension[key]; + }); + return obj; +} +var getProto = Object.getPrototypeOf; +var _hasOwn = {}.hasOwnProperty; +function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); +} +function props(proto, extension) { + if (typeof extension === "function") + extension = extension(getProto(proto)); + (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach((key) => { + setProp(proto, key, extension[key]); + }); +} +var defineProperty = Object.defineProperty; +function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === "function" ? { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : { value: functionOrGetSet, configurable: true, writable: true }, options)); +} +function derive(Child) { + return { + from: function(Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; +} +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +function getPropertyDescriptor(obj, prop) { + const pd = getOwnPropertyDescriptor(obj, prop); + let proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); +} +var _slice = [].slice; +function slice(args, start, end) { + return _slice.call(args, start, end); +} +function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); +} +function assert(b3) { + if (!b3) + throw new Error("Assertion Failed"); +} +function asap$1(fn2) { + if (_global.setImmediate) + setImmediate(fn2); + else + setTimeout(fn2, 0); +} +function arrayToObject(array, extractor) { + return array.reduce((result, item, i4) => { + var nameAndValue = extractor(item, i4); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); +} +function tryCatch(fn2, onerror, args) { + try { + fn2.apply(null, args); + } catch (ex) { + onerror && onerror(ex); + } +} +function getByKeyPath(obj, keyPath) { + if (hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== "string") { + var rv = []; + for (var i4 = 0, l3 = keyPath.length; i4 < l3; ++i4) { + var val = getByKeyPath(obj, keyPath[i4]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf("."); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj === void 0 ? void 0 : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return void 0; +} +function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === void 0) + return; + if ("isFrozen" in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== "string" && "length" in keyPath) { + assert(typeof value !== "string" && "length" in value); + for (var i4 = 0, l3 = keyPath.length; i4 < l3; ++i4) { + setByKeyPath(obj, keyPath[i4], value[i4]); + } + } else { + var period = keyPath.indexOf("."); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === void 0) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj || !hasOwn(obj, currentKeyPath)) + innerObj = obj[currentKeyPath] = {}; + setByKeyPath(innerObj, remainingKeyPath, value); + } + } else { + if (value === void 0) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } else + obj[keyPath] = value; + } + } +} +function delByKeyPath(obj, keyPath) { + if (typeof keyPath === "string") + setByKeyPath(obj, keyPath, void 0); + else if ("length" in keyPath) + [].map.call(keyPath, function(kp) { + setByKeyPath(obj, kp, void 0); + }); +} +function shallowClone(obj) { + var rv = {}; + for (var m3 in obj) { + if (hasOwn(obj, m3)) + rv[m3] = obj[m3]; + } + return rv; +} +var concat = [].concat; +function flatten(a3) { + return concat.apply([], a3); +} +var intrinsicTypeNames = "Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey".split(",").concat(flatten([8, 16, 32, 64].map((num) => ["Int", "Uint", "Float"].map((t3) => t3 + num + "Array")))).filter((t3) => _global[t3]); +var intrinsicTypes = intrinsicTypeNames.map((t3) => _global[t3]); +arrayToObject(intrinsicTypeNames, (x4) => [x4, true]); +var circularRefs = null; +function deepClone(any) { + circularRefs = typeof WeakMap !== "undefined" && /* @__PURE__ */ new WeakMap(); + const rv = innerDeepClone(any); + circularRefs = null; + return rv; +} +function innerDeepClone(any) { + if (!any || typeof any !== "object") + return any; + let rv = circularRefs && circularRefs.get(any); + if (rv) + return rv; + if (isArray(any)) { + rv = []; + circularRefs && circularRefs.set(any, rv); + for (var i4 = 0, l3 = any.length; i4 < l3; ++i4) { + rv.push(innerDeepClone(any[i4])); + } + } else if (intrinsicTypes.indexOf(any.constructor) >= 0) { + rv = any; + } else { + const proto = getProto(any); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs && circularRefs.set(any, rv); + for (var prop in any) { + if (hasOwn(any, prop)) { + rv[prop] = innerDeepClone(any[prop]); + } + } + } + return rv; +} +var { toString } = {}; +function toStringTag(o3) { + return toString.call(o3).slice(8, -1); +} +var iteratorSymbol = typeof Symbol !== "undefined" ? Symbol.iterator : "@@iterator"; +var getIteratorOf = typeof iteratorSymbol === "symbol" ? function(x4) { + var i4; + return x4 != null && (i4 = x4[iteratorSymbol]) && i4.apply(x4); +} : function() { + return null; +}; +var NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i4, a3, x4, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === "string") + return [arrayLike]; + if (it = getIteratorOf(arrayLike)) { + a3 = []; + while (x4 = it.next(), !x4.done) + a3.push(x4.value); + return a3; + } + if (arrayLike == null) + return [arrayLike]; + i4 = arrayLike.length; + if (typeof i4 === "number") { + a3 = new Array(i4); + while (i4--) + a3[i4] = arrayLike[i4]; + return a3; + } + return [arrayLike]; + } + i4 = arguments.length; + a3 = new Array(i4); + while (i4--) + a3[i4] = arguments[i4]; + return a3; +} +var isAsyncFunction = typeof Symbol !== "undefined" ? (fn2) => fn2[Symbol.toStringTag] === "AsyncFunction" : () => false; +var debug = typeof location !== "undefined" && /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; + libraryFilter = filter; +} +var libraryFilter = () => true; +var NEEDS_THROW_FOR_STACK = !new Error("").stack; +function getErrorWithStack() { + if (NEEDS_THROW_FOR_STACK) + try { + getErrorWithStack.arguments; + throw new Error(); + } catch (e3) { + return e3; + } + return new Error(); +} +function prettyStack(exception, numIgnoredFrames) { + var stack = exception.stack; + if (!stack) + return ""; + numIgnoredFrames = numIgnoredFrames || 0; + if (stack.indexOf(exception.name) === 0) + numIgnoredFrames += (exception.name + exception.message).split("\n").length; + return stack.split("\n").slice(numIgnoredFrames).filter(libraryFilter).map((frame) => "\n" + frame).join(""); +} +var dexieErrorNames = [ + "Modify", + "Bulk", + "OpenFailed", + "VersionChange", + "Schema", + "Upgrade", + "InvalidTable", + "MissingAPI", + "NoSuchDatabase", + "InvalidArgument", + "SubTransaction", + "Unsupported", + "Internal", + "DatabaseClosed", + "PrematureCommit", + "ForeignAwait" +]; +var idbDomErrorNames = [ + "Unknown", + "Constraint", + "Data", + "TransactionInactive", + "ReadOnly", + "Version", + "NotFound", + "InvalidState", + "InvalidAccess", + "Abort", + "Timeout", + "QuotaExceeded", + "Syntax", + "DataClone" +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" +}; +function DexieError(name, msg) { + this._e = getErrorWithStack(); + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + stack: { + get: function() { + return this._stack || (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2)); + } + }, + toString: function() { + return this.name + ": " + this.message; + } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures).map((key) => failures[key].toString()).filter((v3, i4, s4) => s4.indexOf(v3) === i4).join("\n"); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this._e = getErrorWithStack(); + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this._e = getErrorWithStack(); + this.name = "BulkError"; + this.failures = Object.keys(failures).map((pos) => failures[pos]); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce((obj, name) => (obj[name] = name + "Error", obj), {}); +var BaseException = DexieError; +var exceptions = errorList.reduce((obj, name) => { + var fullName = name + "Error"; + function DexieError2(msgOrInner, inner) { + this._e = getErrorWithStack(); + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } else if (typeof msgOrInner === "string") { + this.message = `${msgOrInner}${!inner ? "" : "\n " + inner}`; + this.inner = inner || null; + } else if (typeof msgOrInner === "object") { + this.message = `${msgOrInner.name} ${msgOrInner.message}`; + this.inner = msgOrInner; + } + } + derive(DexieError2).from(BaseException); + obj[name] = DexieError2; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce((obj, name) => { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function() { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce((obj, name) => { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; +function nop() { +} +function mirror(val) { + return val; +} +function pureFunctionChain(f1, f22) { + if (f1 == null || f1 === mirror) + return f22; + return function(val) { + return f22(f1(val)); + }; +} +function callBoth(on1, on2) { + return function() { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f22) { + if (f1 === nop) + return f22; + return function() { + var res = f1.apply(this, arguments); + if (res !== void 0) + arguments[0] = res; + var onsuccess = this.onsuccess, onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f22.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== void 0 ? res2 : res; + }; +} +function hookDeletingChain(f1, f22) { + if (f1 === nop) + return f22; + return function() { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, onerror = this.onerror; + this.onsuccess = this.onerror = null; + f22.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f22) { + if (f1 === nop) + return f22; + return function(modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f22.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === void 0 ? res2 === void 0 ? void 0 : res2 : extend(res, res2); + }; +} +function reverseStoppableEventChain(f1, f22) { + if (f1 === nop) + return f22; + return function() { + if (f22.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f22) { + if (f1 === nop) + return f22; + return function() { + var res = f1.apply(this, arguments); + if (res && typeof res.then === "function") { + var thiz = this, i4 = arguments.length, args = new Array(i4); + while (i4--) + args[i4] = arguments[i4]; + return res.then(function() { + return f22.apply(thiz, args); + }); + } + return f22.apply(this, arguments); + }; +} +var INTERNAL = {}; +var LONG_STACKS_CLIP_LIMIT = 100; +var MAX_LONG_STACKS = 20; +var ZONE_ECHO_LIMIT = 100; +var [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === "undefined" ? [] : (() => { + let globalP = Promise.resolve(); + if (typeof crypto === "undefined" || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + const nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; +})(); +var nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +var patchGlobalPromise = !!resolvedGlobalPromise; +var stack_being_generated = false; +var schedulePhysicalTick = resolvedGlobalPromise ? () => { + resolvedGlobalPromise.then(physicalTick); +} : _global.setImmediate ? setImmediate.bind(null, physicalTick) : _global.MutationObserver ? () => { + var hiddenDiv = document.createElement("div"); + new MutationObserver(() => { + physicalTick(); + hiddenDiv = null; + }).observe(hiddenDiv, { attributes: true }); + hiddenDiv.setAttribute("i", "1"); +} : () => { + setTimeout(physicalTick, 0); +}; +var asap = function(callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true; +var needsNewPhysicalTick = true; +var unhandledErrors = []; +var rejectingErrors = []; +var currentFulfiller = null; +var rejectionMapper = mirror; +var globalPSD = { + id: "global", + global: true, + ref: 0, + unhandleds: [], + onunhandled: globalError, + pgp: false, + env: {}, + finalize: function() { + this.unhandleds.forEach((uh) => { + try { + globalError(uh[0], uh[1]); + } catch (e3) { + } + }); + } +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn2) { + if (typeof this !== "object") + throw new TypeError("Promises must be constructed via new"); + this._listeners = []; + this.onuncatched = nop; + this._lib = false; + var psd = this._PSD = PSD; + if (debug) { + this._stackHolder = getErrorWithStack(); + this._prev = null; + this._numPrev = 0; + } + if (typeof fn2 !== "function") { + if (fn2 !== INTERNAL) + throw new TypeError("Not a function"); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn2); +} +var thenProp = { + get: function() { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + const cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise((resolve, reject) => { + propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + debug && linkToPreviousPromise(rv, this); + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function(value) { + setProp(this, "then", value && value.prototype === INTERNAL ? thenProp : { + get: function() { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function(onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function(onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type2 = arguments[0], handler = arguments[1]; + return typeof type2 === "function" ? this.then(null, (err) => err instanceof type2 ? handler(err) : PromiseReject(err)) : this.then(null, (err) => err && err.name === type2 ? handler(err) : PromiseReject(err)); + }, + finally: function(onFinally) { + return this.then((value) => { + onFinally(); + return value; + }, (err) => { + onFinally(); + return PromiseReject(err); + }); + }, + stack: { + get: function() { + if (this._stack) + return this._stack; + try { + stack_being_generated = true; + var stacks = getStack(this, [], MAX_LONG_STACKS); + var stack = stacks.join("\nFrom previous: "); + if (this._state !== null) + this._stack = stack; + return stack; + } finally { + stack_being_generated = false; + } + } + }, + timeout: function(ms, msg) { + return ms < Infinity ? new DexiePromise((resolve, reject) => { + var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms); + this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== "undefined" && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, "Dexie.Promise"); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === "function" ? onFulfilled : null; + this.onRejected = typeof onRejected === "function" ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function() { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function(resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach((a3, i4) => DexiePromise.resolve(a3).then((x4) => { + values[i4] = x4; + if (!--remaining) + resolve(values); + }, reject)); + }); + }, + resolve: (value) => { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === "function") + return new DexiePromise((resolve, reject) => { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + linkToPreviousPromise(rv, currentFulfiller); + return rv; + }, + reject: PromiseReject, + race: function() { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + values.map((value) => DexiePromise.resolve(value).then(resolve, reject)); + }); + }, + PSD: { + get: () => PSD, + set: (value) => PSD = value + }, + totalEchoes: { get: () => totalEchoes }, + newPSD: newScope, + usePSD, + scheduler: { + get: () => asap, + set: (value) => { + asap = value; + } + }, + rejectionMapper: { + get: () => rejectionMapper, + set: (value) => { + rejectionMapper = value; + } + }, + follow: (fn2, zoneProps) => { + return new DexiePromise((resolve, reject) => { + return newScope((resolve2, reject2) => { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject2; + psd.finalize = callBoth(function() { + run_at_end_of_this_or_next_physical_tick(() => { + this.unhandleds.length === 0 ? resolve2() : reject2(this.unhandleds[0]); + }); + }, psd.finalize); + fn2(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function() { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve) => { + if (possiblePromises.length === 0) + resolve([]); + let remaining = possiblePromises.length; + const results = new Array(remaining); + possiblePromises.forEach((p3, i4) => DexiePromise.resolve(p3).then((value) => results[i4] = { status: "fulfilled", value }, (reason) => results[i4] = { status: "rejected", reason }).then(() => --remaining || resolve(results))); + }); + }); + if (NativePromise.any && typeof AggregateError !== "undefined") + setProp(DexiePromise, "any", function() { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + let remaining = possiblePromises.length; + const failures = new Array(remaining); + possiblePromises.forEach((p3, i4) => DexiePromise.resolve(p3).then((value) => resolve(value), (failure) => { + failures[i4] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + })); + }); + }); +} +function executePromiseTask(promise, fn2) { + try { + fn2((value) => { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError("A promise cannot be resolved with itself."); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === "function") { + executePromiseTask(promise, (resolve, reject) => { + value instanceof DexiePromise ? value._then(resolve, reject) : value.then(resolve, reject); + }); + } else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + debug && reason !== null && typeof reason === "object" && !reason._promise && tryCatch(() => { + var origProp = getPropertyDescriptor(reason, "stack"); + reason._promise = promise; + setProp(reason, "stack", { + get: () => stack_being_generated ? origProp && (origProp.get ? origProp.get.apply(reason) : origProp.value) : promise.stack + }); + }); + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i4 = 0, len = listeners.length; i4 < len; ++i4) { + propagateToListener(promise, listeners[i4]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + currentFulfiller = promise; + var ret, value = promise._value; + if (promise._state) { + ret = cb(value); + } else { + if (rejectingErrors.length) + rejectingErrors = []; + ret = cb(value); + if (rejectingErrors.indexOf(value) === -1) + markErrorAsHandled(promise); + } + listener.resolve(ret); + } catch (e3) { + listener.reject(e3); + } finally { + currentFulfiller = null; + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function getStack(promise, stacks, limit) { + if (stacks.length === limit) + return stacks; + var stack = ""; + if (promise._state === false) { + var failure = promise._value, errorName, message; + if (failure != null) { + errorName = failure.name || "Error"; + message = failure.message || failure; + stack = prettyStack(failure, 0); + } else { + errorName = failure; + message = ""; + } + stacks.push(errorName + (message ? ": " + message : "") + stack); + } + if (debug) { + stack = prettyStack(promise._stackHolder, 2); + if (stack && stacks.indexOf(stack) === -1) + stacks.push(stack); + if (promise._prev) + getStack(promise._prev, stacks, limit); + } + return stacks; +} +function linkToPreviousPromise(promise, prev) { + var numPrev = prev ? prev._numPrev + 1 : 0; + if (numPrev < LONG_STACKS_CLIP_LIMIT) { + promise._prev = prev; + promise._numPrev = numPrev; + } +} +function physicalTick() { + beginMicroTickScope() && endMicroTickScope(); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i4, l3; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l3 = callbacks.length; + for (i4 = 0; i4 < l3; ++i4) { + var item = callbacks[i4]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach((p3) => { + p3._PSD.onunhandled.call(null, p3._value, p3); + }); + var finalizers = tickFinalizers.slice(0); + var i4 = finalizers.length; + while (i4) + finalizers[--i4](); +} +function run_at_end_of_this_or_next_physical_tick(fn2) { + function finalizer() { + fn2(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some((p3) => p3._value === promise._value)) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i4 = unhandledErrors.length; + while (i4) + if (unhandledErrors[--i4]._value === promise._value) { + unhandledErrors.splice(i4, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn2, errorCatcher) { + var psd = PSD; + return function() { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn2.apply(this, arguments); + } catch (e3) { + errorCatcher && errorCatcher(e3); + } finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +var task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn2, props2, a1, a22) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + var globalEnv = globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + nthen: getPatchedPromiseThen(globalEnv.nthen, psd), + gthen: getPatchedPromiseThen(globalEnv.gthen, psd) + } : {}; + if (props2) + extend(psd, props2); + ++parent.ref; + psd.finalize = function() { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn2, a1, a22); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +if (("" + nativePromiseThen).indexOf("[native code]") === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then((x4) => { + decrementExpectedAwaits(); + return x4; + }, (e3) => { + decrementExpectedAwaits(); + return rejection(e3); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + nativePromiseProto.then = targetEnv.nthen; + GlobalPromise.prototype.then = targetEnv.gthen; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, "Promise", targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + nthen: nativePromiseProto.then, + gthen: GlobalPromise.prototype.then + } : {}; +} +function usePSD(psd, fn2, a1, a22, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn2(a1, a22, a3); + } finally { + switchToZone(outerScope, false); + } +} +function enqueueNativeMicroTask(job) { + nativePromiseThen.call(resolvedNativePromise, job); +} +function nativeAwaitCompatibleWrap(fn2, zone, possibleAwait, cleanup) { + return typeof fn2 !== "function" ? fn2 : function() { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn2.apply(this, arguments); + } finally { + switchToZone(outerZone, false); + if (cleanup) + enqueueNativeMicroTask(decrementExpectedAwaits); + } + }; +} +function getPatchedPromiseThen(origThen, zone) { + return function(onResolved, onRejected) { + return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone), nativeAwaitCompatibleWrap(onRejected, zone)); + }; +} +var UNHANDLEDREJECTION = "unhandledrejection"; +function globalError(err, promise) { + var rv; + try { + rv = promise.onuncatched(err); + } catch (e3) { + } + if (rv !== false) + try { + var event, eventData = { promise, reason: err }; + if (_global.document && document.createEvent) { + event = document.createEvent("Event"); + event.initEvent(UNHANDLEDREJECTION, true, true); + extend(event, eventData); + } else if (_global.CustomEvent) { + event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData }); + extend(event, eventData); + } + if (event && _global.dispatchEvent) { + dispatchEvent(event); + if (!_global.PromiseRejectionEvent && _global.onunhandledrejection) + try { + _global.onunhandledrejection(event); + } catch (_3) { + } + } + if (debug && event && !event.defaultPrevented) { + console.warn(`Unhandled rejection: ${err.stack || err}`); + } + } catch (e3) { + } +} +var rejection = DexiePromise.reject; +function tempTransaction(db, mode, storeNames, fn2) { + if (!db.idbdb || !db._state.openComplete && (!PSD.letThrough && !db._vip)) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._options.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn2)); + } else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn("Dexie: Need to reopen db"); + db._close(); + return db.open().then(() => tempTransaction(db, mode, storeNames, fn2)); + } + return rejection(ex); + } + return trans._promise(mode, (resolve, reject) => { + return newScope(() => { + PSD.trans = trans; + return fn2(resolve, reject, trans); + }); + }).then((result) => { + return trans._completion.then(() => result); + }); + } +} +var DEXIE_VERSION = "3.2.3"; +var maxString = String.fromCharCode(65535); +var minKey = -Infinity; +var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +var STRING_EXPECTED = "String expected."; +var connections = []; +var isIEOrEdge = typeof navigator !== "undefined" && /(MSIE|Trident|Edge)/.test(navigator.userAgent); +var hasIEDeleteObjectStoreBug = isIEOrEdge; +var hangsOnDeleteLargeKeyRange = isIEOrEdge; +var dexieStackFrameFilter = (frame) => !/(dexie\.js|dexie\.min\.js)/.test(frame); +var DBNAMES_DB = "__dbnames"; +var READONLY = "readonly"; +var READWRITE = "readwrite"; +function combine(filter1, filter2) { + return filter1 ? filter2 ? function() { + return filter1.apply(this, arguments) && filter2.apply(this, arguments); + } : filter1 : filter2; +} +var AnyRange = { + type: 3, + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) ? (obj) => { + if (obj[keyPath] === void 0 && keyPath in obj) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } : (obj) => obj; +} +var Table = class { + _trans(mode, fn2, writeLocked) { + const trans = this._tx || PSD.trans; + const tableName = this.name; + function checkTableInTransaction(resolve, reject, trans2) { + if (!trans2.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn2(trans2.idbtrans, trans2); + } + const wasRootExec = beginMicroTickScope(); + try { + return trans && trans.db === this.db ? trans === PSD.trans ? trans._promise(mode, checkTableInTransaction, writeLocked) : newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans, transless: PSD.transless || PSD }) : tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + } finally { + if (wasRootExec) + endMicroTickScope(); + } + } + get(keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + return this._trans("readonly", (trans) => { + return this.core.get({ trans, key: keyOrCrit }).then((res) => this.hook.reading.fire(res)); + }).then(cb); + } + where(indexOrCrit) { + if (typeof indexOrCrit === "string") + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, `[${indexOrCrit.join("+")}]`); + const keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this.where(keyPaths[0]).equals(indexOrCrit[keyPaths[0]]); + const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter((ix) => ix.compound && keyPaths.every((keyPath) => ix.keyPath.indexOf(keyPath) >= 0) && ix.keyPath.every((keyPath) => keyPaths.indexOf(keyPath) >= 0))[0]; + if (compoundIndex && this.db._maxKey !== maxString) + return this.where(compoundIndex.name).equals(compoundIndex.keyPath.map((kp) => indexOrCrit[kp])); + if (!compoundIndex && debug) + console.warn(`The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit of a compound index [${keyPaths.join("+")}]`); + const { idxByName } = this.schema; + const idb = this.db._deps.indexedDB; + function equals(a3, b3) { + try { + return idb.cmp(a3, b3) === 0; + } catch (e3) { + return false; + } + } + const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => { + const index = idxByName[keyPath]; + const value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? combine(prevFilterFn, index && index.multi ? (x4) => { + const prop = getByKeyPath(x4, keyPath); + return isArray(prop) && prop.some((item) => equals(value, item)); + } : (x4) => equals(value, getByKeyPath(x4, keyPath))) : prevFilterFn + ]; + }, [null, null]); + return idx ? this.where(idx.name).equals(indexOrCrit[idx.keyPath]).filter(filterFunction) : compoundIndex ? this.filter(filterFunction) : this.where(keyPaths).equals(""); + } + filter(filterFunction) { + return this.toCollection().and(filterFunction); + } + count(thenShortcut) { + return this.toCollection().count(thenShortcut); + } + offset(offset) { + return this.toCollection().offset(offset); + } + limit(numRows) { + return this.toCollection().limit(numRows); + } + each(callback) { + return this.toCollection().each(callback); + } + toArray(thenShortcut) { + return this.toCollection().toArray(thenShortcut); + } + toCollection() { + return new this.db.Collection(new this.db.WhereClause(this)); + } + orderBy(index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? `[${index.join("+")}]` : index)); + } + reverse() { + return this.toCollection().reverse(); + } + mapToClass(constructor) { + this.schema.mappedClass = constructor; + const readHook = (obj) => { + if (!obj) + return obj; + const res = Object.create(constructor.prototype); + for (var m3 in obj) + if (hasOwn(obj, m3)) + try { + res[m3] = obj[m3]; + } catch (_3) { + } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + } + defineClass() { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + } + add(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans("readwrite", (trans) => { + return this.core.mutate({ trans, type: "add", keys: key != null ? [key] : null, values: [objToAdd] }); + }).then((res) => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult).then((lastResult) => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } catch (_3) { + } + } + return lastResult; + }); + } + update(keyOrObject, modifications) { + if (typeof keyOrObject === "object" && !isArray(keyOrObject)) { + const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === void 0) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + try { + if (typeof modifications !== "function") { + keys(modifications).forEach((keyPath) => { + setByKeyPath(keyOrObject, keyPath, modifications[keyPath]); + }); + } else { + modifications(keyOrObject, { value: keyOrObject, primKey: key }); + } + } catch (_a) { + } + return this.where(":id").equals(key).modify(modifications); + } else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + } + put(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans("readwrite", (trans) => this.core.mutate({ trans, type: "put", values: [objToAdd], keys: key != null ? [key] : null })).then((res) => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult).then((lastResult) => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } catch (_3) { + } + } + return lastResult; + }); + } + delete(key) { + return this._trans("readwrite", (trans) => this.core.mutate({ trans, type: "delete", keys: [key] })).then((res) => res.numFailures ? DexiePromise.reject(res.failures[0]) : void 0); + } + clear() { + return this._trans("readwrite", (trans) => this.core.mutate({ trans, type: "deleteRange", range: AnyRange })).then((res) => res.numFailures ? DexiePromise.reject(res.failures[0]) : void 0); + } + bulkGet(keys2) { + return this._trans("readonly", (trans) => { + return this.core.getMany({ + keys: keys2, + trans + }).then((result) => result.map((res) => this.hook.reading.fire(res))); + }); + } + bulkAdd(objects, keysOrOptions, options) { + const keys2 = Array.isArray(keysOrOptions) ? keysOrOptions : void 0; + options = options || (keys2 ? void 0 : keysOrOptions); + const wantResults = options ? options.allKeys : void 0; + return this._trans("readwrite", (trans) => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys2) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys2 && keys2.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToAdd = keyPath && auto ? objects.map(workaroundForUndefinedPrimKey(keyPath)) : objects; + return this.core.mutate({ trans, type: "add", keys: keys2, values: objectsToAdd, wantResults }).then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkPut(objects, keysOrOptions, options) { + const keys2 = Array.isArray(keysOrOptions) ? keysOrOptions : void 0; + options = options || (keys2 ? void 0 : keysOrOptions); + const wantResults = options ? options.allKeys : void 0; + return this._trans("readwrite", (trans) => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys2) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys2 && keys2.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToPut = keyPath && auto ? objects.map(workaroundForUndefinedPrimKey(keyPath)) : objects; + return this.core.mutate({ trans, type: "put", keys: keys2, values: objectsToPut, wantResults }).then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkDelete(keys2) { + const numKeys = keys2.length; + return this._trans("readwrite", (trans) => { + return this.core.mutate({ trans, type: "delete", keys: keys2 }); + }).then(({ numFailures, lastResult, failures }) => { + if (numFailures === 0) + return lastResult; + throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures); + }); + } +}; +function Events(ctx) { + var evs = {}; + var rv = function(eventName, subscriber) { + if (subscriber) { + var i5 = arguments.length, args = new Array(i5 - 1); + while (--i5) + args[i5 - 1] = arguments[i5]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } else if (typeof eventName === "string") { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i4 = 1, l3 = arguments.length; i4 < l3; ++i4) { + add(arguments[i4]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === "object") + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function(cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function(cb) { + context.subscribers = context.subscribers.filter(function(fn2) { + return fn2 !== cb; + }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function(eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } else if (args === "asap") { + var context = add(eventName, mirror, function fire() { + var i5 = arguments.length, args2 = new Array(i5); + while (i5--) + args2[i5] = arguments[i5]; + context.subscribers.forEach(function(fn2) { + asap$1(function fireEvent() { + fn2.apply(null, args2); + }); + }); + }); + } else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype }); + return constructor; +} +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table2(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn2) { + ctx.filter = combine(ctx.filter, fn2); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? () => combine(curr(), factory()) : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn2) { + ctx.isMatch = combine(ctx.isMatch, fn2); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + const index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + const index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans, + values: !ctx.keysOnly, + reverse: ctx.dir === "prev", + unique: !!ctx.unique, + query: { + index, + range: ctx.range + } + }); +} +function iter(ctx, fn2, coreTrans, coreTable) { + const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn2, !ctx.keysOnly && ctx.valueMapper); + } else { + const set = {}; + const union = (item, cursor, advance) => { + if (!filter || filter(cursor, advance, (result) => cursor.stop(result), (err) => cursor.fail(err))) { + var primaryKey = cursor.primaryKey; + var key = "" + primaryKey; + if (key === "[object ArrayBuffer]") + key = "" + new Uint8Array(primaryKey); + if (!hasOwn(set, key)) { + set[key] = true; + fn2(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn2, valueMapper) { + var mappedFn = valueMapper ? (x4, c4, a3) => fn2(valueMapper(x4), c4, a3) : fn2; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then((cursor) => { + if (cursor) { + return cursor.start(() => { + var c4 = () => cursor.continue(); + if (!filter || filter(cursor, (advancer) => c4 = advancer, (val) => { + cursor.stop(val); + c4 = nop; + }, (e3) => { + cursor.fail(e3); + c4 = nop; + })) + wrappedFn(cursor.value, cursor, (advancer) => c4 = advancer); + c4(); + }); + } + }); +} +function cmp(a3, b3) { + try { + const ta = type(a3); + const tb = type(b3); + if (ta !== tb) { + if (ta === "Array") + return 1; + if (tb === "Array") + return -1; + if (ta === "binary") + return 1; + if (tb === "binary") + return -1; + if (ta === "string") + return 1; + if (tb === "string") + return -1; + if (ta === "Date") + return 1; + if (tb !== "Date") + return NaN; + return -1; + } + switch (ta) { + case "number": + case "Date": + case "string": + return a3 > b3 ? 1 : a3 < b3 ? -1 : 0; + case "binary": { + return compareUint8Arrays(getUint8Array(a3), getUint8Array(b3)); + } + case "Array": + return compareArrays(a3, b3); + } + } catch (_a) { + } + return NaN; +} +function compareArrays(a3, b3) { + const al = a3.length; + const bl = b3.length; + const l3 = al < bl ? al : bl; + for (let i4 = 0; i4 < l3; ++i4) { + const res = cmp(a3[i4], b3[i4]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a3, b3) { + const al = a3.length; + const bl = b3.length; + const l3 = al < bl ? al : bl; + for (let i4 = 0; i4 < l3; ++i4) { + if (a3[i4] !== b3[i4]) + return a3[i4] < b3[i4] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x4) { + const t3 = typeof x4; + if (t3 !== "object") + return t3; + if (ArrayBuffer.isView(x4)) + return "binary"; + const tsTag = toStringTag(x4); + return tsTag === "ArrayBuffer" ? "binary" : tsTag; +} +function getUint8Array(a3) { + if (a3 instanceof Uint8Array) + return a3; + if (ArrayBuffer.isView(a3)) + return new Uint8Array(a3.buffer, a3.byteOffset, a3.byteLength); + return new Uint8Array(a3); +} +var Collection = class { + _read(fn2, cb) { + var ctx = this._ctx; + return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._trans("readonly", fn2).then(cb); + } + _write(fn2) { + var ctx = this._ctx; + return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._trans("readwrite", fn2, "locked"); + } + _addAlgorithm(fn2) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn2); + } + _iterate(fn2, coreTrans) { + return iter(this._ctx, fn2, coreTrans, this._ctx.table.core); + } + clone(props2) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props2) + extend(ctx, props2); + rv._ctx = ctx; + return rv; + } + raw() { + this._ctx.valueMapper = null; + return this; + } + each(fn2) { + var ctx = this._ctx; + return this._read((trans) => iter(ctx, fn2, trans, ctx.table.core)); + } + count(cb) { + return this._read((trans) => { + const ctx = this._ctx; + const coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then((count2) => Math.min(count2, ctx.limit)); + } else { + var count = 0; + return iter(ctx, () => { + ++count; + return false; + }, trans, coreTable).then(() => count); + } + }).then(cb); + } + sortBy(keyPath, cb) { + const parts = keyPath.split(".").reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i4) { + if (i4) + return getval(obj[parts[i4]], i4 - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a3, b3) { + var aVal = getval(a3, lastIndex), bVal = getval(b3, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function(a3) { + return a3.sort(sorter); + }).then(cb); + } + toArray(cb) { + return this._read((trans) => { + var ctx = this._ctx; + if (ctx.dir === "next" && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + const { valueMapper } = ctx; + const index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + limit: ctx.limit, + values: true, + query: { + index, + range: ctx.range + } + }).then(({ result }) => valueMapper ? result.map(valueMapper) : result); + } else { + const a3 = []; + return iter(ctx, (item) => a3.push(item), trans, ctx.table.core).then(() => a3); + } + }, cb); + } + offset(offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return (cursor, advance) => { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(() => { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } else { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return () => --offsetLeft < 0; + }); + } + return this; + } + limit(numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, () => { + var rowsLeft = numRows; + return function(cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + } + until(filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function(cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } else { + return true; + } + }); + return this; + } + first(cb) { + return this.limit(1).toArray(function(a3) { + return a3[0]; + }).then(cb); + } + last(cb) { + return this.reverse().first(cb); + } + filter(filterFunction) { + addFilter(this._ctx, function(cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + } + and(filter) { + return this.filter(filter); + } + or(indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + } + reverse() { + this._ctx.dir = this._ctx.dir === "prev" ? "next" : "prev"; + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + } + desc() { + return this.reverse(); + } + eachKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function(val, cursor) { + cb(cursor.key, cursor); + }); + } + eachUniqueKey(cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + } + eachPrimaryKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function(val, cursor) { + cb(cursor.primaryKey, cursor); + }); + } + keys(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a3 = []; + return this.each(function(item, cursor) { + a3.push(cursor.key); + }).then(function() { + return a3; + }).then(cb); + } + primaryKeys(cb) { + var ctx = this._ctx; + if (ctx.dir === "next" && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read((trans) => { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + values: false, + limit: ctx.limit, + query: { + index, + range: ctx.range + } + }); + }).then(({ result }) => result).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a3 = []; + return this.each(function(item, cursor) { + a3.push(cursor.primaryKey); + }).then(function() { + return a3; + }).then(cb); + } + uniqueKeys(cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + } + firstKey(cb) { + return this.limit(1).keys(function(a3) { + return a3[0]; + }).then(cb); + } + lastKey(cb) { + return this.reverse().firstKey(cb); + } + distinct() { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function(cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + } + modify(changes) { + var ctx = this._ctx; + return this._write((trans) => { + var modifyer; + if (typeof changes === "function") { + modifyer = changes; + } else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function(item) { + var anythingModified = false; + for (var i4 = 0; i4 < numKeys; ++i4) { + var keyPath = keyPaths[i4], val = changes[keyPath]; + if (getByKeyPath(item, keyPath) !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + const coreTable = ctx.table.core; + const { outbound, extractKey } = coreTable.schema.primaryKey; + const limit = this.db._options.modifyChunkSize || 200; + const totalFailures = []; + let successCount = 0; + const failedKeys = []; + const applyMutateResult = (expectedCount, res) => { + const { failures, numFailures } = res; + successCount += expectedCount - numFailures; + for (let pos of keys(failures)) { + totalFailures.push(failures[pos]); + } + }; + return this.clone().primaryKeys().then((keys2) => { + const nextChunk = (offset) => { + const count = Math.min(limit, keys2.length - offset); + return coreTable.getMany({ + trans, + keys: keys2.slice(offset, offset + count), + cache: "immutable" + }).then((values) => { + const addValues = []; + const putValues = []; + const putKeys = outbound ? [] : null; + const deleteKeys = []; + for (let i4 = 0; i4 < count; ++i4) { + const origValue = values[i4]; + const ctx2 = { + value: deepClone(origValue), + primKey: keys2[offset + i4] + }; + if (modifyer.call(ctx2, ctx2.value, ctx2) !== false) { + if (ctx2.value == null) { + deleteKeys.push(keys2[offset + i4]); + } else if (!outbound && cmp(extractKey(origValue), extractKey(ctx2.value)) !== 0) { + deleteKeys.push(keys2[offset + i4]); + addValues.push(ctx2.value); + } else { + putValues.push(ctx2.value); + if (outbound) + putKeys.push(keys2[offset + i4]); + } + } + } + const criteria = isPlainKeyRange(ctx) && ctx.limit === Infinity && (typeof changes !== "function" || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + return Promise.resolve(addValues.length > 0 && coreTable.mutate({ trans, type: "add", values: addValues }).then((res) => { + for (let pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(() => (putValues.length > 0 || criteria && typeof changes === "object") && coreTable.mutate({ + trans, + type: "put", + keys: putKeys, + values: putValues, + criteria, + changeSpec: typeof changes !== "function" && changes + }).then((res) => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || criteria && changes === deleteCallback) && coreTable.mutate({ + trans, + type: "delete", + keys: deleteKeys, + criteria + }).then((res) => applyMutateResult(deleteKeys.length, res))).then(() => { + return keys2.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(() => { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys2.length; + }); + }); + }); + } + delete() { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && (ctx.isPrimKey && !hangsOnDeleteLargeKeyRange || range.type === 3)) { + return this._write((trans) => { + const { primaryKey } = ctx.table.core.schema; + const coreRange = range; + return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then((count) => { + return ctx.table.core.mutate({ trans, type: "deleteRange", range: coreRange }).then(({ failures, lastResult, results, numFailures }) => { + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map((pos) => failures[pos]), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + } +}; +var deleteCallback = (value, ctx) => ctx.value = null; +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection2(whereClause, keyRangeGenerator) { + this.db = db; + let keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } catch (ex) { + error = ex; + } + const whereCtx = whereClause._ctx; + const table = whereCtx.table; + const readingHook = table.hook.reading.fire; + this._ctx = { + table, + index: whereCtx.index, + isPrimKey: !whereCtx.index || table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name, + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} +function simpleCompare(a3, b3) { + return a3 < b3 ? -1 : a3 === b3 ? 0 : 1; +} +function simpleCompareReverse(a3, b3) { + return a3 > b3 ? -1 : a3 === b3 ? 0 : 1; +} +function fail(collectionOrWhereClause, err, T4) { + var collection = collectionOrWhereClause instanceof WhereClause ? new collectionOrWhereClause.Collection(collectionOrWhereClause) : collectionOrWhereClause; + collection._ctx.error = T4 ? new T4(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, () => rangeEqual("")).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? (s4) => s4.toUpperCase() : (s4) => s4.toLowerCase(); +} +function lowerFactory(dir) { + return dir === "next" ? (s4) => s4.toLowerCase() : (s4) => s4.toUpperCase(); +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp2, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i4 = 0; i4 < length; ++i4) { + var lwrKeyChar = lowerKey[i4]; + if (lwrKeyChar !== lowerNeedle[i4]) { + if (cmp2(key[i4], upperNeedle[i4]) < 0) + return key.substr(0, i4) + upperNeedle[i4] + upperNeedle.substr(i4 + 1); + if (cmp2(key[i4], lowerNeedle[i4]) < 0) + return key.substr(0, i4) + lowerNeedle[i4] + upperNeedle.substr(i4 + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp2(key[i4], lwrKeyChar) < 0) + llp = i4; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every((s4) => typeof s4 === "string")) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = dir === "next" ? simpleCompare : simpleCompareReverse; + var needleBounds = needles.map(function(needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function(a3, b3) { + return compare(a3.lower, b3.lower); + }); + upperNeedles = needleBounds.map(function(nb) { + return nb.upper; + }); + lowerNeedles = needleBounds.map(function(nb) { + return nb.lower; + }); + direction = dir; + nextKeySuffix = dir === "next" ? "" : suffix; + } + initDirection("next"); + var c4 = new whereClause.Collection(whereClause, () => createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix)); + c4._ondirectionchange = function(direction2) { + initDirection(direction2); + }; + var firstPossibleNeedle = 0; + c4._addAlgorithm(function(cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== "string") + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } else { + var lowestPossibleCasing = null; + for (var i4 = firstPossibleNeedle; i4 < needlesLen; ++i4) { + var casing = nextCasing(key, lowerKey, upperNeedles[i4], lowerNeedles[i4], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i4 + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function() { + cursor.continue(lowestPossibleCasing + nextKeySuffix); + }); + } else { + advance(resolve); + } + return false; + } + }); + return c4; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2, + lower, + upper, + lowerOpen, + upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1, + lower: value, + upper: value + }; +} +var WhereClause = class { + get Collection() { + return this._ctx.table.db.Collection; + } + between(lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if (this._cmp(lower, upper) > 0 || this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)) + return emptyCollection(this); + return new this.Collection(this, () => createRange(lower, upper, !includeLower, !includeUpper)); + } catch (e3) { + return fail(this, INVALID_KEY_ARGUMENT); + } + } + equals(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => rangeEqual(value)); + } + above(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, void 0, true)); + } + aboveOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, void 0, false)); + } + below(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(void 0, value, false, true)); + } + belowOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(void 0, value)); + } + startsWith(str) { + if (typeof str !== "string") + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + } + startsWithIgnoreCase(str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, (x4, a3) => x4.indexOf(a3[0]) === 0, [str], maxString); + } + equalsIgnoreCase(str) { + return addIgnoreCaseAlgorithm(this, (x4, a3) => x4 === a3[0], [str], ""); + } + anyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x4, a3) => a3.indexOf(x4) !== -1, set, ""); + } + startsWithAnyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x4, a3) => a3.some((n3) => x4.indexOf(n3) === 0), set, maxString); + } + anyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + let compare = this._cmp; + try { + set.sort(compare); + } catch (e3) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + const c4 = new this.Collection(this, () => createRange(set[0], set[set.length - 1])); + c4._ondirectionchange = (direction) => { + compare = direction === "next" ? this._ascending : this._descending; + set.sort(compare); + }; + let i4 = 0; + c4._addAlgorithm((cursor, advance, resolve) => { + const key = cursor.key; + while (compare(key, set[i4]) > 0) { + ++i4; + if (i4 === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i4]) === 0) { + return true; + } else { + advance(() => { + cursor.continue(set[i4]); + }); + return false; + } + }); + return c4; + } + notEqual(value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + } + noneOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } catch (e3) { + return fail(this, INVALID_KEY_ARGUMENT); + } + const ranges = set.reduce((res, val) => res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]], null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + } + inAnyRange(ranges, options) { + const cmp2 = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every((range) => range[0] !== void 0 && range[1] !== void 0 && ascending(range[0], range[1]) <= 0)) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + const includeLowers = !options || options.includeLowers !== false; + const includeUppers = options && options.includeUppers === true; + function addRange2(ranges2, newRange) { + let i4 = 0, l3 = ranges2.length; + for (; i4 < l3; ++i4) { + const range = ranges2[i4]; + if (cmp2(newRange[0], range[1]) < 0 && cmp2(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i4 === l3) + ranges2.push(newRange); + return ranges2; + } + let sortDirection = ascending; + function rangeSorter(a3, b3) { + return sortDirection(a3[0], b3[0]); + } + let set; + try { + set = ranges.reduce(addRange2, []); + set.sort(rangeSorter); + } catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + let rangePos = 0; + const keyIsBeyondCurrentEntry = includeUppers ? (key) => ascending(key, set[rangePos][1]) > 0 : (key) => ascending(key, set[rangePos][1]) >= 0; + const keyIsBeforeCurrentEntry = includeLowers ? (key) => descending(key, set[rangePos][0]) > 0 : (key) => descending(key, set[rangePos][0]) >= 0; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + let checkKey = keyIsBeyondCurrentEntry; + const c4 = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers)); + c4._ondirectionchange = (direction) => { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c4._addAlgorithm((cursor, advance, resolve) => { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) { + return false; + } else { + advance(() => { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c4; + } + startsWithAnyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every((s4) => typeof s4 === "string")) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map((str) => [str, str + maxString])); + } +}; +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause2(table, index, orCollection) { + this.db = db; + this._ctx = { + table, + index: index === ":id" ? null : index, + or: orCollection + }; + const indexedDB2 = db._deps.indexedDB; + if (!indexedDB2) + throw new exceptions.MissingAPI(); + this._cmp = this._ascending = indexedDB2.cmp.bind(indexedDB2); + this._descending = (a3, b3) => indexedDB2.cmp(b3, a3); + this._max = (a3, b3) => indexedDB2.cmp(a3, b3) > 0 ? a3 : b3; + this._min = (a3, b3) => indexedDB2.cmp(a3, b3) < 0 ? a3 : b3; + this._IDBKeyRange = db._deps.IDBKeyRange; + }); +} +function eventRejectHandler(reject) { + return wrap(function(event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} +var DEXIE_STORAGE_MUTATED_EVENT_NAME = "storagemutated"; +var STORAGE_MUTATED_DOM_EVENT_NAME = "x-storagemutated-1"; +var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); +var Transaction = class { + _lock() { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + } + _unlock() { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } catch (e3) { + } + } + } + return this; + } + _locked() { + return this._reculock && PSD.lockOwnerFor !== this; + } + create(idbtrans) { + if (!this.mode) + return this; + const idbdb = this.db.idbdb; + const dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || (this.db.core ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap((ev) => { + preventDefault(ev); + this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap((ev) => { + preventDefault(ev); + this.active && this._reject(new exceptions.Abort(idbtrans.error)); + this.active = false; + this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(() => { + this.active = false; + this._resolve(); + if ("mutatedParts" in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + } + _promise(mode, fn2, bWriteLock) { + if (mode === "readwrite" && this.mode !== "readwrite") + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise((resolve, reject) => { + this._blockedFuncs.push([() => { + this._promise(mode, fn2, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } else if (bWriteLock) { + return newScope(() => { + var p4 = new DexiePromise((resolve, reject) => { + this._lock(); + const rv = fn2(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p4.finally(() => this._unlock()); + p4._lib = true; + return p4; + }); + } else { + var p3 = new DexiePromise((resolve, reject) => { + var rv = fn2(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p3._lib = true; + return p3; + } + } + _root() { + return this.parent ? this.parent._root() : this; + } + waitFor(promiseLike) { + var root = this._root(); + const promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(() => promise); + } else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + root._waitingQueue.shift()(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + })(); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise((resolve, reject) => { + promise.then((res) => root._waitingQueue.push(wrap(resolve.bind(null, res))), (err) => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + } + abort() { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + } + table(tableName) { + const memoizedTables = this._memoizedTables || (this._memoizedTables = {}); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + const tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + const transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + } +}; +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction2(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + this._completion.then(() => { + this.active = false; + this.on.complete.fire(); + }, (e3) => { + var wasActive = this.active; + this.active = false; + this.on.error.fire(e3); + this.parent ? this.parent._reject(e3) : wasActive && this.idbtrans && this.idbtrans.abort(); + return rejection(e3); + }); + }); +} +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name, + keyPath, + unique, + multi, + auto, + compound, + src: (unique && !isPrimKey ? "&" : "") + (multi ? "*" : "") + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === "string" ? keyPath : keyPath ? "[" + [].join.call(keyPath, "+") + "]" : ""; +} +function createTableSchema(name, primKey, indexes) { + return { + name, + primKey, + indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, (index) => [index.name, index]) + }; +} +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +var getMaxKey = (IdbKeyRange) => { + try { + IdbKeyRange.only([[]]); + getMaxKey = () => [[]]; + return [[]]; + } catch (e3) { + getMaxKey = () => maxString; + return maxString; + } +}; +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return () => void 0; + } else if (typeof keyPath === "string") { + return getSinglePathKeyExtractor(keyPath); + } else { + return (obj) => getByKeyPath(obj, keyPath); + } +} +function getSinglePathKeyExtractor(keyPath) { + const split = keyPath.split("."); + if (split.length === 1) { + return (obj) => obj[keyPath]; + } else { + return (obj) => getByKeyPath(obj, keyPath); + } +} +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +var _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? ":id" : typeof keyPath === "string" ? keyPath : `[${keyPath.join("+")}]`; +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db2, trans) { + const tables2 = arrayify(db2.objectStoreNames); + return { + schema: { + name: db2.name, + tables: tables2.map((table) => trans.objectStore(table)).map((store) => { + const { keyPath, autoIncrement } = store; + const compound = isArray(keyPath); + const outbound = keyPath == null; + const indexByKeyPath = {}; + const result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound, + compound, + keyPath, + autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map((indexName) => store.index(indexName)).map((index) => { + const { name, unique, multiEntry, keyPath: keyPath2 } = index; + const compound2 = isArray(keyPath2); + const result2 = { + name, + compound: compound2, + keyPath: keyPath2, + unique, + multiEntry, + extractKey: getKeyExtractor(keyPath2) + }; + indexByKeyPath[getKeyPathAlias(keyPath2)] = result2; + return result2; + }), + getIndexByKeyPath: (keyPath2) => indexByKeyPath[getKeyPathAlias(keyPath2)] + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables2.length > 0 && "getAll" in trans.objectStore(tables2[0]) && !(typeof navigator !== "undefined" && /Safari/.test(navigator.userAgent) && !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3) + return null; + if (range.type === 4) + throw new Error("Cannot convert never type to IDBKeyRange"); + const { lower, upper, lowerOpen, upperOpen } = range; + const idbRange = lower === void 0 ? upper === void 0 ? null : IdbKeyRange.upperBound(upper, !!upperOpen) : upper === void 0 ? IdbKeyRange.lowerBound(lower, !!lowerOpen) : IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + const tableName = tableSchema.name; + function mutate({ trans, type: type2, keys: keys2, values, range }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const outbound = store.keyPath == null; + const isAddOrPut = type2 === "put" || type2 === "add"; + if (!isAddOrPut && type2 !== "delete" && type2 !== "deleteRange") + throw new Error("Invalid operation type: " + type2); + const { length } = keys2 || values || { length: 1 }; + if (keys2 && values && keys2.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: void 0 }); + let req; + const reqs = []; + const failures = []; + let numFailures = 0; + const errorHandler = (event) => { + ++numFailures; + preventDefault(event); + }; + if (type2 === "deleteRange") { + if (range.type === 4) + return resolve({ numFailures, failures, results: [], lastResult: void 0 }); + if (range.type === 3) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } else { + const [args1, args2] = isAddOrPut ? outbound ? [values, keys2] : [values, null] : [keys2, null]; + if (isAddOrPut) { + for (let i4 = 0; i4 < length; ++i4) { + reqs.push(req = args2 && args2[i4] !== void 0 ? store[type2](args1[i4], args2[i4]) : store[type2](args1[i4])); + req.onerror = errorHandler; + } + } else { + for (let i4 = 0; i4 < length; ++i4) { + reqs.push(req = store[type2](args1[i4])); + req.onerror = errorHandler; + } + } + } + const done = (event) => { + const lastResult = event.target.result; + reqs.forEach((req2, i4) => req2.error != null && (failures[i4] = req2.error)); + resolve({ + numFailures, + failures, + results: type2 === "delete" ? keys2 : reqs.map((req2) => req2.result), + lastResult + }); + }; + req.onerror = (event) => { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor2({ trans, values, query: query2, reverse, unique }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { index, range } = query2; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const direction = reverse ? unique ? "prevunique" : "prev" : unique ? "nextunique" : "next"; + const req = values || !("openKeyCursor" in source) ? source.openCursor(makeIDBKeyRange(range), direction) : source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap((ev) => { + const cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + const _cursorContinue = cursor.continue.bind(cursor); + let _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + const _cursorAdvance = cursor.advance.bind(cursor); + const doThrowCursorIsNotStarted = () => { + throw new Error("Cursor not started"); + }; + const doThrowCursorIsStopped = () => { + throw new Error("Cursor not stopped"); + }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function() { + let gotOne = 1; + return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this); + }; + cursor.start = (callback) => { + const iterationPromise = new Promise((resolveIteration, rejectIteration) => { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = (value) => { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + const guardedCallback = () => { + if (req.result) { + try { + callback(); + } catch (err) { + cursor.fail(err); + } + } else { + cursor.done = true; + cursor.start = () => { + throw new Error("Cursor behind last entry"); + }; + cursor.stop(); + } + }; + req.onsuccess = wrap((ev2) => { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll2) { + return (request) => { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { trans, values, limit, query: query2 } = request; + const nonInfinitLimit = limit === Infinity ? void 0 : limit; + const { index, range } = query2; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll2) { + const req = values ? source.getAll(idbKeyRange, nonInfinitLimit) : source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = (event) => resolve({ result: event.target.result }); + req.onerror = eventRejectHandler(reject); + } else { + let count = 0; + const req = values || !("openKeyCursor" in source) ? source.openCursor(idbKeyRange) : source.openKeyCursor(idbKeyRange); + const result = []; + req.onsuccess = (event) => { + const cursor = req.result; + if (!cursor) + return resolve({ result }); + result.push(values ? cursor.value : cursor.primaryKey); + if (++count === limit) + return resolve({ result }); + cursor.continue(); + }; + req.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate, + getMany({ trans, keys: keys2 }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const length = keys2.length; + const result = new Array(length); + let keyCount = 0; + let callbackCount = 0; + let req; + const successHandler = (event) => { + const req2 = event.target; + if ((result[req2._pos] = req2.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + const errorHandler = eventRejectHandler(reject); + for (let i4 = 0; i4 < length; ++i4) { + const key = keys2[i4]; + if (key != null) { + req = store.get(keys2[i4]); + req._pos = i4; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get({ trans, key }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const req = store.get(key); + req.onsuccess = (event) => resolve(event.target.result); + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor: openCursor2, + count({ query: query2, trans }) { + const { index, range } = query2; + return new Promise((resolve, reject) => { + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + const req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap((ev) => resolve(ev.target.result)); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + const { schema, hasGetAll } = extractSchema(db, tmpTrans); + const tables = schema.tables.map((tableSchema) => createDbCoreTable(tableSchema)); + const tableMap = {}; + tables.forEach((table) => tableMap[table.name] = table); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table(name) { + const result = tableMap[name]; + if (!result) + throw new Error(`Table '${name}' not found`); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema + }; +} +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB: indexedDB2 }, tmpTrans) { + const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore + }; +} +function generateMiddlewareStacks({ _novip: db }, tmpTrans) { + const idbdb = tmpTrans.db; + const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach((table) => { + const tableName = table.name; + if (db.core.schema.tables.some((tbl) => tbl.name === tableName)) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} +function setApiOnPlace({ _novip: db }, objs, tableNames, dbschema) { + tableNames.forEach((tableName) => { + const schema = dbschema[tableName]; + objs.forEach((obj) => { + const propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || "value" in propDesc && propDesc.value === void 0) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get() { + return this.table(tableName); + }, + set(value) { + defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true }); + } + }); + } else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi({ _novip: db }, objs) { + objs.forEach((obj) => { + for (let key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a3, b3) { + return a3._cfg.version - b3._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + const globalSchema = db._dbSchema; + const trans = db._createTransaction("readwrite", db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + const rejectTransaction = trans._reject.bind(trans); + const transless = PSD.transless || PSD; + newScope(() => { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach((tableName) => { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction); + } else + updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction); + }); +} +function updateTablesAndIndexes({ _novip: db }, oldVersion, trans, idbUpgradeTrans) { + const queue = []; + const versions = db._versions; + let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + let anyContentUpgraderHasRun = false; + const versToRun = versions.filter((v3) => v3._cfg.version >= oldVersion); + versToRun.forEach((version2) => { + queue.push(() => { + const oldSchema = globalSchema; + const newSchema = version2._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + const diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach((tuple) => { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach((change) => { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } else { + const store = idbUpgradeTrans.objectStore(change.name); + change.add.forEach((idx) => addIndex(store, idx)); + change.change.forEach((idx) => { + store.deleteIndex(idx.name); + addIndex(store, idx); + }); + change.del.forEach((idxName) => store.deleteIndex(idxName)); + } + }); + const contentUpgrade = version2._cfg.contentUpgrade; + if (contentUpgrade && version2._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + anyContentUpgraderHasRun = true; + let upgradeSchema = shallowClone(newSchema); + diff.del.forEach((table) => { + upgradeSchema[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema); + trans.schema = upgradeSchema; + const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = contentUpgrade(trans); + if (returnValue) { + if (contentUpgradeIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + } + }); + return returnValue && typeof returnValue.then === "function" ? DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue); + } + }); + queue.push((idbtrans) => { + if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) { + const newSchema = version2._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + } + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : DexiePromise.resolve(); + } + return runQueue().then(() => { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + const diff = { + del: [], + add: [], + change: [] + }; + let table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + const oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } else { + const change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if ("" + (oldDef.primKey.keyPath || "") !== "" + (newDef.primKey.keyPath || "") || oldDef.primKey.auto !== newDef.primKey.auto && !isIEOrEdge) { + change.recreate = true; + diff.change.push(change); + } else { + const oldIndexes = oldDef.idxByName; + const newIndexes = newDef.idxByName; + let idxName; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + const oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : { autoIncrement: primKey.auto }); + indexes.forEach((idx) => addIndex(store, idx)); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach((tableName) => { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach((storeName) => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName)); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + const globalSchema = {}; + const dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach((storeName) => { + const store = tmpTrans.objectStore(storeName); + let keyPath = store.keyPath; + const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + const indexes = []; + for (let j4 = 0; j4 < store.indexNames.length; ++j4) { + const idbindex = store.index(store.indexNames[j4]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema({ _novip: db }, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + const diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some((ch) => ch.add.length || ch.change.length)); +} +function adjustToExistingIndexNames({ _novip: db }, schema, idbtrans) { + const storeNames = idbtrans.db.objectStoreNames; + for (let i4 = 0; i4 < storeNames.length; ++i4) { + const storeName = storeNames[i4]; + const store = idbtrans.objectStore(storeName); + db._hasGetAll = "getAll" in store; + for (let j4 = 0; j4 < store.indexNames.length; ++j4) { + const indexName = store.indexNames[j4]; + const keyPath = store.index(indexName).keyPath; + const dexieName = typeof keyPath === "string" ? keyPath : "[" + slice(keyPath).join("+") + "]"; + if (schema[storeName]) { + const indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== "undefined" && /Safari/.test(navigator.userAgent) && !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(",").map((index, indexNum) => { + index = index.trim(); + const name = index.replace(/([&*]|\+\+)/g, ""); + const keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split("+") : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} +var Version = class { + _parseStoresSpec(stores, outSchema) { + keys(stores).forEach((tableName) => { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach((idx) => { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + } + stores(stores) { + const db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, stores) : stores; + const versions = db._versions; + const storesSpec = {}; + let dbschema = {}; + versions.forEach((version2) => { + extend(storesSpec, version2._cfg.storesSource); + dbschema = version2._cfg.dbschema = {}; + version2._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + } + upgrade(upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + } +}; +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version2(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} +function getDbNamesTable(indexedDB2, IDBKeyRange) { + let dbNamesDB = indexedDB2["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB2["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB: indexedDB2, + IDBKeyRange + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB2) { + return indexedDB2 && typeof indexedDB2.databases === "function"; +} +function getDatabaseNames({ indexedDB: indexedDB2, IDBKeyRange }) { + return hasDatabasesNative(indexedDB2) ? Promise.resolve(indexedDB2.databases()).then((infos) => infos.map((info) => info.name).filter((name) => name !== DBNAMES_DB)) : getDbNamesTable(indexedDB2, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated({ indexedDB: indexedDB2, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB2) && name !== DBNAMES_DB && getDbNamesTable(indexedDB2, IDBKeyRange).put({ name }).catch(nop); +} +function _onDatabaseDeleted({ indexedDB: indexedDB2, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB2) && name !== DBNAMES_DB && getDbNamesTable(indexedDB2, IDBKeyRange).delete(name).catch(nop); +} +function vip(fn2) { + return newScope(function() { + PSD.letThrough = true; + return fn2(); + }); +} +function idbReady() { + var isSafari = !navigator.userAgentData && /Safari\//.test(navigator.userAgent) && !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function(resolve) { + var tryIdb = function() { + return indexedDB.databases().finally(resolve); + }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function() { + return clearInterval(intervalId); + }); +} +function dexieOpen(db) { + const state = db._state; + const { indexedDB: indexedDB2 } = db._deps; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(() => state.dbOpenError ? rejection(state.dbOpenError) : db); + debug && (state.openCanceller._stackHolder = getErrorWithStack()); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + const openCanceller = state.openCanceller; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed("db.open() was cancelled"); + } + let resolveDbReady = state.dbReadyResolve, upgradeTransaction = null, wasCreated = false; + return DexiePromise.race([openCanceller, (typeof navigator === "undefined" ? DexiePromise.resolve() : idbReady()).then(() => new DexiePromise((resolve, reject) => { + throwIfCancelled(); + if (!indexedDB2) + throw new exceptions.MissingAPI(); + const dbName = db.name; + const req = state.autoSchema ? indexedDB2.open(dbName) : indexedDB2.open(dbName, Math.round(db.verno * 10)); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap((e3) => { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + const delreq = indexedDB2.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(() => { + reject(new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`)); + }); + } else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e3.oldVersion > Math.pow(2, 62) ? 0 : e3.oldVersion; + wasCreated = oldVer < 1; + db._novip.idbdb = req.result; + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(() => { + upgradeTransaction = null; + const idbdb = db._novip.idbdb = req.result; + const objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), "readonly"); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans)) { + console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.`); + } + } + generateMiddlewareStacks(db, tmpTrans); + } catch (e3) { + } + connections.push(db); + idbdb.onversionchange = wrap((ev) => { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap((ev) => { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }))]).then(() => { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + let remainders = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders); + } + }); + }).finally(() => { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + }).then(() => { + return db; + }).catch((err) => { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } catch (_a) { + } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(() => { + state.openComplete = true; + resolveDbReady(); + }); +} +function awaitIterator(iterator) { + var callNext = (result) => iterator.next(result), doThrow = (error) => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return (val) => { + var next = getNext(val), value = next.value; + return next.done ? value : !value || typeof value.then !== "function" ? isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : value.then(onSuccess, onError); + }; + } + return step(callNext)(); +} +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i4 = arguments.length; + if (i4 < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i4 - 1); + while (--i4) + args[i4 - 1] = arguments[i4]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(() => { + const transless = PSD.transless || PSD; + const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + const zoneProps = { + trans, + transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } else { + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn("Dexie: Need to reopen db"); + db._close(); + return db.open().then(() => enterTransactionScope(db, mode, storeNames, null, scopeFunc)); + } + return rejection(ex); + } + } + const scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } else if (typeof returnValue.next === "function" && typeof returnValue.throw === "function") { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === "function" ? DexiePromise.resolve(returnValue).then((x4) => trans.active ? x4 : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))) : promiseFollowed.then(() => returnValue)).then((x4) => { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(() => x4); + }).catch((e3) => { + trans._reject(e3); + return rejection(e3); + }); + }); +} +function pad(a3, value, count) { + const result = isArray(a3) ? a3.slice() : [a3]; + for (let i4 = 0; i4 < count; ++i4) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return { + ...down, + table(tableName) { + const table = down.table(tableName); + const { schema } = table; + const indexLookup = {}; + const allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + const keyPathAlias = getKeyPathAlias(keyPath); + const indexList = indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []; + const keyLength = keyPath == null ? 0 : typeof keyPath === "string" ? 1 : keyPath.length; + const isVirtual = keyTail > 0; + const virtualIndex = { + ...lowLevelIndex, + isVirtual, + keyTail, + keyLength, + extractKey: getKeyExtractor(keyPath), + unique: !isVirtual && lowLevelIndex.unique + }; + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + const virtualKeyPath = keyLength === 2 ? keyPath[0] : keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort((a3, b3) => a3.keyTail - b3.keyTail); + return virtualIndex; + } + const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (const index of schema.indexes) { + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + const result2 = indexLookup[getKeyPathAlias(keyPath)]; + return result2 && result2[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? 2 : range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + const index = req.query.index; + return index.isVirtual ? { + ...req, + query: { + index, + range: translateRange(req.query.range, index.keyTail) + } + } : req; + } + const result = { + ...table, + schema: { + ...schema, + primaryKey, + indexes: allVirtualIndexes, + getIndexByKeyPath: findBestIndex + }, + count(req) { + return table.count(translateRequest(req)); + }, + query(req) { + return table.query(translateRequest(req)); + }, + openCursor(req) { + const { keyTail, isVirtual, keyLength } = req.query.index; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : req.unique ? cursor.continue(cursor.key.slice(0, keyLength).concat(req.reverse ? down.MIN_KEY : down.MAX_KEY, keyTail)) : cursor.continue(); + } + const virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value(key, primaryKey2) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey2); + } + }, + primaryKey: { + get() { + return cursor.primaryKey; + } + }, + key: { + get() { + const key = cursor.key; + return keyLength === 1 ? key[0] : key.slice(0, keyLength); + } + }, + value: { + get() { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)).then((cursor) => cursor && createVirtualCursor(cursor)); + } + }; + return result; + } + }; +} +var virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; +function getObjectDiff(a3, b3, rv, prfx) { + rv = rv || {}; + prfx = prfx || ""; + keys(a3).forEach((prop) => { + if (!hasOwn(b3, prop)) { + rv[prfx + prop] = void 0; + } else { + var ap = a3[prop], bp = b3[prop]; + if (typeof ap === "object" && typeof bp === "object" && ap && bp) { + const apTypeName = toStringTag(ap); + const bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b3[prop]; + } else if (apTypeName === "Object") { + getObjectDiff(ap, bp, rv, prfx + prop + "."); + } else if (ap !== bp) { + rv[prfx + prop] = b3[prop]; + } + } else if (ap !== bp) + rv[prfx + prop] = b3[prop]; + } + }); + keys(b3).forEach((prop) => { + if (!hasOwn(a3, prop)) { + rv[prfx + prop] = b3[prop]; + } + }); + return rv; +} +function getEffectiveKeys(primaryKey, req) { + if (req.type === "delete") + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); +} +var hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: (downCore) => ({ + ...downCore, + table(tableName) { + const downTable = downCore.table(tableName); + const { primaryKey } = downTable.schema; + const tableMiddleware = { + ...downTable, + mutate(req) { + const dxTrans = PSD.trans; + const { deleting, creating, updating } = dxTrans.table(tableName).hook; + switch (req.type) { + case "add": + if (creating.fire === nop) + break; + return dxTrans._promise("readwrite", () => addPutOrDelete(req), true); + case "put": + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise("readwrite", () => addPutOrDelete(req), true); + case "delete": + if (deleting.fire === nop) + break; + return dxTrans._promise("readwrite", () => addPutOrDelete(req), true); + case "deleteRange": + if (deleting.fire === nop) + break; + return dxTrans._promise("readwrite", () => deleteRange(req), true); + } + return downTable.mutate(req); + function addPutOrDelete(req2) { + const dxTrans2 = PSD.trans; + const keys2 = req2.keys || getEffectiveKeys(primaryKey, req2); + if (!keys2) + throw new Error("Keys missing"); + req2 = req2.type === "add" || req2.type === "put" ? { ...req2, keys: keys2 } : { ...req2 }; + if (req2.type !== "delete") + req2.values = [...req2.values]; + if (req2.keys) + req2.keys = [...req2.keys]; + return getExistingValues(downTable, req2, keys2).then((existingValues) => { + const contexts = keys2.map((key, i4) => { + const existingValue = existingValues[i4]; + const ctx = { onerror: null, onsuccess: null }; + if (req2.type === "delete") { + deleting.fire.call(ctx, key, existingValue, dxTrans2); + } else if (req2.type === "add" || existingValue === void 0) { + const generatedPrimaryKey = creating.fire.call(ctx, key, req2.values[i4], dxTrans2); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req2.keys[i4] = key; + if (!primaryKey.outbound) { + setByKeyPath(req2.values[i4], primaryKey.keyPath, key); + } + } + } else { + const objectDiff = getObjectDiff(existingValue, req2.values[i4]); + const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans2); + if (additionalChanges) { + const requestedValue = req2.values[i4]; + Object.keys(additionalChanges).forEach((keyPath) => { + if (hasOwn(requestedValue, keyPath)) { + requestedValue[keyPath] = additionalChanges[keyPath]; + } else { + setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req2).then(({ failures, results, numFailures, lastResult }) => { + for (let i4 = 0; i4 < keys2.length; ++i4) { + const primKey = results ? results[i4] : keys2[i4]; + const ctx = contexts[i4]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i4]); + } else { + ctx.onsuccess && ctx.onsuccess( + req2.type === "put" && existingValues[i4] ? req2.values[i4] : primKey + ); + } + } + return { failures, results, numFailures, lastResult }; + }).catch((error) => { + contexts.forEach((ctx) => ctx.onerror && ctx.onerror(error)); + return Promise.reject(error); + }); + }); + } + function deleteRange(req2) { + return deleteNextChunk(req2.trans, req2.range, 1e4); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans, values: false, query: { index: primaryKey, range }, limit }).then(({ result }) => { + return addPutOrDelete({ type: "delete", keys: result, trans }).then((res) => { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: void 0 }; + } else { + return deleteNextChunk(trans, { ...range, lower: result[result.length - 1], lowerOpen: true }, limit); + } + }); + }); + } + } + }; + return tableMiddleware; + } + }) +}; +function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" ? Promise.resolve([]) : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); +} +function getFromTransactionCache(keys2, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys2.length) + return null; + const result = []; + for (let i4 = 0, j4 = 0; i4 < cache.keys.length && j4 < keys2.length; ++i4) { + if (cmp(cache.keys[i4], keys2[j4]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i4]) : cache.values[i4]); + ++j4; + } + return result.length === keys2.length ? result : null; + } catch (_a) { + return null; + } +} +var cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: (core) => { + return { + table: (tableName) => { + const table = core.table(tableName); + return { + ...table, + getMany: (req) => { + if (!req.cache) { + return table.getMany(req); + } + const cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then((res) => { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res + }; + return res; + }); + }, + mutate: (req) => { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + } + }; + } + }; + } +}; +function isEmptyRange(node) { + return !("from" in node); +} +var RangeSet = function(fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } else { + const rv = new RangeSet(); + if (fromOrTree && "d" in fromOrTree) { + extend(rv, fromOrTree); + } + return rv; + } +}; +props(RangeSet.prototype, { + add(rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey(key) { + addRange(this, key, key); + return this; + }, + addKeys(keys2) { + keys2.forEach((key) => addRange(this, key, key)); + return this; + }, + [iteratorSymbol]() { + return getRangeSetIterator(this); + } +}); +function addRange(target, from, to) { + const diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from, to, d: 1 }); + const left = target.l; + const right = target.r; + if (cmp(to, target.from) < 0) { + left ? addRange(left, from, to) : target.l = { from, to, d: 1, l: null, r: null }; + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right ? addRange(right, from, to) : target.r = { from, to, d: 1, l: null, r: null }; + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + const rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } +} +function mergeRanges(target, newSet) { + function _addRangeSet(target2, { from, to, l: l3, r: r3 }) { + addRange(target2, from, to); + if (l3) + _addRangeSet(target2, l3); + if (r3) + _addRangeSet(target2, r3); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); +} +function rangesOverlap(rangeSet1, rangeSet2) { + const i1 = getRangeSetIterator(rangeSet2); + let nextResult1 = i1.next(); + if (nextResult1.done) + return false; + let a3 = nextResult1.value; + const i22 = getRangeSetIterator(rangeSet1); + let nextResult2 = i22.next(a3.from); + let b3 = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b3.from, a3.to) <= 0 && cmp(b3.to, a3.from) >= 0) + return true; + cmp(a3.from, b3.from) < 0 ? a3 = (nextResult1 = i1.next(b3.from)).value : b3 = (nextResult2 = i22.next(a3.from)).value; + } + return false; +} +function getRangeSetIterator(node) { + let state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next(key) { + const keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + } + }; +} +function rebalance(target) { + var _a, _b; + const diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); + const r3 = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r3) { + const l3 = r3 === "r" ? "l" : "r"; + const rootClone = { ...target }; + const oldRootRight = target[r3]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r3] = oldRootRight[r3]; + rootClone[r3] = oldRootRight[l3]; + target[l3] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); +} +function computeDepth({ r: r3, l: l3 }) { + return (r3 ? l3 ? Math.max(r3.d, l3.d) : r3.d : l3 ? l3.d : 0) + 1; +} +var observabilityMiddleware = { + stack: "dbcore", + level: 0, + create: (core) => { + const dbName = core.schema.name; + const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return { + ...core, + table: (tableName) => { + const table = core.table(tableName); + const { schema } = table; + const { primaryKey } = schema; + const { extractKey, outbound } = primaryKey; + const tableClone = { + ...table, + mutate: (req) => { + const trans = req.trans; + const mutatedParts = trans.mutatedParts || (trans.mutatedParts = {}); + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return mutatedParts[part] || (mutatedParts[part] = new RangeSet()); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const { type: type2 } = req; + let [keys2, newObjs] = req.type === "deleteRange" ? [req.range] : req.type === "delete" ? [req.keys] : req.values.length < 50 ? [[], req.values] : []; + const oldCache = req.trans["_cache"]; + return table.mutate(req).then((res) => { + if (isArray(keys2)) { + if (type2 !== "delete") + keys2 = res.results; + pkRangeSet.addKeys(keys2); + const oldObjs = getFromTransactionCache(keys2, oldCache); + if (!oldObjs && type2 !== "add") { + delsRangeSet.addKeys(keys2); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } else if (keys2) { + const range = { from: keys2.lower, to: keys2.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach((idx) => getRangeSet(idx.name).add(FULL_RANGE)); + } + return res; + }); + } + }; + const getRange = ({ query: { index, range } }) => { + var _a, _b; + return [ + index, + new RangeSet((_a = range.lower) !== null && _a !== void 0 ? _a : core.MIN_KEY, (_b = range.upper) !== null && _b !== void 0 ? _b : core.MAX_KEY) + ]; + }; + const readSubscribers = { + get: (req) => [primaryKey, new RangeSet(req.key)], + getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)], + count: getRange, + query: getRange, + openCursor: getRange + }; + keys(readSubscribers).forEach((method) => { + tableClone[method] = function(req) { + const { subscr } = PSD; + if (subscr) { + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return subscr[part] || (subscr[part] = new RangeSet()); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const [queriedIndex, queriedRanges] = readSubscribers[method](req); + getRangeSet(queriedIndex.name || "").add(queriedRanges); + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet.add(FULL_RANGE); + } else { + const keysPromise = method === "query" && outbound && req.values && table.query({ + ...req, + values: false + }); + return table[method].apply(this, arguments).then((res) => { + if (method === "query") { + if (outbound && req.values) { + return keysPromise.then(({ result: resultingKeys }) => { + pkRangeSet.addKeys(resultingKeys); + return res; + }); + } + const pKeys = req.values ? res.result.map(extractKey) : res.result; + if (req.values) { + pkRangeSet.addKeys(pKeys); + } else { + delsRangeSet.addKeys(pKeys); + } + } else if (method === "openCursor") { + const cursor = res; + const wantValues = req.values; + return cursor && Object.create(cursor, { + key: { + get() { + delsRangeSet.addKey(cursor.primaryKey); + return cursor.key; + } + }, + primaryKey: { + get() { + const pkey = cursor.primaryKey; + delsRangeSet.addKey(pkey); + return pkey; + } + }, + value: { + get() { + wantValues && pkRangeSet.addKey(cursor.primaryKey); + return cursor.value; + } + } + }); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + } + }; + } +}; +function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + const rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + const addKeyOrKeys = (key) => ix.multiEntry && isArray(key) ? key.forEach((key2) => rangeSet.addKey(key2)) : rangeSet.addKey(key); + (oldObjs || newObjs).forEach((_3, i4) => { + const oldKey = oldObjs && extractKey(oldObjs[i4]); + const newKey = newObjs && extractKey(newObjs[i4]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); +} +var Dexie$1 = class { + constructor(name, options) { + this._middlewares = {}; + this.verno = 0; + const deps = Dexie$1.dependencies; + this._options = options = { + addons: Dexie$1.addons, + autoOpen: true, + indexedDB: deps.indexedDB, + IDBKeyRange: deps.IDBKeyRange, + ...options + }; + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + const { addons } = options; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + const state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3 + }; + state.dbReadyPromise = new DexiePromise((resolve) => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_3, reject) => { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, (subscribe) => { + return (subscriber, bSticky) => { + Dexie$1.vip(() => { + const state2 = this._state; + if (state2.openComplete) { + if (!state2.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } else if (state2.onReadyBeingFired) { + state2.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } else { + subscribe(subscriber); + const db = this; + if (!bSticky) + subscribe(function unsubscribe() { + db.on.ready.unsubscribe(subscriber); + db.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", (ev) => { + if (ev.newVersion > 0) + console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`); + else + console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`); + this.close(); + }); + this.on("blocked", (ev) => { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn(`Dexie.delete('${this.name}') was blocked`); + else + console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction); + this._fireOnBlocked = (ev) => { + this.on("blocked").fire(ev); + connections.filter((c4) => c4.name === this.name && c4 !== this && !c4._state.vcFired).map((c4) => c4.on("versionchange").fire(ev)); + }; + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + this.use(observabilityMiddleware); + this.use(cacheExistingValuesMiddleware); + this.vip = Object.create(this, { _vip: { value: true } }); + addons.forEach((addon) => addon(this)); + } + version(versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type(`Given version is not a positive number`); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + const versions = this._versions; + var versionInstance = versions.filter((v3) => v3._cfg.version === versionNumber)[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + } + _whenReady(fn2) { + return this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip) ? fn2() : new DexiePromise((resolve, reject) => { + if (this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(this._state.dbOpenError)); + } + if (!this._state.isBeingOpened) { + if (!this._options.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + this.open().catch(nop); + } + this._state.dbReadyPromise.then(resolve, reject); + }).then(fn2); + } + use({ stack, create, level, name }) { + if (name) + this.unuse({ stack, name }); + const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack, create, level: level == null ? 10 : level, name }); + middlewares.sort((a3, b3) => a3.level - b3.level); + return this; + } + unuse({ stack, name, create }) { + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter((mw) => create ? mw.create !== create : name ? mw.name !== name : false); + } + return this; + } + open() { + return dexieOpen(this); + } + _close() { + const state = this._state; + const idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } catch (e3) { + } + this._novip.idbdb = null; + } + state.dbReadyPromise = new DexiePromise((resolve) => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_3, reject) => { + state.cancelOpen = reject; + }); + } + close() { + this._close(); + const state = this._state; + this._options.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + if (state.isBeingOpened) + state.cancelOpen(state.dbOpenError); + } + delete() { + const hasArguments = arguments.length > 0; + const state = this._state; + return new DexiePromise((resolve, reject) => { + const doDelete = () => { + this.close(); + var req = this._deps.indexedDB.deleteDatabase(this.name); + req.onsuccess = wrap(() => { + _onDatabaseDeleted(this._deps, this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = this._fireOnBlocked; + }; + if (hasArguments) + throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } else { + doDelete(); + } + }); + } + backendDB() { + return this.idbdb; + } + isOpen() { + return this.idbdb !== null; + } + hasBeenClosed() { + const dbOpenError = this._state.dbOpenError; + return dbOpenError && dbOpenError.name === "DatabaseClosed"; + } + hasFailed() { + return this._state.dbOpenError !== null; + } + dynamicallyOpened() { + return this._state.autoSchema; + } + get tables() { + return keys(this._allTables).map((name) => this._allTables[name]); + } + transaction() { + const args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + } + _transaction(mode, tables, scopeFunc) { + let parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf("!") !== -1) + parentTransaction = null; + const onlyIfCompatible = mode.indexOf("?") !== -1; + mode = mode.replace("!", "").replace("?", ""); + let idbMode, storeNames; + try { + storeNames = tables.map((table) => { + var storeName = table instanceof this.Table ? table.name : table; + if (typeof storeName !== "string") + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach((storeName) => { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } else + throw new exceptions.SubTransaction("Table " + storeName + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } catch (e3) { + return parentTransaction ? parentTransaction._promise(null, (_3, reject) => { + reject(e3); + }) : rejection(e3); + } + const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return parentTransaction ? parentTransaction._promise(idbMode, enterTransaction, "lock") : PSD.trans ? usePSD(PSD.transless, () => this._whenReady(enterTransaction)) : this._whenReady(enterTransaction); + } + table(tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); + } + return this._allTables[tableName]; + } +}; +var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol ? Symbol.observable : "@@observable"; +var Observable = class { + constructor(subscribe) { + this._subscribe = subscribe; + } + subscribe(x4, error, complete) { + return this._subscribe(!x4 || typeof x4 === "function" ? { next: x4, error, complete } : x4); + } + [symbolObservable]() { + return this; + } +}; +function extendObservabilitySet(target, newSet) { + keys(newSet).forEach((part) => { + const rangeSet = target[part] || (target[part] = new RangeSet()); + mergeRanges(rangeSet, newSet[part]); + }); + return target; +} +function liveQuery(querier) { + return new Observable((observer) => { + const scopeFuncIsAsync = isAsyncFunction(querier); + function execute(subscr) { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + const exec = () => newScope(querier, { subscr, trans: null }); + const rv = PSD.trans ? usePSD(PSD.transless, exec) : exec(); + if (scopeFuncIsAsync) { + rv.then(decrementExpectedAwaits, decrementExpectedAwaits); + } + return rv; + } + let closed = false; + let accumMuts = {}; + let currentObs = {}; + const subscription = { + get closed() { + return closed; + }, + unsubscribe: () => { + closed = true; + globalEvents.storagemutated.unsubscribe(mutationListener); + } + }; + observer.start && observer.start(subscription); + let querying = false, startedListening = false; + function shouldNotify() { + return keys(currentObs).some((key) => accumMuts[key] && rangesOverlap(accumMuts[key], currentObs[key])); + } + const mutationListener = (parts) => { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + const doQuery = () => { + if (querying || closed) + return; + accumMuts = {}; + const subscr = {}; + const ret = execute(subscr); + if (!startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + querying = true; + Promise.resolve(ret).then((result) => { + querying = false; + if (closed) + return; + if (shouldNotify()) { + doQuery(); + } else { + accumMuts = {}; + currentObs = subscr; + observer.next && observer.next(result); + } + }, (err) => { + querying = false; + observer.error && observer.error(err); + subscription.unsubscribe(); + }); + }; + doQuery(); + return subscription; + }); +} +var domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} catch (e3) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} +var Dexie = Dexie$1; +props(Dexie, { + ...fullNameExceptions, + delete(databaseName) { + const db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists(name) { + return new Dexie(name, { addons: [] }).open().then((db) => { + db.close(); + return true; + }).catch("NoSuchDatabaseError", () => false); + }, + getDatabaseNames(cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass() { + function Class(content) { + extend(this, content); + } + return Class; + }, + ignoreTransaction(scopeFunc) { + return PSD.trans ? usePSD(PSD.transless, scopeFunc) : scopeFunc(); + }, + vip, + async: function(generatorFn) { + return function() { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== "function") + return DexiePromise.resolve(rv); + return rv; + } catch (e3) { + return rejection(e3); + } + }; + }, + spawn: function(generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== "function") + return DexiePromise.resolve(rv); + return rv; + } catch (e3) { + return rejection(e3); + } + }, + currentTransaction: { + get: () => PSD.trans || null + }, + waitFor: function(promiseOrFunction, optionalTimeout) { + const promise = DexiePromise.resolve(typeof promiseOrFunction === "function" ? Dexie.ignoreTransaction(promiseOrFunction) : promiseOrFunction).timeout(optionalTimeout || 6e4); + return PSD.trans ? PSD.trans.waitFor(promise) : promise; + }, + Promise: DexiePromise, + debug: { + get: () => debug, + set: (value) => { + setDebug(value, value === "dexie" ? () => true : dexieStackFrameFilter); + } + }, + derive, + extend, + props, + override, + Events, + on: globalEvents, + liveQuery, + extendObservabilitySet, + getByKeyPath, + setByKeyPath, + delByKeyPath, + shallowClone, + deepClone, + getObjectDiff, + cmp, + asap: asap$1, + minKey, + addons: [], + connections, + errnames, + dependencies: domDeps, + semVer: DEXIE_VERSION, + version: DEXIE_VERSION.split(".").map((n3) => parseInt(n3)).reduce((p3, c4, i4) => p3 + c4 / Math.pow(10, i4 * 2)) +}); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); +if (typeof dispatchEvent !== "undefined" && typeof addEventListener !== "undefined") { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (updatedParts) => { + if (!propagatingLocally) { + let event; + if (isIEOrEdge) { + event = document.createEvent("CustomEvent"); + event.initCustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, true, true, updatedParts); + } else { + event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + } + propagatingLocally = true; + dispatchEvent(event); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({ detail }) => { + if (!propagatingLocally) { + propagateLocally(detail); + } + }); +} +function propagateLocally(updateParts) { + let wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + } finally { + propagatingLocally = wasMe; + } +} +var propagatingLocally = false; +if (typeof BroadcastChannel !== "undefined") { + const bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + if (typeof bc.unref === "function") { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); + bc.onmessage = (ev) => { + if (ev.data) + propagateLocally(ev.data); + }; +} else if (typeof self !== "undefined" && typeof navigator !== "undefined") { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => { + try { + if (!propagatingLocally) { + if (typeof localStorage !== "undefined") { + localStorage.setItem(STORAGE_MUTATED_DOM_EVENT_NAME, JSON.stringify({ + trig: Math.random(), + changedParts + })); + } + if (typeof self["clients"] === "object") { + [...self["clients"].matchAll({ includeUncontrolled: true })].forEach((client) => client.postMessage({ + type: STORAGE_MUTATED_DOM_EVENT_NAME, + changedParts + })); + } + } + } catch (_a) { + } + }); + if (typeof addEventListener !== "undefined") { + addEventListener("storage", (ev) => { + if (ev.key === STORAGE_MUTATED_DOM_EVENT_NAME) { + const data = JSON.parse(ev.newValue); + if (data) + propagateLocally(data.changedParts); + } + }); + } + const swContainer = self.document && navigator.serviceWorker; + if (swContainer) { + swContainer.addEventListener("message", propagateMessageLocally); + } +} +function propagateMessageLocally({ data }) { + if (data && data.type === STORAGE_MUTATED_DOM_EVENT_NAME) { + propagateLocally(data.changedParts); + } +} +DexiePromise.rejectionMapper = mapError; +setDebug(debug, dexieStackFrameFilter); + +// src/utils.ts +var import_msgreader = __toESM(require_msgreader()); +var import_obsidian = require("obsidian"); + +// node_modules/js-base64/base64.mjs +var version = "3.7.5"; +var VERSION = version; +var _hasatob = typeof atob === "function"; +var _hasbtoa = typeof btoa === "function"; +var _hasBuffer = typeof Buffer === "function"; +var _TD = typeof TextDecoder === "function" ? new TextDecoder() : void 0; +var _TE = typeof TextEncoder === "function" ? new TextEncoder() : void 0; +var b64ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +var b64chs = Array.prototype.slice.call(b64ch); +var b64tab = ((a3) => { + let tab = {}; + a3.forEach((c4, i4) => tab[c4] = i4); + return tab; +})(b64chs); +var b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; +var _fromCC = String.fromCharCode.bind(String); +var _U8Afrom = typeof Uint8Array.from === "function" ? Uint8Array.from.bind(Uint8Array) : (it) => new Uint8Array(Array.prototype.slice.call(it, 0)); +var _mkUriSafe = (src) => src.replace(/=/g, "").replace(/[+\/]/g, (m0) => m0 == "+" ? "-" : "_"); +var _tidyB64 = (s4) => s4.replace(/[^A-Za-z0-9\+\/]/g, ""); +var btoaPolyfill = (bin) => { + let u32, c0, c1, c22, asc = ""; + const pad2 = bin.length % 3; + for (let i4 = 0; i4 < bin.length; ) { + if ((c0 = bin.charCodeAt(i4++)) > 255 || (c1 = bin.charCodeAt(i4++)) > 255 || (c22 = bin.charCodeAt(i4++)) > 255) + throw new TypeError("invalid character found"); + u32 = c0 << 16 | c1 << 8 | c22; + asc += b64chs[u32 >> 18 & 63] + b64chs[u32 >> 12 & 63] + b64chs[u32 >> 6 & 63] + b64chs[u32 & 63]; + } + return pad2 ? asc.slice(0, pad2 - 3) + "===".substring(pad2) : asc; +}; +var _btoa = _hasbtoa ? (bin) => btoa(bin) : _hasBuffer ? (bin) => Buffer.from(bin, "binary").toString("base64") : btoaPolyfill; +var _fromUint8Array = _hasBuffer ? (u8a) => Buffer.from(u8a).toString("base64") : (u8a) => { + const maxargs = 4096; + let strs = []; + for (let i4 = 0, l3 = u8a.length; i4 < l3; i4 += maxargs) { + strs.push(_fromCC.apply(null, u8a.subarray(i4, i4 + maxargs))); + } + return _btoa(strs.join("")); +}; +var fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); +var cb_utob = (c4) => { + if (c4.length < 2) { + var cc = c4.charCodeAt(0); + return cc < 128 ? c4 : cc < 2048 ? _fromCC(192 | cc >>> 6) + _fromCC(128 | cc & 63) : _fromCC(224 | cc >>> 12 & 15) + _fromCC(128 | cc >>> 6 & 63) + _fromCC(128 | cc & 63); + } else { + var cc = 65536 + (c4.charCodeAt(0) - 55296) * 1024 + (c4.charCodeAt(1) - 56320); + return _fromCC(240 | cc >>> 18 & 7) + _fromCC(128 | cc >>> 12 & 63) + _fromCC(128 | cc >>> 6 & 63) + _fromCC(128 | cc & 63); + } +}; +var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +var utob = (u3) => u3.replace(re_utob, cb_utob); +var _encode = _hasBuffer ? (s4) => Buffer.from(s4, "utf8").toString("base64") : _TE ? (s4) => _fromUint8Array(_TE.encode(s4)) : (s4) => _btoa(utob(s4)); +var encode = (src, urlsafe = false) => urlsafe ? _mkUriSafe(_encode(src)) : _encode(src); +var encodeURI = (src) => encode(src, true); +var re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; +var cb_btou = (cccc) => { + switch (cccc.length) { + case 4: + var cp = (7 & cccc.charCodeAt(0)) << 18 | (63 & cccc.charCodeAt(1)) << 12 | (63 & cccc.charCodeAt(2)) << 6 | 63 & cccc.charCodeAt(3), offset = cp - 65536; + return _fromCC((offset >>> 10) + 55296) + _fromCC((offset & 1023) + 56320); + case 3: + return _fromCC((15 & cccc.charCodeAt(0)) << 12 | (63 & cccc.charCodeAt(1)) << 6 | 63 & cccc.charCodeAt(2)); + default: + return _fromCC((31 & cccc.charCodeAt(0)) << 6 | 63 & cccc.charCodeAt(1)); + } +}; +var btou = (b3) => b3.replace(re_btou, cb_btou); +var atobPolyfill = (asc) => { + asc = asc.replace(/\s+/g, ""); + if (!b64re.test(asc)) + throw new TypeError("malformed base64."); + asc += "==".slice(2 - (asc.length & 3)); + let u24, bin = "", r1, r22; + for (let i4 = 0; i4 < asc.length; ) { + u24 = b64tab[asc.charAt(i4++)] << 18 | b64tab[asc.charAt(i4++)] << 12 | (r1 = b64tab[asc.charAt(i4++)]) << 6 | (r22 = b64tab[asc.charAt(i4++)]); + bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) : r22 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + } + return bin; +}; +var _atob = _hasatob ? (asc) => atob(_tidyB64(asc)) : _hasBuffer ? (asc) => Buffer.from(asc, "base64").toString("binary") : atobPolyfill; +var _toUint8Array = _hasBuffer ? (a3) => _U8Afrom(Buffer.from(a3, "base64")) : (a3) => _U8Afrom(_atob(a3).split("").map((c4) => c4.charCodeAt(0))); +var toUint8Array = (a3) => _toUint8Array(_unURI(a3)); +var _decode = _hasBuffer ? (a3) => Buffer.from(a3, "base64").toString("utf8") : _TD ? (a3) => _TD.decode(_toUint8Array(a3)) : (a3) => btou(_atob(a3)); +var _unURI = (a3) => _tidyB64(a3.replace(/[-_]/g, (m0) => m0 == "-" ? "+" : "/")); +var decode = (src) => _decode(_unURI(src)); +var isValid = (src) => { + if (typeof src !== "string") + return false; + const s4 = src.replace(/\s+/g, "").replace(/={0,2}$/, ""); + return !/[^\s0-9a-zA-Z\+/]/.test(s4) || !/[^\s0-9a-zA-Z\-_]/.test(s4); +}; +var _noEnum = (v3) => { + return { + value: v3, + enumerable: false, + writable: true, + configurable: true + }; +}; +var extendString = function() { + const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body)); + _add("fromBase64", function() { + return decode(this); + }); + _add("toBase64", function(urlsafe) { + return encode(this, urlsafe); + }); + _add("toBase64URI", function() { + return encode(this, true); + }); + _add("toBase64URL", function() { + return encode(this, true); + }); + _add("toUint8Array", function() { + return toUint8Array(this); + }); +}; +var extendUint8Array = function() { + const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); + _add("toBase64", function(urlsafe) { + return fromUint8Array(this, urlsafe); + }); + _add("toBase64URI", function() { + return fromUint8Array(this, true); + }); + _add("toBase64URL", function() { + return fromUint8Array(this, true); + }); +}; +var extendBuiltins = () => { + extendString(); + extendUint8Array(); +}; +var gBase64 = { + version, + VERSION, + atob: _atob, + atobPolyfill, + btoa: _btoa, + btoaPolyfill, + fromBase64: decode, + toBase64: encode, + encode, + encodeURI, + encodeURL: encodeURI, + utob, + btou, + decode, + isValid, + fromUint8Array, + toUint8Array, + extendString, + extendUint8Array, + extendBuiltins +}; + +// node_modules/eml-parse-js/lib/bundle.esm.js +var import_text_encoding = __toESM(require_text_encoding()); +var encode2 = function(str, fromCharset) { + if (fromCharset === void 0) { + fromCharset = "utf-8"; + } + return new import_text_encoding.TextEncoder(fromCharset).encode(str); +}; +var arr2str = function(arr) { + var CHUNK_SZ = 32768; + var strs = []; + for (var i4 = 0; i4 < arr.length; i4 += CHUNK_SZ) { + strs.push(String.fromCharCode.apply(null, arr.subarray(i4, i4 + CHUNK_SZ))); + } + return strs.join(""); +}; +function decode2(buf, fromCharset) { + if (fromCharset === void 0) { + fromCharset = "utf-8"; + } + var charsets = [ + { charset: normalizeCharset(fromCharset), fatal: false }, + { charset: "utf-8", fatal: true }, + { charset: "iso-8859-15", fatal: false } + ]; + for (var _i = 0, charsets_1 = charsets; _i < charsets_1.length; _i++) { + var _a = charsets_1[_i], charset = _a.charset, fatal = _a.fatal; + try { + return new import_text_encoding.TextDecoder(charset, { fatal }).decode(buf); + } catch (e3) { + } + } + return arr2str(buf); +} +var convert = function(data, fromCharset) { + return typeof data === "string" ? encode2(data) : encode2(decode2(data, fromCharset)); +}; +function normalizeCharset(charset) { + if (charset === void 0) { + charset = "utf-8"; + } + var match; + if (match = charset.match(/^utf[-_]?(\d+)$/i)) { + return "UTF-" + match[1]; + } + if (match = charset.match(/^win[-_]?(\d+)$/i)) { + return "WINDOWS-" + match[1]; + } + if (match = charset.match(/^latin[-_]?(\d+)$/i)) { + return "ISO-8859-" + match[1]; + } + return charset; +} +function getCharsetName(charset) { + return charset.toLowerCase().replace(/[^0-9a-z]/g, ""); +} +function guid() { + return "xxxxxxxxxxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c4) { + var r3 = Math.random() * 16 | 0, v3 = c4 == "x" ? r3 : r3 & 3 | 8; + return v3.toString(16); + }).replace("-", ""); +} +function wrap2(s4, i4) { + var a3 = []; + do { + a3.push(s4.substring(0, i4)); + } while ((s4 = s4.substring(i4, s4.length)) != ""); + return a3.join("\r\n"); +} +function mimeDecode(str, fromCharset) { + if (str === void 0) { + str = ""; + } + if (fromCharset === void 0) { + fromCharset = "UTF-8"; + } + var encodedBytesCount = (str.match(/=[\da-fA-F]{2}/g) || []).length; + var buffer = new Uint8Array(str.length - encodedBytesCount * 2); + for (var i4 = 0, len = str.length, bufferPos = 0; i4 < len; i4++) { + var hex = str.substr(i4 + 1, 2); + var chr = str.charAt(i4); + if (chr === "=" && hex && /[\da-fA-F]{2}/.test(hex)) { + buffer[bufferPos++] = parseInt(hex, 16); + i4 += 2; + } else { + buffer[bufferPos++] = chr.charCodeAt(0); + } + } + return decode2(buffer, fromCharset); +} +var GB2312UTF8 = { + Dig2Dec: function(s) { + var retV = 0; + if (s.length == 4) { + for (var i = 0; i < 4; i++) { + retV += eval(s.charAt(i)) * Math.pow(2, 3 - i); + } + return retV; + } + return -1; + }, + Hex2Utf8: function(s) { + var retS = ""; + var tempS = ""; + var ss = ""; + if (s.length == 16) { + tempS = "1110" + s.substring(0, 4); + tempS += "10" + s.substring(4, 10); + tempS += "10" + s.substring(10, 16); + var sss = "0123456789ABCDEF"; + for (var i = 0; i < 3; i++) { + retS += "%"; + ss = tempS.substring(i * 8, (eval(i.toString()) + 1) * 8); + retS += sss.charAt(this.Dig2Dec(ss.substring(0, 4))); + retS += sss.charAt(this.Dig2Dec(ss.substring(4, 8))); + } + return retS; + } + return ""; + }, + Dec2Dig: function(n1) { + var s4 = ""; + var n22 = 0; + for (var i4 = 0; i4 < 4; i4++) { + n22 = Math.pow(2, 3 - i4); + if (n1 >= n22) { + s4 += "1"; + n1 = n1 - n22; + } else { + s4 += "0"; + } + } + return s4; + }, + Str2Hex: function(s) { + var c = ""; + var n; + var ss = "0123456789ABCDEF"; + var digS = ""; + for (var i = 0; i < s.length; i++) { + c = s.charAt(i); + n = ss.indexOf(c); + digS += this.Dec2Dig(eval(n.toString())); + } + return digS; + }, + GB2312ToUTF8: function(s1) { + var s4 = escape(s1); + var sa = s4.split("%"); + var retV2 = ""; + if (sa[0] != "") { + retV2 = sa[0]; + } + for (var i4 = 1; i4 < sa.length; i4++) { + if (sa[i4].substring(0, 1) == "u") { + retV2 += this.Hex2Utf8(this.Str2Hex(sa[i4].substring(1, 5))); + if (sa[i4].length) { + retV2 += sa[i4].substring(5); + } + } else { + retV2 += unescape("%" + sa[i4]); + if (sa[i4].length) { + retV2 += sa[i4].substring(5); + } + } + } + return retV2; + }, + UTF8ToGB2312: function(str1) { + var substr = ""; + var a3 = ""; + var b3 = ""; + var c4 = ""; + var i4 = -1; + i4 = str1.indexOf("%"); + if (i4 == -1) { + return str1; + } + while (i4 != -1) { + if (i4 < 3) { + substr = substr + str1.substr(0, i4 - 1); + str1 = str1.substr(i4 + 1, str1.length - i4); + a3 = str1.substr(0, 2); + str1 = str1.substr(2, str1.length - 2); + if ((parseInt("0x" + a3) & 128) === 0) { + substr = substr + String.fromCharCode(parseInt("0x" + a3)); + } else if ((parseInt("0x" + a3) & 224) === 192) { + b3 = str1.substr(1, 2); + str1 = str1.substr(3, str1.length - 3); + var widechar = (parseInt("0x" + a3) & 31) << 6; + widechar = widechar | parseInt("0x" + b3) & 63; + substr = substr + String.fromCharCode(widechar); + } else { + b3 = str1.substr(1, 2); + str1 = str1.substr(3, str1.length - 3); + c4 = str1.substr(1, 2); + str1 = str1.substr(3, str1.length - 3); + var widechar = (parseInt("0x" + a3) & 15) << 12; + widechar = widechar | (parseInt("0x" + b3) & 63) << 6; + widechar = widechar | parseInt("0x" + c4) & 63; + substr = substr + String.fromCharCode(widechar); + } + } else { + substr = substr + str1.substring(0, i4); + str1 = str1.substring(i4); + } + i4 = str1.indexOf("%"); + } + return substr + str1; + } +}; +var verbose = false; +var defaultCharset = "utf-8"; +function createBoundary() { + return "----=" + guid(); +} +function toEmailAddress(data) { + var email = ""; + if (typeof data === "undefined") + ; + else if (typeof data === "string") { + email = data; + } else if (typeof data === "object") { + if (Array.isArray(data)) { + email += data.map(function(item) { + var str = ""; + if (item.name) { + str += '"' + item.name.replace(/^"|"\s*$/g, "") + '" '; + } + if (item.email) { + str += "<" + item.email + ">"; + } + return str; + }).filter(function(a3) { + return a3; + }).join(", "); + } else { + if (data) { + if (data.name) { + email += '"' + data.name.replace(/^"|"\s*$/g, "") + '" '; + } + if (data.email) { + email += "<" + data.email + ">"; + } + } + } + } + return email; +} +function getBoundary(contentType) { + var match = /boundary="?(.+?)"?(\s*;[\s\S]*)?$/g.exec(contentType); + return match ? match[1] : void 0; +} +function getCharset(contentType) { + var match = /charset\s*=\W*([\w\-]+)/g.exec(contentType); + return match ? match[1] : void 0; +} +function getEmailAddress(raw) { + var list = []; + var parts = raw.match(/('[^']*')|[^,]+/g); + if (!parts) { + return list; + } + for (var i4 = 0; i4 < parts.length; i4++) { + var address = { + name: "", + email: "" + }; + var partsStr = unquoteString(parts[i4]); + if (/^'.*'$/g.test(partsStr)) { + address.name = partsStr.replace(/'/g, "").trim(); + i4++; + } + var regex = /^(.*?)(\s*\<(.*?)\>)$/g; + var match = regex.exec(partsStr); + if (match) { + var name = match[1].replace(/'/g, "").trim(); + if (name && name.length) { + address.name = name; + } + address.email = match[3].trim(); + list.push(address); + } else { + address.email = partsStr.trim(); + list.push(address); + } + } + if (list.length === 0) { + return null; + } + if (list.length === 1) { + return list[0]; + } + return list; +} +function decodeJoint(str) { + var match = /=\?([^?]+)\?(B|Q)\?(.+?)(\?=)/gi.exec(str); + if (match) { + var charset = getCharsetName(match[1] || defaultCharset); + var type2 = match[2].toUpperCase(); + var value = match[3]; + if (type2 === "B") { + if (charset === "utf8") { + return decode2(encode2(gBase64.fromBase64(value.replace(/\r?\n/g, ""))), "utf8"); + } else { + return decode2(gBase64.toUint8Array(value.replace(/\r?\n/g, "")), charset); + } + } else if (type2 === "Q") { + return unquotePrintable(value, charset, true); + } + } + return str; +} +function unquoteString(str) { + var regex = /=\?([^?]+)\?(B|Q)\?(.+?)(\?=)/gi; + var decodedString = str || ""; + var spinOffMatch = decodedString.match(regex); + if (spinOffMatch) { + spinOffMatch.forEach(function(spin) { + decodedString = decodedString.replace(spin, decodeJoint(spin)); + }); + } + return decodedString.replace(/\r?\n/g, ""); +} +function unquotePrintable(value, charset, qEncoding) { + if (qEncoding === void 0) { + qEncoding = false; + } + var rawString = value.replace(/[\t ]+$/gm, "").replace(/=(?:\r?\n|$)/g, ""); + if (qEncoding) { + rawString = rawString.replace(/_/g, decode2(new Uint8Array([32]), charset)); + } + return mimeDecode(rawString, charset); +} +function parse(eml, options, callback) { + if (typeof options === "function" && typeof callback === "undefined") { + callback = options; + options = null; + } + if (typeof options !== "object") { + options = { headersOnly: false }; + } + var error; + var result = {}; + try { + if (typeof eml !== "string") { + throw new Error('Argument "eml" expected to be string!'); + } + var lines = eml.split(/\r?\n/); + result = parseRecursive(lines, 0, result, options); + } catch (e3) { + error = e3; + } + callback && callback(error, result); + return error || result || new Error("read EML failed!"); +} +function parseRecursive(lines, start, parent, options) { + var _a, _b, _c; + var boundary = null; + var lastHeaderName = ""; + var findBoundary = ""; + var insideBody = false; + var insideBoundary = false; + var isMultiHeader = false; + var isMultipart = false; + parent.headers = {}; + function complete(boundary2) { + boundary2.part = {}; + parseRecursive(boundary2.lines, 0, boundary2.part, options); + delete boundary2.lines; + } + for (var i4 = start; i4 < lines.length; i4++) { + var line = lines[i4]; + if (!insideBody) { + if (line == "") { + insideBody = true; + if (options && options.headersOnly) { + break; + } + var ct = parent.headers["Content-Type"]; + if (ct && /^multipart\//g.test(ct)) { + var b3 = getBoundary(ct); + if (b3 && b3.length) { + findBoundary = b3; + isMultipart = true; + parent.body = []; + } + } + continue; + } + var match = /^\s+([^\r\n]+)/g.exec(line); + if (match) { + if (isMultiHeader) { + parent.headers[lastHeaderName][parent.headers[lastHeaderName].length - 1] += "\r\n" + match[1]; + } else { + parent.headers[lastHeaderName] += "\r\n" + match[1]; + } + continue; + } + match = /^([\w\d\-]+):\s*([^\r\n]*)/gi.exec(line); + if (match) { + lastHeaderName = match[1]; + if (parent.headers[lastHeaderName]) { + isMultiHeader = true; + if (typeof parent.headers[lastHeaderName] == "string") { + parent.headers[lastHeaderName] = [parent.headers[lastHeaderName]]; + } + parent.headers[lastHeaderName].push(match[2]); + } else { + isMultiHeader = false; + parent.headers[lastHeaderName] = match[2]; + } + continue; + } + } else { + if (isMultipart) { + if (line.indexOf("--" + findBoundary) == 0 && !/\-\-(\r?\n)?$/g.test(line)) { + insideBoundary = true; + if (boundary && boundary.lines) { + complete(boundary); + } + var match = /^\-\-([^\r\n]+)(\r?\n)?$/g.exec(line); + boundary = { boundary: match[1], lines: [] }; + parent.body.push(boundary); + continue; + } + if (insideBoundary) { + if (((_a = boundary) === null || _a === void 0 ? void 0 : _a.boundary) && lines[i4 - 1] == "" && line.indexOf("--" + findBoundary + "--") == 0) { + insideBoundary = false; + complete(boundary); + continue; + } + if (((_b = boundary) === null || _b === void 0 ? void 0 : _b.boundary) && line.indexOf("--" + findBoundary + "--") == 0) { + continue; + } + (_c = boundary) === null || _c === void 0 ? void 0 : _c.lines.push(line); + } + } else { + parent.body = lines.splice(i4).join("\r\n"); + break; + } + } + } + if (parent.body && parent.body.length && parent.body[parent.body.length - 1].lines) { + complete(parent.body[parent.body.length - 1]); + } + return parent; +} +function completeBoundary(boundary) { + if (!boundary || !boundary.boundary) { + return null; + } + var lines = boundary.lines || []; + var result = { + boundary: boundary.boundary, + part: { + headers: {} + } + }; + var lastHeaderName = ""; + var insideBody = false; + var childBoundary; + for (var index = 0; index < lines.length; index++) { + var line = lines[index]; + if (!insideBody) { + if (line === "") { + insideBody = true; + continue; + } + var match = /^([\w\d\-]+):\s*([^\r\n]*)/gi.exec(line); + if (match) { + lastHeaderName = match[1]; + result.part.headers[lastHeaderName] = match[2]; + continue; + } + var lineMatch = /^\s+([^\r\n]+)/g.exec(line); + if (lineMatch) { + result.part.headers[lastHeaderName] += "\r\n" + lineMatch[1]; + continue; + } + } else { + var match = /^\-\-([^\r\n]+)(\r?\n)?$/g.exec(line); + var childBoundaryStr = getBoundary(result.part.headers["Content-Type"] || result.part.headers["Content-type"]); + if (match && line.indexOf("--" + childBoundaryStr) === 0 && !childBoundary) { + childBoundary = { boundary: match ? match[1] : "", lines: [] }; + continue; + } else if (!!childBoundary && childBoundary.boundary) { + if (lines[index - 1] === "" && line.indexOf("--" + childBoundary.boundary) === 0) { + var child = completeBoundary(childBoundary); + if (child) { + if (Array.isArray(result.part.body)) { + result.part.body.push(child); + } else { + result.part.body = [child]; + } + } else { + result.part.body = childBoundary.lines.join("\r\n"); + } + if (!!lines[index + 1]) { + childBoundary.lines = []; + continue; + } + if (line.indexOf("--" + childBoundary.boundary + "--") === 0 && lines[index + 1] === "") { + childBoundary = void 0; + break; + } + } + childBoundary.lines.push(line); + } else { + result.part.body = lines.splice(index).join("\r\n"); + break; + } + } + } + return result; +} +function build(data, options, callback) { + if (typeof options === "function" && typeof callback === "undefined") { + callback = options; + options = null; + } + var error; + var eml = ""; + var EOL = "\r\n"; + try { + if (!data) { + throw new Error('Argument "data" expected to be an object! or string'); + } + if (typeof data === "string") { + var readResult = read(data); + if (typeof readResult === "string") { + throw new Error(readResult); + } else if (readResult instanceof Error) { + throw readResult; + } else { + data = readResult; + } + } + if (!data.headers) { + throw new Error('Argument "data" expected to be has headers'); + } + if (typeof data.subject === "string") { + data.headers["Subject"] = data.subject; + } + if (typeof data.from !== "undefined") { + data.headers["From"] = toEmailAddress(data.from); + } + if (typeof data.to !== "undefined") { + data.headers["To"] = toEmailAddress(data.to); + } + if (typeof data.cc !== "undefined") { + data.headers["Cc"] = toEmailAddress(data.cc); + } + var emlBoundary = getBoundary(data.headers["Content-Type"] || data.headers["Content-type"] || ""); + var hasBoundary = false; + var boundary = createBoundary(); + var multipartBoundary = ""; + if (data.multipartAlternative) { + multipartBoundary = "" + (getBoundary(data.multipartAlternative["Content-Type"]) || ""); + hasBoundary = true; + } + if (emlBoundary) { + boundary = emlBoundary; + hasBoundary = true; + } else { + data.headers["Content-Type"] = data.headers["Content-type"] || "multipart/mixed;" + EOL + 'boundary="' + boundary + '"'; + } + var keys2 = Object.keys(data.headers); + for (var i4 = 0; i4 < keys2.length; i4++) { + var key = keys2[i4]; + var value = data.headers[key]; + if (typeof value === "undefined") { + continue; + } else if (typeof value === "string") { + eml += key + ": " + value.replace(/\r?\n/g, EOL + " ") + EOL; + } else { + for (var j4 = 0; j4 < value.length; j4++) { + eml += key + ": " + value[j4].replace(/\r?\n/g, EOL + " ") + EOL; + } + } + } + if (data.multipartAlternative) { + eml += EOL; + eml += "--" + emlBoundary + EOL; + eml += "Content-Type: " + data.multipartAlternative["Content-Type"].replace(/\r?\n/g, EOL + " ") + EOL; + } + eml += EOL; + if (data.text) { + if (typeof options === "object" && !!options && options.encode && data.textheaders) { + eml += "--" + boundary + EOL; + for (var key in data.textheaders) { + if (data.textheaders.hasOwnProperty(key)) { + eml += key + ": " + data.textheaders[key].replace(/\r?\n/g, EOL + " "); + } + } + } else if (hasBoundary) { + eml += "--" + (multipartBoundary ? multipartBoundary : boundary) + EOL; + eml += 'Content-Type: text/plain; charset="utf-8"' + EOL; + } + eml += EOL + data.text; + eml += EOL; + } + if (data.html) { + if (typeof options === "object" && !!options && options.encode && data.textheaders) { + eml += "--" + boundary + EOL; + for (var key in data.textheaders) { + if (data.textheaders.hasOwnProperty(key)) { + eml += key + ": " + data.textheaders[key].replace(/\r?\n/g, EOL + " "); + } + } + } else if (hasBoundary) { + eml += "--" + (multipartBoundary ? multipartBoundary : boundary) + EOL; + eml += 'Content-Type: text/html; charset="utf-8"' + EOL; + } + if (verbose) { + console.info("line 765 " + hasBoundary + ", emlBoundary: " + emlBoundary + ", multipartBoundary: " + multipartBoundary + ", boundary: " + boundary); + } + eml += EOL + data.html; + eml += EOL; + } + if (data.attachments) { + for (var i4 = 0; i4 < data.attachments.length; i4++) { + var attachment = data.attachments[i4]; + eml += "--" + boundary + EOL; + eml += "Content-Type: " + (attachment.contentType.replace(/\r?\n/g, EOL + " ") || "application/octet-stream") + EOL; + eml += "Content-Transfer-Encoding: base64" + EOL; + eml += "Content-Disposition: " + (attachment.inline ? "inline" : "attachment") + '; filename="' + (attachment.filename || attachment.name || "attachment_" + (i4 + 1)) + '"' + EOL; + if (attachment.cid) { + eml += "Content-ID: <" + attachment.cid + ">" + EOL; + } + eml += EOL; + if (typeof attachment.data === "string") { + var content = gBase64.toBase64(attachment.data); + eml += wrap2(content, 72) + EOL; + } else { + var content = decode2(attachment.data); + eml += wrap2(content, 72) + EOL; + } + eml += EOL; + } + } + if (hasBoundary) { + eml += "--" + boundary + "--" + EOL; + } + } catch (e3) { + error = e3; + } + callback && callback(error, eml); + return error || eml; +} +function read(eml, options, callback) { + if (typeof options === "function" && typeof callback === "undefined") { + callback = options; + options = null; + } + var error; + var result; + function _append(headers, content, result2) { + var contentType = headers["Content-Type"] || headers["Content-type"]; + var contentDisposition = headers["Content-Disposition"]; + var charset = getCharsetName(getCharset(contentType) || defaultCharset); + var encoding = headers["Content-Transfer-Encoding"] || headers["Content-transfer-encoding"]; + if (typeof encoding === "string") { + encoding = encoding.toLowerCase(); + } + if (encoding === "base64") { + if (contentType && contentType.indexOf("gbk") >= 0) { + content = encode2(GB2312UTF8.GB2312ToUTF8(content.replace(/\r?\n/g, ""))); + } else { + content = encode2(content.replace(/\r?\n/g, "")); + } + } else if (encoding === "quoted-printable") { + content = unquotePrintable(content, charset); + } else if (encoding && charset !== "utf8" && encoding.search(/binary|8bit/) === 0) { + content = decode2(content, charset); + } + if (!contentDisposition && contentType && contentType.indexOf("text/html") >= 0) { + if (typeof content !== "string") { + content = decode2(content, charset); + } + var htmlContent = content.replace(/\r\n|(")/g, "").replace(/\"/g, '"'); + try { + if (encoding === "base64") { + htmlContent = gBase64.decode(htmlContent); + } else if (gBase64.btoa(gBase64.atob(htmlContent)) == htmlContent) { + htmlContent = gBase64.atob(htmlContent); + } + } catch (error2) { + console.error(error2); + } + if (result2.html) { + result2.html += htmlContent; + } else { + result2.html = htmlContent; + } + result2.htmlheaders = { + "Content-Type": contentType, + "Content-Transfer-Encoding": encoding || "" + }; + } else if (!contentDisposition && contentType && contentType.indexOf("text/plain") >= 0) { + if (typeof content !== "string") { + content = decode2(content, charset); + } + if (encoding === "base64") { + content = gBase64.decode(content); + } + if (result2.text) { + result2.text += content; + } else { + result2.text = content; + } + result2.textheaders = { + "Content-Type": contentType, + "Content-Transfer-Encoding": encoding || "" + }; + } else { + if (!result2.attachments) { + result2.attachments = []; + } + var attachment = {}; + var id = headers["Content-ID"] || headers["Content-Id"]; + if (id) { + attachment.id = id; + } + var NameContainer = ["Content-Disposition", "Content-Type", "Content-type"]; + var result_name = void 0; + for (var _i = 0, NameContainer_1 = NameContainer; _i < NameContainer_1.length; _i++) { + var key = NameContainer_1[_i]; + var name = headers[key]; + if (name) { + result_name = name.replace(/(\s|'|utf-8|\*[0-9]\*)/g, "").split(";").map(function(v3) { + return /name[\*]?="?(.+?)"?$/gi.exec(v3); + }).reduce(function(a3, b3) { + if (b3 && b3[1]) { + a3 += b3[1]; + } + return a3; + }, ""); + if (result_name) { + break; + } + } + } + if (result_name) { + attachment.name = decodeURI(result_name); + } + var ct = headers["Content-Type"] || headers["Content-type"]; + if (ct) { + attachment.contentType = ct; + } + var cd = headers["Content-Disposition"]; + if (cd) { + attachment.inline = /^\s*inline/g.test(cd); + } + attachment.data = content; + attachment.data64 = decode2(content, charset); + result2.attachments.push(attachment); + } + } + function _read(data) { + if (!data) { + return "no data"; + } + try { + var result_1 = {}; + if (!data.headers) { + throw new Error("data does't has headers"); + } + if (data.headers["Date"]) { + result_1.date = new Date(data.headers["Date"]); + } + if (data.headers["Subject"]) { + result_1.subject = unquoteString(data.headers["Subject"]); + } + if (data.headers["From"]) { + result_1.from = getEmailAddress(data.headers["From"]); + } + if (data.headers["To"]) { + result_1.to = getEmailAddress(data.headers["To"]); + } + if (data.headers["CC"]) { + result_1.cc = getEmailAddress(data.headers["CC"]); + } + if (data.headers["Cc"]) { + result_1.cc = getEmailAddress(data.headers["Cc"]); + } + result_1.headers = data.headers; + var boundary = null; + var ct = data.headers["Content-Type"] || data.headers["Content-type"]; + if (ct && /^multipart\//g.test(ct)) { + var b3 = getBoundary(ct); + if (b3 && b3.length) { + boundary = b3; + } + } + if (boundary && Array.isArray(data.body)) { + for (var i4 = 0; i4 < data.body.length; i4++) { + var boundaryBlock = data.body[i4]; + if (!boundaryBlock) { + continue; + } + if (typeof boundaryBlock.part === "undefined") { + verbose && console.warn("Warning: undefined b.part"); + } else if (typeof boundaryBlock.part === "string") { + result_1.data = boundaryBlock.part; + } else { + if (typeof boundaryBlock.part.body === "undefined") { + verbose && console.warn("Warning: undefined b.part.body"); + } else if (typeof boundaryBlock.part.body === "string") { + _append(boundaryBlock.part.headers, boundaryBlock.part.body, result_1); + } else { + var currentHeaders = boundaryBlock.part.headers; + var currentHeadersContentType = currentHeaders["Content-Type"] || currentHeaders["Content-type"]; + if (verbose) { + console.log("line 969 currentHeadersContentType: " + currentHeadersContentType); + } + if (currentHeadersContentType && currentHeadersContentType.indexOf("multipart") >= 0 && !result_1.multipartAlternative) { + result_1.multipartAlternative = { + "Content-Type": currentHeadersContentType + }; + } + for (var j4 = 0; j4 < boundaryBlock.part.body.length; j4++) { + var selfBoundary = boundaryBlock.part.body[j4]; + if (typeof selfBoundary === "string") { + result_1.data = selfBoundary; + continue; + } + var headers = selfBoundary.part.headers; + var content = selfBoundary.part.body; + if (Array.isArray(content)) { + content.forEach(function(bound) { + _append(bound.part.headers, bound.part.body, result_1); + }); + } else { + _append(headers, content, result_1); + } + } + } + } + } + } else if (typeof data.body === "string") { + _append(data.headers, data.body, result_1); + } + return result_1; + } catch (e3) { + return e3; + } + } + if (typeof eml === "string") { + var parseResult = parse(eml, options); + if (typeof parseResult === "string" || parseResult instanceof Error) { + error = parseResult; + } else { + var readResult = _read(parseResult); + if (typeof readResult === "string" || readResult instanceof Error) { + error = readResult; + } else { + result = readResult; + } + } + } else if (typeof eml === "object") { + var readResult = _read(eml); + if (typeof readResult === "string" || readResult instanceof Error) { + error = readResult; + } else { + result = readResult; + } + } else { + error = new Error("Missing EML file content!"); + } + callback && callback(error, result); + return error || result || new Error("read EML failed!"); +} + +// src/utils.ts +var import_dayjs = __toESM(require_dayjs_min()); +var getMsgContent = async (params) => { + const { plugin, msgFile } = params; + if (msgFile.extension === "msg") { + let msgFileBuffer = await plugin.app.vault.readBinary(params.msgFile); + let msgReader = new import_msgreader.MSGReader(msgFileBuffer); + let fileData = msgReader.getFileData(); + let creationTime = getMsgDate({ rawHeaders: fileData.headers }); + return { + senderName: dataOrEmpty(fileData.senderName), + senderEmail: dataOrEmpty(fileData.senderEmail), + recipients: getCustomRecipients(fileData.recipients ? fileData.recipients : []), + creationTime: typeof creationTime === "string" ? creationTime : (0, import_dayjs.default)(creationTime).format("ddd, D MMM YYYY HH:mm:ss"), + subject: dataOrEmpty(fileData.subject), + body: dataOrEmpty(fileData.body), + attachments: extractMSGAttachments({ + msgReader, + fileDataAttachments: fileData.attachments + }) + }; + } else if (msgFile.extension === "eml") { + let readedEmlJson = await readEmlFile({ emlFile: msgFile, plugin }); + let sender = parseEmlSender({ senderText: readedEmlJson.headers.From }); + return { + senderName: sender.senderName, + senderEmail: sender.senderEmail, + recipients: parseEMLRecipients({ readEmlJson: readedEmlJson }), + creationTime: (0, import_dayjs.default)(readedEmlJson.date).format("ddd, D MMM YYYY HH:mm:ss"), + subject: dataOrEmpty(readedEmlJson.subject), + body: cleanEMLBody({ text: readedEmlJson.text }), + attachments: extractEMLAttachments({ emlFileReadJson: readedEmlJson }) + }; + } +}; +function parseHeaders(params) { + const { headers } = params; + var parsedHeaders = {}; + if (!headers) + return parsedHeaders; + var headerRegEx = /(.*)\: (.*)/g; + let m3; + while (m3 = headerRegEx.exec(headers)) { + parsedHeaders[m3[1]] = m3[2]; + } + return parsedHeaders; +} +function getMsgDate(params) { + const { rawHeaders } = params; + var headers = parseHeaders({ headers: rawHeaders }); + if (!headers["Date"]) { + return "-"; + } + return new Date(headers["Date"]); +} +var cleanEMLBody = (params) => { + if (!params.text) + return ""; + let cleanTxt = params.text.replace(/\r\n\r\n/g, "\r\n\r\n \r\n\r\n"); + const pattern = /\[cid:.*?\]/g; + return cleanTxt.replace(pattern, ""); +}; +var readEmlFile = async (params) => { + const { emlFile, plugin } = params; + let emlFileRead = await plugin.app.vault.read(emlFile); + return new Promise((resolve, reject) => { + read(emlFileRead, (err, ReadedEMLJson) => { + if (err) { + reject(err); + } else { + resolve(ReadedEMLJson); + } + }); + }); +}; +var parseEmlSender = (params) => { + let { senderText } = params; + if (senderText === "" || senderText === void 0 || senderText === null) { + return { senderName: "", senderEmail: "" }; + } + senderText = senderText.replace(/"/g, ""); + const regex = /^([^<]+) <([^>]+)>$/; + const match = regex.exec(senderText); + if (!match) + return { senderName: "", senderEmail: "" }; + const [, senderName, senderEmail] = match; + return { senderName, senderEmail }; +}; +var parseEMLRecipients = (params) => { + const { readEmlJson } = params; + let emlTo = dataOrEmpty(readEmlJson.headers.To); + let emlCC = dataOrEmpty(readEmlJson.headers.CC); + let recipientsText = emlTo + (emlCC === "" ? "" : ", " + emlCC); + let recipientsTextSplit = recipientsText.split(">,"); + const regex = /"([^"]+)"\s*\s]+)>?/; + let msgRecipients = []; + for (let recipientText of recipientsTextSplit) { + const match = recipientText.match(regex); + if (match) { + const name = match[1] || match[3]; + const email = match[2] || match[4]; + msgRecipients.push({ name, email }); + } + } + return msgRecipients; +}; +var extractMSGAttachments = (params) => { + const { msgReader, fileDataAttachments } = params; + let msgAttachments = []; + for (let [index, fileDataAttachment] of fileDataAttachments.entries()) { + let attRead = msgReader.getAttachment(index); + msgAttachments.push({ + fileName: attRead.fileName, + fileExtension: fileDataAttachment.extension, + fileBase64: attRead.content ? uint8ArrayToBase64(attRead.content) : null + }); + } + return msgAttachments; +}; +var extractEMLAttachments = (params) => { + const { emlFileReadJson } = params; + if (emlFileReadJson.attachments && emlFileReadJson.attachments.length > 0) { + let attachments = []; + for (let attachment of params.emlFileReadJson.attachments) { + let fileNameParts = attachment.name.split("."); + let extension = fileNameParts[fileNameParts.length - 1]; + attachments.push({ + fileName: attachment.name, + fileExtension: "." + extension, + fileBase64: attachment.data64 + }); + } + return attachments; + } else { + return []; + } +}; +var getCustomRecipients = (recipients) => { + if (recipients && recipients.length > 0) { + let customRecipients = []; + for (let recipient of recipients) { + customRecipients.push({ + name: dataOrEmpty(recipient.name), + email: dataOrEmpty(recipient.email) + }); + } + return customRecipients; + } else { + return []; + } +}; +var dataOrEmpty = (data) => { + return data ? data : ""; +}; +var replaceNewLinesAndCarriages = (txt) => { + return txt == null ? void 0 : txt.replace(/[\r\n]+/g, ""); +}; +var getFileName = (filePath) => { + var index = filePath.lastIndexOf("/"); + if (index !== -1) + return filePath.substring(index + 1); + return filePath; +}; +var openFile = (params) => { + const { file, plugin, newLeaf, leafBySplit } = params; + let leaf = plugin.app.workspace.getLeaf(newLeaf); + if (!newLeaf && leafBySplit) + leaf = plugin.app.workspace.createLeafBySplit(leaf, "vertical"); + plugin.app.workspace.setActiveLeaf(leaf, { focus: true }); + leaf.openFile(file, { eState: { focus: true } }); +}; +var openFileInNewTab = (params) => { + openFile({ file: params.file, plugin: params.plugin, newLeaf: true }); +}; +function isMouseEvent(e3) { + return e3 && "screenX" in e3; +} +function base64ToArrayBuffer(base64) { + var binary_string = window.atob(base64); + var len = binary_string.length; + var bytes = new Uint8Array(len); + for (var i4 = 0; i4 < len; i4++) { + bytes[i4] = binary_string.charCodeAt(i4); + } + return bytes; +} +function uint8ArrayToBase64(uint8Array) { + return gBase64.fromUint8Array(uint8Array); +} + +// src/database.ts +var import_fuzzysort = __toESM(require_fuzzysort()); +var MsgHandlerDatabase = class extends Dexie$1 { + constructor() { + super("MsgHandlerDatabase"); + this.version(1).stores({ + dbMessageContents: "++id, senderName, senderEmail, recipients, subject, body, &filePath, mtime" + }); + } +}; +var pluginDb = new MsgHandlerDatabase(); +var updateFilePathOfAllRecords = async (params) => { + const { oldValue, newValue } = params; + await pluginDb.dbMessageContents.where("filePath").equals(oldValue).modify({ + filePath: newValue + }); +}; +var getAllDBMessageContents = async () => { + return await pluginDb.dbMessageContents.toArray(); +}; +var getDBMessageContentsByPath = async (params) => { + const { filePath } = params; + return await pluginDb.dbMessageContents.where("filePath").equals(filePath).toArray(); +}; +var createDBMessageContent = async (params) => { + const { msgContent, file } = params; + await pluginDb.dbMessageContents.add({ + senderName: msgContent.senderName, + senderEmail: msgContent.senderEmail, + recipients: msgContent.recipients, + creationTime: msgContent.creationTime, + body: msgContent.body, + subject: msgContent.subject, + filePath: file.path, + mtime: file.stat.mtime + }); +}; +var deleteDBMessageContentById = async (params) => { + if (params.id) { + await pluginDb.dbMessageContents.delete(params.id); + } +}; +var syncDatabaseWithVaultFiles = async (params) => { + const { plugin } = params; + let msgFiles = plugin.app.vault.getFiles().filter((f3) => plugin.acceptedExtensions.contains(f3.extension)); + let dbMsgContents = await getAllDBMessageContents(); + for (let dbMsgContent of dbMsgContents) { + if (!msgFiles.some((f3) => f3.path == dbMsgContent.filePath)) { + await deleteDBMessageContentById({ id: dbMsgContent.id }); + } + } + for (let msgFile of msgFiles) { + if (!dbMsgContents.some((c4) => c4.filePath === msgFile.path)) { + let msgContent = await getMsgContent({ plugin, msgFile }); + await createDBMessageContent({ + msgContent, + file: msgFile + }); + } + } +}; +var searchMsgFilesWithKey = async (params) => { + let allDBMessageContents = await getAllDBMessageContents(); + let searchConvenientMessageContents = allDBMessageContents.map( + (messageContent) => ({ + ...messageContent, + recipients: messageContent.recipients.map((r3) => r3.name + " <" + r3.email + ">").join(", ") + }) + ); + const results = import_fuzzysort.default.go( + params.key, + searchConvenientMessageContents, + { + keys: ["senderName", "senderEmail", "subject", "body", "recipients"], + threshold: -2e4, + scoreFn: (a3) => { + var _a, _b, _c, _d, _e; + const searchKey = params.key.toLowerCase(); + const exactMatch = ((_a = a3[0]) == null ? void 0 : _a.target.toLowerCase().includes(searchKey)) || ((_b = a3[1]) == null ? void 0 : _b.target.toLowerCase().includes(searchKey)) || ((_c = a3[2]) == null ? void 0 : _c.target.toLowerCase().includes(searchKey)) || ((_d = a3[3]) == null ? void 0 : _d.target.toLowerCase().includes(searchKey)) || ((_e = a3[4]) == null ? void 0 : _e.target.toLowerCase().includes(searchKey)); + if (exactMatch) { + return 0; + } else { + let senderNameScore = a3[0] ? a3[0].score : -1e5; + let senderEmailScore = a3[1] ? a3[1].score : -1e5; + let subjectScore = a3[2] ? a3[2].score : -1e5; + let bodyScore = a3[3] ? a3[3].score : -1e5; + let recipientsScore = a3[4] ? a3[4].score : -1e5; + return Math.max(senderNameScore, senderEmailScore, subjectScore, bodyScore, recipientsScore); + } + } + } + ); + return results; +}; +var getHighlightedPartOfSearchResult = (params) => { + const { highlightedResult, searchKey } = params; + let maxSearchDisplayLength = 120; + if (highlightedResult.length < maxSearchDisplayLength) { + return highlightedResult; + } else { + const firstMarkIndex = highlightedResult.indexOf(''); + const lastMarkIndex = highlightedResult.lastIndexOf(""); + if (firstMarkIndex === -1 || lastMarkIndex === -1) + return highlightedResult; + const searchKeyLength = searchKey.length; + const lengthAfterHighlight = highlightedResult.length - (lastMarkIndex + 7); + const leftUsageLength = maxSearchDisplayLength - searchKeyLength; + const eachSideUsageLength = Math.floor(leftUsageLength / 2); + let startIndex = 0; + let startMissing = 0; + if (firstMarkIndex > eachSideUsageLength) { + startIndex = firstMarkIndex - eachSideUsageLength; + } else { + startMissing = eachSideUsageLength - firstMarkIndex; + } + let endIndex = highlightedResult.length - 1; + if (lengthAfterHighlight > eachSideUsageLength) { + endIndex = lastMarkIndex + 7 + eachSideUsageLength; + let endLeftPlace = highlightedResult.length - 1 - endIndex; + if (endLeftPlace > startMissing) { + endIndex += startMissing; + } else { + endIndex = highlightedResult.length - 1; + } + } else { + let endMissing = eachSideUsageLength - lengthAfterHighlight; + if (endMissing > 0) { + if (startIndex > endMissing) { + startIndex = startIndex - endMissing; + } else { + startIndex = 0; + } + } + } + return "..." + highlightedResult.substring(startIndex, endIndex) + "..."; + } +}; + +// src/components/search/index.tsx +var import_obsidian2 = require("obsidian"); +function SearchViewComponent(params) { + const { plugin } = params; + const [searchKey, setSearchKey] = p2(); + const [searchResults, setSearchResults] = p2(); + const [allOpenStatus, setAllOpenStatus] = p2(); + const promiseQueueRef = _2([]); + h2(() => { + const runPromiseQueue = async () => { + while (promiseQueueRef.current.length > 0) { + const nextPromise = promiseQueueRef.current[0]; + try { + await nextPromise(); + } catch (error) { + if (plugin.settings.logEnabled) + console.log("Search promise failed", error); + } finally { + promiseQueueRef.current.shift(); + } + } + }; + if (searchKey === "" || searchKey === null || searchKey === void 0) { + setSearchResults(null); + } else { + promiseQueueRef.current.push(runSearch); + runPromiseQueue(); + } + }, [searchKey]); + const handleInputChange = (event) => { + const newSearchKey = event.target.value; + setSearchKey(newSearchKey); + }; + const runSearch = async () => { + let currentSearchResults = []; + let results = await searchMsgFilesWithKey({ key: searchKey }); + for (let result of results) { + let indexOfMaxScore = null; + let exactMatch = false; + const exactMatchIndex = result.findIndex( + (r3) => r3 == null ? void 0 : r3.target.toLowerCase().includes(searchKey.toLowerCase()) + ); + if (exactMatchIndex !== -1) { + indexOfMaxScore = exactMatchIndex; + exactMatch = true; + } else { + const scores = result.map((r3) => { + var _a; + return (_a = r3 == null ? void 0 : r3.score) != null ? _a : -1e5; + }); + indexOfMaxScore = scores.reduce( + (maxIndex, score, index) => score > scores[maxIndex] ? index : maxIndex, + 0 + ); + } + let highlightedResult = null; + if (exactMatch) { + let indexOfSearchMatch = result[indexOfMaxScore].target.toLowerCase().indexOf(searchKey.toLowerCase()); + let lengthOfSearchKey = searchKey.length; + let originalTextOfSearchKey = result[indexOfMaxScore].target.substring( + indexOfSearchMatch, + indexOfSearchMatch + lengthOfSearchKey + ); + highlightedResult = result[indexOfMaxScore].target.replace( + originalTextOfSearchKey, + '' + originalTextOfSearchKey + "" + ); + } else { + highlightedResult = import_fuzzysort2.default.highlight( + result[indexOfMaxScore], + '', + "" + ); + } + if (highlightedResult) { + highlightedResult = getHighlightedPartOfSearchResult({ + highlightedResult: replaceNewLinesAndCarriages(highlightedResult), + searchKey + }); + } + currentSearchResults.push({ + result, + highlightedResult + }); + } + setSearchResults(currentSearchResults); + }; + return /* @__PURE__ */ Sn.createElement("div", null, /* @__PURE__ */ Sn.createElement("div", { className: "oz-msg-handler-actions-items oz-msg-handler-header-fixed" }, /* @__PURE__ */ Sn.createElement( + CgChevronDoubleUp, + { + className: "oz-msg-handler-action-button", + "aria-label": "Collapse All", + onClick: () => setAllOpenStatus("closed"), + size: 20 + } + ), /* @__PURE__ */ Sn.createElement( + CgChevronDoubleDown, + { + className: "oz-msg-handler-action-button", + "aria-label": "Expand All", + onClick: () => setAllOpenStatus("open"), + size: 20 + } + )), /* @__PURE__ */ Sn.createElement("div", { className: "oz-searchbox-container" }, /* @__PURE__ */ Sn.createElement( + "input", + { + type: "text", + placeholder: "Provide a search key", + value: searchKey, + onChange: handleInputChange + } + )), /* @__PURE__ */ Sn.createElement("div", { className: "search-result-container" }, searchResults && (searchResults.length > 0 ? searchResults.map((searchResult) => { + return /* @__PURE__ */ Sn.createElement( + SearchResultFileMatch, + { + searchResult, + allOpenStatus, + plugin + } + ); + }) : /* @__PURE__ */ Sn.createElement("div", { className: "search-empty-state" }, "No matches found")))); +} +var SearchResultFileMatch = (params) => { + var _a; + const { searchResult, allOpenStatus, plugin } = params; + const [open, setOpen] = p2(true); + h2(() => { + if (allOpenStatus === "open") { + setOpen(true); + } else if (allOpenStatus === "closed") { + setOpen(false); + } + }, [allOpenStatus]); + const getCurrentAbstractFile = () => { + return plugin.app.vault.getAbstractFileByPath(searchResult.result.obj.filePath); + }; + const openFileClicked = (e3) => { + let file = getCurrentAbstractFile(); + if (file) { + openFile({ + file, + plugin, + newLeaf: (e3.ctrlKey || e3.metaKey) && !(e3.shiftKey || e3.altKey), + leafBySplit: (e3.ctrlKey || e3.metaKey) && (e3.shiftKey || e3.altKey) + }); + } + }; + const onAuxClick = (e3) => { + let file = getCurrentAbstractFile(); + if (e3.button === 1 && file) + openFileInNewTab({ plugin, file }); + }; + const triggerContextMenu = (e3) => { + const fileMenu = new import_obsidian2.Menu(); + const filePath = searchResult.result.obj.filePath; + const file = plugin.app.vault.getAbstractFileByPath(filePath); + if (file) { + plugin.app.workspace.trigger("file-menu", fileMenu, file, "file-explorer"); + if (isMouseEvent) { + fileMenu.showAtPosition({ x: e3.pageX, y: e3.pageY }); + } + } + }; + return /* @__PURE__ */ Sn.createElement("div", { key: searchResult.result.obj.filePath, className: "tree-item search-result" }, /* @__PURE__ */ Sn.createElement("div", { className: "tree-item-self search-result-file-title is-clickable" }, /* @__PURE__ */ Sn.createElement("div", { className: "tree-item-icon collapse-icon" }, open ? /* @__PURE__ */ Sn.createElement(MdKeyboardArrowDown, { onClick: () => setOpen(false) }) : /* @__PURE__ */ Sn.createElement(MdKeyboardArrowRight, { onClick: () => setOpen(true) })), /* @__PURE__ */ Sn.createElement( + "div", + { + className: "tree-item-inner", + onClick: openFileClicked, + onAuxClick, + onContextMenu: triggerContextMenu + }, + getFileName(searchResult.result.obj.filePath) + )), open && ((_a = searchResult.highlightedResult) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */ Sn.createElement("div", { className: "search-result-file-matches" }, /* @__PURE__ */ Sn.createElement( + "div", + { + className: "search-result-file-match", + onClick: openFileClicked, + dangerouslySetInnerHTML: { __html: searchResult.highlightedResult } + } + ))); +}; + +// node_modules/react-icons/hi/index.esm.js +function HiChevronDoubleLeft(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 20 20", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "fillRule": "evenodd", "d": "M15.707 15.707a1 1 0 01-1.414 0l-5-5a1 1 0 010-1.414l5-5a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 010 1.414zm-6 0a1 1 0 01-1.414 0l-5-5a1 1 0 010-1.414l5-5a1 1 0 011.414 1.414L5.414 10l4.293 4.293a1 1 0 010 1.414z", "clipRule": "evenodd" } }] })(props2); +} +function HiChevronDoubleRight(props2) { + return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 20 20", "fill": "currentColor" }, "child": [{ "tag": "path", "attr": { "fillRule": "evenodd", "d": "M10.293 15.707a1 1 0 010-1.414L14.586 10l-4.293-4.293a1 1 0 111.414-1.414l5 5a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0z", "clipRule": "evenodd" } }, { "tag": "path", "attr": { "fillRule": "evenodd", "d": "M4.293 15.707a1 1 0 010-1.414L8.586 10 4.293 5.707a1 1 0 011.414-1.414l5 5a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0z", "clipRule": "evenodd" } }] })(props2); +} + +// src/modals.ts +var import_obsidian3 = require("obsidian"); +var FolderToSaveSuggestionModal = class extends import_obsidian3.FuzzySuggestModal { + constructor(app, fileToSave, fileName) { + super(app); + this.fileName = fileName; + if (typeof fileToSave === "string") { + fileToSave = base64ToArrayBuffer(fileToSave); + } + this.fileToSave = fileToSave; + } + getItemText(item) { + return item.path; + } + getItems() { + return getAllFoldersInVault(this.app); + } + onChooseItem(item, evt) { + this.app.vault.createBinary(item.path + "/" + this.fileName, this.fileToSave); + } +}; +function getAllFoldersInVault(app) { + let folders = []; + let rootFolder = app.vault.getRoot(); + folders.push(rootFolder); + function recursiveFx(folder) { + for (let child of folder.children) { + if (child instanceof import_obsidian3.TFolder) { + let childFolder = child; + folders.push(childFolder); + if (childFolder.children) + recursiveFx(childFolder); + } + } + } + recursiveFx(rootFolder); + return folders; +} + +// src/components/renderer/index.tsx +function RendererViewComponent(params) { + const { plugin, fileToRender } = params; + const [messageContent, setMessageContent] = p2(); + h2(() => { + getMsgContent({ plugin, msgFile: fileToRender }).then((msgContent) => { + setMessageContent(msgContent); + }); + }, []); + return messageContent && /* @__PURE__ */ Sn.createElement(Sn.Fragment, null, /* @__PURE__ */ Sn.createElement(MSGHeaderComponent, { messageContent }), /* @__PURE__ */ Sn.createElement(MSGBodyComponent, { messageContent }), messageContent.attachments.length > 0 && /* @__PURE__ */ Sn.createElement(MSGAttachmentsComponent, { messageAttachments: messageContent.attachments, plugin })); +} +var MSGHeaderComponent = (params) => { + const { messageContent } = params; + const [open, setOpen] = p2(true); + const toggleOpen = () => setOpen(!open); + return /* @__PURE__ */ Sn.createElement(Sn.Fragment, null, /* @__PURE__ */ Sn.createElement("h3", { onClick: toggleOpen, className: "oz-cursor-pointer oz-msg-header-name" }, /* @__PURE__ */ Sn.createElement(ToggleIndicator, { open }), "Message Header"), open && /* @__PURE__ */ Sn.createElement("div", { className: "oz-msg-handler-header" }, /* @__PURE__ */ Sn.createElement("strong", null, "From"), ": ", messageContent.senderName, " <", /* @__PURE__ */ Sn.createElement( + "a", + { + "aria-label": "mailTo:" + messageContent.senderEmail, + href: "mailTo:" + messageContent.senderEmail, + target: "_blank", + className: "external-link", + rel: "noopener" + }, + messageContent.senderEmail + ), ">", /* @__PURE__ */ Sn.createElement("br", null), /* @__PURE__ */ Sn.createElement("strong", null, "Recipients"), ": ", /* @__PURE__ */ Sn.createElement(RecipientList, { recipients: messageContent.recipients }), " ", /* @__PURE__ */ Sn.createElement("br", null), /* @__PURE__ */ Sn.createElement("strong", null, "Sent"), ": ", messageContent.creationTime, " ", /* @__PURE__ */ Sn.createElement("br", null), /* @__PURE__ */ Sn.createElement("strong", null, "Subject"), ": ", messageContent.subject)); +}; +var MSGBodyComponent = (params) => { + const { messageContent } = params; + const cleanMsgBody = (txt) => txt.replace(/[\r\n]+/g, "
"); + const [open, setOpen] = p2(true); + const toggleOpen = () => setOpen(!open); + return /* @__PURE__ */ Sn.createElement(Sn.Fragment, null, /* @__PURE__ */ Sn.createElement("h3", { onClick: toggleOpen, className: "oz-cursor-pointer oz-msg-attachments-body-name" }, /* @__PURE__ */ Sn.createElement(ToggleIndicator, { open }), "Message Body"), open && /* @__PURE__ */ Sn.createElement( + "div", + { + className: "oz-msg-handler-body", + dangerouslySetInnerHTML: { __html: cleanMsgBody(messageContent.body) } + } + )); +}; +var MSGAttachmentsComponent = (params) => { + const { messageAttachments, plugin } = params; + const [open, setOpen] = p2(true); + const toggleOpen = () => setOpen(!open); + return /* @__PURE__ */ Sn.createElement(Sn.Fragment, null, /* @__PURE__ */ Sn.createElement("h3", { onClick: toggleOpen, className: "oz-cursor-pointer oz-msg-attachments-header-name" }, /* @__PURE__ */ Sn.createElement(ToggleIndicator, { open }), "Attachments"), open && /* @__PURE__ */ Sn.createElement("div", { className: "oz-msg-handler-attachments" }, messageAttachments.map((attachment) => { + return /* @__PURE__ */ Sn.createElement( + MSGSingleAttachmentComponent, + { + key: attachment.fileName, + messageAttachment: attachment, + plugin + } + ); + }))); +}; +var MSGSingleAttachmentComponent = (params) => { + const { messageAttachment, plugin } = params; + const [open, setOpen] = p2(false); + const toggleOpen = () => setOpen(!open); + const saveFileToVault = () => { + let modal = new FolderToSaveSuggestionModal( + plugin.app, + messageAttachment.fileBase64, + messageAttachment.fileName + ); + modal.open(); + }; + const imgExtensions = [".png", "png", ".jpg", "jpg", ".jpeg", "jpeg"]; + return /* @__PURE__ */ Sn.createElement("div", { className: "oz-msg-single-attachment-wrapper" }, /* @__PURE__ */ Sn.createElement("div", { onClick: toggleOpen, className: "oz-cursor-pointer oz-msg-attachment-name" }, imgExtensions.includes(messageAttachment.fileExtension) ? /* @__PURE__ */ Sn.createElement(ToggleIndicator, { open }) : /* @__PURE__ */ Sn.createElement(MdClose, { className: "msg-handler-react-icon" }), messageAttachment.fileName, /* @__PURE__ */ Sn.createElement("button", { onClick: saveFileToVault }, "Save File to Vault")), open && /* @__PURE__ */ Sn.createElement("div", { className: "oz-msg-attachment-display" }, imgExtensions.includes(messageAttachment.fileExtension) && /* @__PURE__ */ Sn.createElement("img", { src: `data:image/jpeg;base64,${messageAttachment.fileBase64}` }))); +}; +var RecipientList = (params) => { + const { recipients } = params; + const [open, setOpen] = p2(); + const moreThanOneRecipient = recipients.length > 1; + h2(() => setOpen(!moreThanOneRecipient), []); + return /* @__PURE__ */ Sn.createElement(Sn.Fragment, null, moreThanOneRecipient && (open ? /* @__PURE__ */ Sn.createElement( + HiChevronDoubleLeft, + { + className: "msg-handler-react-icon", + onClick: () => setOpen(false), + size: "18" + } + ) : /* @__PURE__ */ Sn.createElement( + HiChevronDoubleRight, + { + className: "msg-handler-react-icon", + onClick: () => setOpen(true), + size: "18" + } + )), open && recipients.map((recipient) => { + return /* @__PURE__ */ Sn.createElement("span", { id: recipient.email }, recipient.name, " <", /* @__PURE__ */ Sn.createElement( + "a", + { + "aria-label": "mailTo:" + recipient.email, + href: "mailTo:" + recipient.email, + target: "_blank", + className: "external-link", + rel: "noopener" + }, + recipient.email + ), ">", recipients.length > 1 ? "; " : ""); + })); +}; +var ToggleIndicator = (params) => { + const { open } = params; + return open ? /* @__PURE__ */ Sn.createElement(MdKeyboardArrowDown, { className: "msg-handler-react-icon" }) : /* @__PURE__ */ Sn.createElement(MdKeyboardArrowRight, { className: "msg-handler-react-icon" }); +}; + +// src/view.tsx +var renderMsgFileToElement = async (params) => { + const { msgFile, targetEl, plugin } = params; + return new Promise((resolve, reject) => { + Sn.render( + /* @__PURE__ */ Sn.createElement("div", { className: "msg-handler-plugin-renderer" }, /* @__PURE__ */ Sn.createElement(RendererViewComponent, { plugin, fileToRender: msgFile })), + targetEl, + () => resolve() + ); + }); +}; +var RENDER_VIEW_TYPE = "msg-handler-view"; +var MsgHandlerView = class extends import_obsidian4.FileView { + constructor(leaf, plugin) { + super(leaf); + this.plugin = plugin; + } + getViewType() { + return RENDER_VIEW_TYPE; + } + destroy() { + Sn.unmountComponentAtNode(this.contentEl); + } + async onLoadFile(file) { + this.constructMessageRenderView({ fileToRender: file }); + this.fileToRender = file; + } + async constructMessageRenderView(params) { + this.destroy(); + await renderMsgFileToElement({ + msgFile: params.fileToRender, + targetEl: this.contentEl, + plugin: this.plugin + }); + } + async onClose() { + this.plugin.cleanLoadedBlobs({ all: false, forMsgFile: this.fileToRender }); + } + async onUnloadFile(file) { + this.contentEl.innerHTML = ""; + super.onUnloadFile(file); + } +}; +var SEARCH_VIEW_DISPLAY_TEXT = "MSG Handler Search"; +var SEARCH_VIEW_TYPE = "msg-handler-search-view"; +var ICON = "MSG_HANDLER_ENVELOPE_ICON"; +var MsgHandlerSearchView = class extends import_obsidian4.ItemView { + constructor(leaf, plugin) { + super(leaf); + this.plugin = plugin; + } + getViewType() { + return SEARCH_VIEW_TYPE; + } + getDisplayText() { + return SEARCH_VIEW_DISPLAY_TEXT; + } + getIcon() { + return ICON; + } + destroy() { + Sn.unmountComponentAtNode(this.contentEl); + } + async onClose() { + this.destroy(); + } + async onOpen() { + this.destroy(); + this.constructMsgSearchView(); + } + constructMsgSearchView() { + this.destroy(); + Sn.render( + /* @__PURE__ */ Sn.createElement("div", { className: "msg-handler-plugin-search" }, /* @__PURE__ */ Sn.createElement(SearchViewComponent, { plugin: this.plugin })), + this.contentEl + ); + } +}; + +// src/icons.ts +var MSG_HANDLER_ENVELOPE_ICON = ``; + +// src/settings.ts +var import_obsidian5 = require("obsidian"); +var DEFAULT_SETTINGS = { + searchEnabled: true, + logEnabled: false +}; +var MSGHandlerPluginSettingsTab = class extends import_obsidian5.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + const tipDiv = containerEl.createDiv("tip"); + tipDiv.addClass("oz-msg-handler-tip-div"); + const tipLink = tipDiv.createEl("a", { href: "https://revolut.me/ozante" }); + const tipImg = tipLink.createEl("img", { + attr: { + src: "https://raw.githubusercontent.com/ozntel/file-tree-alternative/main/images/tip%20the%20artist_v2.png" + } + }); + tipImg.height = 55; + const coffeeDiv = containerEl.createDiv("coffee"); + coffeeDiv.addClass("oz-msg-handler-coffee-div"); + const coffeeLink = coffeeDiv.createEl("a", { href: "https://ko-fi.com/L3L356V6Q" }); + const coffeeImg = coffeeLink.createEl("img", { + attr: { + src: "https://cdn.ko-fi.com/cdn/kofi2.png?v=3" + } + }); + coffeeImg.height = 45; + let headerSettings = containerEl.createEl("h1"); + headerSettings.innerText = "MSG Handler Settings"; + new import_obsidian5.Setting(containerEl).setName("MSG Search View").setDesc("Turn on if you want automatically to be opened Search View after each vault/plugin refresh").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.searchEnabled).onChange((value) => { + this.plugin.settings.searchEnabled = value; + this.plugin.saveSettings(); + if (value) { + this.plugin.openMsgHandlerSearchLeaf({ showAfterAttach: true }); + } else { + this.plugin.detachMsgHandlerSearchLeaf(); + } + }) + ); + new import_obsidian5.Setting(containerEl).setName("Plugin Logs in Console").setDesc("Turn on if you want to see the plugin logs within the console for actions").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.logEnabled).onChange((value) => { + this.plugin.settings.logEnabled = value; + this.plugin.saveSettings(); + }) + ); + } +}; + +// src/main.ts +var MsgHandlerPlugin = class extends import_obsidian6.Plugin { + constructor() { + super(...arguments); + this.acceptedExtensions = ["msg", "eml"]; + this.ribbonIconEl = void 0; + // @API - SHARED WITH OZAN'S IMAGE IN EDITOR - DO NOT CHANGE OR SYNC BEFORE + this.renderMSG = async (params) => { + const { msgFile, targetEl } = params; + await renderMsgFileToElement({ + msgFile, + targetEl, + plugin: this + }); + }; + // @API - SHARED WITH OZAN'S IMAGE IN EDITOR - DO NOT CHANGE OR SYNC BEFORE + this.cleanLoadedBlobs = (params) => { + }; + this.openMsgHandlerSearchLeaf = async (params) => { + const { showAfterAttach } = params; + let leafs = this.app.workspace.getLeavesOfType(SEARCH_VIEW_TYPE); + if (leafs.length === 0) { + let leaf = this.app.workspace.getLeftLeaf(false); + await leaf.setViewState({ type: SEARCH_VIEW_TYPE }); + if (showAfterAttach) + this.app.workspace.revealLeaf(leaf); + } else { + if (showAfterAttach && leafs.length > 0) { + this.app.workspace.revealLeaf(leafs[0]); + } + } + }; + this.detachMsgHandlerSearchLeaf = () => { + let leafs = this.app.workspace.getLeavesOfType(SEARCH_VIEW_TYPE); + for (let leaf of leafs) { + leaf.view.destroy(); + leaf.detach(); + } + }; + this.registerMsgExtensionView = () => { + try { + this.registerExtensions(this.acceptedExtensions, RENDER_VIEW_TYPE); + } catch (err) { + if (this.settings.logEnabled) + console.log("Msg file extension renderer was already registered"); + } + }; + /* --------------- EVENT HANDLERS FOR VAULT FILE CHANGES -------------- */ + /** + * This function is created to handle "create" event for vault + * @param file + */ + this.handleFileCreate = async (file) => { + if (this.acceptedExtensions.contains(file.extension)) { + let dbMsgContents = await getDBMessageContentsByPath({ filePath: file.path }); + if (dbMsgContents.length === 0) { + let msgContent = await getMsgContent({ plugin: this, msgFile: file }); + createDBMessageContent({ + msgContent, + file + }); + if (this.settings.logEnabled) + console.log(`DB Index Record is created for ${file.path}`); + } + } + }; + /** + * This function is created to handle "delete" event for vault + * @param file + */ + this.handleFileDelete = async (file) => { + if (this.acceptedExtensions.contains(file.extension)) { + let dbMsgContents = await getDBMessageContentsByPath({ filePath: file.path }); + if (dbMsgContents.length > 0) { + for (let dbMsgContent of dbMsgContents) { + await deleteDBMessageContentById({ id: dbMsgContent.id }); + if (this.settings.logEnabled) + console.log(`DB Index Record is deleted for ${file.path}`); + } + } + } + }; + /** + * This function is created to handle "rename" event for vault + * @param file + * @param oldPath + */ + this.handleFileRename = async (file, oldPath) => { + await updateFilePathOfAllRecords({ oldValue: oldPath, newValue: file.path }); + if (this.settings.logEnabled) + console.log(`DB Index Record is updated for ${file.path}`); + }; + } + async onload() { + (0, import_obsidian6.addIcon)(ICON, MSG_HANDLER_ENVELOPE_ICON); + this.addSettingTab(new MSGHandlerPluginSettingsTab(this.app, this)); + await this.loadSettings(); + this.registerView(RENDER_VIEW_TYPE, (leaf) => { + return new MsgHandlerView(leaf, this); + }); + this.registerView(SEARCH_VIEW_TYPE, (leaf) => { + return new MsgHandlerSearchView(leaf, this); + }); + this.registerMsgExtensionView(); + this.app.workspace.onLayoutReady(() => { + syncDatabaseWithVaultFiles({ plugin: this }).then(() => { + if (this.settings.logEnabled) + console.log("Vault DB Sync is completed for MSG Files"); + }); + this.openMsgHandlerSearchLeaf({ showAfterAttach: false }); + }); + this.registerMarkdownPostProcessor((el, ctx) => { + let msgElement = el.querySelector('.internal-embed[src$=".eml"]') || el.querySelector('.internal-embed[src$=".msg"]'); + if (msgElement) { + let src = msgElement.getAttribute("src"); + if (src) { + let msgFile = this.app.metadataCache.getFirstLinkpathDest(src, ctx.sourcePath); + if (msgFile) { + let parentMsgElement = msgElement.parentElement; + msgElement.remove(); + let wrapperDiv = parentMsgElement.createEl("div"); + wrapperDiv.addClass("oz-msg-handler-preview-render"); + this.renderMSG({ + msgFile, + targetEl: wrapperDiv + }); + } + } + } + }); + this.addCommand({ + id: "reveal-msg-handler-search-leaf", + name: "Reveal Search Leaf", + callback: () => { + this.openMsgHandlerSearchLeaf({ showAfterAttach: true }); + } + }); + this.app.vault.on("create", this.handleFileCreate); + this.app.vault.on("delete", this.handleFileDelete); + this.app.vault.on("rename", this.handleFileRename); + this.ribbonIconEl = this.addRibbonIcon(ICON, "MSG Handler", async () => { + await this.openMsgHandlerSearchLeaf({ showAfterAttach: true }); + }); + } + onunload() { + this.app.vault.off("create", this.handleFileCreate); + this.app.vault.off("delete", this.handleFileDelete); + this.app.vault.off("rename", this.handleFileRename); + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } +}; diff --git a/.obsidian/plugins/msg-handler/manifest.json b/.obsidian/plugins/msg-handler/manifest.json new file mode 100644 index 00000000..b7c75bf6 --- /dev/null +++ b/.obsidian/plugins/msg-handler/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "msg-handler", + "name": "MSG Handler", + "version": "0.0.6", + "minAppVersion": "0.15.0", + "description": "Easily display and search MSG files from Outlook in your Obsidian Vault", + "author": "Ozan Tellioglu", + "authorUrl": "https://www.ozan.pl", + "fundingUrl": "https://ko-fi.com/ozante", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/msg-handler/styles.css b/.obsidian/plugins/msg-handler/styles.css new file mode 100644 index 00000000..4026cb17 --- /dev/null +++ b/.obsidian/plugins/msg-handler/styles.css @@ -0,0 +1,142 @@ +.workspace-leaf-content[data-type='msg-handler-view'] { + user-select: text; + padding-left: 5px; + padding-right: 5px; + padding-top: 5px; +} + +.oz-msg-handler-body, +.oz-msg-handler-header, +.oz-msg-handler-attachments { + padding: 14px; + width: 100%; + border-radius: 7px; + background-color: var(--background-secondary); +} + +.msg-handler-plugin-search .search-result-file-matches { + padding: 5px; +} + +.msg-handler-plugin-search .search-result-container { + padding-left: 0px; + padding-right: 0px; +} + +.oz-msg-handler-body, +.oz-msg-handler-header { + margin-bottom: 10px; +} + +.workspace-leaf-content[data-type='msg-handler-view'] .external-link { + text-decoration: none; + color: var(--text-muted); +} + +.workspace-leaf-content[data-type='msg-handler-view'] p { + margin: 5px 0px 5px 0px; +} + +.MSG_HANDLER_ENVELOPE_ICON { + fill: var(--icon-color) !important; +} + +.oz-highlight { + background-color: yellow; + border: 0.5px solid black; +} + +.oz-searchbox-container, +.oz-searchbox-container input { + width: 100%; +} + +.oz-msg-handler-actions-items { + text-align: center; + padding: 3px 2px 0px 2px; + background-color: var(--background-secondary-alt); + margin-bottom: 7px; + border-radius: 5px; +} + +.oz-msg-handler-header-fixed { + position: sticky; + top: 0; + padding-left: 4px; + padding-right: 4px; + z-index: 100; +} + +.oz-msg-handler-action-button { + color: var(--text-muted); + display: inline-block; + padding: 0px 0px 0px 2px; + margin-left: 5px; + opacity: 0.5; + border-radius: 8px; + opacity: 1; +} + +.oz-msg-handler-action-button:hover { + opacity: 0.6; +} + +.oz-msg-handler-action-button svg { + vertical-align: middle !important; +} + +.msg-handler-react-icon { + vertical-align: middle !important; + padding-bottom: 2px; +} + +.msg-handler-react-icon:hover { + opacity: 0.6; + cursor: pointer; +} + +.workspace-tab-header.is-active[aria-label='MSG Handler Search'] svg { + fill: var(--icon-color-focused); +} + +.oz-cursor-pointer { + cursor: pointer; +} + +.oz-attachment-display { + margin-top: 10px; +} + +.oz-msg-attachment-name button { + cursor: pointer; + margin-left: 14px; + padding-top: 0px; + padding-bottom: 0px; +} + +.oz-msg-single-attachment-wrapper { + margin-top: 3px; +} + +.oz-msg-header-name, +.oz-msg-attachments-header-name, +.oz-msg-attachments-body-name { + color: var(--text-muted); +} + +.oz-msg-handler-coffee-div, +.oz-msg-handler-tip-div { + text-align: center; + margin-top: 10px; +} + +.oz-msg-handler-tip-div img { + border-radius: 10px; +} + +.oz-msg-handler-preview-render { + max-height: 400px; + overflow: scroll; + border-left: var(--embed-border-left); + padding: var(--embed-padding); +} diff --git a/.obsidian/plugins/obsidian-activity-history/data.json b/.obsidian/plugins/obsidian-activity-history/data.json index fabd335d..c7903de8 100644 --- a/.obsidian/plugins/obsidian-activity-history/data.json +++ b/.obsidian/plugins/obsidian-activity-history/data.json @@ -13,7 +13,7 @@ { "path": "/", "date": "2023-03-05", - "size": 13360303 + "size": 13589806 } ], "activityHistory": [ @@ -1698,7 +1698,7 @@ }, { "date": "2023-03-05", - "value": 6715 + "value": 236302 } ] } diff --git a/.obsidian/plugins/obsidian-commits/data.json b/.obsidian/plugins/obsidian-commits/data.json index 1b37f559..1f81ed96 100644 --- a/.obsidian/plugins/obsidian-commits/data.json +++ b/.obsidian/plugins/obsidian-commits/data.json @@ -4090,7 +4090,7 @@ "links": 3 }, "00.08 Bookmarks/Bookmarks - Selfhosted Apps.md": { - "size": 5350, + "size": 6237, "tags": 0, "links": 3 }, @@ -4725,7 +4725,7 @@ "links": 26 }, "00.08 Bookmarks/Bookmarks - Travels & Sport.md": { - "size": 896, + "size": 2158, "tags": 0, "links": 5 }, @@ -8668,14 +8668,49 @@ "size": 942, "tags": 2, "links": 1 + }, + "00.01 Admin/Calendars/2023-03-05.md": { + "size": 1412, + "tags": 0, + "links": 4 + }, + "00.03 News/How the Biggest Fraud in German History Unravelled.md": { + "size": 70511, + "tags": 3, + "links": 1 + }, + "00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md": { + "size": 37665, + "tags": 3, + "links": 1 + }, + "00.03 News/Sanctuary.md": { + "size": 66414, + "tags": 3, + "links": 1 + }, + "00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md": { + "size": 45813, + "tags": 5, + "links": 1 + }, + "05.01 Computer setup/Metamask.md": { + "size": 1472, + "tags": 0, + "links": 2 + }, + "01.02 Home/Entertainment.md": { + "size": 4678, + "tags": 5, + "links": 3 } }, "commitTypes": { "/": { - "Refactor": 2665, - "Create": 1531, - "Link": 3703, - "Expand": 1522 + "Refactor": 2673, + "Create": 1539, + "Link": 3718, + "Expand": 1531 } }, "dailyCommits": { @@ -8689,14 +8724,14 @@ "6": 59, "7": 536, "8": 762, - "9": 662, + "9": 664, "10": 483, "11": 385, "12": 340, "13": 407, - "14": 373, - "15": 393, - "16": 491, + "14": 392, + "15": 404, + "16": 499, "17": 537, "18": 739, "19": 461, @@ -8714,12 +8749,21 @@ "Thu": 815, "Fri": 872, "Sat": 0, - "Sun": 3200 + "Sun": 3240 } }, "recentCommits": { "/": { "Expanded": [ + " Entertainment ", + " Entertainment ", + " Entertainment ", + " Metamask ", + " Metamask ", + " Metamask ", + " Bookmarks - Travels & Sport ", + " Sport ", + " Bookmarks - Selfhosted Apps ", " 2023-03-04 PSG - FC Nantes ", " 2023-03-03 ", " 2023-05-27 London ", @@ -8761,18 +8805,17 @@ " Miami ", " Miami ", " 2023-12-27 Miami ", - " 2023-12-27 Miami ", - " Miami ", - " Miami ", - " 2023-12-27 Miami ", - " Lennox ", - " Meatballs with Crispy Turmeric Chickpeas ", - " Togetherness ", - " 2023-02-15 ", - " 2023-02-14 Bayern - PSG ", - " 2023-02-24 Meggi's Birthday weekend in Milan " + " 2023-12-27 Miami " ], "Created": [ + " Untitled ", + " Untitled ", + " Untitled ", + " US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel ", + " Sanctuary ", + " EVT Will Save Millions of Lives From Stroke. Eventually. ", + " How the Biggest Fraud in German History Unravelled ", + " 2023-03-05 ", " Casita Andina ", " Providores ", " Le Ballroom du Beef Club ", @@ -8815,17 +8858,16 @@ " Citizen Kane (1941) ", " Untitled ", " 2023-03-11 Marg & Arnold à Zürich ", - " ‘Call Me a Scammer to My Face’ ", - " Gary Gensler on Meeting With SBF and His Crypto Crackdown ", - " 2023-02-24 ", - " Europe is turning its back on British tourists – and it’s class based ", - "", - " Untitled ", - " 2023-02-23 ", - " 2023-02-28 Dinner Birthday Meg ", - " 2023-02-25 Scan " + " ‘Call Me a Scammer to My Face’ " ], "Renamed": [ + " Entertainment ", + " Metamask ", + " Sport ", + " US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel ", + " Sanctuary ", + " EVT Will Save Millions of Lives From Stroke. Eventually. ", + " How the Biggest Fraud in German History Unravelled ", " 2023-03-04 PSG - FC Nantes (4-2) ", " Life After Food ", " George Santos, MAGA ‘It’ Girl ", @@ -8869,16 +8911,15 @@ " Lentil Soup with Sausage, Chard and Garlic ", " Lentil Soup with Sausage, Chard and Garlic ", " Meatballs with Crispy Turmeric Chickpeas ", - " Meatballs with Crispy Turmeric Chickpeas ", - " Japanese Curry With Winter Squash and Mushrooms ", - " Matar Paneer ", - " Matar Paneer ", - " Cauliflower Salad with Dates and Pistachios ", - " cauliflower salad with dates and pistachios ", - " Togetherness ", - " Crime of the Centuries " + " Meatballs with Crispy Turmeric Chickpeas " ], "Tagged": [ + " Entertainment ", + " Sport ", + " US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel ", + " Sanctuary ", + " How the Biggest Fraud in German History Unravelled ", + " EVT Will Save Millions of Lives From Stroke. Eventually. ", " Say Nothing ", " Andy Wahlou ", " Le Ballroom du Beef Club ", @@ -8923,13 +8964,7 @@ " Cauliflower Salad with Dates and Pistachios ", " Togetherness ", " Crime of the Centuries ", - " Creamy Mushroom & Rice Soup ", - " Churros with Bittersweet Chocolate Sauce ", - " Creamy Tuscan Chicken ", - " What Was Kyrie Irving Thinking ", - " 49ers legend Joe Montana reflects on legacy ahead of Super Bowl ", - " What Was Kyrie Irving Thinking ", - " Rihanna’s Halftime Show Was More Than Enough " + " Creamy Mushroom & Rice Soup " ], "Refactored": [ " Japanese Souffle Pancakes ", @@ -8985,6 +9020,7 @@ " Server Cloud " ], "Deleted": [ + " Sport ", " Untitled ", " 2023-02-22 A ", " 2023-02-22 Test ", @@ -9034,10 +9070,18 @@ " How a New Anti-Woke Bank Stumbled ", " Test note ", " Buttons 1.0 is Coming ", - " Empire of Pain ", - " The Wembanyama Effect How the buzz about Victor will influence NBA tanking and front office thinking this season " + " Empire of Pain " ], "Linked": [ + " Entertainment ", + " Entertainment ", + " Metamask ", + " Sport ", + " US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel ", + " Sanctuary ", + " How the Biggest Fraud in German History Unravelled ", + " EVT Will Save Millions of Lives From Stroke. Eventually. ", + " 2023-03-05 ", " 2023-12-31 2024 New Year's Eve ", " 2023-01-06 Chateauroux - PSG ", " 2023-09-08 Trip to NYC ", @@ -9079,16 +9123,7 @@ " 2023-02-26 France - Scotland (32-21) ", " 2023-02-26 France - Scotland ", " Ian Fishback’s American Nightmare ", - " The Great Dumpling Drama of Glendale, California ", - " The Dystopian Underworld of South Africa’s Illegal Gold Mines ", - " The Secret Weapons of Ukraine ", - " 2023-02-26 ", - " 2023-02-25 ", - " The Tragedy of the Spice King ", - " 2023-02-25 ", - " 2023-02-25 ", - " 2023-02-24 ", - " No Country for Old Men (2007) " + " The Great Dumpling Drama of Glendale, California " ], "Removed Tags from": [ " ‘Incredibly intelligent, highly elusive’ US faces new threat from Canadian ‘super pig’ ", diff --git a/.obsidian/plugins/obsidian-reminder-plugin/data.json b/.obsidian/plugins/obsidian-reminder-plugin/data.json index f40b24db..1a1116f8 100644 --- a/.obsidian/plugins/obsidian-reminder-plugin/data.json +++ b/.obsidian/plugins/obsidian-reminder-plugin/data.json @@ -37,12 +37,12 @@ { "title": ":heavy_dollar_sign: [[hLedger]]: Update Price file %%done_del%%", "time": "2023-04-07", - "rowNumber": 416 + "rowNumber": 418 }, { "title": ":heavy_dollar_sign: [[hLedger]]: Update current ledger %%done_del%%", "time": "2023-04-07", - "rowNumber": 417 + "rowNumber": 419 } ], "05.02 Networks/Server Cloud.md": [ @@ -530,7 +530,7 @@ { "title": ":label: [[Bookmarks - Selfhosted apps]]: Review bookmarks", "time": "2023-05-22", - "rowNumber": 196 + "rowNumber": 207 } ], "00.08 Bookmarks/Bookmarks - Utilities.md": [ @@ -590,7 +590,7 @@ { "title": ":label: [[Bookmarks - Travels & Sport]]: review bookmarks", "time": "2023-12-23", - "rowNumber": 82 + "rowNumber": 126 } ], "00.08 Bookmarks/Bookmarks - Webpages.md": [ @@ -732,13 +732,6 @@ "rowNumber": 103 } ], - "00.01 Admin/Calendars/2023-02-17.md": [ - { - "title": "17:33 👰‍♀️ [[2023-02-17|Memo]]: Répondre à l'invitation de marige de JB & Camila", - "time": "2023-03-04", - "rowNumber": 103 - } - ], "00.01 Admin/Calendars/2023-02-18.md": [ { "title": "18:18 :crocodile: [[2023-02-18|Memo]], [[Miami]]: Book a NYE party", @@ -776,6 +769,58 @@ "time": "2023-03-31", "rowNumber": 106 } + ], + "01.02 Home/Entertainment.md": [ + { + "title": "🎼 [[Entertainment]]: **Max Bruch**, Concerto pour violon 1", + "time": "2023-06-30", + "rowNumber": 54 + }, + { + "title": "🎼 [[Entertainment]]: **Louis Moreau Gottschalk**, La nuit des tropiques de la symphonie romantique", + "time": "2023-06-30", + "rowNumber": 55 + }, + { + "title": "🎼 [[Entertainment]]: **GF Handel**, L’Allegro il Penseroso ed il Moderato", + "time": "2023-06-30", + "rowNumber": 56 + }, + { + "title": "🎼 [[Entertainment]]: **Jacques Offenbach**, Le couplet des rois de La Belle Hélène", + "time": "2023-06-30", + "rowNumber": 57 + }, + { + "title": "🎼 [[Entertainment]]: **Richard Strauss**, Also Sprach Zarathustra", + "time": "2023-06-30", + "rowNumber": 58 + }, + { + "title": "🎼 [[Entertainment]]: **Carl Off**, O Fortuna", + "time": "2023-06-30", + "rowNumber": 59 + }, + { + "title": "🎬 [[Entertainment]]: More American Graffiti", + "time": "2023-06-30", + "rowNumber": 65 + }, + { + "title": "🎬 [[Entertainment]]: African territory", + "time": "2023-06-30", + "rowNumber": 66 + }, + { + "title": "📺 [[Entertainment]]: Friends", + "time": "2023-06-30", + "rowNumber": 67 + }, + { + "title": "📺 [[Entertainment]]: How I Met Your Mother", + "time": "2023-06-30", + "rowNumber": 68 + } ] }, "debug": false, diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 66e15393..392129e4 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,16 +1,64 @@ { "recentFiles": [ + { + "basename": "2023-03-05", + "path": "00.01 Admin/Calendars/2023-03-05.md" + }, { "basename": "@Main Dashboard", "path": "01.02 Home/@Main Dashboard.md" }, { - "basename": "2023-03-04", - "path": "00.01 Admin/Calendars/2023-03-04.md" + "basename": "2023-12-27 Miami", + "path": "00.01 Admin/Calendars/Events/2023-12-27 Miami.md" }, { - "basename": "2023-03-05", - "path": "00.01 Admin/Calendars/2023-03-05.md" + "basename": "VPS Console Dialogue", + "path": "05.02 Networks/VPS Console Dialogue.md" + }, + { + "basename": "Entertainment", + "path": "01.02 Home/Entertainment.md" + }, + { + "basename": "Metamask", + "path": "05.01 Computer setup/Metamask.md" + }, + { + "basename": "Bookmarks - Travels & Sport", + "path": "00.08 Bookmarks/Bookmarks - Travels & Sport.md" + }, + { + "basename": "Bookmarks - Selfhosted Apps", + "path": "00.08 Bookmarks/Bookmarks - Selfhosted Apps.md" + }, + { + "basename": "hLedger", + "path": "06.01 Finances/hLedger.md" + }, + { + "basename": "2023-03-06 Médecin", + "path": "00.01 Admin/Calendars/Events/2023-03-06 Médecin.md" + }, + { + "basename": "US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel", + "path": "00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md" + }, + { + "basename": "Sanctuary", + "path": "00.03 News/Sanctuary.md" + }, + { + "basename": "EVT Will Save Millions of Lives From Stroke. Eventually.", + "path": "00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md" + }, + { + "basename": "How the Biggest Fraud in German History Unravelled", + "path": "00.03 News/How the Biggest Fraud in German History Unravelled.md" + }, + { + "basename": "2023-03-04", + "path": "00.01 Admin/Calendars/2023-03-04.md" }, { "basename": "Server Tools", diff --git a/.obsidian/workspace-mobile.json b/.obsidian/workspace-mobile.json index 1733928c..77a27ad3 100644 --- a/.obsidian/workspace-mobile.json +++ b/.obsidian/workspace-mobile.json @@ -49,7 +49,7 @@ "state": { "type": "markdown", "state": { - "file": "01.02 Home/@Main Dashboard.md", + "file": "00.01 Admin/Calendars/2023-03-05.md", "mode": "preview", "source": false } @@ -136,6 +136,14 @@ "type": "recent-files", "state": {} } + }, + { + "id": "c470e450373ee8d6", + "type": "leaf", + "state": { + "type": "msg-handler-search-view", + "state": {} + } } ], "currentTab": 0 @@ -150,7 +158,7 @@ "state": { "type": "backlink", "state": { - "file": "01.02 Home/@Main Dashboard.md", + "file": "00.01 Admin/Calendars/2023-03-05.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -167,7 +175,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "01.02 Home/@Main Dashboard.md", + "file": "00.01 Admin/Calendars/2023-03-05.md", "linksCollapsed": false, "unlinkedCollapsed": false } @@ -240,14 +248,28 @@ "markdown-importer:Open format converter": false, "audio-recorder:Start/stop recording": false, "obsidian-media-db-plugin:Add new Media DB entry": false, - "obsidian-memos:Memos": false + "obsidian-memos:Memos": false, + "msg-handler:MSG Handler": false } }, "active": "017a2190e40afd0b", "lastOpenFiles": [ - "00.01 Admin/Calendars/2023-03-04.md", - "00.01 Admin/Calendars/2023-03-05.md", "01.02 Home/@Main Dashboard.md", + "00.01 Admin/Calendars/Events/2023-12-27 Miami.md", + "05.02 Networks/VPS Console Dialogue.md", + "01.02 Home/Entertainment.md", + "00.01 Admin/Calendars/2023-03-05.md", + "05.01 Computer setup/Metamask.md", + "00.08 Bookmarks/Bookmarks - Travels & Sport.md", + "01.02 Home/Sport.md", + "00.08 Bookmarks/Bookmarks - Selfhosted Apps.md", + "06.01 Finances/hLedger.md", + "00.01 Admin/Calendars/Events/2023-03-06 Médecin.md", + "00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md", + "00.03 News/Sanctuary.md", + "00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md", + "00.03 News/How the Biggest Fraud in German History Unravelled.md", + "00.01 Admin/Calendars/2023-03-04.md", "05.02 Networks/Server Tools.md", "00.01 Admin/Calendars/Events/2023-03-04 PSG - FC Nantes (4-2).md", "02.02 Paris/Paris SG.md", @@ -257,19 +279,6 @@ "01.02 Home/@Shopping list.md", "00.01 Admin/Calendars/Events/2023-02-24 Meggi's Birthday weekend in Milan.md", "05.02 Networks/Configuring Docker.md", - "00.01 Admin/Calendars/Events/2023-12-27 Miami.md", - "04.03 Creative snippets/Working note - Project 1.md", - "00.01 Admin/Calendars/Events/2023-05-27 London.md", - "00.03 News/George Santos, MAGA ‘It’ Girl.md", - "00.01 Admin/Calendars/2023-03-02.md", - "05.02 Networks/Configuring Postfix.md", - "05.02 Networks/Configuring Monit.md", - "03.04 Cinematheque/@Cinematheque.md", - "05.02 Networks/VPS Console Dialogue.md", - "00.02 Inbox/Untitled.md", - "05.02 Networks/Configuring UFW.md", - "05.02 Networks/Selfhosting.md", - "02.02 Paris/@Restaurants Paris.md", - "02.02 Paris/Alluma.md" + "04.03 Creative snippets/Working note - Project 1.md" ] } \ No newline at end of file diff --git a/00.01 Admin/Calendars/2023-02-17.md b/00.01 Admin/Calendars/2023-02-17.md index 4af0abc1..0b7bfab3 100644 --- a/00.01 Admin/Calendars/2023-02-17.md +++ b/00.01 Admin/Calendars/2023-02-17.md @@ -101,7 +101,7 @@ hide task count This section does serve for quick memos.   -- [ ] 17:33 👰‍♀️ [[2023-02-17|Memo]]: Répondre à l'invitation de marige de JB & Camila 📅2023-03-04 +- [x] 17:33 👰‍♀️ [[2023-02-17|Memo]]: Répondre à l'invitation de marige de JB & Camila 📅 2023-03-04 ✅ 2023-03-05 %% --- %% diff --git a/00.01 Admin/Calendars/2023-03-05.md b/00.01 Admin/Calendars/2023-03-05.md index 15062805..a0cd3aee 100644 --- a/00.01 Admin/Calendars/2023-03-05.md +++ b/00.01 Admin/Calendars/2023-03-05.md @@ -16,8 +16,8 @@ Stress: 27.5 FrontHeadBar: 5 EarHeadBar: 35 BackHeadBar: 20 -Water: -Coffee: +Water: 1.8 +Coffee: 1 Steps: Weight: Ski: diff --git a/00.01 Admin/Calendars/Events/2023-03-06 Médecin.md b/00.01 Admin/Calendars/Events/2023-03-06 Médecin.md index d13ecfec..15962633 100644 --- a/00.01 Admin/Calendars/Events/2023-03-06 Médecin.md +++ b/00.01 Admin/Calendars/Events/2023-03-06 Médecin.md @@ -1,5 +1,4 @@ --- - title: 🩺 Médecin allDay: false startTime: 15:00 @@ -7,5 +6,4 @@ endTime: 15:30 date: 2023-03-06 completed: null CollapseMetaTable: true - --- diff --git a/00.01 Admin/Calendars/Events/2023-03-09 🩺 Médecin.md b/00.01 Admin/Calendars/Events/2023-03-09 🩺 Médecin.md new file mode 100644 index 00000000..16e6d8ba --- /dev/null +++ b/00.01 Admin/Calendars/Events/2023-03-09 🩺 Médecin.md @@ -0,0 +1,8 @@ +--- +title: 🩺 Médecin +allDay: false +startTime: 12:15 +endTime: 12:45 +date: 2023-03-09 +completed: null +--- diff --git a/00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md b/00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md new file mode 100644 index 00000000..e41ee40a --- /dev/null +++ b/00.03 News/EVT Will Save Millions of Lives From Stroke. Eventually..md @@ -0,0 +1,215 @@ +--- + +Tag: ["🫀", "🧠", "🪦"] +Date: 2023-03-05 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2023-03-05 +Link: https://www.nytimes.com/2023/03/01/magazine/evt-stroke-treatment.html +location: +CollapseMetaTable: true + +--- + +Parent:: [[@News|News]] +Read:: 🟥 + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-EVTWillSaveMillionsofLivesFromStrokeNSave + +  + +# EVT Will Save Millions of Lives From Stroke. Eventually. + +![A black-and-white photograph of medical staff looking at a screen that shows the arteries of their patient who is below them.](https://static01.nyt.com/images/2023/03/05/magazine/05mag-stroke-02/05mag-stroke-02-articleLarge.jpg?quality=75&auto=webp&disable=upscale) + +An endovascular thrombectomy, or EVT, being performed at Foothills Medical Center in Calgary, Alberta.Credit...Natalia Neuhaus for The New York Times + +## This Revolutionary Stroke Treatment Will Save Millions of Lives. Eventually. + +A procedure called EVT is creating radically better outcomes for patients, but only when it’s performed quickly enough — and that requires the transformation of an entire system of care. + +An endovascular thrombectomy, or EVT, being performed at Foothills Medical Center in Calgary, Alberta.Credit...Natalia Neuhaus for The New York Times + +- March 1, 2023 + +### Listen to This Article + +Audio Recording by Audm + +*To hear more audio stories from publications like The New York Times,* [*download Audm for iPhone or Android.*](https://www.audm.com/?utm_source=nytmag&utm_medium=embed&utm_campaign=evt_revolution_holland) + +Kris Walterson doesn’t remember exactly how he got to the bathroom, very early on a Friday morning — only that once he got himself there, his feet would no longer obey him. He crouched down and tried to lift them up with his hands before sliding to the floor. He didn’t feel panicked about the problem, or even nervous really. But when he tried to get up, he kept falling down again: slamming his back against the bathtub, making a racket of cabinet doors. It didn’t make sense to him then, why his legs wouldn’t lock into place underneath him. He had a pair of fuzzy socks on, and he tried pulling them off, thinking that bare feet might get better traction on the bathroom floor. That didn’t work, either. + +When his mother came from her bedroom to investigate the noise, he tried to tell her that he couldn’t stand, that he needed her help. But he couldn’t seem to make her understand, and instead of hauling him up she called 911. After he was loaded into an ambulance at his home in Calgary, Alberta, a paramedic warned him that he would soon hear the sirens, and he did. The sound is one of the last things he remembers from that morning. + +Walterson, who was 60, was experiencing a severe ischemic stroke — the type of stroke caused by a blockage, usually a blood clot, in a blood vessel of the brain. The ischemic variety represents roughly 85 percent of all strokes. The other type, hemorrhagic stroke, is a yin to the ischemic yang: While a blockage prevents blood flow to portions of the brain, starving it of oxygen, a hemorrhage means blood is unleashed, flowing when and where it shouldn’t. In both cases, too much blood or too little, a result is the rapid death of the affected brain cells. + +When Walterson arrived at Foothills Medical Center, a large hospital in Calgary, he was rushed to the imaging department, where CT scans confirmed the existence and location of the clot. It was an M1 occlusion, meaning a blockage in the first and largest branch of his middle cerebral artery. + +If Walterson had suffered his stroke just a few years earlier, or on the same day in another part of the world, his prognosis would have looked entirely different. Instead, he received a recently developed treatment, one established in part by the neurology team at Foothills: what’s called an endovascular thrombectomy, or EVT. In the hospital’s angiography suite, a neuroradiologist, guided by X-ray imaging, pierced Walterson’s femoral artery at the top of his inner thigh and threaded a microcatheter through his body, northbound to the brain. The clot was extracted from his middle cerebral artery and pulled out through the incision in his groin. Just like that, blood flow was restored, and soon his symptoms all but disappeared. + +A little more than 24 hours later, Walterson’s memory kicked back in, when he was lying in a narrow bed on the stroke ward. He ate breakfast. He answered questions from the doctors on the stroke team as they made their rounds. By Sunday afternoon he could manage to walk around the ward, cracking jokes while a stroke neurology fellow hovered nearby. “Do you want to hold my hand?” she asked. “People will talk,” he replied, and shuffled along on his own. It wasn’t until Monday afternoon, as he laced up his black sneakers and prepared to head home, that he asked another stroke fellow, Dr. Kimia Ghavami, how bad he was on Friday during those hours he could no longer remember. + +“When I met you,” she said, “you were completely paralyzed on your left side.” Without the EVT, Walterson would most likely have been facing a best case of weeks in the hospital and months more of rehab. The worst case, if he survived at all: a feeding tube, permanent immobilization and a much-shortened life in a bed in a long-term care facility. It could have been catastrophic, but here he was, hearing about his now-vanished symptoms secondhand. + +Stroke kills about six and a half million people around the world annually. It’s the second most common cause of death worldwide, and it consistently ranks among the top five causes of death in Canada and the United States. Beyond the raw death toll, stroke is also a leading global cause of disability — too often, it leaves behind the kinds of severe deficits that force loved ones to become full-time caregivers. Even smaller, less severe strokes are associated with the onset of dementia and many other complications. + +Given that toll, it’s no exaggeration to call the EVT one of the most important medical innovations of the past decade, with the potential to save millions of lives and livelihoods. Neurointerventionalists in the United States now complete roughly 60,000 EVTs per year. (Last year, one of them appears to have been done on John Fetterman while he was a Democratic candidate for senator, which means the procedure may have helped determine control of the U.S. Senate.) But the overall number of Americans who could have benefited from an EVT is at least twice that. + +The challenge is that this medical innovation isn’t as deployable as a new pill or device. It can’t be manufactured by the thousands, packed into shipping containers and distributed to every hospital whose administrator clicks Add to Cart. For a qualified specialist, the extraction of the clot itself can be fairly straightforward — but getting the patient to the table in time is a highly complex process, a series of steps requiring layers of training and a rethinking of the protocols that move people around within the medical system. The new “miracle treatment” is the easy part. Bringing it to the people who need it, around the world? Achieving that will be miraculous. + +Image + +![A black-and white photograph of a man in a suit who is looking out with medical equipment behind him.](https://static01.nyt.com/images/2023/03/05/magazine/05mag-stroke/05mag-stroke-articleLarge.jpg?quality=75&auto=webp&disable=upscale) + +Dr. Mayank Goyal, a neuroradiologist who was heavily involved in early research into EVT.Credit...Natalia Neuhaus for The New York Times + +**Dr. Mayank Goyal** can recall the moment when the EVT started to feel like a real solution. “I still remember the face of the patient,” he says. She was a younger woman who had immigrated to Canada from the Philippines, and who worked hard to send money home to family members still there. “It was a big, big stroke,” he says, and it probably wouldn’t have responded to the drugs available. So he tried to remove her clot using a new device that he hadn’t tried before. “Within 12 minutes I pulled the clot out.” The next morning, the woman was so fully recovered that she wanted to go right back to work. + +It was 2009, and Goyal, a neuroradiologist who works at Foothills and the adjoining University of Calgary, had already been trying thrombectomies for about half a decade. When a new method or treatment is in its infancy, practitioners generally only deploy it if there is nothing else to do and the potential consequences of doing nothing are catastrophic. Since the early 2000s, when the first version of a thrombectomy device was cleared by the U.S. Food and Drug Administration, Goyal and other early adopters had been pioneering the technique with patients who had no other hope. The clot-busting drug that was available to treat ischemic strokes wasn’t good enough for the biggest clots and the worst strokes. “Everyone realized they needed a mechanical solution to the problem,” Goyal says, “as opposed to a chemical solution to the problem.” + +But the first few devices produced didn’t do the job well enough, either. When a new device intended to obstruct blood flow to an aneurysm, called the Solitaire stent, came out, several specialists working in various hospitals around the world came separately to the same conclusion: It might work for EVT too. They tried it, and it did. “‘It was like magic, compared to the previous devices,” Goyal says. + +This was big news. Medicine had made incredible advances on other fronts, but for stroke patients, shockingly little had changed since Hippocrates wrote about the condition 2,500 years ago. The Greek physician identified the cause of what was then and for many centuries afterward called “apoplexy” as an excess of black bile (one of the four “humors,” in the reigning physiological theory of the time) in the brain. A few hundred years later, another Greek physician, Galen, attributed stroke to phlegm in the brain arteries, and his ideas dominated Western medicine for a millennium. The first link between “apoplexy” and bleeding in the brain — the first, posthumous diagnosis of a hemorrhagic stroke — was not made until the mid-1600s, by the Swiss physician Johann Jakob Wepfer. + +By the 18th and 19th centuries, the medical establishment was beginning to understand the causal links between blockages, bleeds and strokes. But there was no known treatment, and researchers emphasized prevention through the moderation of lifestyle risk factors. That’s not so dissimilar from today’s efforts at prevention, although the risk factors themselves have changed. Back then the culprits were thought to include “muscular exertion of any kind, but especially ‘straining at stool,’” as well as “violent passions of the mind, cold weather, tight clothing around the neck, constipation and everything in the least bit flatulent,” the neurologists Maurizio Paciaroni and Julien Bogousslavsky wrote in 2009 in the Handbook of Clinical Neurology. + +Gradually, through the 20th century, a picture of the various common causes of stroke was brought into focus. Although strokes occur in the brain, understanding them required a clear grasp of the mechanics of heart disease — often, thickened or hardened arteries can create clots that travel up into the brain. High blood pressure and low blood pressure are each risk factors for stroke, and atrial fibrillation — an abnormal heartbeat — is, too. By the 1950s aspirin and other blood thinners were being prescribed to try to counter the formation of clots in patients diagnosed with heart disease, but that was mainly about prevention. + +The first real treatment breakthrough came with the arrival of thrombolytics, colloquially known as clot-busters: drugs used to break down clots found in blood vessels. In 1995, The New England Journal of Medicine published a study led by the National Institute of Neurological Disorders and Stroke (NINDS) that tested the effects of tissue plasminogen activator, or [tPA, on patients who were having an ischemic stroke.](https://pubmed.ncbi.nlm.nih.gov/7477192/) The study’s authors noted that the drug came with an increased risk of brain bleeds — there’s that yin and yang again, as in some patients the attempt to dissolve the clot may result in a hemorrhage. Still, they found that it improved the long-term outcome for roughly one in three patients. This was an unprecedented breakthrough, the first meaningful treatment for an ongoing stroke. + +TPA wasn’t a perfect remedy. It had to be given within a relatively narrow time window — the NINDS study focused on treatment within three hours of the onset of a stroke, while today the cutoff can be 4.5 hours — and it worsened outcomes for 3 percent of recipients. That was a lot better than nothing, and it would go on to become a standard treatment worldwide for eligible ischemic stroke patients. But an energized field of neurologists was already exploring what might come next. + +Their attention turned to a set of techniques and procedures that originated with cardiology but have been increasingly adopted in neuroradiology too: accessing the body endovascularly — that is, using catheters threaded through the arteries. Neuro-endovascular therapies are handled by a hybrid group of specialists known as neurointerventionalists: neuroradiologists, neurosurgeons and neurologists who have received the relevant additional training. Think of it as brain surgery’s answer to laparoscopy: The approach allows the doctor to make repairs in the brain without having to open up a patient’s skull. + +Once the neurointerventionalists started adapting the Solitaire stent for use in EVT, the medical-device manufacturers quickly caught up, designing thrombectomy-specific versions, which began to roll out around 2010. As Dr. Michael D. Hill, a senior neurologist at Foothills, says: “All of a sudden we had a procedure that looked like it could work.” As the patents were filed and the procedure was formalized, Goyal continued to work with the stroke team at Foothills to extract the clots from eligible patients. + +Image + +A stent retriever used in an EVT — a procedure in which a clot is physically extracted via a long catheter from a stroke patient’s brain, restoring blood flow.Credit...Natalia Neuhaus for The New York Times + +The team at Foothills decided to begin its own clinical trial, which became [known as ESCAPE](https://www.nejm.org/doi/full/10.1056/nejmoa1414905), with Hill, Goyal and Dr. Andrew Demchuk as the principal investigators. Using a network of their colleagues and former stroke fellows, who had gone on to work across Canada and elsewhere, they enlisted 22 sites and laid out a strict protocol for the study, emphasizing consistency in patient selection, imaging and — above all — speed. “We just hammered people on being fast,” Hill says. The key to a successful EVT, they believed, was in rushing a patient to a CT scanner, verifying that their clot was a viable target for extraction and then pulling it out without delay. + +The trial was so successful that it was halted early — given the findings, it was no longer ethical to keep adding patients to the control group. While 29 percent of patients in the control group (who were treated, when eligible, with alteplase, a type of tPA, alone) survived with at least a partial recovery of their deficits and were able to reclaim their independence, 53 percent of patients who received EVT saw the same positive outcomes. And while 19 percent of the control patients died, just 10.4 percent of the EVT patients did. Given that medical progress is often seen in decimal-point increments, these were staggering numbers. + +The Foothills neurologists weren’t the only team investigating EVT’s potential. The ESCAPE trial ran concurrently with four other major trials, one of which was also led by Goyal. Averaged together, the studies showed that the procedure more than doubles the odds of stroke patients’ returning to an independent life, and nearly triples the odds of their making a complete recovery. + +**On prime-time** medical dramas, radical new treatments arrive just in time to save the patient. The brilliant, plucky resident pulls an all-nighter in the stacks, snooping through obscure journals, and races to the operating room brandishing what she has found. But offscreen, transforming medical research into standard clinical practice is slower and far more complex. + +This can be especially true with innovations like EVT, in which a series of steps must be performed quickly by multiple groups of people. In Alberta, by the time a stroke patient actually arrives at a hospital, the case has been in the hands of as many as five layers of medical response: the original 911 dispatcher, the paramedics, a call center, the transport logistics team and the stroke team that will receive him. And to have the best outcome, those handoffs need to happen in minutes, not hours. + +Image + +The view of an EVT from the control room, from which team members can observe without the need to wear lead shielding against the radiation of the X-ray machine.Credit...Natalia Neuhaus for The New York Times + +The high-tech portions of the EVT process all happen in the hospital, but the most critical part happens at the very beginning. If friends and family, bystanders or the patients themselves don’t realize that a stroke is underway, crucial minutes or even hours will be lost. Even after the call comes in, 911 dispatchers and emergency medical workers have to flag and route the patients correctly. Creating an effective EVT program involves training not just hospital staff members but an entire community. + +After Foothills’s study helped establish the transformative potential of EVT, the neurologists worked with the government of Alberta to implement [a provincewide strategy called ERA](https://www.albertahealthservices.ca/scns/page13274.aspx): Endovascular Reperfusion Alberta. (Reperfusion is the medical term for when the blockage causing a stroke is removed and the blood begins to flow again.) The ambitious goal was to make EVT accessible to every Albertan, more than four million people spread across more than 250,000 square miles. And one of the first steps was to update the training of Alberta’s 4,800 frontline paramedics, in both ground and air ambulance crews, to give them the tools to quickly identify potential EVT recipients in the field. + +When paramedics respond to a stroke, there is no wound on which to apply pressure, no dramatic chest compression to deploy. Instead, think of it like an extremely high-stakes flow chart: If this, then that. + +Let’s say a rural grocery store cashier calls 911 because a customer, an older man, has collapsed in front of her till. By the time the ambulance arrives, a few minutes later, someone has helped him to sit up on the pale linoleum floor, and a small, hushed crowd has gathered. The man is listing to one side, his speech is slurred, but he is conscious, cogent, when a paramedic approaches, gently asking for his name. + +“Can you smile for me?” the paramedic asks, and notes that only the left corner of the man’s mouth curls upward when he tries; the right droops into a frown. “Can you raise both your arms in the air?” The left arm makes it up OK, but the right arm doesn’t respond. The paramedic holds out both her hands. “Can you squeeze my hands for me? Tight as you can.” The man does his best, but his right hand just won’t listen. + +This is the Los Angeles Motor Scale, or LAMS, a simple three-part test intended to help paramedics on a call get a sense of what they’re dealing with. It’s designed to identify what doctors call hemiplegia — weakness or paralysis on only one side of the body, a classic sign of stroke. The more severe the weakness, the more likely the stroke is to be what’s called an L.V.O., or large-vessel occlusion: a blockage of an artery in the skull, which makes the patient a strong candidate for EVT. + +There are other stroke field tests, some more complex, but [Alberta chose to model its test on LAMS](https://www.albertahealthservices.ca/assets/about/scn/ahs-scn-cvs-era-lams-reference.pdf) because of its simplicity; it would be relatively easy to retrain thousands of people in its use. In its original form, it was a clear yes/no. If the patient showed any sign of trouble, with either the smiling, the raised arms or the hand squeeze, a stroke was probable. But now the paramedics needed a way to rapidly, and reasonably accurately, separate the L.V.O. cases from the rest. So Alberta added a points system to the test, in which a patient’s score can range from 0 to 5. Scores of 0 to 3 mean the old rules apply, and the crew transports the patient to the nearest stroke center for further assessment and treatment. A score of 4 or 5 means a likely EVT, triggering the new protocol. + +Image + +Syringes in the operating room containing contrast emulsion dye, which is visible on X-rays.Credit...Natalia Neuhaus for The New York Times + +At this point, there are more teams that come into play — more people who need to be coordinated and trained to make an EVT program work. If the man at the grocery store has a LAMS score of 4, Alberta’s paramedics now contact a specialized medical phone center, and are connected in a three-way call with two groups: the stroke team at the nearest comprehensive stroke center — as opposed to a primary stroke center, which is capable of administering tPA but not EVT — and the medical transport team. (This three-way “field consultation,” as it’s called in Alberta, is relatively unusual. But, says Foothills’s Andrew Demchuk, who was one of the lead neurologists involved in creating ERA, the model is beginning to spread in other parts of the world.) + +When ERA started, its goal was to make EVT accessible to every one of the 400 or more Albertans who are eligible for it each year. Last year, the province’s stroke teams completed 378 of the procedures. + +**About 5 to 15** percent of stroke patients turn out to be candidates for an endovascular thrombectomy. But the ones who do receive it tend to be among the most severe cases, and so, says Michael D. Hill, “there’s a visible difference to how stroke patients flow through the hospital now, because we’re able to send them home.” In a strange twist, some patients who might once have wound up on life support, or lingered in a hospital bed for weeks, now walk out under their own power within three or four days — while others who experienced smaller or more moderate strokes might sometimes stay longer. + +One Sunday afternoon at Foothills, Hill was able to discharge a woman in her mid-50s who underwent her EVT on Thursday night. A huge swath of her brain had been at risk from the clot — but the thrombectomy saved almost all of it. “Look at *you,”* he said as she walked unassisted down the hallway of the stroke ward. “You’re pretty good.” Her stroke was caused by a heart condition called atrial fibrillation; a prescription for blood thinners would, they hoped, prevent any more clots from recurring. “Good thing you got her here quickly,” Hill told the woman’s daughter. “She’s done well. We’ll see you back in the clinic for follow-up.” + +Elsewhere on the ward, the variety and cruelty of stroke’s effects was on display. One older woman, asked for her age, could only say wryly: “Too old.” Her sense of humor was intact, but her own biographical details now escaped her. Another patient, an elderly man, could no longer find the language to express his knowledge of the world. When Hill showed him a butter packet, and asked him if he knew what it was, the patient answered “yes,” confidently. But then he paused, struggling, unable to come up with the words. A man in his mid-40s was buoyant, eager to walk on his own, determined to get home and start physical therapy. But he couldn’t yet swallow consistently, and he remained on a liquid diet. So he had to stay. + +Like patients experiencing heart attacks or major traumas, suspected acute stroke patients bypass the usual E.R. triage procedure. Instead, they’re brought straight to a trauma bay behind the main emergency room, and what comes next is a kind of frenetic choreography. I witnessed the whole dance one Friday night, when, after the page went out — STAT STROKE. ETA 5 MIN — the stroke team gathered behind the E.R. to await the patient, a woman in her early 40s. + +After a brief stop in the trauma bay for a neurological exam, she was wheeled down the hallway, straight to diagnostic imaging, where two paramedics carefully hoisted her off the gurney and onto the bed of a CT scanner. The machine hummed, and Dr. Steven Peters, the on-call stroke neurologist for the night, peered over the shoulder of a resident at the black-and-white images filling the screen of a desktop computer. + +Unfortunately, this patient hadn’t been discovered right away; her stroke had been ongoing for several hours. It was too late to consider tPA, but EVT was still worth a try: “It looks like she has a lot of cortex we can save,” Peters said, still staring at the screen. The neurointerventionalists were paged. Mayank Goyal was on call that night, along with a neuroradiology fellow. + +After the patient was extracted from the machine, Peters spoke to her; she was slurring but conscious. “All the scans we just did, we found that you are having a stroke,” he said. “There is still a large clot in your brain.” He described the EVT procedure to her briefly, seeking her blessing and offering his advice: “That’s our best chance of getting the clot out.” She consented. + +Image + +Heavy lead vests help protect medical staff members from the X-ray radiation used during the EVT procedure.Credit...Natalia Neuhaus for The New York Times + +Just down the hall from imaging, the angio suite was a blur of rapid, routine movement: staff members draping a sheet over the patient to leave her groin exposed; essential personnel strapping on lead vests to protect against the X-ray radiation; everyone else withdrawing to a windowed control room to observe. By 7:07 p.m., almost exactly one hour after the team was paged, Goyal was questing toward her brain. + +An EVT begins with a needle, puncturing layers of skin to access the artery. The needle is followed by a specially manufactured wire, flexible enough to move through soft tissues without damaging them but firm enough to be pushed and guided from one end. Once the wire is in place, the interventionalist slides a pliable hollow sheath over the top of it, to hold the puncture hole open and provide stable access into the blood vessel. Then the wire comes out, and a catheter is fed through the sheath and guided up through the larger arteries into a blood vessel in the neck. An even smaller microcatheter and microwire travel inside the larger, nested like Russian dolls, up higher into the narrower arteries of the brain. Once they have advanced to just beyond the site of the stroke, the microwire is withdrawn and replaced by the stent retriever, which emerges from the microcatheter and expands, like a rolled newspaper coming open, pushing the clot to the sides of the vessel, re-establishing blood flow, and — if all goes as designed — capturing the clot in its mesh for a complete removal. In the ESCAPE trial, blood flow was restored in 72.4 percent of EVT recipients. + +Goyal and his fellow stood on the right side of the patient, feeding catheters gently through their fingers, intermittently using foot pedals to turn on the X-ray machine above them and check how far they’d gone. She groaned as they worked. In the control room, the rest of the team waited and watched the images flickering on a large monitor. “There you go,” someone said, pointing to a dark web on the screen. Everyone exhaled. Blood was flowing through the stricken part of the patient’s brain once again. + +Image + +During an EVT, the stroke team intermittently turns on the X-ray machines using a foot pedal to help guide the catheter to its target.Credit...Natalia Neuhaus for The New York Times + +By 8 p.m., she was being bustled upstairs to a bed on the stroke ward. Her recovery wouldn’t be as complete as Kris Walterson’s, or as that of the woman with the atrial fibrillation — they hadn’t reached her in time. But it was still much better than no treatment at all. + +As the group dispersed, Steven Peters, the neurologist, glanced down at the clot, retrieved from the stent and resting on a piece of bloody gauze. It was thin, deep red and about half an inch long, the size of a scrap of thread. + +**There’s a number** that floats around in medicine: It takes, on average, 17 years for a new treatment or technique, or some other form of research breakthrough, to filter down into widespread clinical practice. But the actual timeline varies widely from case to case. “What everybody’s trying to do is speed up that process,” says Dr. Sharon Straus, the director of the Knowledge Translation Program at St. Michael’s Hospital in Toronto. (“Knowledge translation” is one of several terms for a young, multidisciplinary field that aims to better understand and improve the medical research-to-practice pipeline.) “Some things do take off more quickly.” + +After ESCAPE and the other studies were published, the American Heart Association promptly formed an ad hoc committee to review the research and issue an updated set of guidelines about the new treatment. Dr. William Powers, a veteran neurologist at Duke, was its chairman, and he remembers the work going unusually quickly. “We all thought it was that clear, and that important,” he says. The group issued its strongest recommendation, endorsing the use of EVT in a designated subset of stroke patients. “That degree of independent corroboration,” Powers says of the stroke research they assessed, “I have never seen anything like that, ever.” + +Image + +Blood clots removed from a stroke patient during an EVT.Credit...Natalia Neuhaus for The New York Times + +Still, even though it has been met with enthusiasm, implementing EVT at scale is an enormous challenge. A recent report from Britain’s Stroke Association found that London residents with eligible ischemic strokes were as much as eight times more likely to receive an EVT than their peers elsewhere in the country, and those disparities are mirrored in the United States. “That is one of the challenges,” says Eric Smith, a neurologist and an associate editor at the journal Stroke. “Arguably maybe we have excessive coverage in some densely populated urban areas, where there could be one hospital on one side of the street with an EVT center, and another hospital on the other side of the street, but because they’re affiliated with different universities, or owned by different H.M.O.s, or this kind of thing, they each want to have their own center.” Rural access, meanwhile, is much patchier. + +In the United States, Smith says, “there’s no one who can plan and say, You’re not allowed to build an EVT center, and you’re obligated to build an EVT center. That’s not how the system works.” + +Other parts of the world face a different slate of challenges. In a recent survey of 59 countries, Australia was found to have the highest overall rate of access to EVT, with 46 percent of patients in need receiving one. That’s well above the median rate of access for high-income countries, which was 23 percent, while for low- and middle-income countries, the rate was just 0.48 percent. Globally, as of 2019, only 2.79 percent of potential EVT patients were receiving the procedure. + +“The disparity in thrombectomy access is just so massive,” says Dr. Dileep Yavagal, a neurologist at the University of Miami. In 2016, Yavagal, who is originally from India, was moved to begin a campaign at the Society of Vascular and Interventional Neurology to promote global EVT access. He knew how long it took for advances in cardiac care, like angioplasty and stenting, to spread across the world, and he didn’t want to see that trend repeated. “I went to medical school in India,” he says, “and I saw a lot of stroke before I came to the U.S. in 1997 to do neurology. I came to a realization that this is not going to really reach my homeland not for one or two or three years, but for decades.” + +The group he founded to try to change that, [Mission Thrombectomy 2020+](https://missionthrombectomy2020.org/#), created the survey. The results were sobering. “The lowest access to thrombectomy care, excluding countries that have no thrombectomy, in this survey, is in Bangladesh,” he says, “and it’s only 0.1 percent rate of access.” That means an Australian patient who needs an EVT is 460 times more likely to get one than a Bangladeshi patient with a comparable stroke. + +He identifies two primary challenges to widespread implementation. One is the speed and coordination required, at all levels of a given country’s emergency medical system, to maximize the benefits of EVT. “We never planned for this,” he says. “So basically we have to figure out, with the existing hospital infrastructure, how to optimize these patient transfers. And that brings a major burden on every community and country.” Many jurisdictions aren’t in a position to undertake a campaign like Alberta’s ERA, intended to systematically smooth out every ripple in a complex new protocol. + +The second challenge is the global work force. Yavagal’s group estimates that around the world, there are only enough qualified neurointerventionalists to meet around 15 percent of the potential demand for EVT. + +The group focuses on a top-down approach, targeting policymakers, primarily in lower- and middle-income countries, with information about the benefits of EVT. They have regional committees advocating for the procedure in 94 countries now, and a 2020 white paper they produced has caught the attention of several national health ministers. The document emphasizes the longer-term savings offered by investing in EVT upfront. In Canada, for instance, acute ischemic strokes cost the public health system $2.8 billion per year, with much of that money going to long-term care for the kinds of severe deficits that EVT can prevent. + +The government of India, Yavagal notes, recently decided to pay first in hopes of saving later. It more than doubled its reimbursement rate for each thrombectomy performed in the country’s hospitals, to $7,500, an important boost to the procedure’s prospects there. The group’s effort also received a recent bump from the World Health Organization, which has identified thrombectomy as a “priority clinical intervention,” and the instruments used to extract the clots as “priority medical devices,” meaning that the W.H.O. will now provide guidance and support for national health organizations looking to implement EVT. + +“Once the right stakeholders see the need and the cost-effectiveness, the elements are there,” Yavagal says. Some countries lag behind in physical infrastructure, like the required angiography suite, or in staffing. “But a lot of countries have the elements — the system is just not organized.” + +Yavagal’s group estimates that 1.7 million people every year experience an ischemic stroke caused by a large-vessel occlusion — the type of stroke targeted most effectively by EVT. But so far, only about 240,000 thrombectomies are being performed around the world each year. In that yawning gap, Yavagal sees the potential for rapid gains: If you’re only doing 20 thrombectomies a year, doubling that to 40 over a couple of years is achievable. Doubling it again in another two years’ time probably is, too. And so on. + +Image + +Dr. Michael D. Hill, a senior neurologist at Foothills, speaking with a stroke patient.Credit...Natalia Neuhaus for The New York Times + +In a world where EVT access was universal, it could save more than 100,000 lives each year. But in addition to fatalities, public health authorities also track something called disability-adjusted life years, or DALYs. A DALY is a unit of measurement: one year of healthy life lost to a given disease. In 2022, the World Stroke Organization attributed 63 million DALYs annually to ischemic stroke. + +That’s a mouthful of medical jargon, but each DALY also represents something real. It’s a patient who can still chew and swallow her favorite foods; another who can still remember his grandchildren’s names, or his wife’s, or his own. It’s a patient who can still tie his own flies and go fly-fishing on a lazy summer river, or one who can keep singing in a community choir. It’s paychecks and mortgage payments, birthday cards and phone calls, inside jokes and secret handshakes: all the little things that make up a life. + +--- + +**Eva Holland** is a freelance writer based in Yukon Territory, Canada. She is a correspondent for Outside magazine and the author of “Nerve: Adventures in the Science of Fear.” **Natalia Neuhaus** is a photographer in Brooklyn, originally from Peru. In 2022, she was one of three women awarded the Leica-VII Agency Mentorship. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/How the Biggest Fraud in German History Unravelled.md b/00.03 News/How the Biggest Fraud in German History Unravelled.md new file mode 100644 index 00000000..f0466462 --- /dev/null +++ b/00.03 News/How the Biggest Fraud in German History Unravelled.md @@ -0,0 +1,331 @@ +--- + +Tag: ["📈", "🇩🇪", "💸"] +Date: 2023-03-05 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2023-03-05 +Link: https://www.newyorker.com/magazine/2023/03/06/how-the-biggest-fraud-in-german-history-unravelled +location: +CollapseMetaTable: true + +--- + +Parent:: [[@News|News]] +Read:: 🟥 + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-HowtheBiggestFraudinGermanHistoryUnravelledNSave + +  + +# How the Biggest Fraud in German History Unravelled + +Late in the spring of 2020, Jan Marsalek, an Austrian bank executive, was suspended from his job. He was a widely admired figure in the European business community—charismatic, trilingual, and well travelled. Even at his busiest, as the chief operating officer of Wirecard, Germany’s fastest-growing financial-technology company, he would assure subordinates who sought a minute of his time that he had one, just for them. “For you, always,” he used to say. But he would say that to almost everyone. + +Marsalek’s identity was inextricable from that of the company, a global payment processor that was headquartered outside Munich and had a banking license. He had joined in 2000, on his twentieth birthday, when it was a startup. He had no formal qualifications or work experience, but he showed an inexhaustible devotion to Wirecard’s growth. The company eventually earned the confidence of Germany’s political and financial élite, who considered it Europe’s answer to PayPal. When Wirecard wanted to acquire a Chinese company, Chancellor Angela Merkel personally took up the matter with President Xi Jinping. + +Then, on June 18, 2020, Wirecard announced that nearly two billion euros was missing from the company’s accounts. The sum amounted to all the profits that Wirecard had ever reported as a public company. There were only two possibilities: the money had been stolen, or it had never existed. + +The Wirecard board placed Marsalek on temporary leave. The missing funds had supposedly been parked in two banks in the Philippines, and Wirecard’s Asia operations were under Marsalek’s purview. Before leaving the office that day, he told people that he was going to Manila, to track down the money. + +That night, Marsalek met a friend, Martin Weiss, for pizza in Munich. Until recently, Weiss had served as the head of operations for Austria’s intelligence agency; now he trafficked in information at the intersection of politics, finance, and crime. Weiss called a far-right former Austrian parliamentarian and asked him to arrange a private jet for Marsalek, leaving from a small airfield near Vienna. The next day, another former Austrian intelligence officer allegedly drove Marsalek some two hundred and fifty miles east. Marsalek arrived at the Bad Vöslau airfield just before 8 *P.M.* He carried only hand luggage, paid the pilots nearly eight thousand euros in cash, and declined to take a receipt. + +Philippine immigration records show that Jan Marsalek entered the country four days later, on June 23rd. But, like almost everything about Wirecard, the records had been faked. Although Austrians generally aren’t allowed dual citizenship, Marsalek held at least eight passports, including diplomatic cover from the tiny Caribbean nation of Grenada. His departure from Bad Vöslau is the last instance in which he is known to have used his real name. + +The rise of Wirecard did not occur in a vacuum. Rather, it reflected a convergence of factors that made the past half decade “the golden age of fraud,” as the hedge-fund manager Jim Chanos has put it. In the aftermath of the 2008 financial crisis, governments sought to revive depressed economies, and central banks suppressed interest rates, making it cheaper for businesses to get loans. The venture-capital and tech worlds, awash in easy money, developed a culture of selling narratives and vaporware—lofty and sometimes fantastical ideas, with no clear path to implementation. Redditors shared their *YOLO* trades; offshore crypto exchanges posted their own tokens as collateral for multibillion-dollar loans. In late 2021, amid the investing frenzy, a CNBC guest—the author of such books as “Trade Like a Stock Market Wizard” and “Think & Trade Like a Champion,” who charges people a thousand dollars a month for “private access” to his market research—recommended a tech company called Upstart, asserting that its earnings were “very powerful” and that the company had “a good-looking name.” + +[](https://www.newyorker.com/cartoon/a25550) + +“Next time, could you not use your podcast voice?” + +Cartoon by Sophia Glock + +“What do they do?” the host asked. + +“Uh, excuse me?” + +“What does Upstart do?” + +“Uh, well . . . I’m, I’m . . . I’m sorry.” + +“What kind of company is it?” + +“Yeah, I’m not . . . You’re breaking up,” the guest said. (Upstart’s share price has since dropped by ninety-five per cent.) + +It was against this backdrop that German institutions supported Wirecard. The country’s traditional industry is in cars and energy systems—BMW, Volkswagen, Daimler, Siemens. Wirecard represented the nation’s challenge to Silicon Valley, its leap into financial technology and the digital era. “German politicians were proud to be able to say, Hey, we have a fintech company!” Florian Toncar, a German parliamentarian, observed. Wirecard’s rising stock price was regarded as a sign that the business was dependable, that its critics were clueless or corrupt. The German business newspaper *Handelsblatt* called Wirecard’s C.E.O. a “mastermind” who had “come across the German financial scene like the Holy Spirit.” But it was not regulators or auditors who ultimately took the company down; it was a reporter and his editors, in London. + +Dan McCrum often jokes that his marriage was a minor fraud—his wife met him when he was a banker, but she ended up with a journalist instead. When McCrum was in his mid-twenties, he worked at Citigroup in London for four years, “which was long enough to look around the room and think, Hang on, there’s nobody I want to *be* here,” he told me. One evening, he went out for dinner with a group of colleagues “and everybody was bitching about their jobs,” he said. A young woman suggested that they go around the table and share their real aspirations, most of which required years of training or an advanced degree. “And when it came to me, without hesitation, I was, like, ‘I’d be a journalist,’ ” he said. “And the woman who had asked the question just looked at me as if I were a bit stupid and said, ‘Well, you know, you can just *do* that.’ ” + +The timing was serendipitous; eighteen months later, in July, 2008, as a fledgling reporter at the *Financial Times*, McCrum was sent to New York, where he witnessed the collapse of Lehman Brothers and the chaos that ensued. By the end of the year, Bernie Madoff’s Ponzi scheme had unravelled, leaving investors some sixty-five billion dollars poorer. “It felt as if we were through the looking glass,” McCrum recalled. “If a fraud of that magnitude was hiding in plain sight, then anything could be fake.” + +In the summer of 2014, McCrum was casting about for story ideas in London when a hedge-fund manager asked him, “Would you be interested in some German gangsters?” He added, “Be careful.” + +In 2000, a year after Wirecard was formed, it nearly imploded—partly because it had hired Jan Marsalek to oversee its transition to the mobile era. “The first warning sign was when the company’s systems crashed and Wirecard’s engineers traced the problem to Marsalek’s desk,” McCrum later wrote, in a book called “Money Men,” from 2022. “In an ‘accident,’ he’d routed all of the company’s internet traffic through his own PC, rather than the dedicated hardware in the server room—a set-up ideal for snooping.” But Marsalek, a talented hacker, couldn’t be fired; his job was to rebuild from scratch the software that the company used to process payments, “and the project was too important and too far along to start over with someone new.” + +Around the same time, a German businessman named Paul Bauer-Schlichtegroll was trying to move into online payments, focussing on pornography. There was no shortage of demand, but it was the end of the age of dial-up Internet, and Bauer-Schlichtegroll’s payment systems were clunky. When he learned that Wirecard could process credit- and debit-card transactions, he offered to buy it. Wirecard refused. But the company was struggling, and after its offices were burglarized it became insolvent. Bauer-Schlichtegroll bought what was left of it for half a million euros. + +In the early two-thousands, Wirecard’s company culture resembled that of a frat house. Marsalek took new hires for bottle service at night clubs, and sometimes sent clients back to their hotels with models in tow. When Wirecard signed a live-streaming porn service as a client, Marsalek’s colleague Oliver Bellenhaus, who often played Call of Duty at the office, hooked up his laptop to a TV and paid for a private session. It was ten-thirty in the morning. “Touch your nose,” Bellenhaus and another salesman instructed a topless woman onscreen, to test if the service was really live. The woman complied; the men burst out laughing, and carried on with more orders, as colleagues filed by. “Touch your nose” became a running joke at the office. + +Wirecard’s new C.E.O. was a tall, somewhat awkward consultant from Vienna named Markus Braun. He lacked Marsalek’s charisma and affability, but he claimed to have a Ph.D. in social and economic sciences, which gave outsiders the impression that he was a quiet visionary. Under his leadership, Wirecard expanded its payment processing to the world of online gambling—legal in some jurisdictions, prohibited in many others. Wirecard skirted rules by acquiring companies in other countries and routing payments through them. “By allowing third parties to serve as the primary processor or acquirer, Wirecard is not directly identified” by Visa or Mastercard, a critical investor report later noted. “Some of these partners may ultimately lose their own license, but Wirecard’s remains intact.” + +The core tenet of the business was that for anything to be sold there must be a way to pay. The fewer the options for payment, the higher the fees; the higher the legal risk, the more complex the transaction. + +[](https://www.newyorker.com/cartoon/a26445) + +“Don’t pause it—just let me ask you questions for the next twenty minutes.” + +Cartoon by José Arroyo + +In 2004, Bauer-Schlichtegroll saw an opportunity to transform Wirecard into a publicly listed company, whose shares could be traded on an open exchange. He bought a failing telephone-service provider that was listed on the Frankfurt stock market. With the help of lawyers, Bauer-Schlichtegroll implemented a process known as a reverse takeover, which allowed for listing with less regulatory scrutiny. “Like a parasite devouring its host from the inside, Wirecard was injected into the corporate shell, emerging to walk the stock market in its place,” McCrum wrote. + +The following year, having raised capital from the investing public, Braun arranged for Wirecard to buy a small German bank, for about eighteen million euros. To observers, it seemed as if Braun had overpaid; the company could have applied for its own banking license for as little as a million euros. But Braun’s acquisition procedure—as with the stock listing—let the company achieve the desired outcome while avoiding regulatory scrutiny, which would have likely ended in rejection. By owning a bank, the investor report explained, Braun “created a bridge between online and offline cash.” For Wirecard, eighteen million euros wasn’t the price of doing business; it was the price of being able to do business at all. + +In October, 2006, the United States passed a law that made it illegal to take bets online. The act was an existential threat to Wirecard’s business. Most major payment processors cut off their American clients from gambling. Wirecard, however, exploited a loophole: the law allowed “games of skill,” which theoretically included poker. In 2007, the company acquired another payments entity, an Irish firm that specialized in online poker, and fired its auditor. That year, Wirecard reported a surge in revenue of sixty-two per cent. Bauer-Schlichtegroll gradually sold his entire stake in the company. + +Wirecard had carved out a profitable, if tenuous, operation. But the major poker companies began to ditch Wirecard and its affiliates, to work with better-run businesses; pornography, meanwhile, was now ubiquitous and free. In 2009, although the business was struggling, Braun prepared for investors an unrealistic set of projections that showed a forty-five-degree line of profits and growth, and soon afterward the chief operating officer quit. + +Braun appointed Marsalek, who was then twenty-nine, as the new C.O.O. Marsalek sought out new, scammy business partners in the unregulated world of nutraceuticals—açai-berry powder, weight-loss tea. The scheme, McCrum later wrote, “was to get hold of a credit or debit card number by offering ‘risk-free’ trials, then sting the customer with charges buried in small print that were nigh impossible to cancel.” Visa was aggressively shutting down accounts that were associated with fraud, so, according to McCrum, Marsalek spread the payments “over many different Merchant IDs, to keep the number of complaints below the threshold which drew attention.” But it wasn’t enough: Visa froze Wirecard’s accounts, and issued more than twelve million dollars in penalties—facts that Braun withheld from shareholders. + +By now, a German investor named Tobias Bosler had discovered irregularities on Wirecard’s balance sheet. He eventually suspected that the company was also miscoding illegal gambling transactions as legal ones, so he asked a friend in America to transfer money to a Wirecard-affiliated poker site. “The money went to the poker Web site, but on the monthly statement it showed a French online store for mobile phones,” Bosler told me. + +In 2010, the U.S. government charged a German man living in Florida, who was linked to Wirecard, with money laundering. (He pleaded guilty to a lesser charge, of conducting an unlicensed money-transfer operation, and has claimed not to know who paid his legal fees.) Wirecard had apparently laundered at least a billion and a half dollars’ worth of gambling proceeds, through deliberate miscoding alone, and the German man had transferred to American gamblers some seventy million dollars, with funds originating from Wirecard Bank. When news of the indictment was made public, Wirecard’s share price dropped more than thirty per cent. Braun announced a pivot to Asia. + +In the fall of 2014, Dan McCrum noticed that Wirecard had bought many small companies in Asia that no one had ever heard of. The official explanation was that the acquisitions had “local strengths,” which Wirecard helped to grow on a “synergistic basis.” No one seemed to care any longer about the accusations of money laundering in Florida. The company had simply denied any connection, and the investing public had slowly bought into the idea that Wirecard had a wildly profitable Asia division; the firm’s stock valuation surged past four billion euros. + +Over coffee in London, a hedge-fund manager named Leo Perry shared with McCrum his theory: Wirecard’s primary business model was to lie to the public, claiming huge profits, so that investors would push up its share price. However, “faking profits, you end up with a problem of fake cash,” Perry said. “At the end of the year, the auditor will expect to see a healthy bank balance—it’s the first thing they check. So what you have to do is spend that fake cash on fake assets”—dormant shell companies in Asia, reported as profitable investments. + +A week later, McCrum headed to Manama, the capital of Bahrain, where a company called Ashazi Services was supposedly licensing Wirecard’s payment-processing software for a fee of four million euros a year. McCrum spent his first day in the country hunting for the Ashazi office. But there was no trace of it at its listed address. The next day, he set out to find Ashazi’s corporate lawyer, Kumail al-Alawi, at an office down a trash-strewn alley behind a fried-chicken joint. A man waved him in, and told him that Alawi no longer worked there. But he had Alawi’s number, and, after a quick phone call, McCrum was given directions to an empty parking lot. Alawi arrived in a dust-covered car. “They’re still working on the building, nobody can ever find it,” he said. He and McCrum approached a construction site and walked into what appeared to be the only occupied office—white walls, cheap furniture, and a couple of ferns. + +“Ashazi, Ashazi,” Alawi muttered, as if he were hearing the name for the first time. He produced a folder, containing a few registration papers, and suggested to McCrum that he call the woman who was listed as Ashazi’s founder, a local actress and TV presenter. McCrum reached her by phone, but she had no recollection of the Ashazi contract, and suggested that he ask her business partner in the Philippines. The business partner had heard of Ashazi, but said that he was involved only in marketing—he thought that the actress was running the company. + +McCrum concluded that Ashazi’s online presence was “stacked with lies,” as he later put it. (Alawi claims to have no memory of McCrum.) And, as far as McCrum could discern from the documents, the licensing fee had never been paid to Wirecard. Back in London, he brought his findings to the *F.T.’s* features editor. But that editor “didn’t really know what to do with it,” Paul Murphy, who had launched Alphaville, a blog at the paper, told me. “The *F.T.* doesn’t have an investigative tradition—it’s not like the *Guardian* or the New York *Times*.” A story in print “has to be understandable to the whole breadth of readers,” he went on, whereas “Alphaville had ditched that idea. Alphaville was doing hard-core, hard-core finance.” + +Murphy brought McCrum onto his team. “I needed someone who had the kind of hard-core technical ability to take balance sheets apart,” Murphy told me. Although McCrum didn’t yet have enough evidence to use the word “fraud” in print, Murphy, as he recalled, encouraged McCrum, “Just use Alphaville as a platform, to get out your suspicions.” + +The resulting series, “House of Wirecard,” ran in the spring of 2015. But even Alphaville’s finance-savvy readership struggled to make sense of the material. “This article could do with a paragraph that states, in plain english, what the author’s point is,” one reader commented. “There are a lot of facts presented, but their significance is lost on me.” + +[](https://www.newyorker.com/cartoon/a21759) + +Cartoon by Corey Pandolph and Craig Baldo + +Wirecard’s response was less ambivalent. It spent much of the next few years seeking to create the impression that it was the victim of a criminal conspiracy between short sellers—who make money when a stock craters—and journalists, whom they paid off. + +In 2016, a pair of short sellers in London released an anonymous, hundred-page inquiry called the Zatarra Report, alleging a litany of criminal activity at Wirecard. The report occasionally veered into conspiracy theories that were unsubstantiated or simply untrue. In the ensuing months, the company spent almost four hundred thousand euros on private investigators, to unmask and humiliate the authors of the report. Before long, their e-mail inboxes were spammed with phishing links and gay porn. Their correspondences were hacked. After McCrum wrote about the Zatarra Report, he was targeted, too, and soon he was driven to the edge of paranoia: he started logging license-plate numbers, checking hedgerows for cameras, and sleeping with a hammer under his bed. + +It was not the first time Wirecard had pursued its detractors; in 2008, the company threatened Tobias Bosler, the investor in Munich. He had bet against Wirecard’s share price, telling no one about his position, but a Wirecard lawyer managed to track him down anyway. “I got a call from this lawyer, and he said, ‘You are short Wirecard,’ ” Bosler recalled. “He started reading my trades. He said the date, the time stamp, the number of shares—he had all the details of my transactions.” A few days later, the lawyer and two Turkish boxers arrived at Bosler’s office. The boxers backed him into a corner. One of them punched the wall next to his head; the other threatened his life. Terrified, Bosler closed his short positions. (He provided the German authorities with information about Wirecard’s money-laundering activities, but nothing ever came of it.) “No one else looked closely into Wirecard, until Dan McCrum,” he said. + +“People have this view of finance—that it is, you know, all suited and booted,” Murphy told me. But, in his experience, the appearance of respectability usually ends at the façade of the banks. In the United Kingdom, gambling winnings aren’t subject to any taxes, so speculators have created a parallel market, to trade on tips and inside information; using a strategy known as “spread betting,” they are technically gambling on the directions of stock prices without taking possession of any company shares. They trade on margin, and routinely blow up their accounts. “These guys can be worth twenty million one day and nothing the next,” Murphy told me. It is here, among the “bandits,” as he affectionately calls them, that he finds many of his best sources. “A lot of them are really kind of rough,” he said, over a lunch of champagne and fish sandwiches at the restaurant Sweetings, his favorite haunt. “But they have mathematical brains, you know? They can do numbers, and they can do odds.” + +Murphy, who is sixty, has been covering the London finance scene for so long that he still answers his phone by announcing his surname, as if on a landline with no caller I.D. In 2016, he got a call from one of his bandits, a businessman, spread-betting speculator, and night-club owner from Essex named Gary Kilbey. “What’s this stuff you lot are writing about Wirecard?” Kilbey asked. “Are you sure it’s right?” + +“Yeah, it’s fucking right,” Murphy replied. + +“I’ve got a guy who says it’s all wrong,” Kilbey said. “He doesn’t like Dan. He wants to talk to you.” That guy was Jan Marsalek; he had got another spread-betting speculator (who had previously pleaded guilty to securities fraud) to employ Kilbey as an intermediate. + +“Tell him to fuck off,” Murphy said. + +Almost two years passed before Marsalek made another overture. Again, the approach was indirect; another of Murphy’s sources casually mentioned to him over a lunch of lobster linguini that Marsalek would pay him “good money” to stop publishing reports about Wirecard. “I’m serious,” the man said. “I’ve heard ten million thrown about.” + +Marsalek wanted to meet Murphy for lunch, and would fly in from Munich for the occasion, with Kilbey and his son, Tom, a former reality-TV star, in attendance. (Marsalek paid the Kilbeys more than a hundred thousand pounds each to broker the meal.) A few weeks later, Murphy walked into a steak house near Hyde Park, wired with a microphone, hoping to catch Marsalek dangling a bribe. He was without backup: three of Murphy’s colleagues were supposed to film the interaction with a hidden camera, sewn into a handbag, but Marsalek had changed the venue at the last minute. + +Marsalek was at the table, dressed in a blue suit. He greeted Murphy warmly. Wagyu steak, sparkling water, fine wine. Marsalek wanted Murphy to know that, in his experience, journalists could easily be bought. But he spoke carefully; there was no explicit offer. At one point, Marsalek insinuated that Murphy and McCrum were under surveillance, noting that “friends” of his had reported to him that the two men lived “very normal lives.” Murphy suspected that another diner—a man, sitting alone—was running countersurveillance. When the bill came, according to Murphy, Marsalek paid with a credit card made of gold. + +“He was obviously interesting—he knew people, and he was throwing a lot of money around,” Murphy told me. “So I started developing Marsalek as a potential source.” + +At another lunch, Murphy promised that the *F.T.* wouldn’t publish more stories based on Wirecard’s past indiscretions, and Marsalek swore to Murphy that there was nothing new to find. They shook hands. After Murphy walked out of the restaurant, Gary Kilbey told Marsalek, “Look, if you are lying, Paul will find out. He will find out, and you’ll be buried.” + +To Murphy, it seemed significant that many of Marsalek’s extracurricular activities had some tie to the Russian state. Wirecard had no business presence there, no subsidiaries. But Marsalek travelled to Russia constantly—often on private jets, sometimes landing after midnight and leaving before dawn. According to the investigative outlet Bellingcat, his international travel was closely monitored by the F.S.B., Russia’s primary security service. “His immigration dossier numbers 597 pages, much more than any foreigner’s file we have come across in over five years of investigations,” Bellingcat’s lead Russia investigator reported, years later. In Munich, Marsalek decorated his office with a collection of Russian *ushanka* military hats and a set of *matryoshka* dolls depicting the past century of Russian leaders, from a tiny Lenin to a bloated Putin. He also hosted secret gatherings at a mansion across the street from the Russian consulate in Munich, which he rented for six hundred and eighty thousand euros a year. + +In Vienna, Marsalek and Braun mingled with far-right politicians who held openly pro-Russia views. Both men became paying members of an organization called the Austrian-Russian Friendship Society, and set up business deals with its general secretary, Florian Stermann. In late 2015, Stermann asked Wirecard to donate twenty thousand euros to the Society, to help pay for its fifteenth-anniversary gala, titled From Russia with Love, a lavish, all-night affair featuring trapeze artists and a Putin impersonator. Marsalek agreed, but asked that Wirecard’s name be omitted from the corporate-sponsorship list. + +In 2016, Marsalek helped facilitate a deployment of Russian mercenaries into Libya. An American businessman—who had partnered with Wirecard on an electronic-payments startup—had invested in a cement plant near Benghazi, and he needed the facility cleared of unexploded remnants of war. Marsalek suggested one of his Russian friends, Stanislav Petlinsky, an executive at a security company. + +[](https://www.newyorker.com/cartoon/a26649) + +“He has this crazy conspiracy theory about object permanence.” + +Cartoon by Paul Noth + +Petlinsky’s company—which is known as the R.S.B. Group—cleared the cement plant of more than four hundred explosives. But the arrangement later haunted the American businessman: it is the first known instance, in the chaos following Muammar Qaddafi’s death, of an armed Russian deployment on Libyan ground. The R.S.B. mercenaries posed for photographs in front of the cement plant with a banner that read “We are not angels but we are here.” According to an essay by Sergey Sukhankin, a senior fellow at the Jamestown Foundation, who has studied Russian mercenary operations, the R.S.B. Group’s activities in Libya “should be viewed as a combination of economic interests and, arguably, intelligence gathering/surveillance, which could have been used for preparing the ground for more ‘serious’ players.” In the years that followed, Russia strengthened its relationship with the Libyan commander in the area, and deployed some twelve hundred soldiers from the Wagner Group. They seized oil fields, expanded Russia’s security footprint, and influenced economic and political affairs in Africa. + +At the time, Russian military and intelligence operations were increasingly active in Europe. There were a number of assassinations and suspicious deaths—state targets who fell from windows or were shot in broad daylight. Then, on March 4, 2018, two Russian military-intelligence officers travelled to the small English city of Salisbury, carrying a vial disguised as perfume. They sprayed its contents on the front-door handle at the home of Sergei Skripal, a former senior Russian intelligence officer who had defected to the U.K.; later that afternoon, Skripal and his daughter, Yulia, were found unconscious on a park bench, seizing uncontrollably and foaming at the mouth. + +British chemical-weapons analysts determined that the substance was Novichok, a deadly nerve agent devised decades earlier by Soviet military intelligence. In response, the U.K. expelled twenty-three Russian diplomats, who were suspected of being intelligence officers, and launched an inquiry into fourteen other deaths of Russian exiles and businessmen in the U.K. + +That fall, Marsalek summoned Murphy to Germany for another lunch, in a private dining room, and handed him a stack of documents. They contained official Russian government talking points, addressed to the U.N.’s chemical-weapons body, casting doubt on the British investigation of the Skripal poisoning. The files—marked classified—also contained the chemical formula for Novichok. “Where did you get these?” Murphy asked. Marsalek smiled and said, “Friends.” + +In August, 2018, Wirecard had a market capitalization of twenty-eight billion dollars. The company displaced Commerzbank from the *DAX* 30, Germany’s most prestigious stock index. + +Markus Braun—who owned eight per cent of the company and was now a billionaire, on paper—had taken out a personal loan of a hundred and fifty million euros from Deutsche Bank, using his Wirecard shares as collateral. Marsalek, for his part, appears to have defrauded the company out of tens of millions of euros, if not hundreds of millions, according to a whistle-blower. + +Wirecard reportedly had five thousand employees and was processing payments for a quarter of a million merchants, including major airlines and grocery chains. Braun told investors that he expected sales and profits to double in the next two years. At tech conferences, where he was lauded as a “Steve Jobs of the Alps,” as one German journalist later put it, he said that Wirecard’s business edge resulted from its proprietary artificial intelligence. “It’s not about owning data, but it’s about the algorithms that deliver a value out of data,” Braun, who had a background in computer science, said. But there was no A.I.; most Wirecard accounts were cobbled together manually, on spreadsheets. As a bank with no branches, Wirecard kept cash in a safe at the office, and sometimes distributed it to business partners, in sums in the hundreds of thousands of euros, by hiding it in grocery bags. + +While Murphy puzzled over Marsalek’s Russian security connections, McCrum had a new investigative thread to follow. Pav Gill, the head lawyer at Wirecard’s Asia division, in Singapore, had quit, taking seventy gigabytes of e-mails with him. As he agonized over what to do with the materials, he learned that his mother had written to McCrum. “Oh, my God, Mum,” Gill said, when he found out. “What have you done?” + +Soon afterward, McCrum flew to Singapore to collect the data leak. The two men met near a public fountain, to shield against audio-surveillance equipment. McCrum copied the files and returned to London. For the next six weeks, he worked in a windowless room at the *F.T.’s* headquarters, trying to trace individual acts of fraud amid hundreds of thousands of e-mails and calendar appointments. “What drove me on was Jan Marsalek,” McCrum later wrote in his book. They had never spoken or met, but McCrum could see in the documents that “he was always at the edges, sometimes dishing out orders but more often his instructions were relayed second-hand, or a mystery would be explained simply by his involvement; that it was one of ‘Jan’s companies.’ ” Each evening, his head spinning with new data, names, and organizational charts, McCrum locked his laptop in a safe before leaving the office. + +Earlier that year, a woman on Wirecard’s Asia finance team had nervously approached Gill, to report that her boss, Edo Kurniawan—who answered to Marsalek—had given a presentation in which he taught his staff how to commit serious financial crimes. (Kurniawan has since been charged with financial crimes in Singapore; he is the subject of an Interpol Red Notice, and his whereabouts are unknown.) Using a whiteboard and a marker, Kurniawan sketched out the practice of “round-tripping,” in which an amount of money is moved among several locations, as needed, to fool auditors in different jurisdictions into thinking that each supposedly unrelated account is well funded. (Wirecard’s auditor, Ernst & Young, reportedly relied on documents and screenshots of accounts, supplied by the company, without checking with the constituent banks.) + +Gill contacted his supervisor in Munich, who told him to commission an internal investigation—which turned up instances of round-tripping, backdated contracts, and other illegal schemes. But when the findings reached Wirecard’s board, the concerns were quashed. “I think Jan understands very well what it’s about, but they don’t shit in each other’s bed,” Wirecard’s deputy general counsel wrote to Gill, on an encrypted communications app. A few months later, Gill was told that if he didn’t resign he would be fired. + +By the morning of January 30, 2019, the story was complete and ready to run in the *F.T.* McCrum sent off questions to Wirecard, and waited for the company’s response. + +At lunchtime, Paul Murphy went to Sweetings for a crab sandwich and a glass of white wine. Then Gary Kilbey called. A broker had stopped at Kilbey’s office, above his night club, to let him know that a popular spread-betting account was “shorting the absolute bollocks off Wirecard,” as he put it. The hot rumor in the London finance scene was that the *F.T.* would publish a hit piece at 1 *P.M.* “You’ve got a fucking leak,” Kilbey said. + +Murphy rushed back to *F.T.* headquarters. “We’ve got a fucking leak!” he shouted. + +[](https://www.newyorker.com/cartoon/a27306) + +“He’s perfect, but he lives all the way on the other side of the apple.” + +Cartoon by Suerynn Lee + +How had the story slipped out? McCrum and Murphy had taken unusual precautions—speaking about the story only in person, never on the phone. The story hadn’t even been uploaded into the *F.T.’s* internal system. But one of Kilbey’s details was off: the *F.T.* planned to publish that afternoon but had never settled on an exact time—1 *P.M.* was the deadline it had given Wirecard for comment. It seemed impossible that anyone but the company had been the source of the disclosure. + +Murphy went over to a Reuters terminal and pulled up the Wirecard stock listing. “We literally sat there watching the share price drop as it approached one o’clock,” he told me. “And then there was no story, so people started buying.” They waited two more hours for Wirecard to reply. Then, as Murphy put it, “you hit Publish, and then you almost throw up.” + +The headline said “*forged contracts*”; the subtitle, “Falsification of Accounts.” The article wiped five billion euros from Wirecard’s value in a single afternoon. A follow-up piece, published two days later, knocked off three billion more. + +The response in Germany was reflexively defensive, as if the *F.T.’s* reporting were an attack on the country itself. “Another fake news article from Dan McCrum,” a Commerzbank equities analyst wrote, in a letter to investors. Any dip in share price was “a buying opportunity.” “I read in the FT what a naughty boy you are,” a member of Deutsche Bank’s supervisory board wrote to Markus Braun. He added a winking emoji, and said that he had just bought Wirecard shares. “Do this newspaper in!!” + +On February 18, 2019, Germany’s financial regulator, known as BaFin, issued a ban on creating new short bets against Wirecard, citing the company’s “importance for the economy.” “It was at that moment that they sided with criminals,” a German parliamentarian later said. The same day, prosecutors in Munich confirmed to a German newspaper that they had opened a criminal investigation. But they weren’t going after Wirecard—they were going after the *F.T.* + +In a functioning marketplace, the magnitude of short selling tends to correlate with the egregiousness of the financial irregularities in question. “We conduct investigative due diligence over the course of hundreds and even thousands of hours,” a young fund manager named Fahmi Quadir wrote to BaFin, in the aftermath of its short-selling prohibition. Such investigations involve visiting offices and monitoring satellite images to see if, for example, activity at a supposed factory in China is actually taking place. “People think that investors spend all their time looking at charts and data. But companies are more than that—the core of a business is human,” Quadir has said. “Executives are driven by a certain set of emotional factors, and stressors. You can’t pick out these things just from wading through financial statements.” + +Quadir grew up on Long Island, as the second daughter of Bangladeshi immigrants, and studied biology and mathematics in college before getting a job in finance—an industry that she holds largely in contempt. + +Working as a researcher for a hedge fund, Quadir investigated and ultimately contributed to the downfall of a pharmaceutical price-gouging operation, earning her the nickname the Assassin. She places no long bets—only shorts on companies that she believes to be engaged in criminal activity. “At the end of the day, predatory, fraudulent, criminal behavior is bad for business,” she has said. She considers her role of exposing fraud, and subsequently profiting from its collapse, “a way to use capitalism and capital markets in a subversive way,” something between a “civic duty” and a “revolutionary act.” + +In January, 2018, Quadir launched her own fund, from a co-working space in Manhattan. She named it Safkhet Capital, for the Egyptian goddess of mathematics, and hired as her only employee Christina Clementi, who had recently taken a course at Yale on the history of fraud, taught by Jim Chanos. By then, Wirecard had acquired Citigroup’s North American prepaid-debit-card program. To Quadir, this was a reckless move: if the company was committing crimes, they would now be taking place on American soil. + +“In finance, globally, you have a situation where the only effective police are the Americans,” Paul Murphy told me. “Our regulators—they’re out to lunch. Incompetent, mainly.” He added, “What you’ll find, say, here in London is that you can be a crook, stealing money from people around the world. As long as you’re not stealing from people *in* Britain, you can do anything.” + +In early 2019, Quadir and Clementi set off in Clementi’s 2002 Volkswagen Cabrio for Wirecard’s U.S. headquarters, which were registered in an office park in Conshohocken, Pennsylvania, outside Philadelphia. In Suite 5040, they found an office space large enough for perhaps six hundred employees. But only a couple of dozen people were there. + +A man who greeted them offered to sell them prepaid cards loaded with up to a hundred and fifty thousand dollars, and added that it would be perfectly acceptable for them to distribute the cards to other people. Quadir and Clementi were stunned. “You can’t find prepaid cards loaded with more than ten thousand dollars on the dark Web,” Quadir told me. + +Quadir and Clementi cultivated confidential sources in the payments industry, and developed a working theory: that the company’s primary business purpose was to serve organized criminal networks and Russian oligarchs—to be a “one-stop-shop” for “large-scale money laundering operations that would require scale to support billions in dirty money, annually,” they wrote, in a presentation for Safkhet investors. The key was Wirecard’s banking license, which enabled it both to accept criminal funds and to obscure their source. + +For Wirecard’s leadership, Germany’s criminal investigation into the *Financial Times* did not come as a surprise—Marsalek had supplied its first witness. For three years, he had maintained a relationship with Gary Kilbey’s son, Tom. “It was quite a difficult period,” Gary Kilbey told me. “Jan was promising him the world.” It paid off: Tom had been at his father’s office when the broker walked in and shared the rumor that the *F.T.* was publishing its hit piece at 1 *P.M.* Now Tom reported it to Marsalek, who wanted affidavits from everyone in the room. “Don’t you fucking get me anywhere near it,” Gary Kilbey replied. But Gary’s daughter’s boyfriend—fresh out of prison for laundering money for a drug-dealing gang—had witnessed the scene with the broker, and he offered to make a statement. + +In February, 2019, Marsalek met with Munich’s top public prosecutor, Hilde Bäumler-Hösl. He told her that he had spent years infiltrating the London spread-betting scene, as a matter of “enemy reconnaissance,” and that the *F.T.* was colluding with short sellers. Three days later, Bäumler-Hösl issued a statement to the German press: “We received serious information from Wirecard that a new short attack is planned, and that a lot of money is being used to influence media reporting.” + +[](https://www.newyorker.com/cartoon/a26966) + +“Oh, God, outside is calling.” + +Cartoon by Lawrence Lindell + +This was not the only defensive action that Marsalek took. Wirecard signed an agreement with Arcanum Global Intelligence, a strategic-intelligence firm whose leadership is made up of former senior British, American, French, and Israeli intelligence and military leaders. Representatives for Arcanum insist that the firm’s work for Wirecard consisted only of an internal investigation into Pav Gill’s leak of confidential information from the Singapore branch. But on February 5th, days after McCrum’s first article about the Asia division, Arcanum’s founder, Ron Wahid, sent Marsalek a proposal, titled Project Helios, to “investigate and identify short sellers” and to carry out a multi-stage “plan of attack.” Although Arcanum’s leadership claims that the proposal was never executed, a letter written by the firm, addressed to the U.K.’s Financial Conduct Authority, says that Arcanum was “retained by Wirecard to investigate a series of short selling attacks.” + +“Phase I will be a ‘scoping and disclosure phase’ where all existing information and initial intelligence findings are reviewed,” the proposal read. The next phase would include “more targeted and in-depth intelligence collection and analysis.” Targets’ “wrongdoings and vulnerabilities” would be “judiciously pursued.” For a fee of two hundred thousand euros a month, former “senior leaders from the world’s most powerful intelligence and law enforcement agencies,” as Arcanum put it, would deploy their combined networks and expertise in the service of Wirecard. + +McCrum had continued to investigate Wirecard’s activities in Asia. Half of its global sales appeared to come through three clients: one in Dubai, one in Singapore, and the third, called PayEasy, in the Philippines. McCrum’s colleague Stefania Palma set off for Manila, to check out PayEasy. Its supposed headquarters turned out to be shared with a bus company. Another Wirecard partner, ConePay, was a private home in a remote village surrounded by rice paddies. Palma was greeted by two Filipino men, who were grooming a small white poodle and a Pomeranian. Neither of them had heard of ConePay. Then a family member produced a few scraps of mail. One was a document from Wirecard Bank, addressed to ConePay International, showing a balance of thirty euros. + +By now, Marsalek had fully entrenched himself in the affairs of his Russian mercenary friend, Stanislav Petlinsky. Wirecard arranged a deal with the R.S.B. Group’s holding company in Dubai, to sell the mercenaries its prepaid-debit-card software. In an encrypted chat with Dagmar Schneider, a senior member of Wirecard’s finance team, Marsalek wrote that if auditors had questions about R.S.B. they should call Vladimir Putin. As McCrum and Palma closed in on the fraud in the Philippines, Marsalek joked with Schneider about having people “shot by MY Russians at RSB.” The following week, he wrote to her that he had “been struggling with the FT since 5 in the morning.” + +“Send YOUR Russians to London,” Schneider replied. “They should give us some peace.” + +McCrum and Palma published their investigation into Wirecard’s partners on March 28th; two weeks later, BaFin filed a criminal complaint against them for “suspicion of market manipulation of Wirecard shares.” Outside investors took the German government’s actions as a powerful signal. In late April, the Japanese company SoftBank, which runs the world’s largest tech-focussed venture-capital fund, invested a billion dollars in Wirecard, in exchange for bonds that could be converted into a 5.6-per-cent stake. But the *F.T.* stories still rattled the SoftBank team enough to ask to see lists of Wirecard’s biggest clients in Asia—which Marsalek faked. + +Wirecard treated every short seller as an existential threat. In 2016, Marsalek had approached Nick Gold, another of Gary Kilbey’s contacts in the London spread-betting scene, and offered him three million pounds to persuade a rich friend to stop shorting Wirecard. Gold declined; he found Marsalek boring, he said, and thought that the way he held his cup of coffee suggested that he was “a loser.” Only a crooked company, Gold said, would send a senior executive to hunt down its critics. + +Three years later, a British former undercover cop, who now works as a private investigator and goes by Jon, was hired to work for a client who had set up temporary residency at the Dorchester hotel, in London. The client was well built, with close-cropped hair and an even stubble. He was of Libyan background, but had grown up in France, spoke flawless English, and tipped the hotel staff with high-denomination notes. “He wanted countersurveillance on himself when he was in the U.K., to make sure that no one was following him,” Jon told me. + +Jon doesn’t like the term “private investigator,” because he thinks it diminishes the scope of what he does. On an average day, he collects the travel histories and police files of five to ten targets, through contacts in the public sector. They don’t know his full name—they just know not to ask questions, and that they will be paid in cash. His clients include businesses, government agencies, and billionaires, and his duties range from spying on philandering spouses to helping international criminal gangs insure that a stolen passport can be used to get a murderer across a border. “There’s a lot that is very questionable that I can do, that I have done,” he said. “In the police, you have to have morals—or you’re meant to. That’s the whole point of being a police officer. And then you come out into the private sector and—let’s be honest—it *really* doesn’t matter.” For almost four hours, he spoke candidly, on the condition that I neither publish his full name nor describe him physically. + +The client at the Dorchester introduced himself as Rami, but Jon didn’t know his business. After a couple of months, Jon found the man’s full name, Rami El Obeidi, and learned that he had briefly served as the head of foreign intelligence for Libya’s transitional government, during the revolution. + +Like Marsalek, El Obeidi wore high-end Italian clothing brands, and he moved with ease through the strange world of former military and intelligence officers. He was apparently a major Wirecard investor, and a regular visitor to Marsalek’s secret mansion near the Russian consulate in Munich. To protect his financial interests, El Obeidi had come to London to run an intelligence operation of his own. The main target was Nick Gold, who had somehow been named as a suspect in BaFin’s complaint, alongside Dan McCrum. + +Gold had made a fortune selling industrial supplies, and gambled it wherever he thought he had an edge. He was handsome and athletic, with dark, flowing hair—a generous, charismatic party host in his forties who did lots of cocaine and dazzled guests with card tricks at his mansions in London, Miami, and Cannes. “I used to go up to Oxford Street when I was seventeen and I would hustle people,” he told me. “Some sucker would come, like you, and you’d lose.” In the decades since, he has been banned from casinos for counting cards, and from betting on horse racing for coördinating with jockeys to throw races. Once, before betting on how long it would take for a soccer match to reach its first throw-in, he paid off a player to kick the ball out of bounds in the opening seconds of the game. “It’s not gambling if I know the outcome,” he insisted. “I’ve never gambled. I’ve never played a game I thought I could lose.” + +Paul Murphy met Gold at Gary Kilbey’s sixtieth-birthday party, a raucous gathering at which Kilbey urged his guests to “drink as much as you can take.” Murphy had heard that Gold was a partial owner of the Box, a high-end cabaret club in Soho, where the hostess reportedly welcomed guests to the 1 *A.M.* burlesque show with instructions to “answer every fetish” and “do all the cocaine you can.” As Gold remembers the encounter, Murphy gave him his number and invited him to call if he ever had a newsworthy tip. Murphy’s recollection was of something more instrumental: “I wanted to send in a young, blond, female reporter to harvest crap from him.” + +One day, Gold called Murphy, to pitch a story about a sports-betting company. But Murphy told him that he had no time to talk—he was tied up with Wirecard matters. “The minute he said, ‘I’m stuck on Wirecard,’ I knew this was a no-brainer scenario,” Gold recalled. “I have to short sell this company within an inch of my life. Which I did.” + +That summer, a mutual acquaintance of El Obeidi and Gold’s, a soccer agent named Saif Rubie, casually bumped into Gold at a party in Cannes. Gold, as he recalls, was “dancing on tables and being a lunatic, as I am—having a great time” when Rubie approached him and said that he was working for a group of foreign investors who were looking to invest billions. Gold invited Rubie to bring the investors to his office in London the following week. + +On the morning of July 17, 2019, Rubie walked into Gold’s office, accompanied by a man from Lancashire who claimed to represent the foreign investors. In fact, he was a private-intelligence operative working for El Obeidi, carrying a hidden recording device. Gold suggested a bet against Wirecard, claiming that the *F.T.* was about to publish a story that would send the share price to zero. “It could be tomorrow, could be—you never know,” Gold said. The tip was solid, he assured them: his source was the investigations editor, Paul Murphy. + +“German politicians were proud to be able to say, Hey, we have a fintech company!” a parliamentarian observed. + +By coincidence, Gold’s timing was right. A few hours after that meeting, Dan McCrum sent Wirecard a series of questions, revealing he knew that most of the company’s operations in Dubai were centered on fake customers. Marsalek, who had already received a copy of the Nick Gold recording from El Obeidi, summoned a public-relations expert, who suggested that they share the recording and McCrum’s suspiciously timed questions with Sönke Iwersen, the head of investigations at *Handelsblatt*, the German newspaper. The private investigator from Lancashire spoke to Iwersen on “deep background,” to supply details without being named. He mentioned that he had been working for a Wirecard investor but omitted that the investor was a former Libyan spy. + +Wirecard’s lawyers wrote to the *F.T.*, saying that Wirecard had passed evidence of insider trading between Nick Gold and Paul Murphy to the British and German authorities. The letter demanded that the paper not publish any Wirecard stories until investigations were complete. + +Murphy immediately texted Gold and told him that he had been recorded. “Paul, you’re a brilliant reporter, but you’ve just done something really dumb,” Lionel Barber, the editor of the *F.T.*, told Murphy. Murphy offered Barber a full audit of his finances. But it wasn’t enough; the reputation of the paper was on the line. For four years, “I had told the compliance people, the lawyers, ‘Get lost, we’re doing this story,’ ” Barber told me. “But when this came up I had to do something.” He hired outside counsel to investigate Murphy and McCrum. “You’re going to have to spend some time in the sin bin,” he told Murphy. + +Wirecard, now emboldened, delegated legal authority to the Arcanum officers to act on its behalf “in any such way that they consider necessary and lawful.” Arcanum’s vice-chairman at the time, Keith Bristow—who had served as the first director-general of the U.K.’s National Crime Agency—met with the Financial Conduct Authority, as part of Wirecard’s effort to get the agency to investigate the *F.T.* (The F.C.A. declined to comment on its relationship with Arcanum.) Arcanum’s leadership includes a former director of national intelligence in the U.S. and a former head of the British Army. The group capitalized on its connections even when it had no clarity on the origins of the information it shared. Although the Arcanum team had apparently never heard of El Obeidi, it drafted a letter to the British authorities in which it claimed to have “considerable knowledge” of the “events and subjects of interest” leading up to El Obeidi’s sting operation on Gold. + +That fall, El Obeidi hired twenty-eight operatives to set out on the streets of London, on a mission called Palladium. The ground team was led by Hayley Elvins, a former MI5 officer, and the operatives communicated with one another through a private walkie-talkie channel. There were a number of targets—all short sellers in London. Jon was now assigned to follow Gold. + +From time to time, Jon learns too much about an operation, and begins to question his role in it. “If there was just six of us watching him, I would have just gone along with it,” he told me. “And, looking back, in some ways I wish I had.” The team was instructed to use only legal practices, so that any intelligence collected would stand up in court. But Palladium felt disproportionate. It had a running cost of eighteen thousand pounds per day, and employed some of the most comprehensive, hostile surveillance methods Jon had seen. “I felt terribly sorry for him,” he said of Gold. “You know, I still have a conscience.” + +One day, Jon called Gold’s housekeeper from a burner phone. He said that he was a police officer, and needed Gold to call him about an ongoing investigation. Gold called him back almost immediately. “They’re doing a huge surveillance operation on you,” Jon told him. “I think you’re going to get fucked over here, royally.” + +Gold summoned Jon to his office. “I’ve been, you know, in the business long enough to know when someone’s high on coke,” Jon said. “He was high. And he goes, ‘Right! One of my contacts at the *Financial Times* is Paul Murphy. You’ve got to tell him about the surveillance operation!’ ” They went to Claridge’s, an upscale London hotel, to meet Murphy. Jon supplied him with Palladium documents and told him what he knew of the operational structure. + +Murphy asked Jon to prove his access and credentials. At that point, Jon remembered that, for a previous job, he had spied on another *F.T.* reporter, a man on Murphy’s team named Kadhim Shubber. Moments later, as Murphy recalled, “he sends me a fucking picture of Kadhim’s mum’s passport!” + +“It made me chuckle,” Jon told me. He also had a copy of Shubber’s bank card. “But I wasn’t trying to show off. I was just, like, Oh, what a small bloody world this is!” he said. “Like, how fun is this? I’m talking to Paul Murphy, who sat across from Kadhim, who I’ve gone and looked at—like, what are the chances? I found it quite ironic, really.” + +Now Murphy reached out to Elvins, the former MI5 officer who was running El Obeidi’s operation on the ground. “I tried to flip her,” he told me. “Unfortunately, I did it at about eleven o’clock at night, and I’d had a couple of drinks.” He texted Elvins that he could “obv see the damage to your firm we are about to do,” and added, “Work with me and I promise we won’t fuck you over.” Her reply came in the form of a complaint from her lawyers. Barber summoned Murphy to his office, and Murphy offered to resign. When Barber refused his offer, Murphy grew defiant. “You know, these stories—they don’t just float in through the fucking window!” he shouted. + +“Paul, I want the fucking fraud nailed,” Barber replied. “I want the story. And the story is not that you’re texting some ex-MI5 agent at eleven o’clock at night!” + +After two months, the external law firm cleared Murphy and McCrum. All summer, they had been quietly preparing the paper’s final blow—a straightforward piece that presented tangible proof of fraud and included all the underlying Wirecard spreadsheets and e-mails. The instructions from Lionel Barber were to “draw blood.” + +The piece was published on October 15, 2019. “And we just thought, We killed it—that’s it,” Murphy recalled. The story was so damning that investors called for a forensic audit, and Wirecard acquiesced. But the investigation would take six months, and Braun, Wirecard’s C.E.O., assured stock analysts that it would put to rest any concerns. At that point, “the fucking share price goes up,” Murphy said. “Everybody in Germany was saying, ‘Oh, yeah, the *F.T.* are full of shit.’ And also, at this time, people like Nick Gold actually were going mad. They were having psychotic episodes. He was found near death, slumped over his steering wheel.” (As Gold tells it, he had mixed alcohol and Xanax and pulled over for a nap on the side of the road.) “Nobody knew who to trust,” Murphy continued. “In this entire broad community that believed Wirecard was a fraud—and by this time it was kind of a wide community—everybody was fucking paranoid about everybody else.” + +Marsalek, who held eight passports, escaped to Moscow. His last known phone activity was last year. + +In the following months, the attacks on short sellers grew increasingly personal, and even violent. Fahmi Quadir was punched in the head by a masked man with brass knuckles while walking her poodle on the Upper West Side; she was knocked unconscious, and the assailant, who stole nothing, was never found. + +It also appeared as if operatives were collecting detailed information on Nick Gold’s trades; in the next few months, all his leveraged bets were liquidated, with losses into the tens of millions of pounds. “My name was tarnished. Banks were now shutting me off, overnight,” Gold recalled. “My wife left me.” + +One night, at the Box, “I’m doing coke, I’m off my mind, I’m going drinking like a lunatic, and I walk out with the hottest girl you’ve ever seen,” he told me. “Fifteen out of ten.” But it was a trap; a blackmail recording of the liaison arrived by e-mail. “The worst part was that I had my socks all the way up,” Gold, who is now sober, said. “You don’t want to be seen fucking with white socks up at my age.” + +In the year leading up to Wirecard’s collapse, in June, 2020, the leadership plotted a takeover of Deutsche Bank—an acquisition so huge that Wirecard’s balance-sheet fraud might be buried in the deal. “It was essentially Braun’s last roll of the dice,” Murphy said. Wirecard’s desperation continued. The auditors focussed on two bank accounts in the Philippines, which purportedly held the missing two billion euros. *COVID* restrictions complicated the auditors’ ability to visit the banks in person, so Wirecard reportedly hired Filipino actors, posing in fake bank cubicles, to attest to the funds on a video call. But the auditors persisted, and asked Wirecard to prove that it controlled the funds by transferring four hundred million euros to one of its accounts in Germany. When Wirecard failed to perform the transfer, the auditors contacted the Philippine banks directly—both of which replied that Wirecard’s accounts did not exist. Days later, Braun was required to announce the auditors’ findings. Wirecard’s share price plummeted eighty per cent, and the company was soon forced into bankruptcy. + +Fahmi Quadir’s short bet cleared tens of millions of dollars. A couple of larger funds made hundreds of millions. Other short sellers made no money, because they were too early. “We consistently underestimated people’s ability to look the other way,” Leo Perry, the fund manager in London, told McCrum. + +In Germany, there was a raft of resignations and firings: Felix Hufeld, the head of BaFin; the head of Germany’s audit regulator; several leading Wirecard analysts at other European banks. A German parliamentary inquiry held a hundred witness hearings and reviewed nearly four hundred thousand pages of documents, concluding that the behavior of Wirecard and its enablers was “the largest financial scandal in the history of the Federal Republic of Germany.” The report blamed “collective supervisory failure,” “the longing for a digital national champion,” and “the German mentality toward non-Germans”—specifically, Quadir and McCrum. “German supervisory authorities are not fit for the ‘Internet Age,’ ” the report concluded. Olaf Scholz, Angela Merkel’s finance minister, who oversaw BaFin, told the parliamentary inquiry that he bore no direct responsibility for what had taken place under his watch. Later that year, he became the Chancellor of Germany. + +Markus Braun was arrested in Munich, and charged with fraud. He maintains that he is an unwitting victim of a scheme orchestrated by Marsalek and others. The trial is ongoing. Oliver Bellenhaus, who ran Wirecard’s fake partner in Dubai, recently testified that the company’s partnerships in Asia were “a sham right from the beginning.” + +“You cannot understand Wirecard if you understand Wirecard only as fraud,” Felix Holtermann, a financial reporter at *Handelsblatt*, told me. “It’s not a Potemkin village, it’s not a Bernie Madoff case.” According to Holtermann, who has also written a book about the company, Marsalek routinely “used his power to override Wirecard’s very, very small compliance department” to issue bank accounts, credit cards, and debit cards to Russian oligarchs who were on European financial blacklists. “Germany was, and still is, the money-laundering saloon of Europe,” he said. “Only the biggest washing machine broke.” + +In the past two years, investigations by journalists, prosecutors, police, and intelligence agencies have turned up an array of astonishing facts about Marsalek’s activities outside Wirecard. At his secret mansion near the Russian consulate, he regularly hosted gatherings with government officials and spies. They came from Russia, Austria, and Israel—but never, it seems, in any official capacity. + +Marsalek was also dabbling in political affairs. A major issue in the lead-up to Austria’s 2017 elections was migration from sub-Saharan Africa and the Middle East. Marsalek—who was connected to members of Austria’s far right—started developing plans to assemble a fifteen-thousand-man militia in southern Libya, to prevent migrants from reaching Mediterranean shores. Organizational meetings were held at the mansion in Munich, and included current and former senior members of Austria’s defense and interior departments. The project’s security adviser was Andrey Chuprygin, a former Russian lieutenant colonel and a professor of political economy who is widely suspected, in Western intelligence circles, of maintaining a close relationship with Russia’s military intelligence agency, the G.R.U. (Chuprygin, who denies links to Russian intelligence, told the *F.T.* that he advised Marsalek only on “shifting politics and tribal dynamics.”) + +At some point, Marsalek asked an Austrian intelligence officer named Egisto Ott to design a surveillance-proof room in the mansion. “It was a complete botch,” an independent security professional later testified. “The execution was extremely poor.” But Ott was useful in other ways. Under the direction of his former boss Martin Weiss—the onetime head of operations at Austria’s intelligence agency, the B.V.T.—he carried out regular background checks on Marsalek’s behalf, according to thousands of pages of leaked Austrian investigative files. Marsalek allegedly paid for searches on at least twenty-five people whom he suspected of having ties to intelligence agencies. Neither man still had access to the B.V.T.’s systems—Weiss had resigned his post, and Ott, who was suspected of selling state secrets to Russia, had been reassigned to work at Austria’s police academy. But they managed to run the searches regardless. (Weiss could not be reached for comment. Ott denied conducting background checks.) + +It is unclear what Marsalek was up to. He seemed to take every opportunity to play a part in political matters, no matter how strange or futile. At one point, he involved himself in an effort to relocate Austria’s Israeli Embassy to Jerusalem, to align with the policy of President Donald Trump. Marsalek’s name was found on a list of possible seed investors in a company that would buy the remains of Cambridge Analytica, the data-collection firm that was mired in scandal for its role in influencing elections. When it came to Libyan matters, Marsalek seemed to get a thrill out of telling people that he had body-cam videos of horrific battlefield violence, saying that they showed “the boys” killing prisoners. He boasted that Petlinsky had taken him to Syria to embed with Russian soldiers, on a joyride to the ancient city of Palmyra. According to Weiss, Marsalek “wanted to be a secret agent.” But there’s no concrete evidence that he was. + +Nevertheless, Marsalek’s position at Wirecard gave him access to materials that might be of interest to a foreign intelligence service. In 2013, the company began issuing credit cards with false names to the German Federal Criminal Police Office, for use during undercover investigations—meaning that Marsalek might have had insights into the agency’s operational spending. It later emerged that the B.N.D., Germany’s foreign-intelligence service, used Wirecard credit cards, too. After Marsalek’s escape, the B.N.D. claimed that it was unaware of his connections to Russian intelligence. + +In 2014, Marsalek led an effort at Wirecard—in partnership with private Swiss and Lebanese banks—to issue anonymous debit cards that could be preloaded with up to two million euros per year. In his pitch, he told Mastercard that such cards would spare ultra-high-net-worth individuals the annoyance of being asked for stock tips, for example, when a waiter took a credit card and learned the client’s name. But it is difficult to conceive of a more useful setup for covert operational expenses—an anonymous asset, accepted by everyone, perfect for bribing politicians, paying assassins, or moving large sums of cash across borders. + +Jan Marsalek’s getaway jet landed in Minsk. From there, he continued to Moscow, on a fake passport, likely with the assistance of Petlinsky, according to the Dossier Center, an investigative outfit. Both men have changed their names; Petlinsky’s whereabouts are unknown. The next month, Germany sent an extradition request for Marsalek to Russian law-enforcement agencies. They replied that they had no address for Marsalek, and no record of his having entered the country. His last known phone activity was last year. + +“He’s quite clearly hiding in one place, just because of the logistics of how all sorts of systems work when you travel,” Jon, the private investigator, told me. “Every time a passport is visually scanned into another country, we can get those records here.” He speculated that Marsalek will soon be “drained of all his money,” and recalled clients “who have done disappearing acts,” made it to Russia, and come back a few years later, completely broke. “Out there, you pay for your safekeeping,” Jon said. “As soon as you don’t have money, then you’re disposable.” + +Last summer, a grainy photo appeared to show Marsalek in an upscale Moscow neighborhood, wearing a red Prada jacket and climbing into an S.U.V. “It actually does look like him,” Rami El Obeidi, the former Libyan spy chief, mused on Twitter. “Except, knowing him, he never wore Prada (unless Russia got the better side of him). He preferred Brioni, like I do.” ♦ + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/Sanctuary.md b/00.03 News/Sanctuary.md new file mode 100644 index 00000000..363567f4 --- /dev/null +++ b/00.03 News/Sanctuary.md @@ -0,0 +1,461 @@ +--- + +Tag: ["🏕️", "🐘", "🤝🏼"] +Date: 2023-03-05 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2023-03-05 +Link: https://magazine.atavist.com/sanctuary-tarra-elephant-georgia-tennessee-carol-buckley/ +location: +CollapseMetaTable: true + +--- + +Parent:: [[@News|News]] +Read:: 🟥 + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-SanctuaryNSave + +  + +# Sanctuary + +###### The *Atavist* Magazine, No. 136 + +Shannon McCaffrey is a political reporter at the *Atlanta Journal-Constitution.* Previously, she worked for the Associated Press and Emory University. She is also a journalism instructor at Kennesaw State University. She holds an MFA in narrative nonfiction from the University of Georgia. + +**Editor:** Seyward Darby +**Art Director:** Ed Johnson +**Copy Editor:** Sean Cooper +**Fact Checker:** Sky Patterson +**Photographer:** Peyton Fulford + +*Published in February 2023.* + +--- + +*Prologue* + +Hurricane Michael crashed through southern Georgia in a fury. Winds whipping at more than 100 miles per hour sheared off rooftops and stripped cotton plants bare. Michael had fed on the tropical water of the Gulf of Mexico, gathering strength. By the time it made landfall, it was one of the most powerful hurricanes in U.S. history. + +In its aftermath, Carol Buckley gazed out at the wreckage strewn across her land. It was October 2018. Three years earlier, emotionally broken, she had come to this secluded place just north of the Florida Panhandle in search of a new beginning. Now she feared that she would have to start from scratch once again. + +Buckley fired up a Kawasaki Mule and steered the ATV across the rutted fields to get a closer look at the damage. At 64, Buckley had a curtain of straight blond hair, and her eyes were the pale blue of faded denim. Years spent outdoors had etched fine lines into her tanned face. The Mule churned up a spray of reddish mud as she bumped along. + +Michael had toppled chunks of the nearly mile-long chain-link fence ringing Buckley’s land. She was relieved to see that the stronger, steel-cable barrier inside the perimeter had held. Felled longleaf pines lay atop portions of it, applying immense pressure, but the cables hadn’t snapped. Installed to corral creatures weighing several tons, the fence stood firm. + +Here outside the small town of Attapulgus, near quail-hunting plantations and pecan groves, Buckley had built a refuge for elephants. It was the culmination of a nearly lifelong devotion to the world’s largest land animals. But at the moment, Buckley’s refuge lacked any elephants—and one elephant in particular. + +There are many kinds of love stories. This one involves a woman and an elephant, and the bond between them spanning nearly 50 years. It involves devotion and betrayal. It also raises difficult questions about the relationship between humans and animals, about control and freedom, about what it means to own another living thing. + +The woman in this story is Buckley. The elephant is named Tarra. They met at a tire store in California, and together followed a serpentine path from spectacle to safety: from circus rings to zoo enclosures to a first-of-its-kind sanctuary. But now their bond was being tested. For complex reasons, Buckley had lost custody of Tarra, and just before Michael struck, a jury had deadlocked on whether the two should be reunited. In a few months, the case would go to trial again. If Buckley won, she would bring Tarra home to Attapulgus. If she lost, it was possible she’d never see the elephant again. + +The uncertainty was a nightmare. But the fence Buckley built for Tarra had withstood a monstrous storm. This was, she thought, a good omen. + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-11.jpg?is-pending-load=1) + +*I.* + +Anyone who has ever had a beloved pet can tell you that the relationship between an animal and its owner is special. Pets aren’t property in the way a house, a car, or a pair of shoes is. Some people love their animals in ways that defy logic. They don’t think of them as things; they think of them as family. + +Even more nuanced are the relationships people have with highly intelligent animals like chimpanzees and dolphins. And elephants. In the past few decades, research has piled up showing that elephants are some of the brightest and most emotionally complex creatures on the planet. Like humans, they are self-aware—they can even recognize themselves in a mirror. They can also experience pleasure, pain, and grief. + +Discoveries about elephant intelligence have helped bring about a sea change in the way the animals are treated. Some circuses, under pressure from animal rights groups, have stopped featuring elephant acts. Ringling Bros. retired its elephants in 2016, then shut down altogether the following year. Some U.S. states have banned exotic-animal performances and toughened animal welfare laws. + +Activists are pushing for governments to do more: In 2022, the New York Court of Appeals considered whether Happy, an elephant in the Bronx Zoo, had the legal rights of personhood. If the question seems preposterous, consider that courts have held that corporations can be considered people in certain instances. So why not an elephant, which is a living, breathing creature? + +Last June, the appeals court rejected the legal argument, which had been presented by an organization called the Nonhuman Rights Project, by a 5–2 vote. Still, some animal rights advocates see reason for hope: The case spurred public dialogue about the treatment of captive animals and whether some species should be no one’s property, ever. + +Buckley’s views on owning animals have changed over the years. Understanding how and why means starting at the very beginning. Buckley grew up with dogs, and as a young adult she had a German shepherd named Tasha. One day in 1974, Tasha broke Buckley’s concentration when the dog went into a frenzy, barking at something outside the bay window of Buckley’s home in Simi Valley, a Los Angeles suburb. Rattled by the commotion, Buckley looked outside to see what Tasha saw. And there it was: a baby elephant. + +A slim man was walking the elephant with a rope. The calf must have weighed as much as a refrigerator. Buckley bolted through the front door. “Who is she? Why is she here? What are you doing with her?” Buckley asked the man. + +Buckley was 20 and had just moved to Simi Valley. She grew up south of Los Angeles in a large family. At her all-girls Catholic high school, she had been a mediocre student and so hyperactive that the nuns ordered her to run laps to burn energy. Buckley wasn’t sure precisely what she wanted to do with her life, but she knew it wouldn’t involve sitting still. She was studying exotic animal management at a community college, figuring that would set her on an exciting career path. Seeing an elephant stroll past her door seemed like fate. + +“Come over to my tire store,” the man holding the rope told her. “She’s there every day. You can feed her.” Buckley was there waiting when the man and his elephant returned from their walk. + +At the time, few rules governed the ownership and treatment of exotic animals. Bob Nance, the tire shop’s proprietor, had a small menagerie—a Siberian tiger, parrots, monkeys—that customers could gawk at while their new Michelins were being mounted. His pets were a selling point. And a baby elephant? Now *that* was something. Her name was Fluffy, which a kid had suggested in a naming contest Nance sponsored in a local newspaper. + +Fluffy wasn’t Nance’s first elephant. Before her there had been Dolly, purchased from Louis Goebel, an exotic-animal impresario who’d created an LA theme park called Jungleland. But things with Dolly didn’t go as hoped. Her keepers pulled up to Nance’s shop, unloaded the nearly full-grown elephant, handed Nance a training hook, and were on their way. Nance, who had no experience with elephants, hacked off the end of a car axle, stuck it in the ground of his parking lot, and chained Dolly to it during work hours. At night he tethered her to an outbuilding. Once, Dolly yanked herself free—sort of. The police called to alert Nance. *Bob*, they said, *your elephant is dragging a building down Los Angeles Avenue.*  + +Nance feuded with city officials over whether zoning laws allowed him to keep an elephant at his store until one day, reluctantly, he agreed to sell Dolly to a circus operator. Soon after Goebel called him up. Jungleland was about to close its doors, and a newly arrived baby elephant needed a home. Could Nance help? A calf, Nance reasoned, would be easier to handle, at least for a while. “Of course,” he told Goebel. + +Fluffy was probably from Burma, where it was common for poachers to kill mother elephants in order to capture their valuable calves. It was an act of unimaginable cruelty, not least because baby elephants are extremely close with their mothers, and suckle for as long as five years. Fluffy was about six months old when she was shipped to the U.S. Most likely, animal merchants in Thailand packed her into a wooden crate, loaded her aboard a cargo plane, and launched her on a stomach-churning flight over the Pacific Ocean. It wasn’t unusual for baby elephants to arrive dead.  + +Fluffy became the star attraction at Nance’s store. She was good-natured and always hungry. Sometimes Nance stuffed her into the back seat of his Lincoln Town Car and drove her to nearby elementary schools, where wide-eyed students admired her. Nance outfoxed the city officials who’d complained about Dolly by keeping Fluffy in a travel trailer, which allowed him to move her when he needed to. + +After meeting Fluffy, Buckley herself became a fixture at the tire store. She showed up many mornings before class. She shoveled the dirty wood shavings out of Fluffy’s trailer and fed the elephant breakfast. Fluffy consumed four quarts of formula from a bottle, along with a pile of fruits and vegetables. Twice a week, Buckley wheeled a buggy through a local produce store and loaded it up with whatever was available: apples, oranges, cucumbers, bananas, onions. Carrots were Fluffy’s favorite. + +In those early days, Fluffy tolerated Buckley, but she adored Nance, who always had a pocket full of shiny jellybeans. She chirped excitedly whenever he appeared. Nance wasn’t too concerned about training Fluffy, until one day she nearly crashed through a glass door at the tire store. Nance agreed to let Buckley teach Fluffy a few things about how to behave.  + +Buckley had never trained an elephant before, so she started by using the methods she’d used with her dogs growing up. Positive reinforcement was the most important one. Buckley would instruct Fluffy to lift her foot, then demonstrate what she meant by physically pulling the elephant’s leg up off the ground. When Fluffy got the move right on her own, Buckley rewarded her with food. Fluffy was stubborn, but dangle a banana in front of her and she’d do anything you asked.  + +Back then, most captive elephants didn’t get rewards for behaving as they were told. In circuses, on film sets, and at animal parks, handlers used what’s known as dominance training. When an elephant didn’t do what they demanded, they whacked it with a bull hook or punished it some other way. Buckley was aware of that approach, but it didn’t feel right. Fluffy was bursting with energy and eager to please. Training her felt like play. “It wasn’t about control,” Buckley said. “It was about trust and building a relationship.” + +Years later, Buckley would question the foundation of her work with Fluffy. But for now she was happy. Fluffy seemed to be, too. The elephant learned to follow one command after another. Tricks came next. The future was rich with possibilities: of what Fluffy might do, of who might see her, of where Buckley might take her. + +By the time Fluffy was a year old, she and Buckley were inseparable. When Buckley sat on the floor of the elephant’s trailer to do homework, Fluffy watched over her. When Buckley didn’t pay the elephant enough attention, Fluffy nudged her playfully with her trunk.  + +According to Buckley, there were nights when she brought Fluffy home with her. She would back the elephant’s trailer up to the bay window of her house so they could see each other. Buckley studied with the light on while Fluffy dozed outside in the dark. Sometimes Fluffy awoke and stretched out her trunk, 40,000 tiny muscles working in unison, probing toward the lit window as if to make sure Buckley was still there. + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/elephant-refuge_courtesy1.jpeg?is-pending-load=1) + +Buckley and Fluffy at the tire shop in California. +*Courtesy of Carol Buckley* + +**Today, graduates of** the Exotic Animal Training and Management Program at Moorpark College run zoos, sanctuaries, and research facilities. Some manage animal acts for Hollywood studios. Moorpark has become the MIT of animal wrangling, the place where you learn how to get a tiger to open its mouth wide for a veterinary exam without being eaten alive. But back in the mid-1970s, the program was in its infancy. + +The two-year associate’s degree was the brainchild of William Brisby, a onetime high school biology teacher who taught himself how to work with dangerous animals. Sporting thick sideburns, a full beard, khaki attire, and aviator sunglasses, Brisby looked like a safari guide. In a way he was. He created a teaching zoo for the Moorpark program, the first resident of which was a gray wolf named Kiska. Students took turns caring for her. Brisby later acquired capuchins, a camel, even a lion, according to author Amy Sutherland’s book about Moorpark, *Kicked, Bitten, and Scratched*. + +Sutherland describes Brisby as both charismatic and problematic. He divorced his first wife, became engaged to one of his students, then broke it off to marry a younger one. A mythology sprang up around him, which gave him swagger. People said he’d trained dolphins with the Navy—not so, according to the founder of the Navy’s marine mammal program. + +Brisby could be tough, dictatorial even. “For the next two years in this program you don’t have a life,” he told first-year students. “You belong to me.” But Buckley wasn’t intimidated by Brisby. She was audacious and headstrong. Brisby became her mentor as she figured out what to do about Fluffy. + +By the summer of 1975, Buckley was dedicating all her free time to the elephant. She spent a month with Robert “Smokey” Jones, a legendary elephant trainer. She also volunteered to take Fluffy to events—people paid for the elephant to appear at parties or on camera. At a Mother’s Day celebration in Topanga Canyon, Fluffy surprised everyone, including Buckley, by plunging into a pool. When Fluffy was booked on Bob Hope’s Christmas special, she infuriated the star by [reaching out](https://www.youtube.com/watch?v=wFo6jsoqgf0) [with](https://www.youtube.com/watch?v=wFo6jsoqgf0) [her trunk](https://www.youtube.com/watch?v=wFo6jsoqgf0) to touch his crotch. + +Occasionally, Buckley recognized how precarious the whole endeavor was. She towed a two-ton elephant in a trailer on Southern California’s busy freeways and winding canyon roads. Once, up north in the foothills of San Jose, she saw a couple of boys at the side of the road harassing a snake. She pulled over and hopped out to scold them as the snake slithered into the woods. Then Buckley turned and saw the trailer; she’d parked at the edge of a steep drop. One wrong move—an emergency brake not set right, Fluffy shifting her weight just so—and the vehicle could have crashed into the ravine. Buckley felt a shiver and knew she needed to be more careful. + +The more time Buckley spent with Fluffy, the less she spent on schoolwork. She sought Brisby out for advice. She told him she saw a future with Fluffy, a chance to make the elephant her career, book gigs across California, maybe around the country. Brisby leaned back in his chair as she spoke. When she finished, he reminded her that the Moorpark program was designed to help students break into the exotic-animal management industry. With Fluffy, Buckley had already done that. She didn’t need Moorpark anymore. “Don’t come back for the second year,” Brisby advised. + +Buckley left school. She moved into a small trailer next to Fluffy’s on Nance’s property. According to Buckley, Nance started paying her on a weekly basis to care for the elephant. When Buckley asked Nance to build Fluffy a barn, he did.  + +But the arrangement didn’t last long. Simi Valley, ringed by hills and thick with citrus groves, had once felt a world away from the busy heart of Los Angeles. By 1976, however, housing tracts were crowding out the farms and ranches. Nance didn’t like what he saw and decided to relocate to Northern California. Buckley seized the opportunity. With a loan cosigned by her father, she bought Fluffy for $25,000.  + +Buckley was sure Fluffy would be a star, but decided that the elephant’s name wouldn’t do. She wanted something that would look good in lights. Buckley scribbled letters in a notebook, trying out different combinations. Eventually she wrote down T-A-R-R-A. Yes, that was it. *Tarra*. + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/elephant-refuge_courtesy2.jpeg?is-pending-load=1) + +Tarra and Buckley performing on skates. +*Courtesy of Carol Buckley* + +**The calls started** coming in. Tarra appeared in an episode of *Little House on the Prairie*, in which a circus passes through to the pioneer town of Walnut Grove. Carol Burnett sat atop Tarra in the movie *Annie*. Tarra appeared on one of Jerry Lewis’s telethons. + +But Buckley soon discovered that there was less demand in show business for a lone elephant than for a herd of three to five that could perform tricks together. Buckley wasn’t about to buy more elephants, so Tarra would need a gimmick to be competitive. + +One day a man approached Buckley at a sports expo in Santa Barbara where Tarra was doing tricks to amuse visitors. He introduced himself as an ice skater and gushed about Tarra.  + +“She’s so coordinated,” he said. “I could teach her to ice-skate!” + +“No, you will not,” Buckley huffed*.*  + +A year or so later, she reconsidered. When Buckley and Tarra weren’t on the road, their home base was Ojai, California, where they lived along the Ventura River. Twice a day, rain or shine, they waded into the river together. Tarra splashed excitedly while Buckley watched. The river was full of large, smooth boulders, and Tarra picked her way across them with astonishing ease. She was eight by then, and the size of an SUV; she ate about 50 pounds of food a day. But she was nimble. Buckley marveled at how Tarra balanced on the boulders, gripping the edges with her toes.  + +OK, Buckley thought, let’s give this skating thing a try. In Southern California, she decided, roller skates would be a better fit. + +Buckley visited a local welder, who estimated that it would cost $2,500 to construct metal skates big and strong enough for an elephant. Buckley had $3,000 in her bank account. She called her mother. “You know Tarra better than anyone,” her mother told her. “If you think she would like it, then do it.” Buckley emptied her bank account and commissioned the skillet-size skates. + +Then she went to a shoemaker to inquire about “boots”—really what she wanted was more like mammoth ankle braces—to give the elephant additional support. “Before you say no, just come and meet her,” Buckley pleaded. The shoemaker did and, charmed by Tarra, agreed to make the boots.  + +On a sunny spring morning, Buckley walked Tarra to a stretch of concrete near her home, the foundation for a house that had never been finished. Today it would be the setting for a most unusual lesson. Like she had so many times before, Buckley asked Tarra to raise one of her front legs. When the elephant complied, Buckley guided her foot into a skate—the straps were made of seatbelts, the wheels of industrial casters. Then she repeated the process with the other front foot. The leather boots rose about halfway up Tarra’s stocky legs. Buckley would only be trying out the front skates, to see how the elephant took to them. + +Tarra bounded off, trumpeting and chattering, rolling and playing. She seemed almost to bounce with glee. Wobbly at first, she quickly gained confidence and control. + +Two weeks later, Buckley took Tarra to an abandoned warehouse, where there would be room for her to experiment for the first time wearing all four skates. Tarra glided across the concrete floor. Her excitement was contagious. + +Buckley now had a roller-skating elephant. Tarra didn’t spin or do tricks; the fact that she was on wheels was enough to attract attention. The bookings poured in. Buckley and Tarra promoted Shriner circuses on the West Coast. They appeared at roller rinks and in vast parking lots. Before events, Buckley got on her hands and knees with a level to make sure the venue didn’t slope, making it difficult to stop. Then she adorned Tarra with a shiny headdress and got ready for the show. Buckley skated alongside Tarra, dressed in a leotard cut high at the leg. + +On the road, they bunked together in a custom trailer. When it was time to sleep, Buckley climbed into bed in a compartment up front and said good night. She could hear Tarra slump against the wall and slide down to the floor. The trailer shook as the elephant got comfortable. Buckley fell asleep to the rumble of Tarra’s heavy snores. + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-4.jpg?is-pending-load=1) + +*II.* + +The sharp wind that comes off Lake Ontario in winter can make even the hardiest soul seek refuge. In 1988, Buckley and Tarra were doing just that, hunkered down near Toronto. But they weren’t sheltering from the elements so much as from uncertainty. They had wrapped up a series of performing jobs when Leslie Schreiber, Buckley’s old Moorpark roommate and the co-owner of the Bowmanville Zoo in the town of Clarington, about 60 miles east of Toronto, hired Buckley to look after the facility’s seven elephants for a few months. Buckley added Tarra to the group and began keeping a journal, scribbling ideas and plans for a future that would look very different from her past. + +Buckley was at a crossroads, disenchanted with her nomadic life and unsure whether Tarra should continue to perform. After more than a decade on the road, it was clear the elephant wasn’t enjoying herself. When Tarra was younger, Buckley had been sure to make pit stops during long trips so Tarra could play, swim, and explore wooded areas. Now that she weighed nearly four tons, spontaneous leisure time was harder to manage. + +Meanwhile, Buckley had witnessed the unsavory side of the exotic-animal circuit. Many elephants were run through their paces by handlers they barely knew, who used bull hooks and batons to compel obedience. When the animals weren’t performing, they were often chained up. + +Not everyone treated elephants that way—certainly Buckley didn’t. But how could she justify being part of a culture that tolerated abuse? She loved Tarra but wondered whether she’d made the right choices. “Do I wish that when I first met her I knew all that I know now?” Buckley said years later. “Of course I do.” Then again, she’d started her career so young, at a time when few people in the U.S. gave a second thought to the welfare of animals. “All that we went through together, that’s how I gained the knowledge and the experience that has helped create another way and a better situation for her,” Buckley said. “I don’t regret it.” + +The unease Buckley was grappling with by the time she arrived at Bowmanville reflected a growing ambivalence across North America. People for the Ethical Treatment of Animals, which formed in 1980, had exposed the abuse of animals in research labs and slaughterhouses. PETA was polarizing, its tactics confrontational, but the inhumane practices and conditions it exposed were influencing public opinion about animals held in captivity. These included elephants, which were still mainstays of circuses and smaller outfits like Buckley’s. + +In Canada, Buckley initiated a new chapter of Tarra’s life. Elephants had been wowing crowds at American zoos since the first one opened in 1874, in Philadelphia, where curators bought an elephant from a traveling circus and tied it to a tree. Zoos had improved a lot since then, but there would always be downsides to captivity. Elephants are prone to foot problems and other ailments if they don’t have space to roam. They need stimulation that zoos can’t always provide. (Since 1991, more than 30 American zoos have eliminated their elephant exhibits altogether.) + +But Tarra was no longer a feisty calf, and at Bowmanville she seemed to enjoy being part of a herd for the first time in her life. Elephants are extremely social, and Tarra formed strong bonds. Buckley wondered if placing her at a zoo where she’d have a permanent community would be preferable to life on the road. + +After their stay in Canada, Tarra spent some time at the Racine Zoo in Wisconsin, then returned to Ontario. In 1991, Tarra turned 17, placing her on the precipice of the most fertile stretch of a female Asian elephant’s life. Research suggested that female elephants with offspring were less stressed than those without. Buckley reasoned that having a calf might make a zoo even more comfortable for Tara. As it happened, there was a breeding program in Ontario, a place called the African Lion Safari Park. There, while looking for a mate for Tarra, Buckley met someone just as obsessed with elephants as she was.  + +Scott Blais had begun working at the park when he was 13, cutting the grass, directing traffic, and picking up garbage. At 15, he graduated to elephant training. He learned to chain the animals inside barns and either beat them with bull hooks or use the tools to grab them by sensitive areas, such as under the lips or behind the ears, when they didn’t do as they were told. Pain was used to get elephants to stand on their heads and balance on their hind legs; they lived in a near constant state of submission. When Buckley arrived at the park with Tarra in tow, Blais was exposed to a different way of handling elephants. He started to view the techniques he used as barbaric. He asked Buckley to teach him, and they struck up a friendship. + +Soon they were a couple. They were 18 years apart in age, but that didn’t seem to matter much. Besides, Buckley looked younger than she was, while Blais, his hair already receding, looked older. Their relationship blossomed, and so did their shared vision for, as Blais put it, “the larger idea of how to change the lives of captive elephants.”     + +When Tarra became pregnant by a bull elephant at the park, Buckley considered her options. She needed to find a zoo that wanted an elephant, a calf, and two keepers—Buckley and Blais intended to stay together. The Nashville Zoo made an enticing offer: Excited at the prospect of housing Tarra, and eventually her baby, zoo administrators proposed creating a 30-acre elephant habitat. Buckley accepted the offer. She, Blais, and Tarra set off for Nashville.  + +## **Not everyone treated elephants that way—certainly Buckley didn’t. But how could she justify being part of a culture that tolerated abuse?** + +**Elephants gestate** for nearly two years. Unlike in the wild, Tarra had never watched a fellow female give birth or witnessed the tight matriarchal herd that forms around a newborn to help raise it. No one was sure how Tarra would react to a calf.  + +The months passed peacefully, until one morning Tarra bolted across the zoo yard, her eyes bulging. She had experienced her first labor contraction, and it startled her so much that she seemed to be trying to run away from the pain. The veterinarian was informed, but then the contractions stopped. + +“You’re OK, girl,” Buckley told Tarra. “You’re going to be OK.”  + +Three days passed. The wait was agonizing. Finally, Tarra’s contractions began again. The veterinarian wanted to speed up the labor by inserting an IV line of oxytocin. Buckley called a friend, an elephant expert at the London Zoo, who warned that if the calf came too fast, and Tarra wasn’t dilated, the birth could be dangerous. + +“Is she squirting milk?” the friend asked.  + +Buckley looked at Tarra’s chest. “Yes.”  + +“That means she’s dilated,” the friend said. He told Buckley that Tarra should receive a lower dose of oxytocin than the vet had proposed, and not from an IV, but through a shot in a muscle. + +The needle pierced Tarra’s grooved skin, and within a few minutes she was in the throes of labor. In captivity, elephants are often chained up during birth for the protection of vets and keepers. Buckley hated the idea. As a compromise, she agreed to put a 40-foot chain on one of Tarra’s back legs; that way the elephant would still be able to move around. + +Tarra squatted, and finally there was progress. A head emerged, followed by front legs folded into the body. But soon the calf became stuck. There was no good way for the humans watching the birth to solve the problem. Then a primal instinct took hold of Tarra: When the next contraction came, she lifted her unchained back foot, placed it against the calf’s head, and in a single swift movement pushed the baby out. + +Slick and gray, the calf landed on the barn floor. Tarra seemed exhausted but calm. She stepped a few feet away and watched. The baby lay silent and still. It wasn’t breathing. The vet moved in to resuscitate it. He crouched over the calf and pumped its chest rhythmically with his palms. Five minutes passed. Ten. Twenty.  + +“Keep trying,” Buckley implored. Tarra didn’t interfere; she remained at a distance, as if keeping vigil. Buckley was weeping, her sobs deep and ragged. + +After the vet declared the calf dead, Tarra walked back over to it. With her trunk, she sucked at the calf’s mouth, then placed the tip of her trunk against the baby’s so that their nostrils were touching. She breathed out hard, then sucked in even harder. It seemed like a last attempt to remove anything that might be blocking the calf’s airways. + +Then, gently, Tarra placed a back foot against the baby’s side. Elephants’ foot pads are sensitive—so sensitive they can detect a heartbeat. After a few moments, Tarra walked away. + +Later, a necropsy revealed that the baby had arthrogryposis, a stiffening of the joints often accompanied by limb deformities. Apparently, while pregnant, Tarra had been bitten by a mosquito carrying a virus that caused the condition. It was a freakish tragedy that meant there would be no happy elephant family on display at the Nashville Zoo, at least not one including Tarra. The zoo wanted Tarra and Buckley to stay, but the promised elephant habitat never materialized. Disillusioned, Buckley decided to leave. + +Rather than look for another zoo, Buckley wanted to try something new. There was an idea she had been toying with for a while: What if there was a place elephants that had been cast out of zoos and circuses could go? Somewhere that the sick and elderly could spend their last days? A refuge where elephants, and only elephants, could exist in a state as close to the wild as possible? No such place existed in North America. Buckley resolved to build it. + +She set out on the back roads of rural Tennessee looking for a piece of land cheap enough to afford and large enough for elephants to roam. She found it on the first day. The property lay at the end of a dirt road in the tiny town of Hohenwald, German for “high forest.” There, along Cane Creek, the hills rolled gently into a large valley. The land surrounding the property was owned by Champion International, a paper company. It was quiet, private, and protected. + +After the 112 acres were purchased, Buckley and Blais spent their days in the sweltering Tennessee heat sinking reinforced fence posts. They worked through red tape with skeptical state wildlife authorities to get the necessary permits to establish the Elephant Sanctuary in Tennessee. In March 1995, the day after Tarra’s barn was finished, she moved in.  + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-8.jpg?is-pending-load=1) + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-5.jpg?is-pending-load=1) + +*III.* + +The sanctuary became a runaway success. Over its first 15 years, the mom-and-pop operation transformed into a nonprofit with a board of directors, an international reputation, and an annual budget of more than $3 million. It bought more acreage, built more barns, and hired more staff. Most important, it took in 23 elephants, about half of which were “retired” by their owners or guardians to roam the countryside in herds alongside Tarra. + +Each elephant had a gut-wrenching story. When Barbara arrived in 1996, she was emaciated, suffering from a wasting disease; she had been kept in isolation for years because her owners didn’t know what else to do with her. Jenny had been chained up in Las Vegas, underweight and barely able to walk because of an untreated leg injury. Shirley’s harrowing journey as a performing elephant had taken her to Cuba, where she was captured briefly by Fidel Castro’s forces, and then aboard a circus ship that caught fire and nearly sank, burning her in the process. An altercation with another performing elephant left her with a broken leg. + +Buckley saw each animal’s plight as a glaring symbol of human ignorance. At the sanctuary, the elephants healed. The “residents,” as they were called, took long walks along spring-fed streams. Some of them were interacting with other elephants for the first time in years. Like any community, they worked through minor dramas and personality conflicts. Remarkably, two elephants named Shirley and Jenny had lived together before. When they reunited at the sanctuary, they greeted each other like old friends and became inseparable. + +Tarra was the sanctuary’s welcoming committee. She was younger and healthier than the other elephants, and eager to make friends. But her closest companion was a dog on the property, a white mutt named Bella. Buckley would eventually write a children’s book about the pair, and they were featured on national TV. “When it’s time to eat, they both eat together,” Buckley said in a *CBS Evening News* segment. “They drink together. They sleep together. They play together.” + +Life at the sanctuary wasn’t always idyllic, however. There were controversies, including one involving an elephant called Flora. Once the centerpiece of a traveling circus run by a man named David Balding, Flora had landed at the Miami Zoo after Balding became concerned that she was too aggressive to be in front of crowds. When Flora was barred from the zoo after injuring a keeper, Balding thought the Tennessee refuge might be a good option. Balding dropped Flora off in 2004, and she went on a monthslong rampage, tearing up fences and directing her aggression at caregivers and other elephants. Gay Bradshaw, a psychologist and ecologist specializing in animal trauma, diagnosed Flora with PTSD and said that visits from Balding could hamper her recovery. Buckley forbade Balding from seeing Flora. Balding tried to change Buckley’s mind, but Buckley wouldn’t budge. The saga would play out in the documentary *One Lucky Elephant*, in which Balding comes across as sympathetic, Buckley as unyielding. + +The sanctuary also suffered tragedy. In 2006, Winkie, an Asian elephant, trampled and killed staff member Joanna Burke. The death hit the sanctuary’s tight-knit staff hard. Questions swirled about whether Winkie would be euthanized, but Burke’s grieving parents wouldn’t hear of it; their daughter loved elephants, they said, and she wouldn’t want the animal put down. Winkie remained at the sanctuary, and Burke was buried just outside the grounds. + +Upsetting incidents punctuated what some employees said was a tense work environment. Buckley labored day and night, and had no use for anyone who didn’t demonstrate the same level of commitment. In her mind, elephants came first; pity the person who disagreed. Even her romantic relationship grew strained. “People were always on edge,” Scott Blais wrote in an email, “always waiting for the next yelling session, never knowing what direction to turn.” + +Buckley has denied berating staff. If she yelled, she said, it was to get someone’s attention. “Elephants are potentially lethal. If staff doesn’t listen to instruction in the moment, they may be in danger,” Buckley explained. “If someone says I yell, it was always done out of concern for their safety.” + +Buckley knows she’s intense and single-minded, and she was never more so than about the sanctuary. It was her passion. She never hesitated to make her opinion known. When the board decided to build an elephant education center in downtown Hohenwald to give the sanctuary, off-limits to visitors, a public face, Buckley supported the idea, but she balked at the price tag and the board’s decision to pay chairwoman Janice Zeitlen’s husband, an architect, $60,000 to design the space. According to Buckley, when a tuberculosis outbreak hit the refuge, affecting elephants and humans alike, a board member told her not to report it to state regulators. + +The sanctuary would later deny this and allege that Buckley failed to implement proper tuberculosis containment protocol. It would make the claim in legal filings, because that’s where Buckley and the institution she cofounded were headed: to court. + +## **Buckley labored day and night, and had no use for anyone who didn’t demonstrate the same level of commitment. In her mind, elephants came first; pity the person who disagreed.** + +**On a cool** Saturday morning in November 2009, Buckley sat in her office gazing through a bank of windows at a soft expanse of pasture dotted with stands of maple and yellow poplar. Across the room was another set of windows, this one looking onto the interior of the sanctuary’s main barn, which housed several massive elephant stalls. The days when she watched Fluffy through the bay window at her home in California were a distant memory. + +The sanctuary’s board was convening that day. The group had recently discussed the refuge’s rapid growth with a consultant, and Buckley thought that would be the subject of the day’s meeting. Around 10 a.m., board members arrived one by one: an art gallery owner, a bank executive, an infectious-diseases doctor, local community leaders. The only member with a background in animal management was Buckley’s old Moorpark friend Leslie Schreiber.  + +As soon as the group had settled around a glass table in Buckley’s office, she sensed that something was wrong. Charlie Trost, a board member and attorney, seemed to be the only person in the room willing to meet her eye. He handed her a letter and told her to read it. The letter said she was being placed on involuntary leave pending review. Buckley wasn’t to speak to sanctuary employees, donors, or the media. + +The room went silent as Buckley looked up. + +“What’s happening?” she asked. “Why is this happening?” + +Trost replied that she should finish reading the document. + +Watching from across the room was Blais. He and Buckley were no longer a couple. According to Buckley, Blais had cheated on her with another staff member. (Blais denies this.) After separating, they’d continued working together—or tried to, anyway. By the time of the board meeting, Blais had come to feel that Buckley’s treatment of the staff posed a risk to the elephants. As he later put it in an email, there was “no way with the innate sensitivity of elephants,” especially “those who have experienced their own trauma,” that the sanctuary’s animal residents weren’t “affected by the impact that Carol’s abuse had on the care team.” + +Buckley’s vision went blank; time seemed to stop. The next thing she knew, she was kneeling in a closet in her home, which was located on the sanctuary grounds. She was staring at racks of clothes. She wanted to die; she thought she might. Schreiber had followed Buckley home. Now she eased her friend into a chair. + +Both Schreiber and the sanctuary’s managing director, Kate Elliott, who had attended the board meeting by telephone, disagreed with Buckley’s suspension. Trost informed them that it didn’t matter. “We have the votes to approve this,” he said. (Trost declined to be interviewed for this story.) + +Buckley wanted to fight the board, but that could jeopardize her chances of eventually returning to her job. Over the next few weeks, the days grew shorter and a winter chill set in. Buckley wasn’t allowed in the sanctuary’s barns, so she took long walks among the elephants when they were in the fields. The animals, and Tarra most important among them, knew nothing of the turmoil. They made Buckley feel grounded. + +According to Blais, over the course of Buckley’s leave, the full impact of her management style became clear, and he told the board he couldn’t work with her anymore. As a compromise, the board offered Buckley a job running global outreach—she would still be affiliated with the sanctuary, but she wouldn’t interact with staff or be involved in day-to-day operations with the elephants, including Tarra. Buckley said no. + +In March 2010, her leave became permanent: She was fired by the board. “They broke me the way you break an elephant,” Buckley said. “I’m tough and I didn’t break easily, but I broke.” + +To Buckley, the biggest blow wasn’t losing her job—it was losing Tarra. She had to leave her home at the sanctuary, but the elephant she had rarely been apart from for the past 35 years was better off staying put. The refuge was the only place that made sense for Tarra, and no one knew that better than Buckley; it was why she’d created it in the first place. + +When Buckley left Tennessee that spring, heading to Asia for a long-planned trip to work with elephant trainers, she said goodbye to Tarra in a field. “I’ll be back in a few months,” she told the elephant, who stretched her trunk toward Buckley’s nose, as she often did. Buckley walked away with a catch in her throat, but she was sure she’d be reunited with Tarra after her trip. Even if she couldn’t work at the sanctuary, she thought, she could visit Tarra. Maybe not right away, but soon enough. + +Instead, four years would pass before Buckley saw Tarra again. + +## **“They broke me the way you break an elephant,” Buckley said. “I’m tough and I didn’t break easily, but I broke.”** + +**Shortly after** being fired, Buckley sued the sanctuary for wrongful termination and for the right to visit Tarra. The sanctuary denied any wrongdoing and said that Buckley would not be admitted onto the property. Whether she would ever see Tarra again became a question for a judge. Buckley waited; the court system, as it so often does, moved at a glacial pace. + +One day, Buckley saw video footage of Tarra and thought she looked lethargic. Buckley decided to amend her lawsuit. She could live with the circumstances of her dismissal, but she couldn’t live without Tarra. She would fight to prove her ownership of the elephant—that Tarra belonged to her, not to the sanctuary, and that she should be the one making decisions about Tarra’s care. + +In December 2014, a judge permitted Buckley to visit Tarra, but set strict guidelines for the encounter. According to a court order, Buckley could make physical contact with Tarra only if the elephant “chooses to get close enough to the bars to allow Ms. Buckley to touch or pet \[her\] or otherwise show affection.” The visit took place on December 22. In a memo Buckley wrote immediately afterward, she said that Tarra seemed “despondent and looked and acted depressed.” She questioned whether the elephant had been drugged; the sanctuary’s veterinarian assured her that was not the case. When the visit ended, Buckley walked back to her car in tears. “It was devastating,” she said. + +Worried that sporadic visits would confuse and upset Tarra, Buckley decided not to see the elephant again until a court ruled in her favor. The next time she came in contact with Tarra, Buckley vowed, it would be to transport her to a new, shared home. Where that home would be was an open question. + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-9.jpg?is-pending-load=1) + +*IV.* + +As legal filings flew back and forth, Buckley stayed busy, spending months abroad working with elephants in India, Nepal, and Thailand. Over the years, Buckley had become a recognized expert in aspects of elephant health care. In Asia, she taught locals how to prevent and treat injuries and infections on the feet of working elephants. She helped install solar-powered electric fences around the animals’ enclosures so they wouldn’t have to be chained up. + +Pictures of Tarra popped up regularly on the Tennessee sanctuary’s Facebook page. A newsletter, *Trunklines,* documented her wanderings—typically she walked more than a mile per day—and her dunks in the property’s lakes and ponds. If Buckley tuned in at the right moment, she might see Tarra lumbering along, captured by the sanctuary’s live EleCam. But Buckley rarely looked for Tarra online. It was too painful. + +Instead, when she was stateside, Buckley focused on finding a place to build another sanctuary, somewhere she could relocate Tarra if she won her legal battle. A realtor sent her listings in Louisiana, Mississippi, Alabama, Florida, and Georgia. Her old friend Schreiber accompanied her around the Southeast to look at properties. Buckley rejected one spot after another. The soil was too sandy, or the location too close to busy neighborhoods. + +One day in 2016, her realtor called, excited. “I think I found it!” he said. He was referring to a plot of more than 850 acres, right along the Georgia state line with Florida, comprising grasslands, clusters of pine trees, a large pond, and even a small house where Buckley could live. Through donations and financing, she got the money she needed to purchase the land. She would have to do the same things she did in Tennessee to get it elephant-ready: clear fields, install fences, build a barn. She recruited volunteers and got to work. + +In August 2018, Buckley returned to Tennessee for the custody trial. It ended in a hung jury. Buckley went back to Attapulgus, to her empty elephant refuge. A retrial was scheduled for eight months down the road. Once more Buckley waited. When Hurricane Michael tore through Georgia, she was surprised to find that it gave her hope. + +## **If Buckley tuned in at the right moment, she might see Tarra lumbering along, captured by the sanctuary’s live EleCam. But Buckley rarely looked for Tarra online. It was too painful.** + +**The second trial** in the case of *Carol Buckley v. the Elephant Sanctuary in Tennessee, Inc.* began April 1, 2019, in the Lewis County Courthouse, a rectangular brick building in Hohenwald. Since putting down roots outside the town of some 4,000 people, the sanctuary had become a point of pride for locals. Tarra was its bona fide star. The courtroom was packed. Buckley sat with her lawyers, her nerves jangling like loose keys. She tried not to let it show. + +While the case was emotional for everyone involved, Buckley chief among them, legally speaking it turned on a single dispassionate question: Who owned Tarra? In his opening statement, Bob Boston, one of the attorneys for the defense, argued that when the sanctuary became a nonprofit a few months after it was founded, ownership of all its property, including Tarra, transferred to the new entity. He asked the jury not to wrench Tarra away from the place where she’d lived more than half her life, where she’d bonded with other elephants. Among the sanctuary’s “founding principles,” Boston pointed out, “was to remove elephants from lives of isolation.” + +Next, Ed Yarbrough, one of Buckley’s attorneys, turned on the country charm like a faucet. In a gentle drawl, he painted a picture of young Buckley in California. “When she saw this elephant, her whole life changed. I mean, it’s literally true,” Yarbrough said. “Here she is today, forty-some-odd years later, trying to get her elephant back.” He recounted adventures Buckley and Tarra had gone on together, “long before any of these people ever thought about a sanctuary.” To illustrate the crux of the case, Yarbrough made a comparison. “When you get married in Tennessee, if you already own your house and your land, and then somehow that marriage doesn’t work out, when you split up that doesn’t go to the other party. That’s separate property. It stays with the original owner,” he said. “Tarra is separate property and needs to stay with her owner.” + +Scott Blais had flown in from Brazil, where he’d moved to run another elephant sanctuary. His dark hair was thinner than ever, and he’d gotten married a few years before. He came to testify, as he put it, on behalf of Tarra. He took the stand after lunch on the first day. + +“Did you view the sanctuary and its elephants to be yours?” Boston asked him. + +“No,” Blais replied. “The whole basis of a nonprofit organization is it’s not a personal possession. It’s not a personal business. It’s a nonprofit that is governed by a board of directors, and with that, there’s no personal possessions that is the result of the activity of the organization. We don’t own the land, we don’t own … the physical property, the barn, the vehicles.” And certainly not the elephants. + +In Blais’s view, Buckley had betrayed their once shared vision of how elephants should be cared for—as creatures whose most important relationships were with other elephants. “This is their permanent residence. This is their life, with or without us,” he said. “It’s about their life separate from any individual human. And I think, when I really ponder it now, this is the fundamental principle we really got right.” + +When Buckley took the stand, Yarbrough started to ask if at any time she had given Tarra to the sanctuary. Buckley interrupted before he could finish the question. “It’s unthinkable,” Buckley said. “I would *never* do that voluntarily. I devoted my whole life to this elephant. Why would I give her away?”  + +Buckley’s answers to other questions showed that, in her mind, the notion of ownership and what was in Tarra’s best interest were inextricably linked. + +“First of all,” Yarbrough asked, “do you love Tarra the elephant?” + +“Of course,” Buckley replied. + +“Do you want what’s best for her?” + +“I’ve always wanted what is only best for Tarra.” + +“If you were persuaded that the best thing for Tarra was to remain right where she is, that’s where you would leave her?” + +“I would leave her there in a minute.” + +“If you were persuaded that what was best for her was to go somewhere else, would you do that?” + + “I’d do that as well.” + +“Is that what this case is about?” + +“That’s what this case is about. The only way that I can assert my authority over making sure that Tarra is cared for at the highest level, every aspect of Tarra, not just her physical—her psychological, her mental, her emotional—the only way I can assert my authority is to…,” Buckley trailed off, then gathered herself to finish her thought. + +“If they won’t acknowledge that I own her,” she said, “I cannot have any say about how she’s cared for.” + +## **“I devoted my whole life to this elephant,” Buckley said. “Why would I give her away?”** + +**The trial lasted three days.** Other testimony focused on the sanctuary’s “disposition policy,” which states that an elephant resident can only be transferred out of the facility, including by its owner, if a veterinarian, the board, and the site’s directors deem it to be in the animal’s best interest.\* Boston argued that the policy applied to “all elephants” at the sanctuary, including Tarra. Even if the jury found that Buckley owned Tarra, the fact that her transfer hadn’t been recommended meant she should stay where she was. However, Yarbrough argued that the disposition policy was a moot point: It hadn’t existed when Tarra became the sanctuary’s first resident, he said, so it didn’t apply to her. + +It was sunny outside, a true spring day, when the judge sent the jury to deliberate. After three hours, they glumly filed back into the courtroom. Like the jurors in the first trial, they were deadlocked. “Go ahead and talk some more and see what you can do,” the judge told them. “We’ll be here. Just let us know what you decide.” + +Buckley panicked. She wasn’t sure she could face another mistrial—more money down the drain, more years without Tarra. Her lawyers and friends in the gallery who’d come to show support tried to calm her down. But she needed an answer. + +Around 20 minutes later, the jurors came back. One by one, the judge asked the foreperson about the counts in the case. + +“Do you unanimously find that the Elephant Sanctuary has proven, by clear and convincing evidence, that Carol Buckley made an irrevocable gift to the Elephant Sanctuary of the right to possess Tarra?” the judge asked. + +“The answer is no,” the foreperson said. + +“Do you unanimously find, by a preponderance of the evidence, that the Elephant Sanctuary maintains a policy that permanent residents of the sanctuary are not removable by their owners?” + +“The answer to that is yes.” + +“Do you unanimously find, by a preponderance of the evidence, that Ms. Buckley agreed to transfer Tarra under the same policy referenced in question two above, that Tarra is not removable by Ms. Buckley?” + +“The answer to that is no.” + +Buckley wasn’t sure what it all meant. It seemed like a legal jigsaw puzzle, and she couldn’t work it out. Wide-eyed, she turned to her counsel. + +“Did we win? What happened?”  + +“You won, Carol. Tarra’s coming home*.”*  + +Buckley began to cry.  + +![](https://magazine.atavist.com/wp-content/uploads/2023/02/Elephant-Refuge-7.jpg?is-pending-load=1) + +*V.* + +A fine rain was falling the November day in 2021 when Buckley arrived in Tennessee to retrieve Tarra. The wipers squawked a steady rhythm against the windshield of her Subaru as she pulled onto the property where, more than 25 years before, she’d seen such promise and possibility. But Buckley didn’t dwell on what could have been. Two months prior, her refuge in Georgia had welcomed its first elephant, a former circus performer named Bo. Now Buckley was bringing home its second resident, and the one who’d inspired its creation. + +The Elephant Sanctuary in Tennessee had appealed the verdict in Buckley’s favor, and for two more years legal papers had shuffled back and forth. An appeals court finally ruled in the summer of 2021 to uphold the verdict and deny the sanctuary its request for a new trial. What followed were months of wrangling over the details of Tarra’s transfer. There was paperwork to fill out, medical testing to conduct. Some details of the transfer were contentious. The sanctuary didn’t want Buckley to be present when Tarra was loaded into the trailer that would carry her to Georgia. Perhaps it wasn’t surprising that, in a battle that became as bitter as this one did, the end would be messy. + +Barred from the barn where keepers were preparing Tarra for her trip, Buckley and her lawyer sat in front of a closed-circuit television in the sanctuary’s sleek new veterinary building. On screen they watched as a semi pushed Tarra’s trailer through the mud, maneuvering its back entrance until it was nearly flush with the gate of an enclosure next to the barn. Buckley’s breath caught as Tarra walked into view. The footage was grainy, but she could see that the elephant had aged. Her legs seemed stiff. Her grooved gray hide sagged. + +Tarra had been off the road for 27 years. Near the trailer, she was visibly uneasy. Caregivers scattered a trail of hay on the ground leading to the ramp she’d have to climb to enter the vehicle. Predictably, the elephant followed the food, scooping it into her mouth with her trunk as she went. But when she reached the ramp, she hesitated. Gingerly, she placed her front legs onto it but would go no further. After a moment she backed up and paced the enclosure. Again sanctuary staff lured her with a trail of hay; again she refused to ascend the ramp. Her ears flared and she swayed back and forth. Tarra was growing stressed. + +C’mon girl, Buckley thought. + +By the time Tarra was penned inside the trailer, four hours had passed. Buckley watched as several caregivers lingered at the door, presumably saying goodbye. As they departed, one of them collapsed on the ground, sobbing. (The Elephant Sanctuary of Tennessee declined an interview request for this story. “The sanctuary is honored to have provided care for Tarra for 26 years, and we express gratitude for all the things she has taught us,” it said in a statement. “Tarra is truly missed every day and will always be a part of our family and our herd.”)  + +The semi roared to life. The trailer began to move. Buckley climbed back into her Subaru and followed Tarra off the property. A short distance away, the vehicles pulled over. Buckley wanted to make sure Tarra had enough food for the journey to Georgia. She also wanted to see her elephant. + +Tarra’s eyes were wide. All 9,700 pounds of her were contained in a steel cage. Buckley was glad to see her, but she also felt afraid of Tarra for the first time in her life. She wondered: Is this the same Tarra I knew? Has she changed? Will she remember me? Is she angry? Scared? + +Back on the road, the vehicles turned south. They sliced through the heart of Alabama, passing Birmingham and Montgomery. As the hours ticked by, Buckley kept her eyes on Tarra’s trailer. + +They arrived in Attapulgus at 11 p.m. under the glow of a full moon. The semi’s brakes hissed, then went quiet. Buckley got out of her car. To release Tarra from the trailer, she would have to unhook an interior gate. For a few seconds, she would be alone with the elephant without steel between them. Buckley would be vulnerable; if Tarra was upset, she could crush her. That couldn’t be how their story ended, could it? After all the struggle, the heartache?  + +Buckley gathered her nerve, and as fast as she could, she slid the gate open and stepped away from the trailer. Tarra didn’t charge. After a few long moments, she appeared in the doorway. She seemed deflated, exhausted. Her head drooped. With slow, heavy steps she eased onto the ramp and took in her surroundings. Standing to the side, Buckley watched apprehensively.  + +“How are you doing, honey?” she said softly. “It’s me.” + +Tarra turned her heavy head toward Buckley, and her sleepy eyes opened wide. She clambered off the truck and let loose a chorus of chirps and squeaks. It was like she was picking up a conversation with a close friend after years apart. Tarra reached her serpentine trunk toward Buckley, but Buckley shrank away. “Give me some time, honey,” she said. “I’m a little afraid of you right now.”  + +Despite all she’d learned about elephant behavior, Buckley couldn’t possibly know what the past ten years had been like for Tarra. Had she grieved? Had she moved on? Tarra slowly explored her new terrain. She used her trunk to touch sage grass and blackberry bushes. But she never strayed far from Buckley. They were both older now, a little slower. The arrogance of youth was tempered. + +After a few minutes, Tarra walked toward Buckley again. This time Buckley relaxed, and Tarra closed the last bit of distance between them. She slipped her trunk gently around Buckley’s waist and pulled her close. + +*Epilogue* + +Gusts of wind scraped clouds from the sky, leaving it fresh and blue. In a field of browning grass, Tarra ambled, an exotic interloper, incongruous with the region’s surrounding crops and cows. A black and white dog named Mala bounded her way. Tarra gave a low rumble you could feel more than hear. Mala, like Bella before her, had become the elephant’s close companion. But Mala’s arrival also signaled something else: Buckley was coming. + +A few minutes later, Buckley heaved into view on her four-wheeler. She cut the engine about 100 yards from Tarra and dismounted. Two rectangles of hay were strapped to the vehicle; a second dog, Samie, perched on the seat. + +“Hey, pumpkin,” Buckley called to the elephant. + +They walked toward each other, and when they met, Buckley patted Tarra’s shoulder. She inspected one of Tarra’s feet and her tail, talking all the while. “Mama’s here. How are you doing, girl?” she asked. Buckley scattered the hay for Tarra to eat and sat down on the grass to watch, her knees drawn to her chin. Mala and Samie wrestled and scampered, weaving between Tarra’s legs. Tarra was careful when she moved; a misstep would crush her canine friends in an instant. + +In three days it would be the one-year anniversary of Tarra’s arrival in Georgia. There had been challenges. Bo, the other elephant at the refuge, who had been in a circus before his owner handed him to Buckley in September 2021, was a six-ton mountain of a creature. With a broad, twin-domed head and sweeping tusks, Bo loomed over Tarra. When they first met, Bo came on strong. He was castrated, so it wasn’t about attraction; he’d once performed with a group of female elephants, and he was excited for companionship. Tarra was wary, and Bo gave her space. Tarra eventually sought him out and lifted her trunk to breathe in his scent. They both relaxed. Now, if Tarra made the first move, the elephants touched trunks and leaned on each other. + +For Buckley, the past year had brought some closure. When she won custody of Tarra, the court ordered the Elephant Sanctuary in Tennessee to pay trial costs worth tens of thousands of dollars. Buckley cut a deal. She agreed to cover the expenses herself in exchange for Tarra’s golden headdress and one of her roller skates, artifacts from the elephant’s performing days. The sanctuary had hung them at its welcome center in a display labeled “CAPTIVE.” A caption read, “\[Tarra\] worked for two decades in the circus at amusement parks and in the film industry. In 1995, she retired and became the first resident of The Elephant Sanctuary.” Buckley’s name was nowhere to be seen. + +After she was forced out of the Tennessee sanctuary, Buckley was derided in some animal rights circles for being “a circus girl.” Tarra’s days on roller skates had not aged well—to many elephant lovers they seemed crass, even abusive. But Buckley isn’t ashamed of her past. “I have no desire to change history,” she said. “Tarra enjoyed skating. The people who don’t think she did are the ones who never saw her skate.” + +Recently, Buckley got her hands on the chest she once towed Tarra’s skates around in. “That’s her baby stuff, her baby shoes,” Buckley said. She’s not sure what she’ll do with them yet—maybe set up a small display somewhere in California to memorialize Tarra’s early days. + +For all the fondness she feels toward Tarra and their shared story, Buckley firmly believes elephants belong in the wild. She opposes the importation of new elephants and the breeding of the nearly 400 elephants in American zoos. She cringes at the notion of an elephant being construed as someone’s property, but acknowledges that as long as the law sees them that way, already captive elephants should be placed in the best possible hands. Reintroducing them to Africa or Asia won’t work—the change would be too dramatic, too dangerous. Refuges are the only answer. + +If she met Tarra today, galumphing down a California street, Buckley would find her a place at a sanctuary. Then again, without Tarra, would Buckley know what such a thing is? Would one even exist in the U.S.? On every step of their journey together, Buckley said, Tarra led the way, guiding her toward a kind of enlightenment. + +Buckley would like to expand the refuge beyond Tarra and Bo, but the money isn’t pouring in. Partly that’s because of the drama surrounding her lawsuit against the sanctuary. But there’s also been a proliferation of elephant-related causes, sanctuaries, and charities around the world. A quarter of a century ago, Buckley was blazing a trail. Now she’s part of a crowd. + +Buckley is a little rueful about this, thrilled at the attention elephants now receive but skeptical that all the people working with them know what they’re doing, keep up with the latest research, spend money on the right things. Buckley knows, too, that some of the qualities of her personality that make her good with Tarra and other elephants—her stubbornness chief among them—can alienate fellow humans. + +In the field with Tarra, Buckley is at peace. There’s a cadence to their relationship they’ve both come to expect and rely on—daily rituals of feeding, roaming, and communicating. When Buckley heads home at the end of the day, she knows she’ll see Tarra again soon. She feels lucky. Maybe Tarra does, too. + +“See you, honey,” Buckley says. + +The elephant watches her go. + +*\*This story has been updated to elaborate on the terms of the sanctuary’s disposition policy.* + +--- + +*© 2023 The Atavist Magazine. Proudly powered by Newspack by Automattic*. + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md b/00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md new file mode 100644 index 00000000..7edfd932 --- /dev/null +++ b/00.03 News/US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel.md @@ -0,0 +1,317 @@ +--- + +Tag: ["🤵🏻", "💸", "🇺🇸", "🇭🇹", "🎤"] +Date: 2023-03-05 +DocType: "WebClipping" +Hierarchy: +TimeStamp: 2023-03-05 +Link: https://www.bloomberg.com/features/2023-us-china-tensions-scandal-fugees-1mdb/ +location: +CollapseMetaTable: true + +--- + +Parent:: [[@News|News]] +Read:: 🟥 + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-US-China1MDBScandalNSave + +  + +# US-China 1MDB Scandal Pits FBI Against Former Fugee Pras Michel + +![Pras Michél](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/imcancAHEnr0/v0/640x-1.jpg) + +Photographer: Marc Baptiste for Bloomberg Businessweek + +## The Fugee, the Fugitive and the FBI + +How rapper Pras Michél got entangled in one of the century’s great financial scandals, mediated a high-stakes negotiation between global superpowers and was accused of major crimes. + +March 2, 2023, 12:01 AM UTC + +## 1 + +--- + +The phone call awoke Pras Michél in the middle of a spring night in 2017. His “cousin from China” needed to meet, the woman on the line said. The caller was an ex-girlfriend who Michél, a rapper, producer and member of legendary hip-hop group the Fugees, hadn’t spoken to in years. He grew up in a Haitian family in New Jersey and doesn’t have a cousin from China, but he knew what the message meant. + +Michél dressed and called a car to take him to the Four Seasons Hotel on 57th Street in Manhattan. The front desk clerk handed him a note. It instructed him to exit the hotel and circle the block twice, scanning to see if he was being tailed. Michél did as he was told and returned to the clerk, who gave him a room key. He went up to an empty suite and waited. + +After about 25 minutes there was a knock on the door. An austere-looking Chinese security agent in a suit gave Michél a second room key and told him to go to the penthouse. Inside, another agent took Michél’s phones and placed them in a pouch. A table and two chairs sat in the middle of the room. + +“They can’t kill me in the Four Seasons,” Michél said to himself. + +Soon a short, chubby man with wavy hair arrived, surrounded by more security personnel. Michél had met him before. He was Sun Lijun, China’s vice minister of public security. Sun began shouting in Chinese. An interpreter translated for Michél: “Who the f--- do the US government think they are?” + +Sun said he’d come to the US for sensitive negotiations with President Donald Trump’s administration but had failed to secure a high-level meeting. For three years, Beijing had been targeting Chinese nationals living in America who it viewed as threats. Agents had surveilled emigrés, visited their houses and detained family members still in China, aiming to persuade the targets to return home, where some would be charged with serious crimes. Called “Operation Fox Hunt,” the covert repatriation strategy had infuriated US officials. + +Of particular concern to Sun was Guo Wengui, a real estate billionaire living on a temporary visa in New York. From his home overlooking Central Park, Guo had [enraged the Chinese government](https://www.nytimes.com/2017/05/30/world/asia/china-guo-wengui.html "The Billionaire Gadfly in Exile Who Stared Down Beijing - The New York Times") by making a series of scandalous claims to the media, purporting to reveal the assets of top Communist Party officials. China was prepared to release two American citizens—one of them pregnant—being kept in the country under a so-called exit ban if the US deported Guo. + +Behind the scenes, the US government had been agitating for their return. But when Sun and his entourage arrived in Washington, hoping to make a deal, Attorney General Jeff Sessions was traveling and unable to meet with them, according to an email Sessions wrote in May 2017. Unsure what to do next, Sun sought Michél’s help. (The Department of Justice declined to comment.) + +“This is way above my pay grade,” Michél said after Sun laid out the situation. “But if I were you, I would at least send the pregnant woman back as a token of good faith.” + +“You think so?” Sun asked, now calmer and speaking in English. An agent handed Sun a telephone. After a brief conversation, he turned again to Michél. “When do you want her back?” + +Michél, who’d won two Grammys with the Fugees before going on to a solo career, was unsure about the usual time frame for international hostage repatriations. “Tomorrow?” he asked. + +“The weekend is no good.” + +“Monday? Tuesday?” + +By Tuesday the woman was back in the US. + +![The Fugees—Wyclef Jean, Lauryn Hill and Pras Michél—in New York in 1994.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iZ3rg8bd70s4/v0/640x-1.jpg) + +The Fugees—Wyclef Jean, Lauryn Hill and Pras Michél—in New York in 1994. Photographer: David Corio + +About two months later an FBI special agent interrupted Michél at brunch near his apartment in SoHo. The agent had 12 photos of Chinese officials and many questions: Who did Michél meet at the Four Seasons? Who else had contacted him from the Chinese government? And of course: How had a famous rapper and record producer found himself in the middle of a high-stakes negotiation between global superpowers? + +Michél’s audience with a top Chinese security official, reported here for the first time, was a flashpoint in one of the most unusual political influence campaigns in recent memory. His involvement began by chance, around 2006, when he met a baby-faced Malaysian businessman named Jho Low. Low was a globe-trotting financier whose lavish spending would put him on familiar terms with dozens of A-list entertainers. But by 2016, US investigators believed he’d masterminded the embezzlement of billions of dollars from the Malaysian sovereign wealth fund 1MDB, blowing much of it on [artwork, real estate and gifts for celebrity friends](https://www.bloomberg.com/news/features/2023-03-02/leonardo-dicaprio-kim-kardashian-grilled-for-1mdb-secrets-fbi-documents-show "Leonardo DiCaprio, Kim Kardashian Grilled for 1MDB Secrets, FBI Documents Show") including Leonardo DiCaprio and Kim Kardashian. Few were as close to Low as Michél: Prosecutors seized $95 million that they alleged originated with Low from Michél’s accounts. + +[![Image of Leonardo DiCaprio and Jho Low](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iJirvbVSGLs4/v0/640x-1.jpg)](https://www.bloomberg.com/news/features/2023-03-02/leonardo-dicaprio-kim-kardashian-grilled-for-1mdb-secrets-fbi-documents-show) + +With US authorities closing in and moving to confiscate his assets, Low needed help. He turned first to Michél, hoping to cash in on the star’s connections to President Barack Obama, for whom Michél had raised money during the 2012 campaign. Next, Low turned to China, one of the few countries that could protect him from the long reach of American law enforcement. (Low didn’t reply to requests for comment. China’s Ministry of Foreign Affairs said in a statement that it was “unaware” of the events described in this story. Sun, who received a suspended death sentence for corruption offenses last year, couldn’t be reached.) + +To investigate this wild tale of celebrity and political intrigue, *Bloomberg Businessweek* drew on legal filings, interviews with people close to the case and a cache of previously undisclosed FBI and Justice Department documents. The records show how Michél, at Low’s request, helped assemble a team of Republican influencers—including fundraiser Elliott Broidy, businesswoman Nickie Lum Davis and casino magnate Steve Wynn—capable of reaching the highest levels of the Trump administration as it took hold of the US government. Soon, all would be targeted by agents from the FBI’s international corruption division as well as federal prosecutors from Honolulu to New York. + +The US didn’t catch Low, but it did squeeze his associates. Many agreed to cooperate and pursue plea deals with prosecutors. Michél declined, and the consequences for him could be dire. Federal prosecutors [charged him in 2021](https://www.justice.gov/opa/pr/united-states-seeks-recover-more-1-billion-obtained-corruption-involving-malaysian-sovereign "United States Seeks to Recover More Than $1 Billion Obtained from Corruption Involving Malaysian Sovereign Wealth Fund | OPA | Department of Justice") with 10 offenses stemming from his dealings with Low, ranging from conspiracy to witness tampering and acting as an unregistered agent of a foreign government. + +[![Image excerpt of legal document.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/i56h.AgF_KFs/v0/640x-1.jpg)](https://assets.bwbx.io/documents/users/iqjWHBFdfxIU/rZEhKQ11g4wo/v0) + +Michél maintains his innocence and has decided to fight the charges. “The common thread that runs through this is that Pras was trying to get the benefits for the United States that were being offered by Minister Sun,” says his attorney, David Kenner. “Pras’s motivation was to try to assist the United States.” Kenner adds that Michél’s relationship with Low was rooted in a desire to secure investment for entertainment projects. + +The trial is scheduled to begin in Washington in late March. If convicted, Michél could go to federal prison for decades. + +## 2 + +--- + +All Michél knew about Low, the Malaysian guy he’d been asked to meet in 2006, was that he was loaded and liked to hang out with celebrities. The venue was a nightclub in Manhattan’s Meatpacking District. A couple of other patrons that night, Wall Street types, paid the club for a chance to get on the microphone. They announced that they were the richest people in the room and planned to buy everyone a drink. Not to be outdone, Low paid even more to use the mic and said he’d be buying every bottle the nightclub had on hand—and that staff should go to the club across the street so he could buy their bottles, too. + +Later, around 2011, Michél and Low became close friends. He was just one of many celebrities Low cozied up to during a whirlwind of yacht vacations, club nights and gambling, lubricated by his vast financial resources. Kardashian would later tell the FBI she’d bought a Ferrari using $305,000 Low gave her in cash. The supermodel Miranda Kerr, whom Low briefly dated, received about $8 million in jewelry. Low was especially generous with DiCaprio, donating a $3.2 million Picasso and a $9.2 million Basquiat to his charity. He also financed *The Wolf of Wall Street*, a film DiCaprio had been trying to develop for years. (DiCaprio and Kerr later turned over items they’d received from Low to the US government.) + +![Jho Low on a boat](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iPAlauSsv2eQ/v0/640x-1.jpg) + +Low on a boat. + +In Michél, Low had found a friend who was no less than music royalty. Born Prakazrel Michél, he’d been raised in a strict home in New Jersey, [telling an interviewer in 2007](https://gulfnews.com/lifestyle/pras-is-back-1.196482 "Gulf News: Pras Is Back") that his parents forbade him from watching TV or even wearing sneakers. He met his future collaborator Lauryn Hill in high school, later forming the group that became the Fugees with one of his friends, Wyclef Jean. Their second album, *The Score*, was one of the most influential records of the 1990s, a double Grammy winner that sold more than 18 million copies. + +The Fugees disbanded not long after releasing The Score, and apart from one hit, *Ghetto Supastar (That Is What You Are)*, Michél’s solo career never took off. But he continued to earn money from the band’s songs and maintained a lavish lifestyle, including a $30,000-a-month New York apartment. His tastes tended toward the flashy: Patek Philippe watches and a Lamborghini SUV, which he [showed off on social media](https://www.instagram.com/prasmichel/?hl=en "Pras Michél (@prasmichel) • Instagram photos and videos"). According to email records, Michél’s financial adviser periodically admonished him for spending beyond his means, complaining at one point that he’d gone $250,000 over budget in a two-month period alone. His lawyer, Kenner, says Michél’s financial situation wasn’t strained, however. “Some have advanced the notion that Pras was hurting for money and that might \[show\] a motive to become involved in those matters that led to this indictment,” he says. “Nothing could be further from the truth.” + +Michél was different from the other celebrities in Low’s coterie. He saw himself as something more than a rapper and producer, and he’d become what Kenner calls a connector—a man with a thick Rolodex of friends in politics, entertainment and finance. Beyond music, Michél took on a range of projects, often focused on social-justice or political issues: spending nine days on Skid Row in Los Angeles for a documentary; traveling to the Somali coast in search of high-seas pirates for another film; serving as an adviser to Michel Martelly, the performer who became Haiti’s president in 2011. + +Closer to home, Michél was a passionate supporter of President Obama. Government documents show that he wanted to become a more serious player, even mentioning a desire to be considered for an ambassadorship. (Kenner says Michél quickly dropped the idea “once he was told that he would have to live in the country where he was an ambassador.”) Michél bankrolled a political action committee called Black Men Vote PAC and, in the runup to the 2012 US election, told a Democratic official in an email that he was “thinking about doing a fundraiser … looking to raise anywhere from 5-10 million.” A mutual friend forwarded the email to Low and told him—erroneously—that “being a foreigner is not a problem.” (In fact, foreign nationals are prohibited from donating to US campaigns, including via PACs.) + +Low wanted in. Federal prosecutors say he sidestepped the law by sending more than $21 million to Michél, who then used his own accounts and various “straw donors” to contribute about $2 million to Obama’s reelection effort. It’s not clear what happened to the rest. (Kenner says Michél depended on a lawyer and advisers to manage his financial activities.) + +![Low at a White House holiday party in 2012.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/i8u2DTG4562c/v0/640x-1.jpg) + +Low at a White House holiday party in 2012. + +Low was preoccupied with projecting an image of success, and after Obama won, he received some of what he craved. Another Democratic donor, tech executive Frank White Jr., told the FBI that in late 2012 he brought Low to a holiday party at the White House, where Low posed for a photo with the president and first lady. (A representative for the Obamas declined to comment.) But if Low thought his donations would buy him political cover in Washington, he was mistaken. In 2015, as press reports about the graft at 1MDB multiplied, the FBI and the DOJ opened an investigation, led by Robert Heuchling, a special agent with the bureau’s international corruption unit in New York. According to a later FBI memo, the lines of inquiry included investigating the theft of embezzled funds and their laundering into the US, as well as potential violations of banking rules and anti-bribery laws by Low’s network of enablers. Agents soon identified Michél as a Low ally—and a potential cooperating witness. + +About a year after the investigation was opened, federal prosecutors in California filed a sprawling forfeiture action, seeking to seize more than $1 billion in assets that Low and his associates had accumulated. The filings spoke to the lifestyle of astonishing glitz they’d built since 1MDB’s establishment in 2009: in New York, a penthouse in the Time Warner Center and luxury condos in Chelsea and SoHo; in Los Angeles, a boutique hotel and multiple mansions; a Bombardier Global 5000 jet; a material stake in EMI Music Publishing, the rights holder for songs by Drake, Queen and other artists. The rights to *The Wolf of Wall Street* were also the subject of a seizure complaint. + +#### Dramatis Personae + +In the summer of 2016, Michél was in St-Tropez, on France’s sun-soaked Côte d’Azur, when he ran into Low’s brother, Szen. Szen asked Michél to speak to Low, who explained his issues with the DOJ and dismissed the US allegations as “all lies.” Low complained that his legal team was moving too slowly to resolve the cases, which were making it difficult for him to operate. He wondered if Michél had ideas about who could help. + +## 3 + +--- + +After the Democrats’ defeat in the 2016 election, halting a case as large as the one against Low required pull with the freshly installed Trump administration. Michél didn’t have any, but he knew someone who might. + +In early 2017 he spoke with an old friend, Nickie Lum Davis. A TV producer who split her time between Los Angeles and Hawaii, Lum Davis had an unusual political pedigree. Her parents, Eugene and Nora Lum, had been major fundraisers for Bill Clinton and had eventually pleaded guilty to arranging illegal donations. Lum Davis’s own connections were weighted toward Republicans. She’d [converted to Judaism](https://jewishjournal.com/cover_story/70359/meet-mr-and-mrs-jdate/ "Meet Mr. and Mrs. JDate") after meeting her now ex-husband, Jdate co-founder Joe Shapira, and become hawkishly pro-Israel. On the coffee table at their home in Beverly Hills, the couple kept busts of Rudy Giuliani and George W. Bush. + +Lum Davis suggested a name: Elliott Broidy, one of Southern California’s most prolific Republican fundraisers. Michél asked her to send supporting materials he could relay to Low, including photos of Broidy with Trump, as well as a brief bio and notes about his connections to the president. “Has long standing relationship with Sec of Justice Dept – Jeff Sessions that goes back 15 years,” the material read. Broidy was also “One of two people who are close to the boss that were instrumental in boss getting there – that did not take a job in the administration.” (A representative for Broidy declined to comment; Lum Davis didn’t respond to a detailed request for comment.) + +Early one morning in mid-March, Michél, Lum Davis and Broidy met at Broidy’s Los Angeles office to hammer out a potential deal to work for Low. According to a later FBI interview summary, Michél told the others that Low was “not a bad guy,” but rather a smart businessman who simply wanted to deal with his legal issues. Securing Broidy’s help would be expensive. A draft agreement the group prepared called for Low to pay a retainer of $8 million. If the team succeeded in resolving the DOJ’s forfeiture actions within six months, he’d pay a $75 million success fee; if it took six months to a year, the amount would drop to $50 million. (Kenner says Michél mistakenly thought Broidy was a lawyer and wanted him to represent Low—“not to influence government policy,” as the US government later asserted.) + +To ensure he received what he felt was fair, Michél insisted that the money, and all communications with Low and his associates, go through him. He, in turn, would deal with Lum Davis, who would pass on information to Broidy. He was “concerned about being cut out,” Lum Davis would later say. About a week after the meeting, a financial adviser set up two Delaware companies on Michél’s behalf, Anicorn LLC and Artemus Group LLC. By the end of the month, both companies had accounts at Los Angeles-based City National Bank. + +The next step was to meet with Low, who was for obvious reasons avoiding the US. He proposed they gather in Thailand. Broidy told Lum Davis he’d need $1 million to get on the plane, from “untainted” funds. Reluctantly, Michél fronted it himself. The group landed in Bangkok at the beginning of May. A few hours after they arrived at their hotel, Low showed up at Lum Davis’s suite. + +[![Excerpt from the July 2017 FBI interview summary for Michél..](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iPt0u72kCDfk/v0/640x-1.jpg)](https://assets.bwbx.io/documents/users/iqjWHBFdfxIU/rCXDLT9qvaf0/v0) + +According to court filings and grand jury testimony, Broidy told the group he believed he could use his ties to Sessions, Trump’s attorney general, to persuade the US government to drop its pursuit of 1MDB-related assets. But before any of that, there was the matter of money. “You’ve had so many of your assets forfeited, so how are you going to pay?” Broidy asked. + +Low told his visitors not to worry. “I have a friend who’s helping me to pay for my bills,” he said. The financier didn’t identify the generous friend. + +Before the meeting ended, Michél raised another matter, one that revealed another interested party: the Chinese government. He told Broidy and Lum Davis that Low was interested in Guo, the businessman living in New York, who was making increasingly bold claims about corruption among high-ranking Chinese leaders. + +![Exiled Chinese businessman Guo Wengui poses for a portrait at the Sherry Luxembourg hotel in Manhattan where he lives.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iZ6MITVws80k/v0/640x-1.jpg) + +Guo in Manhattan in 2017. Photographer: Natalie Keyssar + +China had issued a notice seeking his arrest through Interpol weeks earlier, claiming Guo was wanted for bribery. It wasn’t clear why Low would care about Guo’s status, but he had reasons to seek favor from Beijing. According to the *Wall Street Journal*, China in 2016 had [offered to bail out](https://www.wsj.com/articles/how-china-flexes-its-political-muscle-to-expand-power-overseas-11546890449 "WSJ Investigation: China Offered to Bail Out Troubled Malaysian Fund in Return for Deals - WSJ") 1MDB, which owed billions more than it could repay. And with US criminal charges a possibility, being useful to the Chinese government might provide Low a measure of protection. + +As the Bangkok meeting drew to a close, Low said that he was willing to move forward with the Americans and that information on payment would follow. He was leaving town, and Lum Davis, Broidy and Michél returned to their rooms to book flights home. They had work to do in Washington. + +## 4 + +--- + +Within days of the Bangkok meeting, Low started to demonstrate that he could pay. On May 8, 2017, $2.8 million landed in an account belonging to Anicorn, one of the companies Michél had incorporated. An additional $3 million arrived less than 10 days later. The wires originated with a Hong Kong corporation called Lucky Mark (HK) Trading Ltd. Although it had no obvious connection to Low, US prosecutors allege that he used the company to move money. + +As the payments came in, Low told Michél he wanted the group to meet again, in Hong Kong. They agreed. “When someone sends you a large sum of money and then wants to see you, you have to go to them,” Lum Davis would later tell the FBI. As Michél, Lum Davis and Broidy arrived, the rapper received some news by phone. Their appointment had been moved. The new venue, he told Lum Davis, was “just outside Hong Kong,” on the Chinese mainland. + +Lum Davis was alarmed. “We don’t have visas to go into China,” she said. “How are we going to be able to go?” + +“I think they’ll take care of it. Don’t worry, we’ll be able to get over the border,” Michél replied. + +At the boundary, the group handed over their US passports and were waved through to Shenzhen. Soon Lum Davis, Broidy and Michél were sitting in another hotel suite with Low. There was someone he wanted his visitors to see. They walked to a different room, where Sun—the Chinese security official whom Michél would later meet in New York—was waiting with his entourage, all of them smoking. After some pleasantries, Sun began talking through an interpreter about Guo and what China was willing to do if the US facilitated his return. + +![From left: Sean Penn, Bill Clinton and Pras Michél](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/iKiBAkWV3qrs/v0/640x-1.jpg) + +Michél with Sean Penn and Bill Clinton. + +![A fundraising event Pras put together and held in September 2012 at the Washington, DC home of Frank White Jr, an Obama campaign official. Jho Low's father is sitting next to Obama on our right, seated next to Pras is Mohamed Al Husseiny, the CEO of a large sovereign wealth fund in the Middle East.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/ipbm68LARSR0/v0/640x-1.jpg) + +Michél and Low’s father flanking Obama at a fundraiser in 2012. + +![Pras Michél with President Joe Biden](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/i7xxw1AecpY8/v0/640x-1.jpg) + +Michél with Biden. + +As a first step, Sun said, the government would release Americans it was holding and take back Chinese nationals convicted of crimes in the US whose deportations it had previously refused to accept. It would also consider new cooperation on cybersecurity issues. It sounded like an attractive trade. “Maybe you’re just not getting the message to the right person,” Broidy suggested, according to court filings. He said he could help arrange a meeting between Sun and Sessions, to “try to get your message through, that you really want this fugitive returned to China and what you guys are willing to offer.” + +The three Americans went to Broidy’s room with Low and ordered lunch. Before leaving, Michél pulled out a USB drive and uploaded a file onto Lum Davis’s computer, asking her to pass its contents to Broidy. It listed the purported legal allegations against Guo—including wire fraud, money laundering and even kidnapping. (Guo has denied wrongdoing; he didn’t reply to requests for comment.) + +Soon after, Broidy sent an email to Rick Gates, who’d been a top figure on Trump’s campaign. He attached a memo addressed to Sessions, as well as the Interpol arrest notice for Guo. Broidy didn’t mention Low in the document, saying only that he’d been “asked by my Malaysian business contacts” to meet with Sun. (Sessions later told prosecutors he didn’t recall seeing it; he didn’t reply to a request for comment.) After listing steps the Chinese official had offered to take to “improve law enforcement relations,” Broidy got to the ask: “The one request China will make is that Chinese national, Guo Wen Gui,” be deported or extradited, “so he can be charged with these violations and go through regular criminal proceedings.” + +## 5 + +--- + +Less than a week after the Shenzhen discussion, Sun was in Washington trying to secure an agreement from Sessions that Guo would be removed. When Sessions couldn’t meet with him, prompting Michél’s late-night summons to the Four Seasons in New York, Sun took the rapper’s advice and authorized the release of the pregnant woman China was blocking from leaving. + +The woman’s mother was a target of Operation Fox Hunt, Beijing’s pressure campaign against expatriates. She was [described in a DOJ filing](https://www.justice.gov/opa/press-release/file/1488681/download "UNITED STATES OF AMERICA v. SUN HOI YING, a/k/a “Sun Haiying,” Defendant.") as an American citizen who previously worked at a Chinese state-owned enterprise and was accused by the government of embezzlement. Her daughter had traveled to China to visit relatives in 2016; officials were keeping the daughter there under the exit ban until she persuaded her mother to return. + +Within a few days of Michél’s intervention, the pregnant woman was on a flight to John F. Kennedy International Airport. Yet the Trump administration didn’t budge on Guo. Michél wanted to gather information for Low on the reasons for the government’s resistance, official documents show, and in late June he made a bold gambit: He contacted the FBI directly and asked for a meeting. Agents soon came to see him at a restaurant in Manhattan. + +Michél told the agents he’d been working with a friend named “Jon”—a thinly veiled reference to Low—to help China get Guo back. According to an FBI summary of the conversation, he “probed the interviewing agents,” trying to understand whether Guo had some relationship with the bureau that would explain the government’s reluctance to deport him. Although they assured Michél that the FBI didn’t have any arrangement with Guo, he “did not believe the interviewing agents and repeatedly asked if the FBI was meeting” with the businessman. When the agents asked Michél why Chinese officials would be interested in his assistance, he said, “They believe that I can provide intelligence.” He also noted that he’d be reporting back to “Jon” on the discussion and said he’d be interested in keeping in touch about Guo. + +It often takes years of painstaking work for FBI agents to identify people collaborating with foreign governments. But now, Michél had come to them, happy even to identify some of his contacts abroad. He spoke to the FBI a second time in July, when Heuchling, the agent overseeing the sprawling probe into 1MDB corruption, turned up unannounced during Michél’s SoHo brunch. Looking at photos from the FBI, Michél identified Sun as the minister he’d met at the Four Seasons and pointed out Sun’s security guard. (Kenner says Michél thought he was “operating in the best interest of the US” by providing assistance to the FBI and hoped the US could benefit from increased cooperation from China.) + +In Washington, Broidy and Lum Davis were continuing to work their Trump administration contacts, stressing that China was willing to release more Americans in return for Guo. With Guo’s visa soon to expire, Broidy also reached out to Steve Wynn—a major Republican donor who’d founded Wynn Resorts Ltd., which operates large casinos in the Chinese territory of Macau—to ask for help. It “is critically \[sic\] that his new visa application he \[sic\] immediately denied,” Broidy texted. Wynn took the matter directly to Trump, bringing up the case at a White House dinner with the president and dropping off a copy of Guo’s passport with Trump’s secretary. Wynn relayed an update to Broidy: “This is with the highest levels of the state department and defense department. They are working on this.” + +To Lum Davis, it appeared victory was imminent. “You are the man right now,” she texted Broidy. “They are going to give you the President’s medal of freedom award after what you will accomplish for this \[sic\]the country.” + +Broidy was determined to finish the job. “I am going to slam until it’s done,” he texted back. + +## 6 + +--- + +On a Saturday in mid-July 2017, Michél called another old friend. A lawyer by training, George Higginbotham had helped Michél with dozens of legal matters over the years; he’d later describe his work for the rapper as ensuring nothing got “f---ed up.” Even after Higginbotham took a job at the Department of Justice, in an office responsible for liaising with members of Congress, internal government documents show he continued doing work for Michél, including some related to Low. Higginbotham helped move Low’s payments into US banks and edited contracts to ensure there were no references to Low or to companies that could be traced to him. + +This time, Michél had an especially unusual request. He wanted Higginbotham to go to China’s Embassy the next day, a Sunday, and meet with the ambassador. Higginbotham asked why Michél couldn’t go himself. “George, you’re an attorney,” Michél responded. “You’re more well-spoken than I am. He’ll have more respect for you.” + +[![Excerpt from the January 2018 FBI interview summary for Michél.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/i1ZdcBGa4n7s/v0/640x-1.jpg)](https://assets.bwbx.io/documents/users/iqjWHBFdfxIU/rZEhKQ11g4wo/v0) + +Higginbotham, a veteran bureaucrat, knew that meetings between the US and foreign powers were tightly choreographed. A DOJ staffer showing up at a Chinese compound in Washington could trigger alarms among America’s spy hunters. Higginbotham asked Michél if they could hold the discussion at a different venue—a restaurant, a coffee shop, anywhere but the sovereign diplomatic territory of America’s main strategic rival. Michél said no—it had to be at the embassy. + +Michél came to Washington to help Higginbotham prepare. They met at the Four Seasons in Georgetown on Sunday morning. Legal documents indicate Michél wanted to show Low that his American representatives were advancing his priorities, even if that wasn’t necessarily true. He told Higginbotham to deliver a straightforward message to the Chinese: The White House was working on a solution for the Guo matter, and details on the logistics of extradition would follow. It was a simple job, Michél assured Higginbotham. + +That afternoon, Higginbotham walked to the Chinese Embassy off Connecticut Avenue. Michél had given him a number for one of the ambassador’s aides, and Higginbotham called as he approached, asking for directions to the entrance. He was escorted into a conference room decorated with pictures of Chinese leaders meeting US presidents. + +The ambassador, Cui Tiankai, entered after a short wait. “I’m here on behalf of my private client,” Higginbotham told Cui. “This has nothing to do with the Department of Justice, and I am here in absolutely no official capacity.” After Higginbotham relayed the information instructed by Michél, Cui peppered him with questions: When would the deportation happen? Who would be getting in touch to make the arrangements? But Higginbotham had nothing more to tell him. Still, the ambassador seemed appreciative, and Michél later told Higginbotham Low was pleased with how the meeting had gone. + +Higginbotham didn’t know he’d triggered a diplomatic tripwire before setting foot inside the compound—the previous night, police officials from the Chinese Embassy had called their American counterparts to verify his identity. The matter soon landed with the DOJ’s Office of the Inspector General, the agency’s internal watchdog. Upon being summoned, Higginbotham explained that he’d gone to the embassy on Michél’s instructions. + +Higginbotham had just become another piece in a growing set of US investigations into Low’s and China’s activities. By now, American officials were looking into Lum Davis and Broidy, too, as the pair continued working to get the DOJ to back away from Low and dislodge Guo from the US. + +Wynn’s involvement was also increasing. With Lum Davis as facilitator, he spoke by phone with Sun at least eight times, beginning in June 2017. During the same period, according to legal filings and internal government documents, Wynn spoke about the Guo case with US officials including White House Chief of Staff Reince Priebus and his successor, John Kelly. And that August, while yachting with Broidy and his wife off the coast of Italy, Wynn called Trump and asked about the status of Guo’s potential extradition. Trump replied that he’d be happy to “have them”—Sun and his team—“come to see us at the White House” to discuss the issue. (Lawyers for Wynn said his role was as a “messenger conveying information,” rather than a lobbyist. In October a federal judge [dismissed a DOJ suit](https://www.bloomberg.com/news/articles/2022-10-12/steve-wynn-wins-dismissal-of-doj-foreign-lobbying-case "Steve Wynn Persuades Judge to Toss US Foreign-Lobbying Case") that sought to compel him to register retroactively under the Foreign Agents Registration Act, which requires anyone lobbying for a foreign client to notify the government. Wynn didn’t respond to a request for comment.) + +Soon afterward, according to a DOJ interview with Kelly last year, a Chinese delegation showed up at the White House, claiming they’d been told Trump had agreed to a meeting about Guo’s extradition. Kelly recalled that he blocked them from seeing the president, directing his staff to connect the group with the DOJ and the Department of State, which ultimately denied the request. He said the Chinese seemed stunned, because they were under the impression that the meeting was a “done deal.” (Trump and Kelly didn’t respond to requests for comment.) + +![Donald Trump speaks with Steve Wynn before boarding Air Force One at the McCarran International Airport in Las Vegas, April 6, 2019.](https://assets.bwbx.io/images/users/iqjWHBFdfxIU/i6440wztKEKs/v0/640x-1.jpg) + +Trump and Wynn in Las Vegas in 2019. Photographer: Al Drago/New York Times/Redux + +Even with little progress being made toward Low’s goals, he was encouraged enough that large sums of money kept coming into the US from Lucky Mark. In early August, $12.8 million arrived in an account belonging to one of Michél’s companies. (Kenner says the US government hasn’t proven that Low controlled or directed the funds sent by Lucky Mark.) Michél then sent about $3 million to Broidy’s wife’s law firm, which in turn sent $900,000 to Lum Davis. A further payment of $10 million came to Artemus, the other Michél-controlled company, later in the month. + +## 7 + +--- + +“George,” the agent asked, “you’re a smart guy, right? … Help me understand why you’re in the middle of all this. Why do they need you?” + +It was Jan. 3, 2018, and Higginbotham was seated in a DOJ meeting room across from Harry Lidsky, a senior special agent from the inspector general’s office with responsibility for investigating “insider threats,” and one of his colleagues. Lidsky made a point of telling Higginbotham the door was unlocked. He was free to leave if he wanted. + +Internal DOJ and FBI messages and memos reveal that Michél had by now become a key target of their investigation into Low. FBI agents considered him the “current best opportunity to get a co-operating witness” and were seeking ways of “getting leverage on Michél for the 1MDB investigation.” Higginbotham, who was a DOJ employee and thus in Lidsky’s jurisdiction, was a smaller fish, but he had played a role in getting money from Asia into Michél’s accounts. + +At the time of the January interview, Higginbotham and Lidsky had spoken on several occasions, with Higginbotham insisting that nothing he’d done for Michél amounted to espionage or improper involvement in national security issues. He said it was all just business, with Michél helping Low for a “financial motive.” + +Lidsky began his questions, focusing on the payments from Lucky Mark and an additional $41 million sent from a different Hong Kong company. Higginbotham had helped facilitate the transfers on Michél’s behalf, going as far as meeting with Low in Macau to discuss how best to move money into the US. Weeks later he told inquiring executives at Michél’s bank that Lucky Mark was a souvenir manufacturer that had hired Michél for a “complex civil litigation matter” too sensitive to discuss. He made no mention of Low. + +“You’ve had discussions with an individual by the name of Jho Low overseas in Southeast Asia,” Lidsky said. “Is that correct?” + +“I have had discussions with him, yes.” + +“And those discussions have included transferring money?” + +“Yes.” + +Higginbotham told Lidsky he’d said Lucky Mark made souvenirs based on a description he found online. Lidsky replied that that was wrong. Lucky Mark’s name was similar to a real souvenir manufacturer’s, but the government had concluded that the two entities were unconnected. Lidsky said to Higginbotham that this was a common Low tactic, intended to create confusion about where funds originated. + +“George, there’s a problem here,” Lidsky told Higginbotham. “We have a bank fraud issue. We have false statements.” The Lucky Mark sending money to Michél “was started last year. They don’t sell anything. They don’t make anything. They don’t have services. They don’t do shit. They’re a shell company for money laundering.” + +“OK,” Higginbotham replied. + +“And don’t say, ‘Yeah, you’re right.’ Don’t say, ‘No, I disagree.’ Just take it all in for right now,” Lidsky said. “You’re a good guy at heart. So we’ve got to work to get you out of this.” + +Continuing to squeeze Higginbotham, Lidsky laid out his case: “You’re creating paperwork and doctoring up contracts that facilitate money from this guy’s company, which you know—whether you knew before, you certainly know now—is a shell,” he said. “In a matter of weeks, millions of dollars start flowing” to Broidy, Lum Davis and Michél. “What did you get?” + +“A buck seventy”—$170,000. + +“Peanuts in the grand scheme of things.” + +Lidsky continued: “You have a huge opportunity to make your position a lot better, but you can also make it worse.” + +Days later, Lidsky and Heuchling met with Michél in Los Angeles. After the agents asked him about the money he’d been receiving from Asia, according to Heuchling’s written summary of the interview, Michél said the funds came from a Thai businessman who was investing in his entertainment projects. He held that Low had “nothing to do” with his financial arrangements. When the agents asked Michél to account for Higginbotham’s visit to the Chinese Embassy, he had an explanation ready, Heuchling wrote. Michél said he’d been working to promote Chinese investment in Haiti and had asked Higginbotham to update China’s ambassador in his stead. + +The agents didn’t buy it. When they told Michél they were aware he’d been doing business with Low, his story changed, according to Heuchling’s summary. He acknowledged working with Low since early the previous year. (Kenner disputes Heuchling’s summary and says Michél didn’t change his account.) + +Still, Michél didn’t believe he’d done anything wrong. Heuchling wrote that Michél “wanted the interviewing agents to understand that because of his celebrity status and his connections, he travels all over the world and meets with all sorts of people.” + +The FBI tried to convince Michél that it was in his best interest to cooperate with its 1MDB investigation. Later in January, Heuchling sent a text to his supervisor: “If Pras comes around, and he’s not there yet, he’s going to realize he has a lot of time to work off.” Federal prosecutors in Washington were laying the groundwork to charge him with acting as an unregistered agent of a foreign government, an offense that carries a prison sentence of as much as 10 years. He also faced potential charges for election-law violations relating to Low’s alleged political donations. According to people familiar with the matter, the government wanted Michél to plead guilty to a felony, forfeit the bulk of his wealth and agree to assist with other prosecutions to avoid a broader indictment. + +Michél decided to reject the plea—for a number of reasons, Kenner says. “One of the most significant is that it would make him a felon by admitting to willful acts he didn’t believe were true.” + +In late February, Heuchling wrote to another colleague to say that Michél’s then-attorney “pretty much told us he’s not comin back in.” + +“Dang,” the colleague replied. “He knows what’s coming, right?” + +## 8 + +--- + +Michél’s trial is set to begin on March 27 in Washington. It will feature a rare convergence of superpower rivalry, Beltway politics and Hollywood glamour. Kenner, who’s previously represented rap artists such as Snoop Dogg and Suge Knight, is seeking to call Obama and Trump—both targets of Low’s influence efforts—as witnesses, though it’s uncertain whether either former president will appear. Meanwhile, DiCaprio is also on the witness list for the government, as is Higginbotham, who filings show is cooperating with prosecutors. His testimony will be crucial; Kenner says he’ll argue that Higginbotham is violating his professional obligations as Michél’s former attorney by disclosing their interactions. + +If convicted, Michél is likely to be treated far more harshly than the other Americans involved in Low’s lobbying campaign. Higginbotham pleaded guilty in 2018 to a single count of conspiracy to make false statements to a bank, with any sentence to be determined later. (A representative for Higginbotham didn’t respond to a detailed message seeking comment.) + +Lum Davis was sentenced to two years in prison for her own guilty plea to one count of aiding and abetting violation of the Foreign Agents Registration Act. In October 2020, Broidy pleaded guilty to a count of conspiracy to violate FARA stemming from his work for Low, but he was pardoned by Trump three months later. The following April he signed a cooperation agreement with the DOJ, which promised not to prosecute him for other crimes that may arise in its investigation, in exchange for his testimony and other assistance. + +And for the time being, there’s little chance that the man who brought them all together will see a prison cell. Wanted on a range of charges by the US as well as Malaysia, Low is believed to be living in China with his family. Although he’s keeping a low profile, he’s occasionally spotted in public. One of the last sightings was in 2019, [at Shanghai Disneyland](https://twitter.com/TomWrightAsia/status/1564824047896080384 "@TomWrightAsia tweet"). + +## More On Bloomberg + +  +  + +--- +`$= dv.el('center', 'Source: ' + dv.current().Link + ', ' + dv.current().Date.toLocaleString("fr-FR"))` \ No newline at end of file diff --git a/00.08 Bookmarks/Bookmarks - Selfhosted Apps.md b/00.08 Bookmarks/Bookmarks - Selfhosted Apps.md index b022a4ba..886f078a 100644 --- a/00.08 Bookmarks/Bookmarks - Selfhosted Apps.md +++ b/00.08 Bookmarks/Bookmarks - Selfhosted Apps.md @@ -61,6 +61,17 @@ image: https://noted.lol/content/images/2022/06/126849-network-computer-switch-w   +```cardlink +url: https://github.com/jesseduffield/lazydocker +title: "GitHub - jesseduffield/lazydocker: The lazier way to manage everything docker" +description: "The lazier way to manage everything docker. Contribute to jesseduffield/lazydocker development by creating an account on GitHub." +host: github.com +favicon: https://github.githubassets.com/favicons/favicon.svg +image: https://repository-images.githubusercontent.com/187335810/d5cecc00-9b1c-11e9-8abf-5649b23bce13 +``` + +  + ```cardlink url: https://github.com/thedevs-network/kutt title: "GitHub - thedevs-network/kutt: Free Modern URL Shortener." diff --git a/00.08 Bookmarks/Bookmarks - Travels & Sport.md b/00.08 Bookmarks/Bookmarks - Travels & Sport.md index c2c62bda..76a9df6e 100644 --- a/00.08 Bookmarks/Bookmarks - Travels & Sport.md +++ b/00.08 Bookmarks/Bookmarks - Travels & Sport.md @@ -66,9 +66,53 @@ host: www.jurassicparkpolo.co.za   -#### Sub-header 2 +#### Publications + +```cardlink +url: https://poloplus10.com/ +title: "Startseite - POLO+10" +description: "In 20 years, POLO+10 has become the most influential and largest polo magazine in the world. Discover our offer in print and online." +host: poloplus10.com +favicon: https://cdn-gmned.nitrocdn.com/MHPDUwezGBOsXuFDlBKtrvebOfSFIAtk/assets/static/optimized/rev-d1b8060/wp-content/uploads/2021/08/cropped-favicon-32x32.png +``` + +  + +```cardlink +url: https://www.pololine.com/ +title: "Pololine | Home" +description: "PoloLine the official site of Polo. Get all the daily polo news with our exclusive tournaments coverage around the world." +host: www.pololine.com +image: https://www.pololine.com/wp-content/uploads/2018/09/PoloLine-logo2013_black.jpg +``` + +  + +```cardlink +url: https://www.worldpolonews.com/ +title: "Home | WPN" +host: www.worldpolonews.com +favicon: https://www.worldpolonews.com/wp-content/uploads/2021/03/logo_worldpolonews-225x22523-1.ico +``` + +  + +```cardlink +url: https://polozone.com/news/ +title: "News" +description: "News" +host: polozone.com +favicon: https://polozone.com/wp-content/uploads/2015/04/cropped-PZ_logo_red_wht-55x55.png +``` + +  + +```cardlink +url: http://www.polotimes.co.uk/ +title: "Polo Times Magazine" +host: www.polotimes.co.uk +``` -Loret ipsum   diff --git a/01.02 Home/Entertainment.md b/01.02 Home/Entertainment.md new file mode 100644 index 00000000..674b0e45 --- /dev/null +++ b/01.02 Home/Entertainment.md @@ -0,0 +1,172 @@ +--- + +Alias: [""] +Tag: ["🎭", "🎵", "🎥", "📺", "🎬"] +Date: 2023-03-05 +DocType: Confidential +Hierarchy: NonRoot +TimeStamp: 2023-03-05 +location: +CollapseMetaTable: true + +--- + +Parent:: [[@Lifestyle|Lifestyle]], [[@Cinematheque|Cinematheque]] + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-EntertainmentNSave + +  + +# Entertainment + +  + +> [!summary]+ +> Note Description + +  + +```toc +style: number +``` + +  + +--- + +  + +### Notes + +  + +#### Music + +- [ ] 🎼 [[Entertainment]]: **Max Bruch**, Concerto pour violon 1 📅2023-06-30 +- [ ] 🎼 [[Entertainment]]: **Louis Moreau Gottschalk**, La nuit des tropiques de la symphonie romantique 📅2023-06-30 +- [ ] 🎼 [[Entertainment]]: **GF Handel**, L’Allegro il Penseroso ed il Moderato 📅2023-06-30 +- [ ] 🎼 [[Entertainment]]: **Jacques Offenbach**, Le couplet des rois de La Belle Hélène 📅2023-06-30 +- [ ] 🎼 [[Entertainment]]: **Richard Strauss**, Also Sprach Zarathustra 📅2023-06-30 +- [ ] 🎼 [[Entertainment]]: **Carl Off**, O Fortuna 📅2023-06-30 + +  + +#### Movies & TV shows + +- [ ] 🎬 [[Entertainment]]: More American Graffiti 📅2023-06-30 +- [ ] 🎬 [[Entertainment]]: African territory 📅2023-06-30 +- [ ] 📺 [[Entertainment]]: Friends 📅2023-06-30 +- [ ] 📺 [[Entertainment]]: How I Met Your Mother 📅2023-06-30 + +  + +--- + +  + +### Resource + +  + +#### Music + +```cardlink +url: https://bandcamp.com/tag/free +title: "Free Music & Artists | Bandcamp" +description: "See all artists, albums, and tracks tagged with \"free\" on Bandcamp." +host: bandcamp.com +favicon: https://s4.bcbits.com/img/favicon/favicon-32x32.png +``` + +  + +```cardlink +url: https://freemusicarchive.org/search +title: "Search music on Free Music Archive - Free Music Archive" +description: "Search for original music and creators on Free Music Archive. You can search by genre, license, duration, instrumental (yes/no), title, album or artist." +host: freemusicarchive.org +``` + +  + +```cardlink +url: https://archive.org/details/etree?&sort=week +title: "Free Music : Download & Streaming : Live Music Archive : Internet Archive" +host: archive.org +``` + +  + +```cardlink +url: https://cctrax.com/ +title: "free, painless and legal music downloads without registering" +description: "Free and legal music downloads from a curated list of contemporary Creative Commons music. Quality mp3 and lossless. Free video, playlists and music stream." +host: cctrax.com +favicon: /favicon-32x32.png +image: https://cctrax.com/images/partners/cctrax_300x300_sw.jpg +``` + +  + +```cardlink +url: https://fossbytes.com/10-best-free-music-websites-to-download-songs-legally/ +title: "15 Best Free Music Websites To Download Songs Legally In 2022" +description: "Music has become a necessity, and everyone should be able to download it. Here's a list of the best free music websites to legally get music." +host: fossbytes.com +favicon: https://fossbytes.com/wp-content/uploads/2021/01/cropped-FOSSBYTES-FAVICON--32x32.png +image: https://fossbytes.com/wp-content/uploads/2018/04/Best-free-and-legal-music-download-sites.jpg +``` + +  + +```cardlink +url: https://musopen.org/ +title: "Free Sheet Music, Royalty Free & Public Domain Music | Musopen" +description: "Download royalty free music and sheet music in PDF for free. We are a non-profit with the largest selection of public domain music and educational resources." +host: musopen.org +favicon: https://files.musopen.org/static/icons/icon192.5b0c6cf166c7.png +``` + +  + +#### Movies & TV shows + +```cardlink +url: https://torrentz2.cyou +title: "Torrentz2 - Best Torrentz Search Engine" +description: "Torrentz2 is a world's best torrent indexer and became most popular torrentz search engine in 2021." +host: torrentz2.cyou +``` + +  + +```cardlink +url: https://torrents-proxy.com/torlock/ +title: "Torlock Proxy: *100% Working* List to Unblock Torlock - Torrents Proxy" +description: "What is Torlock? Torlock indeed is the best torrent search engine and directory. It has just confirmed downloadable files and consequently has no phony" +host: torrents-proxy.com +favicon: https://i0.wp.com/torrents-proxy.com/wp-content/uploads/2020/05/cropped-torrents-proxy-favicon.png?fit=32%2C32&ssl=1 +image: https://torrents-proxy.com/wp-content/uploads/2020/09/Torlock-Proxy.png +``` + +  + +```cardlink +url: https://www.opensubtitles.org/en/search/subs +title: "Subtitles - download movie and TV Series subtitles" +description: "Movie and TV Subtitles in multiple languages, thousands of translated subtitles uploaded daily. Free download from source, API support, millions of users." +host: www.opensubtitles.org +``` + +  +  \ No newline at end of file diff --git a/05.01 Computer setup/Metamask.md b/05.01 Computer setup/Metamask.md new file mode 100644 index 00000000..28a381a1 --- /dev/null +++ b/05.01 Computer setup/Metamask.md @@ -0,0 +1,143 @@ +--- + +Alias: [""] +Tag: [""] +Date: 2023-03-05 +DocType: +Hierarchy: +TimeStamp: +location: +CollapseMetaTable: true + +--- + +Parent:: [[Crypto Investments]], [[Applications|Apps]] + +--- + +  + +```button +name Save +type command +action Save current file +id Save +``` +^button-MetamaskNSave + +  + +# Metamask + +  + +> [!summary]+ +> Note Description + +  + +```toc +style: number +``` + +  + +--- + +  + +### Generics + +> [!address] +> ``` +> 0xFeb6bC77B64F86674e79d7932B773d81786C7e80 +> ``` + +  + +> [!note] **Mac folder** +> /usrs/mel/Library/Application Support/BraveSoftware/Brave-Browser/Default/Local Extension Settings + +  + +> [!warning] Orphaned code +> nkbihfbeogaeaoehlefnkodbefgpgknn + +  + +--- + +  + +### Network Addresses + +  + +#### BSC + +> [!address] New RPC URL +> https://bsc-dataseed.binance.org/ + +  + +> [!info] ChainID +> 56 + +  + +> [!info] Symbol +> BNB + +  + +> [!address] Block Explorer URL +> https://bscscan.com/ + +  + +--- + +  + +### Token Addresses + +  + +#### NBU + +> [!path] EtherNW +> 0xEB58343b36C7528F23CAAe63a150240241310049 + +  + +> [!path] BSC-NW +0x5f20559235479F5B6abb40dFC6f55185b74E7b55 + +  + +#### GNBU + +> [!path] EtherNW +> 0x639ae8F3EEd18690bF451229d14953a5A5627b72 + +  + +> [!path] BSC-NW +> 0xA4d872235dde5694AF92a1d0df20d723E8e9E5fC + +  + +#### OCEAN Protocol + +> [!path] ETH NW +> 0x967da4048cD07aB37855c090aAF366e4ce1b9F48 + +  + +#### POP! + +> [!path] ETH NW +> 0x7fC3eC3574d408F3b59CD88709baCb42575EBF2b + +  +  \ No newline at end of file diff --git a/05.02 Networks/VPS Console Dialogue.md b/05.02 Networks/VPS Console Dialogue.md index 48e8cad9..fff8b8b1 100644 --- a/05.02 Networks/VPS Console Dialogue.md +++ b/05.02 Networks/VPS Console Dialogue.md @@ -721,6 +721,23 @@ sudo apt purge (package name)   +### Tools + +  + +#### Generate a random string + +> [!command] +> ```bash +> openssl rand -base64 5 +> ``` + +  + +--- + +  + ### Documentation   diff --git a/06.01 Finances/2023.ledger b/06.01 Finances/2023.ledger index 5acfc6ed..3f9e3893 100644 --- a/06.01 Finances/2023.ledger +++ b/06.01 Finances/2023.ledger @@ -504,4 +504,8 @@ alias f=expenses:Food 2023/03/04 Club Baur au Lac expenses:Food:CHF CHF360.50 - liability:CreditCard:CHF \ No newline at end of file + liability:CreditCard:CHF + +2023/03/04 XIII + expenses:Culture:CHF €37.70 + assets:Cash:CHF \ No newline at end of file diff --git a/06.01 Finances/hLedger.md b/06.01 Finances/hLedger.md index 98ddd6bc..574b70b6 100644 --- a/06.01 Finances/hLedger.md +++ b/06.01 Finances/hLedger.md @@ -380,7 +380,7 @@ hledger -f 'filename' roi --investment (investment account) -Y (period argument)   #### Tools -[[#^Top|TOP]] +   #### Useful commands @@ -394,10 +394,12 @@ hledger -f 'filename' roi --investment (investment account) -Y (period argument)   #### Other commands -[[#^Top|TOP]] + ```ad-example title: Specific tasks [Error checking](https://hledger.org/checking-for-errors.html) + +[Mac environment variables](https://hledger.org/hledger-web.html) ```