UNPKG

@testplane/wdio-config

Version:
126 lines (124 loc) 15.2 kB
// src/constants.ts var DEFAULT_TIMEOUT = 1e4; var DEFAULT_CONFIGS = () => ({ specs: [], suites: {}, exclude: [], outputDir: void 0, logLevel: "info", logLevels: {}, groupLogsByTestSpec: false, excludeDriverLogs: [], bail: 0, waitforInterval: 500, waitforTimeout: 5e3, framework: "mocha", reporters: [], services: [], maxInstances: 100, maxInstancesPerCapability: 100, injectGlobals: true, filesToWatch: [], connectionRetryTimeout: 12e4, connectionRetryCount: 3, execArgv: [], runnerEnv: {}, runner: "local", shard: { current: 1, total: 1 }, specFileRetries: 0, specFileRetriesDelay: 0, specFileRetriesDeferred: false, reporterSyncInterval: 100, reporterSyncTimeout: 5e3, cucumberFeaturesWithLineNumbers: [], /** * framework defaults */ mochaOpts: { timeout: DEFAULT_TIMEOUT }, jasmineOpts: { defaultTimeoutInterval: DEFAULT_TIMEOUT }, cucumberOpts: { timeout: DEFAULT_TIMEOUT }, /** * hooks */ onPrepare: [], onWorkerStart: [], onWorkerEnd: [], before: [], beforeSession: [], beforeSuite: [], beforeHook: [], beforeTest: [], beforeCommand: [], afterCommand: [], afterTest: [], afterHook: [], afterSuite: [], afterSession: [], after: [], onComplete: [], onReload: [], beforeAssertion: [], afterAssertion: [], /** * cucumber specific hooks */ beforeFeature: [], beforeScenario: [], beforeStep: [], afterStep: [], afterScenario: [], afterFeature: [] }); // src/utils.ts function isCloudCapability(caps) { return Boolean(caps && (caps["bstack:options"] || caps["sauce:options"] || caps["tb:options"])); } function validateConfig(defaults, options, keysToKeep = []) { const params = {}; for (const [name, expectedOption] of Object.entries(defaults)) { if (typeof options[name] === "undefined" && !expectedOption.default && expectedOption.required) { throw new Error(`Required option "${name.toString()}" is missing`); } if (typeof options[name] === "undefined" && expectedOption.default) { params[name] = expectedOption.default; } if (typeof options[name] !== "undefined") { const optValue = options[name]; if (typeof optValue !== expectedOption.type) { throw new Error(`Expected option "${name.toString()}" to be type of ${expectedOption.type} but was ${typeof options[name]}`); } if (typeof expectedOption.validate === "function") { try { expectedOption.validate(optValue); } catch (e) { throw new Error(`Type check for option "${name.toString()}" failed: ${e.message}`); } } if (typeof optValue === "string" && expectedOption.match && !optValue.match(expectedOption.match)) { throw new Error(`Option "${name.toString()}" doesn't match expected values: ${expectedOption.match}`); } params[name] = options[name]; } } for (const [name, option] of Object.entries(options)) { if (keysToKeep.includes(name)) { params[name] = option; } } return params; } export { DEFAULT_CONFIGS, isCloudCapability, validateConfig }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NvbnN0YW50cy50cyIsICIuLi9zcmMvdXRpbHMudHMiXSwKICAic291cmNlUm9vdCI6ICIvVXNlcnMvZHVka2V2aWNoL2pvYi9wcm9qZWN0cy9nZW1pbmktdGVzdGluZy93ZWJkcml2ZXJpby9wYWNrYWdlcy93ZGlvLWNvbmZpZyIsCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IE9wdGlvbnMsIFNlcnZpY2VzIH0gZnJvbSAnQHRlc3RwbGFuZS93ZGlvLXR5cGVzJ1xuXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAxMDAwMFxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09ORklHUzogKCkgPT4gT3B0aW9ucy5UZXN0cnVubmVyID0gKCkgPT4gKHtcbiAgICBzcGVjczogW10sXG4gICAgc3VpdGVzOiB7fSxcbiAgICBleGNsdWRlOiBbXSxcbiAgICBvdXRwdXREaXI6IHVuZGVmaW5lZCxcbiAgICBsb2dMZXZlbDogJ2luZm8nIGFzIGNvbnN0LFxuICAgIGxvZ0xldmVsczoge30sXG4gICAgZ3JvdXBMb2dzQnlUZXN0U3BlYzogZmFsc2UsXG4gICAgZXhjbHVkZURyaXZlckxvZ3M6IFtdLFxuICAgIGJhaWw6IDAsXG4gICAgd2FpdGZvckludGVydmFsOiA1MDAsXG4gICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsXG4gICAgZnJhbWV3b3JrOiAnbW9jaGEnIGFzIGNvbnN0LFxuICAgIHJlcG9ydGVyczogW10sXG4gICAgc2VydmljZXM6IFtdLFxuICAgIG1heEluc3RhbmNlczogMTAwLFxuICAgIG1heEluc3RhbmNlc1BlckNhcGFiaWxpdHk6IDEwMCxcbiAgICBpbmplY3RHbG9iYWxzOiB0cnVlLFxuICAgIGZpbGVzVG9XYXRjaDogW10sXG4gICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMTIwMDAwLFxuICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAzLFxuICAgIGV4ZWNBcmd2OiBbXSxcbiAgICBydW5uZXJFbnY6IHt9LFxuICAgIHJ1bm5lcjogJ2xvY2FsJyBhcyBjb25zdCxcbiAgICBzaGFyZDoge1xuICAgICAgICBjdXJyZW50OiAxLFxuICAgICAgICB0b3RhbDogMVxuICAgIH0sXG4gICAgc3BlY0ZpbGVSZXRyaWVzOiAwLFxuICAgIHNwZWNGaWxlUmV0cmllc0RlbGF5OiAwLFxuICAgIHNwZWNGaWxlUmV0cmllc0RlZmVycmVkOiBmYWxzZSxcbiAgICByZXBvcnRlclN5bmNJbnRlcnZhbDogMTAwLFxuICAgIHJlcG9ydGVyU3luY1RpbWVvdXQ6IDUwMDAsXG4gICAgY3VjdW1iZXJGZWF0dXJlc1dpdGhMaW5lTnVtYmVyczogW10sXG5cbiAgICAvKipcbiAgICAgKiBmcmFtZXdvcmsgZGVmYXVsdHNcbiAgICAgKi9cbiAgICBtb2NoYU9wdHM6IHtcbiAgICAgICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUXG4gICAgfSxcbiAgICBqYXNtaW5lT3B0czoge1xuICAgICAgICBkZWZhdWx0VGltZW91dEludGVydmFsOiBERUZBVUxUX1RJTUVPVVRcbiAgICB9LFxuICAgIGN1Y3VtYmVyT3B0czoge1xuICAgICAgICB0aW1lb3V0OiBERUZBVUxUX1RJTUVPVVRcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogaG9va3NcbiAgICAgKi9cbiAgICBvblByZXBhcmU6IFtdLFxuICAgIG9uV29ya2VyU3RhcnQ6IFtdLFxuICAgIG9uV29ya2VyRW5kOiBbXSxcbiAgICBiZWZvcmU6IFtdLFxuICAgIGJlZm9yZVNlc3Npb246IFtdLFxuICAgIGJlZm9yZVN1aXRlOiBbXSxcbiAgICBiZWZvcmVIb29rOiBbXSxcbiAgICBiZWZvcmVUZXN0OiBbXSxcbiAgICBiZWZvcmVDb21tYW5kOiBbXSxcbiAgICBhZnRlckNvbW1hbmQ6IFtdLFxuICAgIGFmdGVyVGVzdDogW10sXG4gICAgYWZ0ZXJIb29rOiBbXSxcbiAgICBhZnRlclN1aXRlOiBbXSxcbiAgICBhZnRlclNlc3Npb246IFtdLFxuICAgIGFmdGVyOiBbXSxcbiAgICBvbkNvbXBsZXRlOiBbXSxcbiAgICBvblJlbG9hZDogW10sXG4gICAgYmVmb3JlQXNzZXJ0aW9uOiBbXSxcbiAgICBhZnRlckFzc2VydGlvbjogW10sXG5cbiAgICAvKipcbiAgICAgKiBjdWN1bWJlciBzcGVjaWZpYyBob29rc1xuICAgICAqL1xuICAgIGJlZm9yZUZlYXR1cmU6IFtdLFxuICAgIGJlZm9yZVNjZW5hcmlvOiBbXSxcbiAgICBiZWZvcmVTdGVwOiBbXSxcbiAgICBhZnRlclN0ZXA6IFtdLFxuICAgIGFmdGVyU2NlbmFyaW86IFtdLFxuICAgIGFmdGVyRmVhdHVyZTogW11cbn0pXG5cbmV4cG9ydCBjb25zdCBTVVBQT1JURURfSE9PS1M6IChrZXlvZiBTZXJ2aWNlcy5Ib29rcylbXSA9IFtcbiAgICAnYmVmb3JlJywgJ2JlZm9yZVNlc3Npb24nLCAnYmVmb3JlU3VpdGUnLCAnYmVmb3JlSG9vaycsICdiZWZvcmVUZXN0JywgJ2JlZm9yZUNvbW1hbmQnLFxuICAgICdhZnRlckNvbW1hbmQnLCAnYWZ0ZXJUZXN0JywgJ2FmdGVySG9vaycsICdhZnRlclN1aXRlJywgJ2FmdGVyU2Vzc2lvbicsICdhZnRlcicsXG4gICAgJ2JlZm9yZUFzc2VydGlvbicsICdhZnRlckFzc2VydGlvbicsXG4gICAgLy8gQHRzLWlnbm9yZSBub3QgZGVmaW5lZCBpbiBjb3JlIGhvb2tzIGJ1dCBhZGRlZCB3aXRoIGN1Y3VtYmVyXG4gICAgJ2JlZm9yZUZlYXR1cmUnLCAnYmVmb3JlU2NlbmFyaW8nLCAnYmVmb3JlU3RlcCcsICdhZnRlclN0ZXAnLCAnYWZ0ZXJTY2VuYXJpbycsICdhZnRlckZlYXR1cmUnLFxuICAgICdvblJlbG9hZCcsICdvblByZXBhcmUnLCAnb25Xb3JrZXJTdGFydCcsICdvbldvcmtlckVuZCcsICdvbkNvbXBsZXRlJ1xuXVxuXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0ZJTEVfRVhURU5TSU9OUyA9IFtcbiAgICAnLmpzJywgJy5qc3gnLCAnLm1qcycsICcubXRzJywgJy5lczYnLCAnLnRzJywgJy50c3gnLCAnLmZlYXR1cmUnLCAnLmNvZmZlZScsICcuY2pzJ1xuXVxuXG5leHBvcnQgY29uc3QgTk9fTkFNRURfQ09ORklHX0VYUE9SVCA9IChcbiAgICAnTm8gbmFtZWQgZXhwb3J0IG9iamVjdCBjYWxsZWQgXCJjb25maWdcIiBmb3VuZC4gTWFrZSBzdXJlIHlvdSBleHBvcnQgdGhlIGNvbmZpZyBvYmplY3QgJyArXG4gICAgJ3ZpYSBgZXhwb3J0LmNvbmZpZyA9IHsgLi4uIH1gIHdoZW4gdXNpbmcgQ29tbW9uSlMgb3IgYGV4cG9ydCBjb25zdCBjb25maWcgPSB7IC4uLiB9YCB3aGVuICcgK1xuICAgICd1c2luZyBFU00uIFJlYWQgbW9yZSBvbiB0aGlzIG9uIGh0dHBzOi8vd2ViZHJpdmVyLmlvL2RvY3MvY29uZmlndXJhdGlvbmZpbGUgISdcbilcbiIsICJpbXBvcnQgdHlwZSB7IE9wdGlvbnMgfSBmcm9tICdAdGVzdHBsYW5lL3dkaW8tdHlwZXMnXG5cbmV4cG9ydCBjb25zdCB2YWxpZE9iamVjdE9yQXJyYXkgPSAob2JqZWN0OiBvYmplY3QpOiBvYmplY3QgaXMgb2JqZWN0IHwgQXJyYXk8dW5rbm93bj4gPT4gKEFycmF5LmlzQXJyYXkob2JqZWN0KSAmJiBvYmplY3QubGVuZ3RoID4gMCkgfHxcbiAgICAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggPiAwKVxuXG4vKipcbiAqIHJlbW92ZSBsaW5lIG51bWJlcnMgZnJvbSBmaWxlIHBhdGgsIGV4OlxuICogYC9mb286OWAgb3IgYGM6XFxiYXI6MTQ6NWBcbiAqIEBwYXJhbSAgIHtzdHJpbmd9IGZpbGVQYXRoIHBhdGggdG8gc3BlYyBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGluZU51bWJlcnMoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IG1hdGNoZXIgPSBmaWxlUGF0aC5tYXRjaCgvOlxcZCsoOlxcZCskfCQpLylcbiAgICBpZiAobWF0Y2hlcikge1xuICAgICAgICBmaWxlUGF0aCA9IGZpbGVQYXRoLnN1YnN0cmluZygwLCBtYXRjaGVyLmluZGV4KVxuICAgIH1cbiAgICByZXR1cm4gZmlsZVBhdGhcbn1cblxuLyoqXG4gKiBkb2VzIHNwZWMgZmlsZSBwYXRoIGNvbnRhaW4gQ3VjdW1iZXIncyBsaW5lIG51bWJlciwgZXhcbiAqIGAvZm9vL2Jhcjo5YCBvciBgYzpcXGJhclxcZm9vOjE0OjVgXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gc3BlY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDdWN1bWJlckZlYXR1cmVXaXRoTGluZU51bWJlcihzcGVjOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHNwZWNzID0gQXJyYXkuaXNBcnJheShzcGVjKSA/IHNwZWMgOiBbc3BlY11cbiAgICByZXR1cm4gc3BlY3Muc29tZSgocykgPT4gLzpcXGQrKDpcXGQrJHwkKS8udGVzdChzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xvdWRDYXBhYmlsaXR5KGNhcHM6IFdlYmRyaXZlcklPLkNhcGFiaWxpdGllcykge1xuICAgIHJldHVybiBCb29sZWFuKGNhcHMgJiYgKGNhcHNbJ2JzdGFjazpvcHRpb25zJ10gfHwgY2Fwc1snc2F1Y2U6b3B0aW9ucyddIHx8IGNhcHNbJ3RiOm9wdGlvbnMnXSkpXG59XG5cbi8qKlxuICogdmFsaWRhdGVzIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIGRlZmF1bHQgdmFsdWVzXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRlZmF1bHRzICBvYmplY3QgZGVzY3JpYmluZyBhbGwgYWxsb3dlZCBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgICBvcHRpb24gdG8gY2hlY2sgYWdhaW5zdFxuICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgICAgdmFsaWRhdGVkIGNvbmZpZyBlbnJpY2hlZCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZzxUPihkZWZhdWx0czogT3B0aW9ucy5EZWZpbml0aW9uPFQ+LCBvcHRpb25zOiBULCBrZXlzVG9LZWVwID0gW10gYXMgKGtleW9mIFQpW10pIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7fSBhcyBUXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBleHBlY3RlZE9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpIGFzIFtrZXlvZiBPcHRpb25zLkRlZmluaXRpb248VD4sIE5vbk51bGxhYmxlPE9wdGlvbnMuRGVmaW5pdGlvbjxUPltrZXlvZiBPcHRpb25zLkRlZmluaXRpb248VD5dPl1bXSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogY2hlY2sgaWYgb3B0aW9ucyBpcyBnaXZlblxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW25hbWVdID09PSAndW5kZWZpbmVkJyAmJiAhZXhwZWN0ZWRPcHRpb24uZGVmYXVsdCAmJiBleHBlY3RlZE9wdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBvcHRpb24gXCIke25hbWUudG9TdHJpbmcoKX1cIiBpcyBtaXNzaW5nYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1tuYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgZXhwZWN0ZWRPcHRpb24uZGVmYXVsdCkge1xuICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gZXhwZWN0ZWRPcHRpb24uZGVmYXVsdFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3Qgb3B0VmFsdWUgPSBvcHRpb25zW25hbWVdXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdFZhbHVlICE9PSBleHBlY3RlZE9wdGlvbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvcHRpb24gXCIke25hbWUudG9TdHJpbmcoKX1cIiB0byBiZSB0eXBlIG9mICR7ZXhwZWN0ZWRPcHRpb24udHlwZX0gYnV0IHdhcyAke3R5cGVvZiBvcHRpb25zW25hbWVdfWApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwZWN0ZWRPcHRpb24udmFsaWRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZE9wdGlvbi52YWxpZGF0ZShvcHRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZSBjaGVjayBmb3Igb3B0aW9uIFwiJHtuYW1lLnRvU3RyaW5nKCl9XCIgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdFZhbHVlID09PSAnc3RyaW5nJyAmJiBleHBlY3RlZE9wdGlvbi5tYXRjaCAmJiAhb3B0VmFsdWUubWF0Y2goZXhwZWN0ZWRPcHRpb24ubWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb24gXCIke25hbWUudG9TdHJpbmcoKX1cIiBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIHZhbHVlczogJHtleHBlY3RlZE9wdGlvbi5tYXRjaH1gKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBvcHRpb25zW25hbWVdXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBvcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMgYXMgb2JqZWN0KSBhcyBba2V5b2YgVCwgVFtrZXlvZiBUXV1bXSkge1xuICAgICAgICAvKipcbiAgICAgICAgICoga2VlcCBrZXlzIGZyb20gc291cmNlIG9iamVjdCBpZiBkZXNpcmVkXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoa2V5c1RvS2VlcC5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gb3B0aW9uXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBRUEsSUFBTSxrQkFBa0I7QUFHakIsSUFBTSxrQkFBNEMsT0FBTztBQUFBLEVBQzVELE9BQU8sQ0FBQztBQUFBLEVBQ1IsUUFBUSxDQUFDO0FBQUEsRUFDVCxTQUFTLENBQUM7QUFBQSxFQUNWLFdBQVc7QUFBQSxFQUNYLFVBQVU7QUFBQSxFQUNWLFdBQVcsQ0FBQztBQUFBLEVBQ1oscUJBQXFCO0FBQUEsRUFDckIsbUJBQW1CLENBQUM7QUFBQSxFQUNwQixNQUFNO0FBQUEsRUFDTixpQkFBaUI7QUFBQSxFQUNqQixnQkFBZ0I7QUFBQSxFQUNoQixXQUFXO0FBQUEsRUFDWCxXQUFXLENBQUM7QUFBQSxFQUNaLFVBQVUsQ0FBQztBQUFBLEVBQ1gsY0FBYztBQUFBLEVBQ2QsMkJBQTJCO0FBQUEsRUFDM0IsZUFBZTtBQUFBLEVBQ2YsY0FBYyxDQUFDO0FBQUEsRUFDZix3QkFBd0I7QUFBQSxFQUN4QixzQkFBc0I7QUFBQSxFQUN0QixVQUFVLENBQUM7QUFBQSxFQUNYLFdBQVcsQ0FBQztBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLElBQ0gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1g7QUFBQSxFQUNBLGlCQUFpQjtBQUFBLEVBQ2pCLHNCQUFzQjtBQUFBLEVBQ3RCLHlCQUF5QjtBQUFBLEVBQ3pCLHNCQUFzQjtBQUFBLEVBQ3RCLHFCQUFxQjtBQUFBLEVBQ3JCLGlDQUFpQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLbEMsV0FBVztBQUFBLElBQ1AsU0FB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