baqend
Version:
Baqend JavaScript SDK
236 lines • 16.6 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NodeConnector = void 0;
var https_1 = __importDefault(require("https"));
var http_1 = __importDefault(require("http"));
var Connector_1 = require("./Connector");
var error_1 = require("../error");
var version_1 = require("../version");
var NodeConnector = /** @class */ (function (_super) {
__extends(NodeConnector, _super);
function NodeConnector(host, port, secure, basePath) {
var _this = _super.call(this, host, port, secure, basePath) || this;
_this.cookie = null;
_this.http = secure ? https_1.default : http_1.default;
return _this;
}
NodeConnector.isUsable = function () {
// prevent using when it is shimmed
return !!(http_1.default && http_1.default.Server);
};
/**
* @inheritDoc
*/
NodeConnector.prototype.prepareRequest = function (message) {
if (!message.header('user-agent')) {
message.header('user-agent', "baqend-sdk-js/".concat(version_1.SDK_VERSION));
}
return _super.prototype.prepareRequest.call(this, message);
};
/**
* @inheritDoc
*/
NodeConnector.prototype.doSend = function (message, request, receive) {
var _this = this;
var entity = request.entity;
var type = request.type;
var responseType = message.responseType();
if (this.cookie && message.withCredentials) {
request.headers.cookie = this.cookie;
}
var nodeRequest = __assign(__assign({}, request), { host: this.host, port: this.port, path: this.basePath + request.path });
var req = this.http.request(nodeRequest, function (res) {
var cookie = res.headers['set-cookie'];
if (cookie) {
// cookie may be an array, convert it to a string
_this.cookie = _this.parseCookie("".concat(cookie));
}
var status = res.statusCode || 0;
if (status >= 400) {
responseType = 'json';
}
if (responseType === 'stream') {
receive({
status: status,
headers: res.headers,
entity: res,
});
return;
}
var binary = responseType && responseType !== 'text' && responseType !== 'json';
var chunks = [];
if (!binary) {
res.setEncoding('utf-8');
}
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
receive({
status: status,
headers: res.headers,
entity: binary ? Buffer.concat(chunks) : chunks.join(''),
});
});
});
req.on('error', function (e) {
receive({
status: 0,
headers: {},
error: e,
});
});
if (type === 'stream') {
entity.pipe(req);
}
else if (type === 'blob') {
entity.arrayBuffer()
.then(function (buffer) { return req.end(Buffer.from(buffer)); })
.catch(function (e) { return req.destroy(e); });
}
else if (type === 'buffer') {
req.end(entity);
}
else if (type) {
req.end(entity, 'utf8');
}
else {
req.end();
}
};
/**
* Parse the cookie header
* @param header
* @return
*/
NodeConnector.prototype.parseCookie = function (header) {
var parts = header.split(';');
for (var i = 0, len = parts.length; i < len; i += 1) {
var part = parts[i];
if (part.trim().indexOf('Expires=') === 0) {
var date = Date.parse(part.substring(8));
if (date < Date.now()) {
return null;
}
}
}
return parts[0];
};
/**
* @inheritDoc
*/
NodeConnector.prototype.toFormat = function (message) {
var type = message.request.type;
if (type) {
var entity = message.request.entity;
var mimeType = message.mimeType();
switch (type) {
case 'stream':
if (!message.contentLength()) {
throw new error_1.PersistentError('You must specify a content length while making a stream based upload.');
}
break;
case 'buffer':
break;
case 'arraybuffer':
type = 'buffer';
entity = Buffer.from(entity);
break;
case 'data-url': {
var match = entity.match(/^data:(.+?)(;base64)?,(.*)$/);
var isBase64 = match[2];
// eslint-disable-next-line prefer-destructuring
entity = match[3];
type = 'buffer';
mimeType = mimeType || match[1];
if (isBase64) {
entity = Buffer.from(entity, 'base64');
}
else {
entity = Buffer.from(decodeURIComponent(entity), 'utf8');
}
break;
}
case 'base64':
type = 'buffer';
entity = Buffer.from(entity, 'base64');
break;
case 'json':
if (typeof entity !== 'string') {
entity = JSON.stringify(entity);
}
break;
case 'text':
break;
case 'blob':
if (typeof Blob !== 'undefined') {
mimeType = mimeType || entity.type;
break;
}
// fall through
default:
throw new Error("The request type ".concat(type, " is not supported"));
}
message.entity(entity, type).mimeType(mimeType);
}
};
/**
* @inheritDoc
*/
NodeConnector.prototype.fromFormat = function (response, entity, type) {
switch (type) {
case 'json':
return JSON.parse(entity);
case 'data-url':
case 'base64': {
var base64 = entity.toString('base64');
if (type === 'base64') {
return base64;
}
return "data:".concat(response.headers['content-type'], ";base64,").concat(base64);
}
case 'arraybuffer':
return entity.buffer.slice(entity.byteOffset, entity.byteOffset + entity.byteLength);
case 'blob':
if (typeof Blob !== 'undefined') {
return new Blob([entity.buffer], { type: response.headers['content-type'] });
}
// fall through
default:
return entity;
}
};
return NodeConnector;
}(Connector_1.Connector));
exports.NodeConnector = NodeConnector;
Connector_1.Connector.connectors.push(NodeConnector);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZUNvbm5lY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb25uZWN0b3IvTm9kZUNvbm5lY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUEwQjtBQUMxQiw4Q0FBd0I7QUFDeEIseUNBRXFCO0FBQ3JCLGtDQUEyQztBQUczQyxzQ0FBeUM7QUFFekM7SUFBbUMsaUNBQVM7SUFVMUMsdUJBQVksSUFBWSxFQUFFLElBQVksRUFBRSxNQUFlLEVBQUUsUUFBZ0I7UUFBekUsWUFDRSxrQkFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FHcEM7UUFGQyxLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixLQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLENBQUMsQ0FBQyxjQUFJLENBQUM7O0lBQ3BDLENBQUM7SUFUTSxzQkFBUSxHQUFmO1FBQ0UsbUNBQW1DO1FBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBSSxJQUFJLGNBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBUUQ7O09BRUc7SUFDSCxzQ0FBYyxHQUFkLFVBQWUsT0FBZ0I7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsd0JBQWlCLHFCQUFXLENBQUUsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxpQkFBTSxjQUFjLFlBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsOEJBQU0sR0FBTixVQUFPLE9BQWdCLEVBQUUsT0FBZ0IsRUFBRSxPQUFxQztRQUFoRixpQkF5RUM7UUF4RVMsSUFBQSxNQUFNLEdBQUssT0FBTyxPQUFaLENBQWE7UUFDbkIsSUFBQSxJQUFJLEdBQUssT0FBTyxLQUFaLENBQWE7UUFDekIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQzFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDdEM7UUFFRCxJQUFNLFdBQVcseUJBQ1osT0FBTyxLQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQ2pGLENBQUM7UUFDRixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBQyxHQUF5QjtZQUNuRSxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLElBQUksTUFBTSxFQUFFO2dCQUNWLGlEQUFpRDtnQkFDakQsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLFVBQUcsTUFBTSxDQUFFLENBQUMsQ0FBQzthQUM3QztZQUVELElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtnQkFDakIsWUFBWSxHQUFHLE1BQU0sQ0FBQzthQUN2QjtZQUVELElBQUksWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsT0FBTyxDQUFDO29CQUNOLE1BQU0sUUFBQTtvQkFDTixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQTJDO29CQUN4RCxNQUFNLEVBQUUsR0FBRztpQkFDWixDQUFDLENBQUM7Z0JBQ0gsT0FBTzthQUNSO1lBRUQsSUFBTSxNQUFNLEdBQUcsWUFBWSxJQUFJLFlBQVksS0FBSyxNQUFNLElBQUksWUFBWSxLQUFLLE1BQU0sQ0FBQztZQUNsRixJQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxQjtZQUVELEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQUMsS0FBc0I7Z0JBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFFSCxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRTtnQkFDWixPQUFPLENBQUM7b0JBQ04sTUFBTSxRQUFBO29CQUNOLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBMkM7b0JBQ3hELE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDckUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUMsQ0FBUTtZQUN2QixPQUFPLENBQUM7Z0JBQ04sTUFBTSxFQUFFLENBQUM7Z0JBQ1QsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO2FBQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxXQUFXLEVBQUU7aUJBQ2pCLElBQUksQ0FBQyxVQUFDLE1BQWMsSUFBSyxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUE1QixDQUE0QixDQUFDO2lCQUN0RCxLQUFLLENBQUMsVUFBQyxDQUFRLElBQUssT0FBQSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFkLENBQWMsQ0FBQyxDQUFBO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakI7YUFBTSxJQUFJLElBQUksRUFBRTtZQUNmLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUNBQVcsR0FBWCxVQUFZLE1BQWM7UUFDeEIsSUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkQsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2FBQ0Y7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGdDQUFRLEdBQVIsVUFBUyxPQUFnQjtRQUNqQixJQUFBLElBQUksR0FBSyxPQUFPLENBQUMsT0FBTyxLQUFwQixDQUFxQjtRQUUvQixJQUFJLElBQUksRUFBRTtZQUNGLElBQUEsTUFBTSxHQUFLLE9BQU8sQ0FBQyxPQUFPLE9BQXBCLENBQXFCO1lBQ2pDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVsQyxRQUFRLElBQUksRUFBRTtnQkFDWixLQUFLLFFBQVE7b0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRTt3QkFDNUIsTUFBTSxJQUFJLHVCQUFlLENBQUMsdUVBQXVFLENBQUMsQ0FBQztxQkFDcEc7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsTUFBTTtnQkFDUixLQUFLLGFBQWE7b0JBQ2hCLElBQUksR0FBRyxRQUFRLENBQUM7b0JBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3QixNQUFNO2dCQUNSLEtBQUssVUFBVSxDQUFDLENBQUM7b0JBQ2YsSUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUMxRCxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLGdEQUFnRDtvQkFDaEQsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFbEIsSUFBSSxHQUFHLFFBQVEsQ0FBQztvQkFDaEIsUUFBUSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLElBQUksUUFBUSxFQUFFO3dCQUNaLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0wsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQzFEO29CQUVELE1BQU07aUJBQ1A7Z0JBQ0QsS0FBSyxRQUFRO29CQUNYLElBQUksR0FBRyxRQUFRLENBQUM7b0JBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDdkMsTUFBTTtnQkFDUixLQUFLLE1BQU07b0JBQ1QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7d0JBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztvQkFDRCxNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRTt3QkFDL0IsUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNuQyxNQUFNO3FCQUNQO2dCQUNELGVBQWU7Z0JBQ2pCO29CQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQW9CLElBQUksc0JBQW1CLENBQUMsQ0FBQzthQUNoRTtZQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGtDQUFVLEdBQVYsVUFBVyxRQUFrQixFQUFFLE1BQVcsRUFBRSxJQUE2QjtRQUN2RSxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDYixJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7b0JBQ3JCLE9BQU8sTUFBTSxDQUFDO2lCQUNmO2dCQUVELE9BQU8sZUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxxQkFBVyxNQUFNLENBQUUsQ0FBQzthQUNwRTtZQUNELEtBQUssYUFBYTtnQkFDaEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZGLEtBQUssTUFBTTtnQkFDVCxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRTtvQkFDL0IsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDOUU7WUFDRCxlQUFlO1lBQ2pCO2dCQUNFLE9BQU8sTUFBTSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUNILG9CQUFDO0FBQUQsQ0FBQyxBQXZORCxDQUFtQyxxQkFBUyxHQXVOM0M7QUF2Tlksc0NBQWE7QUF5TjFCLHFCQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyJ9