@fenge/eslint-config 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,474 @@
1
+ import * as fengePlugin from "@fenge/eslint-plugin";
2
+ import tsPlugin from "@typescript-eslint/eslint-plugin";
3
+ import confusingKeys from "confusing-browser-globals";
4
+ import esxPlugin from "eslint-plugin-es-x";
5
+ import * as esmPlugin from "eslint-plugin-esm";
6
+ import fpPlugin from "eslint-plugin-fp";
7
+ import importPlugin from "eslint-plugin-import";
8
+ import nPlugin from "eslint-plugin-n";
9
+ import promisePlugin from "eslint-plugin-promise";
10
+ import reactPlugin from "eslint-plugin-react";
11
+ import reactHooksPlugin from "eslint-plugin-react-hooks";
12
+ import simpleImportSortPlugin from "eslint-plugin-simple-import-sort";
13
+ import sonarjsPlugin from "eslint-plugin-sonarjs";
14
+ import unicornPlugin from "eslint-plugin-unicorn";
15
+ import globals from "globals";
16
+ export function javascript() {
17
+ // copied from https://github.com/standard/eslint-config-standard/blob/master/src/index.ts
18
+ // prettier-ignore
19
+ const standardConfigRules = {
20
+ 'no-var': 'error',
21
+ 'object-shorthand': ['error', 'properties'],
22
+ 'accessor-pairs': ['error', { setWithoutGet: true, enforceForClassMembers: true }],
23
+ // 'array-bracket-spacing': ['error', 'never'],
24
+ 'array-callback-return': ['error', {
25
+ allowImplicit: false,
26
+ checkForEach: false
27
+ }],
28
+ // 'arrow-spacing': ['error', { before: true, after: true }],
29
+ // 'block-spacing': ['error', 'always'],
30
+ // 'brace-style': ['error', '1tbs', { allowSingleLine: true }],
31
+ camelcase: ['error', {
32
+ allow: ['^UNSAFE_'],
33
+ properties: 'never',
34
+ ignoreGlobals: true
35
+ }],
36
+ // 'comma-dangle': ['error', {
37
+ // arrays: 'never',
38
+ // objects: 'never',
39
+ // imports: 'never',
40
+ // exports: 'never',
41
+ // functions: 'never'
42
+ // }],
43
+ // 'comma-spacing': ['error', { before: false, after: true }],
44
+ // 'comma-style': ['error', 'last'],
45
+ // 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }],
46
+ 'constructor-super': 'error',
47
+ // curly: ['error', 'multi-line'],
48
+ 'default-case-last': 'error',
49
+ // 'dot-location': ['error', 'property'],
50
+ // 'dot-notation': ['error', { allowKeywords: true }], // TODO: This should be enabled. Disable it as it conflicts with ts when enabling ts-check
51
+ // 'eol-last': 'error',
52
+ eqeqeq: ['error', 'always', { null: 'ignore' }],
53
+ // 'func-call-spacing': ['error', 'never'],
54
+ // 'generator-star-spacing': ['error', { before: true, after: true }],
55
+ // indent: ['error', 2, {
56
+ // SwitchCase: 1,
57
+ // VariableDeclarator: 1,
58
+ // outerIIFEBody: 1,
59
+ // MemberExpression: 1,
60
+ // FunctionDeclaration: { parameters: 1, body: 1 },
61
+ // FunctionExpression: { parameters: 1, body: 1 },
62
+ // CallExpression: { arguments: 1 },
63
+ // ArrayExpression: 1,
64
+ // ObjectExpression: 1,
65
+ // ImportDeclaration: 1,
66
+ // flatTernaryExpressions: false,
67
+ // ignoreComments: false,
68
+ // ignoredNodes: [
69
+ // 'TemplateLiteral *',
70
+ // 'JSXElement',
71
+ // 'JSXElement > *',
72
+ // 'JSXAttribute',
73
+ // 'JSXIdentifier',
74
+ // 'JSXNamespacedName',
75
+ // 'JSXMemberExpression',
76
+ // 'JSXSpreadAttribute',
77
+ // 'JSXExpressionContainer',
78
+ // 'JSXOpeningElement',
79
+ // 'JSXClosingElement',
80
+ // 'JSXFragment',
81
+ // 'JSXOpeningFragment',
82
+ // 'JSXClosingFragment',
83
+ // 'JSXText',
84
+ // 'JSXEmptyExpression',
85
+ // 'JSXSpreadChild'
86
+ // ],
87
+ // offsetTernaryExpressions: true
88
+ // }],
89
+ // 'key-spacing': ['error', { beforeColon: false, afterColon: true }],
90
+ // 'keyword-spacing': ['error', { before: true, after: true }],
91
+ 'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }],
92
+ // 'multiline-ternary': ['error', 'always-multiline'],
93
+ 'new-cap': ['error', { newIsCap: true, capIsNew: false, properties: true }],
94
+ // 'new-parens': 'error',
95
+ 'no-array-constructor': 'error',
96
+ 'no-async-promise-executor': 'error',
97
+ 'no-caller': 'error',
98
+ 'no-case-declarations': 'error',
99
+ 'no-class-assign': 'error',
100
+ 'no-compare-neg-zero': 'error',
101
+ 'no-cond-assign': 'error',
102
+ 'no-const-assign': 'error',
103
+ 'no-constant-condition': ['error', { checkLoops: false }],
104
+ 'no-control-regex': 'error',
105
+ 'no-debugger': 'error',
106
+ 'no-delete-var': 'error',
107
+ 'no-dupe-args': 'error',
108
+ 'no-dupe-class-members': 'error',
109
+ 'no-dupe-keys': 'error',
110
+ 'no-duplicate-case': 'error',
111
+ 'no-useless-backreference': 'error',
112
+ 'no-empty': ['error', { allowEmptyCatch: true }],
113
+ 'no-empty-character-class': 'error',
114
+ 'no-empty-pattern': 'error',
115
+ 'no-eval': 'error',
116
+ 'no-ex-assign': 'error',
117
+ 'no-extend-native': 'error',
118
+ 'no-extra-bind': 'error',
119
+ 'no-extra-boolean-cast': 'error',
120
+ // 'no-extra-parens': ['error', 'functions'],
121
+ 'no-fallthrough': 'error',
122
+ // 'no-floating-decimal': 'error',
123
+ 'no-func-assign': 'error',
124
+ 'no-global-assign': 'error',
125
+ 'no-implied-eval': 'error',
126
+ 'no-import-assign': 'error',
127
+ 'no-invalid-regexp': 'error',
128
+ 'no-irregular-whitespace': 'error',
129
+ 'no-iterator': 'error',
130
+ 'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
131
+ 'no-lone-blocks': 'error',
132
+ 'no-loss-of-precision': 'error',
133
+ 'no-misleading-character-class': 'error',
134
+ 'no-prototype-builtins': 'error',
135
+ 'no-useless-catch': 'error',
136
+ // 'no-mixed-operators': ['error', {
137
+ // groups: [
138
+ // ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
139
+ // ['&&', '||'],
140
+ // ['in', 'instanceof']
141
+ // ],
142
+ // allowSamePrecedence: true
143
+ // }],
144
+ // 'no-mixed-spaces-and-tabs': 'error',
145
+ // 'no-multi-spaces': 'error',
146
+ 'no-multi-str': 'error',
147
+ // 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
148
+ 'no-new': 'error',
149
+ 'no-new-func': 'error',
150
+ 'no-new-object': 'error',
151
+ 'no-new-symbol': 'error',
152
+ 'no-new-wrappers': 'error',
153
+ 'no-obj-calls': 'error',
154
+ 'no-octal': 'error',
155
+ 'no-octal-escape': 'error',
156
+ 'no-proto': 'error',
157
+ 'no-redeclare': ['error', { builtinGlobals: false }],
158
+ 'no-regex-spaces': 'error',
159
+ 'no-return-assign': ['error', 'except-parens'],
160
+ 'no-self-assign': ['error', { props: true }],
161
+ 'no-self-compare': 'error',
162
+ 'no-sequences': 'error',
163
+ 'no-shadow-restricted-names': 'error',
164
+ 'no-sparse-arrays': 'error',
165
+ // 'no-tabs': 'error',
166
+ 'no-template-curly-in-string': 'error',
167
+ 'no-this-before-super': 'error',
168
+ 'no-throw-literal': 'error',
169
+ // 'no-trailing-spaces': 'error',
170
+ 'no-undef': 'error',
171
+ // 'no-undef-init': 'error', // It conflict with `init-declarations`
172
+ // 'no-unexpected-multiline': 'error',
173
+ 'no-unmodified-loop-condition': 'error',
174
+ 'no-unneeded-ternary': ['error', { defaultAssignment: false }],
175
+ 'no-unreachable': 'error',
176
+ 'no-unreachable-loop': 'error',
177
+ 'no-unsafe-finally': 'error',
178
+ 'no-unsafe-negation': 'error',
179
+ 'no-unused-expressions': ['error', {
180
+ allowShortCircuit: true,
181
+ allowTernary: true,
182
+ allowTaggedTemplates: true
183
+ }],
184
+ 'no-unused-vars': ['error', {
185
+ args: 'none',
186
+ caughtErrors: 'none',
187
+ ignoreRestSiblings: true,
188
+ vars: 'all'
189
+ }],
190
+ 'no-use-before-define': ['error', { functions: false, classes: false, variables: false }],
191
+ 'no-useless-call': 'error',
192
+ 'no-useless-computed-key': 'error',
193
+ 'no-useless-constructor': 'error',
194
+ 'no-useless-escape': 'error',
195
+ 'no-useless-rename': 'error',
196
+ 'no-useless-return': 'error',
197
+ 'no-void': 'error',
198
+ // 'no-whitespace-before-property': 'error',
199
+ 'no-with': 'error',
200
+ // 'object-curly-newline': ['error', { multiline: true, consistent: true }],
201
+ // 'object-curly-spacing': ['error', 'always'],
202
+ // 'object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }],
203
+ 'one-var': ['error', { initialized: 'never' }],
204
+ // 'operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before', '|>': 'before' } }],
205
+ // 'padded-blocks': ['error', { blocks: 'never', switches: 'never', classes: 'never' }],
206
+ 'prefer-const': ['error', { destructuring: 'all' }],
207
+ 'prefer-promise-reject-errors': 'error',
208
+ 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
209
+ // 'quote-props': ['error', 'as-needed'],
210
+ // quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: false }],
211
+ // 'rest-spread-spacing': ['error', 'never'],
212
+ // semi: ['error', 'never'],
213
+ // 'semi-spacing': ['error', { before: false, after: true }],
214
+ // 'space-before-blocks': ['error', 'always'],
215
+ // 'space-before-function-paren': ['error', 'always'],
216
+ // 'space-in-parens': ['error', 'never'],
217
+ // 'space-infix-ops': 'error',
218
+ // 'space-unary-ops': ['error', { words: true, nonwords: false }],
219
+ 'spaced-comment': ['error', 'always', {
220
+ line: { markers: ['*package', '!', '/', ',', '='] },
221
+ block: { balanced: true, markers: ['*package', '!', ',', ':', '::', 'flow-include'], exceptions: ['*'] }
222
+ }],
223
+ 'symbol-description': 'error',
224
+ // 'template-curly-spacing': ['error', 'never'],
225
+ // 'template-tag-spacing': ['error', 'never'],
226
+ 'unicode-bom': ['error', 'never'],
227
+ 'use-isnan': ['error', {
228
+ enforceForSwitchCase: true,
229
+ enforceForIndexOf: true
230
+ }],
231
+ 'valid-typeof': ['error', { requireStringLiterals: true }],
232
+ // 'wrap-iife': ['error', 'any', { functionPrototypeMethods: true }],
233
+ // 'yield-star-spacing': ['error', 'both'],
234
+ yoda: ['error', 'never'],
235
+ 'import/export': 'error',
236
+ 'import/first': 'error',
237
+ 'import/no-absolute-path': ['error', { esmodule: true, commonjs: true, amd: false }],
238
+ 'import/no-duplicates': 'error',
239
+ 'import/no-named-default': 'error',
240
+ 'import/no-webpack-loader-syntax': 'error',
241
+ 'n/handle-callback-err': ['error', '^(err|error)$'],
242
+ 'n/no-callback-literal': 'error',
243
+ 'n/no-deprecated-api': 'error',
244
+ 'n/no-exports-assign': 'error',
245
+ 'n/no-new-require': 'error',
246
+ 'n/no-path-concat': 'error',
247
+ 'n/process-exit-as-throw': 'error',
248
+ 'promise/param-names': 'error'
249
+ };
250
+ return [
251
+ {
252
+ name: "fenge/javascript",
253
+ files: ["**/*.{js,cjs,mjs,jsx}"],
254
+ // https://eslint.org/docs/latest/use/configure/language-options
255
+ languageOptions: {
256
+ ecmaVersion: "latest",
257
+ sourceType: "module",
258
+ parserOptions: {
259
+ // TODO `ecmaVersion` and `sourceType` are no standard here. import/no-default-export required this
260
+ ecmaVersion: "latest",
261
+ sourceType: "module",
262
+ ecmaFeatures: {
263
+ jsx: true,
264
+ },
265
+ },
266
+ globals: {
267
+ ...Object.fromEntries(Object.entries(globals.browser)
268
+ .filter(([k]) => !confusingKeys.includes(k))
269
+ .filter(([k]) => !["self", "global"].includes(k))),
270
+ },
271
+ },
272
+ linterOptions: {
273
+ // noInlineConfig: true, // too strict
274
+ reportUnusedDisableDirectives: true,
275
+ },
276
+ plugins: {
277
+ fp: fpPlugin,
278
+ n: nPlugin,
279
+ import: importPlugin,
280
+ promise: promisePlugin,
281
+ react: reactPlugin,
282
+ "react-hooks": reactHooksPlugin,
283
+ sonarjs: sonarjsPlugin,
284
+ unicorn: unicornPlugin,
285
+ "es-x": esxPlugin,
286
+ esm: esmPlugin,
287
+ "simple-import-sort": simpleImportSortPlugin,
288
+ "@fenge": fengePlugin,
289
+ "@typescript-eslint": tsPlugin,
290
+ },
291
+ rules: {
292
+ // 1. standard config rules
293
+ ...standardConfigRules,
294
+ // 2. code style for a better readability
295
+ "arrow-body-style": ["error", "as-needed"],
296
+ "import/newline-after-import": ["error", { count: 1 }],
297
+ // Sort imports by prettier. Turn in off.
298
+ // "simple-import-sort/imports": [
299
+ // "error",
300
+ // { groups: [["^\\u0000", "^node:", "^@?\\w", "^", "^\\."]] },
301
+ // ],
302
+ "simple-import-sort/exports": "error",
303
+ "unicorn/prefer-node-protocol": "error",
304
+ "unicorn/escape-case": "error", // '\ud834' -> '\uD834'
305
+ // "unicorn/number-literal-case": "error", // 0XFF -> 0xFF // conflict with prettier
306
+ // 3. ban some syntaxes to reduce mistakes
307
+ "default-param-last": "error",
308
+ "func-name-matching": "error",
309
+ "getter-return": "error",
310
+ "init-declarations": "error",
311
+ "max-params": ["error", { max: 4 }],
312
+ "no-duplicate-imports": "error",
313
+ "no-empty-static-block": "error",
314
+ "no-empty-function": "error",
315
+ "no-implicit-coercion": [
316
+ "error",
317
+ { disallowTemplateShorthand: true, allow: ["!!"] },
318
+ ], // forbid code like `const num = +str`;
319
+ "no-invalid-this": "error",
320
+ "no-multi-assign": "error",
321
+ "no-param-reassign": "error",
322
+ "no-plusplus": "error",
323
+ "no-setter-return": "error",
324
+ "no-shadow": ["error", { ignoreOnInitialization: true }],
325
+ "no-unused-private-class-members": "error",
326
+ "prefer-arrow-callback": "error",
327
+ "prefer-exponentiation-operator": "error",
328
+ "prefer-object-has-own": "error",
329
+ "prefer-template": "error",
330
+ // es
331
+ "es-x/no-accessor-properties": "error",
332
+ "es-x/no-async-iteration": "error",
333
+ "es-x/no-generators": "error",
334
+ "es-x/no-legacy-object-prototype-accessor-methods": "error",
335
+ // esm
336
+ "esm/nearest-relative-path": "error",
337
+ "esm/no-directory-imports": "error",
338
+ "esm/no-dynamic-imports": "error",
339
+ "esm/no-git-ignored-imports": "error",
340
+ "esm/no-phantom-dep-imports": "error",
341
+ "esm/no-relative-parent-imports": "error",
342
+ "esm/no-rename-exports": "error",
343
+ "esm/no-rename-imports": "error",
344
+ "esm/no-side-effect-imports": "error",
345
+ "esm/no-ts-file-imports": "error",
346
+ // fp
347
+ "fp/no-arguments": "error",
348
+ "fp/no-delete": "error",
349
+ // import
350
+ "import/extensions": ["error", "always", { ignorePackages: true }],
351
+ "import/no-commonjs": [
352
+ "error",
353
+ {
354
+ allowRequire: false,
355
+ allowConditionalRequire: false,
356
+ allowPrimitiveModules: false,
357
+ },
358
+ ],
359
+ /**
360
+ * 1. The ESM specification didn’t say anything about interoperability with CommonJS. See: https://blog.andrewbran.ch/default-exports-in-commonjs-libraries/
361
+ * 2. Reexporting like `export * from 'foo'` will be difficult.
362
+ */
363
+ "import/no-default-export": "error",
364
+ "import/no-dynamic-require": "error",
365
+ "import/no-mutable-exports": "error", // forbid code like `export let count = 3`
366
+ "import/no-relative-packages": "error", // forbid to import module from other monorepo packages by relative paths
367
+ "import/no-self-import": "error",
368
+ // n
369
+ "n/prefer-global/buffer": ["error", "never"],
370
+ "n/prefer-global/console": "error",
371
+ "n/prefer-global/process": ["error", "never"],
372
+ "n/prefer-global/text-decoder": "error",
373
+ "n/prefer-global/text-encoder": "error",
374
+ "n/prefer-global/url": "error",
375
+ "n/prefer-global/url-search-params": "error",
376
+ // react
377
+ "react/jsx-key": "error",
378
+ "react/jsx-no-duplicate-props": "error",
379
+ "react/jsx-no-undef": "error",
380
+ // react-hooks
381
+ "react-hooks/exhaustive-deps": "error",
382
+ "react-hooks/rules-of-hooks": "error",
383
+ // sonarjs
384
+ "sonarjs/no-collapsible-if": "error",
385
+ "sonarjs/no-all-duplicated-branches": "error",
386
+ "sonarjs/no-identical-conditions": "error",
387
+ "sonarjs/no-identical-expressions": "error",
388
+ "sonarjs/no-ignored-return": "error",
389
+ "sonarjs/no-inverted-boolean-check": "error",
390
+ "sonarjs/no-nested-switch": "error",
391
+ "sonarjs/no-useless-catch": "error",
392
+ "sonarjs/prefer-immediate-return": "error",
393
+ // unicorn
394
+ // 'unicorn/no-null': 'error', // null can be useful when interact with json.
395
+ "unicorn/consistent-destructuring": "error",
396
+ "unicorn/consistent-empty-array-spread": "error",
397
+ "unicorn/error-message": "error",
398
+ "unicorn/explicit-length-check": "error",
399
+ "unicorn/filename-case": [
400
+ "error",
401
+ { cases: { kebabCase: true, pascalCase: true } },
402
+ ],
403
+ "unicorn/import-style": [
404
+ "error",
405
+ {
406
+ styles: {
407
+ child_process: { default: true },
408
+ fs: { default: true },
409
+ "fs/promises": { default: true },
410
+ process: { default: true },
411
+ "util/types": { named: true },
412
+ "node:child_process": { default: true },
413
+ "node:fs": { default: true },
414
+ "node:fs/promises": { default: true },
415
+ "node:process": { default: true },
416
+ "node:util/types": { named: true },
417
+ },
418
+ },
419
+ ],
420
+ "unicorn/new-for-builtins": "error",
421
+ "unicorn/no-abusive-eslint-disable": "error",
422
+ "unicorn/no-array-callback-reference": "error",
423
+ "unicorn/no-array-method-this-argument": "error",
424
+ "unicorn/no-for-loop": "error",
425
+ "unicorn/no-instanceof-array": "error",
426
+ "unicorn/no-new-array": "error",
427
+ "unicorn/no-new-buffer": "error",
428
+ "unicorn/no-typeof-undefined": "error",
429
+ "unicorn/no-unreadable-iife": "error",
430
+ "unicorn/no-useless-spread": "error",
431
+ "unicorn/prefer-array-flat-map": "error",
432
+ "unicorn/prefer-global-this": "error",
433
+ "unicorn/prefer-includes": "error",
434
+ "unicorn/prefer-module": "error",
435
+ "unicorn/prefer-number-properties": "error",
436
+ "unicorn/prefer-string-slice": "error",
437
+ "unicorn/prefer-ternary": "error",
438
+ "unicorn/throw-new-error": "error",
439
+ "@fenge/call-arguments-length": "error",
440
+ "@fenge/no-instanceof-builtin": "error",
441
+ "@fenge/no-restricted-loops": "error",
442
+ "@fenge/no-unnecessary-template-string": "error",
443
+ "@typescript-eslint/ban-ts-comment": [
444
+ "error",
445
+ {
446
+ "ts-expect-error": true,
447
+ "ts-ignore": true,
448
+ "ts-nocheck": true,
449
+ },
450
+ ],
451
+ "@typescript-eslint/no-useless-empty-export": "error",
452
+ },
453
+ },
454
+ {
455
+ name: "fenge/javascript/config",
456
+ files: ["**/*.config.{js,cjs,mjs,jsx}"],
457
+ rules: {
458
+ "import/no-default-export": "off",
459
+ },
460
+ },
461
+ {
462
+ // https://github.com/motemen/minimatch-cheat-sheet
463
+ name: "fenge/javascript/test",
464
+ files: [
465
+ "**/__tests__/**/*.{js,cjs,mjs,jsx}",
466
+ "**/*.{test,spec}.{js,cjs,mjs,jsx}",
467
+ ],
468
+ rules: {
469
+ "esm/no-phantom-dep-imports": ["error", { allowDevDependencies: true }],
470
+ },
471
+ },
472
+ ];
473
+ }
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvamF2YXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sUUFBUSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hELE9BQU8sYUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxRQUFRLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxZQUFZLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLHNCQUFzQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sYUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLFVBQVUsVUFBVTtJQUN4QiwwRkFBMEY7SUFDMUYsa0JBQWtCO0lBQ2xCLE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsUUFBUSxFQUFFLE9BQU87UUFDakIsa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1FBRTNDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsRiwrQ0FBK0M7UUFDL0MsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pDLGFB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eUJBQXlCO1lBQy9CLEtBQUssRUFBRSxDQUFDLDhCQUE4QixDQUFDO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCwwQkFBMEIsRUFBRSxLQUFLO2FBQ2xDO1NBQ0Y7UUFDRDtZQUNFLG1EQUFtRDtZQUNuRCxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLEtBQUssRUFBRTtnQkFDTCxvQ0FBb0M7Z0JBQ3BDLG1DQUFtQzthQUNwQztZQUNELEtBQUssRUFBRTtnQkFDTCw0QkFBNEIsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3hFO1NBQ0Y7S0FDTyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZlbmdlUGx1Z2luIGZyb20gXCJAZmVuZ2UvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IHRzUGx1Z2luIGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpblwiO1xuaW1wb3J0IGNvbmZ1c2luZ0tleXMgZnJvbSBcImNvbmZ1c2luZy1icm93c2VyLWdsb2JhbHNcIjtcbmltcG9ydCBlc3hQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tZXMteFwiO1xuaW1wb3J0ICogYXMgZXNtUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWVzbVwiO1xuaW1wb3J0IGZwUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWZwXCI7XG5pbXBvcnQgaW1wb3J0UGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiO1xuaW1wb3J0IG5QbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tblwiO1xuaW1wb3J0IHByb21pc2VQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tcHJvbWlzZVwiO1xuaW1wb3J0IHJlYWN0UGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLXJlYWN0XCI7XG5pbXBvcnQgcmVhY3RIb29rc1BsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rc1wiO1xuaW1wb3J0IHNpbXBsZUltcG9ydFNvcnRQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tc2ltcGxlLWltcG9ydC1zb3J0XCI7XG5pbXBvcnQgc29uYXJqc1BsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1zb25hcmpzXCI7XG5pbXBvcnQgdW5pY29yblBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi11bmljb3JuXCI7XG5pbXBvcnQgZ2xvYmFscyBmcm9tIFwiZ2xvYmFsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gamF2YXNjcmlwdCgpIHtcbiAgLy8gY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3N0YW5kYXJkL2VzbGludC1jb25maWctc3RhbmRhcmQvYmxvYi9tYXN0ZXIvc3JjL2luZGV4LnRzXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICBjb25zdCBzdGFuZGFyZENvbmZpZ1J1bGVzID0ge1xuICAgICduby12YXInOiAnZXJyb3InLFxuICAgICdvYmplY3Qtc2hvcnRoYW5kJzogWydlcnJvcicsICdwcm9wZXJ0aWVzJ10sXG5cbiAgICAnYWNjZXNzb3ItcGFpcnMnOiBbJ2Vycm9yJywgeyBzZXRXaXRob3V0R2V0OiB0cnVlLCBlbmZvcmNlRm9yQ2xhc3NNZW1iZXJzOiB0cnVlIH1dLFxuICAgIC8vICdhcnJheS1icmFja2V0LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICAgJ2FycmF5LWNhbGxiYWNrLXJldHVybic6IFsnZXJyb3InLCB7XG4gICAgICBhbGxvd0ltcGxpY2l0OiBmYWxzZSxcbiAgICAgIGNoZWNrRm9yRWFjaDogZmFsc2VcbiAgICB9XSxcbiAgICAvLyAnYXJyb3ctc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZTogdHJ1ZSwgYWZ0ZXI6IHRydWUgfV0sXG4gICAgLy8gJ2Jsb2NrLXNwYWNpbmcnOiBbJ2Vycm9yJywgJ2Fsd2F5cyddLFxuICAgIC8vICdicmFjZS1zdHlsZSc6IFsnZXJyb3InLCAnMXRicycsIHsgYWxsb3dTaW5nbGVMaW5lOiB0cnVlIH1dLFxuICAgIGNhbWVsY2FzZTogWydlcnJvcicsIHtcbiAgICAgIGFsbG93OiBbJ15VTlNBRkVfJ10sXG4gICAgICBwcm9wZXJ0aWVzOiAnbmV2ZXInLFxuICAgICAgaWdub3JlR2xvYmFsczogdHJ1ZVxuICAgIH1dLFxuICAgIC8vICdjb21tYS1kYW5nbGUnOiBbJ2Vycm9yJywge1xuICAgIC8vICAgYXJyYXlzOiAnbmV2ZXInLFxuICAgIC8vICAgb2JqZWN0czogJ25ldmVyJyxcbiAgICAvLyAgIGltcG9ydHM6ICduZXZlcicsXG4gICAgLy8gICBleHBvcnRzOiAnbmV2ZXInLFxuICAgIC8vICAgZnVuY3Rpb25zOiAnbmV2ZXInXG4gICAgLy8gfV0sXG4gICAgLy8gJ2NvbW1hLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IGZhbHNlLCBhZnRlcjogdHJ1ZSB9XSxcbiAgICAvLyAnY29tbWEtc3R5bGUnOiBbJ2Vycm9yJywgJ2xhc3QnXSxcbiAgICAvLyAnY29tcHV0ZWQtcHJvcGVydHktc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInLCB7IGVuZm9yY2VGb3JDbGFzc01lbWJlcnM6IHRydWUgfV0sXG4gICAgJ2NvbnN0cnVjdG9yLXN1cGVyJzogJ2Vycm9yJyxcbiAgICAvLyBjdXJseTogWydlcnJvcicsICdtdWx0aS1saW5lJ10sXG4gICAgJ2RlZmF1bHQtY2FzZS1sYXN0JzogJ2Vycm9yJyxcbiAgICAvLyAnZG90LWxvY2F0aW9uJzogWydlcnJvcicsICdwcm9wZXJ0eSddLFxuICAgIC8vICdkb3Qtbm90YXRpb24nOiBbJ2Vycm9yJywgeyBhbGxvd0tleXdvcmRzOiB0cnVlIH1dLCAvLyBUT0RPOiBUaGlzIHNob3VsZCBiZSBlbmFibGVkLiBEaXNhYmxlIGl0IGFzIGl0IGNvbmZsaWN0cyB3aXRoIHRzIHdoZW4gZW5hYmxpbmcgdHMtY2hlY2tcbiAgICAvLyAnZW9sLWxhc3QnOiAnZXJyb3InLFxuICAgIGVxZXFlcTogWydlcnJvcicsICdhbHdheXMnLCB7IG51bGw6ICdpZ25vcmUnIH1dLFxuICAgIC8vICdmdW5jLWNhbGwtc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAvLyAnZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZTogdHJ1ZSwgYWZ0ZXI6IHRydWUgfV0sXG4gICAgLy8gaW5kZW50OiBbJ2Vycm9yJywgMiwge1xuICAgIC8vICAgU3dpdGNoQ2FzZTogMSxcbiAgICAvLyAgIFZhcmlhYmxlRGVjbGFyYXRvcjogMSxcbiAgICAvLyAgIG91dGVySUlGRUJvZHk6IDEsXG4gICAgLy8gICBNZW1iZXJFeHByZXNzaW9uOiAxLFxuICAgIC8vICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogeyBwYXJhbWV0ZXJzOiAxLCBib2R5OiAxIH0sXG4gICAgLy8gICBGdW5jdGlvbkV4cHJlc3Npb246IHsgcGFyYW1ldGVyczogMSwgYm9keTogMSB9LFxuICAgIC8vICAgQ2FsbEV4cHJlc3Npb246IHsgYXJndW1lbnRzOiAxIH0sXG4gICAgLy8gICBBcnJheUV4cHJlc3Npb246IDEsXG4gICAgLy8gICBPYmplY3RFeHByZXNzaW9uOiAxLFxuICAgIC8vICAgSW1wb3J0RGVjbGFyYXRpb246IDEsXG4gICAgLy8gICBmbGF0VGVybmFyeUV4cHJlc3Npb25zOiBmYWxzZSxcbiAgICAvLyAgIGlnbm9yZUNvbW1lbnRzOiBmYWxzZSxcbiAgICAvLyAgIGlnbm9yZWROb2RlczogW1xuICAgIC8vICAgICAnVGVtcGxhdGVMaXRlcmFsIConLFxuICAgIC8vICAgICAnSlNYRWxlbWVudCcsXG4gICAgLy8gICAgICdKU1hFbGVtZW50ID4gKicsXG4gICAgLy8gICAgICdKU1hBdHRyaWJ1dGUnLFxuICAgIC8vICAgICAnSlNYSWRlbnRpZmllcicsXG4gICAgLy8gICAgICdKU1hOYW1lc3BhY2VkTmFtZScsXG4gICAgLy8gICAgICdKU1hNZW1iZXJFeHByZXNzaW9uJyxcbiAgICAvLyAgICAgJ0pTWFNwcmVhZEF0dHJpYnV0ZScsXG4gICAgLy8gICAgICdKU1hFeHByZXNzaW9uQ29udGFpbmVyJyxcbiAgICAvLyAgICAgJ0pTWE9wZW5pbmdFbGVtZW50JyxcbiAgICAvLyAgICAgJ0pTWENsb3NpbmdFbGVtZW50JyxcbiAgICAvLyAgICAgJ0pTWEZyYWdtZW50JyxcbiAgICAvLyAgICAgJ0pTWE9wZW5pbmdGcmFnbWVudCcsXG4gICAgLy8gICAgICdKU1hDbG9zaW5nRnJhZ21lbnQnLFxuICAgIC8vICAgICAnSlNYVGV4dCcsXG4gICAgLy8gICAgICdKU1hFbXB0eUV4cHJlc3Npb24nLFxuICAgIC8vICAgICAnSlNYU3ByZWFkQ2hpbGQnXG4gICAgLy8gICBdLFxuICAgIC8vICAgb2Zmc2V0VGVybmFyeUV4cHJlc3Npb25zOiB0cnVlXG4gICAgLy8gfV0sXG4gICAgLy8gJ2tleS1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlQ29sb246IGZhbHNlLCBhZnRlckNvbG9uOiB0cnVlIH1dLFxuICAgIC8vICdrZXl3b3JkLXNwYWNpbmcnOiBbJ2Vycm9yJywgeyBiZWZvcmU6IHRydWUsIGFmdGVyOiB0cnVlIH1dLFxuICAgICdsaW5lcy1iZXR3ZWVuLWNsYXNzLW1lbWJlcnMnOiBbJ2Vycm9yJywgJ2Fsd2F5cycsIHsgZXhjZXB0QWZ0ZXJTaW5nbGVMaW5lOiB0cnVlIH1dLFxuICAgIC8vICdtdWx0aWxpbmUtdGVybmFyeSc6IFsnZXJyb3InLCAnYWx3YXlzLW11bHRpbGluZSddLFxuICAgICduZXctY2FwJzogWydlcnJvcicsIHsgbmV3SXNDYXA6IHRydWUsIGNhcElzTmV3OiBmYWxzZSwgcHJvcGVydGllczogdHJ1ZSB9XSxcbiAgICAvLyAnbmV3LXBhcmVucyc6ICdlcnJvcicsXG4gICAgJ25vLWFycmF5LWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAnbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvcic6ICdlcnJvcicsXG4gICAgJ25vLWNhbGxlcic6ICdlcnJvcicsXG4gICAgJ25vLWNhc2UtZGVjbGFyYXRpb25zJzogJ2Vycm9yJyxcbiAgICAnbm8tY2xhc3MtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8tY29tcGFyZS1uZWctemVybyc6ICdlcnJvcicsXG4gICAgJ25vLWNvbmQtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8tY29uc3QtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8tY29uc3RhbnQtY29uZGl0aW9uJzogWydlcnJvcicsIHsgY2hlY2tMb29wczogZmFsc2UgfV0sXG4gICAgJ25vLWNvbnRyb2wtcmVnZXgnOiAnZXJyb3InLFxuICAgICduby1kZWJ1Z2dlcic6ICdlcnJvcicsXG4gICAgJ25vLWRlbGV0ZS12YXInOiAnZXJyb3InLFxuICAgICduby1kdXBlLWFyZ3MnOiAnZXJyb3InLFxuICAgICduby1kdXBlLWNsYXNzLW1lbWJlcnMnOiAnZXJyb3InLFxuICAgICduby1kdXBlLWtleXMnOiAnZXJyb3InLFxuICAgICduby1kdXBsaWNhdGUtY2FzZSc6ICdlcnJvcicsXG4gICAgJ25vLXVzZWxlc3MtYmFja3JlZmVyZW5jZSc6ICdlcnJvcicsXG4gICAgJ25vLWVtcHR5JzogWydlcnJvcicsIHsgYWxsb3dFbXB0eUNhdGNoOiB0cnVlIH1dLFxuICAgICduby1lbXB0eS1jaGFyYWN0ZXItY2xhc3MnOiAnZXJyb3InLFxuICAgICduby1lbXB0eS1wYXR0ZXJuJzogJ2Vycm9yJyxcbiAgICAnbm8tZXZhbCc6ICdlcnJvcicsXG4gICAgJ25vLWV4LWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWV4dGVuZC1uYXRpdmUnOiAnZXJyb3InLFxuICAgICduby1leHRyYS1iaW5kJzogJ2Vycm9yJyxcbiAgICAnbm8tZXh0cmEtYm9vbGVhbi1jYXN0JzogJ2Vycm9yJyxcbiAgICAvLyAnbm8tZXh0cmEtcGFyZW5zJzogWydlcnJvcicsICdmdW5jdGlvbnMnXSxcbiAgICAnbm8tZmFsbHRocm91Z2gnOiAnZXJyb3InLFxuICAgIC8vICduby1mbG9hdGluZy1kZWNpbWFsJzogJ2Vycm9yJyxcbiAgICAnbm8tZnVuYy1hc3NpZ24nOiAnZXJyb3InLFxuICAgICduby1nbG9iYWwtYXNzaWduJzogJ2Vycm9yJyxcbiAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAnbm8taW1wb3J0LWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ25vLWludmFsaWQtcmVnZXhwJzogJ2Vycm9yJyxcbiAgICAnbm8taXJyZWd1bGFyLXdoaXRlc3BhY2UnOiAnZXJyb3InLFxuICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgJ25vLWxhYmVscyc6IFsnZXJyb3InLCB7IGFsbG93TG9vcDogZmFsc2UsIGFsbG93U3dpdGNoOiBmYWxzZSB9XSxcbiAgICAnbm8tbG9uZS1ibG9ja3MnOiAnZXJyb3InLFxuICAgICduby1sb3NzLW9mLXByZWNpc2lvbic6ICdlcnJvcicsXG4gICAgJ25vLW1pc2xlYWRpbmctY2hhcmFjdGVyLWNsYXNzJzogJ2Vycm9yJyxcbiAgICAnbm8tcHJvdG90eXBlLWJ1aWx0aW5zJzogJ2Vycm9yJyxcbiAgICAnbm8tdXNlbGVzcy1jYXRjaCc6ICdlcnJvcicsXG4gICAgLy8gJ25vLW1peGVkLW9wZXJhdG9ycyc6IFsnZXJyb3InLCB7XG4gICAgLy8gICBncm91cHM6IFtcbiAgICAvLyAgICAgWyc9PScsICchPScsICc9PT0nLCAnIT09JywgJz4nLCAnPj0nLCAnPCcsICc8PSddLFxuICAgIC8vICAgICBbJyYmJywgJ3x8J10sXG4gICAgLy8gICAgIFsnaW4nLCAnaW5zdGFuY2VvZiddXG4gICAgLy8gICBdLFxuICAgIC8vICAgYWxsb3dTYW1lUHJlY2VkZW5jZTogdHJ1ZVxuICAgIC8vIH1dLFxuICAgIC8vICduby1taXhlZC1zcGFjZXMtYW5kLXRhYnMnOiAnZXJyb3InLFxuICAgIC8vICduby1tdWx0aS1zcGFjZXMnOiAnZXJyb3InLFxuICAgICduby1tdWx0aS1zdHInOiAnZXJyb3InLFxuICAgIC8vICduby1tdWx0aXBsZS1lbXB0eS1saW5lcyc6IFsnZXJyb3InLCB7IG1heDogMSwgbWF4Qk9GOiAwLCBtYXhFT0Y6IDAgfV0sXG4gICAgJ25vLW5ldyc6ICdlcnJvcicsXG4gICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAnbm8tbmV3LW9iamVjdCc6ICdlcnJvcicsXG4gICAgJ25vLW5ldy1zeW1ib2wnOiAnZXJyb3InLFxuICAgICduby1uZXctd3JhcHBlcnMnOiAnZXJyb3InLFxuICAgICduby1vYmotY2FsbHMnOiAnZXJyb3InLFxuICAgICduby1vY3RhbCc6ICdlcnJvcicsXG4gICAgJ25vLW9jdGFsLWVzY2FwZSc6ICdlcnJvcicsXG4gICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAnbm8tcmVkZWNsYXJlJzogWydlcnJvcicsIHsgYnVpbHRpbkdsb2JhbHM6IGZhbHNlIH1dLFxuICAgICduby1yZWdleC1zcGFjZXMnOiAnZXJyb3InLFxuICAgICduby1yZXR1cm4tYXNzaWduJzogWydlcnJvcicsICdleGNlcHQtcGFyZW5zJ10sXG4gICAgJ25vLXNlbGYtYXNzaWduJzogWydlcnJvcicsIHsgcHJvcHM6IHRydWUgfV0sXG4gICAgJ25vLXNlbGYtY29tcGFyZSc6ICdlcnJvcicsXG4gICAgJ25vLXNlcXVlbmNlcyc6ICdlcnJvcicsXG4gICAgJ25vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAnbm8tc3BhcnNlLWFycmF5cyc6ICdlcnJvcicsXG4gICAgLy8gJ25vLXRhYnMnOiAnZXJyb3InLFxuICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICduby10aGlzLWJlZm9yZS1zdXBlcic6ICdlcnJvcicsXG4gICAgJ25vLXRocm93LWxpdGVyYWwnOiAnZXJyb3InLFxuICAgIC8vICduby10cmFpbGluZy1zcGFjZXMnOiAnZXJyb3InLFxuICAgICduby11bmRlZic6ICdlcnJvcicsXG4gICAgLy8gJ25vLXVuZGVmLWluaXQnOiAnZXJyb3InLCAvLyBJdCBjb25mbGljdCB3aXRoIGBpbml0LWRlY2xhcmF0aW9uc2BcbiAgICAvLyAnbm8tdW5leHBlY3RlZC1tdWx0aWxpbmUnOiAnZXJyb3InLFxuICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAnbm8tdW5uZWVkZWQtdGVybmFyeSc6IFsnZXJyb3InLCB7IGRlZmF1bHRBc3NpZ25tZW50OiBmYWxzZSB9XSxcbiAgICAnbm8tdW5yZWFjaGFibGUnOiAnZXJyb3InLFxuICAgICduby11bnJlYWNoYWJsZS1sb29wJzogJ2Vycm9yJyxcbiAgICAnbm8tdW5zYWZlLWZpbmFsbHknOiAnZXJyb3InLFxuICAgICduby11bnNhZmUtbmVnYXRpb24nOiAnZXJyb3InLFxuICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiBbJ2Vycm9yJywge1xuICAgICAgYWxsb3dTaG9ydENpcmN1aXQ6IHRydWUsXG4gICAgICBhbGxvd1Rlcm5hcnk6IHRydWUsXG4gICAgICBhbGxvd1RhZ2dlZFRlbXBsYXRlczogdHJ1ZVxuICAgIH1dLFxuICAgICduby11bnVzZWQtdmFycyc6IFsnZXJyb3InLCB7XG4gICAgICBhcmdzOiAnbm9uZScsXG4gICAgICBjYXVnaHRFcnJvcnM6ICdub25lJyxcbiAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgIHZhcnM6ICdhbGwnXG4gICAgfV0sXG4gICAgJ25vLXVzZS1iZWZvcmUtZGVmaW5lJzogWydlcnJvcicsIHsgZnVuY3Rpb25zOiBmYWxzZSwgY2xhc3NlczogZmFsc2UsIHZhcmlhYmxlczogZmFsc2UgfV0sXG4gICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgJ25vLXVzZWxlc3MtY29tcHV0ZWQta2V5JzogJ2Vycm9yJyxcbiAgICAnbm8tdXNlbGVzcy1jb25zdHJ1Y3Rvcic6ICdlcnJvcicsXG4gICAgJ25vLXVzZWxlc3MtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAnbm8tdXNlbGVzcy1yZW5hbWUnOiAnZXJyb3InLFxuICAgICduby11c2VsZXNzLXJldHVybic6ICdlcnJvcicsXG4gICAgJ25vLXZvaWQnOiAnZXJyb3InLFxuICAgIC8vICduby13aGl0ZXNwYWNlLWJlZm9yZS1wcm9wZXJ0eSc6ICdlcnJvcicsXG4gICAgJ25vLXdpdGgnOiAnZXJyb3InLFxuICAgIC8vICdvYmplY3QtY3VybHktbmV3bGluZSc6IFsnZXJyb3InLCB7IG11bHRpbGluZTogdHJ1ZSwgY29uc2lzdGVudDogdHJ1ZSB9XSxcbiAgICAvLyAnb2JqZWN0LWN1cmx5LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ2Fsd2F5cyddLFxuICAgIC8vICdvYmplY3QtcHJvcGVydHktbmV3bGluZSc6IFsnZXJyb3InLCB7IGFsbG93TXVsdGlwbGVQcm9wZXJ0aWVzUGVyTGluZTogdHJ1ZSB9XSxcbiAgICAnb25lLXZhcic6IFsnZXJyb3InLCB7IGluaXRpYWxpemVkOiAnbmV2ZXInIH1dLFxuICAgIC8vICdvcGVyYXRvci1saW5lYnJlYWsnOiBbJ2Vycm9yJywgJ2FmdGVyJywgeyBvdmVycmlkZXM6IHsgJz8nOiAnYmVmb3JlJywgJzonOiAnYmVmb3JlJywgJ3w+JzogJ2JlZm9yZScgfSB9XSxcbiAgICAvLyAncGFkZGVkLWJsb2Nrcyc6IFsnZXJyb3InLCB7IGJsb2NrczogJ25ldmVyJywgc3dpdGNoZXM6ICduZXZlcicsIGNsYXNzZXM6ICduZXZlcicgfV0sXG4gICAgJ3ByZWZlci1jb25zdCc6IFsnZXJyb3InLCB7IGRlc3RydWN0dXJpbmc6ICdhbGwnIH1dLFxuICAgICdwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzJzogJ2Vycm9yJyxcbiAgICAncHJlZmVyLXJlZ2V4LWxpdGVyYWxzJzogWydlcnJvcicsIHsgZGlzYWxsb3dSZWR1bmRhbnRXcmFwcGluZzogdHJ1ZSB9XSxcbiAgICAvLyAncXVvdGUtcHJvcHMnOiBbJ2Vycm9yJywgJ2FzLW5lZWRlZCddLFxuICAgIC8vIHF1b3RlczogWydlcnJvcicsICdzaW5nbGUnLCB7IGF2b2lkRXNjYXBlOiB0cnVlLCBhbGxvd1RlbXBsYXRlTGl0ZXJhbHM6IGZhbHNlIH1dLFxuICAgIC8vICdyZXN0LXNwcmVhZC1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAgIC8vIHNlbWk6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAvLyAnc2VtaS1zcGFjaW5nJzogWydlcnJvcicsIHsgYmVmb3JlOiBmYWxzZSwgYWZ0ZXI6IHRydWUgfV0sXG4gICAgLy8gJ3NwYWNlLWJlZm9yZS1ibG9ja3MnOiBbJ2Vycm9yJywgJ2Fsd2F5cyddLFxuICAgIC8vICdzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4nOiBbJ2Vycm9yJywgJ2Fsd2F5cyddLFxuICAgIC8vICdzcGFjZS1pbi1wYXJlbnMnOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICAgLy8gJ3NwYWNlLWluZml4LW9wcyc6ICdlcnJvcicsXG4gICAgLy8gJ3NwYWNlLXVuYXJ5LW9wcyc6IFsnZXJyb3InLCB7IHdvcmRzOiB0cnVlLCBub253b3JkczogZmFsc2UgfV0sXG4gICAgJ3NwYWNlZC1jb21tZW50JzogWydlcnJvcicsICdhbHdheXMnLCB7XG4gICAgICBsaW5lOiB7IG1hcmtlcnM6IFsnKnBhY2thZ2UnLCAnIScsICcvJywgJywnLCAnPSddIH0sXG4gICAgICBibG9jazogeyBiYWxhbmNlZDogdHJ1ZSwgbWFya2VyczogWycqcGFja2FnZScsICchJywgJywnLCAnOicsICc6OicsICdmbG93LWluY2x1ZGUnXSwgZXhjZXB0aW9uczogWycqJ10gfVxuICAgIH1dLFxuICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgIC8vICd0ZW1wbGF0ZS1jdXJseS1zcGFjaW5nJzogWydlcnJvcicsICduZXZlciddLFxuICAgIC8vICd0ZW1wbGF0ZS10YWctc3BhY2luZyc6IFsnZXJyb3InLCAnbmV2ZXInXSxcbiAgICAndW5pY29kZS1ib20nOiBbJ2Vycm9yJywgJ25ldmVyJ10sXG4gICAgJ3VzZS1pc25hbic6IFsnZXJyb3InLCB7XG4gICAgICBlbmZvcmNlRm9yU3dpdGNoQ2FzZTogdHJ1ZSxcbiAgICAgIGVuZm9yY2VGb3JJbmRleE9mOiB0cnVlXG4gICAgfV0sXG4gICAgJ3ZhbGlkLXR5cGVvZic6IFsnZXJyb3InLCB7IHJlcXVpcmVTdHJpbmdMaXRlcmFsczogdHJ1ZSB9XSxcbiAgICAvLyAnd3JhcC1paWZlJzogWydlcnJvcicsICdhbnknLCB7IGZ1bmN0aW9uUHJvdG90eXBlTWV0aG9kczogdHJ1ZSB9XSxcbiAgICAvLyAneWllbGQtc3Rhci1zcGFjaW5nJzogWydlcnJvcicsICdib3RoJ10sXG4gICAgeW9kYTogWydlcnJvcicsICduZXZlciddLFxuXG4gICAgJ2ltcG9ydC9leHBvcnQnOiAnZXJyb3InLFxuICAgICdpbXBvcnQvZmlyc3QnOiAnZXJyb3InLFxuICAgICdpbXBvcnQvbm8tYWJzb2x1dGUtcGF0aCc6IFsnZXJyb3InLCB7IGVzbW9kdWxlOiB0cnVlLCBjb21tb25qczogdHJ1ZSwgYW1kOiBmYWxzZSB9XSxcbiAgICAnaW1wb3J0L25vLWR1cGxpY2F0ZXMnOiAnZXJyb3InLFxuICAgICdpbXBvcnQvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgJ2ltcG9ydC9uby13ZWJwYWNrLWxvYWRlci1zeW50YXgnOiAnZXJyb3InLFxuXG4gICAgJ24vaGFuZGxlLWNhbGxiYWNrLWVycic6IFsnZXJyb3InLCAnXihlcnJ8ZXJyb3IpJCddLFxuICAgICduL25vLWNhbGxiYWNrLWxpdGVyYWwnOiAnZXJyb3InLFxuICAgICduL25vLWRlcHJlY2F0ZWQtYXBpJzogJ2Vycm9yJyxcbiAgICAnbi9uby1leHBvcnRzLWFzc2lnbic6ICdlcnJvcicsXG4gICAgJ24vbm8tbmV3LXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICduL25vLXBhdGgtY29uY2F0JzogJ2Vycm9yJyxcbiAgICAnbi9wcm9jZXNzLWV4aXQtYXMtdGhyb3cnOiAnZXJyb3InLFxuXG4gICAgJ3Byb21pc2UvcGFyYW0tbmFtZXMnOiAnZXJyb3InXG4gIH0gYXMgY29uc3Q7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImZlbmdlL2phdmFzY3JpcHRcIixcbiAgICAgIGZpbGVzOiBbXCIqKi8qLntqcyxjanMsbWpzLGpzeH1cIl0sXG4gICAgICAvLyBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbmZpZ3VyZS9sYW5ndWFnZS1vcHRpb25zXG4gICAgICBsYW5ndWFnZU9wdGlvbnM6IHtcbiAgICAgICAgZWNtYVZlcnNpb246IFwibGF0ZXN0XCIsXG4gICAgICAgIHNvdXJjZVR5cGU6IFwibW9kdWxlXCIsXG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICAvLyBUT0RPIGBlY21hVmVyc2lvbmAgYW5kIGBzb3VyY2VUeXBlYCBhcmUgbm8gc3RhbmRhcmQgaGVyZS4gaW1wb3J0L25vLWRlZmF1bHQtZXhwb3J0IHJlcXVpcmVkIHRoaXNcbiAgICAgICAgICBlY21hVmVyc2lvbjogXCJsYXRlc3RcIixcbiAgICAgICAgICBzb3VyY2VUeXBlOiBcIm1vZHVsZVwiLFxuICAgICAgICAgIGVjbWFGZWF0dXJlczoge1xuICAgICAgICAgICAganN4OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGdsb2JhbHM6IHtcbiAgICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhnbG9iYWxzLmJyb3dzZXIpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrXSkgPT4gIWNvbmZ1c2luZ0tleXMuaW5jbHVkZXMoaykpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrXSkgPT4gIVtcInNlbGZcIiwgXCJnbG9iYWxcIl0uaW5jbHVkZXMoaykpLCAvLyBwcmVmZXIgYGdsb2JhbFRoaXNgXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsaW50ZXJPcHRpb25zOiB7XG4gICAgICAgIC8vIG5vSW5saW5lQ29uZmlnOiB0cnVlLCAvLyB0b28gc3RyaWN0XG4gICAgICAgIHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHBsdWdpbnM6IHtcbiAgICAgICAgZnA6IGZwUGx1Z2luLFxuICAgICAgICBuOiBuUGx1Z2luLFxuICAgICAgICBpbXBvcnQ6IGltcG9ydFBsdWdpbixcbiAgICAgICAgcHJvbWlzZTogcHJvbWlzZVBsdWdpbixcbiAgICAgICAgcmVhY3Q6IHJlYWN0UGx1Z2luLFxuICAgICAgICBcInJlYWN0LWhvb2tzXCI6IHJlYWN0SG9va3NQbHVnaW4sXG4gICAgICAgIHNvbmFyanM6IHNvbmFyanNQbHVnaW4sXG4gICAgICAgIHVuaWNvcm46IHVuaWNvcm5QbHVnaW4sXG4gICAgICAgIFwiZXMteFwiOiBlc3hQbHVnaW4sXG4gICAgICAgIGVzbTogZXNtUGx1Z2luLFxuICAgICAgICBcInNpbXBsZS1pbXBvcnQtc29ydFwiOiBzaW1wbGVJbXBvcnRTb3J0UGx1Z2luLFxuICAgICAgICBcIkBmZW5nZVwiOiBmZW5nZVBsdWdpbixcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnRcIjogdHNQbHVnaW4sXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLy8gMS4gc3RhbmRhcmQgY29uZmlnIHJ1bGVzXG4gICAgICAgIC4uLnN0YW5kYXJkQ29uZmlnUnVsZXMsXG5cbiAgICAgICAgLy8gMi4gY29kZSBzdHlsZSBmb3IgYSBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICAgICAgXCJhcnJvdy1ib2R5LXN0eWxlXCI6IFtcImVycm9yXCIsIFwiYXMtbmVlZGVkXCJdLFxuICAgICAgICBcImltcG9ydC9uZXdsaW5lLWFmdGVyLWltcG9ydFwiOiBbXCJlcnJvclwiLCB7IGNvdW50OiAxIH1dLFxuICAgICAgICAvLyBTb3J0IGltcG9ydHMgYnkgcHJldHRpZXIuIFR1cm4gaW4gb2ZmLlxuICAgICAgICAvLyBcInNpbXBsZS1pbXBvcnQtc29ydC9pbXBvcnRzXCI6IFtcbiAgICAgICAgLy8gICBcImVycm9yXCIsXG4gICAgICAgIC8vICAgeyBncm91cHM6IFtbXCJeXFxcXHUwMDAwXCIsIFwiXm5vZGU6XCIsIFwiXkA/XFxcXHdcIiwgXCJeXCIsIFwiXlxcXFwuXCJdXSB9LFxuICAgICAgICAvLyBdLFxuICAgICAgICBcInNpbXBsZS1pbXBvcnQtc29ydC9leHBvcnRzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL3ByZWZlci1ub2RlLXByb3RvY29sXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL2VzY2FwZS1jYXNlXCI6IFwiZXJyb3JcIiwgLy8gJ1xcdWQ4MzQnIC0+ICdcXHVEODM0J1xuICAgICAgICAvLyBcInVuaWNvcm4vbnVtYmVyLWxpdGVyYWwtY2FzZVwiOiBcImVycm9yXCIsIC8vIDBYRkYgLT4gMHhGRiAvLyBjb25mbGljdCB3aXRoIHByZXR0aWVyXG5cbiAgICAgICAgLy8gMy4gYmFuIHNvbWUgc3ludGF4ZXMgdG8gcmVkdWNlIG1pc3Rha2VzXG4gICAgICAgIFwiZGVmYXVsdC1wYXJhbS1sYXN0XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJmdW5jLW5hbWUtbWF0Y2hpbmdcIjogXCJlcnJvclwiLFxuICAgICAgICBcImdldHRlci1yZXR1cm5cIjogXCJlcnJvclwiLFxuICAgICAgICBcImluaXQtZGVjbGFyYXRpb25zXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJtYXgtcGFyYW1zXCI6IFtcImVycm9yXCIsIHsgbWF4OiA0IH1dLFxuICAgICAgICBcIm5vLWR1cGxpY2F0ZS1pbXBvcnRzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJuby1lbXB0eS1zdGF0aWMtYmxvY2tcIjogXCJlcnJvclwiLFxuICAgICAgICBcIm5vLWVtcHR5LWZ1bmN0aW9uXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJuby1pbXBsaWNpdC1jb2VyY2lvblwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHsgZGlzYWxsb3dUZW1wbGF0ZVNob3J0aGFuZDogdHJ1ZSwgYWxsb3c6IFtcIiEhXCJdIH0sXG4gICAgICAgIF0sIC8vIGZvcmJpZCBjb2RlIGxpa2UgYGNvbnN0IG51bSA9ICtzdHJgO1xuICAgICAgICBcIm5vLWludmFsaWQtdGhpc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwibm8tbXVsdGktYXNzaWduXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJuby1wYXJhbS1yZWFzc2lnblwiOiBcImVycm9yXCIsXG4gICAgICAgIFwibm8tcGx1c3BsdXNcIjogXCJlcnJvclwiLFxuICAgICAgICBcIm5vLXNldHRlci1yZXR1cm5cIjogXCJlcnJvclwiLFxuICAgICAgICBcIm5vLXNoYWRvd1wiOiBbXCJlcnJvclwiLCB7IGlnbm9yZU9uSW5pdGlhbGl6YXRpb246IHRydWUgfV0sXG4gICAgICAgIFwibm8tdW51c2VkLXByaXZhdGUtY2xhc3MtbWVtYmVyc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwicHJlZmVyLWFycm93LWNhbGxiYWNrXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwcmVmZXItZXhwb25lbnRpYXRpb24tb3BlcmF0b3JcIjogXCJlcnJvclwiLFxuICAgICAgICBcInByZWZlci1vYmplY3QtaGFzLW93blwiOiBcImVycm9yXCIsXG4gICAgICAgIFwicHJlZmVyLXRlbXBsYXRlXCI6IFwiZXJyb3JcIixcbiAgICAgICAgLy8gZXNcbiAgICAgICAgXCJlcy14L25vLWFjY2Vzc29yLXByb3BlcnRpZXNcIjogXCJlcnJvclwiLFxuICAgICAgICBcImVzLXgvbm8tYXN5bmMtaXRlcmF0aW9uXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJlcy14L25vLWdlbmVyYXRvcnNcIjogXCJlcnJvclwiLFxuICAgICAgICBcImVzLXgvbm8tbGVnYWN5LW9iamVjdC1wcm90b3R5cGUtYWNjZXNzb3ItbWV0aG9kc1wiOiBcImVycm9yXCIsXG4gICAgICAgIC8vIGVzbVxuICAgICAgICBcImVzbS9uZWFyZXN0LXJlbGF0aXZlLXBhdGhcIjogXCJlcnJvclwiLFxuICAgICAgICBcImVzbS9uby1kaXJlY3RvcnktaW1wb3J0c1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwiZXNtL25vLWR5bmFtaWMtaW1wb3J0c1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwiZXNtL25vLWdpdC1pZ25vcmVkLWltcG9ydHNcIjogXCJlcnJvclwiLFxuICAgICAgICBcImVzbS9uby1waGFudG9tLWRlcC1pbXBvcnRzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJlc20vbm8tcmVsYXRpdmUtcGFyZW50LWltcG9ydHNcIjogXCJlcnJvclwiLFxuICAgICAgICBcImVzbS9uby1yZW5hbWUtZXhwb3J0c1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwiZXNtL25vLXJlbmFtZS1pbXBvcnRzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJlc20vbm8tc2lkZS1lZmZlY3QtaW1wb3J0c1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwiZXNtL25vLXRzLWZpbGUtaW1wb3J0c1wiOiBcImVycm9yXCIsXG4gICAgICAgIC8vIGZwXG4gICAgICAgIFwiZnAvbm8tYXJndW1lbnRzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJmcC9uby1kZWxldGVcIjogXCJlcnJvclwiLFxuICAgICAgICAvLyBpbXBvcnRcbiAgICAgICAgXCJpbXBvcnQvZXh0ZW5zaW9uc1wiOiBbXCJlcnJvclwiLCBcImFsd2F5c1wiLCB7IGlnbm9yZVBhY2thZ2VzOiB0cnVlIH1dLFxuICAgICAgICBcImltcG9ydC9uby1jb21tb25qc1wiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93UmVxdWlyZTogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd0NvbmRpdGlvbmFsUmVxdWlyZTogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd1ByaW1pdGl2ZU1vZHVsZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLiBUaGUgRVNNIHNwZWNpZmljYXRpb24gZGlkbuKAmXQgc2F5IGFueXRoaW5nIGFib3V0IGludGVyb3BlcmFiaWxpdHkgd2l0aCBDb21tb25KUy4gU2VlOiBodHRwczovL2Jsb2cuYW5kcmV3YnJhbi5jaC9kZWZhdWx0LWV4cG9ydHMtaW4tY29tbW9uanMtbGlicmFyaWVzL1xuICAgICAgICAgKiAyLiBSZWV4cG9ydGluZyBsaWtlIGBleHBvcnQgKiBmcm9tICdmb28nYCB3aWxsIGJlIGRpZmZpY3VsdC5cbiAgICAgICAgICovXG4gICAgICAgIFwiaW1wb3J0L25vLWRlZmF1bHQtZXhwb3J0XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJpbXBvcnQvbm8tbXV0YWJsZS1leHBvcnRzXCI6IFwiZXJyb3JcIiwgLy8gZm9yYmlkIGNvZGUgbGlrZSBgZXhwb3J0IGxldCBjb3VudCA9IDNgXG4gICAgICAgIFwiaW1wb3J0L25vLXJlbGF0aXZlLXBhY2thZ2VzXCI6IFwiZXJyb3JcIiwgLy8gZm9yYmlkIHRvIGltcG9ydCBtb2R1bGUgZnJvbSBvdGhlciBtb25vcmVwbyBwYWNrYWdlcyBieSByZWxhdGl2ZSBwYXRoc1xuICAgICAgICBcImltcG9ydC9uby1zZWxmLWltcG9ydFwiOiBcImVycm9yXCIsXG4gICAgICAgIC8vIG5cbiAgICAgICAgXCJuL3ByZWZlci1nbG9iYWwvYnVmZmVyXCI6IFtcImVycm9yXCIsIFwibmV2ZXJcIl0sXG4gICAgICAgIFwibi9wcmVmZXItZ2xvYmFsL2NvbnNvbGVcIjogXCJlcnJvclwiLFxuICAgICAgICBcIm4vcHJlZmVyLWdsb2JhbC9wcm9jZXNzXCI6IFtcImVycm9yXCIsIFwibmV2ZXJcIl0sXG4gICAgICAgIFwibi9wcmVmZXItZ2xvYmFsL3RleHQtZGVjb2RlclwiOiBcImVycm9yXCIsXG4gICAgICAgIFwibi9wcmVmZXItZ2xvYmFsL3RleHQtZW5jb2RlclwiOiBcImVycm9yXCIsXG4gICAgICAgIFwibi9wcmVmZXItZ2xvYmFsL3VybFwiOiBcImVycm9yXCIsXG4gICAgICAgIFwibi9wcmVmZXItZ2xvYmFsL3VybC1zZWFyY2gtcGFyYW1zXCI6IFwiZXJyb3JcIixcbiAgICAgICAgLy8gcmVhY3RcbiAgICAgICAgXCJyZWFjdC9qc3gta2V5XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJyZWFjdC9qc3gtbm8tZHVwbGljYXRlLXByb3BzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJyZWFjdC9qc3gtbm8tdW5kZWZcIjogXCJlcnJvclwiLFxuICAgICAgICAvLyByZWFjdC1ob29rc1xuICAgICAgICBcInJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwicmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcIjogXCJlcnJvclwiLFxuICAgICAgICAvLyBzb25hcmpzXG4gICAgICAgIFwic29uYXJqcy9uby1jb2xsYXBzaWJsZS1pZlwiOiBcImVycm9yXCIsXG4gICAgICAgIFwic29uYXJqcy9uby1hbGwtZHVwbGljYXRlZC1icmFuY2hlc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwic29uYXJqcy9uby1pZGVudGljYWwtY29uZGl0aW9uc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwic29uYXJqcy9uby1pZGVudGljYWwtZXhwcmVzc2lvbnNcIjogXCJlcnJvclwiLFxuICAgICAgICBcInNvbmFyanMvbm8taWdub3JlZC1yZXR1cm5cIjogXCJlcnJvclwiLFxuICAgICAgICBcInNvbmFyanMvbm8taW52ZXJ0ZWQtYm9vbGVhbi1jaGVja1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwic29uYXJqcy9uby1uZXN0ZWQtc3dpdGNoXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJzb25hcmpzL25vLXVzZWxlc3MtY2F0Y2hcIjogXCJlcnJvclwiLFxuICAgICAgICBcInNvbmFyanMvcHJlZmVyLWltbWVkaWF0ZS1yZXR1cm5cIjogXCJlcnJvclwiLFxuICAgICAgICAvLyB1bmljb3JuXG4gICAgICAgIC8vICd1bmljb3JuL25vLW51bGwnOiAnZXJyb3InLCAvLyBudWxsIGNhbiBiZSB1c2VmdWwgd2hlbiBpbnRlcmFjdCB3aXRoIGpzb24uXG4gICAgICAgIFwidW5pY29ybi9jb25zaXN0ZW50LWRlc3RydWN0dXJpbmdcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vY29uc2lzdGVudC1lbXB0eS1hcnJheS1zcHJlYWRcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vZXJyb3ItbWVzc2FnZVwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9leHBsaWNpdC1sZW5ndGgtY2hlY2tcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vZmlsZW5hbWUtY2FzZVwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHsgY2FzZXM6IHsga2ViYWJDYXNlOiB0cnVlLCBwYXNjYWxDYXNlOiB0cnVlIH0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgXCJ1bmljb3JuL2ltcG9ydC1zdHlsZVwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBjaGlsZF9wcm9jZXNzOiB7IGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgZnM6IHsgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICBcImZzL3Byb21pc2VzXCI6IHsgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICBwcm9jZXNzOiB7IGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgXCJ1dGlsL3R5cGVzXCI6IHsgbmFtZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjogeyBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICAgICAgICAgIFwibm9kZTpmc1wiOiB7IGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgXCJub2RlOmZzL3Byb21pc2VzXCI6IHsgZGVmYXVsdDogdHJ1ZSB9LFxuICAgICAgICAgICAgICBcIm5vZGU6cHJvY2Vzc1wiOiB7IGRlZmF1bHQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgXCJub2RlOnV0aWwvdHlwZXNcIjogeyBuYW1lZDogdHJ1ZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBcInVuaWNvcm4vbmV3LWZvci1idWlsdGluc1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9uby1hYnVzaXZlLWVzbGludC1kaXNhYmxlXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZVwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9uby1hcnJheS1tZXRob2QtdGhpcy1hcmd1bWVudFwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9uby1mb3ItbG9vcFwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9uby1pbnN0YW5jZW9mLWFycmF5XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL25vLW5ldy1hcnJheVwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9uby1uZXctYnVmZmVyXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWRcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vbm8tdW5yZWFkYWJsZS1paWZlXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL25vLXVzZWxlc3Mtc3ByZWFkXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL3ByZWZlci1hcnJheS1mbGF0LW1hcFwiOiBcImVycm9yXCIsXG4gICAgICAgIFwidW5pY29ybi9wcmVmZXItZ2xvYmFsLXRoaXNcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vcHJlZmVyLWluY2x1ZGVzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL3ByZWZlci1tb2R1bGVcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vcHJlZmVyLW51bWJlci1wcm9wZXJ0aWVzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJ1bmljb3JuL3ByZWZlci1zdHJpbmctc2xpY2VcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vcHJlZmVyLXRlcm5hcnlcIjogXCJlcnJvclwiLFxuICAgICAgICBcInVuaWNvcm4vdGhyb3ctbmV3LWVycm9yXCI6IFwiZXJyb3JcIixcblxuICAgICAgICBcIkBmZW5nZS9jYWxsLWFyZ3VtZW50cy1sZW5ndGhcIjogXCJlcnJvclwiLFxuICAgICAgICBcIkBmZW5nZS9uby1pbnN0YW5jZW9mLWJ1aWx0aW5cIjogXCJlcnJvclwiLFxuICAgICAgICBcIkBmZW5nZS9uby1yZXN0cmljdGVkLWxvb3BzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJAZmVuZ2Uvbm8tdW5uZWNlc3NhcnktdGVtcGxhdGUtc3RyaW5nXCI6IFwiZXJyb3JcIixcblxuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwidHMtZXhwZWN0LWVycm9yXCI6IHRydWUsXG4gICAgICAgICAgICBcInRzLWlnbm9yZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJ0cy1ub2NoZWNrXCI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlbGVzcy1lbXB0eS1leHBvcnRcIjogXCJlcnJvclwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZmVuZ2UvamF2YXNjcmlwdC9jb25maWdcIixcbiAgICAgIGZpbGVzOiBbXCIqKi8qLmNvbmZpZy57anMsY2pzLG1qcyxqc3h9XCJdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJpbXBvcnQvbm8tZGVmYXVsdC1leHBvcnRcIjogXCJvZmZcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW90ZW1lbi9taW5pbWF0Y2gtY2hlYXQtc2hlZXRcbiAgICAgIG5hbWU6IFwiZmVuZ2UvamF2YXNjcmlwdC90ZXN0XCIsXG4gICAgICBmaWxlczogW1xuICAgICAgICBcIioqL19fdGVzdHNfXy8qKi8qLntqcyxjanMsbWpzLGpzeH1cIixcbiAgICAgICAgXCIqKi8qLnt0ZXN0LHNwZWN9LntqcyxjanMsbWpzLGpzeH1cIixcbiAgICAgIF0sXG4gICAgICBydWxlczoge1xuICAgICAgICBcImVzbS9uby1waGFudG9tLWRlcC1pbXBvcnRzXCI6IFtcImVycm9yXCIsIHsgYWxsb3dEZXZEZXBlbmRlbmNpZXM6IHRydWUgfV0sXG4gICAgICB9LFxuICAgIH0sXG4gIF0gYXMgY29uc3Q7XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import * as pkg from "eslint-plugin-pkg-json";
2
+ import * as publint from "eslint-plugin-publint";
3
+ export declare function packagejson(): readonly [{
4
+ readonly name: "fenge/packagejson";
5
+ readonly files: readonly ["**/package.json"];
6
+ readonly processor: "pkg-json/processor";
7
+ readonly plugins: {
8
+ readonly "pkg-json": typeof pkg;
9
+ readonly publint: typeof publint;
10
+ };
11
+ readonly rules: {
12
+ readonly "pkg-json/bottom-default": "error";
13
+ readonly "pkg-json/exact-dependency-version": "error";
14
+ readonly "pkg-json/no-conflict-types": "error";
15
+ readonly "pkg-json/no-lifecycle-script": "error";
16
+ readonly "pkg-json/no-nonstandard-property": "error";
17
+ readonly "pkg-json/no-types-dependency-in-workspace-root": "error";
18
+ readonly "pkg-json/top-types": "error";
19
+ readonly "pkg-json/private-workspace-root": "error";
20
+ readonly "pkg-json/required-engines": "error";
21
+ readonly "pkg-json/required-hashbang": "error";
22
+ readonly "pkg-json/required-repository": "error";
23
+ readonly "pkg-json/type-module": "error";
24
+ readonly "pkg-json/no-dependencies-in-workspace-root": "error";
25
+ readonly "publint/warning": "error";
26
+ readonly "publint/error": "error";
27
+ };
28
+ }];
29
+ //# sourceMappingURL=packagejson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packagejson.d.ts","sourceRoot":"","sources":["../../src/config/packagejson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAC;AAEjD,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;GA8B1B"}
@@ -0,0 +1,34 @@
1
+ import * as pkg from "eslint-plugin-pkg-json";
2
+ import * as publint from "eslint-plugin-publint";
3
+ export function packagejson() {
4
+ return [
5
+ {
6
+ name: "fenge/packagejson",
7
+ files: ["**/package.json"],
8
+ processor: "pkg-json/processor",
9
+ plugins: {
10
+ "pkg-json": pkg,
11
+ publint,
12
+ },
13
+ rules: {
14
+ "pkg-json/bottom-default": "error",
15
+ "pkg-json/exact-dependency-version": "error",
16
+ "pkg-json/no-conflict-types": "error",
17
+ "pkg-json/no-lifecycle-script": "error",
18
+ "pkg-json/no-nonstandard-property": "error",
19
+ "pkg-json/no-types-dependency-in-workspace-root": "error",
20
+ "pkg-json/top-types": "error",
21
+ "pkg-json/private-workspace-root": "error",
22
+ "pkg-json/required-engines": "error",
23
+ "pkg-json/required-hashbang": "error",
24
+ "pkg-json/required-repository": "error",
25
+ "pkg-json/type-module": "error",
26
+ "pkg-json/no-dependencies-in-workspace-root": "error",
27
+ // "publint/suggestion": "error",
28
+ "publint/warning": "error",
29
+ "publint/error": "error",
30
+ },
31
+ },
32
+ ];
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3BhY2thZ2Vqc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLEtBQUssRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQzFCLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxHQUFHO2dCQUNmLE9BQU87YUFDUjtZQUNELEtBQUssRUFBRTtnQkFDTCx5QkFBeUIsRUFBRSxPQUFPO2dCQUNsQyxtQ0FBbUMsRUFBRSxPQUFPO2dCQUM1Qyw0QkFBNEIsRUFBRSxPQUFPO2dCQUNyQyw4QkFBOEIsRUFBRSxPQUFPO2dCQUN2QyxrQ0FBa0MsRUFBRSxPQUFPO2dCQUMzQyxnREFBZ0QsRUFBRSxPQUFPO2dCQUN6RCxvQkFBb0IsRUFBRSxPQUFPO2dCQUM3QixpQ0FBaUMsRUFBRSxPQUFPO2dCQUMxQywyQkFBMkIsRUFBRSxPQUFPO2dCQUNwQyw0QkFBNEIsRUFBRSxPQUFPO2dCQUNyQyw4QkFBOEIsRUFBRSxPQUFPO2dCQUN2QyxzQkFBc0IsRUFBRSxPQUFPO2dCQUMvQiw0Q0FBNEMsRUFBRSxPQUFPO2dCQUNyRCxpQ0FBaUM7Z0JBQ2pDLGlCQUFpQixFQUFFLE9BQU87Z0JBQzFCLGVBQWUsRUFBRSxPQUFPO2FBQ3pCO1NBQ0Y7S0FDTyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBrZyBmcm9tIFwiZXNsaW50LXBsdWdpbi1wa2ctanNvblwiO1xuaW1wb3J0ICogYXMgcHVibGludCBmcm9tIFwiZXNsaW50LXBsdWdpbi1wdWJsaW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlanNvbigpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImZlbmdlL3BhY2thZ2Vqc29uXCIsXG4gICAgICBmaWxlczogW1wiKiovcGFja2FnZS5qc29uXCJdLFxuICAgICAgcHJvY2Vzc29yOiBcInBrZy1qc29uL3Byb2Nlc3NvclwiLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBcInBrZy1qc29uXCI6IHBrZyxcbiAgICAgICAgcHVibGludCxcbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICBcInBrZy1qc29uL2JvdHRvbS1kZWZhdWx0XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9leGFjdC1kZXBlbmRlbmN5LXZlcnNpb25cIjogXCJlcnJvclwiLFxuICAgICAgICBcInBrZy1qc29uL25vLWNvbmZsaWN0LXR5cGVzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9uby1saWZlY3ljbGUtc2NyaXB0XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9uby1ub25zdGFuZGFyZC1wcm9wZXJ0eVwiOiBcImVycm9yXCIsXG4gICAgICAgIFwicGtnLWpzb24vbm8tdHlwZXMtZGVwZW5kZW5jeS1pbi13b3Jrc3BhY2Utcm9vdFwiOiBcImVycm9yXCIsXG4gICAgICAgIFwicGtnLWpzb24vdG9wLXR5cGVzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9wcml2YXRlLXdvcmtzcGFjZS1yb290XCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9yZXF1aXJlZC1lbmdpbmVzXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwa2ctanNvbi9yZXF1aXJlZC1oYXNoYmFuZ1wiOiBcImVycm9yXCIsXG4gICAgICAgIFwicGtnLWpzb24vcmVxdWlyZWQtcmVwb3NpdG9yeVwiOiBcImVycm9yXCIsXG4gICAgICAgIFwicGtnLWpzb24vdHlwZS1tb2R1bGVcIjogXCJlcnJvclwiLFxuICAgICAgICBcInBrZy1qc29uL25vLWRlcGVuZGVuY2llcy1pbi13b3Jrc3BhY2Utcm9vdFwiOiBcImVycm9yXCIsXG4gICAgICAgIC8vIFwicHVibGludC9zdWdnZXN0aW9uXCI6IFwiZXJyb3JcIixcbiAgICAgICAgXCJwdWJsaW50L3dhcm5pbmdcIjogXCJlcnJvclwiLFxuICAgICAgICBcInB1YmxpbnQvZXJyb3JcIjogXCJlcnJvclwiLFxuICAgICAgfSxcbiAgICB9LFxuICBdIGFzIGNvbnN0O1xufVxuIl19