@pubgcorp/pk-template
Version:
p template engine for kubernetes
201 lines • 15.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Scope = void 0;
const jslib_1 = __importDefault(require("./jslib"));
const styleSheet_1 = require("./styles/styleSheet");
const pathResolver_1 = require("./pathResolver");
const utils_1 = require("./utils");
const trace_1 = require("./trace");
const isHttp_1 = require("../pk-path/isHttp");
const lazy_1 = require("../lazy");
const fs_1 = require("fs");
const pk_yaml_1 = require("../pk-yaml");
class Scope extends pathResolver_1.PathResolver {
constructor({ objects, values, uri, parent, styleSheet }) {
super(uri);
this.object = null;
this.log = (...args) => this.trace.log(...args);
this.objects = objects;
this.values = values;
this.pvalues = {};
this.uri = uri;
this.parent = parent;
this.styleSheet = styleSheet;
this.$buildLib = jslib_1.default;
this.trace = parent && parent.trace || new trace_1.Trace('');
}
add(object) {
let scope = this;
scope.objects.push(object);
}
child({ uri, objects, values }, handler) {
const scope = new Scope({
objects: objects ? objects : this.objects,
values: values || this.values,
uri: uri || this.uri,
parent: this,
styleSheet: this.styleSheet,
$buildLib: jslib_1.default,
});
const rst = handler(scope);
for (const key of Object.keys(scope.values)) {
if (key in this.values) {
this.values[key] = key in scope.pvalues
? scope.pvalues[key]
: scope.values[key];
}
}
return rst;
}
child2({ uri, objects, values, orphan }, handler) {
objects = objects ? objects : this.objects;
uri = uri || this.uri;
const scope = new Scope({
objects: orphan ? [] : objects,
values: orphan ? (0, utils_1.deepCloneWithFunction)(this.values) : this.values,
uri: uri || this.uri,
parent: orphan ? null : this,
styleSheet: this.styleSheet,
$buildLib: jslib_1.default,
});
if (values) {
scope.defineValues(values);
}
const rst = handler(scope);
for (const key of Object.keys(scope.values)) {
if (key in this.values) {
this.values[key] = key in scope.pvalues
? scope.pvalues[key]
: scope.values[key];
}
}
return rst;
}
defineValues(values) {
for (const key of Object.keys(values)) {
if (!(key in this.pvalues)) {
this.pvalues[key] = this.values[key];
}
}
Object.assign(this.values, values);
// = {
// ...this.values,
// ...values,
// };
}
assignValues(values) {
for (const key of Object.keys(values)) {
if (key in this.values) {
this.values[key] = values[key];
}
else {
throw this.error(`value ${key} is not defined`);
}
}
}
// loader
loadText(uri) {
uri = this.resolve(uri);
try {
return {
uri,
data: (0, isHttp_1.isHttp)(uri)
? (0, lazy_1.getSyncRequest)()('GET', uri).getBody('utf8')
: (0, fs_1.readFileSync)(uri, 'utf8')
};
}
catch (e) {
throw this.error(`failed to load ${uri}`, e);
}
}
loadYaml(uri) {
const rst = this.loadText(uri);
try {
return {
uri: rst.uri,
data: (0, pk_yaml_1.parseYaml)(rst.data),
};
}
catch (e) {
throw this.error(`failed to parse yaml ${uri}`, e);
}
}
loadYamlAll(uri) {
const rst = this.loadText(uri);
try {
return {
uri: rst.uri,
data: (0, pk_yaml_1.parseYamlAll)(rst.data),
};
}
catch (e) {
throw this.error(`failed to parse yaml ${uri}`, e);
}
}
// TODO: merge compilePkt in languageSpec.ts
loadPkt(uri) {
const rst = this.loadText(uri);
try {
const yamls = (0, pk_yaml_1.parseYamlAsPkt)(rst.data, rst.uri);
if (yamls.length == 0) {
return { uri: rst.uri, data: { header: {}, statements: [] } };
}
if (yamls[0] && (yamls[0]['/properties'] || yamls[0]['/schema'] || yamls[0]['/import'] || yamls[0]['/require'])) {
const header = yamls[0];
return { uri: rst.uri, data: { header, statements: yamls.slice(1) } };
}
return {
uri: rst.uri,
data: { header: {}, statements: yamls },
};
}
catch (e) {
throw this.error(`failed to parse yaml ${uri}`, e);
}
}
loadTemplate(uri) {
const rst = this.loadText(uri);
try {
return {
uri: rst.uri,
data: (0, lazy_1.getUnderscore)().template(rst.data),
};
}
catch (e) {
throw this.error(`failed to parse template ${uri}`, e);
}
}
listFiles(uri) {
uri = this.resolve(uri);
if ((0, isHttp_1.isHttp)(uri)) {
throw new Error(`cannot get directory listing from ${uri}`);
}
return {
uri,
data: (0, fs_1.readdirSync)(uri),
};
}
error(msg, error) {
const err = (0, utils_1.pktError)(this, error || new Error(msg), msg);
return err;
}
static Create(values, uri, parent, objects, styleSheet) {
const scope = new Scope({
objects: objects ? [...objects] : [],
values: values ? (0, utils_1.deepCloneWithFunction)(values) : {},
uri: uri || '.',
styleSheet: styleSheet || (parent ? parent.styleSheet : null),
parent: parent || null,
trace: new trace_1.Trace('$'),
});
return scope;
}
static CreateRoot(objects, values) {
return Scope.Create(values, process.cwd() + '/', null, objects, new styleSheet_1.StyleSheet(null));
}
}
exports.Scope = Scope;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstdGVtcGxhdGUvc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRzVCLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFFOUMsbUNBQTBEO0FBQzFELG1DQUFnQztBQUNoQyw4Q0FBMkM7QUFDM0Msa0NBQXdEO0FBQ3hELDJCQUErQztBQUMvQyx3Q0FBcUU7QUFHckUsTUFBYSxLQUFNLFNBQVEsMkJBQVk7SUFZckMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQU87UUFDM0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBVGIsV0FBTSxHQUFtQixJQUFJLENBQUM7UUEwTDlCLFFBQUcsR0FBRyxDQUFDLEdBQUcsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBL0s5QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEdBQUcsQ0FBQyxNQUFXO1FBQ2IsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBTyxFQUFFLE9BQTZCO1FBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDekMsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtZQUM3QixHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFNBQVMsRUFBRSxlQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPO29CQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQU8sRUFBRSxPQUE2QjtRQUM1RSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0MsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRXRCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTztZQUM5QixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFxQixFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDakUsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRztZQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFNBQVMsRUFBRSxlQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxFQUFFO1lBQ1YsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtRQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPO29CQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBZTtRQUMxQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsT0FBTztRQUNQLHNCQUFzQjtRQUN0QixpQkFBaUI7UUFDakIsS0FBSztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBZTtRQUMxQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsU0FBUztJQUNULFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUk7WUFDRixPQUFPO2dCQUNMLEdBQUc7Z0JBQ0gsSUFBSSxFQUFFLElBQUEsZUFBTSxFQUFDLEdBQUcsQ0FBQztvQkFDZixDQUFDLENBQUMsSUFBQSxxQkFBYyxHQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQzlDLENBQUMsQ0FBQyxJQUFBLGlCQUFZLEVBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQzthQUM5QixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQU0sRUFBRTtZQUNmLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVc7UUFDbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJO1lBQ0YsT0FBTztnQkFDTCxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLElBQUEsbUJBQVMsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2FBQzFCLENBQUM7U0FDSDtRQUFDLE9BQU8sQ0FBTSxFQUFFO1lBQ2YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsR0FBVztRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUk7WUFDRixPQUFPO2dCQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDWixJQUFJLEVBQUUsSUFBQSxzQkFBWSxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDN0IsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxPQUFPLENBQUMsR0FBVztRQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUk7WUFDRixNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFjLEVBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDckIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUE7YUFDOUQ7WUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO2dCQUMvRyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFBO2FBQ3RFO1lBQ0QsT0FBTztnQkFDTCxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO2FBQ3hDLENBQUM7U0FDSDtRQUFDLE9BQU8sQ0FBTSxFQUFFO1lBQ2YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUk7WUFDRixPQUFPO2dCQUNMLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDWixJQUFJLEVBQUUsSUFBQSxvQkFBYSxHQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7YUFDekMsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDZixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBQSxlQUFNLEVBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsT0FBTztZQUNMLEdBQUc7WUFDSCxJQUFJLEVBQUUsSUFBQSxnQkFBVyxFQUFDLEdBQUcsQ0FBQztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUlELEtBQUssQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFBLGdCQUFRLEVBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWUsRUFBRSxHQUFXLEVBQUUsTUFBcUIsRUFBRSxPQUFrQixFQUFFLFVBQXVCO1FBQzVHLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFxQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRztZQUNmLFVBQVUsRUFBRSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM3RCxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDdEIsS0FBSyxFQUFFLElBQUksYUFBSyxDQUFDLEdBQUcsQ0FBQztTQUN0QixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWtCLEVBQUUsTUFBZTtRQUNuRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQ2pCLE1BQU0sRUFDTixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUNuQixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksdUJBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTFORCxzQkEwTkMifQ==