react-klasha
Version:
This is an reactJS library for implementing klasha payment gateway
761 lines (95 loc) • 83.2 kB
JavaScript
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports.
recursivePatternCapture = recursivePatternCapture;var _fs = require('fs');var _fs2 = _interopRequireDefault(_fs);var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);var _debug = require('debug');var _debug2 = _interopRequireDefault(_debug);var _eslint = require('eslint');var _parse = require('eslint-module-utils/parse');var _parse2 = _interopRequireDefault(_parse);var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);var _ignore = require('eslint-module-utils/ignore');var _ignore2 = _interopRequireDefault(_ignore);var _hash = require('eslint-module-utils/hash');var _unambiguous = require('eslint-module-utils/unambiguous');var unambiguous = _interopRequireWildcard(_unambiguous);var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;} else {var newObj = {};if (obj != null) {for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];}}newObj.default = obj;return newObj;}}function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}let parseConfigFileTextToJson;const log = (0, _debug2.default)('eslint-plugin-import:ExportMap');const exportCache = new Map();const tsConfigCache = new Map();class ExportMap {constructor(path) {this.path = path;this.namespace = new Map(); // todo: restructure to key on path, value is resolver + map of names
this.reexports = new Map(); /**
* star-exports
* @type {Set} of () => ExportMap
*/this.dependencies = new Set(); /**
* dependencies of this module that are not explicitly re-exported
* @type {Map} from path = () => ExportMap
*/this.imports = new Map();this.errors = [];}get hasDefault() {return this.get('default') != null;} // stronger than this.has
get size() {let size = this.namespace.size + this.reexports.size;this.dependencies.forEach(dep => {const d = dep(); // CJS / ignored dependencies won't exist (#717)
if (d == null) return;size += d.size;});return size;} /**
* Note that this does not check explicitly re-exported names for existence
* in the base namespace, but it will expand all `export * from '...'` exports
* if not found in the explicit namespace.
* @param {string} name
* @return {Boolean} true if `name` is exported by this module.
*/has(name) {if (this.namespace.has(name)) return true;if (this.reexports.has(name)) return true; // default exports must be explicitly re-exported (#328)
if (name !== 'default') {for (const dep of this.dependencies) {const innerMap = dep(); // todo: report as unresolved?
if (!innerMap) continue;if (innerMap.has(name)) return true;}}return false;} /**
* ensure that imported name fully resolves.
* @param {string} name
* @return {{ found: boolean, path: ExportMap[] }}
*/hasDeep(name) {if (this.namespace.has(name)) return { found: true, path: [this] };if (this.reexports.has(name)) {const reexports = this.reexports.get(name);const imported = reexports.getImport(); // if import is ignored, return explicit 'null'
if (imported == null) return { found: true, path: [this] }; // safeguard against cycles, only if name matches
if (imported.path === this.path && reexports.local === name) {return { found: false, path: [this] };}const deep = imported.hasDeep(reexports.local);deep.path.unshift(this);return deep;} // default exports must be explicitly re-exported (#328)
if (name !== 'default') {for (const dep of this.dependencies) {const innerMap = dep();if (innerMap == null) return { found: true, path: [this] }; // todo: report as unresolved?
if (!innerMap) continue; // safeguard against cycles
if (innerMap.path === this.path) continue;const innerValue = innerMap.hasDeep(name);if (innerValue.found) {innerValue.path.unshift(this);return innerValue;}}}return { found: false, path: [this] };}get(name) {if (this.namespace.has(name)) return this.namespace.get(name);if (this.reexports.has(name)) {const reexports = this.reexports.get(name);const imported = reexports.getImport(); // if import is ignored, return explicit 'null'
if (imported == null) return null; // safeguard against cycles, only if name matches
if (imported.path === this.path && reexports.local === name) return undefined;return imported.get(reexports.local);} // default exports must be explicitly re-exported (#328)
if (name !== 'default') {for (const dep of this.dependencies) {const innerMap = dep(); // todo: report as unresolved?
if (!innerMap) continue; // safeguard against cycles
if (innerMap.path === this.path) continue;const innerValue = innerMap.get(name);if (innerValue !== undefined) return innerValue;}}return undefined;}forEach(callback, thisArg) {this.namespace.forEach((v, n) => callback.call(thisArg, v, n, this));this.reexports.forEach((reexports, name) => {const reexported = reexports.getImport(); // can't look up meta for ignored re-exports (#348)
callback.call(thisArg, reexported && reexported.get(reexports.local), name, this);});this.dependencies.forEach(dep => {const d = dep(); // CJS / ignored dependencies won't exist (#717)
if (d == null) return;d.forEach((v, n) => n !== 'default' && callback.call(thisArg, v, n, this));});} // todo: keys, values, entries?
reportErrors(context, declaration) {context.report({ node: declaration.source, message: `Parse errors in imported module '${declaration.source.value}': ` + `${this.errors.map(e => `${e.message} (${e.lineNumber}:${e.column})`).join(', ')}` });}}exports.default = ExportMap; /**
* parse docs from the first node that has leading comments
*/function captureDoc(source, docStyleParsers) {const metadata = {}; // 'some' short-circuits on first 'true'
for (var _len = arguments.length, nodes = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {nodes[_key - 2] = arguments[_key];}nodes.some(n => {try {let leadingComments; // n.leadingComments is legacy `attachComments` behavior
if ('leadingComments' in n) {leadingComments = n.leadingComments;} else if (n.range) {leadingComments = source.getCommentsBefore(n);}if (!leadingComments || leadingComments.length === 0) return false;for (const name in docStyleParsers) {const doc = docStyleParsers[name](leadingComments);if (doc) {metadata.doc = doc;}}return true;} catch (err) {return false;}});return metadata;}const availableDocStyleParsers = { jsdoc: captureJsDoc, tomdoc: captureTomDoc }; /**
* parse JSDoc from leading comments
* @param {object[]} comments
* @return {{ doc: object }}
*/function captureJsDoc(comments) {let doc; // capture XSDoc
comments.forEach(comment => {// skip non-block comments
if (comment.type !== 'Block') return;try {doc = _doctrine2.default.parse(comment.value, { unwrap: true });} catch (err) {/* don't care, for now? maybe add to `errors?` */}});return doc;} /**
* parse TomDoc section from comments
*/function captureTomDoc(comments) {// collect lines up to first paragraph break
const lines = [];for (let i = 0; i < comments.length; i++) {const comment = comments[i];if (comment.value.match(/^\s*$/)) break;lines.push(comment.value.trim());} // return doctrine-like object
const statusMatch = lines.join(' ').match(/^(Public|Internal|Deprecated):\s*(.+)/);if (statusMatch) {return { description: statusMatch[2], tags: [{ title: statusMatch[1].toLowerCase(), description: statusMatch[2] }] };}}const supportedImportTypes = new Set(['ImportDefaultSpecifier', 'ImportNamespaceSpecifier']);ExportMap.get = function (source, context) {const path = (0, _resolve2.default)(source, context);if (path == null) return null;return ExportMap.for(childContext(path, context));};ExportMap.for = function (context) {const path = context.path;const cacheKey = (0, _hash.hashObject)(context).digest('hex');let exportMap = exportCache.get(cacheKey); // return cached ignore
if (exportMap === null) return null;const stats = _fs2.default.statSync(path);if (exportMap != null) {// date equality check
if (exportMap.mtime - stats.mtime === 0) {return exportMap;} // future: check content equality?
} // check valid extensions first
if (!(0, _ignore.hasValidExtension)(path, context)) {exportCache.set(cacheKey, null);return null;} // check for and cache ignore
if ((0, _ignore2.default)(path, context)) {log('ignored path due to ignore settings:', path);exportCache.set(cacheKey, null);return null;}const content = _fs2.default.readFileSync(path, { encoding: 'utf8' }); // check for and cache unambiguous modules
if (!unambiguous.test(content)) {log('ignored path due to unambiguous regex:', path);exportCache.set(cacheKey, null);return null;}log('cache miss', cacheKey, 'for path', path);exportMap = ExportMap.parse(path, content, context); // ambiguous modules return null
if (exportMap == null) return null;exportMap.mtime = stats.mtime;exportCache.set(cacheKey, exportMap);return exportMap;};ExportMap.parse = function (path, content, context) {const m = new ExportMap(path);let ast;try {ast = (0, _parse2.default)(path, content, context);} catch (err) {log('parse error:', path, err);m.errors.push(err);return m; // can't continue
}if (!unambiguous.isModule(ast)) return null;const docstyle = context.settings && context.settings['import/docstyle'] || ['jsdoc'];const docStyleParsers = {};docstyle.forEach(style => {docStyleParsers[style] = availableDocStyleParsers[style];}); // attempt to collect module doc
if (ast.comments) {ast.comments.some(c => {if (c.type !== 'Block') return false;try {const doc = _doctrine2.default.parse(c.value, { unwrap: true });if (doc.tags.some(t => t.title === 'module')) {m.doc = doc;return true;}} catch (err) {/* ignore */}return false;});}const namespaces = new Map();function remotePath(value) {return _resolve2.default.relative(value, path, context.settings);}function resolveImport(value) {const rp = remotePath(value);if (rp == null) return null;return ExportMap.for(childContext(rp, context));}function getNamespace(identifier) {if (!namespaces.has(identifier.name)) return;return function () {return resolveImport(namespaces.get(identifier.name));};}function addNamespace(object, identifier) {const nsfn = getNamespace(identifier);if (nsfn) {Object.defineProperty(object, 'namespace', { get: nsfn });}return object;}function captureDependency(_ref, isOnlyImportingTypes) {let source = _ref.source;let importedSpecifiers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();if (source == null) return null;const p = remotePath(source.value);if (p == null) return null;const declarationMetadata = { // capturing actual node reference holds full AST in memory!
source: { value: source.value, loc: source.loc }, isOnlyImportingTypes, importedSpecifiers };const existing = m.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}const getter = thunkFor(p, context);m.imports.set(p, { getter, declarations: new Set([declarationMetadata]) });return getter;}const source = makeSourceCode(content, ast);function readTsConfig() {const tsConfigInfo = (0, _tsconfigLoader.tsConfigLoader)({ cwd: context.parserOptions && context.parserOptions.tsconfigRootDir || process.cwd(), getEnv: key => process.env[key] });try {if (tsConfigInfo.tsConfigPath !== undefined) {const jsonText = _fs2.default.readFileSync(tsConfigInfo.tsConfigPath).toString();if (!parseConfigFileTextToJson) {var _require = require('typescript'); // this is because projects not using TypeScript won't have typescript installed
parseConfigFileTextToJson = _require.parseConfigFileTextToJson;}return parseConfigFileTextToJson(tsConfigInfo.tsConfigPath, jsonText).config;}} catch (e) {// Catch any errors
}return null;}function isEsModuleInterop() {const cacheKey = (0, _hash.hashObject)({ tsconfigRootDir: context.parserOptions && context.parserOptions.tsconfigRootDir }).digest('hex');let tsConfig = tsConfigCache.get(cacheKey);if (typeof tsConfig === 'undefined') {tsConfig = readTsConfig();tsConfigCache.set(cacheKey, tsConfig);}return tsConfig && tsConfig.compilerOptions ? tsConfig.compilerOptions.esModuleInterop : false;}ast.body.forEach(function (n) {if (n.type === 'ExportDefaultDeclaration') {const exportMeta = captureDoc(source, docStyleParsers, n);if (n.declaration.type === 'Identifier') {addNamespace(exportMeta, n.declaration);}m.namespace.set('default', exportMeta);return;}if (n.type === 'ExportAllDeclaration') {const getter = captureDependency(n, n.exportKind === 'type');if (getter) m.dependencies.add(getter);return;} // capture namespaces in case of later export
if (n.type === 'ImportDeclaration') {// import type { Foo } (TS and Flow)
const declarationIsType = n.importKind === 'type'; // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and
// shouldn't be considered to be just importing types
let specifiersOnlyImportingTypes = n.specifiers.length;const importedSpecifiers = new Set();n.specifiers.forEach(specifier => {if (supportedImportTypes.has(specifier.type)) {importedSpecifiers.add(specifier.type);}if (specifier.type === 'ImportSpecifier') {importedSpecifiers.add(specifier.imported.name);} // import { type Foo } (Flow)
specifiersOnlyImportingTypes = specifiersOnlyImportingTypes && specifier.importKind === 'type';});captureDependency(n, declarationIsType || specifiersOnlyImportingTypes, importedSpecifiers);const ns = n.specifiers.find(s => s.type === 'ImportNamespaceSpecifier');if (ns) {namespaces.set(ns.local.name, n.source.value);}return;}if (n.type === 'ExportNamedDeclaration') {// capture declaration
if (n.declaration != null) {switch (n.declaration.type) {case 'FunctionDeclaration':case 'ClassDeclaration':case 'TypeAlias': // flowtype with babel-eslint parser
case 'InterfaceDeclaration':case 'DeclareFunction':case 'TSDeclareFunction':case 'TSEnumDeclaration':case 'TSTypeAliasDeclaration':case 'TSInterfaceDeclaration':case 'TSAbstractClassDeclaration':case 'TSModuleDeclaration':m.namespace.set(n.declaration.id.name, captureDoc(source, docStyleParsers, n));break;case 'VariableDeclaration':n.declaration.declarations.forEach(d => recursivePatternCapture(d.id, id => m.namespace.set(id.name, captureDoc(source, docStyleParsers, d, n))));break;}}const nsource = n.source && n.source.value;n.specifiers.forEach(s => {const exportMeta = {};let local;switch (s.type) {case 'ExportDefaultSpecifier':if (!n.source) return;local = 'default';break;case 'ExportNamespaceSpecifier':m.namespace.set(s.exported.name, Object.defineProperty(exportMeta, 'namespace', { get() {return resolveImport(nsource);} }));return;case 'ExportSpecifier':if (!n.source) {m.namespace.set(s.exported.name, addNamespace(exportMeta, s.local));return;} // else falls through
default:local = s.local.name;break;} // todo: JSDoc
m.reexports.set(s.exported.name, { local, getImport: () => resolveImport(nsource) });});}const isEsModuleInteropTrue = isEsModuleInterop();const exports = ['TSExportAssignment'];if (isEsModuleInteropTrue) {exports.push('TSNamespaceExportDeclaration');} // This doesn't declare anything, but changes what's being exported.
if ((0, _arrayIncludes2.default)(exports, n.type)) {const exportedName = n.type === 'TSNamespaceExportDeclaration' ? n.id.name : n.expression && n.expression.name || n.expression.id && n.expression.id.name || null;const declTypes = ['VariableDeclaration', 'ClassDeclaration', 'TSDeclareFunction', 'TSEnumDeclaration', 'TSTypeAliasDeclaration', 'TSInterfaceDeclaration', 'TSAbstractClassDeclaration', 'TSModuleDeclaration'];const exportedDecls = ast.body.filter((_ref2) => {let type = _ref2.type,id = _ref2.id,declarations = _ref2.declarations;return (0, _arrayIncludes2.default)(declTypes, type) && (id && id.name === exportedName || declarations && declarations.find(d => d.id.name === exportedName));});if (exportedDecls.length === 0) {// Export is not referencing any local declaration, must be re-exporting
m.namespace.set('default', captureDoc(source, docStyleParsers, n));return;}if (isEsModuleInteropTrue) {m.namespace.set('default', {});}exportedDecls.forEach(decl => {if (decl.type === 'TSModuleDeclaration') {if (decl.body && decl.body.type === 'TSModuleDeclaration') {m.namespace.set(decl.body.id.name, captureDoc(source, docStyleParsers, decl.body));} else if (decl.body && decl.body.body) {decl.body.body.forEach(moduleBlockNode => {// Export-assignment exports all members in the namespace,
// explicitly exported or not.
const namespaceDecl = moduleBlockNode.type === 'ExportNamedDeclaration' ? moduleBlockNode.declaration : moduleBlockNode;if (!namespaceDecl) {// TypeScript can check this for us; we needn't
} else if (namespaceDecl.type === 'VariableDeclaration') {namespaceDecl.declarations.forEach(d => recursivePatternCapture(d.id, id => m.namespace.set(id.name, captureDoc(source, docStyleParsers, decl, namespaceDecl, moduleBlockNode))));} else {m.namespace.set(namespaceDecl.id.name, captureDoc(source, docStyleParsers, moduleBlockNode));}});}} else {// Export as default
m.namespace.set('default', captureDoc(source, docStyleParsers, decl));}});}});return m;}; /**
* The creation of this closure is isolated from other scopes
* to avoid over-retention of unrelated variables, which has
* caused memory leaks. See #1266.
*/function thunkFor(p, context) {return () => ExportMap.for(childContext(p, context));} /**
* Traverse a pattern/identifier node, calling 'callback'
* for each leaf identifier.
* @param {node} pattern
* @param {Function} callback
* @return {void}
*/function recursivePatternCapture(pattern, callback) {switch (pattern.type) {case 'Identifier': // base case
callback(pattern);break;case 'ObjectPattern':pattern.properties.forEach(p => {if (p.type === 'ExperimentalRestProperty' || p.type === 'RestElement') {callback(p.argument);return;}recursivePatternCapture(p.value, callback);});break;case 'ArrayPattern':pattern.elements.forEach(element => {if (element == null) return;if (element.type === 'ExperimentalRestProperty' || element.type === 'RestElement') {callback(element.argument);return;}recursivePatternCapture(element, callback);});break;case 'AssignmentPattern':callback(pattern.left);break;}} /**
* don't hold full context object in memory, just grab what we need.
*/function childContext(path, context) {const settings = context.settings,parserOptions = context.parserOptions,parserPath = context.parserPath;return { settings, parserOptions, parserPath, path };} /**
* sometimes legacy support isn't _that_ hard... right?
*/function makeSourceCode(text, ast) {if (_eslint.SourceCode.length > 1) {// ESLint 3
return new _eslint.SourceCode(text, ast);} else {// ESLint 4, 5
return new _eslint.SourceCode({ text, ast });}}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb24iLCJsb2ciLCJleHBvcnRDYWNoZSIsIk1hcCIsInRzQ29uZmlnQ2FjaGUiLCJFeHBvcnRNYXAiLCJjb25zdHJ1Y3RvciIsInBhdGgiLCJuYW1lc3BhY2UiLCJyZWV4cG9ydHMiLCJkZXBlbmRlbmNpZXMiLCJTZXQiLCJpbXBvcnRzIiwiZXJyb3JzIiwiaGFzRGVmYXVsdCIsImdldCIsInNpemUiLCJmb3JFYWNoIiwiZGVwIiwiZCIsImhhcyIsIm5hbWUiLCJpbm5lck1hcCIsImhhc0RlZXAiLCJmb3VuZCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwidW5zaGlmdCIsImlubmVyVmFsdWUiLCJ1bmRlZmluZWQiLCJjYWxsYmFjayIsInRoaXNBcmciLCJ2IiwibiIsImNhbGwiLCJyZWV4cG9ydGVkIiwicmVwb3J0RXJyb3JzIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwicmVwb3J0Iiwibm9kZSIsInNvdXJjZSIsIm1lc3NhZ2UiLCJ2YWx1ZSIsIm1hcCIsImUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsImNhcHR1cmVEb2MiLCJkb2NTdHlsZVBhcnNlcnMiLCJtZXRhZGF0YSIsIm5vZGVzIiwic29tZSIsImxlYWRpbmdDb21tZW50cyIsInJhbmdlIiwiZ2V0Q29tbWVudHNCZWZvcmUiLCJsZW5ndGgiLCJkb2MiLCJlcnIiLCJhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMiLCJqc2RvYyIsImNhcHR1cmVKc0RvYyIsInRvbWRvYyIsImNhcHR1cmVUb21Eb2MiLCJjb21tZW50cyIsImNvbW1lbnQiLCJ0eXBlIiwiZG9jdHJpbmUiLCJwYXJzZSIsInVud3JhcCIsImxpbmVzIiwiaSIsIm1hdGNoIiwicHVzaCIsInRyaW0iLCJzdGF0dXNNYXRjaCIsImRlc2NyaXB0aW9uIiwidGFncyIsInRpdGxlIiwidG9Mb3dlckNhc2UiLCJzdXBwb3J0ZWRJbXBvcnRUeXBlcyIsImZvciIsImNoaWxkQ29udGV4dCIsImNhY2hlS2V5IiwiZGlnZXN0IiwiZXhwb3J0TWFwIiwic3RhdHMiLCJmcyIsInN0YXRTeW5jIiwibXRpbWUiLCJzZXQiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJ0ZXN0IiwibSIsImFzdCIsImlzTW9kdWxlIiwiZG9jc3R5bGUiLCJzZXR0aW5ncyIsInN0eWxlIiwiYyIsInQiLCJuYW1lc3BhY2VzIiwicmVtb3RlUGF0aCIsInJlc29sdmUiLCJyZWxhdGl2ZSIsInJlc29sdmVJbXBvcnQiLCJycCIsImdldE5hbWVzcGFjZSIsImlkZW50aWZpZXIiLCJhZGROYW1lc3BhY2UiLCJvYmplY3QiLCJuc2ZuIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjYXB0dXJlRGVwZW5kZW5jeSIsImlzT25seUltcG9ydGluZ1R5cGVzIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwicCIsImRlY2xhcmF0aW9uTWV0YWRhdGEiLCJsb2MiLCJleGlzdGluZyIsImRlY2xhcmF0aW9ucyIsImFkZCIsImdldHRlciIsInRodW5rRm9yIiwibWFrZVNvdXJjZUNvZGUiLCJyZWFkVHNDb25maWciLCJ0c0NvbmZpZ0luZm8iLCJjd2QiLCJwYXJzZXJPcHRpb25zIiwidHNjb25maWdSb290RGlyIiwicHJvY2VzcyIsImdldEVudiIsImtleSIsImVudiIsInRzQ29uZmlnUGF0aCIsImpzb25UZXh0IiwidG9TdHJpbmciLCJyZXF1aXJlIiwiY29uZmlnIiwiaXNFc01vZHVsZUludGVyb3AiLCJ0c0NvbmZpZyIsImNvbXBpbGVyT3B0aW9ucyIsImVzTW9kdWxlSW50ZXJvcCIsImJvZHkiLCJleHBvcnRNZXRhIiwiZXhwb3J0S2luZCIsImRlY2xhcmF0aW9uSXNUeXBlIiwiaW1wb3J0S2luZCIsInNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMiLCJzcGVjaWZpZXJzIiwic3BlY2lmaWVyIiwibnMiLCJmaW5kIiwicyIsImlkIiwibnNvdXJjZSIsImV4cG9ydGVkIiwiaXNFc01vZHVsZUludGVyb3BUcnVlIiwiZXhwb3J0cyIsImV4cG9ydGVkTmFtZSIsImV4cHJlc3Npb24iLCJkZWNsVHlwZXMiLCJleHBvcnRlZERlY2xzIiwiZmlsdGVyIiwiZGVjbCIsIm1vZHVsZUJsb2NrTm9kZSIsIm5hbWVzcGFjZURlY2wiLCJwYXR0ZXJuIiwicHJvcGVydGllcyIsImFyZ3VtZW50IiwiZWxlbWVudHMiLCJlbGVtZW50IiwibGVmdCIsInBhcnNlclBhdGgiLCJ0ZXh0IiwiU291cmNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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