UNPKG

ngx-vcard

Version:

Generate an RFC compliant vCard and download it.

84 lines 17.6 kB
import { e } from '../../helpers'; export function propertyToVCardString(property) { let str = ''; if (property.language) { str += ';LANGUAGE=' + e(property.language); } if (property.value) { str += ';VALUE=' + e(property.value); } if (property.altid) { str += ';ALTID=' + e(property.altid); } if (property.pid) { str += ';PID=' + property.pid.map((s) => e(s)).join(','); } if (property.type) { if (Array.isArray(property.type)) { if (property.type.length === 1) { str += ';TYPE=' + property.type[0]; } else { str += ';TYPE="' + property.type.map((s) => s.toLowerCase()).join(',') + '"'; } } else { str += ';TYPE=' + property.type; } } if (property.mediatype) { str += ';MEDIATYPE=' + e(property.mediatype); } if (property.pref) { str += ';PREF=' + property.pref; } if (property.calscale) { str += ';CALSCALE=' + e(property.calscale); } if (property.sortas) { str += ';SORT-AS="' + property.sortas.map((s) => e(s)).join(',') + '"'; } if (property.geo) { str += ';GEO=' + e(property.geo); } if (property.timezone) { str += ';TZ=' + e(property.timezone); } return str; } export function isPropertyWithParameters(object) { const test = object; if (test == null || test.param == null || test.value == null) { return false; } return (test.param.language !== undefined || test.param.value !== undefined || test.param.pref !== undefined || test.param.altid !== undefined || test.param.pid !== undefined || test.param.type !== undefined || test.param.mediatype !== undefined || test.param.calscale !== undefined || test.param.sortas !== undefined || test.param.geo !== undefined || test.param.timezone !== undefined); } export function isPropertyWithParametersAddressValue(object) { const test = object; if (test == null || test.param == null || test.value == null) { return false; } return (test.param.language !== undefined || test.param.value !== undefined || test.param.pref !== undefined || test.param.altid !== undefined || test.param.pid !== undefined || test.param.type !== undefined || test.param.mediatype !== undefined || test.param.calscale !== undefined || test.param.sortas !== undefined || test.param.geo !== undefined || test.param.timezone !== undefined); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzaWNQcm9wZXJ0eVBhcmFtZXRlcnMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Y2FyZC9zcmMvbGliL3R5cGVzL3BhcmFtZXRlci9CYXNpY1Byb3BlcnR5UGFyYW1ldGVycy50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUF1TmxDLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBaUM7SUFFakMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsR0FBRyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQixHQUFHLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDakIsR0FBRyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFF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QUFDO0FBRUQsTUFBTSxVQUFVLG9DQUFvQyxDQUNsRCxNQUFXO0lBRVgsTUFBTSxJQUFJLEdBQXlELE1BQU0sQ0FBQztJQUMxRSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUztRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUztRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQ2xDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gJy4uL3ZDYXJkJztcbmltcG9ydCB7IGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcblxuLyoqXG4gKiBBIHByb3BlcnR5IGNhbiBoYXZlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGl0LlxuICogVGhlc2UgXCJwcm9wZXJ0eSBwYXJhbWV0ZXJzXCIgY29udGFpbiBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9wZXJ0eSBvciB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNpY1Byb3BlcnR5UGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBUaGUgTEFOR1VBR0UgcHJvcGVydHkgcGFyYW1ldGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgZGF0YSBpbiBtdWx0aXBsZSBsYW5ndWFnZXMuXG4gICAqIEBraW5kIFByb3BlcnR5OiBMQU5HVUFHRVxuICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTUuMVxuICAgKlxuICAgKi9cbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVkFMVUUgcGFyYW1ldGVyIGlzIE9QVElPTkFMLCB1c2VkIHRvIGlkZW50aWZ5IHRoZSB2YWx1ZSB0eXBlIChkYXRhIHR5cGUpIGFuZCBmb3JtYXQgb2YgdGhlIHZhbHVlLlxuICAgKiBAa2luZCBQcm9wZXJ0eTogVkFMVUVcbiAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzNTAjc2VjdGlvbi01LjJcbiAgICovXG4gIHZhbHVlPzpcbiAgICB8ICd0ZXh0J1xuICAgIHwgJ3VyaSdcbiAgICB8ICdkYXRlJ1xuICAgIHwgJ3RpbWUnXG4gICAgfCAnZGF0ZS10aW1lJ1xuICAgIHwgJ2RhdGUtYW5kLW9yLXRpbWUnXG4gICAgfCAndGltZXN0YW1wJ1xuICAgIHwgJ2Jvb2xlYW4nXG4gICAgfCAnaW50ZWdlcidcbiAgICB8ICdmbG9hdCdcbiAgICB8ICd1dGMtb2Zmc2V0J1xuICAgIHwgJ2xhbmd1YWdlLXRhZyc7XG4gIC8qKlxuICAgKiBUaGUgUFJFRiBwYXJhbWV0ZXIgaXMgT1BUSU9OQUwgYW5kIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiBhIHByb3BlcnR5IGlzIHByZWZlcnJlZCBieSB0aGUgdkNhcmQgYXV0aG9yLlxuICAgKiBJdHMgdmFsdWUgTVVTVCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwIHRoYXQgcXVhbnRpZmllcyB0aGUgbGV2ZWwgb2YgcHJlZmVyZW5jZS5cbiAgICogTG93ZXIgdmFsdWVzIGNvcnJlc3BvbmQgdG8gYSBoaWdoZXIgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgd2l0aCAxIGJlaW5nIG1vc3QgcHJlZmVycmVkLlxuICAgKiBAa2luZCBQcm9wZXJ0eTogUFJFRlxuICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTUuM1xuICAgKi9cbiAgcHJlZj86XG4gICAgfCAxXG4gICAgfCAyXG4gICAgfCAzXG4gICAgfCA0XG4gICAgfCA1XG4gICAgfCA2XG4gICAgfCA3XG4gICAgfCA4XG4gICAgfCA5XG4gICAgfCAxMFxuICAgIHwgMTFcbiAgICB8IDEyXG4gICAgfCAxM1xuICAgIHwgMTRcbiAgICB8IDE1XG4gICAgfCAxNlxuICAgIHwgMTdcbiAgICB8IDE4XG4gICAgfCAxOVxuICAgIHwgMjBcbiAgICB8IDIxXG4gICAgfCAyMlxuICAgIHwgMjNcbiAgICB8IDI0XG4gICAgfCAyNVxuICAgIHwgMjZcbiAgICB8IDI3XG4gICAgfCAyOFxuICAgIHwgMjlcbiAgICB8IDMwXG4gICAgfCAzMVxuICAgIHwgMzJcbiAgICB8IDMzXG4gICAgfCAzNFxuICAgIHwgMzVcbiAgICB8IDM2XG4gICAgfCAzN1xuICAgIHwgMzhcbiAgICB8IDM5XG4gICAgfCA0MFxuICAgIHwgNDFcbiAgICB8IDQyXG4gICAgfCA0M1xuICAgIHwgNDRcbiAgICB8IDQ1XG4gICAgfCA0NlxuICAgIHwgNDdcbiAgICB8IDQ4XG4gICAgfCA0OVxuICAgIHwgNTBcbiAgICB8IDUxXG4gICAgfCA1MlxuICAgIHwgNTNcbiAgICB8IDU0XG4gICAgfCA1NVxuICAgIHwgNTZcbiAgICB8IDU3XG4gICAgfCA1OFxuICAgIHwgNTlcbiAgICB8IDYwXG4gICAgfCA2MVxuICAgIHwgNjJcbiAgICB8IDYzXG4gICAgfCA2NFxuICAgIHwgNjVcbiAgICB8IDY2XG4gICAgfCA2N1xuICAgIHwgNjhcbiAgICB8IDY5XG4gICAgfCA3MFxuICAgIHwgNzFcbiAgICB8IDcyXG4gICAgfCA3M1xuICAgIHwgNzRcbiAgICB8IDc1XG4gICAgfCA3NlxuICAgIHwgNzdcbiAgICB8IDc4XG4gICAgfCA3OVxuICAgIHwgODBcbiAgICB8IDgxXG4gICAgfCA4MlxuICAgIHwgODNcbiAgICB8IDg0XG4gICAgfCA4NVxuICAgIHwgODZcbiAgICB8IDg3XG4gICAgfCA4OFxuICAgIHwgODlcbiAgICB8IDkwXG4gICAgfCA5MVxuICAgIHwgOTJcbiAgICB8IDkzXG4gICAgfCA5NFxuICAgIHwgOTVcbiAgICB8IDk2XG4gICAgfCA5N1xuICAgIHwgOThcbiAgICB8IDk5XG4gICAgfCAxMDA7XG4gIC8qKlxuICAgKiBUaGUgQUxUSUQgcGFyYW1ldGVyIGlzIHVzZWQgdG8gXCJ0YWdcIiBwcm9wZXJ0eSBpbnN0YW5jZXMgYXMgYmVpbmcgYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBzYW1lIGxvZ2ljYWwgcHJvcGVydHkuXG4gICAqIEZvciBleGFtcGxlLCB0cmFuc2xhdGlvbnMgb2YgYSBwcm9wZXJ0eSBpbiBtdWx0aXBsZSBsYW5ndWFnZXMgZ2VuZXJhdGVzIG11bHRpcGxlIHByb3BlcnR5IGluc3RhbmNlc1xuICAgKiBoYXZpbmcgZGlmZmVyZW50IExBTkdVQUdFIHBhcmFtZXRlciB0aGF0IGFyZSB0YWdnZWQgd2l0aCB0aGUgc2FtZSBBTFRJRCB2YWx1ZS5cbiAgICogQGtpbmQgUHJvcGVydHk6IEFMVElEXG4gICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzUwI3NlY3Rpb24tNS40XG4gICAqL1xuICBhbHRpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBQSUQgcGFyYW1ldGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBzcGVjaWZpYyBwcm9wZXJ0eSBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuXG4gICAqIEBraW5kIFByb3BlcnR5OiBQSURcbiAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzNTAjc2VjdGlvbi01LjVcbiAgICovXG4gIHBpZD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIFRZUEUgcGFyYW1ldGVyIGhhcyBtdWx0aXBsZSwgZGlmZmVyZW50IHVzZXMuXG4gICAqIEluIGdlbmVyYWwsIGl0IGlzIGEgd2F5IG9mIHNwZWNpZnlpbmcgY2xhc3MgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5LlxuICAgKiBAa2luZCBQcm9wZXJ0eTogVFlQRVxuICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTUuNlxuICAgKi9cbiAgdHlwZT86XG4gICAgfCBBcnJheTxcbiAgICAgICAgfCAnd29yaydcbiAgICAgICAgfCAnaG9tZSdcbiAgICAgICAgfCAndGV4dCdcbiAgICAgICAgfCAndm9pY2UnXG4gICAgICAgIHwgJ2ZheCdcbiAgICAgICAgfCAnY2VsbCdcbiAgICAgICAgfCAndmlkZW8nXG4gICAgICAgIHwgJ3BhZ2VyJ1xuICAgICAgICB8ICd0ZXh0cGhvbmUnXG4gICAgICA+XG4gICAgfCAnd29yaydcbiAgICB8ICdob21lJ1xuICAgIHwgJ3RleHQnXG4gICAgfCAndm9pY2UnXG4gICAgfCAnZmF4J1xuICAgIHwgJ2NlbGwnXG4gICAgfCAndmlkZW8nXG4gICAgfCAncGFnZXInXG4gICAgfCAndGV4dHBob25lJztcbiAgLyoqXG4gICAqIFRoZSBNRURJQVRZUEUgcGFyYW1ldGVyIGlzIHVzZWQgd2l0aCBwcm9wZXJ0aWVzIHdob3NlIHZhbHVlIGlzIGEgVVJJLlxuICAgKiBAa2luZCBQcm9wZXJ0eTogTUVESUFUWVBFXG4gICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzUwI3NlY3Rpb24tNS43XG4gICAqL1xuICBtZWRpYXR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ0FMU0NBTEUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBjYWxlbmRhciBzeXN0ZW0gaW4gd2hpY2ggYSBkYXRlIG9yIGRhdGUtdGltZSB2YWx1ZSBpcyBleHByZXNzZWQuXG4gICAqIEBraW5kIFByb3BlcnR5OiBDQUxTQ0FMRVxuICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTUuOFxuICAgKi9cbiAgY2Fsc2NhbGU/OiAnZ3JlZ29yaWFuJztcbiAgLyoqXG4gICAqIFRoZSBcInNvcnQtYXNcIiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHJpbmcgdG8gYmUgdXNlZCBmb3IgbmF0aW9uYWwtbGFuZ3VhZ2Utc3BlY2lmaWMgc29ydGluZy5cbiAgICogV2l0aG91dCB0aGlzIGluZm9ybWF0aW9uLCBzb3J0aW5nIGFsZ29yaXRobXMgY291bGQgaW5jb3JyZWN0bHkgc29ydCB0aGlzIHZDYXJkIHdpdGhpbiBhIHNlcXVlbmNlIG9mIHNvcnRlZCB2Q2FyZHMuXG4gICAqIEBraW5kIFByb3BlcnR5OiBTT1JULUFTXG4gICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MzUwI3NlY3Rpb24tNS45XG4gICAqL1xuICBzb3J0YXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBHRU8gcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIGdsb2JhbCBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0aGF0IGlzIHNwZWNpZmljIHRvIGFuIGFkZHJlc3MuXG4gICAqIEBraW5kIFByb3BlcnR5OiBHRU9cbiAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzNTAjc2VjdGlvbi01LjEwXG4gICAqL1xuICBnZW8/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVFogcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRpbWUgem9uZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHNwZWNpZmljIHRvIGFuIGFkZHJlc3MuXG4gICAqIEBraW5kIFByb3BlcnR5OiBUWlxuICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM1MCNzZWN0aW9uLTUuMTFcbiAgICovXG4gIHRpbWV6b25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHlUb1ZDYXJkU3RyaW5nKFxuICBwcm9wZXJ0eTogQmFzaWNQcm9wZXJ0eVBhcmFtZXRlcnMsXG4pOiBzdHJpbmcge1xuICBsZXQgc3RyID0gJyc7XG4gIGlmIChwcm9wZXJ0eS5sYW5ndWFnZSkge1xuICAgIHN0ciArPSAnO0xBTkdVQUdFPScgKyBlKHByb3BlcnR5Lmxhbmd1YWdlKTtcbiAgfVxuICBpZiAocHJvcGVydHkudmFsdWUpIHtcbiAgICBzdHIgKz0gJztWQUxVRT0nICsgZShwcm9wZXJ0eS52YWx1ZSk7XG4gIH1cbiAgaWYgKHByb3BlcnR5LmFsdGlkKSB7XG4gICAgc3RyICs9ICc7QUxUSUQ9JyArIGUocHJvcGVydHkuYWx0aWQpO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5waWQpIHtcbiAgICBzdHIgKz0gJztQSUQ9JyArIHByb3BlcnR5LnBpZC5tYXAoKHMpID0+IGUocykpLmpvaW4oJywnKTtcbiAgfVxuICBpZiAocHJvcGVydHkudHlwZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5LnR5cGUpKSB7XG4gICAgICBpZiAocHJvcGVydHkudHlwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc3RyICs9ICc7VFlQRT0nICsgcHJvcGVydHkudHlwZVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciArPVxuICAgICAgICAgICc7VFlQRT1cIicgKyBwcm9wZXJ0eS50eXBlLm1hcCgocykgPT4gcy50b0xvd2VyQ2FzZSgpKS5qb2luKCcsJykgKyAnXCInO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJztUWVBFPScgKyBwcm9wZXJ0eS50eXBlO1xuICAgIH1cbiAgfVxuICBpZiAocHJvcGVydHkubWVkaWF0eXBlKSB7XG4gICAgc3RyICs9ICc7TUVESUFUWVBFPScgKyBlKHByb3BlcnR5Lm1lZGlhdHlwZSk7XG4gIH1cbiAgaWYgKHByb3BlcnR5LnByZWYpIHtcbiAgICBzdHIgKz0gJztQUkVGPScgKyBwcm9wZXJ0eS5wcmVmO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5jYWxzY2FsZSkge1xuICAgIHN0ciArPSAnO0NBTFNDQUxFPScgKyBlKHByb3BlcnR5LmNhbHNjYWxlKTtcbiAgfVxuICBpZiAocHJvcGVydHkuc29ydGFzKSB7XG4gICAgc3RyICs9ICc7U09SVC1BUz1cIicgKyBwcm9wZXJ0eS5zb3J0YXMubWFwKChzKSA9PiBlKHMpKS5qb2luKCcsJykgKyAnXCInO1xuICB9XG4gIGlmIChwcm9wZXJ0eS5nZW8pIHtcbiAgICBzdHIgKz0gJztHRU89JyArIGUocHJvcGVydHkuZ2VvKTtcbiAgfVxuICBpZiAocHJvcGVydHkudGltZXpvbmUpIHtcbiAgICBzdHIgKz0gJztUWj0nICsgZShwcm9wZXJ0eS50aW1lem9uZSk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eVdpdGhQYXJhbWV0ZXJzKFxuICBvYmplY3Q6IGFueSxcbik6IG9iamVjdCBpcyB7IHZhbHVlPzogc3RyaW5nOyBwYXJhbT86IEJhc2ljUHJvcGVydHlQYXJhbWV0ZXJzIH0ge1xuICBjb25zdCB0ZXN0ID0gPHsgdmFsdWU/OiBzdHJpbmc7IHBhcmFtPzogQmFzaWNQcm9wZXJ0eVBhcmFtZXRlcnMgfT5vYmplY3Q7XG4gIGlmICh0ZXN0ID09IG51bGwgfHwgdGVzdC5wYXJhbSA9PSBudWxsIHx8IHRlc3QudmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHRlc3QucGFyYW0ubGFuZ3VhZ2UgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0udmFsdWUgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0ucHJlZiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdGVzdC5wYXJhbS5hbHRpZCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdGVzdC5wYXJhbS5waWQgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0udHlwZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdGVzdC5wYXJhbS5tZWRpYXR5cGUgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0uY2Fsc2NhbGUgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0uc29ydGFzICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLmdlbyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdGVzdC5wYXJhbS50aW1lem9uZSAhPT0gdW5kZWZpbmVkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5V2l0aFBhcmFtZXRlcnNBZGRyZXNzVmFsdWUoXG4gIG9iamVjdDogYW55LFxuKTogb2JqZWN0IGlzIHsgdmFsdWU/OiBBZGRyZXNzOyBwYXJhbT86IEJhc2ljUHJvcGVydHlQYXJhbWV0ZXJzIH0ge1xuICBjb25zdCB0ZXN0ID0gPHsgdmFsdWU/OiBBZGRyZXNzOyBwYXJhbT86IEJhc2ljUHJvcGVydHlQYXJhbWV0ZXJzIH0+b2JqZWN0O1xuICBpZiAodGVzdCA9PSBudWxsIHx8IHRlc3QucGFyYW0gPT0gbnVsbCB8fCB0ZXN0LnZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0ZXN0LnBhcmFtLmxhbmd1YWdlICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLnZhbHVlICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLnByZWYgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0uYWx0aWQgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0ucGlkICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLnR5cGUgIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0ubWVkaWF0eXBlICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLmNhbHNjYWxlICE9PSB1bmRlZmluZWQgfHxcbiAgICB0ZXN0LnBhcmFtLnNvcnRhcyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgdGVzdC5wYXJhbS5nZW8gIT09IHVuZGVmaW5lZCB8fFxuICAgIHRlc3QucGFyYW0udGltZXpvbmUgIT09IHVuZGVmaW5lZFxuICApO1xufVxuIl19