UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

400 lines (399 loc) 52.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_UNTYPED_TSLINT_RULES = { // Enforces function overloads to be consecutive. "adjacent-overload-signatures": true, // Enforces vertical alignment "align": false, // Requires using either ‘T[]’ or ‘Array' for arrays "array-type": [true, "array"], // Requires parentheses around the parameters of arrow function definitions "arrow-parens": [ true, // Arrow functions with one parameter must not have parentheses if removing them is allowed by TypeScript. "ban-single-arg-parens", ], // Suggests to convert `() => { return x; }` to `() => x`. "arrow-return-shorthand": true, // Bans the use of specific functions or global methods "ban": [ true, ], // Bans specific types from being used. "ban-types": false, // In a binary expression, a literal should always be on the right-hand side if possible. "binary-expression-operand-order": false, // An interface or literal type with just a call signature can be written as a function type. "callable-types": true, // Enforces PascalCased class and interface names "class-name": true, // Enforces formatting rules for single-line comments "comment-format": [ true, // Requires that all single-line comments must begin with a space, as in `// comment` "check-space", ], // Enforces a threshold of cyclomatic complexity "cyclomatic-complexity": [true, 30], // Enforces braces for `if`/`for`/`do`/`while` statements "curly": true, // Ensures the file ends with a newline "eofline": true, // Enforces UTF-8 file encoding. "encoding": true, // Enforces a certain header comment for all files, matched by a regular expression "file-header": false, // Requires a `for ... in` statement to be filtered with an `if` statement "forin": false, // Disallows importing the specified modules directly via `import` and `require`. "import-blacklist": false, // Ensures proper spacing between import statement keywords. "import-spacing": true, // Enforces indentation with tabs or spaces "indent": [true, "spaces"], // Requires interface names to begin with a capital ‘I’ "interface-name": [ true, // requires interface names to not have an “I” prefix "never-prefix", ], // Prefer an interface declaration over a type literal (`type T = { ... }`) "interface-over-type-literal": true, // Enforces basic format rules for JSDoc comments "jsdoc-format": true, // Only allows labels in sensible locations "label-position": true, // Enforces a consistent linebreak style "linebreak-style": [true, "LF"], // A file may not contain more than the specified number of classes "max-classes-per-file": [true, 5], // Requires files to remain under a certain number of lines "max-file-line-count": [true, 800], // Requires lines to be under a certain max length "max-line-length": [true, 120], // Requires explicit visibility declarations for class members "member-access": false, // Enforces member ordering "member-ordering": [ true, { order: "fields-first", }, ], // Enforces blank line before return when not the only line in the block. "newline-before-return": false, // Requires parentheses when invoking a constructor via the `new` keyword. "new-parens": false, // Requires the use of `as Type` for type assertions instead of `<Type>`. "no-angle-bracket-type-assertion": false, // Diallows usages of `any` as a type declaration. "no-any": false, // Disallows access to arguments.callee. "no-arg": true, // Disallows bitwise operators. "no-bitwise": false, // Disallows any type of assignment in conditionals. "no-conditional-assignment": true, // Disallows one or more blank lines in a row. "no-consecutive-blank-lines": [true, 1], // Bans the use of specified console methods. "no-console": false, // Disallows access to the constructors of `String`, `Number`, and `Boolean`. "no-construct": true, // Disallows `debugger` statements. "no-debugger": true, // Disallows default exports in ES6-style modules. "no-default-export": true, // Disallows multiple import statements from the same module. "no-duplicate-imports": false, // Warns if `super()` appears twice in a constructor. "no-duplicate-super": true, // Prevents duplicate cases in switch statements. "no-duplicate-switch-case": true, // Disallows duplicate variable declarations in the same block scope. "no-duplicate-variable": true, // Disallows empty blocks. "no-empty": false, // Forbids empty interfaces. "no-empty-interface": false, // Disallows `eval` function invocations. "no-eval": true, // Disallows importing modules that are not listed as dependency in the project’s package.json "no-implicit-dependencies": [true, "dev", "optional"], // Avoid import statements with side-effect. "no-import-side-effect": false, // Disallows explicit type declarations for variables or parameters initialized to a number, // string, or boolean. "no-inferrable-types": false, // Disallows internal `module`. "no-internal-module": true, // Warns on use of `${` in non-template strings. "no-invalid-template-strings": true, // Disallows using the `this` keyword outside of classes. "no-invalid-this": false, // Disallows irregular whitespace outside of strings and comments "no-irregular-whitespace": true, // Disallows the use constant number values outside of variable assignments. "no-magic-numbers": false, // Disallows mergeable namespaces in the same file. "no-mergeable-namespace": false, // Disallows use of internal `module`s and `namespace`s. "no-namespace": false, // Warns on apparent attempts to define constructors for interfaces or `new` for classes. "no-misused-new": true, // Disallows non-null assertions. "no-non-null-assertion": false, // Disallows use of the `null` keyword literal. "no-null-keyword": false, // Forbids an object literal to appear in a type assertion expression. Casting to `any` is still allowed. "no-object-literal-type-assertion": false, // Disallows parameter properties in class constructors. "no-parameter-properties": true, // Disallows reassigning parameters. "no-parameter-reassignment": false, // Disallows `/// <reference path=>` imports (use ES6-style imports instead). "no-reference": true, // Disallows invocation of `require()`. "no-require-imports": true, // Disallows unnecessary `return await`. "no-return-await": true, // Disallows shadowing variable declarations. "no-shadowed-variable": false, // Forbids array literals to contain missing elements. "no-sparse-arrays": true, // Disallows object access via string literals. "no-string-literal": false, // Flags throwing plain strings or concatenations of strings. "no-string-throw": true, // Disallows importing any submodule. "no-submodule-imports": false, // Disallows falling through case statements. "no-switch-case-fall-through": true, // Disallows unnecessary references to `this`. "no-this-assignment": [true, { "allow-destructuring": true }], // Disallows trailing whitespace at the end of a line. "no-trailing-whitespace": true, // Replaces `x => f(x)` with just `f`. "no-unnecessary-callback-wrapper": true, // Forbids a ‘var’/’let’ statement or destructuring initializer to be initialized to ‘undefined’. "no-unnecessary-initializer": false, // Disallows control flow statements, such as return, continue, break and throws in finally // blocks. "no-unsafe-finally": true, // Disallows unused expression statements. "no-unused-expression": true, // Disallows usage of the `var` keyword. "no-var-keyword": true, // Disallows the use of require statements except in import statements. "no-var-requires": true, // Checks that decimal literals should begin with `0.` instead of just `.`, and should not end with a trailing `0`. // TODO: Enable it when the option to enforce lowercase hex is available "number-literal-format": false, // Enforces consistent object literal property quote style. "object-literal-key-quotes": [true, "consistent-as-needed"], // Enforces use of ES6 object literal shorthand when possible. "object-literal-shorthand": true, // Requires keys in object literals to be sorted alphabetically. "object-literal-sort-keys": false, // Requires the specified tokens to be on the same line as the expression preceding them. "one-line": [ true, // Checks that `catch` is on the same line as the closing brace for `try`. "check-catch", // Checks that `finally` is on the same line as the closing brace for `catch`. "check-finally", // Checks that `else` is on the same line as the closing brace for `if`. "check-else", // Checks that an open brace falls on the same line as its preceding expression. "check-open-brace", // Checks preceding whitespace for the specified tokens. "check-whitespace", ], // Disallows multiple variable definitions in the same declaration statement. "one-variable-per-declaration": [true, "ignore-for-loop"], // Disallows traditional (non-arrow) function expressions. "only-arrow-functions": false, // Requires that import statements be alphabetized. "ordered-imports": true, // Recommends to use a conditional expression instead of assigning to the same thing in each branch of an if // statement. "prefer-conditional-expression": false, // Requires that variable declarations use const instead of let if possible. "prefer-const": true, // Recommends a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access // the array being iterated. "prefer-for-of": true, // Warns for class methods that do not use `this`. "prefer-function-over-method": false, // Prefer `foo(): void` over `foo: () => void` in interfaces and types. "prefer-method-signature": true, // Enforces the use of the ES2015 object spread operator over `Object.assign()` where appropriate. "prefer-object-spread": true, // Prefer a `switch` statement to an `if` statement with simple `===` comparisons. "prefer-switch": true, // Prefer a template expression over string literal concatenation. "prefer-template": [true, "allow-single-concat"], // Requires single or double quotes for string literals. "quotemark": [ true, // Enforces double quotes. "double", // Forbids single-line untagged template strings that do not contain string interpolations. "avoid-template", // Allows you to use the “other” quotemark in cases where escaping would normally be required. "avoid-escape", ], // Requires the radix parameter to be specified when calling `parseInt`. "radix": true, // Enforces consistent semicolon usage at the end of every statement. "semicolon": [true, "always"], // Require or disallow a space before function parenthesis "space-before-function-paren": [ true, { anonymous: "always", named: "never", asyncArrow: "always", method: "never", constructor: "never", }, ], // Enforces spaces within parentheses or disallow them. "space-within-parens": [true, 0], // Requires a `default` case in all `switch` statements. "switch-default": true, // Checks whether the final clause of a switch statement ends in `break;`. "switch-final-break": [true, "always"], // Requires or disallows trailing commas in array and object literals, destructuring // assignments, function and tuple typings, named imports and function parameters. "trailing-comma": [ true, { // Checks multi-line object literals. multiline: "always", // Checks single-line object literals. singleline: "never", }, ], // Requires `===` and `!==` in place of `==` and `!=`. "triple-equals": true, // Checks that type literal members are separated by semicolons. Enforces a trailing semicolon for multiline type // literals. "type-literal-delimiter": true, // Requires type definitions to exist. "typedef": [ true, // Check return types of interface properties. "property-declaration", // Check variable declarations. "variable-declaration", // Check member variable declarations. "member-variable-declaration", ], // Requires or disallows whitespace for type definitions. "typedef-whitespace": [ true, // Specifies how much space should be to the _left_ of a typedef colon. { "call-signature": "nospace", "index-signature": "nospace", "parameter": "nospace", "property-declaration": "nospace", "variable-declaration": "nospace", }, // Specifies how much space should be to the _right_ of a typedef colon. { "call-signature": "onespace", "index-signature": "onespace", "parameter": "onespace", "property-declaration": "onespace", "variable-declaration": "onespace", }, ], // Makes sure result of `typeof` is compared to correct string values. "typeof-compare": true, // Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter. "unified-signatures": true, // Enforces use of the `isNaN()` function to check for NaN references instead of a comparison // to the `NaN` constant. "use-isnan": true, // Checks variable names for various errors. "variable-name": [true, "check-format", "allow-leading-underscore"], // Enforces whitespace style conventions. "whitespace": [ true, // Checks branching statements (`if`/`else`/f`or`/`while`) are followed by whitespace. "check-branch", // Checks that variable declarations have whitespace around the equals token. "check-decl", // Checks for whitespace around operator tokens. "check-operator", // Checks for whitespace in import & export statements. "check-module", // Checks for whitespace after separator tokens (`,`/`;`). "check-separator", // Checks that there is no whitespace after rest/spread operator (`...`). "check-rest-spread", // Checks for whitespace before a variable type specification. "check-type", // Checks for whitespace between a typecast and its target. "check-typecast", // Checks for whitespace between type operators `|` and `&`. "check-type-operator", // Checks for whitespace before the opening brace of a block. "check-preblock", ], }; exports.DEFAULT_TYPED_TSLINT_RULES = Object.assign({}, exports.DEFAULT_UNTYPED_TSLINT_RULES, { // Warns for an awaited value that is not a Promise. "await-promise": true, // Enforces documentation for important items be filled out. "completed-docs": [true, ["classes", "functions"]], // Warns when deprecated APIs are used. "deprecation": true, // Requires that a default import have the same name as the declaration it imports. Does nothing for anonymous // default exports. "match-default-export-name": false, // Warns on comparison to a boolean literal, as in `x === true`. "no-boolean-literal-compare": true, // Promises returned by functions must be handled appropriately. "no-floating-promises": true, // Disallows iterating over an array with a for-in loop. "no-for-in-array": true, // Disallow type inference of `{}` (empty object type) at function and constructor call sites. "no-inferred-empty-object-type": false, // Warns when a method is used as outside of a method call. "no-unbound-method": false, // Warns when using an expression of type `any` in a dynamic way. "no-unsafe-any": false, // Warns when a namespace qualifier (`A.x`) is unnecessary. "no-unnecessary-qualifier": true, // Warns if a type assertion does not change the type of an expression. "no-unnecessary-type-assertion": false, // Disallows unused imports, variables, functions and private class members. "no-unused-variable": false, // Disallows usage of variables before their declaration. "no-use-before-declare": true, // Requires expressions of type void to appear in statement position. "no-void-expression": true, // Requires any function or method that returns a promise to be marked async. "promise-function-async": true, // When adding two variables, operands must both be of type number or of type string. "restrict-plus-operands": true, // Prefer `return;` in void functions and `return undefined;` in value-returning functions. "return-undefined": true, // Usage of && or || operators should be with boolean operands and expressions in If, Do, While and For statements // should be of type boolean. "strict-boolean-expressions": true, // Warns for type predicates that are always true or always false. "strict-type-predicates": false, // Warns if an explicitly specified type argument is the default for that type parameter. "use-default-type-parameter": false }); exports.DEFAULT_UNTYPED_TSLINT_CONFIG = { rules: exports.DEFAULT_UNTYPED_TSLINT_RULES, }; // TODO: Support type checking exports.DEFAULT_TYPED_TSLINT_CONFIG = { rules: exports.DEFAULT_TYPED_TSLINT_RULES, }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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MkQ7SUFDM0QsMEJBQTBCLEVBQUUsSUFBSTtJQUNoQyx1RUFBdUU7SUFDdkUsK0JBQStCLEVBQUUsS0FBSztJQUN0Qyw0RUFBNEU7SUFDNUUsb0JBQW9CLEVBQUUsS0FBSztJQUMzQix5REFBeUQ7SUFDekQsdUJBQXVCLEVBQUUsSUFBSTtJQUM3QixxRUFBcUU7SUFDckUsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQiw2RUFBNkU7SUFDN0Usd0JBQXdCLEVBQUUsSUFBSTtJQUM5QixxRkFBcUY7SUFDckYsd0JBQXdCLEVBQUUsSUFBSTtJQUM5QiwyRkFBMkY7SUFDM0Ysa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixrSEFBa0g7SUFDbEgsNkJBQTZCO0lBQzdCLDRCQUE0QixFQUFFLElBQUk7SUFDbEMsa0VBQWtFO0lBQ2xFLHdCQUF3QixFQUFFLEtBQUs7SUFDL0IseUZBQXlGO0lBQ3pGLDRCQUE0QixFQUFFLEtBQUssSUFDbkM7QUFFVyxRQUFBLDZCQUE2QixHQUFzQztJQUM5RSxLQUFLLEVBQUUsb0NBQTRCO0NBQ3BDLENBQUM7QUFFRiw4QkFBOEI7QUFDakIsUUFBQSwyQkFBMkIsR0FBc0M7SUFDNUUsS0FBSyxFQUFFLGtDQUEwQjtDQUNsQyxDQUFDIiwiZmlsZSI6Im9wdGlvbnMvdHNsaW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd1cmF0aW9uIGFzIFRzbGludENvbmZpZ3VyYXRpb24gfSBmcm9tIFwidHNsaW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHNsaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBvdXRwdXQgdHNsaW50Lmpzb24gZmlsZSwgcmVsYXRpdmUgdG8gYHJvb3RgXG4gICAqL1xuICB0c2xpbnRKc29uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgcGF0aCByZWxhdGl2ZSB0byBgcm9vdGAgb3IgYSByYXcgY29uZmlnIG9iamVjdC5cbiAgICogSWYgeW91IHBhc3MgYSByYXcgY29uZmlnIG9iamVjdCwgaXRzIGNvbmZpZ0ZpbGVEaXIgd2lsbCBiZSBgcm9vdGAuXG4gICAqL1xuICBjb25maWd1cmF0aW9uPzogVHNsaW50Q29uZmlndXJhdGlvbi5SYXdDb25maWdGaWxlIHwgc3RyaW5nO1xuXG4gIGZvcm1hdHRlcj86IFwibXNidWlsZFwiIHwgXCJ2ZXJib3NlXCIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlcyB0byBsaW50LCByZWxhdGl2ZSB0byBgcm9vdGBcbiAgICovXG4gIGZpbGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHRzbGludCB0byB1c2VcbiAgICovXG4gIHRzbGludD86IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVU5UWVBFRF9UU0xJTlRfUlVMRVM6IFRzbGludENvbmZpZ3VyYXRpb24uUmF3UnVsZXNDb25maWcgPSB7XG4gIC8vIEVuZm9yY2VzIGZ1bmN0aW9uIG92ZXJsb2FkcyB0byBiZSBjb25zZWN1dGl2ZS5cbiAgXCJhZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHZlcnRpY2FsIGFsaWdubWVudFxuICBcImFsaWduXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB1c2luZyBlaXRoZXIg4oCYVFtd4oCZIG9yIOKAmEFycmF5JyBmb3IgYXJyYXlzXG4gIFwiYXJyYXktdHlwZVwiOiBbdHJ1ZSwgXCJhcnJheVwiXSxcbiAgLy8gUmVxdWlyZXMgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBwYXJhbWV0ZXJzIG9mIGFycm93IGZ1bmN0aW9uIGRlZmluaXRpb25zXG4gIFwiYXJyb3ctcGFyZW5zXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIEFycm93IGZ1bmN0aW9ucyB3aXRoIG9uZSBwYXJhbWV0ZXIgbXVzdCBub3QgaGF2ZSBwYXJlbnRoZXNlcyBpZiByZW1vdmluZyB0aGVtIGlzIGFsbG93ZWQgYnkgVHlwZVNjcmlwdC5cbiAgICBcImJhbi1zaW5nbGUtYXJnLXBhcmVuc1wiLFxuICBdLFxuICAvLyBTdWdnZXN0cyB0byBjb252ZXJ0IGAoKSA9PiB7IHJldHVybiB4OyB9YCB0byBgKCkgPT4geGAuXG4gIFwiYXJyb3ctcmV0dXJuLXNob3J0aGFuZFwiOiB0cnVlLFxuICAvLyBCYW5zIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgZnVuY3Rpb25zIG9yIGdsb2JhbCBtZXRob2RzXG4gIFwiYmFuXCI6IFtcbiAgICB0cnVlLFxuICBdLFxuICAvLyBCYW5zIHNwZWNpZmljIHR5cGVzIGZyb20gYmVpbmcgdXNlZC5cbiAgXCJiYW4tdHlwZXNcIjogZmFsc2UsXG4gIC8vIEluIGEgYmluYXJ5IGV4cHJlc3Npb24sIGEgbGl0ZXJhbCBzaG91bGQgYWx3YXlzIGJlIG9uIHRoZSByaWdodC1oYW5kIHNpZGUgaWYgcG9zc2libGUuXG4gIFwiYmluYXJ5LWV4cHJlc3Npb24tb3BlcmFuZC1vcmRlclwiOiBmYWxzZSxcbiAgLy8gQW4gaW50ZXJmYWNlIG9yIGxpdGVyYWwgdHlwZSB3aXRoIGp1c3QgYSBjYWxsIHNpZ25hdHVyZSBjYW4gYmUgd3JpdHRlbiBhcyBhIGZ1bmN0aW9uIHR5cGUuXG4gIFwiY2FsbGFibGUtdHlwZXNcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgUGFzY2FsQ2FzZWQgY2xhc3MgYW5kIGludGVyZmFjZSBuYW1lc1xuICBcImNsYXNzLW5hbWVcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgZm9ybWF0dGluZyBydWxlcyBmb3Igc2luZ2xlLWxpbmUgY29tbWVudHNcbiAgXCJjb21tZW50LWZvcm1hdFwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBSZXF1aXJlcyB0aGF0IGFsbCBzaW5nbGUtbGluZSBjb21tZW50cyBtdXN0IGJlZ2luIHdpdGggYSBzcGFjZSwgYXMgaW4gYC8vIGNvbW1lbnRgXG4gICAgXCJjaGVjay1zcGFjZVwiLFxuICAgIC8vIFJlcXVpcmVzIHRoYXQgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvZiBhIGNvbW1lbnQgbXVzdCBiZSB1cHBlcmNhc2UsIGlmIGFwcGxpY2FibGUuXG4gICAgLy8gXCJjaGVjay11cHBlcmNhc2VcIixcbiAgXSxcbiAgLy8gRW5mb3JjZXMgYSB0aHJlc2hvbGQgb2YgY3ljbG9tYXRpYyBjb21wbGV4aXR5XG4gIFwiY3ljbG9tYXRpYy1jb21wbGV4aXR5XCI6IFt0cnVlLCAzMF0sXG4gIC8vIEVuZm9yY2VzIGJyYWNlcyBmb3IgYGlmYC9gZm9yYC9gZG9gL2B3aGlsZWAgc3RhdGVtZW50c1xuICBcImN1cmx5XCI6IHRydWUsXG4gIC8vIEVuc3VyZXMgdGhlIGZpbGUgZW5kcyB3aXRoIGEgbmV3bGluZVxuICBcImVvZmxpbmVcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgVVRGLTggZmlsZSBlbmNvZGluZy5cbiAgXCJlbmNvZGluZ1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBhIGNlcnRhaW4gaGVhZGVyIGNvbW1lbnQgZm9yIGFsbCBmaWxlcywgbWF0Y2hlZCBieSBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICBcImZpbGUtaGVhZGVyXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyBhIGBmb3IgLi4uIGluYCBzdGF0ZW1lbnQgdG8gYmUgZmlsdGVyZWQgd2l0aCBhbiBgaWZgIHN0YXRlbWVudFxuICBcImZvcmluXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIHRoZSBzcGVjaWZpZWQgbW9kdWxlcyBkaXJlY3RseSB2aWEgYGltcG9ydGAgYW5kIGByZXF1aXJlYC5cbiAgXCJpbXBvcnQtYmxhY2tsaXN0XCI6IGZhbHNlLFxuICAvLyBFbnN1cmVzIHByb3BlciBzcGFjaW5nIGJldHdlZW4gaW1wb3J0IHN0YXRlbWVudCBrZXl3b3Jkcy5cbiAgXCJpbXBvcnQtc3BhY2luZ1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBpbmRlbnRhdGlvbiB3aXRoIHRhYnMgb3Igc3BhY2VzXG4gIFwiaW5kZW50XCI6IFt0cnVlLCBcInNwYWNlc1wiXSxcbiAgLy8gUmVxdWlyZXMgaW50ZXJmYWNlIG5hbWVzIHRvIGJlZ2luIHdpdGggYSBjYXBpdGFsIOKAmEnigJlcbiAgXCJpbnRlcmZhY2UtbmFtZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyByZXF1aXJlcyBpbnRlcmZhY2UgbmFtZXMgdG8gbm90IGhhdmUgYW4g4oCcSeKAnSBwcmVmaXhcbiAgICBcIm5ldmVyLXByZWZpeFwiLFxuICBdLFxuICAvLyBQcmVmZXIgYW4gaW50ZXJmYWNlIGRlY2xhcmF0aW9uIG92ZXIgYSB0eXBlIGxpdGVyYWwgKGB0eXBlIFQgPSB7IC4uLiB9YClcbiAgXCJpbnRlcmZhY2Utb3Zlci10eXBlLWxpdGVyYWxcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYmFzaWMgZm9ybWF0IHJ1bGVzIGZvciBKU0RvYyBjb21tZW50c1xuICBcImpzZG9jLWZvcm1hdFwiOiB0cnVlLFxuICAvLyBPbmx5IGFsbG93cyBsYWJlbHMgaW4gc2Vuc2libGUgbG9jYXRpb25zXG4gIFwibGFiZWwtcG9zaXRpb25cIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYSBjb25zaXN0ZW50IGxpbmVicmVhayBzdHlsZVxuICBcImxpbmVicmVhay1zdHlsZVwiOiBbdHJ1ZSwgXCJMRlwiXSxcbiAgLy8gQSBmaWxlIG1heSBub3QgY29udGFpbiBtb3JlIHRoYW4gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2xhc3Nlc1xuICBcIm1heC1jbGFzc2VzLXBlci1maWxlXCI6IFt0cnVlLCA1XSxcbiAgLy8gUmVxdWlyZXMgZmlsZXMgdG8gcmVtYWluIHVuZGVyIGEgY2VydGFpbiBudW1iZXIgb2YgbGluZXNcbiAgXCJtYXgtZmlsZS1saW5lLWNvdW50XCI6IFt0cnVlLCA4MDBdLFxuICAvLyBSZXF1aXJlcyBsaW5lcyB0byBiZSB1bmRlciBhIGNlcnRhaW4gbWF4IGxlbmd0aFxuICBcIm1heC1saW5lLWxlbmd0aFwiOiBbdHJ1ZSwgMTIwXSxcbiAgLy8gUmVxdWlyZXMgZXhwbGljaXQgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMgZm9yIGNsYXNzIG1lbWJlcnNcbiAgXCJtZW1iZXItYWNjZXNzXCI6IGZhbHNlLFxuICAvLyBFbmZvcmNlcyBtZW1iZXIgb3JkZXJpbmdcbiAgXCJtZW1iZXItb3JkZXJpbmdcIjogW1xuICAgIHRydWUsXG4gICAge1xuICAgICAgb3JkZXI6IFwiZmllbGRzLWZpcnN0XCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gRW5mb3JjZXMgYmxhbmsgbGluZSBiZWZvcmUgcmV0dXJuIHdoZW4gbm90IHRoZSBvbmx5IGxpbmUgaW4gdGhlIGJsb2NrLlxuICBcIm5ld2xpbmUtYmVmb3JlLXJldHVyblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgcGFyZW50aGVzZXMgd2hlbiBpbnZva2luZyBhIGNvbnN0cnVjdG9yIHZpYSB0aGUgYG5ld2Aga2V5d29yZC5cbiAgXCJuZXctcGFyZW5zXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGUgdXNlIG9mIGBhcyBUeXBlYCBmb3IgdHlwZSBhc3NlcnRpb25zIGluc3RlYWQgb2YgYDxUeXBlPmAuXG4gIFwibm8tYW5nbGUtYnJhY2tldC10eXBlLWFzc2VydGlvblwiOiBmYWxzZSxcbiAgLy8gRGlhbGxvd3MgdXNhZ2VzIG9mIGBhbnlgIGFzIGEgdHlwZSBkZWNsYXJhdGlvbi5cbiAgXCJuby1hbnlcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhY2Nlc3MgdG8gYXJndW1lbnRzLmNhbGxlZS5cbiAgXCJuby1hcmdcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGJpdHdpc2Ugb3BlcmF0b3JzLlxuICBcIm5vLWJpdHdpc2VcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhbnkgdHlwZSBvZiBhc3NpZ25tZW50IGluIGNvbmRpdGlvbmFscy5cbiAgXCJuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBvbmUgb3IgbW9yZSBibGFuayBsaW5lcyBpbiBhIHJvdy5cbiAgXCJuby1jb25zZWN1dGl2ZS1ibGFuay1saW5lc1wiOiBbdHJ1ZSwgMV0sXG4gIC8vIEJhbnMgdGhlIHVzZSBvZiBzcGVjaWZpZWQgY29uc29sZSBtZXRob2RzLlxuICBcIm5vLWNvbnNvbGVcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBhY2Nlc3MgdG8gdGhlIGNvbnN0cnVjdG9ycyBvZiBgU3RyaW5nYCwgYE51bWJlcmAsIGFuZCBgQm9vbGVhbmAuXG4gIFwibm8tY29uc3RydWN0XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBgZGVidWdnZXJgIHN0YXRlbWVudHMuXG4gIFwibm8tZGVidWdnZXJcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGRlZmF1bHQgZXhwb3J0cyBpbiBFUzYtc3R5bGUgbW9kdWxlcy5cbiAgXCJuby1kZWZhdWx0LWV4cG9ydFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgbXVsdGlwbGUgaW1wb3J0IHN0YXRlbWVudHMgZnJvbSB0aGUgc2FtZSBtb2R1bGUuXG4gIFwibm8tZHVwbGljYXRlLWltcG9ydHNcIjogZmFsc2UsXG4gIC8vIFdhcm5zIGlmIGBzdXBlcigpYCBhcHBlYXJzIHR3aWNlIGluIGEgY29uc3RydWN0b3IuXG4gIFwibm8tZHVwbGljYXRlLXN1cGVyXCI6IHRydWUsXG4gIC8vIFByZXZlbnRzIGR1cGxpY2F0ZSBjYXNlcyBpbiBzd2l0Y2ggc3RhdGVtZW50cy5cbiAgXCJuby1kdXBsaWNhdGUtc3dpdGNoLWNhc2VcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGR1cGxpY2F0ZSB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgYmxvY2sgc2NvcGUuXG4gIFwibm8tZHVwbGljYXRlLXZhcmlhYmxlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBlbXB0eSBibG9ja3MuXG4gIFwibm8tZW1wdHlcIjogZmFsc2UsXG4gIC8vIEZvcmJpZHMgZW1wdHkgaW50ZXJmYWNlcy5cbiAgXCJuby1lbXB0eS1pbnRlcmZhY2VcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBgZXZhbGAgZnVuY3Rpb24gaW52b2NhdGlvbnMuXG4gIFwibm8tZXZhbFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIG1vZHVsZXMgdGhhdCBhcmUgbm90IGxpc3RlZCBhcyBkZXBlbmRlbmN5IGluIHRoZSBwcm9qZWN04oCZcyBwYWNrYWdlLmpzb25cbiAgXCJuby1pbXBsaWNpdC1kZXBlbmRlbmNpZXNcIjogW3RydWUsIFwiZGV2XCIsIFwib3B0aW9uYWxcIl0sXG4gIC8vIEF2b2lkIGltcG9ydCBzdGF0ZW1lbnRzIHdpdGggc2lkZS1lZmZlY3QuXG4gIFwibm8taW1wb3J0LXNpZGUtZWZmZWN0XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgZXhwbGljaXQgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIHZhcmlhYmxlcyBvciBwYXJhbWV0ZXJzIGluaXRpYWxpemVkIHRvIGEgbnVtYmVyLFxuICAvLyBzdHJpbmcsIG9yIGJvb2xlYW4uXG4gIFwibm8taW5mZXJyYWJsZS10eXBlc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGludGVybmFsIGBtb2R1bGVgLlxuICBcIm5vLWludGVybmFsLW1vZHVsZVwiOiB0cnVlLFxuICAvLyBXYXJucyBvbiB1c2Ugb2YgYCR7YCBpbiBub24tdGVtcGxhdGUgc3RyaW5ncy5cbiAgXCJuby1pbnZhbGlkLXRlbXBsYXRlLXN0cmluZ3NcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHVzaW5nIHRoZSBgdGhpc2Aga2V5d29yZCBvdXRzaWRlIG9mIGNsYXNzZXMuXG4gIFwibm8taW52YWxpZC10aGlzXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgaXJyZWd1bGFyIHdoaXRlc3BhY2Ugb3V0c2lkZSBvZiBzdHJpbmdzIGFuZCBjb21tZW50c1xuICBcIm5vLWlycmVndWxhci13aGl0ZXNwYWNlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB0aGUgdXNlIGNvbnN0YW50IG51bWJlciB2YWx1ZXMgb3V0c2lkZSBvZiB2YXJpYWJsZSBhc3NpZ25tZW50cy5cbiAgXCJuby1tYWdpYy1udW1iZXJzXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgbWVyZ2VhYmxlIG5hbWVzcGFjZXMgaW4gdGhlIHNhbWUgZmlsZS5cbiAgXCJuby1tZXJnZWFibGUtbmFtZXNwYWNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgdXNlIG9mIGludGVybmFsIGBtb2R1bGVgcyBhbmQgYG5hbWVzcGFjZWBzLlxuICBcIm5vLW5hbWVzcGFjZVwiOiBmYWxzZSxcbiAgLy8gV2FybnMgb24gYXBwYXJlbnQgYXR0ZW1wdHMgdG8gZGVmaW5lIGNvbnN0cnVjdG9ycyBmb3IgaW50ZXJmYWNlcyBvciBgbmV3YCBmb3IgY2xhc3Nlcy5cbiAgXCJuby1taXN1c2VkLW5ld1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgbm9uLW51bGwgYXNzZXJ0aW9ucy5cbiAgXCJuby1ub24tbnVsbC1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyB1c2Ugb2YgdGhlIGBudWxsYCBrZXl3b3JkIGxpdGVyYWwuXG4gIFwibm8tbnVsbC1rZXl3b3JkXCI6IGZhbHNlLFxuICAvLyBGb3JiaWRzIGFuIG9iamVjdCBsaXRlcmFsIHRvIGFwcGVhciBpbiBhIHR5cGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uIENhc3RpbmcgdG8gYGFueWAgaXMgc3RpbGwgYWxsb3dlZC5cbiAgXCJuby1vYmplY3QtbGl0ZXJhbC10eXBlLWFzc2VydGlvblwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIHBhcmFtZXRlciBwcm9wZXJ0aWVzIGluIGNsYXNzIGNvbnN0cnVjdG9ycy5cbiAgXCJuby1wYXJhbWV0ZXItcHJvcGVydGllc1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgcmVhc3NpZ25pbmcgcGFyYW1ldGVycy5cbiAgXCJuby1wYXJhbWV0ZXItcmVhc3NpZ25tZW50XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYC8vLyA8cmVmZXJlbmNlIHBhdGg9PmAgaW1wb3J0cyAodXNlIEVTNi1zdHlsZSBpbXBvcnRzIGluc3RlYWQpLlxuICBcIm5vLXJlZmVyZW5jZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW52b2NhdGlvbiBvZiBgcmVxdWlyZSgpYC5cbiAgXCJuby1yZXF1aXJlLWltcG9ydHNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHVubmVjZXNzYXJ5IGByZXR1cm4gYXdhaXRgLlxuICBcIm5vLXJldHVybi1hd2FpdFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgc2hhZG93aW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgXCJuby1zaGFkb3dlZC12YXJpYWJsZVwiOiBmYWxzZSxcbiAgLy8gRm9yYmlkcyBhcnJheSBsaXRlcmFscyB0byBjb250YWluIG1pc3NpbmcgZWxlbWVudHMuXG4gIFwibm8tc3BhcnNlLWFycmF5c1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgb2JqZWN0IGFjY2VzcyB2aWEgc3RyaW5nIGxpdGVyYWxzLlxuICBcIm5vLXN0cmluZy1saXRlcmFsXCI6IGZhbHNlLFxuICAvLyBGbGFncyB0aHJvd2luZyBwbGFpbiBzdHJpbmdzIG9yIGNvbmNhdGVuYXRpb25zIG9mIHN0cmluZ3MuXG4gIFwibm8tc3RyaW5nLXRocm93XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBpbXBvcnRpbmcgYW55IHN1Ym1vZHVsZS5cbiAgXCJuby1zdWJtb2R1bGUtaW1wb3J0c1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGZhbGxpbmcgdGhyb3VnaCBjYXNlIHN0YXRlbWVudHMuXG4gIFwibm8tc3dpdGNoLWNhc2UtZmFsbC10aHJvdWdoXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIGB0aGlzYC5cbiAgXCJuby10aGlzLWFzc2lnbm1lbnRcIjogW3RydWUsIHtcImFsbG93LWRlc3RydWN0dXJpbmdcIjogdHJ1ZX1dLFxuICAvLyBEaXNhbGxvd3MgdHJhaWxpbmcgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgXCJuby10cmFpbGluZy13aGl0ZXNwYWNlXCI6IHRydWUsXG4gIC8vIFJlcGxhY2VzIGB4ID0+IGYoeClgIHdpdGgganVzdCBgZmAuXG4gIFwibm8tdW5uZWNlc3NhcnktY2FsbGJhY2std3JhcHBlclwiOiB0cnVlLFxuICAvLyBGb3JiaWRzIGEg4oCYdmFy4oCZL+KAmWxldOKAmSBzdGF0ZW1lbnQgb3IgZGVzdHJ1Y3R1cmluZyBpbml0aWFsaXplciB0byBiZSBpbml0aWFsaXplZCB0byDigJh1bmRlZmluZWTigJkuXG4gIFwibm8tdW5uZWNlc3NhcnktaW5pdGlhbGl6ZXJcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBjb250cm9sIGZsb3cgc3RhdGVtZW50cywgc3VjaCBhcyByZXR1cm4sIGNvbnRpbnVlLCBicmVhayBhbmQgdGhyb3dzIGluIGZpbmFsbHlcbiAgLy8gYmxvY2tzLlxuICBcIm5vLXVuc2FmZS1maW5hbGx5XCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bnVzZWQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLlxuICBcIm5vLXVudXNlZC1leHByZXNzaW9uXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1c2FnZSBvZiB0aGUgYHZhcmAga2V5d29yZC5cbiAgXCJuby12YXIta2V5d29yZFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdGhlIHVzZSBvZiByZXF1aXJlIHN0YXRlbWVudHMgZXhjZXB0IGluIGltcG9ydCBzdGF0ZW1lbnRzLlxuICBcIm5vLXZhci1yZXF1aXJlc1wiOiB0cnVlLFxuICAvLyBDaGVja3MgdGhhdCBkZWNpbWFsIGxpdGVyYWxzIHNob3VsZCBiZWdpbiB3aXRoIGAwLmAgaW5zdGVhZCBvZiBqdXN0IGAuYCwgYW5kIHNob3VsZCBub3QgZW5kIHdpdGggYSB0cmFpbGluZyBgMGAuXG4gIC8vIFRPRE86IEVuYWJsZSBpdCB3aGVuIHRoZSBvcHRpb24gdG8gZW5mb3JjZSBsb3dlcmNhc2UgaGV4IGlzIGF2YWlsYWJsZVxuICBcIm51bWJlci1saXRlcmFsLWZvcm1hdFwiOiBmYWxzZSxcbiAgLy8gRW5mb3JjZXMgY29uc2lzdGVudCBvYmplY3QgbGl0ZXJhbCBwcm9wZXJ0eSBxdW90ZSBzdHlsZS5cbiAgXCJvYmplY3QtbGl0ZXJhbC1rZXktcXVvdGVzXCI6IFt0cnVlLCBcImNvbnNpc3RlbnQtYXMtbmVlZGVkXCJdLFxuICAvLyBFbmZvcmNlcyB1c2Ugb2YgRVM2IG9iamVjdCBsaXRlcmFsIHNob3J0aGFuZCB3aGVuIHBvc3NpYmxlLlxuICBcIm9iamVjdC1saXRlcmFsLXNob3J0aGFuZFwiOiB0cnVlLFxuICAvLyBSZXF1aXJlcyBrZXlzIGluIG9iamVjdCBsaXRlcmFscyB0byBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuXG4gIFwib2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGUgc3BlY2lmaWVkIHRva2VucyB0byBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBleHByZXNzaW9uIHByZWNlZGluZyB0aGVtLlxuICBcIm9uZS1saW5lXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIENoZWNrcyB0aGF0IGBjYXRjaGAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYHRyeWAuXG4gICAgXCJjaGVjay1jYXRjaFwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGBmaW5hbGx5YCBpcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBjbG9zaW5nIGJyYWNlIGZvciBgY2F0Y2hgLlxuICAgIFwiY2hlY2stZmluYWxseVwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGBlbHNlYCBpcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBjbG9zaW5nIGJyYWNlIGZvciBgaWZgLlxuICAgIFwiY2hlY2stZWxzZVwiLFxuICAgIC8vIENoZWNrcyB0aGF0IGFuIG9wZW4gYnJhY2UgZmFsbHMgb24gdGhlIHNhbWUgbGluZSBhcyBpdHMgcHJlY2VkaW5nIGV4cHJlc3Npb24uXG4gICAgXCJjaGVjay1vcGVuLWJyYWNlXCIsXG4gICAgLy8gQ2hlY2tzIHByZWNlZGluZyB3aGl0ZXNwYWNlIGZvciB0aGUgc3BlY2lmaWVkIHRva2Vucy5cbiAgICBcImNoZWNrLXdoaXRlc3BhY2VcIixcbiAgXSxcbiAgLy8gRGlzYWxsb3dzIG11bHRpcGxlIHZhcmlhYmxlIGRlZmluaXRpb25zIGluIHRoZSBzYW1lIGRlY2xhcmF0aW9uIHN0YXRlbWVudC5cbiAgXCJvbmUtdmFyaWFibGUtcGVyLWRlY2xhcmF0aW9uXCI6IFt0cnVlLCBcImlnbm9yZS1mb3ItbG9vcFwiXSxcbiAgLy8gRGlzYWxsb3dzIHRyYWRpdGlvbmFsIChub24tYXJyb3cpIGZ1bmN0aW9uIGV4cHJlc3Npb25zLlxuICBcIm9ubHktYXJyb3ctZnVuY3Rpb25zXCI6IGZhbHNlLFxuICAvLyBSZXF1aXJlcyB0aGF0IGltcG9ydCBzdGF0ZW1lbnRzIGJlIGFscGhhYmV0aXplZC5cbiAgXCJvcmRlcmVkLWltcG9ydHNcIjogdHJ1ZSxcbiAgLy8gUmVjb21tZW5kcyB0byB1c2UgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGluc3RlYWQgb2YgYXNzaWduaW5nIHRvIHRoZSBzYW1lIHRoaW5nIGluIGVhY2ggYnJhbmNoIG9mIGFuIGlmXG4gIC8vIHN0YXRlbWVudC5cbiAgXCJwcmVmZXItY29uZGl0aW9uYWwtZXhwcmVzc2lvblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdXNlIGNvbnN0IGluc3RlYWQgb2YgbGV0IGlmIHBvc3NpYmxlLlxuICBcInByZWZlci1jb25zdFwiOiB0cnVlLFxuICAvLyBSZWNvbW1lbmRzIGEg4oCYZm9yLW9m4oCZIGxvb3Agb3ZlciBhIHN0YW5kYXJkIOKAmGZvcuKAmSBsb29wIGlmIHRoZSBpbmRleCBpcyBvbmx5IHVzZWQgdG8gYWNjZXNzXG4gIC8vIHRoZSBhcnJheSBiZWluZyBpdGVyYXRlZC5cbiAgXCJwcmVmZXItZm9yLW9mXCI6IHRydWUsXG4gIC8vIFdhcm5zIGZvciBjbGFzcyBtZXRob2RzIHRoYXQgZG8gbm90IHVzZSBgdGhpc2AuXG4gIFwicHJlZmVyLWZ1bmN0aW9uLW92ZXItbWV0aG9kXCI6IGZhbHNlLFxuICAvLyBQcmVmZXIgYGZvbygpOiB2b2lkYCBvdmVyIGBmb286ICgpID0+IHZvaWRgIGluIGludGVyZmFjZXMgYW5kIHR5cGVzLlxuICBcInByZWZlci1tZXRob2Qtc2lnbmF0dXJlXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIEVTMjAxNSBvYmplY3Qgc3ByZWFkIG9wZXJhdG9yIG92ZXIgYE9iamVjdC5hc3NpZ24oKWAgd2hlcmUgYXBwcm9wcmlhdGUuXG4gIFwicHJlZmVyLW9iamVjdC1zcHJlYWRcIjogdHJ1ZSxcbiAgLy8gUHJlZmVyIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIGFuIGBpZmAgc3RhdGVtZW50IHdpdGggc2ltcGxlIGA9PT1gIGNvbXBhcmlzb25zLlxuICBcInByZWZlci1zd2l0Y2hcIjogdHJ1ZSxcbiAgLy8gUHJlZmVyIGEgdGVtcGxhdGUgZXhwcmVzc2lvbiBvdmVyIHN0cmluZyBsaXRlcmFsIGNvbmNhdGVuYXRpb24uXG4gIFwicHJlZmVyLXRlbXBsYXRlXCI6IFt0cnVlLCBcImFsbG93LXNpbmdsZS1jb25jYXRcIl0sXG4gIC8vIFJlcXVpcmVzIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzIGZvciBzdHJpbmcgbGl0ZXJhbHMuXG4gIFwicXVvdGVtYXJrXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIEVuZm9yY2VzIGRvdWJsZSBxdW90ZXMuXG4gICAgXCJkb3VibGVcIixcbiAgICAvLyBGb3JiaWRzIHNpbmdsZS1saW5lIHVudGFnZ2VkIHRlbXBsYXRlIHN0cmluZ3MgdGhhdCBkbyBub3QgY29udGFpbiBzdHJpbmcgaW50ZXJwb2xhdGlvbnMuXG4gICAgXCJhdm9pZC10ZW1wbGF0ZVwiLFxuICAgIC8vIEFsbG93cyB5b3UgdG8gdXNlIHRoZSDigJxvdGhlcuKAnSBxdW90ZW1hcmsgaW4gY2FzZXMgd2hlcmUgZXNjYXBpbmcgd291bGQgbm9ybWFsbHkgYmUgcmVxdWlyZWQuXG4gICAgXCJhdm9pZC1lc2NhcGVcIixcbiAgXSxcbiAgLy8gUmVxdWlyZXMgdGhlIHJhZGl4IHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWQgd2hlbiBjYWxsaW5nIGBwYXJzZUludGAuXG4gIFwicmFkaXhcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgY29uc2lzdGVudCBzZW1pY29sb24gdXNhZ2UgYXQgdGhlIGVuZCBvZiBldmVyeSBzdGF0ZW1lbnQuXG4gIFwic2VtaWNvbG9uXCI6IFt0cnVlLCBcImFsd2F5c1wiXSxcbiAgLy8gUmVxdWlyZSBvciBkaXNhbGxvdyBhIHNwYWNlIGJlZm9yZSBmdW5jdGlvbiBwYXJlbnRoZXNpc1xuICBcInNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlblwiOiBbXG4gICAgdHJ1ZSxcbiAgICB7XG4gICAgICBhbm9ueW1vdXM6IFwiYWx3YXlzXCIsXG4gICAgICBuYW1lZDogXCJuZXZlclwiLFxuICAgICAgYXN5bmNBcnJvdzogXCJhbHdheXNcIixcbiAgICAgIG1ldGhvZDogXCJuZXZlclwiLFxuICAgICAgY29uc3RydWN0b3I6IFwibmV2ZXJcIixcbiAgICB9LFxuICBdLFxuICAvLyBFbmZvcmNlcyBzcGFjZXMgd2l0aGluIHBhcmVudGhlc2VzIG9yIGRpc2FsbG93IHRoZW0uXG4gIFwic3BhY2Utd2l0aGluLXBhcmVuc1wiOiBbdHJ1ZSwgMF0sXG4gIC8vIFJlcXVpcmVzIGEgYGRlZmF1bHRgIGNhc2UgaW4gYWxsIGBzd2l0Y2hgIHN0YXRlbWVudHMuXG4gIFwic3dpdGNoLWRlZmF1bHRcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGZpbmFsIGNsYXVzZSBvZiBhIHN3aXRjaCBzdGF0ZW1lbnQgZW5kcyBpbiBgYnJlYWs7YC5cbiAgXCJzd2l0Y2gtZmluYWwtYnJlYWtcIjogW3RydWUsIFwiYWx3YXlzXCJdLFxuICAvLyBSZXF1aXJlcyBvciBkaXNhbGxvd3MgdHJhaWxpbmcgY29tbWFzIGluIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIGRlc3RydWN0dXJpbmdcbiAgLy8gYXNzaWdubWVudHMsIGZ1bmN0aW9uIGFuZCB0dXBsZSB0eXBpbmdzLCBuYW1lZCBpbXBvcnRzIGFuZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLlxuICBcInRyYWlsaW5nLWNvbW1hXCI6IFtcbiAgICB0cnVlLFxuICAgIHtcbiAgICAgIC8vIENoZWNrcyBtdWx0aS1saW5lIG9iamVjdCBsaXRlcmFscy5cbiAgICAgIG11bHRpbGluZTogXCJhbHdheXNcIixcbiAgICAgIC8vIENoZWNrcyBzaW5nbGUtbGluZSBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICBzaW5nbGVsaW5lOiBcIm5ldmVyXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gUmVxdWlyZXMgYD09PWAgYW5kIGAhPT1gIGluIHBsYWNlIG9mIGA9PWAgYW5kIGAhPWAuXG4gIFwidHJpcGxlLWVxdWFsc1wiOiB0cnVlLFxuICAvLyBDaGVja3MgdGhhdCB0eXBlIGxpdGVyYWwgbWVtYmVycyBhcmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuIEVuZm9yY2VzIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGZvciBtdWx0aWxpbmUgdHlwZVxuICAvLyBsaXRlcmFscy5cbiAgXCJ0eXBlLWxpdGVyYWwtZGVsaW1pdGVyXCI6IHRydWUsXG4gIC8vIFJlcXVpcmVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gZXhpc3QuXG4gIFwidHlwZWRlZlwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVjayByZXR1cm4gdHlwZXMgb2YgaW50ZXJmYWNlIHByb3BlcnRpZXMuXG4gICAgXCJwcm9wZXJ0eS1kZWNsYXJhdGlvblwiLFxuICAgIC8vIENoZWNrIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCIsXG4gICAgLy8gQ2hlY2sgbWVtYmVyIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cbiAgICBcIm1lbWJlci12YXJpYWJsZS1kZWNsYXJhdGlvblwiLFxuICBdLFxuICAvLyBSZXF1aXJlcyBvciBkaXNhbGxvd3Mgd2hpdGVzcGFjZSBmb3IgdHlwZSBkZWZpbml0aW9ucy5cbiAgXCJ0eXBlZGVmLXdoaXRlc3BhY2VcIjogW1xuICAgIHRydWUsXG4gICAgLy8gU3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlIHNob3VsZCBiZSB0byB0aGUgX2xlZnRfIG9mIGEgdHlwZWRlZiBjb2xvbi5cbiAgICB7XG4gICAgICBcImNhbGwtc2lnbmF0dXJlXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJpbmRleC1zaWduYXR1cmVcIjogXCJub3NwYWNlXCIsXG4gICAgICBcInBhcmFtZXRlclwiOiBcIm5vc3BhY2VcIixcbiAgICAgIFwicHJvcGVydHktZGVjbGFyYXRpb25cIjogXCJub3NwYWNlXCIsXG4gICAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCI6IFwibm9zcGFjZVwiLFxuICAgIH0sXG4gICAgLy8gU3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlIHNob3VsZCBiZSB0byB0aGUgX3JpZ2h0XyBvZiBhIHR5cGVkZWYgY29sb24uXG4gICAge1xuICAgICAgXCJjYWxsLXNpZ25hdHVyZVwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcImluZGV4LXNpZ25hdHVyZVwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInBhcmFtZXRlclwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInByb3BlcnR5LWRlY2xhcmF0aW9uXCI6IFwib25lc3BhY2VcIixcbiAgICAgIFwidmFyaWFibGUtZGVjbGFyYXRpb25cIjogXCJvbmVzcGFjZVwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIE1ha2VzIHN1cmUgcmVzdWx0IG9mIGB0eXBlb2ZgIGlzIGNvbXBhcmVkIHRvIGNvcnJlY3Qgc3RyaW5nIHZhbHVlcy5cbiAgXCJ0eXBlb2YtY29tcGFyZVwiOiB0cnVlLFxuICAvLyBXYXJucyBmb3IgYW55IHR3byBvdmVybG9hZHMgdGhhdCBjb3VsZCBiZSB1bmlmaWVkIGludG8gb25lIGJ5IHVzaW5nIGEgdW5pb24gb3IgYW4gb3B0aW9uYWwvcmVzdCBwYXJhbWV0ZXIuXG4gIFwidW5pZmllZC1zaWduYXR1cmVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIHVzZSBvZiB0aGUgYGlzTmFOKClgIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciBOYU4gcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIGEgY29tcGFyaXNvblxuICAvLyB0byB0aGUgYE5hTmAgY29uc3RhbnQuXG4gIFwidXNlLWlzbmFuXCI6IHRydWUsXG4gIC8vIENoZWNrcyB2YXJpYWJsZSBuYW1lcyBmb3IgdmFyaW91cyBlcnJvcnMuXG4gIFwidmFyaWFibGUtbmFtZVwiOiBbdHJ1ZSwgXCJjaGVjay1mb3JtYXRcIiwgXCJhbGxvdy1sZWFkaW5nLXVuZGVyc2NvcmVcIl0sXG4gIC8vIEVuZm9yY2VzIHdoaXRlc3BhY2Ugc3R5bGUgY29udmVudGlvbnMuXG4gIFwid2hpdGVzcGFjZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVja3MgYnJhbmNoaW5nIHN0YXRlbWVudHMgKGBpZmAvYGVsc2VgL2Zgb3JgL2B3aGlsZWApIGFyZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLlxuICAgIFwiY2hlY2stYnJhbmNoXCIsXG4gICAgLy8gQ2hlY2tzIHRoYXQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGhhdmUgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGVxdWFscyB0b2tlbi5cbiAgICBcImNoZWNrLWRlY2xcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYXJvdW5kIG9wZXJhdG9yIHRva2Vucy5cbiAgICBcImNoZWNrLW9wZXJhdG9yXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGluIGltcG9ydCAmIGV4cG9ydCBzdGF0ZW1lbnRzLlxuICAgIFwiY2hlY2stbW9kdWxlXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGFmdGVyIHNlcGFyYXRvciB0b2tlbnMgKGAsYC9gO2ApLlxuICAgIFwiY2hlY2stc2VwYXJhdG9yXCIsXG4gICAgLy8gQ2hlY2tzIHRoYXQgdGhlcmUgaXMgbm8gd2hpdGVzcGFjZSBhZnRlciByZXN0L3NwcmVhZCBvcGVyYXRvciAoYC4uLmApLlxuICAgIFwiY2hlY2stcmVzdC1zcHJlYWRcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmVmb3JlIGEgdmFyaWFibGUgdHlwZSBzcGVjaWZpY2F0aW9uLlxuICAgIFwiY2hlY2stdHlwZVwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZXR3ZWVuIGEgdHlwZWNhc3QgYW5kIGl0cyB0YXJnZXQuXG4gICAgXCJjaGVjay10eXBlY2FzdFwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZXR3ZWVuIHR5cGUgb3BlcmF0b3JzIGB8YCBhbmQgYCZgLlxuICAgIFwiY2hlY2stdHlwZS1vcGVyYXRvclwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBiZWZvcmUgdGhlIG9wZW5pbmcgYnJhY2Ugb2YgYSBibG9jay5cbiAgICBcImNoZWNrLXByZWJsb2NrXCIsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UWVBFRF9UU0xJTlRfUlVMRVM6IFRzbGludENvbmZpZ3VyYXRpb24uUmF3UnVsZXNDb25maWcgPSB7XG4gIC4uLkRFRkFVTFRfVU5UWVBFRF9UU0xJTlRfUlVMRVMsXG4gIC8vIFdhcm5zIGZvciBhbiBhd2FpdGVkIHZhbHVlIHRoYXQgaXMgbm90IGEgUHJvbWlzZS5cbiAgXCJhd2FpdC1wcm9taXNlXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGRvY3VtZW50YXRpb24gZm9yIGltcG9ydGFudCBpdGVtcyBiZSBmaWxsZWQgb3V0LlxuICBcImNvbXBsZXRlZC1kb2NzXCI6IFt0cnVlLCBbXCJjbGFzc2VzXCIsIFwiZnVuY3Rpb25zXCJdXSxcbiAgLy8gV2FybnMgd2hlbiBkZXByZWNhdGVkIEFQSXMgYXJlIHVzZWQuXG4gIFwiZGVwcmVjYXRpb25cIjogdHJ1ZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCBhIGRlZmF1bHQgaW1wb3J0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZGVjbGFyYXRpb24gaXQgaW1wb3J0cy4gRG9lcyBub3RoaW5nIGZvciBhbm9ueW1vdXNcbiAgLy8gZGVmYXVsdCBleHBvcnRzLlxuICBcIm1hdGNoLWRlZmF1bHQtZXhwb3J0LW5hbWVcIjogZmFsc2UsXG4gIC8vIFdhcm5zIG9uIGNvbXBhcmlzb24gdG8gYSBib29sZWFuIGxpdGVyYWwsIGFzIGluIGB4ID09PSB0cnVlYC5cbiAgXCJuby1ib29sZWFuLWxpdGVyYWwtY29tcGFyZVwiOiB0cnVlLFxuICAvLyBQcm9taXNlcyByZXR1cm5lZCBieSBmdW5jdGlvbnMgbXVzdCBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuXG4gIFwibm8tZmxvYXRpbmctcHJvbWlzZXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IHdpdGggYSBmb3ItaW4gbG9vcC5cbiAgXCJuby1mb3ItaW4tYXJyYXlcIjogdHJ1ZSxcbiAgLy8gRG