"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUnsupportedTargets = getUnsupportedTargets; exports.default = void 0; var _data = _interopRequireDefault(require("caniuse-db/fulldata-json/data-2.0.json")); var _constants = require("../constants"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Take a target's id and return it's full name by using `targetNameMappings` * ex. {target: and_ff, version: 40} => 'Android FireFox 40' */ function formatTargetNames(target) { const name = _constants.STANDARD_TARGET_NAME_MAPPING[target.target] || target.target; return `${name} ${target.version}`; } /** * Check if a browser version is in the range format * ex. 10.0-10.2 */ function versionIsRange(version) { return version.includes("-"); } /** * Parse version from caniuse and compare with parsed version from browserslist. */ function areVersionsEqual(targetVersion, statsVersion) { return targetVersion === parseFloat(statsVersion); } /* * Check the CanIUse database to see if targets are supported * * If no record could be found, return true. Rules might not * be found because they could belong to another provider */ function isSupportedByCanIUse(node, { version, target, parsedVersion }) { const data = _data.default.data[node.caniuseId]; if (!data) return true; const { stats } = data; if (!(target in stats)) return true; const targetStats = stats[target]; if (typeof version === "string" && versionIsRange(version)) { return Object.keys(targetStats).some(statsVersion => versionIsRange(statsVersion) && areVersionsEqual(parsedVersion, statsVersion) ? !targetStats[statsVersion].includes("y") : true); } // @TODO: This assumes that all versions are included in the cainuse db. If this is incorrect, // this will return false negatives. To properly do this, we have to to range comparisons. // Ex. given query for 50 and only version 40 exists in db records, return true if (!(version in targetStats)) return true; if (!targetStats[version]) return true; return targetStats[version].includes("y"); } /** * Return an array of all unsupported targets */ function getUnsupportedTargets(node, targets) { return targets.filter(target => !isSupportedByCanIUse(node, target)).map(formatTargetNames); } const CanIUseProvider = [// new ServiceWorker() { caniuseId: "serviceworkers", astNodeType: _constants.AstNodeTypes.NewExpression, object: "ServiceWorker" }, { caniuseId: "serviceworkers", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "navigator", property: "serviceWorker" }, // document.querySelector() { caniuseId: "queryselector", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "document", property: "querySelector" }, // IntersectionObserver { caniuseId: "intersectionobserver", astNodeType: _constants.AstNodeTypes.NewExpression, object: "IntersectionObserver" }, // ResizeObserver { caniuseId: "resizeobserver", astNodeType: _constants.AstNodeTypes.NewExpression, object: "ResizeObserver" }, // PaymentRequest { caniuseId: "payment-request", astNodeType: _constants.AstNodeTypes.NewExpression, object: "PaymentRequest" }, // Promises { caniuseId: "promises", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Promise" }, { caniuseId: "promises", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "Promise", property: "resolve" }, { caniuseId: "promises", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "Promise", property: "all" }, { caniuseId: "promises", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "Promise", property: "race" }, { caniuseId: "promises", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "Promise", property: "reject" }, // fetch { caniuseId: "fetch", astNodeType: _constants.AstNodeTypes.CallExpression, object: "fetch" }, // document.currentScript() { caniuseId: "document-currentscript", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "document", property: "currentScript" }, // URL { caniuseId: "url", astNodeType: _constants.AstNodeTypes.NewExpression, object: "URL" }, // URLSearchParams { caniuseId: "urlsearchparams", astNodeType: _constants.AstNodeTypes.NewExpression, object: "URLSearchParams" }, // performance.now() { caniuseId: "high-resolution-time", astNodeType: _constants.AstNodeTypes.MemberExpression, object: "performance", property: "now" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "TypedArray" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Int8Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Uint8Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Uint8ClampedArray" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Int16Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Uint16Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Int32Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Uint32Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Float32Array" }, { caniuseId: "typedarrays", astNodeType: _constants.AstNodeTypes.NewExpression, object: "Float64Array" }].map(rule => ({ ...rule, getUnsupportedTargets, id: rule.property ? `${rule.object}.${rule.property}` : rule.object, protoChainId: rule.property ? `${rule.object}.${rule.property}` : rule.object, protoChain: rule.property ? [rule.object, rule.property] : [rule.object] })); var _default = CanIUseProvider; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvY2FuaXVzZS1wcm92aWRlci50cyJdLCJuYW1lcyI6WyJmb3JtYXRUYXJnZXROYW1lcyIsInRhcmdldCIsIm5hbWUiLCJTVEFOREFSRF9UQVJHRVRfTkFNRV9NQVBQSU5HIiwidmVyc2lvbiIsInZlcnNpb25Jc1JhbmdlIiwiaW5jbHVkZXMiLCJhcmVWZXJzaW9uc0VxdWFsIiwidGFyZ2V0VmVyc2lvbiIsInN0YXRzVmVyc2lvbiIsInBhcnNlRmxvYXQiLCJpc1N1cHBvcnRlZEJ5Q2FuSVVzZSIsIm5vZGUiLCJwYXJzZWRWZXJzaW9uIiwiZGF0YSIsImNhbklVc2VSZWNvcmRzIiwiY2FuaXVzZUlkIiwic3RhdHMiLCJ0YXJnZXRTdGF0cyIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiZ2V0VW5zdXBwb3J0ZWRUYXJnZXRzIiwidGFyZ2V0cyIsImZpbHRlciIsIm1hcCIsIkNhbklVc2VQcm92aWRlciIsImFzdE5vZGVUeXBlIiwiQXN0Tm9kZVR5cGVzIiwiTmV3RXhwcmVzc2lvbiIsIm9iamVjdCIsIk1lbWJlckV4cHJlc3Npb24iLCJwcm9wZXJ0eSIsIkNhbGxFeHByZXNzaW9uIiwicnVsZSIsImlkIiwicHJvdG9DaGFpbklkIiwicHJvdG9DaGFpbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7QUFDQTs7OztBQW1CQTs7OztBQUlBLFNBQVNBLGlCQUFULENBQTJCQyxNQUEzQixFQUFtRDtBQUNqRCxRQUFNQyxJQUFJLEdBQUdDLHdDQUE2QkYsTUFBTSxDQUFDQSxNQUFwQyxLQUErQ0EsTUFBTSxDQUFDQSxNQUFuRTtBQUNBLFNBQVEsR0FBRUMsSUFBSyxJQUFHRCxNQUFNLENBQUNHLE9BQVEsRUFBakM7QUFDRDtBQUVEOzs7Ozs7QUFJQSxTQUFTQyxjQUFULENBQXdCRCxPQUF4QixFQUFrRDtBQUNoRCxTQUFPQSxPQUFPLENBQUNFLFFBQVIsQ0FBaUIsR0FBakIsQ0FBUDtBQUNEO0FBRUQ7Ozs7O0FBR0EsU0FBU0Ms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UUFBbkIsQ0FBaEIsR0FBK0MsQ0FBQ0UsSUFBSSxDQUFDSixNQUFOO0FBTDVDLENBQVgsQ0F0SjRELENBQWxFO2VBOEplSixlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNhbklVc2VSZWNvcmRzIGZyb20gXCJjYW5pdXNlLWRiL2Z1bGxkYXRhLWpzb24vZGF0YS0yLjAuanNvblwiO1xuaW1wb3J0IHsgU1RBTkRBUkRfVEFSR0VUX05BTUVfTUFQUElORywgQXN0Tm9kZVR5cGVzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQXN0TWV0YWRhdGFBcGlXaXRoVGFyZ2V0c1Jlc29sdmVyLCBUYXJnZXQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxudHlwZSBDYW5JVXNlUmVjb3JkcyA9IHtcbiAgZGF0YTogQ2FuSVVzZURhdGE7XG59O1xuXG50eXBlIENhbklVc2VEYXRhID0ge1xuICBbYXBpOiBzdHJpbmddOiB7XG4gICAgc3RhdHM6IENhbklVc2VTdGF0cztcbiAgfTtcbn07XG5cbnR5cGUgQ2FuSVVzZVN0YXRzID0ge1xuICBbYnJvd3Nlcjogc3RyaW5nXToge1xuICAgIFt2ZXJzaW9uOiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG59O1xuXG4vKipcbiAqIFRha2UgYSB0YXJnZXQncyBpZCBhbmQgcmV0dXJuIGl0J3MgZnVsbCBuYW1lIGJ5IHVzaW5nIGB0YXJnZXROYW1lTWFwcGluZ3NgXG4gKiBleC4ge3RhcmdldDogYW5kX2ZmLCB2ZXJzaW9uOiA0MH0gPT4gJ0FuZHJvaWQgRmlyZUZveCA0MCdcbiAqL1xuZnVuY3Rpb24gZm9ybWF0VGFyZ2V0TmFtZXModGFyZ2V0OiBUYXJnZXQpOiBzdHJpbmcge1xuICBjb25zdCBuYW1lID0gU1RBTkRBUkRfVEFSR0VUX05BTUVfTUFQUElOR1t0YXJnZXQudGFyZ2V0XSB8fCB0YXJnZXQudGFyZ2V0O1xuICByZXR1cm4gYCR7bmFtZX0gJHt0YXJnZXQudmVyc2lvbn1gO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgYnJvd3NlciB2ZXJzaW9uIGlzIGluIHRoZSByYW5nZSBmb3JtYXRcbiAqIGV4LiAxMC4wLTEwLjJcbiAqL1xuZnVuY3Rpb24gdmVyc2lvbklzUmFuZ2UodmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJzaW9uLmluY2x1ZGVzKFwiLVwiKTtcbn1cblxuLyoqXG4gKiBQYXJzZSB2ZXJzaW9uIGZyb20gY2FuaXVzZSBhbmQgY29tcGFyZSB3aXRoIHBhcnNlZCB2ZXJzaW9uIGZyb20gYnJvd3NlcnNsaXN0LlxuICovXG5mdW5jdGlvbiBhcmVWZXJzaW9uc0VxdWFsKFxuICB0YXJnZXRWZXJzaW9uOiBudW1iZXIsXG4gIHN0YXRzVmVyc2lvbjogc3RyaW5nXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhcmdldFZlcnNpb24gPT09IHBhcnNlRmxvYXQoc3RhdHNWZXJzaW9uKTtcbn1cblxuLypcbiAqIENoZWNrIHRoZSBDYW5JVXNlIGRhdGFiYXNlIHRvIHNlZSBpZiB0YXJnZXRzIGFyZSBzdXBwb3J0ZWRcbiAqXG4gKiBJZiBubyByZWNvcmQgY291bGQgYmUgZm91bmQsIHJldHVybiB0cnVlLiBSdWxlcyBtaWdodCBub3RcbiAqIGJlIGZvdW5kIGJlY2F1c2UgdGhleSBjb3VsZCBiZWxvbmcgdG8gYW5vdGhlciBwcm92aWRlclxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZEJ5Q2FuSVVzZShcbiAgbm9kZTogQXN0TWV0YWRhdGFBcGlXaXRoVGFyZ2V0c1Jlc29sdmVyLFxuICB7IHZlcnNpb24sIHRhcmdldCwgcGFyc2VkVmVyc2lvbiB9OiBUYXJnZXRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhID0gKGNhbklVc2VSZWNvcmRzIGFzIENhbklVc2VSZWNvcmRzKS5kYXRhW25vZGUuY2FuaXVzZUlkXTtcblxuICBpZiAoIWRhdGEpIHJldHVybiB0cnVlO1xuICBjb25zdCB7IHN0YXRzIH0gPSBkYXRhO1xuICBpZiAoISh0YXJnZXQgaW4gc3RhdHMpKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCB0YXJnZXRTdGF0cyA9IHN0YXRzW3RhcmdldF07XG5cbiAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSBcInN0cmluZ1wiICYmIHZlcnNpb25Jc1JhbmdlKHZlcnNpb24pKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldFN0YXRzKS5zb21lKChzdGF0c1ZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAgIHZlcnNpb25Jc1JhbmdlKHN0YXRzVmVyc2lvbikgJiZcbiAgICAgIGFyZVZlcnNpb25zRXF1YWwocGFyc2VkVmVyc2lvbiwgc3RhdHNWZXJzaW9uKVxuICAgICAgICA/ICF0YXJnZXRTdGF0c1tzdGF0c1ZlcnNpb25dLmluY2x1ZGVzKFwieVwiKVxuICAgICAgICA6IHRydWVcbiAgICApO1xuICB9XG5cbiAgLy8gQFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IGFsbCB2ZXJzaW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhaW51c2UgZGIuIElmIHRoaXMgaXMgaW5jb3JyZWN0LFxuICAvLyAgICAgICAgdGhpcyB3aWxsIHJldHVybiBmYWxzZSBuZWdhdGl2ZXMuIFRvIHByb3Blcmx5IGRvIHRoaXMsIHdlIGhhdmUgdG8gdG8gcmFuZ2UgY29tcGFyaXNvbnMuXG4gIC8vICAgICAgICBFeC4gZ2l2ZW4gcXVlcnkgZm9yIDUwIGFuZCBvbmx5IHZlcnNpb24gNDAgZXhpc3RzIGluIGRiIHJlY29yZHMsIHJldHVybiB0cnVlXG4gIGlmICghKHZlcnNpb24gaW4gdGFyZ2V0U3RhdHMpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCF0YXJnZXRTdGF0c1t2ZXJzaW9uXSkgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRzW3ZlcnNpb25dLmluY2x1ZGVzKFwieVwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHVuc3VwcG9ydGVkIHRhcmdldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc3VwcG9ydGVkVGFyZ2V0cyhcbiAgbm9kZTogQXN0TWV0YWRhdGFBcGlXaXRoVGFyZ2V0c1Jlc29sdmVyLFxuICB0YXJnZXRzOiBUYXJnZXRbXVxuKTogc3RyaW5nW10ge1xuICByZXR1cm4gdGFyZ2V0c1xuICAgIC5maWx0ZXIoKHRhcmdldCkgPT4gIWlzU3VwcG9ydGVkQnlDYW5JVXNlKG5vZGUsIHRhcmdldCkpXG4gICAgLm1hcChmb3JtYXRUYXJnZXROYW1lcyk7XG59XG5cbmNvbnN0IENhbklVc2VQcm92aWRlcjogQXJyYXk8QXN0TWV0YWRhdGFBcGlXaXRoVGFyZ2V0c1Jlc29sdmVyPiA9IFtcbiAgLy8gbmV3IFNlcnZpY2VXb3JrZXIoKVxuICB7XG4gICAgY2FuaXVzZUlkOiBcInNlcnZpY2V3b3JrZXJzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJTZXJ2aWNlV29ya2VyXCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwic2VydmljZXdvcmtlcnNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIm5hdmlnYXRvclwiLFxuICAgIHByb3BlcnR5OiBcInNlcnZpY2VXb3JrZXJcIixcbiAgfSxcbiAgLy8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicXVlcnlzZWxlY3RvclwiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiZG9jdW1lbnRcIixcbiAgICBwcm9wZXJ0eTogXCJxdWVyeVNlbGVjdG9yXCIsXG4gIH0sXG4gIC8vIEludGVyc2VjdGlvbk9ic2VydmVyXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwiaW50ZXJzZWN0aW9ub2JzZXJ2ZXJcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIkludGVyc2VjdGlvbk9ic2VydmVyXCIsXG4gIH0sXG4gIC8vIFJlc2l6ZU9ic2VydmVyXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicmVzaXplb2JzZXJ2ZXJcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlJlc2l6ZU9ic2VydmVyXCIsXG4gIH0sXG4gIC8vIFBheW1lbnRSZXF1ZXN0XG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicGF5bWVudC1yZXF1ZXN0XCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJQYXltZW50UmVxdWVzdFwiLFxuICB9LFxuICAvLyBQcm9taXNlc1xuICB7XG4gICAgY2FuaXVzZUlkOiBcInByb21pc2VzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJQcm9taXNlXCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicHJvbWlzZXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlByb21pc2VcIixcbiAgICBwcm9wZXJ0eTogXCJyZXNvbHZlXCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicHJvbWlzZXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlByb21pc2VcIixcbiAgICBwcm9wZXJ0eTogXCJhbGxcIixcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJwcm9taXNlc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiUHJvbWlzZVwiLFxuICAgIHByb3BlcnR5OiBcInJhY2VcIixcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJwcm9taXNlc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiUHJvbWlzZVwiLFxuICAgIHByb3BlcnR5OiBcInJlamVjdFwiLFxuICB9LFxuICAvLyBmZXRjaFxuICB7XG4gICAgY2FuaXVzZUlkOiBcImZldGNoXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiZmV0Y2hcIixcbiAgfSxcbiAgLy8gZG9jdW1lbnQuY3VycmVudFNjcmlwdCgpXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwiZG9jdW1lbnQtY3VycmVudHNjcmlwdFwiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiZG9jdW1lbnRcIixcbiAgICBwcm9wZXJ0eTogXCJjdXJyZW50U2NyaXB0XCIsXG4gIH0sXG4gIC8vIFVSTFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInVybFwiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiVVJMXCIsXG4gIH0sXG4gIC8vIFVSTFNlYXJjaFBhcmFtc1xuICB7XG4gICAgY2FuaXVzZUlkOiBcInVybHNlYXJjaHBhcmFtc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiVVJMU2VhcmNoUGFyYW1zXCIsXG4gIH0sXG4gIC8vIHBlcmZvcm1hbmNlLm5vdygpXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwiaGlnaC1yZXNvbHV0aW9uLXRpbWVcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk1lbWJlckV4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcInBlcmZvcm1hbmNlXCIsXG4gICAgcHJvcGVydHk6IFwibm93XCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidHlwZWRhcnJheXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlR5cGVkQXJyYXlcIixcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiSW50OEFycmF5XCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidHlwZWRhcnJheXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlVpbnQ4QXJyYXlcIixcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiVWludDhDbGFtcGVkQXJyYXlcIixcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBBc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICBvYmplY3Q6IFwiSW50MTZBcnJheVwiLFxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJVaW50MTZBcnJheVwiLFxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJJbnQzMkFycmF5XCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidHlwZWRhcnJheXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIlVpbnQzMkFycmF5XCIsXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidHlwZWRhcnJheXNcIixcbiAgICBhc3ROb2RlVHlwZTogQXN0Tm9kZVR5cGVzLk5ld0V4cHJlc3Npb24sXG4gICAgb2JqZWN0OiBcIkZsb2F0MzJBcnJheVwiLFxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IEFzdE5vZGVUeXBlcy5OZXdFeHByZXNzaW9uLFxuICAgIG9iamVjdDogXCJGbG9hdDY0QXJyYXlcIixcbiAgfSxcbl0ubWFwKChydWxlKSA9PiAoe1xuICAuLi5ydWxlLFxuICBnZXRVbnN1cHBvcnRlZFRhcmdldHMsXG4gIGlkOiBydWxlLnByb3BlcnR5ID8gYCR7cnVsZS5vYmplY3R9LiR7cnVsZS5wcm9wZXJ0eX1gIDogcnVsZS5vYmplY3QsXG4gIHByb3RvQ2hhaW5JZDogcnVsZS5wcm9wZXJ0eSA/IGAke3J1bGUub2JqZWN0fS4ke3J1bGUucHJvcGVydHl9YCA6IHJ1bGUub2JqZWN0LFxuICBwcm90b0NoYWluOiBydWxlLnByb3BlcnR5ID8gW3J1bGUub2JqZWN0LCBydWxlLnByb3BlcnR5XSA6IFtydWxlLm9iamVjdF0sXG59KSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbklVc2VQcm92aWRlcjtcbiJdfQ==