UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

159 lines (119 loc) 12.9 kB
import mapValues from 'lodash/fp/mapValues.js' import map from 'lodash/fp/map.js' import CodeFrameError from '../util/CodeFrameError.mjs' function makeIpcPath(path) { const result = [] for (let p = path; p.parent != null; p = p.parent) { if (p.name != null) result.push(p.name) } return result.reverse() } export function makeIpcMatch( backend, { type, path, node, paths, nodes, pathCaptures, captures, arrayPathCaptures, arrayCaptures, stringCaptures, } ) { function makeIpcNode(node) { return { location: backend.location(node), } } function makeIpcPath(path) { const result = [] for (let p = path; p.parent != null; p = p.parent) { if (p.name != null) result.push(p.name) } return result.reverse() } const result = { type, path: makeIpcPath(path), node: makeIpcNode(node), paths: paths.map(makeIpcPath), nodes: nodes.map(makeIpcNode), } if (pathCaptures) { result.pathCaptures = mapValues(makeIpcPath)(pathCaptures) } if (captures) { result.captures = mapValues(makeIpcNode)(captures) } if (arrayPathCaptures) { result.arrayPathCaptures = mapValues(map(makeIpcPath))(arrayPathCaptures) } if (arrayCaptures) { result.arrayCaptures = mapValues(map(makeIpcNode))(arrayCaptures) } if (stringCaptures) { result.stringCaptures = stringCaptures } return result } export function makeIpcTransformResult({ file, source, transformed, reports, error, matches, backend, }) { const result = { file, source, transformed, reports, } if (error) { if (error instanceof CodeFrameError) { const { message, stack, filename, source, path, loc } = error result.error = { name: 'CodeFrameError', message, stack, filename, source, path: path ? makeIpcPath(path) : undefined, loc, } } else { result.error = { name: 'Error', message: error.message, stack: error.stack, } } } if (matches) result.matches = matches.map((m) => makeIpcMatch(backend, m)) return result } export function invertIpcError(error) { switch (error.name) { case 'CodeFrameError': { const { message, filename, source, loc, stack } = error const result = new CodeFrameError(message, { filename, source, loc, }) result.stack = stack return result } default: { const { message, stack } = error const result = new Error(message) result.stack = stack return result } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYXBWYWx1ZXMiLCJtYXAiLCJDb2RlRnJhbWVFcnJvciIsIm1ha2VJcGNQYXRoIiwicGF0aCIsInJlc3VsdCIsInAiLCJwYXJlbnQiLCJuYW1lIiwicHVzaCIsInJldmVyc2UiLCJtYWtlSXBjTWF0Y2giLCJiYWNrZW5kIiwidHlwZSIsIm5vZGUiLCJwYXRocyIsIm5vZGVzIiwicGF0aENhcHR1cmVzIiwiY2FwdHVyZXMiLCJhcnJheVBhdGhDYXB0dXJlcyIsImFycmF5Q2FwdHVyZXMiLCJzdHJpbmdDYXB0dXJlcyIsIm1ha2VJcGNOb2RlIiwibG9jYXRpb24iLCJtYWtlSXBjVHJhbnNmb3JtUmVzdWx0IiwiZmlsZSIsInNvdXJjZSIsInRyYW5zZm9ybWVkIiwicmVwb3J0cyIsImVycm9yIiwibWF0Y2hlcyIsIm1lc3NhZ2UiLCJzdGFjayIsImZpbGVuYW1lIiwibG9jIiwidW5kZWZpbmVkIiwibSIsImludmVydElwY0Vycm9yIiwiRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9pcGMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwVmFsdWVzLCBtYXAgfSBmcm9tICdsb2Rhc2gvZnAnXG5pbXBvcnQgeyBUcmFuc2Zvcm1SZXN1bHQgfSBmcm9tICcuLi9Bc3R4J1xuaW1wb3J0IHsgQmFja2VuZCB9IGZyb20gJy4uL2JhY2tlbmQvQmFja2VuZCdcbmltcG9ydCB7IE1hdGNoIH0gZnJvbSAnLi4vZmluZCdcbmltcG9ydCB7IExvY2F0aW9uLCBOb2RlLCBOb2RlUGF0aCB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IENvZGVGcmFtZUVycm9yLCB7IFNvdXJjZUxvY2F0aW9uIH0gZnJvbSAnLi4vdXRpbC9Db2RlRnJhbWVFcnJvcidcblxuZXhwb3J0IHR5cGUgSXBjUGF0aCA9IChzdHJpbmcgfCBudW1iZXIpW11cbmV4cG9ydCB0eXBlIElwY05vZGUgPSB7XG4gIGxvY2F0aW9uOiBMb2NhdGlvblxufVxuXG5leHBvcnQgdHlwZSBJcGNNYXRjaCA9IHtcbiAgdHlwZTogJ25vZGUnIHwgJ25vZGVzJ1xuICBwYXRoOiBJcGNQYXRoXG4gIG5vZGU6IElwY05vZGVcbiAgcGF0aHM6IElwY1BhdGhbXVxuICBub2RlczogSXBjTm9kZVtdXG4gIHBhdGhDYXB0dXJlcz86IFJlY29yZDxzdHJpbmcsIElwY1BhdGg+XG4gIGNhcHR1cmVzPzogUmVjb3JkPHN0cmluZywgSXBjTm9kZT5cbiAgYXJyYXlQYXRoQ2FwdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBJcGNQYXRoW10+XG4gIGFycmF5Q2FwdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBJcGNOb2RlW10+XG4gIHN0cmluZ0NhcHR1cmVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufVxuXG5mdW5jdGlvbiBtYWtlSXBjUGF0aChwYXRoOiBOb2RlUGF0aCk6IElwY1BhdGgge1xuICBjb25zdCByZXN1bHQ6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXVxuICBmb3IgKGxldCBwID0gcGF0aDsgcC5wYXJlbnQgIT0gbnVsbDsgcCA9IHAucGFyZW50KSB7XG4gICAgaWYgKHAubmFtZSAhPSBudWxsKSByZXN1bHQucHVzaChwLm5hbWUpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJcGNNYXRjaChcbiAgYmFja2VuZDogQmFja2VuZCxcbiAge1xuICAgIHR5cGUsXG4gICAgcGF0aCxcbiAgICBub2RlLFxuICAgIHBhdGhzLFxuICAgIG5vZGVzLFxuICAgIHBhdGhDYXB0dXJlcyxcbiAgICBjYXB0dXJlcyxcbiAgICBhcnJheVBhdGhDYXB0dXJlcyxcbiAgICBhcnJheUNhcHR1cmVzLFxuICAgIHN0cmluZ0NhcHR1cmVzLFxuICB9OiBNYXRjaFxuKTogSXBjTWF0Y2gge1xuICBmdW5jdGlvbiBtYWtlSXBjTm9kZShub2RlOiBOb2RlKTogSXBjTm9kZSB7XG4gICAgcmV0dXJuIHsgbG9jYXRpb246IGJhY2tlbmQubG9jYXRpb24obm9kZSkgfVxuICB9XG4gIGZ1bmN0aW9uIG1ha2VJcGNQYXRoKHBhdGg6IE5vZGVQYXRoKTogSXBjUGF0aCB7XG4gICAgY29uc3QgcmVzdWx0OiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW11cbiAgICBmb3IgKGxldCBwID0gcGF0aDsgcC5wYXJlbnQgIT0gbnVsbDsgcCA9IHAucGFyZW50KSB7XG4gICAgICBpZiAocC5uYW1lICE9IG51bGwpIHJlc3VsdC5wdXNoKHAubmFtZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKClcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogSXBjTWF0Y2ggPSB7XG4gICAgdHlwZSxcbiAgICBwYXRoOiBtYWtlSXBjUGF0aChwYXRoKSxcbiAgICBub2RlOiBtYWtlSXBjTm9kZShub2RlKSxcbiAgICBwYXRoczogcGF0aHMubWFwKG1ha2VJcGNQYXRoKSxcbiAgICBub2Rlczogbm9kZXMubWFwKG1ha2VJcGNOb2RlKSxcbiAgfVxuICBpZiAocGF0aENhcHR1cmVzKSB7XG4gICAgcmVzdWx0LnBhdGhDYXB0dXJlcyA9IG1hcFZhbHVlcyhtYWtlSXBjUGF0aCkocGF0aENhcHR1cmVzKVxuICB9XG4gIGlmIChjYXB0dXJlcykge1xuICAgIHJlc3VsdC5jYXB0dXJlcyA9IG1hcFZhbHVlcyhtYWtlSXBjTm9kZSkoY2FwdHVyZXMpXG4gIH1cbiAgaWYgKGFycmF5UGF0aENhcHR1cmVzKSB7XG4gICAgcmVzdWx0LmFycmF5UGF0aENhcHR1cmVzID0gbWFwVmFsdWVzKG1hcChtYWtlSXBjUGF0aCkpKGFycmF5UGF0aENhcHR1cmVzKVxuICB9XG4gIGlmIChhcnJheUNhcHR1cmVzKSB7XG4gICAgcmVzdWx0LmFycmF5Q2FwdHVyZXMgPSBtYXBWYWx1ZXMobWFwKG1ha2VJcGNOb2RlKSkoYXJyYXlDYXB0dXJlcylcbiAgfVxuICBpZiAoc3RyaW5nQ2FwdHVyZXMpIHtcbiAgICByZXN1bHQuc3RyaW5nQ2FwdHVyZXMgPSBzdHJpbmdDYXB0dXJlc1xuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IHR5cGUgSXBjQ29kZUZyYW1lRXJyb3IgPSB7XG4gIG5hbWU6ICdDb2RlRnJhbWVFcnJvcidcbiAgbWVzc2FnZTogc3RyaW5nXG4gIHN0YWNrPzogc3RyaW5nXG4gIGZpbGVuYW1lPzogc3RyaW5nXG4gIHNvdXJjZT86IHN0cmluZ1xuICBwYXRoPzogSXBjUGF0aFxuICBsb2M/OiBTb3VyY2VMb2NhdGlvblxufVxuXG5leHBvcnQgdHlwZSBJcGNPdGhlckVycm9yID0ge1xuICBuYW1lOiAnRXJyb3InXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICBzdGFjaz86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBJcGNFcnJvciA9IElwY0NvZGVGcmFtZUVycm9yIHwgSXBjT3RoZXJFcnJvclxuXG5leHBvcnQgdHlwZSBJcGNUcmFuc2Zvcm1SZXN1bHQgPSB7XG4gIGZpbGU6IHN0cmluZ1xuICBzb3VyY2U/OiBzdHJpbmdcbiAgdHJhbnNmb3JtZWQ/OiBzdHJpbmdcbiAgcmVwb3J0cz86IGFueVtdXG4gIGVycm9yPzogSXBjRXJyb3JcbiAgbWF0Y2hlcz86IHJlYWRvbmx5IElwY01hdGNoW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJcGNUcmFuc2Zvcm1SZXN1bHQoe1xuICBmaWxlLFxuICBzb3VyY2UsXG4gIHRyYW5zZm9ybWVkLFxuICByZXBvcnRzLFxuICBlcnJvcixcbiAgbWF0Y2hlcyxcbiAgYmFja2VuZCxcbn06IFRyYW5zZm9ybVJlc3VsdCk6IElwY1RyYW5zZm9ybVJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdDogSXBjVHJhbnNmb3JtUmVzdWx0ID0geyBmaWxlLCBzb3VyY2UsIHRyYW5zZm9ybWVkLCByZXBvcnRzIH1cbiAgaWYgKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQ29kZUZyYW1lRXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2ssIGZpbGVuYW1lLCBzb3VyY2UsIHBhdGgsIGxvYyB9ID0gZXJyb3JcbiAgICAgIHJlc3VsdC5lcnJvciA9IHtcbiAgICAgICAgbmFtZTogJ0NvZGVGcmFtZUVycm9yJyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHBhdGg6IHBhdGggPyBtYWtlSXBjUGF0aChwYXRoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgbG9jLFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB7XG4gICAgICAgIG5hbWU6ICdFcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBlcnJvci5zdGFjayxcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG1hdGNoZXMpIHJlc3VsdC5tYXRjaGVzID0gbWF0Y2hlcy5tYXAoKG0pID0+IG1ha2VJcGNNYXRjaChiYWNrZW5kLCBtKSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0SXBjRXJyb3IoZXJyb3I6IElwY0Vycm9yKTogRXJyb3Ige1xuICBzd2l0Y2ggKGVycm9yLm5hbWUpIHtcbiAgICBjYXNlICdDb2RlRnJhbWVFcnJvcic6IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZSwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jLCBzdGFjayB9ID0gZXJyb3JcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBDb2RlRnJhbWVFcnJvcihtZXNzYWdlLCB7IGZpbGVuYW1lLCBzb3VyY2UsIGxvYyB9KVxuICAgICAgcmVzdWx0LnN0YWNrID0gc3RhY2tcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gZXJyb3JcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBFcnJvcihtZXNzYWdlKVxuICAgICAgcmVzdWx0LnN0YWNrID0gc3RhY2tcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBVCxFQUFvQkMsR0FBcEIsUUFBK0IsV0FBL0I7Ozs7O0FBS0EsT0FBT0MsY0FBUCxNQUErQyx3QkFBL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLFNBQVNDLFdBQVQsQ0FBcUJDLElBQXJCLEVBQThDO0VBQzVDLE1BQU1DLE1BQTJCLEdBQUcsRUFBcEM7RUFDQSxLQUFLLElBQUlDLENBQUMsR0FBR0YsSUFBYixFQUFtQkUsQ0FBQyxDQUFDQyxNQUFGLElBQVksSUFBL0IsRUFBcUNELENBQUMsR0FBR0EsQ0FBQyxDQUFDQyxNQUEzQyxFQUFtRDtJQUNqRCxJQUFJRCxDQUFDLENBQUNFLElBQUYsSUFBVSxJQUFkLEVBQW9CSCxNQUFNLENBQUNJLElBQVAsQ0FBWUgsQ0FBQyxDQUFDRSxJQUFkO0VBQ3JCO0VBQ0QsT0FBT0gsTUFBTSxDQUFDSyxPQUFQLEVBQVA7QUFDRDs7QUFFRCxPQUFPLFNBQVNDLFlBQVQ7QUFDTEMsT0FESztBQUVMO0VBQ0VDLElBREY7RUFFRVQsSUFGRjtFQUdFVSxJQUhGO0VBSUVDLEtBSkY7RUFLRUMsS0FMRjtFQU1FQyxZQU5GO0VBT0VDLFFBUEY7RUFRRUMsaUJBUkY7RUFTRUMsYUFURjtFQVVFQyxjQVZGLEVBRks7O0FBY0s7RUFDVixTQUFTQyxXQUFULENBQXFCUixJQUFyQixFQUEwQztJQUN4QyxPQUFPLEVBQUVTLFFBQVEsRUFBRVgsT0FBTyxDQUFDVyxRQUFSLENBQWlCVCxJQUFqQixDQUFaLEVBQVA7RUFDRDtFQUNELFNBQVNYLFdBQVQsQ0FBcUJDLElBQXJCLEVBQThDO0lBQzVDLE1BQU1DLE1BQTJCLEdBQUcsRUFBcEM7SUFDQSxLQUFLLElBQUlDLENBQUMsR0FBR0YsSUFBYixFQUFtQkUsQ0FBQyxDQUFDQyxNQUFGLElBQVksSUFBL0IsRUFBcUNELENBQUMsR0FBR0EsQ0FBQyxDQUFDQyxNQUEzQyxFQUFtRDtNQUNqRCxJQUFJRCxDQUFDLENBQUNFLElBQUYsSUFBVSxJQUFkLEVBQW9CSCxNQUFNLENBQUNJLElBQVAsQ0FBWUgsQ0FBQyxDQUFDRSxJQUFkO0lBQ3JCO0lBQ0QsT0FBT0gsTUFBTSxDQUFDSyxPQUFQLEVBQVA7RUFDRDs7RUFFRCxNQUFNTCxNQUFnQixHQUFHO0lBQ3ZCUSxJQUR1QjtJQUV2QlQsSUFBSSxFQUFFRCxXQUFXLENBQUNDLElBQUQsQ0FGTTtJQUd2QlUsSUFBSSxFQUFFUSxXQUFXLENBQUNSLElBQUQsQ0FITTtJQUl2QkMsS0FBSyxFQUFFQSxLQUFLLENBQUNkLEdBQU4sQ0FBVUUsV0FBVixDQUpnQjtJQUt2QmEsS0FBSyxFQUFFQSxLQUFLLENBQUNmLEdBQU4sQ0FBVXFCLFdBQVYsQ0FMZ0IsRUFBekI7O0VBT0EsSUFBSUwsWUFBSixFQUFrQjtJQUNoQlosTUFBTSxDQUFDWSxZQUFQLEdBQXNCakIsU0FBUyxDQUFDRyxXQUFELENBQVQsQ0FBdUJjLFlBQXZCLENBQXRCO0VBQ0Q7RUFDRCxJQUFJQyxRQUFKLEVBQWM7SUFDWmIsTUFBTSxDQUFDYSxRQUFQLEdBQWtCbEIsU0FBUyxDQUFDc0IsV0FBRCxDQUFULENBQXVCSixRQUF2QixDQUFsQjtFQUNEO0VBQ0QsSUFBSUMsaUJBQUosRUFBdUI7SUFDckJkLE1BQU0sQ0FBQ2MsaUJBQVAsR0FBMkJuQixTQUFTLENBQUNDLEdBQUcsQ0FBQ0UsV0FBRCxDQUFKLENBQVQsQ0FBNEJnQixpQkFBNUIsQ0FBM0I7RUFDRDtFQUNELElBQUlDLGFBQUosRUFBbUI7SUFDakJmLE1BQU0sQ0FBQ2UsYUFBUCxHQUF1QnBCLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDcUIsV0FBRCxDQUFKLENBQVQsQ0FBNEJGLGFBQTVCLENBQXZCO0VBQ0Q7RUFDRCxJQUFJQyxjQUFKLEVBQW9CO0lBQ2xCaEIsTUFBTSxDQUFDZ0IsY0FBUCxHQUF3QkEsY0FBeEI7RUFDRDtFQUNELE9BQU9oQixNQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJELE9BQU8sU0FBU21CLHNCQUFULENBQWdDO0VBQ3JDQyxJQURxQztFQUVyQ0MsTUFGcUM7RUFHckNDLFdBSHFDO0VBSXJDQyxPQUpxQztFQUtyQ0MsS0FMcUM7RUFNckNDLE9BTnFDO0VBT3JDbEIsT0FQcUMsRUFBaEM7QUFRaUM7RUFDdEMsTUFBTVAsTUFBMEIsR0FBRyxFQUFFb0IsSUFBRixFQUFRQyxNQUFSLEVBQWdCQyxXQUFoQixFQUE2QkMsT0FBN0IsRUFBbkM7RUFDQSxJQUFJQyxLQUFKLEVBQVc7SUFDVCxJQUFJQSxLQUFLLFlBQVkzQixjQUFyQixFQUFxQztNQUNuQyxNQUFNLEVBQUU2QixPQUFGLEVBQVdDLEtBQVgsRUFBa0JDLFFBQWxCLEVBQTRCUCxNQUE1QixFQUFvQ3RCLElBQXBDLEVBQTBDOEIsR0FBMUMsS0FBa0RMLEtBQXhEO01BQ0F4QixNQUFNLENBQUN3QixLQUFQLEdBQWU7UUFDYnJCLElBQUksRUFBRSxnQkFETztRQUVidUIsT0FGYTtRQUdiQyxLQUhhO1FBSWJDLFFBSmE7UUFLYlAsTUFMYTtRQU1idEIsSUFBSSxFQUFFQSxJQUFJLEdBQUdELFdBQVcsQ0FBQ0MsSUFBRCxDQUFkLEdBQXVCK0IsU0FOcEI7UUFPYkQsR0FQYSxFQUFmOztJQVNELENBWEQsTUFXTztNQUNMN0IsTUFBTSxDQUFDd0IsS0FBUCxHQUFlO1FBQ2JyQixJQUFJLEVBQUUsT0FETztRQUVidUIsT0FBTyxFQUFFRixLQUFLLENBQUNFLE9BRkY7UUFHYkMsS0FBSyxFQUFFSCxLQUFLLENBQUNHLEtBSEEsRUFBZjs7SUFLRDtFQUNGO0VBQ0QsSUFBSUYsT0FBSixFQUFhekIsTUFBTSxDQUFDeUIsT0FBUCxHQUFpQkEsT0FBTyxDQUFDN0IsR0FBUixDQUFZLENBQUNtQyxDQUFELEtBQU96QixZQUFZLENBQUNDLE9BQUQsRUFBVXdCLENBQVYsQ0FBL0IsQ0FBakI7RUFDYixPQUFPL0IsTUFBUDtBQUNEOztBQUVELE9BQU8sU0FBU2dDLGNBQVQsQ0FBd0JSLEtBQXhCLEVBQWdEO0VBQ3JELFFBQVFBLEtBQUssQ0FBQ3JCLElBQWQ7SUFDRSxLQUFLLGdCQUFMLENBQXVCO1FBQ3JCLE1BQU0sRUFBRXVCLE9BQUYsRUFBV0UsUUFBWCxFQUFxQlAsTUFBckIsRUFBNkJRLEdBQTdCLEVBQWtDRixLQUFsQyxLQUE0Q0gsS0FBbEQ7UUFDQSxNQUFNeEIsTUFBTSxHQUFHLElBQUlILGNBQUosQ0FBbUI2QixPQUFuQixFQUE0QixFQUFFRSxRQUFGLEVBQVlQLE1BQVosRUFBb0JRLEdBQXBCLEVBQTVCLENBQWY7UUFDQTdCLE1BQU0sQ0FBQzJCLEtBQVAsR0FBZUEsS0FBZjtRQUNBLE9BQU8zQixNQUFQO01BQ0Q7SUFDRCxRQUFTO1FBQ1AsTUFBTSxFQUFFMEIsT0FBRixFQUFXQyxLQUFYLEtBQXFCSCxLQUEzQjtRQUNBLE1BQU14QixNQUFNLEdBQUcsSUFBSWlDLEtBQUosQ0FBVVAsT0FBVixDQUFmO1FBQ0ExQixNQUFNLENBQUMyQixLQUFQLEdBQWVBLEtBQWY7UUFDQSxPQUFPM0IsTUFBUDtNQUNELENBWkg7O0FBY0QifQ==