"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const base_unit_1 = __importDefault(require("./base-unit")); const test_page_url_1 = require("../test-page-url"); const handle_tag_args_1 = __importDefault(require("../../utils/handle-tag-args")); const delegated_api_1 = require("../../utils/delegated-api"); const type_assertions_1 = require("../../errors/runtime/type-assertions"); const flag_list_1 = __importDefault(require("../../utils/flag-list")); const option_names_1 = __importDefault(require("../../configuration/option-names")); const path_1 = require("path"); const skip_js_errors_1 = require("../../utils/get-options/skip-js-errors"); const runtime_1 = require("../../errors/runtime"); class TestingUnit extends base_unit_1.default { constructor(testFile, unitType, pageUrl, baseUrl) { super(unitType); this.testFile = testFile; this.name = null; this.pageUrl = pageUrl; this.baseUrl = baseUrl; this.authCredentials = null; this.meta = {}; this.only = false; this.skip = false; this.requestHooks = []; this.clientScripts = []; this.disablePageReloads = void 0; this.disablePageCaching = false; this.apiMethodWasCalled = new flag_list_1.default([option_names_1.default.clientScripts, option_names_1.default.requestHooks]); const unit = this; this.apiOrigin = function apiOrigin(...args) { return unit._add(...args); }; //@ts-ignore (0, delegated_api_1.delegateAPI)(this.apiOrigin, this.constructor.API_LIST, { handler: this }); } _only$getter() { this.only = true; return this.apiOrigin; } _skip$getter() { this.skip = true; return this.apiOrigin; } _disablePageReloads$getter() { this.disablePageReloads = true; return this.apiOrigin; } _enablePageReloads$getter() { this.disablePageReloads = false; return this.apiOrigin; } _page$(url, ...rest) { this.pageUrl = (0, handle_tag_args_1.default)(url, rest); this.baseUrl = this.baseUrl || (0, path_1.dirname)(this.testFile.filename); const base = (0, test_page_url_1.prepareBaseUrl)(this.baseUrl); (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'page', 'The page URL', this.pageUrl); (0, test_page_url_1.assertPageUrl)(this.pageUrl, 'page'); this.pageUrl = (0, test_page_url_1.getUrl)(this.pageUrl, base); return this.apiOrigin; } _skipJsErrors$(options = true) { (0, type_assertions_1.assertType)([type_assertions_1.is.boolean, type_assertions_1.is.nonNullObject, type_assertions_1.is.function], 'skipJsErrors', 'The skipJsErrors options argument', options); this.skipJsErrorsOptions = options; (0, skip_js_errors_1.validateSkipJsErrorsOptionValue)(this.skipJsErrorsOptions, runtime_1.SkipJsErrorsArgumentApiError); return this.apiOrigin; } _httpAuth$(credentials) { (0, type_assertions_1.assertType)(type_assertions_1.is.nonNullObject, 'httpAuth', 'The credentials', credentials); (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.username', credentials.username); (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.password', credentials.password); if (credentials.domain) (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.domain', credentials.domain); if (credentials.workstation) (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'httpAuth', 'credentials.workstation', credentials.workstation); this.authCredentials = credentials; return this.apiOrigin; } _meta$(key, value) { (0, type_assertions_1.assertType)([type_assertions_1.is.string, type_assertions_1.is.nonNullObject], 'meta', `${this.unitType}.meta`, key); const data = typeof key === 'string' ? { [key]: value } : key; Object.keys(data).forEach(propName => { this.meta[propName] = data[propName]; }); return this.apiOrigin; } _disablePageCaching$getter() { this.disablePageCaching = true; return this.apiOrigin; } static makeAPIListForChildClass(ChildClass) { //@ts-ignore ChildClass.API_LIST = TestingUnit.API_LIST.concat((0, delegated_api_1.getDelegatedAPIList)(ChildClass.prototype)); } static init(ChildClass, ...initProps) { const fn = (...args) => { //@ts-ignore const apiOrigin = new ChildClass(...initProps); return apiOrigin(...args); }; const getHandler = () => { //@ts-ignore return new ChildClass(...initProps, false); }; //@ts-ignore (0, delegated_api_1.delegateAPI)(fn, ChildClass.API_LIST, { getHandler }); return fn; } } exports.default = TestingUnit; // @ts-ignore TestingUnit.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestingUnit.prototype); module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy11bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9zdHJ1Y3R1cmUvdGVzdGluZy11bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNERBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQixrRkFBd0Q7QUFDeEQsNkRBQTZFO0FBQzdFLDBFQUFzRTtBQUN0RSxzRUFBNkM7QUFDN0Msb0ZBQTREO0FBUzVELCtCQUErQjtBQUMvQiwyRUFBeUY7QUFDekYsa0RBQW9FO0FBRXBFLE1BQThCLFdBQVksU0FBUSxtQkFBUTtJQWlCdEQsWUFBdUIsUUFBa0IsRUFBRSxRQUFrQixFQUFFLE9BQWUsRUFBRSxPQUFnQjtRQUM1RixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksR0FBYyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBVyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBYyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBYyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsR0FBSyxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksbUJBQVEsQ0FBQyxDQUFDLHNCQUFZLENBQUMsYUFBYSxFQUFFLHNCQUFZLENBQUMs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QUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxtQ0FBbUIsRUFBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FBRSxVQUFtQixFQUFFLEdBQUcsU0FBb0I7UUFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQWUsRUFBWSxFQUFFO1lBQ3hDLFlBQVk7WUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBd0IsQ0FBQztZQUV0RSxPQUFPLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLEdBQVksRUFBRTtZQUM3QixZQUFZO1lBQ1osT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFFRixZQUFZO1FBQ1osSUFBQSwyQkFBVyxFQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVyRCxPQUFPLEVBQTRCLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBekpELDhCQXlKQztBQUVELGFBQWE7QUFDYixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VVbml0IGZyb20gJy4vYmFzZS11bml0JztcbmltcG9ydCB7XG4gICAgYXNzZXJ0UGFnZVVybCxcbiAgICBnZXRVcmwsXG4gICAgcHJlcGFyZUJhc2VVcmwsXG59IGZyb20gJy4uL3Rlc3QtcGFnZS11cmwnO1xuaW1wb3J0IGhhbmRsZVRhZ0FyZ3MgZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlLXRhZy1hcmdzJztcbmltcG9ydCB7IGRlbGVnYXRlQVBJLCBnZXREZWxlZ2F0ZWRBUElMaXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsZWdhdGVkLWFwaSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgRmxhZ0xpc3QgZnJvbSAnLi4vLi4vdXRpbHMvZmxhZy1saXN0JztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IFVuaXRUeXBlIGZyb20gJy4vdW5pdC10eXBlJztcbmltcG9ydCBSZXF1ZXN0SG9vayBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi4vLi4vY3VzdG9tLWNsaWVudC1zY3JpcHRzL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5pbXBvcnQgVGVzdEZpbGUgZnJvbSAnLi90ZXN0LWZpbGUnO1xuaW1wb3J0IHsgQXV0aENyZWRlbnRpYWxzLCBNZXRhZGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIERpY3Rpb25hcnksIFNraXBKc0Vycm9yc0NhbGxiYWNrLCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0LFxufSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgdmFsaWRhdGVTa2lwSnNFcnJvcnNPcHRpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1vcHRpb25zL3NraXAtanMtZXJyb3JzJztcbmltcG9ydCB7IFNraXBKc0Vycm9yc0FyZ3VtZW50QXBpRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIFRlc3RpbmdVbml0IGV4dGVuZHMgQmFzZVVuaXQge1xuICAgIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZTogVGVzdEZpbGU7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgcHVibGljIHBhZ2VVcmw6IHN0cmluZztcbiAgICBwdWJsaWMgYmFzZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBhdXRoQ3JlZGVudGlhbHM6IG51bGwgfCBBdXRoQ3JlZGVudGlhbHM7XG4gICAgcHVibGljIG1ldGE6IE1ldGFkYXRhO1xuICAgIHB1YmxpYyBvbmx5OiBib29sZWFuO1xuICAgIHB1YmxpYyBza2lwOiBib29sZWFuO1xuICAgIHB1YmxpYyByZXF1ZXN0SG9va3M6IFJlcXVlc3RIb29rW107XG4gICAgcHVibGljIGNsaWVudFNjcmlwdHM6IENsaWVudFNjcmlwdEluaXRbXTtcbiAgICBwdWJsaWMgZGlzYWJsZVBhZ2VSZWxvYWRzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBkaXNhYmxlUGFnZUNhY2hpbmc6IGJvb2xlYW47XG4gICAgcHVibGljIGFwaU1ldGhvZFdhc0NhbGxlZDogRmxhZ0xpc3Q7XG4gICAgcHVibGljIGFwaU9yaWdpbjogRnVuY3Rpb247XG4gICAgcHVibGljIHNraXBKc0Vycm9yc09wdGlvbnM/OiBib29sZWFuIHwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrfCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yICh0ZXN0RmlsZTogVGVzdEZpbGUsIHVuaXRUeXBlOiBVbml0VHlwZSwgcGFnZVVybDogc3RyaW5nLCBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHVuaXRUeXBlKTtcblxuICAgICAgICB0aGlzLnRlc3RGaWxlID0gdGVzdEZpbGU7XG5cbiAgICAgICAgdGhpcy5uYW1lICAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnBhZ2VVcmwgICAgICAgICA9IHBhZ2VVcmw7XG4gICAgICAgIHRoaXMuYmFzZVVybCAgICAgICAgID0gYmFzZVVybDtcbiAgICAgICAgdGhpcy5hdXRoQ3JlZGVudGlhbHMgPSBudWxsO1xuICAgICAgICB0aGlzLm1ldGEgICAgICAgICAgICA9IHt9O1xuICAgICAgICB0aGlzLm9ubHkgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNraXAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rcyAgICA9IFtdO1xuICAgICAgICB0aGlzLmNsaWVudFNjcmlwdHMgICA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gdm9pZCAwO1xuICAgICAgICB0aGlzLmRpc2FibGVQYWdlQ2FjaGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkID0gbmV3IEZsYWdMaXN0KFtPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cywgT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rc10pO1xuXG4gICAgICAgIGNvbnN0IHVuaXQgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuYXBpT3JpZ2luID0gZnVuY3Rpb24gYXBpT3JpZ2luICguLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgICAgIHJldHVybiB1bml0Ll9hZGQoLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGRlbGVnYXRlQVBJKHRoaXMuYXBpT3JpZ2luLCB0aGlzLmNvbnN0cnVjdG9yLkFQSV9MSVNULCB7IGhhbmRsZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF9hZGQgKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd247XG5cbiAgICBwcml2YXRlIF9vbmx5JGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLm9ubHkgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9za2lwJGdldHRlciAoKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLnNraXAgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlUGFnZVJlbG9hZHMkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5hYmxlUGFnZVJlbG9hZHMkZ2V0dGVyICgpOiBGdW5jdGlvbiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZVBhZ2VSZWxvYWRzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhZ2UkICh1cmw6IHN0cmluZywgLi4ucmVzdDogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBoYW5kbGVUYWdBcmdzKHVybCwgcmVzdCk7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuYmFzZVVybCB8fCBkaXJuYW1lKHRoaXMudGVzdEZpbGUuZmlsZW5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGJhc2UgPSBwcmVwYXJlQmFzZVVybCh0aGlzLmJhc2VVcmwpO1xuXG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAncGFnZScsICdUaGUgcGFnZSBVUkwnLCB0aGlzLnBhZ2VVcmwpO1xuICAgICAgICBhc3NlcnRQYWdlVXJsKHRoaXMucGFnZVVybCwgJ3BhZ2UnKTtcblxuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBnZXRVcmwodGhpcy5wYWdlVXJsLCBiYXNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2tpcEpzRXJyb3JzJCAob3B0aW9uczogYm9vbGVhbiB8IFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3QgfCBTa2lwSnNFcnJvcnNDYWxsYmFjayB8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QgPSB0cnVlKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFsgaXMuYm9vbGVhbiwgaXMubm9uTnVsbE9iamVjdCwgaXMuZnVuY3Rpb24gXSwgJ3NraXBKc0Vycm9ycycsICdUaGUgc2tpcEpzRXJyb3JzIG9wdGlvbnMgYXJndW1lbnQnLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNraXBKc0Vycm9yc09wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHZhbGlkYXRlU2tpcEpzRXJyb3JzT3B0aW9uVmFsdWUodGhpcy5za2lwSnNFcnJvcnNPcHRpb25zLCBTa2lwSnNFcnJvcnNBcmd1bWVudEFwaUVycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaHR0cEF1dGgkIChjcmVkZW50aWFsczogQXV0aENyZWRlbnRpYWxzKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLm5vbk51bGxPYmplY3QsICdodHRwQXV0aCcsICdUaGUgY3JlZGVudGlhbHMnLCBjcmVkZW50aWFscyk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMudXNlcm5hbWUnLCBjcmVkZW50aWFscy51c2VybmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMucGFzc3dvcmQnLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLmRvbWFpbilcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnaHR0cEF1dGgnLCAnY3JlZGVudGlhbHMuZG9tYWluJywgY3JlZGVudGlhbHMuZG9tYWluKTtcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdodHRwQXV0aCcsICdjcmVkZW50aWFscy53b3Jrc3RhdGlvbicsIGNyZWRlbnRpYWxzLndvcmtzdGF0aW9uKTtcblxuICAgICAgICB0aGlzLmF1dGhDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tZXRhJCAoa2V5OiBzdHJpbmcgfCBEaWN0aW9uYXJ5PHN0cmluZz4sIHZhbHVlPzogc3RyaW5nKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKFtpcy5zdHJpbmcsIGlzLm5vbk51bGxPYmplY3RdLCAnbWV0YScsIGAke3RoaXMudW5pdFR5cGV9Lm1ldGFgLCBrZXkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IHsgW2tleV06IHZhbHVlIGFzIHN0cmluZyB9IDoga2V5IGFzIERpY3Rpb25hcnk8c3RyaW5nPjtcblxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMubWV0YVtwcm9wTmFtZV0gPSBkYXRhW3Byb3BOYW1lXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVQYWdlQ2FjaGluZyRnZXR0ZXIgKCk6IEZ1bmN0aW9uIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGFnZUNhY2hpbmcgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1ha2VBUElMaXN0Rm9yQ2hpbGRDbGFzcyAoQ2hpbGRDbGFzczogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgQ2hpbGRDbGFzcy5BUElfTElTVCA9IFRlc3RpbmdVbml0LkFQSV9MSVNULmNvbmNhdChnZXREZWxlZ2F0ZWRBUElMaXN0KENoaWxkQ2xhc3MucHJvdG90eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbml0IChDaGlsZENsYXNzOiB1bmtub3duLCAuLi5pbml0UHJvcHM6IHVua25vd25bXSk6IFRlc3RpbmdVbml0IHtcbiAgICAgICAgY29uc3QgZm4gPSAoLi4uYXJnczogdW5rbm93bltdKSA6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBhcGlPcmlnaW4gPSBuZXcgQ2hpbGRDbGFzcyguLi5pbml0UHJvcHMpIGFzIHVua25vd24gYXMgRnVuY3Rpb247XG5cbiAgICAgICAgICAgIHJldHVybiBhcGlPcmlnaW4oLi4uYXJncyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZ2V0SGFuZGxlciA9ICgpOiB1bmtub3duID0+IHtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGlsZENsYXNzKC4uLmluaXRQcm9wcywgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBkZWxlZ2F0ZUFQSShmbiwgQ2hpbGRDbGFzcy5BUElfTElTVCwgeyBnZXRIYW5kbGVyIH0pO1xuXG4gICAgICAgIHJldHVybiBmbiBhcyB1bmtub3duIGFzIFRlc3RpbmdVbml0O1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuVGVzdGluZ1VuaXQuQVBJX0xJU1QgPSBnZXREZWxlZ2F0ZWRBUElMaXN0KFRlc3RpbmdVbml0LnByb3RvdHlwZSk7XG5cblxuIl19