UNPKG

metaapi.cloud-sdk

Version:

SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)

167 lines (166 loc) 15.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ApiError: function() { return ApiError; }, ConflictError: function() { return ConflictError; }, ForbiddenError: function() { return ForbiddenError; }, InternalError: function() { return InternalError; }, NotFoundError: function() { return NotFoundError; }, TooManyRequestsError: function() { return TooManyRequestsError; }, UnauthorizedError: function() { return UnauthorizedError; }, ValidationError: function() { return ValidationError; } }); function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /** * Base class for API errors. Contains indication of HTTP status. */ const isNode = typeof process !== "undefined" && process.release && process.release.name === "node"; let ApiError = class ApiError extends Error { /** * Sets error code, used for i18n * @param {string} code error code for i18n */ set code(code) { this._code = code; } /** * Returns error code used for i18n * @return {string} error code */ get code() { return this._code; } /** * Set message arguments for i18n * @param {Array<Object>} args arguments for i18n */ set arguments(args) { this._args = args; } /** * Returns message arguments for i18n * @return {Array<Object>} message arguments for i18n */ get arguments() { return this._args; } /** * ApiError constructor * @param {Function} clazz error name * @param {Object} message error message * @param {number} status HTTP status * @param {string} url API request URL */ constructor(clazz, message, status, url){ super(url ? message + ". Request URL: " + url : message); /** HTTP status code */ _define_property(this, "status", void 0); /** API request URL */ _define_property(this, "url", void 0); _define_property(this, "_code", void 0); _define_property(this, "_args", void 0); this.name = clazz.name; this.status = status; this.url = url; if (isNode && Error.captureStackTrace) { Error.captureStackTrace(this, clazz); } } }; let NotFoundError = class NotFoundError extends ApiError { /** * Represents NotFoundError. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(NotFoundError, message, 404, url); } }; let ForbiddenError = class ForbiddenError extends ApiError { /** * Constructs forbidden error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(ForbiddenError, message, 403, url); } }; let UnauthorizedError = class UnauthorizedError extends ApiError { /** * Constructs unauthorized error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(UnauthorizedError, message, 401, url); } }; let ValidationError = class ValidationError extends ApiError { /** * Constructs validation error. * @param {string} message error message * @param {Object} details error data * @param {string} url API request URL */ constructor(message, details, url){ super(ValidationError, message, 400, url); /** Validation error details */ _define_property(this, "details", void 0); this.details = details; } }; let InternalError = class InternalError extends ApiError { /** * Constructs unexpected error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(InternalError, message, 500, url); } }; let ConflictError = class ConflictError extends ApiError { /** * Constructs conflict error. * @param {string} message error message * @param {string} url API request URL */ constructor(message, url){ super(ConflictError, message, 409, url); } }; let TooManyRequestsError = class TooManyRequestsError extends ApiError { /** * Constructs too many requests error. * @param {string} message error message * @param {TooManyRequestsErrorMetadata} metadata error metadata */ constructor(message, metadata, url){ super(TooManyRequestsError, message, 429, url); /** error metadata */ _define_property(this, "metadata", void 0); this.metadata = metadata; } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIjxhbm9uPiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuXG5jb25zdCBpc05vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5yZWxlYXNlICYmIHByb2Nlc3MucmVsZWFzZS5uYW1lID09PSAnbm9kZSc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQVBJIGVycm9ycy4gQ29udGFpbnMgaW5kaWNhdGlvbiBvZiBIVFRQIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBcbiAgLyoqIEhUVFAgc3RhdHVzIGNvZGUgKi9cbiAgcHVibGljIHN0YXR1czogbnVtYmVyO1xuICAvKiogQVBJIHJlcXVlc3QgVVJMICovXG4gIHB1YmxpYyB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBfY29kZTogYW55O1xuICBwcml2YXRlIF9hcmdzOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFwaUVycm9yIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNsYXp6IGVycm9yIG5hbWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzIEhUVFAgc3RhdHVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgQVBJIHJlcXVlc3QgVVJMXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjbGF6ejogRnVuY3Rpb24sIG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHVybD86IHN0cmluZykge1xuICAgIHN1cGVyKHVybCA/IG1lc3NhZ2UgKyAnLiBSZXF1ZXN0IFVSTDogJyArIHVybCA6IG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IGNsYXp6Lm5hbWU7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy51cmwgPSB1cmw7XG5cbiAgICBpZiAoaXNOb2RlICYmIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBjbGF6eik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZXJyb3IgY29kZSwgdXNlZCBmb3IgaTE4blxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBlcnJvciBjb2RlIGZvciBpMThuXG4gICAqL1xuICBzZXQgY29kZShjb2RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2RlID0gY29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGVycm9yIGNvZGUgdXNlZCBmb3IgaTE4blxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGVycm9yIGNvZGVcbiAgICovXG4gIGdldCBjb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvZGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1lc3NhZ2UgYXJndW1lbnRzIGZvciBpMThuXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gYXJncyBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICovXG4gIHNldCBhcmd1bWVudHMoYXJnczogQXJyYXk8T2JqZWN0Pikge1xuICAgIHRoaXMuX2FyZ3MgPSBhcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWVzc2FnZSBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn0gbWVzc2FnZSBhcmd1bWVudHMgZm9yIGkxOG5cbiAgICovXG4gIGdldCBhcmd1bWVudHMoKTogQXJyYXk8T2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ3M7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDA0IChOb3QgRm91bmQpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgTm90Rm91bmRFcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihOb3RGb3VuZEVycm9yLCBtZXNzYWdlLCA0MDQsIHVybCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDAzIChGb3JiaWRkZW4pIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZvcmJpZGRlbkVycm9yIGV4dGVuZHMgQXBpRXJyb3Ige1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGZvcmJpZGRlbiBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihGb3JiaWRkZW5FcnJvciwgbWVzc2FnZSwgNDAzLCB1cmwpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDQwMSAoVW5hdXRob3JpemVkKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB1bmF1dGhvcml6ZWQgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVW5hdXRob3JpemVkRXJyb3IsIG1lc3NhZ2UsIDQwMSwgdXJsKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdmFsaWRhdGlvbiBlcnJvci4gVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDQwMCAoQmFkIFJlcXVlc3QpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgXG4gIC8qKiBWYWxpZGF0aW9uIGVycm9yIGRldGFpbHMgKi9cbiAgcHVibGljIGRldGFpbHM6IG9iamVjdDtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyB2YWxpZGF0aW9uIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBlcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkZXRhaWxzIGVycm9yIGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IE9iamVjdCwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVmFsaWRhdGlvbkVycm9yLCBtZXNzYWdlLCA0MDAsIHVybCk7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdW5leHBlY3RlZCBlcnJvci4gVGhyb3dpbmcgdGhpcyBlcnJvciByZXN1bHRzIGluIDUwMCAoSW50ZXJuYWwgRXJyb3IpIEhUVFAgcmVzcG9uc2UgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmFsRXJyb3IgZXh0ZW5kcyBBcGlFcnJvciB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdW5leHBlY3RlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIEFQSSByZXF1ZXN0IFVSTFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihJbnRlcm5hbEVycm9yLCBtZXNzYWdlLCA1MDAsIHVybCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNvbmZsaWN0IGVycm9yLiBUaHJvd2luZyB0aGlzIGVycm9yIHJlc3VsdHMgaW4gNDA5IChDb25mbGljdCkgSFRUUCByZXNwb25zZSBjb2RlLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgY29uZmxpY3QgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBBUEkgcmVxdWVzdCBVUkxcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoQ29uZmxpY3RFcnJvciwgbWVzc2FnZSwgNDA5LCB1cmwpO1xuICB9XG59XG5cbi8qKlxuICogbWV0YWRhdGEgZm9yIHRvbyBtYW55IHJlcXVlc3RzIGVycm9yXG4gKi9cbmV4cG9ydCB0eXBlIFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGEgPSB7XG4gIC8qKiB0aHJvdHRsaW5nIHBlcmlvZCBpbiBtaW51dGVzICovXG4gIHBlcmlvZEluTWludXRlczogbnVtYmVyLFxuICAvKiogYXZhaWxhYmxlIHJlcXVlc3RzIGZvciBwZXJpb2RJbk1pbnV0ZXMgKi9cbiAgcmVxdWVzdHNQZXJQZXJpb2RBbGxvd2VkOiBudW1iZXIsXG4gIC8qKiByZWNvbW1lbmRlZCBkYXRlIHRvIHJldHJ5IHJlcXVlc3QgKi9cbiAgcmVjb21tZW5kZWRSZXRyeVRpbWU6IERhdGUsXG4gIC8qKiBlcnJvciB0eXBlICovXG4gIHR5cGU6IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuIFRocm93aW5nIHRoaXMgZXJyb3IgcmVzdWx0cyBpbiA0MjkgKFRvbyBNYW55IFJlcXVlc3RzKSBIVFRQIHJlc3BvbnNlIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29NYW55UmVxdWVzdHNFcnJvciBleHRlbmRzIEFwaUVycm9yIHtcbiAgXG4gIC8qKiBlcnJvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgbWV0YWRhdGE6IFRvb01hbnlSZXF1ZXN0c0Vycm9yTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdG9vIG1hbnkgcmVxdWVzdHMgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtUb29NYW55UmVxdWVzdHNFcnJvck1ldGFkYXRhfSBtZXRhZGF0YSBlcnJvciBtZXRhZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBtZXRhZGF0YTogVG9vTWFueVJlcXVlc3RzRXJyb3JNZXRhZGF0YSwgdXJsPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVG9vTWFueVJlcXVlc3RzRXJyb3IsIG1lc3NhZ2UsIDQyOSwgdXJsKTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsIkNvbmZsaWN0RXJyb3IiLCJGb3JiaWRkZW5FcnJvciIsIkludGVybmFsRXJyb3IiLCJOb3RGb3VuZEVycm9yIiwiVG9vTWFueVJlcXVlc3RzRXJyb3IiLCJVbmF1dGhvcml6ZWRFcnJvciIsIlZhbGlkYXRpb25FcnJvciIsImlzTm9kZSIsInByb2Nlc3MiLCJyZWxlYXNlIiwibmFtZSIsIkVycm9yIiwiY29kZSIsIl9jb2RlIiwiYXJndW1lbnRzIiwiYXJncyIsIl9hcmdzIiwiY29uc3RydWN0b3IiLCJjbGF6eiIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJ1cmwiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImRldGFpbHMiLCJtZXRhZGF0YSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBV2FBLFFBQVE7ZUFBUkE7O0lBK0lBQyxhQUFhO2VBQWJBOztJQWpFQUMsY0FBYztlQUFkQTs7SUFrREFDLGFBQWE7ZUFBYkE7O0lBakVBQyxhQUFhO2VBQWJBOztJQTRHQUMsb0JBQW9CO2VBQXBCQTs7SUE5RUFDLGlCQUFpQjtlQUFqQkE7O0lBZUFDLGVBQWU7ZUFBZkE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFySGI7O0NBRUMsR0FFRCxNQUFNQyxTQUFTLE9BQU9DLFlBQVksZUFBZUEsUUFBUUMsT0FBTyxJQUFJRCxRQUFRQyxPQUFPLENBQUNDLElBQUksS0FBSztBQUt0RixJQUFBLEFBQU1YLFdBQU4sTUFBTUEsaUJBQWlCWTtJQTJCNUI7OztHQUdDLEdBQ0QsSUFBSUMsS0FBS0EsSUFBWSxFQUFFO1FBQ3JCLElBQUksQ0FBQ0MsS0FBSyxHQUFHRDtJQUNmO0lBRUE7OztHQUdDLEdBQ0QsSUFBSUEsT0FBZTtRQUNqQixPQUFPLElBQUksQ0FBQ0MsS0FBSztJQUNuQjtJQUVBOzs7R0FHQyxHQUNELElBQUlDLFVBQVVDLElBQW1CLEVBQUU7UUFDakMsSUFBSSxDQUFDQyxLQUFLLEdBQUdEO0lBQ2Y7SUFFQTs7O0dBR0MsR0FDRCxJQUFJRCxZQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQ0UsS0FBSztJQUNuQjtJQWhEQTs7Ozs7O0dBTUMsR0FDREMsWUFBWUMsS0FBZSxFQUFFQyxPQUFlLEVBQUVDLE1BQWMsRUFBRUMsR0FBWSxDQUFFO1FBQzFFLEtBQUssQ0FBQ0EsTUFBTUYsVUFBVSxvQkFBb0JFLE1BQU1GO1FBZmxELHFCQUFxQixHQUNyQix1QkFBT0MsVUFBUCxLQUFBO1FBQ0Esb0JBQW9CLEdBQ3BCLHVCQUFPQyxPQUFQLEtBQUE7UUFDQSx1QkFBUVIsU0FBUixLQUFBO1FBQ0EsdUJBQVFHLFNBQVIsS0FBQTtRQVdFLElBQUksQ0FBQ04sSUFBSSxHQUFHUSxNQUFNUixJQUFJO1FBQ3RCLElBQUksQ0FBQ1UsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsR0FBRyxHQUFHQTtRQUVYLElBQUlkLFVBQVVJLE1BQU1XLGlCQUFpQixFQUFFO1lBQ3JDWCxNQUFNVyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUVKO1FBQ2hDO0lBQ0Y7QUFpQ0Y7QUFLTyxJQUFBLEFBQU1mLGdCQUFOLE1BQU1BLHNCQUFzQko7SUFFakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDbEIsZUFBZWdCLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQUtPLElBQUEsQUFBTXBCLGlCQUFOLE1BQU1BLHVCQUF1QkY7SUFFbEM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDcEIsZ0JBQWdCa0IsU0FBUyxLQUFLRTtJQUN0QztBQUNGO0FBS08sSUFBQSxBQUFNaEIsb0JBQU4sTUFBTUEsMEJBQTBCTjtJQUVyQzs7OztHQUlDLEdBQ0RrQixZQUFZRSxPQUFlLEVBQUVFLEdBQVksQ0FBRTtRQUN6QyxLQUFLLENBQUNoQixtQkFBbUJjLFNBQVMsS0FBS0U7SUFDekM7QUFDRjtBQUtPLElBQUEsQUFBTWYsa0JBQU4sTUFBTUEsd0JBQXdCUDtJQUtuQzs7Ozs7R0FLQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFSSxPQUFnQixFQUFFRixHQUFZLENBQUU7UUFDM0QsS0FBSyxDQUFDZixpQkFBaUJhLFNBQVMsS0FBS0U7UUFWdkMsNkJBQTZCLEdBQzdCLHVCQUFPRSxXQUFQLEtBQUE7UUFVRSxJQUFJLENBQUNBLE9BQU8sR0FBR0E7SUFDakI7QUFDRjtBQUtPLElBQUEsQUFBTXJCLGdCQUFOLE1BQU1BLHNCQUFzQkg7SUFFakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDbkIsZUFBZWlCLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQUtPLElBQUEsQUFBTXJCLGdCQUFOLE1BQU1BLHNCQUFzQkQ7SUFDakM7Ozs7R0FJQyxHQUNEa0IsWUFBWUUsT0FBZSxFQUFFRSxHQUFZLENBQUU7UUFDekMsS0FBSyxDQUFDckIsZUFBZW1CLFNBQVMsS0FBS0U7SUFDckM7QUFDRjtBQW1CTyxJQUFBLEFBQU1qQix1QkFBTixNQUFNQSw2QkFBNkJMO0lBS3hDOzs7O0dBSUMsR0FDRGtCLFlBQVlFLE9BQWUsRUFBRUssUUFBc0MsRUFBRUgsR0FBWSxDQUFFO1FBQ2pGLEtBQUssQ0FBQ2pCLHNCQUFzQmUsU0FBUyxLQUFLRTtRQVQ1QyxtQkFBbUIsR0FDbkIsdUJBQU9HLFlBQVAsS0FBQTtRQVNFLElBQUksQ0FBQ0EsUUFBUSxHQUFHQTtJQUNsQjtBQUNGIn0=