From ed8b2fbd6e2caf83dea30dff36eeb5e003a1cd99 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 15 Jul 2021 19:31:16 +0300 Subject: [PATCH 01/70] wip --- src/language/parser.ts | 2 ++ src/parserModel.test.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/language/parser.ts b/src/language/parser.ts index 797afd2..59ed467 100644 --- a/src/language/parser.ts +++ b/src/language/parser.ts @@ -193,6 +193,8 @@ export class ModelParser { } } + this.lexer.advance(); + throw this.unexpected(); } diff --git a/src/parserModel.test.ts b/src/parserModel.test.ts index e3546f9..0f2d5fb 100644 --- a/src/parserModel.test.ts +++ b/src/parserModel.test.ts @@ -1431,7 +1431,7 @@ describe(__filename, () => { it('correctly parse model with named with complicated values', () => { const model = ` - CompanyType ( + CompanyType = ( Branch Office Singapore | Private Company 'Limited' by Shares (Pte. Ltd.) | + amount | From 90d85dae3553e22e09cad98be2c3591f795400ca Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 15 Jul 2021 19:37:47 +0300 Subject: [PATCH 02/70] unexpected token --- src/parserModel.test.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/parserModel.test.ts b/src/parserModel.test.ts index 0f2d5fb..b804291 100644 --- a/src/parserModel.test.ts +++ b/src/parserModel.test.ts @@ -1431,7 +1431,7 @@ describe(__filename, () => { it('correctly parse model with named with complicated values', () => { const model = ` - CompanyType = ( + CompanyType ( Branch Office Singapore | Private Company 'Limited' by Shares (Pte. Ltd.) | + amount | @@ -1835,4 +1835,22 @@ describe(__filename, () => { ); }); }); + + describe('unexpected symbols', () => { + it('no unexpected symbols at enums definition', () => { + const enumString = ` + A = (b | c) + `; + + expect(() => parse(enumString)).toThrow('Syntax Error: Unexpected "="'); + }); + + it('no unexpected symbols at model definition', () => { + const enumString = ` + Model = {} + `; + + expect(() => parse(enumString)).toThrow('Syntax Error: Unexpected "="'); + }); + }); }); From 1f29036f9a30b652d243a344759c7ce8cb86ed03 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 16 Jul 2021 13:49:16 +0300 Subject: [PATCH 03/70] add testcases for enums with : --- src/lexerModels.test.ts | 16 +++++++++ src/parserModel.test.ts | 76 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/src/lexerModels.test.ts b/src/lexerModels.test.ts index 1d56309..d80c893 100644 --- a/src/lexerModels.test.ts +++ b/src/lexerModels.test.ts @@ -588,6 +588,22 @@ describe('lexer understands enums', () => { expect(tokens).toEqual(['A', '(', 'f', '|', 'b', ')']); }); + it('lexer understand normal enum with ":"', () => { + const enumString = new Source({ body: `A (f:f | b:b )` }); + + const tokens = getFullTokenList(enumString); + + expect(tokens).toEqual(['A', '(', 'f:f', '|', 'b:b', ')']); + }); + + it('lexer understand normal enum with ":" and ""', () => { + const enumString = new Source({ body: `A ("f:f" | "b:b" )` }); + + const tokens = getFullTokenList(enumString); + + expect(tokens).toEqual(['A', '(', 'f:f', '|', 'b:b', ')']); + }); + it('lexer understand enum with spaces and symbols', () => { const enumString = new Source({ body: `A diff --git a/src/parserModel.test.ts b/src/parserModel.test.ts index b804291..1517789 100644 --- a/src/parserModel.test.ts +++ b/src/parserModel.test.ts @@ -1334,6 +1334,82 @@ describe(__filename, () => { }); }); + it('correctly parse model with named enum with ":"', () => { + const model = ` + A ( + f:a:b | b:c:v | + ) + `; + + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f:a:b', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b:c:v', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const ast = parse(model); + expect(toJSONDeep(ast)).toEqual({ + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA], + }); + }); + + it('correctly parse model with named enum with ":" and " "', () => { + const model = ` + A ( + "f:a:b" | "b:c:v" | + ) + `; + + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f:a:b', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b:c:v', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const ast = parse(model); + expect(toJSONDeep(ast)).toEqual({ + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA], + }); + }); + it('correctly parse model that uses named enum', () => { const model = ` A ( From 4590b8f781dcfc55653a225461b3618cfa8a1a90 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 08:24:58 +0300 Subject: [PATCH 04/70] add stub and tests --- ...ndpointsUpdateRequestResponseMatch.test.ts | 242 ++++++++++++++++++ ...ndpointsUpdateRequestResponseMatch.rule.ts | 43 ++++ 2 files changed, 285 insertions(+) create mode 100644 src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts create mode 100644 src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts new file mode 100644 index 0000000..3d87fe8 --- /dev/null +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts @@ -0,0 +1,242 @@ +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { AnySpecSchema } from '../../../runtypes'; +import { toJSONDeep } from '../../../utils'; +import { EndpointsUpdateRequestResponseMatch } from '../recommended/endpointsUpdateRequestResponseMatch.rule'; + +describe(__filename, () => { + it('should be valid', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` +ConnectionUpdateRequestBody { + field: string + field2: string +} +ConnectionResponse { + field: string + field2: string +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline model in request', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: string } + => ConnectionResponse +`; + + const modelString = ` +ConnectionResponse { + field: string + field2: string +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline model in response', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => { field: string, field2: string } +`; + + const modelString = ` +ConnectionUpdateRequestBody { + field: string + field2: string +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline models', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: string } + => { field: string, field2: string } +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const astEndpoints = parse(sourceEndpoints); + + const schema = new AnySpecSchema({ ast: astEndpoints }); + + const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be invalid', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` +ConnectionUpdateRequestBody { + field: number + field2: string +} +ConnectionResponse { + field: string + field2: number +} +`; + + // TODO: remove after #58 + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 17 }], + message: + 'Type name of update field should ends with Update postfix, did you mean ConnectionUpdate', + }, + ]); + }); + it('should be invalid with inline model in request', () => { + const endpointString = ` +PATCH /endpoint { field: number, field2: string } + => ConnectionResponse +`; + + const modelString = ` +ConnectionResponse { + field: string + field2: string +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); +}); diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts new file mode 100644 index 0000000..2c3f4b2 --- /dev/null +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -0,0 +1,43 @@ +import { AnySpecError } from '../../../error'; +import { ASTNodeKind } from '../../../language'; +import { ASTVisitor } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +/** + * + * In PATCH RequestBody primitive types should match with Response primitive types + * + * good ✅ + * + * PATCH /endpoint ConnectionUpdateRequestBody + * => ConnectionResponse + * + * ConnectionUpdateRequestBody { + * field: string + * field2: string + * } + * + * ConnectionResponse { + * field: string + * field2: string + * } + * + * bad ❌ + * + * PATCH /endpoint ConnectionCreateRequestBody + * => ConnectionResponse + * + * ConnectionCreateRequestBody { + * field: number + * field2: number + * } + * + * ConnectionResponse { + * field: number + * field2: number + * } + * + */ +export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): ASTVisitor { + return {}; +} From 3123e38b1e960c5fd84d12c6aee9419ffabd7bb4 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 14:17:47 +0300 Subject: [PATCH 05/70] works --- src/language/predicates.ts | 18 +- ...ntsUpdateRequestResponseMatch.rule.test.ts | 386 ++++++++++++++++++ ...ndpointsUpdateRequestResponseMatch.test.ts | 242 ----------- ...ndpointsUpdateRequestResponseMatch.rule.ts | 115 +++++- 4 files changed, 515 insertions(+), 246 deletions(-) create mode 100644 src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts delete mode 100644 src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts diff --git a/src/language/predicates.ts b/src/language/predicates.ts index 99cab42..d6eb19d 100644 --- a/src/language/predicates.ts +++ b/src/language/predicates.ts @@ -1,4 +1,10 @@ -import { ASTNode, ASTNodeKind, ModelDomainTypeDefinitionNode } from './ast'; +import { + ASTNode, + ASTNodeKind, + EndpointParameterBodyNode, + EndpointTypeDefinitionNode, + ModelDomainTypeDefinitionNode, +} from './ast'; export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainTypeDefinitionNode { return ( @@ -6,3 +12,13 @@ export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainT node.kind === ASTNodeKind.ENUM_TYPE_DEFINITION ); } + +export function isEndpointTypeDefinitionNode(node: ASTNode): node is EndpointTypeDefinitionNode { + return node.kind === ASTNodeKind.ENDPOINT_TYPE_DEFINITION; +} + +export function isEndpointEndpointParameterBodyNode( + node: ASTNode, +): node is EndpointParameterBodyNode { + return node.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY; +} diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts new file mode 100644 index 0000000..624a6d3 --- /dev/null +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -0,0 +1,386 @@ +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { AnySpecSchema } from '../../../runtypes'; +import { toJSONDeep } from '../../../utils'; +import { EndpointsUpdateRequestResponseMatch } from '../recommended/endpointsUpdateRequestResponseMatch.rule'; + +describe(__filename, () => { + describe('valid', () => { + it('should be valid', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field: string + field2: string + } + ConnectionResponse { + field: string + field2: string + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline model in request', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: string } + => ConnectionResponse +`; + + const modelString = ` + ConnectionResponse { + field: string + field2: string + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline model in response', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => { field: string, field2: string } +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field: string + field2: string + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with inline models', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: string } + => { field: string, field2: string } +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const astEndpoints = parse(sourceEndpoints); + + const schema = new AnySpecSchema({ ast: astEndpoints }); + + const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should ignore inline types', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field: {a: s} + field2: string + } + ConnectionResponse { + field: {c: number} + field2: string + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + }); + describe('invalid', () => { + it('should be invalid', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field: number + field2: string + } + ConnectionResponse { + field: string + field2: string + } + `; + + // TODO: remove after #58 + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 8 }], + message: 'In PATH endpoints Response should match with RequestBody', + }, + ]); + }); + it('should be invalid with inline model in request', () => { + const endpointString = ` +PATCH /endpoint { field: number, field2: string } + => ConnectionResponse +`; + + const modelString = ` + ConnectionResponse { + field: string + field2: string + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 8 }], + message: 'In PATH endpoints Response should match with RequestBody', + }, + ]); + }); + it('should be invalid with inline model in response', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => { field: string, field2: string } +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field: string + field2: number + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 8 }], + message: 'In PATH endpoints Response should match with RequestBody', + }, + ]); + }); + it('should be invalid with inline models', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: number } + => { field: number, field2: string } +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const astEndpoints = parse(sourceEndpoints); + + const schema = new AnySpecSchema({ ast: astEndpoints }); + + const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 8 }], + message: 'In PATH endpoints Response should match with RequestBody', + }, + ]); + }); + it('should be invalid with inline models with non matching fields', () => { + const endpointString = ` +PATCH /endpoint { field: string, field2: string, f:s } + => { field: string, field2: string } +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const astEndpoints = parse(sourceEndpoints); + + const schema = new AnySpecSchema({ ast: astEndpoints }); + + const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 8 }], + message: 'In PATH endpoints Response should match with RequestBody', + }, + ]); + }); + }); +}); diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts deleted file mode 100644 index 3d87fe8..0000000 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.test.ts +++ /dev/null @@ -1,242 +0,0 @@ -import { validate } from '../..'; -import { ASTNodeKind, parse, Source } from '../../../language'; -import { AnySpecSchema } from '../../../runtypes'; -import { toJSONDeep } from '../../../utils'; -import { EndpointsUpdateRequestResponseMatch } from '../recommended/endpointsUpdateRequestResponseMatch.rule'; - -describe(__filename, () => { - it('should be valid', () => { - const endpointString = ` -PATCH /endpoint ConnectionUpdateRequestBody - => ConnectionResponse -`; - - const modelString = ` -ConnectionUpdateRequestBody { - field: string - field2: string -} -ConnectionResponse { - field: string - field2: string -} -`; - - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const sourceModels = new Source({ - body: modelString, - name: 'endpoints-model', - sourceType: 'models', - }); - - const astEndpoints = parse(sourceEndpoints); - const astModels = parse(sourceModels); - - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; - - const schema = new AnySpecSchema({ ast: combined }); - - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); - - expect(errors).toEqual([]); - }); - - it('should be valid with inline model in request', () => { - const endpointString = ` -PATCH /endpoint { field: string, field2: string } - => ConnectionResponse -`; - - const modelString = ` -ConnectionResponse { - field: string - field2: string -} -`; - - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const sourceModels = new Source({ - body: modelString, - name: 'endpoints-model', - sourceType: 'models', - }); - - const astEndpoints = parse(sourceEndpoints); - const astModels = parse(sourceModels); - - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; - - const schema = new AnySpecSchema({ ast: combined }); - - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); - - expect(errors).toEqual([]); - }); - - it('should be valid with inline model in response', () => { - const endpointString = ` -PATCH /endpoint ConnectionUpdateRequestBody - => { field: string, field2: string } -`; - - const modelString = ` -ConnectionUpdateRequestBody { - field: string - field2: string -} -`; - - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const sourceModels = new Source({ - body: modelString, - name: 'endpoints-model', - sourceType: 'models', - }); - - const astEndpoints = parse(sourceEndpoints); - const astModels = parse(sourceModels); - - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; - - const schema = new AnySpecSchema({ ast: combined }); - - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); - - expect(errors).toEqual([]); - }); - - it('should be valid with inline models', () => { - const endpointString = ` -PATCH /endpoint { field: string, field2: string } - => { field: string, field2: string } -`; - - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const astEndpoints = parse(sourceEndpoints); - - const schema = new AnySpecSchema({ ast: astEndpoints }); - - const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); - - expect(errors).toEqual([]); - }); - - it('should be invalid', () => { - const endpointString = ` -PATCH /endpoint ConnectionUpdateRequestBody - => ConnectionResponse -`; - - const modelString = ` -ConnectionUpdateRequestBody { - field: number - field2: string -} -ConnectionResponse { - field: string - field2: number -} -`; - - // TODO: remove after #58 - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const sourceModels = new Source({ - body: modelString, - name: 'endpoints-model', - sourceType: 'models', - }); - - const astEndpoints = parse(sourceEndpoints); - const astModels = parse(sourceModels); - - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; - - const schema = new AnySpecSchema({ ast: combined }); - - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); - - expect(toJSONDeep(errors)).toEqual([ - { - locations: [{ line: 3, column: 17 }], - message: - 'Type name of update field should ends with Update postfix, did you mean ConnectionUpdate', - }, - ]); - }); - it('should be invalid with inline model in request', () => { - const endpointString = ` -PATCH /endpoint { field: number, field2: string } - => ConnectionResponse -`; - - const modelString = ` -ConnectionResponse { - field: string - field2: string -} -`; - - const sourceEndpoints = new Source({ - body: endpointString, - name: 'endpoints-source', - sourceType: 'endpoints', - }); - - const sourceModels = new Source({ - body: modelString, - name: 'endpoints-model', - sourceType: 'models', - }); - - const astEndpoints = parse(sourceEndpoints); - const astModels = parse(sourceModels); - - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; - - const schema = new AnySpecSchema({ ast: combined }); - - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); - - expect(errors).toEqual([]); - }); -}); diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index 2c3f4b2..98c6991 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -1,6 +1,15 @@ import { AnySpecError } from '../../../error'; -import { ASTNodeKind } from '../../../language'; -import { ASTVisitor } from '../../../visitor'; +import { + ASTNode, + ASTNodeKind, + EndpointParameterBodyNode, + EndpointTypeDefinitionNode, + FieldDefinitionNode, + isEndpointTypeDefinitionNode, + ModelTypeDefinitionNode, + TypeNode, +} from '../../../language'; +import { ASTVisitor, visit } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; /** @@ -39,5 +48,105 @@ import { ValidationContext } from '../../validationContext'; * */ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): ASTVisitor { - return {}; + const findModelDefinition = (name?: string): ModelTypeDefinitionNode | undefined => { + let definition: ModelTypeDefinitionNode | undefined = undefined; + visit(context.getDocument(), { + ModelTypeDefinition(node) { + if (node.name.value === name) { + definition = node; + } + }, + }); + return definition; + }; + + return { + EndpointResponse(responseNode, _1, parent, _2, ancestors) { + // TODO: get rig of typecasting + const [endpointTypeDefinition] = ancestors.filter((ancestor) => { + if (Array.isArray(ancestor)) { + return false; + } + return isEndpointTypeDefinitionNode(ancestor as ASTNode); + }) as EndpointTypeDefinitionNode[]; + + if (endpointTypeDefinition.verb.name.value !== 'PATCH') { + return; + } + + if ( + responseNode.type?.kind === ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION || + responseNode.type?.kind === ASTNodeKind.LIST_TYPE + ) { + return; + } + + const responseNodeBody = responseNode.type; + + const [requestNodeParameter] = endpointTypeDefinition.url.parameters.filter( + (parameter) => parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY, + ); + + // TODO: get rig of typecasting + const requestNodeParameterBody = requestNodeParameter.type as + | EndpointParameterBodyNode + | undefined; + + if ( + requestNodeParameterBody?.type.kind === ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION || + requestNodeParameterBody?.type.kind === ASTNodeKind.LIST_TYPE + ) { + return; + } + + const requestTypeNode = requestNodeParameterBody?.type; + + const requestFieldDefinitions = + requestTypeNode?.kind === ASTNodeKind.OBJECT_TYPE_DEFINITION + ? requestTypeNode.fields + : findModelDefinition(requestTypeNode?.name.value)?.fields ?? []; + + const responseFieldDefinitions = + responseNodeBody?.kind === ASTNodeKind.OBJECT_TYPE_DEFINITION + ? responseNodeBody.fields + : findModelDefinition(responseNodeBody?.name.value)?.fields ?? []; + + if (!isFieldDefinitionsMatches(requestFieldDefinitions, responseFieldDefinitions)) { + context.reportError( + new AnySpecError( + `In PATH endpoints Response should match with RequestBody`, + responseNode.type, + ), + ); + } + }, + }; +} + +function isFieldDefinitionsMatches( + fields1: readonly FieldDefinitionNode[], + fields2: readonly FieldDefinitionNode[], +): boolean { + return fields1.every((f1) => { + const f1Name = f1.name.value; + const f1Type = f1.type; + + const [f2] = fields2.filter((f) => f.name.value === f1Name); + + if (!f2) { + return false; + } + const f2Type = f2.type; + + return isNamedTypesPrimitiveMatch(f1Type, f2Type); + }); +} + +function isNamedTypesPrimitiveMatch(t1: TypeNode, t2: TypeNode) { + if (t1.kind !== ASTNodeKind.NAMED_TYPE || t2.kind !== ASTNodeKind.NAMED_TYPE) { + // if TypeNodes not Named type not go deeper and compare only kind match + return t1.kind === t2.kind; + } + + return t1.name.value === t2.name.value; } From 44f7d70df840d62ef3e072b0d4b187d4f7d49313 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 14:33:58 +0300 Subject: [PATCH 06/70] fix --- ...ndpointsUpdateRequestResponseMatch.rule.ts | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index 98c6991..220d9c1 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -62,13 +62,8 @@ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): return { EndpointResponse(responseNode, _1, parent, _2, ancestors) { - // TODO: get rig of typecasting - const [endpointTypeDefinition] = ancestors.filter((ancestor) => { - if (Array.isArray(ancestor)) { - return false; - } - return isEndpointTypeDefinitionNode(ancestor as ASTNode); - }) as EndpointTypeDefinitionNode[]; + const endpointTypeDefinition = findEndpointTypeDefinitionNode(ancestors); + const requestNodeParameterBody = findEndpointParameterBodyNode(endpointTypeDefinition); if (endpointTypeDefinition.verb.name.value !== 'PATCH') { return; @@ -81,17 +76,6 @@ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): return; } - const responseNodeBody = responseNode.type; - - const [requestNodeParameter] = endpointTypeDefinition.url.parameters.filter( - (parameter) => parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY, - ); - - // TODO: get rig of typecasting - const requestNodeParameterBody = requestNodeParameter.type as - | EndpointParameterBodyNode - | undefined; - if ( requestNodeParameterBody?.type.kind === ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION || requestNodeParameterBody?.type.kind === ASTNodeKind.LIST_TYPE @@ -99,6 +83,8 @@ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): return; } + const responseNodeBody = responseNode.type; + const requestTypeNode = requestNodeParameterBody?.type; const requestFieldDefinitions = @@ -123,6 +109,35 @@ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): }; } +// TODO: get rig of typecasting +function findEndpointTypeDefinitionNode( + ancestors: readonly (ASTNode | readonly ASTNode[])[], +): EndpointTypeDefinitionNode { + const [endpointTypeDefinition] = ancestors.filter((ancestor) => { + if (Array.isArray(ancestor)) { + return false; + } + return isEndpointTypeDefinitionNode(ancestor as ASTNode); + }) as EndpointTypeDefinitionNode[]; + + return endpointTypeDefinition; +} + +// TODO: get rig of typecasting +function findEndpointParameterBodyNode( + endpointNode: EndpointTypeDefinitionNode, +): EndpointParameterBodyNode | undefined { + const [requestNodeParameter] = endpointNode.url.parameters.filter( + (parameter) => parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY, + ); + + const requestNodeParameterBody = requestNodeParameter.type as + | EndpointParameterBodyNode + | undefined; + + return requestNodeParameterBody; +} + function isFieldDefinitionsMatches( fields1: readonly FieldDefinitionNode[], fields2: readonly FieldDefinitionNode[], From 0c5fd828a204b8facfc82ae584fa2fe48eed68c9 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 14:37:39 +0300 Subject: [PATCH 07/70] fix --- .../recommended/endpointsUpdateRequestResponseMatch.rule.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index 220d9c1..bd9beb7 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -37,7 +37,7 @@ import { ValidationContext } from '../../validationContext'; * => ConnectionResponse * * ConnectionCreateRequestBody { - * field: number + * field: string * field2: number * } * From d8f0d472063d7c7298c0a609a281b6de837768f1 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 14:56:11 +0300 Subject: [PATCH 08/70] fix --- .../endpointsUpdateRequestResponseMatch.rule.test.ts | 10 +++++----- .../endpointsUpdateRequestResponseMatch.rule.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index 624a6d3..afcd9fc 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -241,7 +241,7 @@ PATCH /endpoint ConnectionUpdateRequestBody expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], - message: 'In PATH endpoints Response should match with RequestBody', + message: 'In PATCH endpoints Response should match with RequestBody', }, ]); }); @@ -285,7 +285,7 @@ PATCH /endpoint { field: number, field2: string } expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], - message: 'In PATH endpoints Response should match with RequestBody', + message: 'In PATCH endpoints Response should match with RequestBody', }, ]); }); @@ -329,7 +329,7 @@ PATCH /endpoint ConnectionUpdateRequestBody expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], - message: 'In PATH endpoints Response should match with RequestBody', + message: 'In PATCH endpoints Response should match with RequestBody', }, ]); }); @@ -354,7 +354,7 @@ PATCH /endpoint { field: string, field2: number } expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], - message: 'In PATH endpoints Response should match with RequestBody', + message: 'In PATCH endpoints Response should match with RequestBody', }, ]); }); @@ -378,7 +378,7 @@ PATCH /endpoint { field: string, field2: string, f:s } expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], - message: 'In PATH endpoints Response should match with RequestBody', + message: 'In PATCH endpoints Response should match with RequestBody', }, ]); }); diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index bd9beb7..c057c9e 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -100,7 +100,7 @@ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): if (!isFieldDefinitionsMatches(requestFieldDefinitions, responseFieldDefinitions)) { context.reportError( new AnySpecError( - `In PATH endpoints Response should match with RequestBody`, + `In PATCH endpoints Response should match with RequestBody`, responseNode.type, ), ); From 372dd04031cb28ec1df8df2af923eb4f144cda6f Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 15:31:14 +0300 Subject: [PATCH 09/70] fix --- .../endpointsUpdateRequestResponseMatch.rule.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index c057c9e..2159c7a 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -9,6 +9,7 @@ import { ModelTypeDefinitionNode, TypeNode, } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor, visit } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -131,7 +132,7 @@ function findEndpointParameterBodyNode( (parameter) => parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY, ); - const requestNodeParameterBody = requestNodeParameter.type as + const requestNodeParameterBody = requestNodeParameter?.type as | EndpointParameterBodyNode | undefined; @@ -163,5 +164,12 @@ function isNamedTypesPrimitiveMatch(t1: TypeNode, t2: TypeNode) { return t1.kind === t2.kind; } - return t1.name.value === t2.name.value; + if ( + specifiedScalarTypes.includes(t1.name.value ?? '') && + specifiedScalarTypes.includes(t2.name.value ?? '') + ) { + return t1.name.value === t2.name.value; + } + + return true; } From 135c4ae9496c12bf2cfa08e68bc728b5e49abce0 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:03:12 +0300 Subject: [PATCH 10/70] fix --- .../__tests__/noExplicitString.rule.test.ts | 40 +++++++++++++++++++ src/validation/rules/noExplicitString.rule.ts | 32 +++++++-------- 2 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 src/validation/rules/__tests__/noExplicitString.rule.test.ts diff --git a/src/validation/rules/__tests__/noExplicitString.rule.test.ts b/src/validation/rules/__tests__/noExplicitString.rule.test.ts new file mode 100644 index 0000000..1ad5608 --- /dev/null +++ b/src/validation/rules/__tests__/noExplicitString.rule.test.ts @@ -0,0 +1,40 @@ +import { toJSONDeep } from '../../../utils'; +import { NoExplicitStringRule } from '../noExplicitString.rule'; +import { expectValidationErrors } from './fixtures'; + +function getErrors(queryStr: string) { + return expectValidationErrors(NoExplicitStringRule, queryStr); +} + +function expectValid(queryStr: string) { + const errors = getErrors(queryStr); + + expect(errors).toEqual([]); +} + +describe(__filename, () => { + it('should be valid', () => { + expectValid(` + AcDocument { + field + } +`); + }); + + it('should be invalid', () => { + const errors = getErrors( + ` + Document { + field: s + } +`, + ); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 3, column: 15 }], + message: 'No need to explicitly specify string type since it is the default', + }, + ]); + }); +}); diff --git a/src/validation/rules/noExplicitString.rule.ts b/src/validation/rules/noExplicitString.rule.ts index 0a147e9..a863dfb 100644 --- a/src/validation/rules/noExplicitString.rule.ts +++ b/src/validation/rules/noExplicitString.rule.ts @@ -1,12 +1,11 @@ -import { AnySpecError } from '../../error'; -import { NamedTypeNode } from '../../language'; import { ASTVisitor } from '../../visitor'; import { ValidationContext } from '../validationContext'; import { stringAliases } from '../../runtypes/specifiedScalarTypes'; +import { ASTNodeKind } from '../../language'; +import { AnySpecError } from '../../error'; /** - * * * good ✅ * @@ -20,24 +19,23 @@ import { stringAliases } from '../../runtypes/specifiedScalarTypes'; * field: s * } * - * */ export function NoExplicitStringRule(context: ValidationContext): ASTVisitor { return { - NamedType(node, _1, parent, _2, ancestors) { - const castedValue = defaultNamedTypeCast(node); - if (stringAliases.includes(castedValue)) { - context.reportError( - new AnySpecError( - `No need to explicitly specify string type since it is the default`, - node, - ), - ); + FieldDefinition(node, _1, parent, _2, ancestors) { + if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (stringAliases.includes(node.type.name.value)) { + context.reportError( + new AnySpecError( + `No need to explicitly specify string type since it is the default`, + node.type, + ), + ); + } } }, }; } - -function defaultNamedTypeCast(node: NamedTypeNode) { - return node.name.value ? node.name.value : 'string'; -} From 7793b7c87f748d19a6e55eda8262b53b9c22f621 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:18:10 +0300 Subject: [PATCH 11/70] fix --- ...mmendedPostfixForUpdateModels.rule.test.ts | 40 +++++++++++++++++++ .../recommendedPostfixForUpdateModels.rule.ts | 3 ++ 2 files changed, 43 insertions(+) diff --git a/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts b/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts index 202ae67..948ebd4 100644 --- a/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts @@ -44,6 +44,46 @@ RequestModel { expect(errors).toEqual([]); }); + it('should be valid with scalar types', () => { + const endpointString = ` +PATCH /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: s, + referralCode +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [RecommendedPostfixForUpdateModels]); + + expect(errors).toEqual([]); + }); + it('should be invalid', () => { const endpointString = ` PATCH /endpoint RequestModel diff --git a/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts index be7d3ea..8cb8b7b 100644 --- a/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts +++ b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts @@ -1,5 +1,6 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor, visit } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -55,6 +56,8 @@ export function RecommendedPostfixForUpdateModels(context: ValidationContext): A node.fields.forEach((fieldDefinition) => { if ( fieldDefinition.type.kind === ASTNodeKind.NAMED_TYPE && + fieldDefinition.type.name.value && + !specifiedScalarTypes.includes(fieldDefinition.type.name.value) && !fieldDefinition.type.name.value?.endsWith('Update') ) { context.reportError( From d248dc851b321cc2f21a4a4ac987af906ee2e1ca Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:21:46 +0300 Subject: [PATCH 12/70] wip --- .../recommended/recommendedPostfixForCreateModels.rule.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts index bd52c0d..04514bd 100644 --- a/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts +++ b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts @@ -1,5 +1,6 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor, visit } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -55,6 +56,8 @@ export function RecommendedPostfixForCreateModels(context: ValidationContext): A node.fields.forEach((fieldDefinition) => { if ( fieldDefinition.type.kind === ASTNodeKind.NAMED_TYPE && + fieldDefinition.type.name.value && + !specifiedScalarTypes.includes(fieldDefinition.type.name.value) && !fieldDefinition.type.name.value?.endsWith('New') ) { context.reportError( From 45baa3a22f99a93d4c7f0ced5602fe7ad844eb32 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:23:01 +0300 Subject: [PATCH 13/70] add test --- ...mmendedPostfixForCreateModels.rule.test.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts b/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts index ecd0a92..4b867a6 100644 --- a/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts @@ -44,6 +44,46 @@ RequestModel { expect(errors).toEqual([]); }); + it('should be valid with scalar types', () => { + const endpointString = ` +POST /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: s, + referralCode +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [RecommendedPostfixForCreateModels]); + + expect(errors).toEqual([]); + }); + it('should be invalid', () => { const endpointString = ` POST /endpoint RequestModel From b4a97348ca1d9977addaa19f31cd6042a4f98aac Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:31:57 +0300 Subject: [PATCH 14/70] fix --- ...ommendedModelBodyFieldPostfix.rule.test.ts | 20 +++++++++++++++++++ .../recommendedModelBodyFieldPostfix.rule.ts | 7 +++++++ 2 files changed, 27 insertions(+) diff --git a/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts b/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts index 4bd3b81..b13bcf4 100644 --- a/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts @@ -23,6 +23,26 @@ describe(__filename, () => { `); }); + it('should be valid v2', () => { + expectValid(` + RequestQuery { + body, + } + + RequestQueryRequestBody {} +`); + }); + + it('should be valid v3', () => { + expectValid(` + RequestQuery { + body: s, + } + + RequestQueryRequestBody {} +`); + }); + it('should be invalid', () => { const errors = getErrors( ` diff --git a/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts index 83f6000..aeb7325 100644 --- a/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts +++ b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts @@ -1,5 +1,6 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -26,6 +27,12 @@ export function RecommendedModelBodyFieldPostfix(context: ValidationContext): AS FieldDefinition(node) { if (node.name.value === 'body') { if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (specifiedScalarTypes.includes(node.type.name.value)) { + return; + } if (!node.type.name.value?.endsWith(POSTFIX)) { context.reportError( new AnySpecError( From fcc9e9b7432f4d790a6d91d69f39a02e56684d24 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:39:49 +0300 Subject: [PATCH 15/70] fix --- .../recommendedFilterPostfix.rule.test.ts | 14 ++++++++++++++ .../recommended/recommendedFilterPostfix.rule.ts | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts b/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts index 422ac1e..96a4270 100644 --- a/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts @@ -23,6 +23,20 @@ describe(__filename, () => { `); }); + it('should be valid v2', () => { + expectValid(` + BkConnectionIndexRequestQuery !{ + filter, + } +`); + }); + it('should be valid v3', () => { + expectValid(` + BkConnectionIndexRequestQuery !{ + filter: s, + } +`); + }); it('should be invalid', () => { const errors = getErrors( ` diff --git a/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts index 0de408a..0d9f010 100644 --- a/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts +++ b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts @@ -1,5 +1,6 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -26,6 +27,12 @@ export function RecommendedFilterPostfix(context: ValidationContext): ASTVisitor FieldDefinition(node) { if (node.name.value === 'filter') { if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (specifiedScalarTypes.includes(node.type.name.value)) { + return; + } if (!node.type.name.value?.endsWith(POSTFIX)) { context.reportError( new AnySpecError( From ac537a989701a301ebb4d993601bdd2ee1f790a7 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 17 Jul 2021 17:47:16 +0300 Subject: [PATCH 16/70] fix --- .../recommendedBodyModelName.rule.test.ts | 20 +++++++++++++++++++ .../recommendedBodyModelName.rule.ts | 8 ++++++++ 2 files changed, 28 insertions(+) diff --git a/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts b/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts index e65a9b8..c4f4fcb 100644 --- a/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts @@ -23,6 +23,26 @@ describe(__filename, () => { `); }); + it('should be valid v2', () => { + expectValid(` + Model { + body, + } + + ModelRequestBody {} +`); + }); + + it('should be valid v3', () => { + expectValid(` + Model { + body: s, + } + + ModelRequestBody {} +`); + }); + it('should be invalid', () => { const errors = getErrors( ` diff --git a/src/validation/rules/recommended/recommendedBodyModelName.rule.ts b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts index 4b44a14..ff1925b 100644 --- a/src/validation/rules/recommended/recommendedBodyModelName.rule.ts +++ b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts @@ -1,5 +1,6 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; @@ -38,6 +39,13 @@ export function RecommendedBodyModelName(context: ValidationContext): ASTVisitor return; } + if (!fieldTypeName) { + return; + } + if (specifiedScalarTypes.includes(fieldTypeName)) { + return; + } + if (!fieldTypeName?.includes(modelName)) { context.reportError( new AnySpecError( From e3972c554b79fe6a206961df782978424e8fbe33 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 19 Jul 2021 23:40:06 +0300 Subject: [PATCH 17/70] wip --- src/language/index.ts | 1 + src/language/printer.ts | 77 +++++++++++++++++++++++++++++++++++++++++ src/printer.test.ts | 26 ++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 src/language/printer.ts create mode 100644 src/printer.test.ts diff --git a/src/language/index.ts b/src/language/index.ts index 64222bd..0af1f74 100644 --- a/src/language/index.ts +++ b/src/language/index.ts @@ -5,3 +5,4 @@ export * from './parser'; export * from './source'; export * from './token'; export * from './location'; +export * from './printer'; diff --git a/src/language/printer.ts b/src/language/printer.ts new file mode 100644 index 0000000..4076c72 --- /dev/null +++ b/src/language/printer.ts @@ -0,0 +1,77 @@ +import { ASTReducer, visit } from '../visitor'; +import { ASTNode } from './ast'; + +/** + * Converts an AST into a string, using one set of reasonable + * formatting rules. + */ +export function print(ast: ASTNode): string { + return visit(ast, printDocASTReducer); +} + +const printDocASTReducer: ASTReducer = { + Name: { leave: (node) => node.value ?? '' }, + + NamedType: { leave: (node) => node.name }, + + Document: { + leave: (node) => join(node.definitions, '\n\n'), + }, + + ModelTypeDefinition: { + leave: ({ name, description, fields }) => { + if (fields.length === 0) { + return `${description}${name} {}`; + } + return join([name, block(fields)], ' '); + }, + }, + Description: { + leave: (node) => { + const descriptions = node.value.split('\n'); + return `${descriptions.map((description) => `// ${description}`).join('\n')}\n`; + }, + }, + FieldDefinition: { + leave: ({ name, type, optional }) => { + const opt = optional ? '?' : ''; + if (type.length === 0) { + return `${name}${opt}`; + } + return `${name}${opt}: ${type}`; + }, + }, +}; + +/** Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/ */ +type Maybe = null | undefined | T; +/** + * Given maybeArray, print an empty string if it is null or empty, otherwise + * print all items together separated by separator if provided + */ +function join(maybeArray: Maybe>, separator = ''): string { + return maybeArray?.filter((x) => x).join(separator) ?? ''; +} + +/** + * Given array, print each item on its own line, wrapped in an indented `{ }` block. + */ +function block(array: Maybe>): string { + return wrap('{\n', indent(join(array, ',\n')), '\n}'); +} + +/** + * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string. + */ +function wrap(start: string, maybeString: Maybe, end: string = ''): string { + return maybeString != null && maybeString !== '' ? start + maybeString + end : ''; +} + +function indent(str: string): string { + return wrap(' ', str.replace(/\n/g, '\n ')); +} + +function hasMultilineItems(maybeArray: Maybe>): boolean { + // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203') + return maybeArray?.some((str) => str.includes('\n')) ?? false; +} diff --git a/src/printer.test.ts b/src/printer.test.ts new file mode 100644 index 0000000..727309d --- /dev/null +++ b/src/printer.test.ts @@ -0,0 +1,26 @@ +import { parse, print } from './language'; +import { dedent } from './__testsUtils__'; + +describe(__filename, () => { + it('correctly parse and print model without description', () => { + const model = `AcDocument {}`; + + const ast = parse(model); + const printed = print(ast); + expect(printed).toEqual(dedent`AcDocument {}`); + }); + it('correctly parse and print model without description', () => { + const model = ` +// лул +// kek +AcDocument {name?: s[], nameL2: Name}`; + + const ast = parse(model); + const printed = print(ast); + console.log(printed); + expect(printed).toEqual(dedent` + // лул + // kek + AcDocument {}`); + }); +}); From 486d20af4531df828b9533ff2a2e47aacf4bd8fb Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 15:27:55 +0300 Subject: [PATCH 18/70] add tests --- src/language/printer.ts | 2 +- src/printer.test.ts | 307 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 294 insertions(+), 15 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index 4076c72..60ee0a1 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -21,7 +21,7 @@ const printDocASTReducer: ASTReducer = { ModelTypeDefinition: { leave: ({ name, description, fields }) => { if (fields.length === 0) { - return `${description}${name} {}`; + return `${description ?? ''}${name} {}`; } return join([name, block(fields)], ' '); }, diff --git a/src/printer.test.ts b/src/printer.test.ts index 727309d..837eec1 100644 --- a/src/printer.test.ts +++ b/src/printer.test.ts @@ -1,26 +1,305 @@ -import { parse, print } from './language'; +import { ASTNodeKind, parse, print } from './language'; import { dedent } from './__testsUtils__'; describe(__filename, () => { - it('correctly parse and print model without description', () => { - const model = `AcDocument {}`; + it('correctly print model with description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, + extendsModels: [], + }, + ], + }; - const ast = parse(model); const printed = print(ast); - expect(printed).toEqual(dedent`AcDocument {}`); - }); - it('correctly parse and print model without description', () => { - const model = ` + expect(printed).toEqual(dedent` // лул // kek -AcDocument {name?: s[], nameL2: Name}`; +AcDocument {} +`); + }); + + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; - const ast = parse(model); const printed = print(ast); - console.log(printed); + + expect(printed).toEqual(dedent` +AcDocument {} +`); + }); + + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument {} +`); + }); + + it('correctly print model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name +} +`); + }); + + it('correctly print model fields with trailing comma', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name, + surname +} +`); + }); + + it('correctly print model fields with s', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name: s, + surname +} +`); + }); + + it('correctly print optional model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = print(ast); + expect(printed).toEqual(dedent` - // лул - // kek - AcDocument {}`); +AcDocument { + name?: s, + surname +} +`); }); }); From e2b7bfc0203df9331ffe8c2f1998a2613ea2f1cb Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 16:02:58 +0300 Subject: [PATCH 19/70] list type --- src/language/printer.ts | 14 ++++- src/printer.test.ts | 131 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index 60ee0a1..b8b9534 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -1,5 +1,5 @@ import { ASTReducer, visit } from '../visitor'; -import { ASTNode } from './ast'; +import { ASTNode, ASTNodeKind } from './ast'; /** * Converts an AST into a string, using one set of reasonable @@ -41,6 +41,18 @@ const printDocASTReducer: ASTReducer = { return `${name}${opt}: ${type}`; }, }, + ListType: { + leave: (node) => { + const arraySymbol = '[]'; + let list: string[] = []; + let currentNode: any = node; + while (currentNode.kind === ASTNodeKind.LIST_TYPE) { + list.push(arraySymbol); + currentNode = node.type; + } + return `${node.type}${list.join()}`; + }, + }, }; /** Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/ */ diff --git a/src/printer.test.ts b/src/printer.test.ts index 837eec1..7212c86 100644 --- a/src/printer.test.ts +++ b/src/printer.test.ts @@ -300,6 +300,137 @@ AcDocument { name?: s, surname } +`); + }); + + it('correctly print optional model fields without type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?, + surname +} +`); + }); + + it('correctly print field array type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = print(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?: s[], + surname: b[][] +} `); }); }); From f9da361b475e6cb6b1d2a93adada9048ff383868 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 19:56:59 +0300 Subject: [PATCH 20/70] model printer --- src/index.ts | 2 + src/language/printer.ts | 65 +- src/parserModel.test.ts | 2 +- src/printer.test.ts | 1693 +++++++++++++++++++++----- src/visitor.ts | 1 + temp/openapi.json | 16 +- temp/spec/models/kek.models.tinyspec | 10 +- 7 files changed, 1477 insertions(+), 312 deletions(-) create mode 100644 src/index.ts diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..5b7300e --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from "./printLocation" +export * from "./visitor" diff --git a/src/language/printer.ts b/src/language/printer.ts index b8b9534..b888d78 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -5,11 +5,20 @@ import { ASTNode, ASTNodeKind } from './ast'; * Converts an AST into a string, using one set of reasonable * formatting rules. */ -export function print(ast: ASTNode): string { - return visit(ast, printDocASTReducer); + +const MAX_LINE_LENGTH = 80; + +export function printModels(ast: ASTNode): string { + return visit(ast, printDocASTReducerModel); } -const printDocASTReducer: ASTReducer = { +const printDocASTReducerModel: ASTReducer = { + EndpointNamespaceTypeDefinition: { + leave: () => { + throw new Error("Can't parse AST with EndpointNamespaceTypeDefinition"); + }, + }, + Name: { leave: (node) => node.value ?? '' }, NamedType: { leave: (node) => node.name }, @@ -19,11 +28,13 @@ const printDocASTReducer: ASTReducer = { }, ModelTypeDefinition: { - leave: ({ name, description, fields }) => { + leave: ({ name, description, fields, strict, extendsModels }) => { + const extModels = extendsModels.length > 0 ? ` < ${extendsModels.join(', ')}` : ''; + const strct = strict ? '!' : ''; if (fields.length === 0) { - return `${description ?? ''}${name} {}`; + return `${description ?? ''}${name}${extModels} ${strct}{}`; } - return join([name, block(fields)], ' '); + return `${name}${extModels} ${strct}${block(fields)}`; }, }, Description: { @@ -53,6 +64,36 @@ const printDocASTReducer: ASTReducer = { return `${node.type}${list.join()}`; }, }, + EnumValueDefinition: { + leave: ({ name }) => name, + }, + EnumInlineTypeDefinition: { + leave: ({ values }) => { + const str = `( ${join(values, ' | ')} )`; + if (str.length > MAX_LINE_LENGTH) { + return enumBlock(values); + } + return str; + }, + }, + ObjectTypeDefinition: { + leave: ({ fields, strict }) => { + const strct = strict ? '!' : ''; + if (fields.length === 0) { + return `${strct}{}`; + } + return `${strct}${block(fields)}`; + }, + }, + EnumTypeDefinition: { + leave: ({ name, values }) => { + const str = `${name} ( ${join(values, ' | ')} )`; + if (str.length > MAX_LINE_LENGTH) { + return `${name} ${enumBlock(values)}`; + } + return str; + }, + }, }; /** Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/ */ @@ -72,6 +113,13 @@ function block(array: Maybe>): string { return wrap('{\n', indent(join(array, ',\n')), '\n}'); } +/** + * Given array, print each item on its own line, wrapped in an indented `( )` block with `|` separator. + */ +function enumBlock(array: Maybe>): string { + return wrap('(\n', indent(join(array, ' |\n')), '\n)'); +} + /** * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string. */ @@ -82,8 +130,3 @@ function wrap(start: string, maybeString: Maybe, end: string = ''): stri function indent(str: string): string { return wrap(' ', str.replace(/\n/g, '\n ')); } - -function hasMultilineItems(maybeArray: Maybe>): boolean { - // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2203') - return maybeArray?.some((str) => str.includes('\n')) ?? false; -} diff --git a/src/parserModel.test.ts b/src/parserModel.test.ts index 1517789..29bede4 100644 --- a/src/parserModel.test.ts +++ b/src/parserModel.test.ts @@ -1188,7 +1188,7 @@ describe(__filename, () => { }); }); - it('should parse strict nested types coorectly', () => { + it('should parse strict nested types correctly', () => { const model = ` AcDocument < Kek, Lel !{ pathParameters: !{ diff --git a/src/printer.test.ts b/src/printer.test.ts index 7212c86..5d04b58 100644 --- a/src/printer.test.ts +++ b/src/printer.test.ts @@ -1,404 +1,1329 @@ -import { ASTNodeKind, parse, print } from './language'; +import { + ASTNodeKind, + EnumTypeDefinitionNode, + ModelTypeDefinitionNode, + printModels, +} from './language'; import { dedent } from './__testsUtils__'; describe(__filename, () => { - it('correctly print model with description', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + describe('models', () => { + it('correctly print model with description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, + extendsModels: [], }, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - strict: false, - description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, - extendsModels: [], - }, - ], - }; + ], + }; - const printed = print(ast); - expect(printed).toEqual(dedent` + const printed = printModels(ast); + expect(printed).toEqual(dedent` // лул // kek AcDocument {} `); - }); + }); - it('correctly print empty model without description', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; + ], + }; - const printed = print(ast); + const printed = printModels(ast); - expect(printed).toEqual(dedent` + expect(printed).toEqual(dedent` AcDocument {} `); - }); + }); - it('correctly print empty model without description', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; + ], + }; - const printed = print(ast); + const printed = printModels(ast); - expect(printed).toEqual(dedent` + expect(printed).toEqual(dedent` AcDocument {} `); - }); + }); - it('correctly print model fields', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', - }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + it('correctly print model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; - const printed = print(ast); + ], + }; + const printed = printModels(ast); - expect(printed).toEqual(dedent` + expect(printed).toEqual(dedent` AcDocument { name } `); - }); + }); - it('correctly print model fields with trailing comma', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', + it('correctly print model fields with trailing comma', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'surname', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name, + surname +} +`); + }); + + it('correctly print model fields with s', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; - const printed = print(ast); + ], + }; - expect(printed).toEqual(dedent` + const printed = printModels(ast); + + expect(printed).toEqual(dedent` AcDocument { - name, + name: s, surname } `); - }); + }); - it('correctly print model fields with s', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', + it('correctly print optional model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: 's', + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'surname', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?: s, + surname +} +`); + }); + + it('correctly print optional model fields without type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; + ], + }; - const printed = print(ast); + const printed = printModels(ast); - expect(printed).toEqual(dedent` + expect(printed).toEqual(dedent` AcDocument { - name: s, + name?, surname } `); - }); + }); - it('correctly print optional model fields', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: true, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', + it('correctly print field array type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: 's', + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'surname', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?: s[], + surname: b[][] +} +`); + }); + + it('correctly print strict mode models', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, }, - type: { - kind: ASTNodeKind.NAMED_TYPE, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + extendsModels: [], }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; + ], + }; - const printed = print(ast); + const printed = printModels(ast); - expect(printed).toEqual(dedent` -AcDocument { - name?: s, - surname + expect(printed).toEqual(dedent` +AcDocument !{ + name?: s[], + surname: b[] } `); - }); + }); - it('correctly print optional model fields without type', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: true, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', + it('correctly print extends model', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, }, - type: { + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek { + name?: s[], + surname: b[] +} +`); + }); + + it('correctly print with multiple extends model and strict model', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'surname', + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, }, - type: { + { kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + name?: s[], + surname: b[] +} +`); + }); + + it('correctly print model with inline enum', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, name: { kind: ASTNodeKind.NAME, - value: undefined, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, }, }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'standard' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'service' }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], - }, - ], - }; - - const printed = print(ast); - - expect(printed).toEqual(dedent` -AcDocument { - name?, - surname + ], + }; + const printed = printModels(ast); + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + name?: s[], + type?: ( standard | service ), + surname: b[] } `); - }); + }); + it('correctly print model with inline type definitions', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'standard' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'service' }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'kek', + }, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'conversationId', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'users', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'id', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'nickname', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'avatar', + }, + omitted: false, + optional: true, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + name?: s[], + type?: ( standard | service ), + kek: { + conversationId: i, + users: { + id: i, + nickname, + avatar? + }[] + }, + surname: b[] +} +`); + }); + it('should print strict nested types correctly', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, - it('correctly print field array type', () => { - const ast = { - kind: ASTNodeKind.DOCUMENT, - definitions: [ - { - fields: [ - { - omitted: false, - optional: true, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'name', + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'pathParameters', + }, + type: { + strict: true, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + omitted: false, + optional: false, + name: { kind: ASTNodeKind.NAME, value: 'pathParameters' }, + type: { + strict: true, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [], + }, + }, + ], + }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, }, - type: { - kind: ASTNodeKind.LIST_TYPE, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + pathParameters: !{ + pathParameters: !{} + } +} +`); + }); + + it('correctly print multiple models', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, type: { kind: ASTNodeKind.NAMED_TYPE, name: { kind: ASTNodeKind.NAME, - value: 's', + value: undefined, }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument2', }, - { - omitted: false, - optional: false, - kind: ASTNodeKind.FIELD_DEFINITION, - name: { - kind: ASTNodeKind.NAME, - value: 'surname', + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument {} + +AcDocument2 { + name +} +`); + }); + }); + describe('enums', () => { + it('correctly print model with short named enum', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, }, - type: { - kind: ASTNodeKind.LIST_TYPE, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }, + ], + }; + const printed = printModels(ast); + expect(printed).toEqual(dedent` +A ( f | b ) +`); + }); + it('correctly print model with long named enum', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'Branch Office Singapore', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: "Private Company 'Limited' by Shares (Pte. Ltd.)", + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: '+ amount', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b-office-singapore', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'CompanyType', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +CompanyType ( + Branch Office Singapore | + Private Company 'Limited' by Shares (Pte. Ltd.) | + + amount | + b-office-singapore +) +`); + }); + it('correctly print model with complicated inline enums', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: '+ amount' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: '- amount' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'summ +' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: "Private Company 'Limited' by Shares (Pte. Ltd.)", + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'kek', + }, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'conversationId', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'users', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'id', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'nickname', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'avatar', + }, + omitted: false, + optional: true, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, type: { kind: ASTNodeKind.LIST_TYPE, type: { @@ -410,27 +1335,201 @@ AcDocument { }, }, }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + name?: s[], + type?: ( + + amount | + - amount | + summ + | + Private Company 'Limited' by Shares (Pte. Ltd.) + ), + kek: { + conversationId: i, + users: { + id: i, + nickname, + avatar? + }[] + }, + surname: b[] +} +`); + }); + it('correctly print model that uses named enum', () => { + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const EnumB: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'c', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'd', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'B', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const MyModel: ModelTypeDefinitionNode = { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'color', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, }, - ], - name: { - kind: ASTNodeKind.NAME, - value: 'AcDocument', }, - strict: false, - kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, - extendsModels: [], + ], + name: { + kind: ASTNodeKind.NAME, + value: 'MyModel', }, - ], - }; + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }; - const printed = print(ast); + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA, MyModel, EnumB], + }; - expect(printed).toEqual(dedent` -AcDocument { - name?: s[], - surname: b[][] + const printed = printModels(ast); + expect(printed).toEqual(dedent` +A ( f | b ) + +MyModel { + color: A } + +B ( c | d ) `); + }); + }); + describe('throw error', () => { + it('should throw error if trying use printModels on ast with EndpointNamespaceTypeDefinition', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + kind: ASTNodeKind.ENDPOINT_NAMESPACE_TYPE_DEFINITION, + endpoints: [ + { + kind: ASTNodeKind.ENDPOINT_TYPE_DEFINITION, + verb: { + kind: ASTNodeKind.ENDPOINT_VERB, + name: { kind: ASTNodeKind.NAME, value: 'POST' }, + }, + url: { + kind: ASTNodeKind.ENDPOINT_URL, + name: { kind: ASTNodeKind.NAME, value: '/endpoint' }, + parameters: [ + { + kind: ASTNodeKind.ENDPOINT_PARAMETER, + type: { + kind: ASTNodeKind.ENDPOINT_PARAMETER_BODY, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'RequestModel' }, + }, + }, + }, + ], + }, + responses: [ + { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, + kind: ASTNodeKind.ENDPOINT_RESPONSE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'ResponseModel', + }, + }, + }, + ], + }, + ], + }, + ], + }; + + expect(() => printModels(ast)).toThrow(); + }); }); }); diff --git a/src/visitor.ts b/src/visitor.ts index d5a09d6..ae9918d 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -90,6 +90,7 @@ const QueryDocumentKeys = { EndpointNamespaceTypeDefinition: ['tag', 'endpoints'], EndpointTypeDefinition: ['verb', 'url', 'responses'], EndpointResponse: ['type'], + EnumTypeDefinition: ['name', 'values'], EndpointVerb: ['name'], EndpointUrl: ['name', 'parameters'], EndpointParameter: ['type'], diff --git a/temp/openapi.json b/temp/openapi.json index 71b066c..e7a07ea 100644 --- a/temp/openapi.json +++ b/temp/openapi.json @@ -90,10 +90,13 @@ "pathParameters" ] }, + "CompanyBankStatementSummaryQuery": { + "type": "object" + }, "WSEventsFromServerForAgent": { "type": "object", "properties": { - "messages:New": { + "messages:new": { "anyOf": [ { "$ref": "#/definitions/WSOnNewMessageForAgent" @@ -106,7 +109,7 @@ "messages:update": { "anyOf": [ { - "$ref": "#/definitions/WSOnUpdateMessageForAgent" + "$ref": "#/definitions/Enum" }, { "type": "null" @@ -114,6 +117,15 @@ ] } } + }, + "Enum": { + "enum": [ + "'Aaa'", + "'Bb'", + "'Cccc'", + "'BBB'", + "" + ] } } } \ No newline at end of file diff --git a/temp/spec/models/kek.models.tinyspec b/temp/spec/models/kek.models.tinyspec index 0312fa6..1c2a9bc 100644 --- a/temp/spec/models/kek.models.tinyspec +++ b/temp/spec/models/kek.models.tinyspec @@ -17,5 +17,13 @@ CompanyBankStatementSummaryQuery {} WSEventsFromServerForAgent { messages:new?: WSOnNewMessageForAgent, - messages:update?: WSOnUpdateMessageForAgent, + messages:update?: Enum, } + + +Enum ( + 'Aaa' | + 'Bb' | + 'Cccc' | + 'BBB' | +) \ No newline at end of file From 23a056b1ff4efdeaa4817bfe6227b13df0e95576 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 19:59:15 +0300 Subject: [PATCH 21/70] rename test --- src/{printer.test.ts => printerModel.test.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{printer.test.ts => printerModel.test.ts} (100%) diff --git a/src/printer.test.ts b/src/printerModel.test.ts similarity index 100% rename from src/printer.test.ts rename to src/printerModel.test.ts From 88d2658fe33fe5761f6326f6d9f48afb5c280c5c Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 20:49:56 +0300 Subject: [PATCH 22/70] basic cli --- package.json | 1 + src/cli/autoformat.ts | 64 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/cli/autoformat.ts diff --git a/package.json b/package.json index 7447df7..a54c3f2 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "prepublish:cli": "cd src/cli && npm install && cd .. && npm run clean && npm run build", "publish:cli": "npm publish ./src/cli", "test:cli": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/bin.ts src/cli/spec -ns agent client", + "test:cli-printer": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/autoformat.ts", "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec", "test:tinyspec:build": "tinyspec --json --add-nulls -s temp/spec/ -o ../", "lint": "eslint --max-warnings 0 'src/**/*.ts'", diff --git a/src/cli/autoformat.ts b/src/cli/autoformat.ts new file mode 100644 index 0000000..53ac8e2 --- /dev/null +++ b/src/cli/autoformat.ts @@ -0,0 +1,64 @@ +#!/usr/bin/env node + +import { Command } from 'commander'; +import { default as getPath } from 'path'; +import { readFile, writeFile } from 'fs/promises'; +import { parse, Source, printModels } from '../language'; + +async function main() { + const program = new Command(); + program.arguments(''); + + program.parse(); + + try { + const { args } = program; + + const argPaths = args.map((arg) => getPath.resolve(process.cwd(), arg)); + + const argumentPath = argPaths[0]; + + const sources = await mapPathsToSources(argumentPath); + + const parsed = getParsed(sources); + + const printed = printModels(parsed); + + await writeFile(argumentPath, printed); + } catch (e) { + console.error(e); + } +} + +main(); + +// private + +function isEndpoint(val: string) { + return val.match(/\.endpoints\.tinyspec$/) !== null; +} + +function isModel(val: string) { + return val.match(/\.models\.tinyspec$/) !== null; +} + +async function mapPathsToSources(paths: string): Promise { + const specBodyFiles = await readFile(paths, { encoding: 'utf-8' }); + if (isEndpoint(paths)) { + return new Source({ body: specBodyFiles, sourceType: 'endpoints', name: specBodyFiles }); + } + + if (isModel(paths)) { + return new Source({ body: specBodyFiles, sourceType: 'models', name: specBodyFiles }); + } + + throw new Error(`File doesn't contain .endpoints.tinyspec or .models.tinyspec extension`); +} + +function getParsed(source: Source) { + try { + return parse(source); + } catch (error) { + throw error; + } +} From c40bc75cb578f089358995ea9593998a4f1a7978 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 20 Jul 2021 21:09:52 +0300 Subject: [PATCH 23/70] fix --- src/language/printer.ts | 2 +- src/printerModel.test.ts | 3 ++- temp/openapi.json | 4 ++++ temp/spec/models/kek.models.tinyspec | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index b888d78..12e08f5 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -34,7 +34,7 @@ const printDocASTReducerModel: ASTReducer = { if (fields.length === 0) { return `${description ?? ''}${name}${extModels} ${strct}{}`; } - return `${name}${extModels} ${strct}${block(fields)}`; + return `${description ?? ''}${name}${extModels} ${strct}${block(fields)}`; }, }, Description: { diff --git a/src/printerModel.test.ts b/src/printerModel.test.ts index 5d04b58..60c8042 100644 --- a/src/printerModel.test.ts +++ b/src/printerModel.test.ts @@ -121,6 +121,7 @@ AcDocument {} const printed = printModels(ast); expect(printed).toEqual(dedent` +// My _perfect_ tiny model AcDocument { name } @@ -172,7 +173,7 @@ AcDocument { }, strict: false, kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: undefined, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'My _perfect_ tiny model' }, extendsModels: [], }, ], diff --git a/temp/openapi.json b/temp/openapi.json index e7a07ea..f9f4b49 100644 --- a/temp/openapi.json +++ b/temp/openapi.json @@ -94,6 +94,8 @@ "type": "object" }, "WSEventsFromServerForAgent": { + "title": "вуыск", + "description": "вуыск", "type": "object", "properties": { "messages:new": { @@ -119,6 +121,8 @@ } }, "Enum": { + "title": "вуыск", + "description": "вуыск", "enum": [ "'Aaa'", "'Bb'", diff --git a/temp/spec/models/kek.models.tinyspec b/temp/spec/models/kek.models.tinyspec index 1c2a9bc..c042e3f 100644 --- a/temp/spec/models/kek.models.tinyspec +++ b/temp/spec/models/kek.models.tinyspec @@ -14,13 +14,13 @@ C { CompanyBankStatementSummaryQuery {} - +// вуыск WSEventsFromServerForAgent { messages:new?: WSOnNewMessageForAgent, messages:update?: Enum, } - +// вуыск Enum ( 'Aaa' | 'Bb' | From 1542d6b252538cb63b40a1fc3d98465efa7d6584 Mon Sep 17 00:00:00 2001 From: Andrey Lukin Date: Wed, 21 Jul 2021 15:38:56 +0300 Subject: [PATCH 24/70] Fix known-type-names (#88) --- src/language/predicates.ts | 13 ++- .../__tests__/knownTypeNames.rule.test.ts | 89 ++++++++++++++++++- .../__tests__/noExplicitString.rule.test.ts | 2 +- src/validation/rules/knownTypeNames.rule.ts | 12 ++- src/visitor.ts | 1 + 5 files changed, 110 insertions(+), 7 deletions(-) diff --git a/src/language/predicates.ts b/src/language/predicates.ts index 99cab42..b2fceaf 100644 --- a/src/language/predicates.ts +++ b/src/language/predicates.ts @@ -1,4 +1,9 @@ -import { ASTNode, ASTNodeKind, ModelDomainTypeDefinitionNode } from './ast'; +import { + ASTNode, + ASTNodeKind, + EndpointNamespaceTypeDefinitionNode, + ModelDomainTypeDefinitionNode, +} from './ast'; export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainTypeDefinitionNode { return ( @@ -6,3 +11,9 @@ export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainT node.kind === ASTNodeKind.ENUM_TYPE_DEFINITION ); } + +export function isEndpointNamespaceTypeDefinitionNode( + node: ASTNode, +): node is EndpointNamespaceTypeDefinitionNode { + return node.kind === ASTNodeKind.ENDPOINT_NAMESPACE_TYPE_DEFINITION; +} diff --git a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts index f8e61a7..94cbdaf 100644 --- a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts +++ b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts @@ -1,4 +1,6 @@ -import { specifiedScalarTypes } from '../../../runtypes'; +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { AnySpecSchema, specifiedScalarTypes } from '../../../runtypes'; import { toJSONDeep } from '../../../utils'; import { KnownTypeNamesRule } from '../knownTypeNames.rule'; import { expectValidationErrors } from './fixtures'; @@ -22,7 +24,7 @@ describe(__filename, () => { `); }); - it('all knwon types are valid', () => { + it('all known types are valid', () => { specifiedScalarTypes.forEach((type) => expectValid(` Doc { @@ -32,7 +34,7 @@ describe(__filename, () => { ); }); - it('unkown type names are invalid', () => { + it('unknown type names are invalid', () => { const errors = getErrors(` Doc { name: ew, @@ -101,4 +103,85 @@ describe(__filename, () => { }, ]); }); + + it('known-type-names rule are work with endpoints, valid', () => { + const endpointString = ` +POST /endpoint RequestModel + => {a: string, c: b, s} +`; + const modelString = ` +RequestModel {a: string, c: b, s} +`; + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [KnownTypeNamesRule]); + + expect(errors).toEqual([]); + }); + + it('known-type-names rule are work with endpoints, invalid', () => { + const endpointString = ` +POST /endpoint Model + => RespModel +`; + const modelString = ` +RequestModel {a: string, c: b, s} +ResponseModel {a: string, c: b, s} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [KnownTypeNamesRule]); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 2, column: 16 }], + message: 'Unknown type "Model".', + }, + { + locations: [{ line: 3, column: 6 }], + message: 'Unknown type "RespModel". Did you mean "RequestModel" or "ResponseModel"?', + }, + ]); + }); }); diff --git a/src/validation/rules/__tests__/noExplicitString.rule.test.ts b/src/validation/rules/__tests__/noExplicitString.rule.test.ts index 1ad5608..d4085ed 100644 --- a/src/validation/rules/__tests__/noExplicitString.rule.test.ts +++ b/src/validation/rules/__tests__/noExplicitString.rule.test.ts @@ -32,7 +32,7 @@ describe(__filename, () => { expect(toJSONDeep(errors)).toMatchObject([ { - locations: [{ line: 3, column: 15 }], + locations: [{ line: 3, column: 16 }], message: 'No need to explicitly specify string type since it is the default', }, ]); diff --git a/src/validation/rules/knownTypeNames.rule.ts b/src/validation/rules/knownTypeNames.rule.ts index e8cdeb3..d5a169e 100644 --- a/src/validation/rules/knownTypeNames.rule.ts +++ b/src/validation/rules/knownTypeNames.rule.ts @@ -1,7 +1,12 @@ import { didYouMean, suggestionList } from '../../utils'; import { AnySpecError } from '../../error'; -import { ASTNode, NamedTypeNode, isModelDomainDefinitionNode } from '../../language'; +import { + ASTNode, + NamedTypeNode, + isModelDomainDefinitionNode, + isEndpointNamespaceTypeDefinitionNode, +} from '../../language'; import { ASTVisitor } from '../../visitor'; import { specifiedScalarTypes } from '../../runtypes'; @@ -50,7 +55,10 @@ export function KnownTypeNamesRule(context: ValidationContext): ASTVisitor { } function isSDLNode(value: ASTNode | ReadonlyArray): boolean { - return 'kind' in value && isModelDomainDefinitionNode(value); + return ( + 'kind' in value && + (isModelDomainDefinitionNode(value) || isEndpointNamespaceTypeDefinitionNode(value)) + ); } function defaultNamedTypeCast(node: NamedTypeNode) { diff --git a/src/visitor.ts b/src/visitor.ts index d5a09d6..af59c33 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -93,6 +93,7 @@ const QueryDocumentKeys = { EndpointVerb: ['name'], EndpointUrl: ['name', 'parameters'], EndpointParameter: ['type'], + EndpointParameterBody: ['type'], } as const; export const BREAK = { From 836e0abfd71440588c1bbc395a00f6e1e1dca028 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Wed, 21 Jul 2021 16:41:17 +0400 Subject: [PATCH 25/70] add postinstall script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 7447df7..06bb495 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "", "main": "index.js", "scripts": { + "postinstall": "husky install", "build": "tsc --project tsconfig.build.json --outDir ./src/cli/dist", "test": "NODE_PATH=./src STAGE=test jest --maxWorkers=4", "test:watch": "NODE_PATH=./src STAGE=test jest --watch", From ac9a2bc28607ba69cb867d6494a74ea43fa40c5e Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Wed, 21 Jul 2021 16:44:57 +0400 Subject: [PATCH 26/70] moving tests realted to language into language folder --- src/{ => language/__tests__}/lexerEndpoints.test.ts | 2 +- src/{ => language/__tests__}/lexerModels.test.ts | 4 ++-- src/{ => language/__tests__}/parserEndpoints.test.ts | 4 ++-- src/{ => language/__tests__}/parserEndpointsErrors.test.ts | 2 +- src/{ => language/__tests__}/parserEndpointsUrl.test.ts | 4 ++-- src/{ => language/__tests__}/parserModel.test.ts | 6 +++--- src/{ => language/__tests__}/source.test.ts | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) rename src/{ => language/__tests__}/lexerEndpoints.test.ts (99%) rename src/{ => language/__tests__}/lexerModels.test.ts (99%) rename src/{ => language/__tests__}/parserEndpoints.test.ts (99%) rename src/{ => language/__tests__}/parserEndpointsErrors.test.ts (98%) rename src/{ => language/__tests__}/parserEndpointsUrl.test.ts (99%) rename src/{ => language/__tests__}/parserModel.test.ts (99%) rename src/{ => language/__tests__}/source.test.ts (97%) diff --git a/src/lexerEndpoints.test.ts b/src/language/__tests__/lexerEndpoints.test.ts similarity index 99% rename from src/lexerEndpoints.test.ts rename to src/language/__tests__/lexerEndpoints.test.ts index 39aa218..7d6cb78 100644 --- a/src/lexerEndpoints.test.ts +++ b/src/language/__tests__/lexerEndpoints.test.ts @@ -1,4 +1,4 @@ -import { TokenKind, Lexer, Source } from './language'; +import { TokenKind, Lexer, Source } from '..'; const getFullTokenList = (source: Source) => { const lexer = new Lexer(source); diff --git a/src/lexerModels.test.ts b/src/language/__tests__/lexerModels.test.ts similarity index 99% rename from src/lexerModels.test.ts rename to src/language/__tests__/lexerModels.test.ts index d80c893..38e13d3 100644 --- a/src/lexerModels.test.ts +++ b/src/language/__tests__/lexerModels.test.ts @@ -1,6 +1,6 @@ -import { Source, Lexer, isPunctuatorTokenKind, Token, TokenKind } from './language'; +import { Source, Lexer, isPunctuatorTokenKind, Token, TokenKind } from '../../language'; import { inspect } from 'util'; -import { dedent } from './__testsUtils__/dedent'; +import { dedent } from '../../__testsUtils__/dedent'; function lexFirst(str: string) { const lexer = new Lexer(new Source({ body: str })); diff --git a/src/parserEndpoints.test.ts b/src/language/__tests__/parserEndpoints.test.ts similarity index 99% rename from src/parserEndpoints.test.ts rename to src/language/__tests__/parserEndpoints.test.ts index 9472aa1..a1c6026 100644 --- a/src/parserEndpoints.test.ts +++ b/src/language/__tests__/parserEndpoints.test.ts @@ -1,5 +1,5 @@ -import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from './language'; -import { toJSONDeep, log } from './utils'; +import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from '../../language'; +import { toJSONDeep, log } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); diff --git a/src/parserEndpointsErrors.test.ts b/src/language/__tests__/parserEndpointsErrors.test.ts similarity index 98% rename from src/parserEndpointsErrors.test.ts rename to src/language/__tests__/parserEndpointsErrors.test.ts index d67b25a..84a991e 100644 --- a/src/parserEndpointsErrors.test.ts +++ b/src/language/__tests__/parserEndpointsErrors.test.ts @@ -1,4 +1,4 @@ -import { parse as defaultParse, Source } from './language'; +import { parse as defaultParse, Source } from '../'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); diff --git a/src/parserEndpointsUrl.test.ts b/src/language/__tests__/parserEndpointsUrl.test.ts similarity index 99% rename from src/parserEndpointsUrl.test.ts rename to src/language/__tests__/parserEndpointsUrl.test.ts index 0a20273..3a03358 100644 --- a/src/parserEndpointsUrl.test.ts +++ b/src/language/__tests__/parserEndpointsUrl.test.ts @@ -1,5 +1,5 @@ -import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from './language'; -import { toJSONDeep } from './utils'; +import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from '../'; +import { toJSONDeep } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); diff --git a/src/parserModel.test.ts b/src/language/__tests__/parserModel.test.ts similarity index 99% rename from src/parserModel.test.ts rename to src/language/__tests__/parserModel.test.ts index 1517789..2b49956 100644 --- a/src/parserModel.test.ts +++ b/src/language/__tests__/parserModel.test.ts @@ -5,9 +5,9 @@ import { ModelTypeDefinitionNode, parse as defaultParse, Source, -} from './language'; -import { AnySpecError } from './error/AnySpecError'; -import { toJSONDeep, log } from './utils'; +} from '../'; +import { AnySpecError } from '../../error/AnySpecError'; +import { toJSONDeep, log } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); diff --git a/src/source.test.ts b/src/language/__tests__/source.test.ts similarity index 97% rename from src/source.test.ts rename to src/language/__tests__/source.test.ts index 7e55aaa..776c4a6 100644 --- a/src/source.test.ts +++ b/src/language/__tests__/source.test.ts @@ -1,4 +1,4 @@ -import { Source } from './language'; +import { Source } from '../../language'; describe('Source', () => { it('asserts that a body was provided', () => { From ada67a3d26c16265a81975d47aee9734091ce722 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:04:01 +0400 Subject: [PATCH 27/70] Add codecov (#111) --- .github/workflows/codecov.yml | 56 +++++++++++++++++++++++++++++++++++ .gitignore | 4 ++- jest.config.js | 1 - package.json | 1 + readme.md | 2 -- src/validation/validate.ts | 4 +-- 6 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/codecov.yml diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml new file mode 100644 index 0000000..ecea0ee --- /dev/null +++ b/.github/workflows/codecov.yml @@ -0,0 +1,56 @@ +name: CI + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch + +on: + push: + branches: [master] + paths-ignore: + - 'docs/**' + pull_request: + branches: [master] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + codecov: + runs-on: ubuntu-20.04 + steps: + - name: Cancel previous workflow runs + uses: styfle/cancel-workflow-action@0.9.0 + with: + access_token: ${{ github.token }} + + - name: Load current commit + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + + - name: Read nvmrc + id: read-nvmrc + run: echo "::set-output name=version::$(cat .nvmrc)" + shell: bash + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ steps.read-nvmrc.outputs.version }} + + - name: Restore cache + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: npm install + + - name: Generate coverage + run: npm run test:coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index ec3e589..d792777 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ coverage .idea .vscode +.now **/*.log @@ -16,4 +17,5 @@ coverage src/cli/spec ./temp/openapi.json -openapi.json \ No newline at end of file +openapi.json +tsconfig.tsbuildinfo \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index 11ecb8d..908bf2f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -14,7 +14,6 @@ module.exports = { ], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], verbose: true, - testEnvironment: 'node', coveragePathIgnorePatterns: [ '/node_modules/', diff --git a/package.json b/package.json index 06bb495..7683936 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "clean": "rm -rf src/cli/dist", "prepublish:cli": "cd src/cli && npm install && cd .. && npm run clean && npm run build", "publish:cli": "npm publish ./src/cli", + "test:coverage": "NODE_PATH=./src jest --bail --collectCoverage", "test:cli": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/bin.ts src/cli/spec -ns agent client", "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec", "test:tinyspec:build": "tinyspec --json --add-nulls -s temp/spec/ -o ../", diff --git a/readme.md b/readme.md index 1e1382b..3099d49 100644 --- a/readme.md +++ b/readme.md @@ -26,8 +26,6 @@ https://cuelang.org/docs/ - - https://tree-sitter.github.io/tree-sitter/ https://chevrotain.io/ diff --git a/src/validation/validate.ts b/src/validation/validate.ts index 107320a..25bfdcd 100644 --- a/src/validation/validate.ts +++ b/src/validation/validate.ts @@ -4,9 +4,9 @@ import { visit } from '../visitor'; import { AnySpecSchema } from '../runtypes'; -import { ValidationRule } from './ValidationContext'; +import { ValidationRule } from './validationContext'; import { baseRules } from './baseRules'; -import { ValidationContext } from './ValidationContext'; +import { ValidationContext } from './validationContext'; import { assert } from '../utils'; /** From 9a46ca9fe38742be62f3f0845c4c6cd1b225fbde Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:05:53 +0400 Subject: [PATCH 28/70] docs: add codecov badge --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 3099d49..7e52ebd 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,5 @@ +[![codecov](https://codecov.io/gh/frolovdev/anyspec/branch/master/graph/badge.svg?token=8D8S09PRQI)](https://codecov.io/gh/frolovdev/anyspec) + [](https://astexplorer.net/) ## WIP, I call you when we are be ready From 6282c4e3310cc7668ef796cd44a888b2e99e7b4d Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:11:00 +0400 Subject: [PATCH 29/70] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..96d3e00 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 anyspec + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 75eab68f572bc28b24a3e7dac884361f8f933e60 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:20:40 +0400 Subject: [PATCH 30/70] docs: add fossa --- readme.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/readme.md b/readme.md index 7e52ebd..6e68908 100644 --- a/readme.md +++ b/readme.md @@ -89,3 +89,10 @@ A ( "a" | "b" | ) ``` To much dsl like $CRUDL + + +## License + +The code in this project is released under the [MIT License](LICENSE). + +[![FOSSA Status](https://app.fossa.com/api/revisions/git%2Bgithub.com%2Ffrolovdev%2Fanyspec-action.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcodecov%2Fcodecov-action?ref=badge_large) From 0bb8bcbd1bd05802bcf9e1355d5a2e6ac7452189 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 18:21:21 +0400 Subject: [PATCH 31/70] docs: Update fossa --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 6e68908..123736b 100644 --- a/readme.md +++ b/readme.md @@ -95,4 +95,4 @@ To much dsl like $CRUDL The code in this project is released under the [MIT License](LICENSE). -[![FOSSA Status](https://app.fossa.com/api/revisions/git%2Bgithub.com%2Ffrolovdev%2Fanyspec-action.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcodecov%2Fcodecov-action?ref=badge_large) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ffrolovdev%2Fanyspec.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ffrolovdev%2Fanyspec?ref=badge_large) From 444ffd641ff70f9439abc3bef9ab7d8a1d36b09d Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Wed, 21 Jul 2021 22:21:15 +0400 Subject: [PATCH 32/70] docs: update readme.md --- readme.md | 39 +++++---------------------------------- 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/readme.md b/readme.md index 123736b..ab1e1f9 100644 --- a/readme.md +++ b/readme.md @@ -6,55 +6,26 @@ [Main link](https://excalidraw.com/#json=4790454524575744,zoP_ISTzjIbi1HhB6ErtWw) -## TODO - -- [x] write a visitor tests -- [x] write a base validator layer -- [ ] create cli -- [ ] After creating enum /Users/andreyfrolov/Documents/osome/anyspec/src/visitor.test.ts:538 - -- [ ] After creating endpoints add similar case /Users/andreyfrolov/Documents/osome/anyspec/src/visitor.test.ts:538 -- [ ] lear how to visit in parallel - - -### Parser endpoints - - - -### Validator - -- [] split up base validation and schema validation (sdl) - https://cuelang.org/docs/ https://tree-sitter.github.io/tree-sitter/ https://chevrotain.io/ -### IDEAS - -Генерация клиента для мобилы - - -### - - https://youtu.be/TeZqKnC2gvA -# Чего не должно быть во второй версии - -* удаление полей из модели -* енамы и строки начинающеся с символа - или + -* значения енамов через пробелы - +# What will be deleted in v2 -# Чего делать во второй версии +* omitting fields from model +* enum vaues started by + or - +* enum values divided by spaces +# What todo in v2 delete $TSFixMe From 603d46f4782de1694bb484f1b59aaceefaf52736 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 11:45:36 +0400 Subject: [PATCH 33/70] docs: readme update --- assets/after.png | Bin 0 -> 435076 bytes assets/before.png | Bin 0 -> 122898 bytes docs/anyspec-next.md | 5 + readme.md | 69 +++----------- src/types/index.d.ts | 4 - temp/openapi.json | 97 ++++++-------------- temp/spec/endpoints/test.endpoints.tinyspec | 6 +- temp/spec/models/kek.models.tinyspec | 25 ++--- 8 files changed, 57 insertions(+), 149 deletions(-) create mode 100644 assets/after.png create mode 100644 assets/before.png create mode 100644 docs/anyspec-next.md diff --git a/assets/after.png b/assets/after.png new file mode 100644 index 0000000000000000000000000000000000000000..915711e35ceef95855a450a7125a4f69edd8c3b7 GIT binary patch literal 435076 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

jui;7Ht@DZB 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 n|&wRLuu01`~+UFL6@!msLS`#!feG&bhEovlPT z7}p32PR+CoM94yCA}mp%C7ohpKjjq>EngYS7kc*mc?tw=uBy-!1LAt4ik z?l^!AH$9j1Jw8_OCh@WaYNGB)V#`Bs_ZWt8jn*p@7vL?L-EspW2?F3!;Xq0<`vJ`Q zS#O$Zk;lPd83~MVq;Q{4t$t4FR#?B;d7oMO*cCWXLV>&7K`tNo%zxBjL+@Uf7$v1h#sLoi8D3{kc!2z@(DqiX1HnQ_c=)?a zUAOa?dcYk31p2Cxwp|qcoe-2;W;7RqTWfSMf-nZ5e=~FM{naKZgHH38EoU>7YFySG zkLy!fi05U9Fp#I{6afGr>O08xLf>LBS<44{em0@#fL#EB@16;hP_JRE?d|!G<$Hm; z9RP!9EASd^5k9{>G6V*d_tS+oNXrdAzXU*D z78;$CT!!|_ioWMVe$3RnK6!!UJ}a5z8Ynb3Q%0>?l_#U17{rH|ybffShL#81s6tCN zS{D(#0R*TcHs23l4a141X%jcB@e&B9VLdAQ@uT>u=BqyC0=eUh= zg@+9L$ToB+sLa)xtUsA@Rl6;2ZgSQw;~N%Zx3~k~mPAi;)#LQ!$y^p1j?l%WxKEtC z+6{lND2q36he@6Rz3{(FIM%#BkO}N#0GY&QQ@?i{Izo!xlmdd&{?h)yqCAcXfcqE)5t?JQ=K%YlTar&N7# zBeB~OdRDd@4YoP3=OC;IV(*^<9?=k(IVCt0L5=c;qFz*C2S|a(&E@s{ngh*RiZy@; zeI!>B%{oS>UDT_{^8&;Z9YP8&Pfxygu4dOm3jQW)Py=Z)cUntbiJ$NWmXe7vvW90=_ zSYAFF>xu)V`98}vght=p@jGTn-Y|-n_cs=p_tFUr8x_5XyI`6K&A3Pn(edW`2rVlT zBL(F!hFTQN?X~_FEQp5*?`}jj#Q~92r!oGlqdW-E1fe7HgElG!3`P3rOwOMLY=tf+gO$a~eGd^1GWq!e!UygFgU z_rNda5j4C=n|(xu@{g!k{hvbgw-7qxeNKCrQWofuwg5;^vV=_o^rb0NhTqb7ls5f`BRSAz*#A7+~9hAW5+|+`Lpka$Jor$NPkJ&aSSMH^YJ^rUT}!uTB@C!xABD zze^S1-7!kv5q0CrUfH`NTetJrU`xxmM$WIG+49rCK$}`q{D|C+*+Y$VV>$Fs$jStQ z8TGo;XknZegmngkn65RZvKa=Gw|DheWvM>WD6ZZbcGzmLPA$DOyOvvVQ`)0pozvc0 z4oaqcPPfvzUo8pcs~PE|$S;2o`|q`Kr%?oBCRT?x@S6;Ve1sytdWcJj?XGDK)}dyejxKX?Cf zJ^xq)f)5BEL@Z;!E~80ueBF=~Sam^_tr`MK9{p-8Rfg-G5~iyZfn`OX_rTD>=b=XP zKH?0ENEwH&A4T+hzsZYxL4t)aSVX6nGEl_${-W)d-PZWoPkr;(=}O&65I5G3YUK$1 zlOj4y2`Pk!3~w5dLF{FPBh7vyM!V>H50C+3<#-PmLqm|T;JJ5qL7j(0po6fiNF7#i z^RC$@oFMR}ViMUbKxKId>gFbVdsITSfVFD0%|~!wB8!!dj!x7xL5o+p(nu=B)6)m> z{!SOl9oeEi<2m*Vr)Bvrz@|1T%*g$^NX-?>_9VI&o&bU1`gId4i^i4>V{Nq>SuS%_9&rj{_ z2crycL=F!k!+0%~pwQM)HBT0WbANgPk)sYN^rwTiG5F{>=@5|#a3Eh(b$4+TSE^;Q z$hz%T1JT5Az{clpd=ug{cFaG}?90SI&@9RW?I_=vK{Te0&8!R!!@Q<1Z2MJZ=_z5T zl(8~5da}TBcI67Td%R96vpx*9(rYaMP%_)EAzJBR0o%+&SZ=-T3JjR~@ov6OS&IAT zaPhMdS(MkwRdO85mwO(nB;fI07vcUmX&1eDsf@E0LwGX$4WBxvAP!8>T_3faVSc z`16z}`KjhdXf)M1Bs8=-SB9M=jP|Oxv-Y=ViTVW2gleVy@zUSHK!HA|R^)ckcI$6R zqs`Be9CB^BlndgV1nqu2YrR!kWh_X7aYZ~=q)B1HYL5j2(IM8oCqW`}G(=%^66S*b z#!qr@+OO+9Rxw`txcKrLg%b!T?H^2T?x_DvG=utJ5HX)1nLD-4qj>Uto+;19?&Fk7 zawwh3hrJtqD9K+aQ#z`h1!ia)B6*f-`~LRG#j?}r)87k!2I=^ zVSkoPi@D_ED*x^aN@M(VITVGlV|I4}-$J06PGS+oI!`1lQiA;gTvVN) z!E-tXTo1oXs+*M;z3aQq$l7uNzi8>8_%6a4+9<*^ug}g$!jKT=Pw&L5*n#j(g?y*b z?dC`wK4go~%@E@m1ytoyC*~GAs%jA-TNVEuXUGY4=TT2k-0&SezeSe46;qkI`1$~2 zO*j-uio@EebK2IdO8g6p)!m&C;aJUMOdxyvz0ZDDkpvQy-%Mb1?Vor14aLK|Js0)F zoE%BL0BU`TJUT}6-5SWrH2_CF#1Cw-!ETBMMpDtY6ybW^z*v15Mj2>9KyN3fuM7P5 zeYR9omarsJ46=_4`rI$P)e2?mSxP4wES>ik-h+c`v?wo5Aq7)9HiCpdXka0g)e@Qn zDL)5EC(dSjGgDdcCjb}?M=50M<15w{`ZZ~Vxu|xY1Js7N*7{D>^eN!E(0#!mC?UNp z{n?**M?9Z5lCGZ2teVR-kCJaYBrvrR8)QPHo%$!bms#iS9!tcc7MhY$7SzBGicXdm z^~W2aXeI>u+#uabk1f#pNU68V>`! zxCH%iv|UsK#f}ZFqlD(AMg>x>sceNc&{1t|f}6M$PX#;!gb8f#IEtas0)rKkK;XhH zUtDl-=MNflj`VC=<)L16#5kT58mqWa^Emn7ni~G$0_rxIYgm79`S|W=keD~pk2^uHPG;0 z6n9N~1CdynHgkF=eN8dAGjZBNDnHUc+A4Cec#U_`u*EQ>l1tZGh(IMa<3GW%{}FK3 z6ZJEw*SKV`*Wh`xyL4#CdnX=gX_2gy+8tq-c10@OS zV&N8WN+HNv<}dKWr2_qm0j4{?mOpC(xQU>N2L*C$FxP7YZ68ul?oI|Vn`9Lqo4S9`NIx&Tp8oJFy_8*)C4 z&}1Fm^igNA=(MB##g?U*YGsio?(9&6sqMaNQtkVQQWUjXjS9-9k_mE`S! zp*6+0O9qU`j~g%EN`Ni-KIfyVkw8@O`q1yWRI_fxZpvNzIvmBk9F=HmhnG22&91OpEMW~sUv#=Cw+ zE}sqBfgivy*fxeQiw3$GVT~bQrggpVH|ogL=!tpoP>MFv_+!49cKf5ax4hYPh0t>J1)v9G4kTJKhqIQ*w*1 z&no-JZBO!2*A=qvbO~Df2P?|kZuC06C?v6?CLI335nUHu1#5AWC_(I_i#m`8;iKQ& zmqT6uvDa81t&`OF(AJ-9EOCjO$^`^h#DK=8Cd-R9y$+WdFwRA;wZ+)xH};kE zkEoXCK~(!;Gmqww0*4F@3zz^DvY_NempD!Z>HOq$zkwW{cOdb_@1r$ngVr?IOupeO zw32vRQ&CkUJ`xT9`$Z0D3+EW|=>tp8VRBjlxx37PzCfOpjUNwFct}s2REil4@k0O# zMGysL{yl$3nw`Xp_Tu>X2Y){9wUJf3=o9jn=l3@UKjVDWaKY4FdJqojV>Vra0KvW% zy$XKmF~;`dMI=WyQ;QLBPj&-BYP^}>>;UK(#z$j(Gk*AqW{3x)ZU;#aJdNAPM>2C9 z-byW|Qv)$^bfR2e=L7H01bBH<4w%+kK-69(byVvG>fi?)XtdI>^T|>zwN||8QmrVE zw#+u@5RE_xT;aL7l9=dsG`QFa#+k!%9`8RoSZRC1>63T22o&|d25@+T3Xg`THVnmq z#0mb3eR#c8$rBCoT+B@-n8Ub3JMqN(Gog%EMl4aQmp*}ExG=&6?GAMc1@EY-(}%2l z3&GrlEigs#9C^#(`0j#!E%!IuEL8T-137{R52P<%UTD^_fKF(M3haEw<>+4#p@<-^ z=pgXP7mRpG>kzT%v)>-Lwk&T!I?hpqB{qg!E6MwsY!1Cila#cA)1e8L1Lhs%{#<3g z<7l#BEEsY)p0P?`=gYSF-r8*9ML8oHUrbZom(+p?6gKF$JM(pp2!BdPBLs5HLj|2jxtecT{74rUEvV^Ui>EfgZ>W=U~lW`cexlxmFrf zp;0GtJlj%iNWk-$biHaMmuF2=91vQcWlC%G6K!I8Dn#Jb08|+{ZxStNbo%4{LL;f5 z>uexj^2fQjpM9Gn*X-A}CV?N_PS@P+%f%lQKe?|tgSbbX1ERG97%*Qx`B*d!<}o20 zoD%5*g6Boks&Uir_rUCr5yA%Up@&?{ra>}FfPsU4fKnU85Ige{>bYt-6eIDEN64au zR$i;Dyl*yd~3z^fGm~1j?%~qtBkLyL&b(~d*DJ5t4CaGvFFZca4)R+rK$*%I3^u{x9o>NSxAIekk&M*?Mwpx zNTEC_YRwzqs&qc6ZT{3^M*ADuaQ-WqkQyQ%+RIHGm!yu0LV~fQBeRfhc&Bu2wlo%= zn@ak!k0%ZSy9q7TS-@dgb#fv)^#c6(tO~TDFLkQ5cmm_Yhe36@OU1}9`A|xPSJV7T z?EM3t$o-e#qO(fo{NWXNu))gneu*gn&m}q^hwK2z2ycD6Y`|o;{;Q8)ej68iOaEi7 zxAwa4YZdp?F7buR(Dpd3v{NLLq!nry0ZEZ)?gfhWcVENsQoq&2=W@PC#dzqP+5`S2 z3MtWE{t=UaSIzj*i+LP)`yv<>{t_^=aHi6j9u%asSGD$AJOi~4Kj-B*vn@-|RKVe;*rlq2Q*G&ufLh zu>v1}sy+w^4!svYX(+D^Z2D$pkpcaPy8d&5P9=CxFX@$?NlRR(x{8Vpzzzxt!oo5c z0@nXQLBb0L^$;5O$8lKhfYcK(fS~tN?RCVGd&wg(r0ZQ?-ZK!qlhDVq5wu1~n!tMn5QeYGY zbVq>cdy@!Z%N&;fi#|nmgdq6*)lJP8GaGVf7sl;trJHC8z`nOzs@JWdcZyQz?zkJ- z4`AE&X5w8D9sd9l$pM63Ats<+zhc9^qd^tMvp#vbp8>B}8O|3CmnM+omJkB8S`VR3 zzg6duJXSO7Aa6q5_0H}+PG51Tv2KM-rIi@rcwdz zd!jto6r}~^Q=~6ZZ@L5z4=o67i58doGrOV?{zqZi#UljI2en_vqHXoAOM!3t`+e8Iv9ujBlGiUj_xBTE;M%mL zc7FWGC?aypXJfI?I28;mm3v6vSy0U~@}pwR&R6$@0Q-CQc?vLu>LaetT-HCAjNdmZ z7JZ$4D^KraDHU38ru8xGgU$^6Co=rgfPwv^XxrCmm)@OD z#ZX;~TZ&7t_21{=(3_@$`Ta?a2M1%WpX+C+2GRQ+4ln*7lRTEHs2%s*|L~EGL9p#p z2*=fB8IKZat3kj0E0Q>~UTLe=z7FguCzL0;-1Ii%{MOF4U zy6@xL^+f0fv}e*@c^oai#hg{2i85?-2L&Pl+p)qX#6Kg`w+t&T(Dz&zh&K!fYH}y7 z?0JqwR!pH<8BG?~8Ytb`{9DPQh{p7GRX(0~j9vRU^QQ9L(k20uR??-HUY$>hrb_V5 zWWAQD_fNdP&Ssbe)DmvzWNHN$hZ%l{&*c14d&nEKb254ZK^$L6UR_p*d> zDwJ&GGMFo0w^{LN=hv3nKB@mMRMt)qL|I; zNDYWeHThFeP<-g@{01~@G1o;NKC>1(my75EMa}o_>Q!5Jh$$})~g`IpIxFH+g-@e`00ecfl9 zJceQoNkCTu7SQNaCf_d1!hn8k>|GPsW}C$+3vG(u?k84mbS3m&Pd&;-A$(ymo^ zTSatv<>WzQ6}`m#f{@)q8ZDO-hHaeWfSg=SOu9?h$zilfYzpTVqt?q|sIy`0_u5@IWJ0RzXcRiSh-C`8^6Nz|`DXsg zc)uS-#X9s-u&X`z2eUlJdAB}a_hy7i!_!>Teh#xz%J*&D6b^G^dsqx&%LdJ2*Nz&T z^|k_Uh;A`3?G2bQT4RwOjM-dsy|Fy|g@%xroFqr6*1Obedjd(F^I!8;Ltj%dwZH1v zHT0w6O?BIg=P^!))4X}D|Tq|Wo=phwrsB8~>F z%M_lGI61p2F;ZZKXQJPIKsU}e^M06e_^_;~b$(WTEjncl&bL3!zLp*qB@Klt(~~)s z`-pzr+h|*!K0X%UW5fZI^FgHO4p8ET-Dy0#$_1|Ur9cpp1KZGS=+OO|4Z#8Bve#P1 zM^0GKOAAkCv9! zue0L?%*{g4E*F*lYV-G)l#(7iXi+fHBi|WKH&{GAg=x!FBx>Dn68_*pT0vmMuIKsb zPke$sdzg9M+TyUgMaFB(W(a1Q+>qWx!EUjDnU7x^qSxQf^;Yy=kSaeYd$z6r^ry!y zezA82^pG(RU=vqqPGn)S=V?^Defb^V*zuch!e1KEQf)j|K)=i$lOvRKQKwM-!PO0& zAXo8~sb=Gt3LqfS-Y;^D##k5hH8S@18Q#vzmVV?@E`!Eat*rdv?pjPICH1T8bR9M~ z(U~3jGWRHQ^%)aZ*{aij<*FOYCXCK;q>ObesEP%><-GLH;)lALr0(p;f2h89kYTT> zt}`ks;}R)?WA^6`_kciXlNlm!VSTa^Iip~fUaVjIa!*Y#Nk|z*DxcM>HueB7DDo)< z8gwX7_KO&|6jVl=ie9G(!kVKoFv&IB?z*us@@lxw@0k3c;NeYlKWq`A`AL`x9TXf1 zT!N7<`Qevm>&=Q=j66J1(t$uZ>|l7hFK#<#EiuQD$$(ys=ve|@;Ci!CCN;?W=+?hw zYsK=~(M;bZrkC+88a}TcH?iarzt;Z`iXguRJaU4y(Jf`I)ixn0N}XKwOy_s zCnv@4=vQ6wF2kK2%$T}Q^ob$n1-Aj8>nmr8OGXJUe(%GdJ@C%}PG|lpa7?;J%MpkW z@S>7~v~9at*_J_DXh^#B%E}n3RMk0nv<5fjA>{%D07~D#*Mr}K|8CgTh8f_3pB~A6 zXSFpYLVorBd-l&BQTesWI?uiyRa3#_4Q z)kZ1x>G!SQ4cBYaC0^e*WxP$~Z8#^aUjGQez1aUOf(Cm|*W_lyU$fdDAEK9Kj3;)D)uLkT_&84d%o7tdRCTY>ERt=5A6BjeTy zuT->mx2e+AnDQ(vA2xeKFZ?!&&D4`R>{-DBb*2raAd132jHX9OM$^uBdZ8;WS~`IW z2BZTt+gv%TN|vNwmA$#CviMT?$3trpvF~53*+Ooih ziqf+TuDI_QR^UC*-ZXl!f_DT~Y~u5eTP_gNh)iFI(z#9P_n5uT^;(p-o~}3bUoNuWyyc^Sw(Lbk#?r|GWuwOSj!zovYVU zHD|-Ba<6R7e@sd@MD_fqS@Yd|{Ev#vgTn0N9nh!=?!WN{X7|ipaCXIW2JrmoNyV0a z{OGsV%A&C_HSEC5^8&@UUW>RvKWV4gY)!mT7pSK&Ufg)CJxIO$w7fWCQRDD^B>M^L zNb0Me{O8?mie}q0&nJSp^#&u;QYI=iAbHABH`R@|$2{^r}&{wx7{Q)RP?&VZbs z9d(z^h>90C$N3^;mTt-yJ8e@~Zs&`gjFSOP?S191kOp-VP0%@TY}L8#U&A5+1yJFN{rXgrLdcHm&czto?A`iIhOAh zwG}k2qzqUbD^_gAT-eXlr3teibu=ZP3Xn1XG-DK~`r`R3;Oy9drc&k_Q0*rUI$8a{ ztnP6YjnSr1Gga)WY)Ww4c!hmnEbJ(&D0U+`4xZOE$9#15r&X`xdWDS7%k(*+ z3&3Piu z|6xhh{=<^0Slr^bE2+9bs9(lJNcV9kNJ`rOPSW;5O8cGFT8^HzLis zR%l)&C$Oujnu;8O;Kt6&(G$xq~`^D)a3(nn`$17{=Za z8eQqdC4Bs$p&%lPZKVv_7|T0yDi`AA@{!atxlo0!-GMN<@y5K9db}_$Jwz^NCFRz{ zg*@w;rAqdJ0%?`@@1_&)6)=&*fW_Q@w5)C-PtV(@D@%qy99^}*vhXg7h+0*e)Kz}z4of4&wg!2Q(F52HqBphQ{hq^pg8m)VC>**@bdDo zwzUiP1pJ7=qcVpx+K14Dm|sD9JML?~eW@Fr2_wVIA|m9QEmQ2HIcDTQC#ZjoGO)cc zV*zLZrVnd5(>5Q|b8%O;{ue?#5v4y8fk7$$NaoNIlkknpf;Lhh?c$i6*;NXj)PW1J zJe3y+`;@bAw(T1I@9ZdFl}x4HqCFL*{Mp6G2oy%NNG_W}3X3a83deKn&9vmXw~s}O z^B&SY>m>EM9(xeVNh47pj4L57P?sv*wY3hIPjCk_A-RRe!6I}2pyH=a+MejZh#xb~ zS)5X&2|xu~WaLdoj(_{Z?(%fk7{f7xDB=Sb<1>jaO6 z%_PHYo~4ZjNvrOmJfq$+k#J3LrC6cydFA&tE@Mn; zCz`!g3@lbE9)pXX1his-V25zq?ItP7EwH)6R6)zrz2iD)fI+6R#C8 zLHb%5=LKg9wwJO_UD`buxSj9}FJ>*UO1?n9ZKT`&Wr$jK+uPX1rl(a}j0qj$eb4#hEzPR}&5S&Ip! zsk3!irmBD4J3Pl0T3W9>5Mp1Fh_NkC;>mp9Ajt7Os+X5kTBYOK?e;stSWIXNXhFw$ zhJ+e5w5w;7X?K=g!tAX%1f+5{wZ~SHi{mw}8T9AG+kXD!zP&zKyzxYYHE)KfZ&!Z2 z{EKmax8u3bp06Mt{Z5U54;x)X3qO%H)+5tI_ZeEZCp=QYShiOsycyS4-}U3UoPKY< zE9nrnP&p^gB8N(>9T*%Dth#vxmmW7WGGKZOS2rmzjyOc2ole5d?MV(aZuN@C3XlB3 zqRH-IQYwaatN&>gQF)%tSjnrKrAGQQ4@ZjLREHxQY5B@e7jurVbwqax-J{Iw&rFdLHYx5CTXBKCj_gHVy_WYclRfIO8#~9MHU8gcL+AS#>P7}SKP+g;w zoWWUDNroDXm5cRLH}77s!@V4w3cZIvsX%toD^x>c7?GPCa|)!&cJn`>wGj9m#I zxafKXb&5)NXQ?}^(Pj0M@M(fPD$DFCI)^8R=PqBtY|iY@vraPW*idA@#rlPCUrz^GFfm~4{zz6Kjimhpk$yXTK+X(n=q>)LnT{v>?pwcwvJzJ_~=UJ)LGKPssd zsg$>Y?v@VN&HrpCR)42(fi7};X`uYYt4|nRhH^jTwi!MVe4hT+&EtuAk(!5HORP-s z(`$VVF9;ns6Yol<4mtxS_oN{SCn#M!;C!R0&sHt#x#5;rG0mJE{>Z-kBHle1ak>Kf zuMx^h#$Zmp*=*fK{_|GbT=c*w4Z8N|>&t3j7MxgJ$-~rS&F87vcIm`X-4lbbWymT4C2nnAl0aoiP3~yo(VNCWr4n8NL zpxxQR&V)9;MgrS2cY9F2y<|P9WOHZ=T*VidtHc=N)YEs2t3I{8*2xJ53l^%C@$!Jk z+82^C2988hMa3cOjG>hha-QV?AnDar6coK?#~^G-YW6);(8_Q!5oP^AxGGFbWZGuI z=jpS!JmcZ;lI>qEz~?tzy4f%LJD)vSF>VZyWo{Lp_&ndeElJ>I_PvFQ`@`oelsyy} z+UsJ1`8!*Lq{>d!roE-@bfdEmz8ui0Ctl5jM8LS^tu2+q;R%eNR)$ogC^>+fRNu@FoJ({bm5pm<4 ziFI$PL+QY9zWR+qCTuh?t5yOc`OD7PiHdODd5L@@^^RXZewj4OZ>2sJJKuUw{qx{} zFj(ML$?YqSUrpAmzjL+?H~WZ!|58=|64;j|qzPGv?al2idwnC5O66J2xjTjbggq~E zBOu7#w-?Xrd>B=)sH%W+C!W)Ip(DwFx9H9trxJJ=8rdh<57vk~c9q*gyl6=9!b(%F zyTYJIp+4t^Q@9h0=V}cfFI6SGL7JfL2TZS{d1a#BE^CmzA8SE zi)P5EHX>Z9~DSd z^^1@LxdF@75l+;{l|BdbRH6 zz>>5*j5UFY5!-V?Pz%lpdp77oZS2fHOH%d#1hB zrcN34$+3Ajipc1u^MN{;jpt_&3wn}idKig1-u=i=> zc4Q=x)WqA7d|R)!{aT+#^gX#atytXBpMp;oc2Y!a-D_vtjN)El3|`V>wA+!6t`1Dp zmHRw+8k4+bbMbsDi~Wl2d^x=r`ZMYU_Q^_PONO&YIOmOyBcnSAbWdWEE#2QoOEOlW zGaA-yf7}zrnKvhP((N8T%5rkEk{!-LotWsE=H4@u3Im@4O0W#SdJE$;haWa{Bomwt zOT1hNa+LaI)=V$fvLgN5Hm$?oT?Qj2M&`Yk{bk0xmJxRw5ZONu%p6Whp4s!qN`jPw zZVsyY&-t!P&y&(H2)}~CPCg(&V_bJ3n6iSj8F3YTXNp^td21<7n&6F>n#r&tZD`yr ze`dcE42>b?1o}F(lMs!Yw~~QFc1^^wru1?UGK1Nk?_!2#@@Nm8l&20*OCR1*jG`3G z2Yc!5ZxO;bO{wT=;9MkK-={6{`w;nUOpt=-c9BcR<)`~W>tBVb1| z1NXNw8cl28BK*MB9gKO27on4CoRTDBPrVR1(fFwRWPfUN?BE^Q^u~K0te-M9DAZF+ zuqSd4tk);rloooyiSCV{Zr{W}ZKWwPC!6+=cJ!jHQ{0;E@mupxs%GGS`)I7}Gk;<9 zNvT=xjhEMps_*ILs~2f_j8NfDsY~GdYyX(>RaE&!NrjdFM}dL_!8;WKu-j%Xh=}x6Y?e4Q}<#Fg|iLvSggsdXZePr_Br= z$&rEN(p=Z#Nga)36Y`GBms?wvpYDe{JmxYGt|jQcPCqq1(E1_ef;rX&+N@H?)uw2V>3M zN2F`YI36dPqS=oI93Ewx2)n1FCL}(%q@FWG#i||W#ufBq#>>u%mNT)sjp+I9 z?S+8to>erLBg9NP28GG&BMkQh2E~}mO|K6ki0d3b@vgs!*WQ2;_#_3e{x`=Y3LH#iGt|UGx6$v6+o*X+A5A{y* zCrqE?eLDF?`&MPVG_lx=lxTXLzf#@-b*>wpzt!f~R@$;=xuBDwHx{a2aKqoFSh>CR z{`tKiUp?XTkrnkOjK}qCzz3zS4&M@5^Z_<$-_QjbHG1sVP{nq`u$^0U8L12OKvPKh z9VYn#1EU0$F4XMH9o3Q8P(;^!i*DCVDco;r_7ktyI0+%3I-{9$(a! zI+zhx?@oME6_42p_Jryn*~g-rtJLiREatKP`k4~ zL?;}3%>OA%gqLwbB`k1R-kQy|(aBoa3ctJ=GoVU61$V5Bp{pNB$M3UW!FVtih%x%pXviufm5IlA= zNg0;>Y@A{H-iJs&q7cNgf-09AzoJs&Y}>^0yIU;}>B-`-5u^yVX|u-(&9Bx3?){*6 z&SbKcua$M1+JnpDG|Jh&l#uin|ItpT!`KXp>%@6kHiNJd>DxJ-fKF`RGL1rqQ3rr_)mi>kTKn~FSGPb+2vfi8dDED= zgs0~fPp6Aca;MamtEuAI*uoF-~Y0X{r;Dsu<gpuNs-L>yyG&l z6ETLzT;sjvX)-FaM+ksx?8;d*Nerkxc#0jB^Jm+Br3NHv<6ZmQt9~`1iw#w&%&eZj z^T2EnKaGO_tg?lUm`aM0ww2qlHRXn0fi?>c$;axnVY^l{VdFkpBG)9@es)8b0#dh^ zm4udPbf5jyWeJa6nUB&E*|i;zo~Sp=Obo$fI^ZoxJ4Uv!bh4vlvHyPJqJqdLJ|Npy zcOi@M0%w9uvz2ilsCO)YXb$5T*&7O}BB2l-+Vug|eLM+SkRj*3iN6&_kIHJ%fp6pp z%vt)PySN)-ISoZCckQUq(0acO=0&*duZxpO{=inFQ1oX!{?PI=ihDegO6a9*n(=7%PC(jp3D+D<_{ONGn?LJE%Sb!P1W$+u>N8@)HI)mT6~AQ8+8dP3gS zjF*+r7<Z!Q_!X4|3EiF$fR9c%E|L02{t#1 zYA}0=#ZM^`29!VFo9uzT>XwyE8e|w-KQB{L0_M|pDH}k9oLRvq*KB{@Z_Moz2}{3D zqGl^ScbhcC-#vPPwMVQ5Bl}tIP>{hVg#nbep993Rbm0g2h_Yv$QAh|G|NPrQY6=&o zZh%u3FKpwK&6Z=WwOC|Pr@)3>1jw&T+X=y{vF~i*4|dXJFPLVc!~ceFDJ2+_4jux1 z5p^ihPR@?W?Y#pf-0?{mf?{!WptweUg`VWk60>Zj!yhy)5(cKQ|MQ6miRBJTkbc!I z;Km6~o@OP6Kj|B!_!UuQt|RXV@~gA(^1Te-5e6Ob8tZV0`BIx2h+ z_-;{TaG0)3f3vf@a$_d#s`WKgQ-!}jtwFDvfr%4);s5=XyZzs_?H#u5{P`^Z`)gAu z@&rVF#iU3@i(UNt6#jh?R6+9R-sjBXtnGv>#r>bRxPaq{^ScN`K2v@#T4(A%SNp%e znzR1By<Nt|$xg_!wHr*Ece)WH^@Xzb^YyW;!_L2d@Ox54_WEKS# zoa7T=FRQnQ;;@242;_2?CL0g<2~E;c{#{QbTdaTo^_JbaCT7u|l7iyUFm zd#U;0&HY4X^LeH zigZlxbw)G8woR_I9#HYpLf<;V2JJJmp_kXWp+^+=rSV`{DRwWO-%JJv8#@+Ifu@$O zu%F#4!-XlZv#$YlX#sldF5rX#l*2NUW^a86QJn(O-NS$H0~7b(D?uFj&NWP{F@TfH z6^jlxI%n_=b^#Fm)C;V1w6Dl9fb+_f7LAj@}wK}~3XKdl3W^Z&kQ%ddM?mVN2^K=x%*49EBD3-$8) zyObP%hjZjkp4%AU>>t3xhTIwY$cFLk+Bq2Mx`|Xl{c-@$B*8?#E%7AaN1R@_AmzyMaL9=3N^E{O-61%ofK0(cNFl9WQ3s}6QVEYSIm7jwP`ce@_u02GB- zVW^pDAWQa|eR8jyw=|nUAc-c6Ul> z`-$j(CvnBPKY#p#giguP$>C0085%~I?ysYv0u2|iYJE(`ogAGc>PW8+i7T+gbfHVN zL_)ZQ{uJt-)q2Xcwh$~A;PZgRYj*VJwOL;Tb_qsUEx$=c$pYl0Wf^=RPm*xO>T5C_ zEb6c`ssyh5NCKbi9#B?v(`pNA#2~C=xt6H*W4eBB=!E$@1K{b|-Ga#Nf!rb6e>eW) zCT+2@UVHRuMo*A3VF%#+<^utj{H&&(e#s#?3Llg6ruRviwfJ%ZIIinuewj!Jj?QFS z@wZrBgkf%A;mry|h|S$7szLl4AWSv(!)$+CIQkqyVuAab2;A#o21VG#hA=0Y_azD* z0XHmEea?H)AT`?s{gwp~hSWOjjJa$E5(*43U*YcAiv%0KwJU2W55ue_I$d(h@efJE z#(j#mTlB6p_V`B-3DN{D!q=zkdsd_vp1^|Von7To;L5%@I0E!=c}YjrH-5(+R(qg? zQ#g)fagCH7r(L604f44+kBBppn=}MFZ}5P<37?r8@S#Lte|AGYKfT{bnjQqZK=Em3 z{J+r<8UB|YgZ7GbW>azvW}cyb*xo7T*AOww0FU$;!Du`w5r!@N;o}Y>@9;AVX~gze zvHEg~(2n~v+tsWw!Jl~xEK}oXoubXwuDrt&<^8p{>DL}ctxZIkOQ;kE*;-_lFW&X) zx)QxH9kqvPD!)X;P<)!Q!>NQSBmeG2FxDg|j3~!}Xsrg6uJdqfT%f{uOtE>rE0(cY z&OiGr_S*-&y7_A6D`Tb4;eM%Zg}4@>J7w_OLV8IoX>&p--)g}ADdcSczFJ9|aOwiz!g0?`i_Q4O`wun2|-boR}$>8sGd!#C_clRO6` zR2o9T0tBeGHsfW@iuI_BSMT>yq=%uWffA7e(q3CC;7oHIc7u%k*y#D$f$ZUSPXU3~ zy^Aoj`4%@9`1cS;*pn{4^+NXdmdvN2d|zAJhZ+cHWwf}k1-}e23);*zxOK3Pxo)Uc z30ib?gJ#l;vle*D_~0sz+_lYPfhcIZuG?;!&qeenztiu)DZJ9NXvckP5xMGH&vLv^ksE`NC9rAfU00u51oDZXOE6?FPFq4Z;Y@@Yyz+SazhOEKK4V#S}vm zb)?+!0Um)kn!3eh81YUrs+Q5G3L~G6t_d@rGJu%|oNCFy_;C>-GyS|yl{nTQRv%lH z%DlgWTGl_q!BD7uU_cwXw#&PpiGO1Lz?d$tb95%0HNE@ac_iobr>}H|OiRAy#iKK& z2Qqp((P1-I`Gqe#v-av)euyM?S=RZqp-qHxi7kpkjos3lVeUO`QI-%)t@=GU`Gxb= zHf5(&qkqwoT#822VMvqZxCnfuuR2Vtnbl-*qkrg46S}D+c1bSQ1oqV}_0V($ur|ee zyU@$y$?#}@v$l^km^4+|Cpr2Jj26LjycX*P(OFd}IkpQPA-{nP=5vc!)~nFX_S<;w z*fO}`9F1!H4m9RVgxw$#*(Q7pkx&8&Bxp&(0`G}w5k55w& z1F~3si%ueb7RA@pHge-W?sTyW>oZh89Q}M>jMS1|w4cfE?2b@$ z?;D#zg}$mb4-v(8VMig4124rMhLi}C_IcbI?s}1;Y|n1V$f}ttS35~HHRUuALn%09 zMYY;5?#%P|w4eD?u0P^I=C6*@4PwS-EO*JJV0zL0)%#0hkL?nHUiezTu=4)1U&s98 zS;QS#m@%NnVC!t6G}m$6u7&h@rBTJRrNS)#p;99tdAl6qLBnAp#_>#(!SmA#Jd9{| z&D6VoYhNDCjJ6L&&aO5fvp>jmiaJ5`h)J#OzTy@-dsEcL4FoEx zd=Jwki&`m3NaJ?h`Dn4ec6Rq7f&|n~%o8oXJ|C7}``sh9O5!24{k} z=dcN4FM=q6Vg$w`I$}gDV~9gDuKnF9;+pZ)xsBSHTh75pY$|d#kaDRA34^l^v7ND# z;+7l{h&xTJB*K|dsGOzCUS!tlKQD#Xgh*w0G9$qUZNr zd0peIOnP+PHa;s?n2zMFOuV@ftH{u#vrKI~9`(-J^>CYvj0fa&l7XrrmV^f)N#neC zb8zh1+Hdi=GH77BpwSga1x~k-i;&uXt+p*Zqnbp!gV4)YE2D*shza8T2y5OxA+Cq2 z@HetaS;w-Nf66eX;6H$!0kTve{u%f!mE|tmU2J+%3x~;}_>bSOrCMR(UbfJP(lqV8O?CACTy*=iGTxqLMp)dlpi=#bdsa%tw|Ezt555k! zir9`#Kd8~Hv75Bqwb2;QhupS1M)otgx(GVqDt1n0Y#z4y)+}vg8M0Rg_GlO;>u6z* zJD<^9R`UMVw9s=ZY>V~r<((u#@Xd3%Z9}D(2h?%Bx0a6??3V=D-Nt}RsZvxMSMQSL zxh6RA5SuX)0{lxTCpW)J==VSU=ToY^)A(mwt05Cv)&UkRW|B(+=rMUmVr{%M8%=WvUX>th+wdcqZiUkoM83i-#GfEgwjCXeLO zSd#cBkqks{SNn5n(!p}g6p&H$q{gY!WGD&7GGr=h3*m1dK4iT-mB!%YByBeeY#Y7U z>NMM}Dw{z)JW@&AJf|)2(qg<(Xf#iXx-lT>wwx^s78RP&^wO(azEuw$r^fW8yk_6Y zyKLugkQYGDWAU-vkL;dg#%8Ea7*qJoYSPx=BUBLy)VS_#I&$W&|9H3G1j#cFu0e#z z4tLYsJ3N3A|KEBQJNnP+yNq0YzBl9LlrCWx z&$cyzUT5B<2v}pJfNy()38{FMZF>!eU5pDGFYp$I^1F=kCuMYeI*Xp}z((vgFe|O1 zhkC?;O2jVp?8}+-ju_-WNwr_SHOv%Jc-(rfr~+-lq$fjpo+IxS;0=1s-okA);&zIS zFl27y+~_8SE1$=3HP`&Tig$BlG^ka`87C_4LsRRH@uxq zsE~hP?Qh}!i}Fv?)QS_DroQWwA6JeTg0`^f5d><4AExVfs)qHPf(UNy>#?XrQMQqL zbfkD$YG$t`_$@wj=B=C+cU!K2B$Eko75KGm`o;d)B)Io3+$o8ACtTr&HxT^o8K!@}L<4ZtS!dPD;no_osvL!nU_?=~HZeGW>ls z$T)~g|8#2boba45i2wf4Bft0Ck50S9RA$B!>|z9;S;$bZuVF7bqoP_?pS#F}sWEgD zVaLp(U^jvY)X14cMx4Qm~m?<;<3 z@*4K$dx)CEcjsEVNVVlq9aG%&UXSIpZHFf)ppKTAW)c7ZcWG%43cXGb?Wljb0LZ%U zUF~no=r($|^JU|(@I8#DC!X%18?Ey+?F!1B#jZRG?}?a#matkJiRr?(Dw?c)aGqWj zG#kH_OiA4l%frTKQPRP67hl}sMQq7>rFiLc5csD!J%qfgRVH{#syJn z2Dz{cPeefcpM`F+zU?5-Kuv+~;Qbj7S-J!%b@*)1F4zl~kn)?F zNUGgw@0VUSlq7F2ugzWs1$*FLF;Y?&FXN9NNF;h+MA00$c8qj-YO zgB==9sPsQkYsUKh|KrC3Ubu6L&em;DfshDoEfOcmpeCF>_k^}K*O7fo^fYEA z4D>$!){U zz!Yc_+jVMVp_txIxxk#%T^L3R8R2;XW#3o>r%7E!H|eq5{SnZ*6EARsSR^gt+wgx3+ZEQCn0lxO*_L$Fc@* z+$wSp(b87ApINylM95`Bv%B&gY7C={)L#+tuc|@pueZ~pBGySfA6m8FPra)e=qOv3k5~wT19@b zUmd`w|6OCzGsX&-E2yVkDFC2M=X<9%1H_T!sai*$`Oi(*|J{sVOn)!X%-6%YA1*2` zQ7)cEJs*q_ApcW;OfL;be4c6mBWOfE%`aYj`}cj-7*2jyv`7w9`#H-uY?fI@RA^Ht z0VKFKI#zC09?@4(fLpmJ~K?MOgu%vm{m*ZN#XYyz9~-e-y_)K`tRoN>3p|TV-Q1y0gFTkB`b_sezy$HLv7L| z+@G9*h&>S*PjoI=Y;BJj7qCJGLNG%Js5wN}ZV>&ShaufIebL_H24k^7dGcs+>)70z zezg!-9j}7t_Bx?_f~XRle|!@#shSr2DmN@h()L4gowGXRzVRy@hThH>Adz5C~RGT zjv;dvUD;Cvo97iv1Oosm5%KrWn}^gtv;K`I*?+4s68-nHghZw;jnk7yDz)tr z4!xs^f+Y*ltu{1rAiKsxKVyoMyh+xo+p@10E;VX*ZCn=d2Jsb2-H;X;_tmS1b1|}Z z(el#S(8f_e`So*Qwk_m}OTJmGAQCQyJY+~h8kT502pLY&T9C_e-|}Uh@jG}iEUqfj zcBACBF8o|f*`tYyZ!Ul~BRpwbum2a-h#3Eg2)9Gn73leB6VaK1S^Ln0~s9b}7QlcsxAJvsf#IZtV{`E>a14{tZU-7Lg2o#j?B;(Y(jmOO#`yzyg z?gO9>mVmg73F1=l@thtX47Zk>)L&~kT%x&Q{`m8Q}d2P)r+Xa zoSwO=F?>Mgyfo6*cB@S5g~XJc@*P^cR)v$@VePk;T`5O9h&bk(xYhPkT2FZawNzeP zX1G;m!U-Z6rS2I3ZC-2iNank{OcaLNSF{wemOJYTx#C_k*qp1u(AVzLtVBq?##VOq zQMP#dlWhSLyF`??wK;_E1sk{O{S=^ z{P0*u)gkt(pDRtd+7&Cv#fyCwS?Df-Dx@GRnYhR&%P9Jz5?`xy-x}3+THJh%0pwgE$Ze{ z0R&D041HCH$gXWv)1`Ay?0+Jp65H=6;4OOtG6AKRSTy4bs5z{GJn3+XJUrlX>s$ri z?X^p;;4x_8y|-Gx4`!8WV`Znx$e4`CmH%~o+(Rf^GKilI$>^#rkqnWn%D?2=fQ`w@ z6q6=TUC7cIK$Ky8{OI5^1Ari7S|-bgu-g@Pb4rYB`KmN)T6`a|KX3dBio?ymuaaX-H}zK!JmZybH3>CyeOx1T2KBlO-k(y3WKs)>FZ3azx@* z3g3$YP?k7)gdGK`f(AgY$TZ;SGiX#Gdn3>j^rw=Vh?fuX*sz(R9}M!EYd}OP&}BwO zL*LF;a23vS?6=X^5;+(jldul`xVNkWBd|4*nW(^5`8SLOsVV;fRcw%;irSv#+&wi0 zQgp!kc>(Vq6uMPz%3Ev@u(7p{OV+IsL6A(o0`2KIU@|@Ez>{!f^#An@3;30MP+^e< zoLe1zhEo0Gz@~n&+sKSO9ewBqX1pDW1SL&C_#1k zafqQJk9UjnRpP1)Jy?@6D%ocQt6L05`y1>?O(<9JLpeP{W+M5TX|)9! z6dFFefa>-@MZ%2bG|W{&NARMZ;X`cSjVc@BFJHs^t>!wlW1)wl+#u{K|385>?w`Oq z!6wa=B}n@my(#&^6E0}eU$4D+x;Jii1w55YW#@Q$r``Zr!}xHuILUiCL%fm|N(?U6 zifV4amahP!=C=uIhKU6lypvMcJ02y(%qqxCqQp>cf;G zo2&CX8`hKRt-~g9O1kj*MP8sY9MsigPqSt?;4Rf73ss+zUnl1?$>v3r-)UrnyEE#l z6M;1;y_^~*PVW#(Ja0<-BZ;lS+Lojh3j%3d| zK{;CO?yZDnX#lj21^7GVrPB5F{lu2zkl`|WPXed>Z`RCo@!yO)Q*B3XPC<=<1(izZ z{>VD@h_|@&_k0M%*Un%rGghmzC5F$aXetDF5P8tC7edrSb2$N-Nx+TGhyJtCjSgCf zbn#UWhM}$gUgqA%Ck6Iny3a8&QsVBA4hGp?e<7jVXlQOcvOZaKyko3nCW80{P3Qy} zKj<;SKb8Vi22WptCWikh2)O>eJbE)ff9J0(L|mwdDk>S@)SB-yen(Z=m|8aT1bpG^ zmt|Yyyua+NjrTysYPT2*tpYMN#6A+p;kkYHScX6)&WhAnMKk@XAz=0nLLIQ~crH?p z5c&qh+s!z1;XgshJ@u@5B8nQ8sk=2fY|bZky>0HnQ4{^Y7ZX_in>{t?lX|CWLb+%B z^8E~19CXzSQ*Xf2n1NF-KNccsH}KpRzP(p%Q&8N;#-*R?taF}Yx$!dUXd8M{7<-;N zt?b4%c0%HDaMYiR~-r@54FJa~L~*aflg z{Z#^OrvIXA(cik4olEApZjnO;*=Ap6aE0Cv2heojUlex(B2F4KS508ZAfIvi%pcOjYL8EA54EGI)oqfZFNDCBZ18(V8~Z=Y`Tr1n z)EL@vvc;T1?tsPr1l5-I$(SSfxzj&{c>~ePewx1N8xP$o@a_-aDMj{{J5? zkyS`i%HCTjk$1N2nZ36%l1<2tA~P#Hd#}ullr1DOGm=rZtPuU4Cob3L`#Fx^eILht z|M&YHbzFzzlDGH!JYVPQ^?W|olWipFe;$dk|NJ0+awxKSPToXU#Cj_iKcEbTqL$qWDHJ$aNUJcDg_|J}|10Zx!o3i;zs_{ClvcfJl{2pFTZ)=bM3946`aTh>9<*oJrnC=d(SoD^^)g zE_RQAqsvV~XqLb%$bsMyFny?PdCbj09G;^{h}6na94a;xty1GNYI@Wj#S#PZDKT(# zk{6b|9%(;TsV|gDglt5@GOOo7hb|);%DRGx0QI62dLse&5!>NJ4^(4RbZ|m=4_8j)?4PGOE20wXuy>kx! zjuv_z3-w{6p3^TW^{)ngY3-&3;Vwtn?84Q-e!&9cDTz+0iXzMqo5ww~TA3yKi8dvu zfiG7EOGrLA1k0ZpY(eRFHU5e)B^|9MSpeFin@UJ+k0bOmJ|%k+x_gvR0NzrDh(8YW zcuEM{!=8pP{7{6w;`_BTxB0&O22N7(_dM-w?i|&;XuQd}ThgF@AlPbr?_vhiEHXgF zf}nnI^{uZ+T&SyrZognobQQ!fsE@{VAs1QH@)?&#EBj#7h!RS8o<<7d*Bg;xK@8rCfQe$$UB@Ta%TX2wT)AG_!DJOG@?Kx{N}XKLM)`YdhKjI z6#RW@$W9{l85=&}MV~Hbr+3>ctqe1e4qY zTP70}AYqVGDOu}cI|JC39k7yo?!O-ukL3fS$_S0vz>+AIicdt*7!jfY(6<^Q-NeO)V8LC>2k5 zLe8G~3m;2+B3Enk%)V7gxy3;Ku&{i!>w0E_;7ZkRuI?aY-?fJmG;-)vQ8Fkb5$a560u&~S*pY0$lcTKwXebF&-rh{w0~!0~(FO=Z$es|-+K#cg zJSw6G+P>4bsc2JE|15KD-JK4e~*EJEMjvRG(928S|3c2RDksneQNv{)RR9N zPw^?JpiMnr5=7i2igZZOucB2OQNXO|mvCUTf5}r%B=nWN-ix7o`dj?uT>gtnJTHMf>x z+EG1-)%ggtqyb-O1mHRyuz{&M#hrO={NC>wbKWA1U8+}On(A1p2D>428zCP=8RQdE zL|Ozy?wOF376Sh|^0P}oF?$DwrM+}qVAU;Hqyc7u3m!-hlAFPwsx9An9SART1~x!r zm8^Yn?bd#ymMsbM+5o@6~kS#7VZzy6$eoO?So&GN-I+;*)SS z{jB>Y-^lI$`+9rg=x3#KoCfbsb>;t3sS@q3GCrqJ5Hon>3|N&rEI}U6DFb@(dzL1+ zjNW@t^wfJQy;>LMyCAzyjr3yV zjd^j}La{Hl;QC!``UpFMV^Aa?WvReUdS=Lqq|>AZXmlJvha$hVJeH>&4~;1$`StDy zI{mYIsiJ5?XDLNkTpr=^0(L7^OxJ_F#X@og}&K z5cn{|M@OWk7fR)P`{pgMPif!_Y=f0nYeoM%W!Yq-G^- z?sZ$DkS7eq7$4g<-ml<2!Pj{P9J!`x%uLy4-;!t2^K_;unKwUd+P(+$Os|P{CS0U_ zPE!J=mAM|hj(z@6(S+yxEm&*Rs3W?HQu?SN(LaSi7mWL~(^FFKM9~3}d#%ZhWllo$ zPwl`Nf{t&oEeqY(>KtsICZKf3vn+$4O*M${O8-t7G`Fa!z4p1%hN7|JvenFcr;=jy zQpPZGzvyWY-D5eu#VfUWl#q5E9e><6?8=>y_l&F;^cufg?WrJMINR@cZ)ZT`-j*sV zTxmhF?g61DMwmVfReQLan#L``y~d;kUqJ7tKT^4pax?B@ILHomKz^_bE|7IoX!{Iz zvPB%_XF66Sp>ch4mSA}p1f>DF^h(+6ExyM**gJ_sHvLC|45H*o>$xr;kM925i;pHv zy=Yu(V?Y3bzqrk02V=;vlR%j!1Nn^``;%NM#p0I3r5QB^?Y%LpPz6W>6136DU*Gih zm6YMf%floPCE4HbaBMfg%+>GaxyCc6{elV1F#>f-1Z#cFKczI!#~DzGez6D9DHZUkB_ZA%UuT6f@%?&XV2naE zdwD_HI*jvputeH~cm&|Iu=~9lPQXt?^4)lE0HE8AB7hbmy5c=?*CkA`$ottDAr2hld8t^ByZS z_0wE+2Tw#PgwX~p=oA~&KhzwpvP~n-G&|`<22A+g?SX-Y09ypR?;BHDo z)9rK4+o%^H@WGvt)?+|oFa{{ zx*6DeKEKJyz>Q85I!|s@U`LC{1Sl^tzjW3Rq(hlR(n?X^U(qc#pmNcqH2!Is*iYKm@lBN}D@jVii}xWMNTo=sgU{?$n#}9)*Nxn?@qqq{EkL!}x!cf+~gm4k=kF5|(QfDF7?`T1M#!zY=P zURRYD@Kq=*!MIWpVx4r!3y@Ay)K?9vIBmsqS4V3<`H*RQyuS*S5D3E~0k)l2G3!pC zYuG2YTQe`4jJxrm6d1xgZOV#nm^WPrV8m&G`)1U7x6;$LJ;Wj+6`5(+{F?AA*IDmZ zx3dc_>hwc8&HTW=EItXRQ95MxGq!#ET?;Qs)izY~crzDdsa>;IY%ZaY^Z174fC|5} zVJGG6Qof{XtoPohXHX1sK=pl(7~$lq1`&hd;a}LH(;6@iYcO|GKoZ1Irya=N$5^&q zFi(sPX48m$LDP7VP3uNiLOYD;N+Fho{$>VRYk7vy;ERBRowrA-XQ&vyZPWsJBn9MA zh#G7FQQ$Jd;Hy9~#2`>$!_nLbedU`B-@rkS;9uU_Bz_F=>u#;Kd5x5s27wirrU`$5 z)ddF7TV1l6y%>KivKwX(!wqq{(n=$P8-e-ld8{puaM>b!v%+e;mT#!sK%3%rmhcqV z(ps6*KQg2W-NJFC`9y`ASo-l>fluoYx%tO0Ul#KT1l=i6DWLb@5w9O^|A;9lCLebQ z3k4okpwOm)u685%TQOV_C-ielUNPa=r50Z-y2QMy8ly=ac)8$~H@d;dq$t342eNW{Feqv!3@8 zp4F<$m)LbQX7B{Q!%mp(UdqwGRN!L{yz68AtGzJzo6mV!=cRjnO7k57a~cumT{1c< z+g@Zr5r`k3{R)UUUp(1chX>mw;Z!>Ib7JF8d^G)Hpg?oW#lwbuIV>3;<4R4+u1=y% zp7j^$>vO9T5L_9u^W|89lW%|(k7iNZ@Vle^-6nu`9PxTz*HOV^RGx(Eecj>5^(dTf zYB)bXSKBi*4lwRdM0%a-dI%6eDsUwtm1vrUx7v+;FzrdWXK}sri}5AczJqQo&VR`a z#1ZODc572~2twBc8j}ET+7AN^?suugp)YnIrFr+6fP0AN?9cDgL@a75kYDs*-Sz4m z-@KiF`S!|$0_Xx#0u0H1Jbk)IZlXjL)_W7&&;iK-l{iU=Tm%XTu*0Rlit`W7%)VMh z5srQTYs@4>OIb#F9jW5Hvk$R`)?XacEi1xaGgk2Dx7B&%5I!W$!ai&r7{4Ll4`5JO)fAtvA`5LHtP)t)a=EIL0YF zHd1Q=4Qs?9|9FM11PFRMMpi50+b#BMi^KM%)}zV4Iyn}6ta@_~rE<5#yzZQKXclqm zg`P^(&vz4Xi6CN}hz?SMbMP5sW;$amof#y)EuSOTIb)Oq|8N$gIzUtHvuCm)Ex|qGR3-+u#o@4 z6>x?_^$^S*YD9hXwkm+?CU3)*Xq?&Qy1I#?um$SzMw_Zb_!e*A6cl+m8}IAmya$*dny+k9Irr!TEkgi4S9w9r$W7A)&YTo=&ZIo1L-@bij!cY^B@hQXTY5P<=K z{7{k!9*r-iWorc;deh|te6G_GEVas~KR3so;c{KHq^^E{H5q>Ztve7re3*L~Hx1fWg${AYiy4AXlC@CiJy70(zJq3Jr9r1qr+Vt%`kcwpIZGY=56G_2 zBw)&W8@XXFeBKZ>BNdxqJb{_kHv z@a4FS1g3v;j`HYT{pUXtILv4~R1MBinCKkgvH$U3F~^f@rnJx3wi)>!-$UM{SI@EG zACd!iFi9>SeKZ1;H#iCr6&jLl5&^sTg+M8EC*Z=iMSBPYn22{3lndSWwu79$QQat)3kXVBe5QI3nw5CBuYxY{prk z%?f$lPy*-I(Gn6n|L^_#{-9Mg!s{BWh^h;jm(R~EB8^N*U$b2-NU{K8mIlys25wTJ ztZ-4N76)L05s>-Z=8t=M8Xj$gmIJKzge0B~JsM@G7_Zq)$R$u)N;;8uB z`0j;8G>k5Kn2vgp$JY4^fDe!Xr=BvL zIRUMRY!AHH*Tn1)XEaiDzvXKVCXqo5bayBc+v^V=mxFUw2jUN`J@$cTih@>VLZt_ZrI&6;-7;uWrT@ zv1$l`g@OZ24vx=p*oI-@)BPq4g|ROA3H;7#5ZJ%~+|?JWSK$8dglf?g$rQ!tneA$L z5d9HKtDE*ee)gF&Ya_7u91Mxpd3ugy>JfPuGl29F;N1AR2WW7AIU>I+(g!NkV;?*P zK#JRVjA4NjcLf2jK{LOw2Dh|VGzsNO4Ub(!o!j3CKs}f^YGHq|cis7w;RteC90->> z6Ga!R3waNenPL7fL4Xgvl%H5Axh^*%u={y6QQSp9eLeQKEF_B=N8M}lu^6j)A)_g_ z{AbMT6p~Gc_YBEQ{qPS4Ll{_l_+)J?S3E?+`ii$|p)Ta5@#IOl+&i;Qq5pk7wSU?1 z|DO?EVmu31{VrN~?5TR*R;VKZm}Z9R|5KC^KVHRIDoXkUac{I8Q0rM^_|Y1NfQu&TAu9&{H^!l`KIc^W$g)Q2jgeETj3C?a$(ej8@ynfW}u2 zJkFVez63vq%L1SvmHms?3v0fb(jL@mZ(lO2O8a+$sNQrzZIn$VjD`1XsVOv^h!a`6 z6+E%vNo@n-{f6&-Kt?)8ykPvQd*Q6`MLKC(kWndzV6|m{v(L>vkGLXVn4UVU5&DNr$v@id87Drg zLu0PZX~4tqDFWbhOrl!-7C<4LcK7_IQQKYH@|G8_PRZ`d_rOY+#Q|AE3QzVo)w3c4 zh)RlP0LBSZAz&TqHpMfU6bhyUsGUNLhsyUpv>m$#wwPZlx;P?m5 z0If2YbB*?(^z|4EgbB9Lp;u4CxDYOYycZVQ#K3P3aR`47-Y!L#g$eML$@<(V)wh(K z3z+esxrQ}Y2o@${R*fsshVR|+1i;$+Hpfd8I%&DG_>%@1E&MqAbPQ<|!?!tGqr$zM zFTfDxSK#jzWBAhW_Y^={4%rO655Mw)LM|<(LKa{ps|wa?u2{`gtI-NMdf=I+ZMs{*a)($84fvlRPjLDFKcK7$pDxWYpwKlU< zL=)QSfL$@HRkT|tnnj`MBYxPK7jBWl^pk#DN7~6d=!!CCV5Ca?1hi^7dxyT~(ml=Z z(vv}dN=;=P`7d&5hV>GTTnBp|#ik}{vk%5P##lMe!>`%?5nYBRBSMPjuUuCY54$j% zTry@guM#BWQ|w(Oe8mTIPSk5Q z9cxSZklSPE=C{fU@kGT05PTh{Qn2gYl@oU7{)>9ZbQmtT1ar9<0X>2|+p8BHXn|ai zY@R6=Bhwxuh-6j_Y{sMx^td_kYWD}G*;++%Q|;B?+_#Yg zXGFOo&vPpppHY!Hw)HvGNdfo%INqBYIp0Dg2_YSB?&*m*4HPA{=35?z(WpmB9`O#MHADIz<0d(6CPbpKo@2d*7`=x? zT43Y7Z9^iS#d-HWMvt~lR5YZ8|D5T?KIfm*JFpMtf`I}{W^f|DcuDpVL-p!ekh{2Nh0@C6=1^(1U?6 z3@%gWh#l!z8Vp-vhDWO`j+V=UQjb9J&#Le5fYfXHkcC`$$A0#l6dW00ve(p~)rhX9 z#1DZ2juvM>-?UI)!~}G?46=`qCsb+Bf|YREaWDPbgY60N6xJKO@SfN z=bdF2ieba57y^CI{qlUROS_NdmSZtnPu|>dRxnaH^`NW|{Qz`c*5cXP-&w)9M%R}q z_ocG88iy=@@r%5S%|Bl09UnCfs7JXh2V|`^L*C7e0RSRwO{Z|y z59-tP9nz_o4x9YmuS zJj>BN0(oi1E5l_HbB`7V*cQquJrSJ`f{j9n)MrIQ1J@rayMoO?O0G}-R{hz%1FYmG zLQ%lJX#r${ghx@vW5E1V^ zqTY9t7fiP2wt(u91h~dQCy*42)1(7r7E-R@{8g?rEq~CbHCJ|=>YhUf`STm(mo)D8Wc1sV$Y_O z(^>)|Kte#d)O-3YTYUp~9d_1xtf}mLP&sM^xha9y(_ipW5`&F`x-+KelStd_qnJs~ zmL{HT#EO{_v7;5H0VhNhsD&&u!!IloqORckU^nM1kw7i02Nglqg3VxIqDrocQdt7r zlC&wh*Jt8TRe1A6b%jDPC7^M%Y#9PbOKJBU3?(@q64W6HrzTg-kna}5w!8rW0^&gBBpY%%b!T%6MG--xLM zgO(nuG6m-Zh_qP9rgHqQeUl%2K_T*#qoOlM;KK4CTKc?|{PZO;? z{F0l2q;x1owg!TzybY{ODO^Q{;a(@y5J`#z9i+&$-R^kP`HtV z{oi<0y5h;X#?mad-`AN<_@aYh5qQWW6M)U2E-darYKB8$#8VgIdcGJK%_r`JGJ1Z z#0jB+KGQw=LTG2sAfaSg7Rkf|*p<7>*l`fNf_u=n=wt_ro{h?}u#X*7m+}*!U z9fE{JtM5#W>m~|9h?wGJXhlp~0tIP5`u}P(jdVy!Lt&J4ELnEz`uf!u;w2ErAKfzA z>nC><{mD677bpUU2xGwm1{TknpK*EMx^%E%{gg@d{&`<~V3^b&`aaozVHKFoZ;AEkfR z*Zpctx8}Tc{%noKH-WW=E7|qSe1BBi6K?u09xQ<1=kbAmVrLK$io(HD6DOuEXI8-e zHwAka-eW@{2eQj7k=j?^FtRLbel=;VVv|1~_i6A;PJ1cm;d&7A`FE9s1>j?X#W#@u zv^sVYsIeuXZZa7x9OE*_Lmttu%Uze5Twc{_D@m)iWkuij5cCM}6ATR;HTk~tgLp+f z`uR zABJy3_9n>Mm&86<_{#6gLgpmV+9OV3gj#a2z<*qnSBK^#8^6DD3$8o5Emuxn|Jypa z!YQ8-1{O@_=+(VSmrrbQA3!2NAU~i3c1m!{O<3PY3{RJ=2jJq0BDr|=FwLP99UWav zrWlZj2sUjVYrH4odyPV4$SsQ2^fn#thMTge&;2cc&SXP5g(nUymPh3CL~xA z(N@|txy${!)IqO_;<^$tGv_9eB!Fj+rMr9XL54y2VnmjZT6-Kr*;jm5+RCDddz;Th zC8n9FA%j5<2&=U{Td-L@xwj^@AtzPq~+OaMcG8`aWdoq z0+E7)XHd)@&H7O+#9>Yd($sxsnveX01hbE6%EC}Z>8|_z(#Lny6C;wKCFFM$4J8)dl49-~K zpLgk#ito95t@Sm&?zNkwEiI_DS%b&z{h>2o->knN74D)E87S0YEw`<=Y}GK$hBknpqMX(5Uh4E7>#_f{54(FwO_kC zpNCdWL`+N%nu%!8a!CVC#Fpu6J`*Zfh=hlV@pl2}BvqtWM+<@ro~7l91`aSeR))#k zO{`X4ee-ZkYusa-Of|t31T&?EA6jCszg_fD5A@=?v@R30&5YX==xCr`c%CJMQOcO; zabuZ7i~O2}rrPtUF5^Cjm1z4?^L4)cqANVs<5v2**Dt4O-1Z1S|5{5yQ~5f>UM6ol z539na5)bQ@pc=*H3GT|*OAImp1Y3<&M-$!Rb$0Vj z{Js7B&*nPzhe};rU1PuIvqu}W)S*Ekw8k3|`$lX;21hb@6G>B6_+**)ki#;*&0P+| zJeW0oWfT4$@LP(mBeh+bIh(!&1qiqzz_ua{Fu{^p4#0U5h}Ld50rHGo_iWvZu*uy$ zz)p;e*+>xd)N^<5Mv^@dq#p_6a$JOHjY!b5T+{oBpyzHY<>By9A$IBMAHBw4K0fbg z1^wpB4R1!DX#^l1d)ut)Bf;_R`Vhc`muO6wnZAMna-*l~Scx7u;35LLUaVK?2L-_7CHEoR>@P76A=+fH}BE=^=HR^Jz>KKlLNqKJ+;C=?SBNKd0$-N)B($5 z>a=8$-uUc#|5XGG0f@OYf`4e%1H{Z0tZbh!(JylO`uO^0*i7^gT}!)e6!5)7=iIlI zl@$U7R%b{`^RD5+`d9~RKK}b`%v9_vn@ja>N$ z`7d=#wc=2yC0DO}VA2v4n6Ld< z(cQx;hW#hEI}9bu{!LnE#wh{6>+&B-V!08EvU9jMttjOQ?#6L!$&ZjUt{aBNWGJpB zfLEH1EZ(19RM@ghi(8g$;8 z?Fj#UaZ3+k2}kp`sca~1H&QR7K(rYR*_I?p{g6M~)Yo_K&!0agpxB?~X{$oWuif$6 zd#yDzCfBGI?jzPUm<>PJ7?jD-#$>{(TWzF|)6^-Ja3x)L<*^SdS^uymuVJ2?6JAZn zk0iavFRYl`7=^pyr`6MG&t^_n!Sv$3^Pierw)D`D{i~A8f5?5NS|{A=bl)dyo3ZfSc%Vyz zLvH@8yrlBQ1VTS!$ykfAE_in;{WpRcEjHsqqf~x2-!f8 z_oeQek2hj?K5h7zgQdhNh|+Uw*j%|tPghkx%YKf1_DS)g#dO<+`8`mE~s8ewQQfm{;1-r>+x0l(j!ZeV5=7 ziJ}c*}co?7@;M`mp?=cy#k5h-`{GvlxsPn2ftdcj#}52r;Tjo<~=8yz;&e! zqPHslABdRVCN2yN~65MkpUP(*YNa*#9 z)9<@{bNnrzT`Nb{<2TkY2Tj5Ym2lXHQEDBwIP+%_zV};M1U%IbmInYjkl~uX1 z&-~kcW%?U8R3OyOP-94g!zDQS(F65qUwnbEfr1IuiPwtu1_mj+;If5gnY6}hXcHGB zl%xWk%hV}SFYQ(CExeU_+R+2&5q5g(JsTqOq?=O;K~BV@=@Mm8)%EpV+kH-LiQ1et zuFKhzt{JW*uGLaZH;b|q-jmjR9U8V6SC8+qUccN;PqF<(+@oQ$@}8YZk7>Z}v%(7) z3JDiV&m4Ax-bZOb;I>5~BNU`z9ln&IWcR_8Nj2+9qC;e3XD|;`{bNep`hgNdGU_ax z*%nJpp%6jlvBnn+l^fSM?W?@vvCfTNePg*@;^!YHPz>qhiXcDAsbB8PD*9Sus!hN< zqo+F8LpoUc*H10CqC3ub(BykZniKzniMdPd>WuN|7^pCttUt!;tND7h`h_}G#zP8e zgPl?@&NhE>E0g$3r$F9Z`=U0@C(G!C2wI%ayJd~t#CN20-;;*rYH9ojy*=Gc=Q6oN z$So?#{^J9}ep6oJEzNf~{c}B+M>z8@j7^*Az3?I<3G}`^rN8(bIhSSsim|O#>MSRB zeC>X%Y2r4flu6aa@k9D-Y*tz_Wa;(UF8t-YI%9T2?&6NL-H2~Nc)*4UkI1@F&_FVaE)yPjY(jp4*#Na=a;eD0&sw zDf-v;`Io9eTf<~|t*h#EG6U!Ac67Y*_gj9|{N#4wIdD+v)>tadaNN}z%~dY65RNkB zwoErA4y*GfyM)3BGKmSTUC4R(2JzD30xxAgV}gG#GyL;=0W6D z{t_{8*rdyo-3y=aJlK%{=r>FwlXwXw@Iy@kC*~s^fYUJ;#>&bOOdl^P=(?<8)Jf00$r zkiYcZuI$Izr?ft-XrXi$E89hV3kJwuxtOH2*u0FH-wfiTD^K`2(OdEG;X~N}u7Q9p z5NXp9zEm;XQew}X|LAG+J5Ig&VEy^x?9UHMP@)l@_XamJGnFr$yvN=X;ynDvZ9_=r z+X&7b&ree9p} zHMz^lb|BoOd17LMUHxPG*qH9}L}>MZj1D`V-{lIM02dL;GHgfBMRi8=ocW-R!YL3R4nyWqUVx$J zQQxt4NY_Y=*?pWeJga~bbmIlvpb$0nDkyV00w|uOn7x5$&GMNYXwwp38G<{_1bEk3 zW1yeup-m4}v-p95kB4$zPLNIdQ?B_A8QiiN$8?Xr9Mw7cwzB#lgomKi1>%!(=JySd z5oDkgk-(;4qfDr+t)2d&9^VEKr^%jE=POS6#OyOK!pTZZ+KmvL)#7}rUxumH5+!Dh zWHEi4%TKP9RFj@WsbY^E3d@jZJtda&moX&6wDjoE-|ABZM?-*Q-DKnTt)lTL$BBK* z?kDZ~jPY-lm1VeUvSK9glXG>e!l=GW^1__f=JlT`cP$cHQ+rf;@Anh?toEXH_A;w% zzmzV=?OYb@>1Y?N@KI!8d|}*8-oUQ?gr6<7MwT3!jSQ!>2N9UQ^Srp2A`=2PkJ+BiDhnj7;sO_Kin z8f$o}$qAjY=N?9%+K&s=&JQPIHXc5}5JA5{Ow8U;grc64A9J|!g4+i(kr-e(Ee{QG zF1J{d(e=4+NZar}IY6f3YaA`OJ7!D%>ezo(Ts0sWURcV_vHn)>@@Tu{>v_COL`L07 zERm0Qe$;oC&J4nW8ma3m$$ZHgGx+tgU*G!mzMiWUS)o#deCJqRJ=M7TY;5HXS_F*q ziUfY=?Q6@eBU4A1*HIO;Bmq@Wq*o6W9zf4wSXe17U2j+FX;gt6Fv9pO5rlXh!S`pB zVEWdH0`Wm)jQp&Wt#nS&TczaB687EAWygwEeqg(|WsS%Le(&l9JGo<};*kl2$LK#9 zHd@|&qS)lxmnryhG{4nF#MbK6Qy4Dz>P`*@?YSmN0DrpTRVGO(Y1n^%jc6Dkk7;#s zs{4$NkKP^pEk3=4r8z@5uQY=G#e?>%Q+jPQ!&Os(I_qUR96b{_P!M7n6>{0bv7!*Dk!0&wqgrM4G?KKk6b7`y; z|7ib2r$rFow1vZ3YX2A06yW|-JA9G^>%Y1Ys8~lvtE40QflDZR;fz_;Za^NrTLzeUkt5q=1X=D zt@cR4AQuy7b?w)f<26NGHVNlVYKRykbU&xd)7>h3+ElX@EWrOGzNk`Wm8^B)>bLQ> zS2StU9doHpE$@F7^WR!w8J?C+8IUh@*Q5=SIO|HZEBjFI{IilRd58ThxtP0bo}!dx zj6Cj%aSios7B;D82Vu7|1;J6t($m%>gq!xCDLbsC36e+if`pXmPvt=5wiTWKlf9)| z5Y}cIoMlYwVuT7juYBWlf6W80t3ns3`vPpZIIN|66{jBkg6dNF?Kn_ynjxf|dT1m8 z%dU(^04?eS;CwdMiWdMXL&*?yU{Yx|7aCsAZ$X!(9`@qmJ;l`~vA~rDY$5U|pSLfy z-@BgYhwk4IAr;M^8y;YSxGQ7b2;U+GA=N z1{EeP)@dt40jEWEVq;^5B(MY_W5SbzJ?@EhTk zRiQr~XJ(ojS!%|p0!ZOME|){Ug+>I?Vh(98t!SM7IcG zW0a>M4uba7hRan@*d%?71At_Q zh^|~|yzNUphe0|K{|5FaAJi19HEDw0<)v=+5)$EcN+wl(@(_5 zn%_NSMhR98wwCjihR>J^!M~LwDCN_~v^VY}T?{+@Ra7cj{U}pY{CG*=! z2vED{ZzXkn%~xhoy$WgN0qF?WIu$ICUan z2@l`FWb2y-l@Ss@_W;z5Fd;=1wkK=bk3j8!Znkl1WyPlN@_hIPnDUpf%*et{!@_#W zZGOO=@WDKJGYTRVnUu=!_ZorAOUC_#&{jP&XS{SUr~k{TLi4&V(-MgwBh z&#Y~2srk&Mg^n<3`tJzYX|zIFW3oQWHX8#G8Agm|i{~pKB2Dwn{qU|)a&mI$qh+l0 zoGaS63dOVJ$uLG;ufa5*RlM`(%RAE`O6pf5=E}7sLA>{OI6(rcDm1KDrM!w@|6}F` zZ#@5=hT^gXcW*ej&=^k3#%^Im3qUD;$m}ZJx{Z*x&t0b0Xr(CQE^(Z!VVs5=U@fINu#+C^~Vw-e~l-BE$+nra6a+`^ZK?vhVY^ZuCqlZTFz0$#=5# zx&NuvvZ#)p?6&)BJ)c0>5voAot_%4l%mnPvvZ%kMlY>NCkR9pAvt+}lW6HoN2rbD&^O>o3+XSeyQ%K<=L)l2$}Q+GabJPMcV^` zGUxX`LDs;=)-oFmQ+f&F_YUYFRcCQST8W1V6j{^{Xcq>HZf&oF@gzH+icLC(JtG9P z>N%vm25#d50$CUlt+yW)LW{}W5N!D@_>ws~zLQzsY)D9$wZp+5zUIrrC}5?O_x0a8 z$(_X`P1mao0h|LOI`y+-Y^}o@9p~gz2t5I1Q<7~o1UeCsC^&g?=`y+0?^*I1R>zsA$e)B)M z0IYnCpQ$9#(FJbM7(-eGgLLT?f6ync7|S@e;gkA$O$!mrgGR1@yVnD25FMXOr?`J% z?K=bW_q)kCXTBjot8jGafg@{{Px^azs@Sm8exBv;O6g20gz(0yY(>HCS!5C_0QYu~ z@+zed*kDZ_qCMcUo5lhycTfbPge(#Ek&Q2ENXqZN)>#c*HX9Wc)vQx2gOkAfQl7Tw z^&W!UWuKihFQYVC{P5Q_^i0_@bJdFqn=X|aEc)kJtisu;3|-^o%Sprpfw;(|II#*q z&#EnZ@z+^vO3P?AZTg14_3g7aZp0x$#K;H@xlH^J_%~|P$|%9Nq`}MPI{1MoKc%~| zb={yvrPi>^YzD#A%0KgQ?C_Sx}?dh;SK>ng^0gK+NGv z-FA|Ng#tCuF2HIU(_Gu|X&o=kKw4eM4XL|o4k3-w_kVuxv0L@Ax{n9$g1r#2p*?i`)}sOek564yaVQCFoJivC=^E z2^L=NO+83BIv+%~fYAemkVzl?s1=@DIv5EV+CB@b$wE_RRcil;6ul1sWtGg&AQDuS zqx67=dLA2+Vg}53S(QX62=HSmW^*vO#E4mAi|U&rm{=1_FOO^uK%*7~ii_bJeYi=m zw4hG9XY3J4_i|GB#VZI2$XQH;$C|{9`CEFiJDyAeL0kTNJ2nr9iEz%Hycu01m%z(8 zK&skZg^HjDV7ANqnkyU@d`#ZDW!o}Gd`=Toi+ex1+lSZW$#^UaQFagmf92|f0 z!xiv{!WktB|NDiP-m2A5u~IaL{zI&+2Yu?QEoY{JIL^Z6t!_2)6QjpG*`qL8neS>F zfrxcH)Lt+caf{ANtqgtB>uzYpN7~Q0NeTi#4Ytp4!>*Adawi^ym~mNwrs^8+{bRvn z|0;->Kx7v(Xaj_%40bL>lW7L%t)`q>gK6kw;)XFSPHywPY3BKRwocCmhD!8vbeoE4 zu3FIlB>B;BH!*3rOfCWx3hg}2S)1Z%B~7?-%s;qme8x%y+Qr;c9LFeRFU6T58M)7m z!vi@kW*yc#?N1NItThm`4FrGJy%!814kMs}wXRwJM*^x(-*23Nu0?=R%^;dWB4lWp zG6S33L=?gO4I6dSx|MvvB^1Nry$V+OHVDXE?AG23bD!%bD^HN6cr_`!pR%qu<`bODsgb#C)x|odDG;>h>`Sy zHxI2xs1Lw?79y*=Wc8)ovR__xL>NAfmcWoWYehJL4`$~iL{_J!U&B%3XQqID-}rFs z6cC#L?aRd%EHq;9TYjtm{M@ZIT2=Y>a-#EiG+=bOOg-@dWW!Fh89(h0L)nDTo+TXJ zEb&9ef2ZtuA3Ug!sF0fla|0n@xx089M7JF<+AwpxEGGQ*Gb|zvo(S@-%=6Dq#huD2 z2GK^jeNvdBP;*zJ;-00qjflsv_FX)*xa&`O*KZ+_1Q~M<(#ful?UdAD#0i43K6egsb zf1>?a(Wawav*A`AGyqSj={TzMm9o_CG_UJXWsiPrb2YZ(pa1(!5KGnN!bILJ*@?WO zH$3y!j$x+PbOm>fZHwoHClti|@^wqN8Y$2cz0;tFoifH&ZLpR3m;Ue3}BuRy8#C^lC=z_1Cfa> zU;NIc!JWzR?G08&aC@ryr(dLgvnP-_au1vHR>+afIqc1$4>y}X79mKa_LL6M30_el z4wvF!tj=e_Xq(Ou#!KN>a--vZySxrMzQ8ohD;8$!ZTyw{>62po0~crwH-2WmhAE&n z;dC<58gF`Wli-teKtPn$uFw)$|D-UbHnygW793)l^*d(IIvAfl$kC7uhMEFNT`8&? zkY>BK@Tu`lfs+;FtuKGBvNeV=#{@PjZFM>?(x7~k_XU;(_a8Q*9>caTkg;2qV zMbUM2KcKJhA9+nWY<$aRTxHk*T0xG-8u15^L`Msnr^w^Zsb%l?aZoDd&Y@gb$@vyi zC;syIxb_i>mV9j3>c>BHs|=+|Qw-VS#Bpng`0Iwvetg#PxVJJ0C{+Ewm!Q}Soqq@o z(Njkq#Zx5yVHbwJV2{cyh;q0(p&knKPU2y)v$=E&Xj1~ro4XglM!(!t}?|2 zj`@#exijR;%gayWL<)&ez&EgA1(IOB8fxNSsimM0@&EtB|ivD&k@qqoQoT;tII$%U6kVL{7gJ^Rx4Mm25Y z^i@WXQ)f-u1`=O8f}nU0<*gE990(xOjp7}OhNAhw#bRPqcCxQ^N6Ci^XxcIO*LY-? zZews>e>6$?f$eiI53sJ(rzmPTDcZcC1L=h1&i+^eCY$=5r`41Ny}ww4i!P&nA0Shf zOgo<_iu+KJz{h0Hrb4oz{aRQvH~1FH-TL8hG=X8m(hq-NU_?i_y1KUK z74d|t=Bc%BE&UzZ_%02jPX8BsZyl6X8~yzXf|SyrGzb`kC`w9-NQ+80(%m3PgGjf4 zNJ>k$2!bF=BhpC4Yg6R+e!vJMbg8PacFFR<}EPYfxg z;D7!KHY{T!cEG%xaUKhw(&&BZ)u_NQh<6;s@!-!EpLqfGEv~E! zTD~=qX?l3H#VR1Y)zDbTsSAO^hk&GEgy}1ifL^+)=by?;yq4teUc~i2?82r3FtCw5 zia0rJ!wex1WfCh5DNzQ1q0JBpEyn6bzPV7nyiNU<>t>mfs{3qg=&`=WT9MxrY?uik*NatVsU$6Sl{otg2Xe``HcV7D7Q3Q#fSeyIk|t zuCrkTqc-7neZ!cuU$@%A8NKzN!rod@EkzgifltEL)Es)K;{8iicP5Y4=%}lNdG?=D z6P}SO2E&Uqy;{gnDQt(i#XeE*;NWbeZ^f3%!w+M)RdkE|>>!VFKn6Oytv2;cIgtSYK}RGvN(eOok@wjsGZV}(VUm2J`rb`RpVN49 zaWTh)@T4z+4(%@|;hLk){=tMbe7Xck|78iQt>PVuFMCYezzXvUB2y5aQ^dM(AqtLM zj5)SHoB!tdznl~ZVJH4}U9h?XsTgDhkDQ3{Ao{y;KK?i6G<0pf>+M4YQ5FUZ)PZng zp!%3ZAm%56FP^RQ|Bo{vq<)I9__D?Gc?yX`{O|t} zorlog(RG49UJ~8%5Tu0 zR76Y_V_@Gs?qy0uO(0iBY&`6pC%p=wF6eu&NTDF1-!oK5zr2DGECs=uHr@Tby_WB9 z>wmc3I9-~Ae5(YAMI=Qn75EO+> z&RGAIsv@cHxSpAfttBqnC*FVKpC8)tZV-3IsXw?;ZG5^jb~ z2H~**9PEufg`m(}9}34!n6%t@9zYbdrynfO!ysG)C*+*z7_Gjq&$Eg7iXOyV!?m-u zjoe-qBxM5RtdD56DuuKoL>ElMu|2_Vlu)ucf4hU$gKdv_{nlLpD z2+!c2xN4}MIx#eobPytW->`eodDFh*tWFruwnRxG!WUIGuv39j+?k2+41@oo-SnW3 zjsOrS?^o~Oe_foG_cXKPB6-ZK$%U(ZA=e1t4)bcwLQG9`e-_0$i{g!lJ=xY5T!e=|Hw`xUXVPQ6lxVtCk6E_zNdoF z#Mi?-a?oU`x%ri%3&pm3T~sdo5$p2>cGlSyhVD7S5u(9v{7c2B^X(GFuMbxN9}xF&ScT zEhET5RU2mwsiU_9;|ojhqP z;lSc}>85Tjy;bl**5zHh($RChqskqYhOR9t`;YT!?S`qrx}CoH!Q{BQx`~f%Z&vFq zG}>4U?LG)ep24RxRm%O@?ROjkyyIDcP3HjC-@Ao(c}E&w*ZF@vB!Jf@k&` z4M*avvAp(gCb^+@Hnt~EO$mBDE3AyS-q*zg96G&53l5qecQh%=>IqSGOnR~&n>+-X z;cXi4(H0=USvWo%7|aEdp;ul-u+DgmE7VTtz&cXqL~(B>&N4cyAB>m_9Gu9(WrI+9 zuL9U3h(1TX%Ax&-y*5Up91I0!qt>AE=2*vFSpCc&tFKo*K zOV=kK9dB_oA}Z`;o2UuT1K<0gxD7{E+d`b)sm4(BSPu7tb>E5pXdq88p#Voku({w< z{`=QB`HfkR=^4QVZea^*fSO^q|0+wEQx@{#ZMl#SO4ICzNDopuEOEK;J|`Y~C@^X= z^KpJaRgfO=K1myOM}V_9exUmDyhV!sRXQRpohDvz`ng+gMq6r|K2f(Nnh`~c@B3QL zr4i=--Yq1#6GXEbe?D;agAL!`({|clKcdkhq_rd#JHHMhOEW1d{snNddDJaz&;mH~ zo_^&UK5gVI#*q6)kmfHng8WX)C6!I2Bo7I1CbaoDeG)9yLOd_krHq(-E`WpBQh;`G`8Q&bV z4mh14DW@LFTZ*83c~=0_JsSk#(`r`!o%bNu#R?X3`qlzx&uzxQwlL>I2V$7IJY>Eu zpocT$u?pOvpF87RDj(s%BVrj%76%6FNh6HAOaS(ZXH1L+Z z5rM%0@%F|_Jj%@Av-6$rR}DE;__7YYmvF_CA#IEp)Gnt8Q3R&9gtKZeI+C(!UIts2 z$JLhuC2|DsJpFuMIFI~31R#2z&@ZNIW+~lyzIm;81{6Tyy*d4t5;07EAeH(>sLxzU zLp9fgvNso|&FhI%a9V@#rJ`NvA&OAm%AD`j7`3B!91iZ!m$Y~*&|?(-#Silp1((s(c^Ha4Yf0$94swggwCYsfg3OrJ(|x8Shr2M^8kbV z#Gd@nBRn2;nud!c}t5Mar zR@kp;$_QiP(W(j#bx&(7gdv_=ehrBF1+h!AZBM)b9MU$WRWkkZWKx{8MmVy|H%OX& zR`4=})3;Z;0p`*V4)Zq>E^k*lpvI}Ue_+~V?mM02&r)+!)z3bc?rt-e5e-7B6;Mh9 zq&_KIUo#(P8g83Kp7$2wb@}c00k3+ZlMScD06E8Jjh4Z-A{(1?IPl9AM;%-9DVrdO z_HLFzR#149&iStISAD*}W~mHe#eX|&(lOZk6;K!vwagbTPe=kcLw2O65OLOHVlg9b z@<1f|3#_JfsU7!Yxh!iSVNqX*=i1PG9LW3VM7j(*8RjtRYYaiRbcpf^`SvPrX6fF6 z=phHJGJ9{{ivm2ecxVtCr7qPRr9k4M;S9tQr04^=;zGJ0j!4e0Iu7D;#o^#Z({p6O zab4(m0rGJAm9hrkx!1`n#HeNNHQ@IyNo{DMSpL^8)-U{T08|1w#pt-G7NQ_~{)#XJ zeya!aj%+dF^|Bl1axeJg<@uf`%dIIRb{t4utdR#q0(_*Qc&jdX?ed z#pm+_@7N|t{jy}yOPym!S2NK4plJ4)pw4?V6OP*Ya+GAPnTV?6WpLg^T@fUu<ccaiGz!qDOdej|7|sE|JIO6XdCUkR55z3b+b7%i!@pki{t6r z`(iz}uDpGV72Y&OKhEWkE93Zjtc3D2gUsfXY73!Ey-|edRlU-ZTR4|wzP-Mx*ZEBT z6Rg31K=~)wIrAdW2W&tF`hR7Ddq96j&VV0d{ z6SbaCN(?TPr8`4~u#OK(mE_ZB*LymIsi;!_g{pt}V1bJ3WzOZAth(D~%1ieZY(T9% z{BvIA5lAFVG>1rYaHxH~fx<-(V6VqjDNmo>IaQ|w9CwXiT^`|u4sZntG*1MvK5CL6iK{AUXdkVCLrB^x*1aHZ8ft5yT{9rHd|)WoR|9xp&8 zWcC~Wy1KfDNxnJgp_)HgwQAHsEk3syuWm1dpyElVn_gGKhREfQlOX7ApDFC%?%a0z z#c*9Q_che;J$MlMr)zR*-~_*>bF6$yT_G@714ph5U-a=~)Qu96QU40P@Jrm2#1zX* zp_vN~&Rq^3#iV>jBh}8&0Qg$OYk>ghcYo;z3eb8!vdskEu!)*AM1(oj!dU}$Y-xO;jL1d}D4{(%NJMXcYHM9KQ8&=k<2APn$q79OT;*c#V2R%O49 zUKXvJVoF*1%RUe~KHa9Spd(Be0aB#X($-)JrEgU&%N6KF?-YvsiAG$KfRyD z*R&ixPqHG*T;r`A)egCHeOTY;Jl#g7%4c{C!*yHNPb6 z?JTLEAqGHD(BznefiC-ze%1py*@o#HyXa)aB_JNxU-`BiK~ah7A8_Wr2+WM_D!hkZTaa0VWi1j z5q8888ls~*Zby^#zBbE49E|#W{QOb(5h(ZOs$gvfo?kq~93kGbiH{gUuz(Vvq+zUgh4w6hvnwpw3JSpY)GZCoRh7{Hp)? z1=fu9Em~zGWS3K<`fz3`SiMLG9WgHbQD{5+kTH(%aswoZVHX^MSor`GjYtQZ@-Ib^ zHui5S;XNmE%4c_NSTBVU8*v6jZ$L;A5H!7fYMA82A`KYUX3fEcR~^?hAsh#_tJI`q zf^WnJDy&nPYL~>TqYz~coaq!C0_}yikrdfV^hy{HvXKPPR~(+tqoMbfpIG2%KIRC} z<>FGH2$XsjRlE4&Ciz`y*_`!a?QwN+(HkybE(QY^Bqn^uLB@Htnll@p0}V$nmJ~K^ z#VTFfDHdve+$Ksgq1wsuwKEF~&y-2L{FzZYz2&rHD`l1E4b4X_GHrlJ_UE=&k zR+edHdAi;C8(BuyQuTF~r!;?KEATHael4zQR{hyd^bbC7?h6YGGo>1W;0SlK_R7D% z(LTXxdHHsT9iJ{BZ|>>H@EsUz#-n>03O%YgT3T9Uymrcb-@HWr>2$eH!xPQR9~w6P z5@A5jEqeyN2(|*(A^Ssu7n*C*UxvgT_nd6K{(hYQG1Trj-1Ecrp0&a0jh_C1dkVz2 zo_kvN;Pn5W{_y`_;#k>ujOqQqYKt%-G>~pFA^Ne2I+69QEtzDM3X1_aOCaP92BrLX zqzbEd9S#|wef@6lU6}cTK1?#r=-r6PLD*e9Muuy5G-o3a8GT~6#>nleNiI{8{u}7c zaNJEz@KtNDi}>`2(;qW5jJd{>kbr=oV59F`Yc!Bvrh)V#lGNOuLx;tVasEyJ?HoNj zSvERPxa3W@f~Q^ycQD`-Vs-r_;!PbRAU{Bc?E4tdJpYfFV#cGwzciPcgEcUIoAl6*JRcU}j7!Kz3mmYFK-0#UJH`lE(V9GIab1S

w3Qd*h^t(?aRHpUtT^u>yrnE?rQ}HKT5R!=K9Myr=$1$1nMW^&2W*5jtrrN16<`nuoNuR_D%3o0LeE+Zv1nvt#$ zS0;tqG`)dR6#F1Pbhogv^+{I6yxVI5vq(O7>J_`Bcim|blpk)lCdBO|2#{i=N&1)$ zNFF-3vneZn8z#zei`Wn*yPY1x9woi==IARe)<=@Bs{1_s-)IC=@e_nm@P5{fHa3$< z1@OK9i?Ml@Ah2W8i!J&5eW^|NQNGFyQd(0y`;B2|Re)40N$ufI>;Nvp1An}ew!6w0 z?#|=CcUJPn>za_gz<{q>N|!HR9`76yEf4nNySG!*=fivNuz#d!Q?ZAkhiz)ly6jf( zrx}6u^m*FWe)|3XYQtO6`Kwt|GSQ7LoI~8Cu5&|K#@c3Ww@q*}Vx$k1zscMkZzAZS zysWnz5aqudTf2*7DTE>zCYDE~kTR}+5&&Lbpdm-@G-eXj10 zsC@B$R*P{(o?n@lKf2TyTWdY)%MlK#=$3H)82v@d%y=I4G8z23NXazUq`ioa+c|GU z=IS$lt^Fa|a>myg?eex^`~A3d_LpP{`>$U)>C!t>To^yQKD;2{Gk5MI>CoZn;d?cK zW&3aq0biIrCsFEmo01hvsBs%|-TbN-nO5b-sI1tQK2dZ|<&&t&yY7m#N`b&D=25;o ziLc{~1ZN+tB?(-J99CLwM#=;gS<-}ZZ(PHBPKOo{)y#T9^%cnui$$?^{5s9G6pD)d z?^k|=^QSHix;)&r;PhYXA5x66QNRfp_qkhau>R*F`|9tdSFn>28?{72PV2i9lgh}9 zJYj+gEE~jP5~}Q4U{kFR=8O4>79TfbfJCVB(J@@xsShcR0c$(p%FKKpAm(d$J+`VS zw$?x9&bilAmymHjgAbiAt$y|b0}G3~LFit$G0&MgluiO_YC5SamVu80F154Jp~*Je zI87&naP->IrqgD|2Lo0}!dp>4ib%Ce?-SY=_WiGe)_KDs+mkL(!Wg-lx%%iwN9-JD zT9ID+2=o7k+u{iqxLwAIL_>I--{s#zjb)na2eQi=?eP<^I*&{*lvFBG>8a{B) zqQP)0``x`K!iqfP#C+vx2<^@FlgSO^?(}e|&W})2l4(5~R^2%lY?J-6ZK3HrofuE1 zRLleYRqc8Ij&Rdo``H8f?hG$L!;8+&R2XmE06C&uw~*9aExo%jn28s8>h!)pV=W;3 zu{9*MAh7SSAjsKz1i*mf5~u`UFMV5;lBz(%PRa%4gLt}!RKH>b`zU44$v+vp4(SS) zc0{Fgd{B3LQiy&$VcVculkkx+D~3TOs~;qWc)Jlo3=|-t+hA-Nm45!Rzq1+xd}jt5 z@{IZFUoFgtbJ&*scnz!%aT$BJL!kDbmC;4qY&a*M&x!Ji?SmtIQu0-Y-0O@j(@~@D zNl~t9-|l+#k7TG;r*!?y!)A(lJ|9F?^i5j=v#$H2J>xt1Dy!V1h!x_j`(v-YX1{7C z-!Ybx+M$zS01jFFT_+JYHMao+A^N&h%NK1~@9*}#@)9l1InSzRfA&HKFPl|RbU9*`Scm(L2T_>dk0zVxkN|1iBY zI2SmPQUC!OiOv*J2E%Xa$iDpp=%2HFHkJl&*RR7_pDi&lac1X{VbdV6H@a_gn{LX%4-#wshQ)Y*j_ z%Zocd-)KE56%EHBZoUy)D5a<;@0|Xc_(r%KLWug*r+OnsII?wiwW%btTng28b_YM+ z*FL$>YR)_B4b!%^QDf>Do=NY7A;~Q24Q?7e3-zrFuX18iKapN*S)7UPGkA?7@Ls3w z0n_>uO@$rtK!ZHyY^pE$n&%@#s>}jIbq#M2Tb1GJ`H-+tM6qU7AI){j^~T%|zaALZ zB9C%*L=KiR#)&=tuanL6Q-P73`rb~P_Bn8`cbVy4SbxBk27oKVm&!u#w=-K-0#o{tu5J}Maj^tiyV(r zR8`9#H;PiHE{ZJ<_xL(U%WIKNW!1~L#?8D<68ZTu=v=|@ruo7Zo3mnvAKR-<6GVea zoPu_*<$N&OiQ~N5y^~>E%-3*dCrjzVSbuqR4@Ur>=|+C!%xdT8o_olG6j5A5h>Ixm zC9~a$@7SoO-602K2YJi;EX8I_S!PUVR4RV4qS2{`G$=L4I=XckAXFfV+jKB$SWp?y ziFwa-KL{bKpRM!W<4{dbY~Pq|P!rVky>4k~$><0biV4I3Cjvjsu6U9(Lr4J<4t^Xg zcRS-2YXqq;m(9m&aT*0yA3?u^6w`ta_~^NH#CvRc$o1#Vy*YJ^*g<{y5Kn{TlT^q7izy$3?hS`%JDjiE&j zUKuFOY@L?tv$Or_ZL;nG#3KC6^<=!BJe4ZPPn+bu^3{~1H&lPG9X=m6k;GTQC?*f{ zvD2<9n8euS)G)!pj^`!ccIbS*m4N+ZYdVE_eyads`FCN9;sO?H>0H1+GN3KlkhP~B(=BP zG`C(lD2khoCA!-_89Sh_Ez%4H(&`_q#1x0GdoB7+)Tsk8=}8Lur-2TNs=-H0DQiwS zc-fc6l;)})0!S=65!AEIeLptDw$|KKwL;e&oAV~?-q-%xLg^W@|*CKt}CWv4J$$=!+iH_*`~1F zs&RX_nZrBiGG^?|>KnH)0w2j4c`}l3nACaah(p{D=3>dM;Br%}{aRDi zxEr6DW5Omoiqv^J7E8_QoEeYL4PRS-Dqbe?+@V7WM%}r(B8RrZJd#?WREK^q{kN1; zPc@h6&!m@R*Iy{?gLDn?bp;frgejEIbFf!oM${J)gABnOF2mS{1bO{>vTA+?N9-ah5+2Z7+Rj zVJg90(!*%hW&69W>TwwVO)$wh-!@USpZk;Icn30pMk`ZDiT&$rYcf8SR78W-iSzKX1y!$&3sbi-&W_$tNv@>0xw zM^*zmZUe@cYIyx7%J&XiG6TdL3lmDWJ;@JQ;|np^>ZdA z!*3E7E^h)#OA!I#^H`6Kp`!VqA!A7#mQdsVszfHmgSkn$G7b&~AE4wC_fhFAtOBt3o41)h+L~jH3`W z1Ce_MJwD&@A6J;!lhHPz|`JDAIHNs|p zPlMv|q-0%*(Pvn|Ji`#;%_wt)o9(9qHGfX=D|$zhv(uTdIfy=YkI)TRd0W&0O_u6T zU+xY4h<&kyVDjFvE*9Y=+dD)H=ys3@7FdH3r>XZM;oihM9_Q9McY4ZdK_cC|eG^YF zP}^%2pTjd(+3V2>L^3_#DI}vVn`C@OTxJ7S zzRyNlK*s>aG*WA;kd64+%GP-4Mr7y3hYv{c?nhJucgvb_2Mlalm9$*b0~At?I4WrG zUcWB7{D3iCxV2bv<=|i$rMpMYf0KGt8jD)|qRSbZJG8X4Tw(TJIt35xxl3y{$;h|a zy#jgBf2*%O|Aj|NFDOX`v72hXq4q^9e@!!{$)D^nJ0Klc@#OcrxVn?z3` zo;%5q(|CM`Wb4l!4KA4h_E$%O^W?NuI9)g>#%NA@Y(OK6S|koPSXGoCRc>Wz3SFt! zR3QA4_~@R4atA>{Hr0n$cjER!+e`MUWleLIuIrh*39|0#d<(m3l!*tqbMctnsgxCW zme$Y3w-y(JmS^eQ^J1PGcaX5u?^!J1)=!(M*j6w*oxh=+@!TkL`sm6$dMLA-<`feo zjA>wnMW&PnZy5${ahKXQV6eD+zjsiy_d1@}g+rB6 zRS^R__Qs_u71n~{5bR!lbQ&vARb(!PHJI=yNXOD`sYNTOpojQ{f1z~@(mQ+UW7o$Z zp`i)y+w3;EF$u~WQrTV@u^dfZbvFEZkD<26UPx%0d{ADWHD16*fisWSpz}T(5of{O zckE`lB5bNbXmsrSyql)UxFyk7tanx1KbcZRQ4v!92JECxoNLo)h_p4wBFm-+m)-S?88>eRu|sq3o?prYbq|&xzM`dW0Y%!C3NB;o-l zad8xaN6i22ls@6VYmtIP+@4_}d6KqJoN`2i>-kgaOzQ`My*YZPt==m$36!NJu4@yX zgf~q4a)UWH?z1_Xr$Ajv!1-zt| zHD7&UaE$ns;H^&v5r(%W{&S`dMr!f87h@H0SYw7opVbVNFDMU{I{qrZG+m$RP5$n3 zUT3g3ISG{jmuqb~DWCG2PD>Xld#$6Yvt(>X^A0QD+wVk)@0ui6I2&L|D_=*WN4}41*0l|SnrQSP1a7Hj~gim&wjjA{bQ7n@MErow!lzvH_g(u z_h8lj>U4#tW7p0!aP;1p2s>5hy{q7fP7xM2e*D4Vslqk#r}9Z+rkQME78Q zU7vk3W%DcSaJp_=xk7R+`Qi6a+Z6WVN3EC~!H*&_%G^th{z2`Q_5h+i{#>*Ae9^hO zm$kU=d+F~U?>EM>lc|;7VpXfM-^y1Vdk69j>#rTm@Vo?t|3(rJsG$F8AmIQjxj{OZ zyf+;*PA0KX0ypR#lqh&~(2f5>a}D4p51}Mx{$?S#p-3d~W@u$lUFg|HbbF&S#C#zU zK>$Vdys*V2PteuG;{Sd~DW;2Lqjju(_LaOf!y_|A*GCT-i_Pnec|I;a+4M~(oad^E z8p3MSG$*q2AQ%2!7z$-8CT%Dgc(dPLRF68B3J|KUL9``h~9R^p;tT{eCxsby)-m5PU16fgFK zRgGe`5#Si+;*e%Y{Mi7PDYAEXGLZP6jqK*TS(QBSp>c2SM-?@A{F(^;-uguo*0qb4#B8`94{O!qP^<8s?p$;3T&QPa zk~+u1x+YBFlLWj79ntLzmn)au!!Tz>o3=QXhk63ZHlWF~SkOS~_uS z@8-J%F-f30nd5x5Ch&cx6=8mKdyD{Y)l^Mp3UHC1p9FkWxH7j&#j*jR|5vKtjH>nT zMu$GdxIs)CdOfV@W#x?~-uflaW2l1C`@7Mf$Y@W&N z*au7Wi|C$7JKmL*x98M`4cz88sR*?*{haM)iTX`b%p)zTMUrlNiK)%_Io-3kOXyhB zR+8-mrJ+iPAD=+*kMVdx(Ll(bL>p6Htccozb{fBMOq3az*hr0GnOuK3y%^XmHFMtF z^vcxw^oMi!wU}7P@UWVd3ve<)`Ps^t99u_pH%L`@dVn&RHNGgSQ9Wm{_H^eVK9Dk)1L&a_uKox?p?Z-+;`L1~dXe8nTXzbp@2PHm*w`YOnDauUe z(CKwBC-^q1#&5_T8LLNV5E0w_>ga<5o6d}@>~8x{Ba3g&A%nlGET*sxbhS)(m%PV+ zeox$d^mXuX@Aa#fxk^NldfzAn{qp}*Xj*ejbT*dU`O=$0LA&^1wl78Oiz#=?bhU(F ztjw!~DAfxsao?p|1HQ)Tcl2$xCoOX2vEc1geEpa~Q9LX-WE*we{zMC4SA9!a>)ABF zf3EzKM2X>@Yg02#iI|QSW{+j=NOz`W>JBD-n_1un;~?s1rF^!mD0nELy9@+t_-l>^ zl5a`T@P%l((c-Bh1#EtbgMc{wOG5*I4ZPVe+~Gp$NDUQWk`>rhDnZcTn&rC9wyE>7 zD90LdAk-GS?mO5!{xGI-T>ppA4KgtiyZmaF1%6T zWPa|Z5#^S)nU15>rpfb7a^IJtl{L@urt_=01uA}>UN*E3zKTk{e<&I4x)w+I@f+KpvEM$A7kh%!x7I0Hh?mXSn}rMYow1!U0p(D)ML6tl2U(C{%` zP-am&a11OHv$C!sS@#U#nJW_?w)#ka0iq_BcWaZC--r4AS1r^;053ybdVzo983zz= zc214T#&d@cPwxJ7<8M*lVe1s*$Ozp}GOr&Hb1nZHFC32;?be*w8l~@Zy zl$I{0PWZ`JUq3G^fel&z$(j=kajK_??|m_k(NJMe~`LH3|gxDto!6=I`f^ zn7RkQJV#DFH^x?p(YDn>bk-tr!M-I{NK#hWw!ACd%!jb+syW`3(JW;ymU6ZlOvh6G zMW&P>iX#I`-MEJr()EXjX6!0ISmqP+FAPWhkgU~pAE_$ouE`#I^dQlt&*pQ&q1zp@ z;eHa{$|quhf20=#g!@t^I}6u$;-VD3aZ)+xvyf!Jib$+yrI2PjGKyRpcjE0fXC3Z| z=1ib?v+7Jg(W&6wQ9bnd*L26TQL!^66p@+kn#24(%5TQ)y`9X=7RD1+>!t&&Z)%Ag zKe2J-iPiCS-r_`t(p^s|>u&{Y10yf*kb_EthnP|_R9mQQc0gr#D_~)6E5ycmTy_6* z@Tl;cN!Z@f9neDGgq1=ujbX$8rQ72Q!egOYJuT*=oW-G>ZPkx2tk@ zC8;Xqryz~$JuVHOwULUDltwytcGGG~L6?k_K*=zQCu!3UOu4uji^oo4&F`?!NgT?==`4i>HN2}in)=Xxel#~hBS2~Kkhm7KG$j95K{33*h; zpJG&9ls7X0GpaXZbjQJ1hqJA>*rbNe6uVRwF}an@nC(IgOO4xZ!Ny>IbhuUm0rf7uL}l^6S)NBmsg;B_s09u5L-OD3 zF24^(q=WCkcJ|}JFDan%Y_zj&Qt^&3L&a_sc)iAvT!X+#i~KVSRO-B3h&lp!NLjAH z;yWLtfCk^Q9ol6eR57rS_&Mf$SA4PW*&F=1w%FXA;i%@ogvKt)E8phUr-7^L;g)}@ z6+&o2qF$ALzqcPYYCT?Aw5GA6vTf0M;n~*X3Ms7oJia0>00yh?)!2oq99l2TIT2aS z)$sHkJ(7JWQM4cGAoXcK#Eh9B{3`<^k3x+~v4Vp+|I_?VtqS`n->uHuhM|VW!?4QT z5i;xCJJ)&hM~6lxl_KFheQ5h?w*GJhUzJB^f_>Tf zm+h4pkG^K7pD%mKt99g@vosp+gv+(D#;VX}tZhIoVE6FP{`wWQGpTeY{Q`MG@1ui4 z4OPaaE@bUh+l3lEG8t7@m2K5z`UX_(w_sCas6Z zRrExsj2OFxp60ibhv*{SRQnNOVYIgm+U~@$+-3f7!Ljrk#Qh{dDA7J8t$ODXuhXwI zB#8nbo@?a4lv`~(E?n^Q0HHrSuzql!ytmK*W^X9ZF0+8ZSfu4!rG>6fZ)vuNTxTo~ zwk!)e;)^#2_g*)K1GhHf8JGHd^Wkys%z(C}kCNYJCgiC!p8kpvU~SK)W38-waHN&5 zgS8R(@lUa8m9SHHe=aKZsGo{#XXoMb+@tl((96cj1dq#K?|$u6b@<~pVu%tdkkPxb zTg5n%?`kTzePpc~?Y>k|RGR7jw6r{(P9;W@HOR1`_*Y;;v6Fe9*w7-|&|aX`dW5Li zdy`9shoZ_#=*!JIBw`Kan=x(|c;iV7#rjQ+cEmeK%R62QJiJ6b}R-914!Y&YjCu6XGJbsidkYmU>iVL-oP-J7?9GBCP3fbw(ji;Q{r* zV*8VnQvImlN~5Y6HjT(91fu3Qv{(*Cjcav}YUU0rTg12$`UIfnfuU7!$mpIL>ln6U zsRh4}tn5)qO=#s4DXyfxwGunMTi4YqlG_=k!q@k_xZE^pTxS&DbzkG}=}WqO=+vDO z>SQuU)Z&BmkG<93r4ns~TWJ|r1&pnT2 zo$q<*pI_N1Q7hId?#xL=bIN#2{t>K;xOYbfdjC9^&70`twb#{frA&LCSDZpIsT#<3 zmfBpdzF-@VE4-Z^=?Bf))P7?j{SeFo8sjlb(~6V=*R54ngRSTsQQ4baVVQOx ztbCIPRccf17qHCtq#VmATHai!%M*29?~S4vXC0lfTfI{KjR+-lWy7}ra4Y@6vQ2D= zSU;zoi1mg0cNj{vzUr(#buT^iGB%ywTyLYmF`SLLHPKnr_*I>qIaw!#h+*M=Jfoh} zQPh>;_aZc=Rr`O=#WtjR&fz7khPk@yja|H|>r)vqoA@m_ZIV@iQULFH!k?vuRJEL% z!Gvi6k>?T0`!{6TrnLJ~raGfE8u1b%2`uf{ljJPV@eSqwkuG=63Lkvd^vBkGS#IQm zRIz2_^%A8HAMVx%n|(imJ;eAoJBzNcX2&-6r^^sSm|Yu+M%F)vAIs%$fD6Hz~9mf!O(v_s`0$`wY&II*k|*1c9| zf~qK)y@AILTSjry%u!(x1e4L)^b1~Cgf0p_dFs1Ao>ZFMBEp_~IkDI3Zf19{{P6q! zX809Xw3gl|YXLGjf$%PZ$t!E!Nw+n=#)Q$;TD_xDm5sH!u2huv!iVHe=K8#Zai17L zNsh=4W7l?lpii@Z{cL^}SG3e&^Q7or40U=7aamBRxG>Ske889A8!@)ZsfHHaQGtC? z&nkccBsrYU4tL;m|*6`{GD(HItua%9hZ@|!-T#flKdcef!(-^LCuheh-ey-IO?|waCzdP zpSDu%v;Uee&e{m}s$P<`?CehvG&GQIB0)qi1=Zkfzv0Mo6-p#=vWwU+owofr`pL6C za7|2chev$|);E#}C^3)#44sT6#`#OvpjaKxBe7fbhv++6Fu!Q@-ufE{Li3jk`|6fBK|l4hN1X4a=8~-ef~Ct z^65>zCLn-IgkpjXs{{zMbQa#+(#-%B=MeqY6RdxKP3uv+b^3;UK{+dQ_{D@5ybVWO z-RtCT?L`F`R^P%uMHau_^kr)s=Ar!D#-<@6HQzPSdG z!6mLe0>UU6r&*SKu5#zwD5Sa*ROBBA*cDD6#9L+|IQ$|nqRQK}^kPVp&Pk{OqdWq{ z+pjCxG(TPgybwFHBNVUEgZyE`F;4!pJJZtM`}gj8b>x3KN^7^h?(BjpW4UoiOz005 zcR+TEnK~ya;G}s_(Bg5BDHD0!6ub<#Pfc*`QL+crczj>_RHEBR!~XO$T4;|Hg z44eLoCoTHnk8~XgvRlSM1(7=YvlU9)X(+mzF6j`koxE{F_;kuydvVelp;u=J7m&w) ze`g$m@B!fvT8z$BEyE@`>FZ}uXrQ0`ef>77d`kua8wZqq55tC_Sl}5gXw$GyA=CQt zS2%cZ+Q}@hFz`a>^JEpOB^p?zsfNZw{>HPG^yGH2mQ;eq=si5fF_DLVMb@ox({QMC zzSv<|_0v2B)#>eeX`Ed2>cA{dgYOws0YamJLQkL$jg@k`9heqFJq}Ho^zHxJtNf&;4Ymx9@^Zc3tyh1)u^nRw|}&ufwANB!@i0 z7?O~Y`Fi1GAPCipolZgmZ!CRT)) zmppD`TD#M6e9y2!H|@V>fuDrJuuq;Q+Wcli;eS03c{tw*P9IJJS!g)Y0sniqFw^O1 zNb9DkzjyM`k1ugg?DQeo8Sp&__@8gYM0R(foD+3(5T&hKXqDoM?F&|mmwXswb-xw;>mh695gW1N7RPsJ^j;_HZpa%88@bzFjx5d`GtYPMFO0(rZTJ3)c$+$V}vKYV!iL+ zUN!Vn5qM-YI^D!47oG4uy`~#CM<*kMi=dqwHE!kq8}=|Bq)ywQ!hqv}w~!w;fZOUR zV{5FZuEgFke&WY;)9j=l)7qU5jeF0|>HWk+3$LZHlzzo)zaTCz{|bTM`#orQ^k3&y zKkc~I`uP*&X!vWko`AoXgz7mNHXf$Yj&YVsm^l7^Cr9CvTWQ3R!%?{G;ZcANa&-ox zD<7{QY7QA1ZYv=$?qo3RXn3svHF8Vq_Ay3y{|)y4zO6vKjS)61Cf6TjNRyFqTP2UU z*xvRv04NX(pzxx(;xa5wzS9{`zSF6%dCJ&t2KpWm>eHuBfBgugPY0T6MrB$W1CP~2 z@|Q31Q2?uNg$j>le}k;E|9!CRX|o*IJx_s0G!Y^Me1SCQovZDvYVR$g21{ne&CGJ| zDpD7x;pYft|8Q&)e)nm>A%*GKb=!<^25dg9}{X*#h_s3C$e7y4oww* z%KpmYHP9r+fM~w;YSMuksJoXOs7C&qV8Z^}#yN4F?PN#R%Ubfa0|1d298oA z>A5z{%B+VxgLeI|Ck=;;j9q6#q5huhW(Ds-*#qDtxt2thx2M=hBtY;6UBd5+yj3WpTkl;P-@UiH%{c z$EH}hjXW6_-Dv~ zpt1{DFbB@&$FkY)sqYIT?K2?*$lii+ykDH}Xb zI{k~Z)B6;E=ysm`^h1$OhI!@mBHC}dFX5byE#%$!5&w-Ap50qUCwKdIF@Alz7<(B% z)MYstl*b<{Bz`(@Ui|#onEY=e{xN;;L6?uK)}zzlrf_giP3^WRx#x%OV{Ei>=?)LqYYUAJ_S zI*;D+I_QSO)y-*+t#@@7#qAx&3k;n5kvYN0AOR54BtTkP+E;kJg(*HhKH?K!%}99= zdt`@o!|M-JaSD>sw{PE$SSY7Bhw1Z`i~)hxkWh!gx8=|ndcTgf8~4__P3GaI7Te5t z`ZT=Z1W|`gvlfVR-2!{3fY?0azMp5pq<~FL&%hw@7zD5}rE;d*%mP`lx^9?X7o;aF&GF7M3w)U{5%wr<4_8~Xa6 zR14)d+GRb8%5TWYIsS0aYRil_wreRcOZwVzZ{0AzY+BKQv8p?;E!)JjVbwT6sVJkP zZ*eVSc}&~Ns4{tcc7>G*Ys%GRd-mVw{GZm>+nXMLSSXohl@;`MPWR?X+SlN5TP?3_ znyU3UECMwnAqdj?l$A+=q+9$&tp`iu&O^2DEt|EH^h>>k^?;7f8_(T0VgJ|DY`R4k zOX=ZB-t7bWmHS?MCJUZQ!rI|Fd&CCJ%FcwPP)5CF*6>0jB2VT8&E^bIS zWS72i<8W|c!>z4V*F1r^^;8sHlfq#F?2jj|rH#B#N8nwK!72Ol#HB{iG!|mkf$n{I z?t`Eo+hu&=*aP|=((^s#PmZDGHm7b;YUla;?XoLbw&hFFhI`~vZ zy9I{@cz))AOs=J`!CtLSE)_(FuNo}`#H=@n`?UF&u?n&R&4Q-!kend>C!syz^VX*e zWxliqSGF= z88S-f|Lf-m3vo`qy*>{VdJME1lv3dg1rFz(zVZoP;lyQUofRqyioxkqzePH;9zshq z(7_0TCTSY8!Q-Dlf3+N_qD+sg=_+W=H;No-N-`0E>H;I9eE21F9))-My5ZFG5GtQ0#j(zfuf57JZEqSrGli(| zcjQh~fW}ywQ}k>XNW;EJW=myvxZHw}O2A?JfBt-FsprWOBG|*H*^q6nlRHu9jWkag z?##zFa3f01pg+c$as(|P_A5d#Y?#kPkW$CO&|hEh-h(oq^9()1T?HPHMO_EU1Vhn? zR|q+BdTl{iZ@Cby+ZC_GINY@+4dk(#ADXded6_}Vi~F96vbf-!^F>he{zjh{R14Ss zm0#>9LMIIEyaE~bqLW4fRJ46zbt<4#)Bl=h{XA4@7KV?p5nvT^jSnMxi5k0Ud#fa| za)G?!EZ70+Q1Lx(P~&Cpsnf}WD;0DZU}O4M9%kl>v!&5zOoq*O5ZVOlXVN=EJ__fD)J)nzx}*ZoVJ#n;;Md3^R{!godqW zMLCXmKz9jxsI2(EKEqQEa-3(!*%f16OkIS~i`YZk(bWA(Tp`wZOw+_;FucHaXu1Z|HHU`sE=LxBceXRqBrvsj-7hc@Sb~lYQPVpkA>4Rmghi68UV7;%OeUi@K$S57@M_9)>tA50k}Z z4@awvwP#Zt@r70^eI%*^v$fZ!A=nLBNjsW7C@QPt7pvR0rY02Zc!q7%r)_K)3;wg`22q;ljBl;eHT$sj=Pwz4U4s zG;8ZVf##7E{*;k*i9Eg=dj*}}$ZK)APV1lVnTq8$-Hamp0uV2aT^dC|Q+f^nqhh4!{yE z+o|8r08Hc;vsGAe*-odoGL5 zCs$HzBGFnQQQ|x|KtQrOYXp&Dg6bK#2<4?x;q^b(G24aR1DeIrXJkPatiIoFBE`j7 zbbUIgNJ>V=3mEXt_vix(;*>u|{L8!lBPb0tl{L;l3DOrbiI9dg>wP}yh>FkBpm6uJ zeR1#Qr$KCVJyT>Cp$ZG3*5c;GZJVwlu z%*@7ief3y>n0X<`!VsDr)E_RF)I#%$i;$-jno*NVv0!F1J|%ja+Hu!XXrDTt-Dw-9 z5s{Z&({8>|*%9rXmnNyQIMgKs2KJG9(EbOf6OE@DY1Pe+RLD}0PhyAzA8dx8t1`HF zur!5%o(~ekLUP#9%TfwOkJq%!T7<&u{1NvzP+tHRE!8wbGtb)CexWmWK&bPkD$hMz zWsnJC=QOy%!@f_kc;@RN+G=UN8xWb2y1cJ0?kMbIfohyzvNiAIh zG#>vn6*#0ue9wSVNxC0nKHr1pWPL{`mNR?v39sY)!>qNr?@a2H z3up4swLa&s!#d|z$E(x`nY7ZDb|Rgo!sJ5VzWuD9Buh0G%G)sgm~=9SrD|>~f?v$W z$FwdrinB+d2EYIr=itV=`74NyI!VEv2VcvhdKL(2Y|d$*>}&ACOWWQS9PFOQk7#8 zqw!MSJ64GAjj!yUQ)yrj}tm1h6X z9f*Ktz|YrbLUb14CS+*#7W<0DPqpHio+rm-Y9a#f#@S5>$$xutD_YwZc4ce7E7BY8 zvg7!S?YLiG`1=}E}i@c}`5w46XP93i{vn=ZEU69yA>@)0T234E5eem5w6=CK6 z-5icZppPUES0sU^3)VGnfmY71Y1Qp~E*6B31{|TN7X(eH`Mzj_#!8)J$*eZ(FTx1^ z@to@sE{}8UwE!G(3&wJCk2ag)fcm(ja#q-LFx3?hZJ~h5Y&B|-ghrw?SQU#v7jV8uu`aA(f}IN z!!4=NN$fgKQ_n7H=9JMZDQJlm_cBTU+bm8_8g8W^OM3f`v0zs1qoT~Ax^vF010~QF z4M$BT+YB4_3zGP9)TQ~AcB92;Y`>9@61Xb+@!a=E_tu>_w;UX}|0-02{2(>BgrzX9 zbA-+wOg!BkRkql4S4pb1x<+n?g8j5eVan7-3ZewPzA}ocTcdfopHHd~q65vpxcL{rE^-(J!2qw2}IDeRozyjF~n%8l?uMgX?Y``vp$d z9zIp81F{CXXP%k0BwmvRj-VKoO4^2ZGg5K)0=j?)M*~Mot%C^7NrHl zPP(7FW?Ifb0)S61q0$UT)~SX^eOXtdOHkKCAD zfzU1EvDR2jNl0GH0ltCm=JWM5di>UDWz0@~fwjK0UgFiMd&<+QFAI+?U+7$! zaG{1Rd92|%YzPx7>&!+72B!P=Dir%Oj&f~YB=q3Qd-FY0QyJIcri3Js5UM>_Sj3@j zd!ad*KBSRe5{s_3Wv5JdmOLA;p7{wts2cb0|0)NNYW4Fkr_-P$$=L2%s_vnk5GQ3! z1TrOPNQY-n*~BZxKD_txIej4!v-Jr@FafV#j@Ma@ckn_tjE_(s&EaCxa*jFgYnGK5 z_qKJSxmR)DHEU7;Mizt|-n@mTmcy6bh|qjr2Qg;Vmc;sE&A!pS5!qc1l_&W? zL+{3Hswf~Dkn&9lHNJdv*osmYu3o4i8z-*kX)67eb__Eb_86)t20AqV4}Kj|px6#) zyJdr(rh%fxzeQ5Y<-1bn^R=@7X=tfcgfEz@85F{rMqRGP|h8PK1F!6D-^n|sZf}5Jf z8}BSsuNhm*o@nTb2{85IG?R{ly_-=j_{R#f&OM|=9~*Imkj~$ zjA1Lad8FG#e4I&L3gEhaIW4kgHc<|5EfpEkg6Y2N_zK%aa4!V1>S%syWMlDTPP6$& zn*Fc${?=RkFHA-IaGo>i5H)iM99~7`+)p3Y0 z;%vjxkJnI<@X0#Hec7!W%VJwGuY=8NOgRu?1U-aQ0(1}D@9Va5;aKSUotD?pJjWm{ zCmoQjvs96^oCDb-%!1op{Cx-U0Izo{l%#`@%F^MpJ&i#ZwQleCHZzx)>NITEUjc|R z!Fpi5^X6*{<3Bdl%jA^|A1i_jjKvlHH`!~nJ>?oM>YJBJM6CE3t___#1@|2oD1nzo zhhI~nBv7a=h&{YJKSM0yD#k0y1ib15VZ=cUvoZ_ood;r4OBM9=+{;mC`K{&U(XRvk zWme{WDNi#i)QDF%_Ds~Qe>il;nOXZ+xK|LlM~$?M<)_Lwr1~$VpM8pr(fmOcrK6J{ z`0!tA`do~rOwQkoh)-84rQXx*>;L=>zwQ@ zYAEAXGvEBqkN2Zvj4fM#8`uB4ZbtF*-N*6W8ELok-@p3)w&-GhcDT2P=J2&s8r3{aU$WU8S{>d6~f9+4FVog^iG+Tlas_U3JoVk{9QZWjiv% z<@ooQABiEaGpp|To<}eJUT&sEqMArrRJuykvaZdE4@ibxWmBsGX&Z@j+Ih?YCSt*N7}eQy@|X{ONUoj^ z9>4$NTVHvJos?Ma{VWIhbDjZKhU{KK2FKOnV{RuZ${;A;W9ymB4ebN*u96#_@6OjZ zvPfIXj+_xwc%SERMcP`wdLYw7Y`Winz^;pW=}@2lmF`jBBf@LLwLyNQ;{Bd(*|Niz z{|u}!dVlxwzW(I2R>19avzVnqbr&xC%%wu-)MJ>(I*w&e#U8}RMGwm`XuXY|cp2F1 z@vEFMy_vrwWvt6y$GLsMy5Gmf#xGf{{_X``wcOQX($;CGrBY~nh-WF?*EetC7QvOl znm7U9hzR4vJ5_sJ|u>I|PYy)|9)vc~&_V2Gvj#m6Lw>5M~l-=v6Y&ud#amc0S zwnrRc#JMo<@@(0xkY$a`Bvw1S2S$bKb8*7@b3Be!&0|!?GzbLI8~wspp~3rTw(XE_ zTo{734k>g=*Gm{}v;6u#<#g82m46APfg6PbKHo;>39yBqC$J6Ejf@&}Ox3r$C)gCS zecFuO+Det0gGtyD{MrREGH;k^mRo{0>sql=b)t%2Zj;W;wKh<=4|;g|ZhB&BpRLGc zhLi>_0?PX}zm9=>cWozZ3gF4}(wl!uRmFT}Me(D>HOke01&TQq*Jey1aedBzdV1*b zmF15$`i%GdGS3|m>{=OA2vMH89j_*lC+z59|HWjXiF~^MFRPlj_!AnBfJ9>z2j-ro z?zFMAF_p?&fAhTJH8$F-nj;G~63(`nsC8QRCN=i0mxdWQ{FYr{sc+;5mBM>PiEG{3 zalN&IkIWw2>BJ=DuQ8)nTqUmuHVgYoI$wddY@2<@rgT`NBXFk$TJVTrGm!j^^R)q6Wb+vfesPfZRL zUZQ2NyUdOEU#ws`k$Wzk1iZB6T&zKguk@y zQ2BWRt*}qv-#fH=g$fgW!E+7wH`ur&-;ce40hjX*#>u9fWWa=QjJsrw8xKYQQIL`O zbi;8@qy53BS8FM1?DbhGbt~o@7Y9e@>)=eJU2Y6equr=$&Dlt^gz^8f_lX%Jo6MOW z{sWi>WMBfcTcO%FhRTQ#xsONyYH|G?rkrMabfeQ`TyG7gwtp#hl_|nh7U~{C1Dr;$Vp$DYG_1)Dj|l#)(cxxMwp0YFfYW@5 z`M@ns)_&$UK3%l!!6`P~k---#d!-yI8g-r3L#YRKQk?Wh%oa-QUL;HK*^GX<7@GR) z-Z$g+z`7+dnSi4~k6qGpoP}JX&$gV?PxvO(lj?HuVsyDxFP}`^j2f7Q>gzq}&O&fQ%I ztCpqQi(U!1(Cw6WXMJ%kr-9Epptg+XB8xnbEHn$(trNc4?3K)<=nPloA#38^9N0zY z2^HS(th$VG-QNp8vOe(7bS>A}UR*vhM^jy{tj^U__fE3XN|!&Bwz`vvrKrWY^$TxO z%K?F3^FyiHJd2G-qs}O`Pf+$HY5~c#>qznz{(yQ5xG+F22HC2Ae*DvX#91t$%sx^v zX|1S>9_;+i(`!)N)b`-YMRx3*nejS@ZZWi69jWV8AEh$2Z1Nvu6uK)PQ{Tv(_uxn2 zD@?RM?|x05htLdUM+m3G_jgp&mo(%9&Q!= z#~mMRY^B$U9r}^Y7iJqYaH*%x@c@K#^Iuvsm!3M!O(gPo{W5b!3Gh0s1 zJc{UL`3reiT_fVBCzvjL)6VZc%$HxFJ&HY8ljB~xK1J2}O>$xS5%h^V6147OVyLY? zQ;lu~toqR)!M22Fzl}9-vC(V#hNL)0M)Qa&1k^XgT5p`~lq^-VcQ7)ES53-jCX6Uu z$@UAip{+&>9Euyf_>rckyso`QZYzCRe1D-X8hM-+kp*YX*hOOJvD;YQ6z9LY7 z_(|{k_X9B^ZmX7mCwbKbObV2~1AorvD7MQ;TO$>dKHBO~|0geh+?+Z)GeNg-Vael6 ze{u4xoQIaP%Iq69!K9I@c+8T~^uHU~CoTl*?B6JO0zrJ42?5qjA}LIfQA;+^-h7RY zc*--`w%hh?9PDQ5i9vR|@}G?dI>*U*wk))(s|mjNnOuER6Uo>xsy*ZKN5oZzjFu+f z-XU{tvy^$0863dFo}K=7e*kbSM#e`R{5v2l&+U(9O6adD$9V8@q3WZ5(y|0_m3q}U z_e$p4UMc?*dY}GVm9gftZwD(v$RDK{4e&`<+&>m}pZ;qfgs&lVe5?Hu#Q>WakE2SCXuYWWU zV2>)QJTR`EDgB^3UF~OzUO#^8+;;xB1#qr1bdw8g)eA8ug&i`P>AIiA!95_k*b`fD zQMRj{I<<~Mj)$wm{!6#%fP%@Rlap_l$=TMl3ni`n|Gb=1=}TWK3h|M6xu5&(dfSbE z+{s4kt*yOkO?etw@vNqNJX{;6AaE~SUr{=Kze`j2&gLSTU3f6d7 z<~@t2bkrX?@U|7;20}g^Ji*qJ=_)x=)Z67?X;|v;AxYRyyu6~{CAhacN&H(RaCj@K zvzxhqM0!BZ;WZCo1mtS|r)?@d&DK}P>P@Eye_hCR_`#t!GiQjM-!#}HL=u~M%1kZ; zI9cMK#NHf`(QF(ts;w=Q)g^yw#6h4ScHzTl`A^@P*qxC9Z#k=<-c-V zD=E7F>ry53JGkPRc=PLg0VG~}t*fs?lqXc5ap~n{%aZ5D2k2k%31kUMk**3sF{$Rb zzG2Z3oz0mG{&;A*q)1u+c{OAG$}?`oWKrUoP_))#p@FF5>}uapa{SzAf0Jgv{y_c* z4p32VDCQHe_2-i2Y$zP+5*^fKlZLb~MlU`p>%^_ot5wdrvENj`kWSuCR9BBU?GQI6 z*tEa#>oOJ9#2Qc){g*c4!q8i#fF6ylF?-U&n5V{mUx&2IRV2?f`Sb8(%WK6%Oz>Ek zXHarTwa=9v%IOCOX4Zf;=bWUTlxFFY{XsGB#$-$ns#a?@ZVROqoS=w%D zQpHSNV$z9^X`K;YnDrENyrrm=LN%)Q@V$kvyTKLj{dCRA43!X#^=Vpvwc(Fq@s$ZW z6f}K8HnjHd?9`0G6$R}RD~}*K47QNgvZfvQ!u%ix`$_HP^Si??4R2HmkjftNN`yMN zn;OPR!^;v#ZD!kWz)w$eaAr>7g~F4=R9hq1`XIu($Kj%iBg;<_?EWA%$zQzHIWKhN zveWiwwkCmka(fPdpXtJ&i`w->SmYOYu;J51uCmGhgftc7vFgODA+JbxUKRQ2JR80W z^|yig8y-3O|DAz8{V0O;6$Gqih=j{@pENHhw7>YY3%1IIpBYiBdEMVcC^wPLJR5zu z66Ji|2lpcZfWjhld<>EvG&nt)M#%m7f|efE969;O8k+Ov|5UsSybwTsc$ zQT(`>c0Gm%l{sB%tVKa_NwnwNu|Zi3<|+Y}{j)J1GCIkLTV=FxSm4l6;3+|ogfY&t z1CNG972p&HopR8?uK$!KdK;;RCo0WpN$13rk-!J&^@~X(UX< z>Qd)>xWw4nldg97srkZRd6OThhe5T*@HZD8_WZx}A4>+2Vt-DaaXi%A{Tl8;jHd=J z|Aeo8m{w)DeKeuyW{ewcgii#DQh>08uJ~ZYT?ZaYJYugW0ykQ$WBPs-gnj_Q(&CuL zbv#FfAO*jLG0su%5#IzDMyz?bF`jfZDT#X!+9f<}h#aO>1g7zWPy)_d@o$-8&FZgfi z?Noc-1`}@x9}N?!%!>PHSMeJR#Dml0FLYqH5 zrpN!Sia*)g9gf4MnYO@t2E3!%_3Zz>;otq`J$RFVUEw@n_g`=IKX?TfijUCk@~Hzimof5^u zCznf9(;4tGSDp9=6;x?##;+6BjRsZpPGjLkHkB1^mIC)|-BR3*`?kpXNu^ZtvRQllWi9)-a+^i%|!o%!<}* z5n>)^48Z*>W2DVxEiElC9q~=wnKYCu{vmsA+=08ajT09@IR4cc9%z%Bq{~N1PEHG2 zf4-cCQT<<^VV35ayH~SkW;Zc?o8zK3!q1Jnfv7GuQD1-vmyYLLAaAMB~KiXOk4X9f{e{eVJvq}$4`NMU4a z48E0!KY{acFrz!>i2mF9OXtQ_ShyBk{a+Q0hkzI;t zfe%Ci8j}T@0bj#AQg}!t-qtKS{e6E8u-tb+VZd^tU_nMv(XZ9qgFM51xKkewBp2zy zA1&0cSKozoR7HX&?sWn^ZSd4BZV zK&I`-t-G7eQM--er#YA&@c$IxCvuB>m3Q_u7H|464@KY8phR!o{r+OGAEqJ*;7{d~ ze`-8v2y}PA>63eLwihiN>@`G4=*BYnFTo`UZj=z#r~YWmBR75$2dLC-zc5KH-Zv2l zde+&arWM~A)kPry69iv-#iXeM;8!#Mf%qr+ivP@cfqj>)Q5_UHQ$HCL;}!KiUtD0d z>v-e=blURU)4%xr^?@%ou2Qz!v|_-MBZPCPD(_VyzC%sIN621yRZ%_bq460DfO`Qu zQU;KS@iJit z5<%hGyoOrpUs>QUOsNSQ;iC*VV=l+>rKr+ePoeWZ((mkN2I^CF4=_Pz@Y@N>atA5c z9wq~#&3+mbMyZiI^KA#LuB!rRi1zg%AN7w?0faO}_q=u$LhzO^JOj7@3R5)vU|2wP;Bn{PKx z*}1}CP>W}z7Is{K0Nw%i)=59BAejVoA~q$)c*jNoyAZi-LH-clOOC=4>5&;Ve0UAg z@GVXo2*}*y7?s3!(GOWKH=j+S0dk>8+)C`@b|9;`nuo_9RG~ty0R>PA6qV1l?2TI3 zHL5;Q+!wP}lkQN}1s zMnJu6BHH5VI5=(r9GRsQOXUx73gXW-q4}KM5epvtwC^D#puulq>V^}YV#T?|op#-< zYs+&1G~!-YHQ!;)&t0`3K~&IiE>?8sW$76B_fv)wA~NKNfB^U;%DdLq8E1tbivlr9 zuiP(oAo4#}&mF&d7piPtaS-hTUO64O9+p3U{`kFlLkH;lpd)7<2mJp1oBAy4_1*D- zBW@|t1JWo$#dnW-e_pm7P53Yo`8ZDu0;`igz3&=!%_#=|nx*7c#5UADR&M+gUm64= zViB{O=D1)Mx!|^cXCshIQsAH95`rB%KxjssVcx9`aOJz>lmK3zZ+|3<-MSgwoD6q4 z{GzoCT=_{(gJ6f#YmNp62M3c-@_s|^k+)}!IvqFeV^*|;1i)n?_c1^7c4s9gp;_Wq z+=31IK=DbuIG+$?;@-gi50!uypab?+m#GgVJoxXN#9@R8(ZUf?L#GMV4hhV+=uUqp z@2pB4>das80eVNy&Z?0Rso{nf;q!J6CFbs-A<|)o+si<=)2n@FxYzO0><;q`Xao32 zw9oSNA6t|Y?aj;wcZ>lt_vWISBJ`!aC>P4bal~bz(+)VdRErB$o;RKK1Ng;uw6+Eb2g}H|a)OoAZbkgb_95g00q_ z!p{mhsUAIhmE`K)cX7KH`W9{-N?$4+zOzGE+%#c}JKKQ5>WC>mFxvV8%>Um%i~5X2 ziU>H2jEoJ?eBqjKtqH;tdof}=x)xxwdhn?Oabd`7Qv2I@A(FSAo}SadEUN@&Ramjd zu0@9XMSQ~MzraZQp-$Pez`kSFjP z@@B}yskj3u#29?@IOY$hIkav6mJrE;NcC+zX%Shy+#Q}~_1Uil=P%R(O@NZqAcJx# zm}7$xNGr##?R&n7q1}uPTwPsud`okpnE9$U;#$i683Ba(aB@Yc;TrCk!r}Ta@rA*A zZh&bohxxma1nO&V03z#{v+vV?`1+knPsdxH9HH;9iA7iU7Vjzru5Mo1Z-!XxjEsE! zMG&p5uXNRN;vei*yW=xDDSdngr9`lDk-S#Va~D9Y)i0%RnNM=gVt1xUgptQ@dn?X^ zSDrn^DUlc?ZYz=S)BUWb-fc3rFt><5M5qE`k^d(plC_LD>s^8cZnZlh(Cb$3TMoD1 z0W$|04bS)qyF7+4B>?CG<$%qm=jK+1!$}Pco@pb;P1qg&thM4}h)W7IKD2H?YcKnJ z?|LlsOF6p0uKM|=a-ynlG#~EfY-?7KV%S!A<)7aABwtirM4|q)pu-zrO_f{)Pj(A< zvwF&tAPysuW!iqSUg+>H^F^S8f8?S=*ZTr$l2folxS-qPD?K34r9EsNgitkr`V{5$ z9g`|TeF<-X2(9L$n(Y~Gz7ru(%P@N1>SDM}OSEsIIK5-H;lnR+miySud2ktGVq!oq zv#Juru{D!ca(Cqz2)_?EuHL1PXQ!X2i)=}eQ1(`Zr0W6l&?RvHo;9 z<3=D981l6a;O@va&8!HXWO~es2A&J|w%Z#t-)3Vw-e?_H%e9QHdb^UWVPnCu%j*+e z#hd3#>@+=rB4&FdfE-v36eLqqiLK zFy@Kr446MsNfkJuR(NBhtt0ZW?y|mdb4zD{ZAwz$EYF3ps0_3!zv*yFW_7=?xpe0G z^-nR*#w*{ZB3YZ&3WFZlsVv(y=zMnRoX#BEFD>U%cl(WUwC>wY@@YhuVCBn!Um1Dl z!lbU4w(L+(y-U|ujOW@525JMfI)@iDewv+moq5iKZ#0>s8t&x_)o(N`hbv=syAylm zOiDDvm}Mzg4dg|sdr+Tl$J6*T7U?bvnzmW1<=ZA{=n_F@1+0Cqbz@dUI6NokYWBZB z+mOO7dnHA2cOP(tv__E)`EB+E2oQm?3NNesO>{Z))|+gz-gBY(wA#MoR8*1C4mrDmUINrb z{7Y4N5b3cX0ujUY{iM=TQZS>KI;9lgz_2kfF_~4KU{$}JXXm1b@F)Rq9|&ZT3m{@- zk&oWSvTO%AJ4NRKag-CoJAxV@`d0s}f)4C~BmV z;}*_5e9;{;z8?JEM~xqrsM%#85mWG=1*BcG?ka+04_kjwi(C@Ba)`}Mg3A$tiT~>x z2{&PMi1lYIj^o$?6>ohv&KP{V@t?^s_5Uzlceze@(e1njZ2*Ne_|IbpJ21NBOh7#N zaJo5VLmXi%l>~kStq$A{#-)Jwf(+biEtnHm?7E zd!}e(t!9-HYT!v4+1xrCP*|~CUtQ|p?oD4wB2aL0`tq>lb4kfhuln6tEHF5c|*jDJ;yA9fUzJAPnLbFSQqK zN457~M{YWl)UG2EOCj8*4&(fN21lTL7*O&g@`|0!$o$i#bnsf2P1|nI%q66F2Y^~i zj+#lAme~;u*Q`^2z%Bb`Qe1}S=7XA)yfjC%FXuW;_fjm@u`}>f9?}UQRLflx-AINHHAe$ z2%L+-C21D;#H2K{)jdHJp`Pb-KmLF4i^WO+*XV0c>rYZFaIj(0$VvoqcuP35HDpYP zE)z&eE$97GmxN2cScB?NMd-bdYe|3WD3uTmFy{lH2Bx*}cw}E*sVq=pV?e#!peP9F zY^4u(1V41RR zDxBZ$SAWeDMs{E<#xU4ygZW*zt}O@B@2}jU9t(1x?LMOTW7=k!{m{{(tDwhLaKC_U ztnGIO|EM;AVaG3Rq-*KfGZl~z1d*@UCYgo`o7(&f3Je3Jt8!7N$x+kR#OeX{p1tQI8UF zSb(!vMP{WY5-aAoO`04%j+|kDE1>e*&&K&@hT~+BFsF6@+0)E|K%a|+m4Pa8;f*KM`{D`R z2?@EsyC0-c-Q)I@S?<9FLYjIpz82CF#;hVOF_CKy#6N09+3OusmNtG}v}={)w&4k5 z?H1_PZRNKcsIp_9sVc1s!H{!8S6Xd@s$e!?4*ElNsp8|UXx+IH=@KPKSAl}|H>LqH_5hfw;wYtOaG;Dvo9PkN*)zF+I?q3ucTsY4Y; zOBAqxB?Nk2av3x}?(Zpi0^(YCtPVC8ECdDtWx4{Pp+>q0Rnqq`-(i-;q6O)|_*(Y< zJd!@G58G72Yl!p@z07f*1*nclfgaj;+7Ycr4!8h8n#Sfn?kgkp^zypQ;sVlmj6Yrm z`P9eChO|Jya3bM|!Xfn7J818788b;uTWH;13#6Xc?-cE$S)2!|mg=Pvg8Lg)bgqnM zK#cJ_(W~C?R7o@;omSrLJcG@hfQr*vp6NCtS*p(Qll3PQy~W!<>J$}f7C77yz5cBa zTBEat2u~L8txq=u$aPgP2dLVGs?G^8VP=;CSq%Aa-GFQL95L~+$$wPpD6Gn(21?v) zWfM_jNCXD%h)hyrf=`?$p(5y<2AJ$UCGqT|@iBFZF;b+U0QZ`d+^{C%b-L$3by(#g zb^-J6H#XMyR%Jy5#{!GYkJIpI5TQu_x0MMj&)4hO2VbA#R|c_ReREM=@F&j%Kt)Kx zd#LU=9AfWAkL1w0Mox9fY?|s2&eHFFs@5aFLGxk6vR_h$2;I3JV<{Q?8`dZMemq>s zwf@XP)=c2a)fYND(xT^_N1%A-&g<#7D#~E7*S)ks%=j1~ ziR&JCVYlxj$dZu=(5cB+X2D*C>+r_u}Qt^&^&&y%Li- zGqX7qxR>lB+j>c&h`wJ`9S7XR$T0&UhJ7G=!991Ues!@IJMffAPC5K$9bJKr6Gvs@ zm%0_}6E6bJ@*4Q*2|kmt`ep?B3Ce&R(|4T7`x>Jd>%}mfD)XW5%^MQPjhv_toxCU| ze|6qbQFhYkub$ky#2Tr{Y6_hy+tVJIS~3cQr!V)hX8#;g;GxB=4jYrQY%Mjl#pbRj zLZcLVs*GNJHzfYJ=M?wD;5ST4ZRqIa7(~sdH8jJZ`T>yso>bEQm}{}NHTZB#mVem0ZYNuYad|B7V~TzucMtNOH_Gn!F}nI znV0}8(`$8Y;qUjOr4u9PF{|sOm-is{ip14b2RBXVqVO+7Z5u>J=s+N-%D&}07NT3C zdr~erK_dV>@~HK2;R>TbZRmGG&^1b=KFZhN1{3v^sj6ayRkPeP=CRoGS zjAW>w(=nc15sYWTFyH=oSDv8ZGRTiXe)M+fp{Zv>L+017e02625gH)U-??mY8nP|)FFU|Hfu-@Z%8PONZ=wSRPAfJIF z^=gx}TuF3$AA@}OT}wK(=^Of82dJuiMqAS>SC?Eum9pI9sWI-u#+=IA^E9!&=ZVnW zA-*r@E)ak0s8hp-tvG471sf*RYcHt(FRtH#)R&P%LG>U+iRbe zgkDuuAuE{nVzsxZipqV?HR!{$56ckPglbUNcAm?mO9_G`SIc;Jh!;d*Nu`^!fKQK*H7I!|5=40lBFG7OW&hF+qv`zUmnm=?KSh-iC4T zch$H4NwX>l&b|3EA1XJRVLX#pNms{r^c?o2c~VcjQk=K-Slf@;)?6zJUfWSszvl*1 zjbnH6s+r@(RrKWE^8GmLvEFLP84I>k;=@>HzKX-bxc~2gj!zrk$rXZ6+-BZyldrQd zF4zYK-7GWYcNnRFG`)oL);#Y)30&I)i_bAZ3Y(zUllU1oH3@~A^>Dps^7xAcM111$ zazH|FhDqZmdO-(ko@|%N5|3$6%KLeUUnNaqh#? z#x->$aHubEvGNX%`d#*A8K-;9c1uDU_+NG)gk# zgG=o%Qxe&F#9UgbN)X0c9nUjMP->kiXN;_vDB6gKQSC^2X!;|)jgog-3sfL2vRmmo zu|3jcY|Ph@69(J52e1QZ6xKd~M1Tl=teS~yFF_CrSiI+<38p_d>oO>KjS`**hi{N6 z>2dTPI5l}*Xu$w+a(V3CQyRrJ0~~cSU0?F>3lE7gtq3b6iYD*zde1$NQblkncf<2s_2FM+rjirL0aJ zhd1LR5?7JS#G6jP@fvs#KVA=uGbl3g;zxIW0JIOHq76E^Q2rQLZG%{klK~_SPPtyh zD&p9ypd*tHnrCmb>{5$ zQwQ}cI)w;o7e`gPDkJxq7z&;edpyq-$TRSo_Ry6ebWcy&d%go4Z zc5z)@cCzZ6S>x+M8;@@`3B*<&OQqW7w!^k00|$6YA14V_r_6Jk3ipI)ye%whEc|vQ zuJCMIp|h~N2NNkFlk_|AvICe|$RTq_4d9jyREwL_Kyv~`@6N#66mZpBv@}n;zYZK` z-$M7`k9K8HJcxz3e&BXeu(*B=$PO{e2CnvAJ{cgEQq(1Zw(lcdu?bLW&z3A-oa&{g zql+B!qG#@vS+_BjC5}LZ6$D7u;h%O=C$lH{c^t_BMBaf_oy)ft0Klnah_U?6!FwmFWn(_ zrhD-79T}>F?w#TXm`y)^J9OO%s=Q_KY`)>9#F&#>9MNB;^uL2Jx!gE~mOXj5a!j!E zP~b(=XsADct3J_M*d)(`;wt$@e+|dX0m&iX{)4Phnr%GIxHKNG%J&2c&%tV za=J@{m}uk#lyD7lfN!CGMg-Qh@!_|IFM?Y6g}!~!ZAupsZyPs}32^Y6w`aYD1d{E} z{U{}zc_iF^k!zEv^&6!`=iz#pye#xe0-O%5D2?1t%1Ja3&3zuGO-41Nj}?2IdDxZ_ z{|0gj<);o0+95}Ex@sx{~XI0n;G{J3uQ^2X}SF_zn_ zBOGL`IR8W-hFErF_=H9>x)-*l1plq>{N4UU$6gn{9nha^`h;MH!21@D+%zu$~q zwg&-5mPj5ku*lz&ho@6TKi~Nq#Qc(opb*0gf6wUpf$KTpe|#}Cw!_VVg2k`LuTF38 z%I#kg*|WJh;qwuDLhDZ*#EoTpJ$p98_RaO=UE%oWdftat@+fl2-d7cJ9Ym1WHr7{C z!mmD}x%;zJWIIXR{HV_<+#CA`=eqNeO!5-K&1oQr>`Q~P2puSu%r8oKJE?#StP`6y zq5G~8iOAqWwum?3x<+RRnIr%c#nV@EfQoC3iqBdK+#EfqxdqwJtouM97Nc6kg)_gK zU!#M6>B6f#q~xf-^gg^+1|hsNoJxjcZJC!HW>0x~dp|$Dd#vt(_|+Lhl@+fAiKO2D zq1Ta6rA{8tGX*VK5^WiT5{OB%UzWgWbBf+i(blby#dkTTT4~`5Gh=GWI zGgjv8nruH=+`jYUcd?*CDZYkpZH$3y;}0&%lQC_&?{s%Bl7=T-$c-$S$Q8!S5hf(C23HAqGL$nffpGR-E6HwYp(Tc%!B* zDF0)mWcW28mOl=da(2=(s76D7R|!#3(Z0TNe}L04!Ya(il6dahJ*(P`xbbR7VgTeT zeclJ~dhuHMSuqNc^3wy=EKmRo0vKKe00;p(FAc@Xv=}Z)tzAPTLeb$*Q(5`zYx|D6 zt&As7gV>Vg=~}pN1u4u0J#hYRoHr%@iU6J?81_Y)&Zy?{DoflpCrRYQ^F zL^&8E&3s!q==H(~s1qhCl;G~uT3m{oEG$+*>FEIiL&DZ{Lmpm?<=`(?5FxoD9avuS zO=H(%Nk;Lwf=%)o<_c&_LbIJkdP>@q0!c30Kyl+Q5A3_tB(~^*p(cHWD zUNQB)c-;PNv*y=)!EW~{DptU~CN@%D=jjoGGj8tt4#@zSgC4rx`3X95!|h|hSwV;6 z0=p-eh#6-{$#46kpFG=TDB(wv7x=wHGRXZCwaaoK2lpdxKP%jnb2xl*_Z-7GsPT4I zB)t6;`EEl6MUZ#+DY|xLm_v2<_JG-Ulftb#;UhEM8@t~aT#~yNZp)z>V@mJ-x38nY z?JnZ)xvx2PPZHwm{@)I`IE5JMviks`ppeLMQ6ozeZZ86RTD(rOGD98v)g5z?Qnmd1 z-4ittM~EBax+L!PSIq}#?h}a=n-W6xF-SAlvV3lY2Mlrj*t}73Ito!ph1B1>(WpIZ ztPfIkV%sK&iHuv*#1kE$*o4#t=rO`4aOQYY7`I%#E}Rsk*Qo=D;RgO100u9@RX+eC znuCqJjx*69=*6KSqYyv^_|aU1-~y6WM(Kqdja)!lDdyXn!gZ26lA7jM$1bl$JZ6X& zq?VmTplxvZfA84fOLl`w_zv>J3jH^so3>oRXsZ>{FtN%IrQkmFaXYw})WE+@Hu)*H z>(rS<5X4A>P8p-GZ14}wvH$&gW1J&mJ_P=jh!_6LS1JDBT&$%W?>|_9e+IelHI(itZ7ij)(u2rVpH+ z6P&xDC{+J_&b3GSEF<1ES%l#>*(LaOLTS1lrV!xs(79vd^5AU;X)IIdQCP>-oHN_s z{|f*8rv`<79wx{pqElf&;>v+O<^-+>vrmmIdqAQMxy9A}0l6thYdYh2UnPPFe#5HK zbk;*FO^?{hX&$m!@tLgec9FJkf?3r=S9x^`NywW)`Kk|8gdbV5KuZt+Z?=8+<6uUs?;-OmoVR*D_xA;&h~MwzBe##)20kWO7ko)7h*ESDvD6pcSYL~QdYGp-ro{aj zw4pv6G?%Vl$pAu_fndDzz7&G)Bq(hvyqJ^w1^#q z<-Gj0EF(P=_9rMOF#{UU2U?+&LEjAh)x{~##|9CfUi3^Imu_?0GGHi>8r+U|BcPQC zw8BC8v5-Rn)HuEEC$oNKm%ei1$Ez?OcM^xV&ApEY2yh^3vDNWX=g(&~Ub%IPUvH#| z)$jcE{Z_Xf>!QS~7x-;QeLzq*#J}Kv;37%^>U)&-Zy4lGt7Se2__DE%%6$wS7r8Sw zN}e1D;V=SxXTF%YDUXfK6@?#OC#n|?97Dh9Dp>jc;2W8M`XHpx0TkMplEjue?%QXF znRN5Ke&($=s#x_pxtBXLB%eMDoq^u4sQh}&Bp}dnY2M)4B*vfHdE1l`K0$V-ZkOK5 z*98sP9`lr^SR^Bs?R^_qE-BfacfT?J4$pGaxueZV3{~d_s2u6rW81F<7ggJgHvel_ zePFI6+-7FEzOKA-v^jj)(r9IVjk{8p>UASl>C91^8>iZ`f76mbU z{Cb9ypricVD!NyMgx4gffu{tzTqmJHp%*xm->MU?#0Mf((uj=y?|!UTN{aVS@(r2^9m5o z)%1=7DeNc~=h;C@($K#?X zrAVc$%n+5Cyo|DUWMpTBtgLJz5oK>e*<1F=tYl}0%xuZt`+I*{m+SpI=kw?9{C?ka zT<2UJygZ+edB5N8x7+PL@fw1kdRR?*nXx_Hg72(*-rVfVh!?8;j3;6H3U+Be>x;iv zS{QWY3GZmSLdbkax~csU;7C#ABAolH-Fa}o=u|+AV5U*}$YQa=q7<4-dK?Zdi7tpE zVwt=?idh_qCWc?m0R7SOpvLIR0W-AXAj{{G&1MCfSc(_F@^m z8sEwU5mg8L&OcX!5X)E#T0J66pA6rYAf`L@ZBjf`KqE_8FBbBNddm7xGz2*(fwS)w z`s=e*G?W!+Dv5Zbys;~X^<#1mun;W!{o~f1LCKk??GBuNH=IYXqF_^sSg)O6j)8Fy z9&3u8HM0O`=@is*`=c?X&J2@pqP|3r=1_|b%wXJnD`EpNF}7dnZm^Db8%s)tVw7TO zTe0P}obXyXFzAa>?frI<#oL7@BMZ6q5blh=?b_V$Z2h)!HJk9_tEta_f59UpoU|;8 z{fB?fdh|{k_Wrd;_TeZT;FWlWa}s@rpNzw0+)s$aueo{UY3Tf@+adbdehoSyZEa@e zTrs_fD&N^ioyfnn*F<4w+X$Vu46!^kZw(q-$Hpbqliz+^HJ@Xg8GhH)r3k1CH#YSZ zH|&HenKi$0LN&d{*a~KJspKq-%-Cxh5g8x9JlPof?@5}fT~MUG{jN)a^-M=k9Wnv zt(7dee`|emq3NI|yXVIH2_O0E17(pYFr_}J8o`!X5A0hN&6|%B-hsWRcM;T(Z>|HJ zHhd8k9xYU$%{BjRSOySm^SGiYTY?Z&EB_CKKau)^WztkdD61OBaHh9N(j%A{Qwp#? ziL!`L%*q@wID2P*k`izgNl2--K@;S=AvF0#9cb)Fz$*UXl~qkcP2uvA_ck6pS4-@- z2zIBILC8x!i^Ti|ik6JP#%cl8lc?JoE;m(+8{!A0iqghaImy>}V(h`35`?Y}5!ihHn73J*h7P?os7BSB9VhJ_;J z!vp5Wa_OmB&xNtxq25A3mC~IYlA}XP#2tYp(z?E zJSfGTFFAaF8f#r%!E?^C)JSJH{oXYZ@WA)aeb#YLx~11#iUaz>CnawJ6~A_OXEmsP z({^cs5prOrPNaqlo7DpkRU9w*!|0F;F#T+9@P177hp9hN1p_44BiM{QJKPC2A+>Cz zRfRxJRCdcd$X;&lF3DvlX!T^?um!hv0E*knn0Ky_&&Tdy-BgMkMmsKup!@tB8akbo zY@nXUEsbogB)TUolb=X_r^^V8dWv4EjuEm45LE;U*SeAkt@tUL!J*Z0)g?|4X!tWI zvr)LQkT${D`98e4EsMn)^b$4jqm68tYoef4(-fgrCqUg}Y~0og@}n3Cdh-S=v+NEQ zN#;-j^L}W~%X?VCiFz5@a0LTn%kL!#b4In7L3g2Pto_zJO$@!D#i+P_)jZY`gK~cO zw<4%JvlbxSBH42jmnaxA@^vRy=dnpj)pDMmMU3P1DabWTOEzadXAM0Al&xefX4-lg z;)WWUXnQ&kN))(fEF^-5E%e~ z;~+*x+be+V!DO0DTIbKtDWE%SECp}QmJg8Zz}?bNE334#F?EZ=K{J>|zx9oAWr|`> zg3&o2?_gNIqR_a}YcR_*>U}(oUJ)HOJTA@6o3aQtZfs?V7qW8s>Mu12aCK)NC~QCo z!f!z!4WM?Th_aIGmc<|KdSYz?7)jf2_JC?PT)A{h?IsXoRyU?z56<5+yXU$eo~&^p z;Ysz%SLbEAfeq#19w!?jhWw_2UAFE?li=7`6VW2&tWT-`bn7%( z11`Pywvt1*`n1t6$D}(2_Z*y39o!8h9XN6wHXS2IvwXfkYf3)revcYwT6wsH_|-JM zGUtyh#o^M9S02}u%A&ZcXK5~+gz&vkh_^tR3y~Rf@8}-{Yki%KB|_5| zb1>v$kl0YdDI;kqn{B_;A~a9p9(koQ0J=;Pvi?!cAr_BsgL0-e9GzK12$3lF*>bo; zhp!eU*8^4j`?pjIg(1M3vB=CkO#<{B+2EUsLnycY(!{8_KCCELLg{}F^F`f*YmETa z@D|We+zZV{61L(+mxAc%goo(q$QQ<&ZXwilOE9jbr;&;h54w=72fejJFVe|Aglvov z!bYTJRaM=EK)T9x#Y8L;9=j*52Z$?dngeii_@74?uJ5JxFDcN(=7{cD)TDjShO?owHNcOsp#A0(M=)r>?9G<|1 zss;EFk4Ob^yk04V!#9BJ9^C$TkoF7N%X~pQ;W>im9J#$Na3AK=hkpP;ijm1=zK*fw!VCM3%4uf{ zkp(XfKxQQdVkh-)lD>yOjeM-I{^9Hgv@YUI^Hoq_TxETR0L1wPmP6mLfo?W1ni%aE z3{4$u<8ZGYPf=0 zZvUeEF#ZSY`c&oD5-hZG3STHo+KfkD0FEa)k`90;??&I1<6zba^r$0TGwS^#y))=) z6wTQ>XY^a+JP=F}+}q_A=B>R@(4O*Wveu5^j`^x0k5DpSGPLUVC;+0_JwpD2rD4e* z4h4SNBI)poIXXn8fuBA-WcGvv+Jjm(;oo@xaOd&SCH)DceLYR^&#f&qykm3nQt0qU ze1vESuD*JSFp^3H!X1y+-U*B?=c6_BRYl<4`8NU|plph?4q0@F=629&isE|sA9TL? zaLl7VfG(=g2|r0DK6`0)U;sz6E|7L%b>Qu`9WOubaU|-0Vbx`fB&VLW-uF*ZJHzFqj?hk^_lw?1Yq+ry8VjH?f@43ne{Dq_Lvv3!KRMcXmA5M6lMVoS}+e z?|c1~#9ws>Rs}?}T26H8{_!EI_%}oZ-JTI|#S{i`WA5j0iNWug)PgpsgybLM<7ZBV z!eJWVli48j4b7SI0`yD$==%C~xZORgnFnQ&lr6DL|L$yFXgs!8(!+}4jp)20_e^%(>I`fHW!z$pb;KV@SLy)`#KnNlH`t&Gb)t@j7GT>TZ zB@9K9P5h^5!7X|i2ijZMlHbI-i?7$7K6Z8E;Bq@UcK-k9kNcb;dk78WfCr?V z<_9Gr0T5qbI6qkli&J20*I3)FZ#sx@p-B^ssP=-^?oOExKOR=J3Mal9>RUiMD=SSI1D9LqSZTJaF zis6&TS5(}M!^ahA5pnze50toRZb#F{9@~m@{~h8)=$t5(@-gvvMG~vb{rc$c2&7cb*q+DV zlD7gH-0TZa$}j}Nj;l13ZnWRS7!Mvihy%Erx(+F^ z0czJc4ziZox}a2lA_qwKMyoDI)B??mGUus--^gasK?UMqf(j)LA0ZSU+2Nqv_Je!$ zTS^2`r8%@(5`&ls=^_ob4t*oQsPyo37CrU`aEcln?!T{FSkC+xk|2MDpo3k$kJNGP zJ_x&_lGvDZe;C3&>%&cl^khLm22Qtu?EZMd58Rle zV}9>{kE+JE{}Vmz-4g%5p0PNepqy*w!xe#2#(TjRzrP58HbLTqcks~w99Dl1Qls-P zF`hQteBBto6j#PTkRQp3z zR0H`go}v5cGBGm9VGz1MLfM)<8TQ3b4y3rZ?^^zeOH(sa9!2Q?wCZIgh;DFeeeuy< z^d>eF?5I+^)jCL5#fLX^SD^~AXeg9>@?dISN*#r=(V_3Kz7$})y1LdtA0Y`}lTub$ z=qhcz~x6-a z_L?_w$;9xRB9S{{s0CCc3G$vbQAkoDxLbhs3ioRxISaHKLZzWeCC%p-(}9*#TM3+-=oq_a+SK!fc9>zuMlXA zE;uqV=p5EEE_6l*$FlvucjOF?fHpTD+yRdO9uK?y+krXw{;QK>aAl3Ik4O8kvTgr% zSQw#Ybiz`=hLQmmg}@LUoi|JOBGizs>Jo2PIzeyo0!>0nIL1SOzwA-x5vnuUs>7u5 z1tT#tPYp;Z{5Id@AVa2ZOKiH$RG*b}W#dokZdm5dYI!E;GZSKH6!fM2Sip_b2IS$R zz$42YNT4A(d*%F$OopDFQaKXvd4KtNa%HBE2C~r*Ahq3+PlCI_*i}^X?bv9`7AnIt z>eJ5z2?Lw8-|nhvo#XekzMq;GJ!gQ~5~98%Rkpihw<(_-dNzgs%-OSVJABM=&YopW zES~&4l#O5Y4!7N z4ulPC^epx`d64Ykj`DqzCSCsr?l@q5Z^d9)-!ZQsnbe4#!|DG6cKlQQf5MJ5mbxcw z-FeBetwrZ1o}E*rjZKw7GHRflv(lR(G7EBG38$8TyGWM&!UXP|x}*N)V$A9vQ6Hel z)Q;9GKrf`|iMmh-wZo>&$Lwi$SDkjp&9uE;bQ?mmWD1Olb8Lm2);bBu0d*!Ikg=6r zfpbac+Z(I*zgmKXft$rLKi!>ET@wJ77T1zLtm+e8O@%gFcIj>3b1w*0#;)$pSCb|T zfU^%_cZ>_2YO%!voR9iOFsFhE>9AO2%69v0P#X@QFxV5baO-@ec@lZgQVCKya-htX z`*G7TL&e2Je)(=NEEi!Y7f!2Brd;;AKid8?J%2ct`0e*+#5vPzrDc}^X~t9Kh}8ks z2OdG5YKD5bvHaph9TCGXCs3<3tY&ypSy8*BntC^gVK}Bm8Y2h;z=kFC#!fG z2*|xhE3!eW9H!e*e};QMTR;Th!jMGoyrE!iM2NleJyCE+TrpDk}&`rfwqS+m2>Kh((NgnA;FPp9;;0RjC#EhA; z&uNMp(2tWeE6zi{J*#YUM!3Z~*CB{r9_oc}FKtu7!OI*H<*=fNkOanZJZTAJmEbm} z@Vd&S@vRZKj_-%8hdgNBVYI}^0JXSVa)Do`<|W#8qkKGYWNJe1Xbm}N`A57$%FKek zlc(dLGWlI;H1>7{)BCmOEKEFfLTOe8p7MV8aqYoiROW7T2OK1-1T)w86zqJ;d^G(F8`i`+)|CT_@ zG>6i!d?Ve<65cN3uW-2o;plH`&yvTS9JlHxq@C)_WFP2+Hh~uLUY>4X4fe~fB}fzy znA`NhEV@6GP0m_|eV+K}PU6qr|EVuAM&$J)6)FywL=dSU7-(DE>Fmt1@Tu%|fDtYm{O!8~N}4Z8CQu)+@17=U6l1nu>tU=0ilws6)_iqC9-EPx z4|`Zf>Pgvi4qNj=W36e5IVxi)SS;ZK2?m|)L#i!)?@z_jD_L}SUJ}Y0x?yc$7fLPv zQzk`Lgpl=_Y}!WgMm%Wnysk(~Ya>l8MMD@P8%->)g&JF$%US5ugD#D!C!Bk0jv~jF zD#M?sGIl|PDlnrT>@y|a7a3VxQv{XfBvQ<0RN#h%bK-ALL3H;{a2JFG*oYlYat3{v zW=657At$Z0Q~?PcscKl@RVWi&ZJ)&7&rf{8IutUm#g*%jv?a5jZ886V4@g+Jp8V+B z)CK5WjL-uby+!Kv>;v}rsn=i` z(8x->ze}sQX36<5h)%8{I1Oei96xEM@N00dg49s)YQJ6M_;tR1rc^`2`98_)GfX=NGCs$K-eE`YeK^WIR1@ z_MMA&kt&ei24~%;sln9Ek`uD|aZAHKmKPvTZGS^}Fe-bT2Ok?dB;Fg5qUgnTUV}9d zrI=IZ8|}DJJ9-vcLi)m>=wy^`&fHKe_@RiA)Mc~Wp&;Qu=2`~|4PD6;(Dz_UsaWDY zQ6YGp8~yNqCUrI60Qq|U){VC!pGhd^6YReDk@x5td5y7o%#LypN3UB z>okfUyOqBhmld(Ao~d>ki4{B0?#+K{yle_(JlGfL7WfNu4(Kdrdc0qb%Zm#J=vNFV zY=1dSmK-GvOTfAy;Hw@;E2s%yd?LV*`ov}WeZNXjDT(BPcbrZlul6JwhtR3+0!+Af zk*?;7^?(C`b~BmsIbtqGhxwtZ6*{mAVX1w~ik1e?kVXW+mROyu)Mh;)epGIK^uR-su~N1`bb3Fm*OG80C8pX1R%L01nWoR(*;7I zZH2k8tEy)M=&T`3M_@_j)JH@Lv)|agktWuKrcwB)Vi)}%@4KIhZ=mq(?gf%up80dd zPHZmeO-pQFz$1&);0(hQl_Gx;v+2hcc>!Zst*hjrr(I}5qu8_#0`xZs7BSX@2It#X zS1jj1@mPpsEhKwPB}P8$++O^kxcz(1_SiTEV~)42w-h^uv^a zA=FPd!?893q`29tjb{5kcT&2%upC)=h5IwuxX*A{7`w8q$XqvBAu~fnwhsv4KB)YW zw81c-@o>Z&fb@n51U3ajpElHixKOfNX2hvr_O_0Oi&&zdc5;5U*sFogTY1>Or;Ml1 zeQ-W8Q6TLgCt2M~WycsE08ZT-EvbhFC_k*h0jFJ6?)8yJAq3aI$nM(; zG@g$e^dNlY`PI0u|8}ZZuj2K<_gTr>#iql>hCTUQ90i{p;EFeLWjR10=IHm&Rt-2? zNy@{EuzqHO4-rYRkdMO0U zOlajHkuXkZbrIbo`AI0PNcT9>j0lJ34fJF17`i!>9%y)clL0f*M{DSz4`bP@6(1) zwItOsczRHHd%77I3@HmZz2-ycQbk;84kjz%1RP3BOAK7E>7OE{@1?2E&Ye7C)m8>^ zCDgtYkWL%PjPT%Wm8r#3Kv?}nBnj3S&YBHNR1u+W2e#Vcd6JqB!a5e{$FU@B_Y{h~fHl%JT4uZqdI}w3V@1t?4`f8GOT$QV>XPXpL)=&l>$md))`M zkOYn9UkRcUbJ?=|P!JEmpE`Ym!8UFK*j0LXLNv1BY({jq%DNh4m2;kYDQZ}5t(k5b z(K&$znhbsmz315B;=T|RxPlL?tboTd?FVFg3}{z`1iiIL&i_PQ|J|3%NN~}Y5~Ccs zbZQsUGJ*5L+s>GcPZE+Q8 z@vdIIluB%c;luV5%)2I=D}QEqzK2*pT#nGzB|wyz;9)TXJm{!hjrm}Y;T-mQ;`ZDej4&zucfHlE0{oU+*Lp5RZH zT=*6pn;2y)8qVfWxs(_)>%-&!LNkI!lXuSAh1}>M4&B<1LpMV-ry}!AM6#VUdde(5 zyDgRzDJy$7$jA4rcI8tlwvPPVF39M~r&Cl8Htc-=`IC{I+22l^&jERUb-$=bKgHKw z^>R29lvi3u;tQI{9)Y>Frd)xz9l;9eIXx1*#*UbE5h9;#d5-yR-RRmF0jDaC64;&y zp!!bS^yaUAfPY73%P&W?#V-ZYGK5bFDHPnjWQFOIAI~%lmK%P6EZ@xoM2iF|e@aA! zK-Puuz$4^t(}i1P%;yfa{E*X3dLqpRI!-p|Rt4CZPIq?v!shHE9;!~IdU0#9Nd&Gt zuTbepErROwrx_%^#u5e{e^@DcH7^ke04D(1`n6CcRpnL(ARL&$5;6v=v=5ZibP?BsxjaVf$-=5I{SsLK2jd!~vZCF3D|z_l10*pKW^Qot3s!xeO)^cMab zT5AgepPfOwCazWCe8cVrzhOGfo4>CPJZ4Gs$X5Vduh#c^DG}!jm6(_qJj+ZP!pYN= zLGCIX3x1p z9t~jId~)^u+xPh^@KD}-{pGtam;Q9nzqxT+b{`bxojXJxqXxs~ujr@1KjTinxcB;H ztz{5|w={U+e>Z?K`})W!2JK&c$n$4f!eyZ785Waz_4rsF1wH7nPJr=e>wBTSE3dHd zo2BWVYW_u7JGB5g*;6uoIfSbb+?jXq=rJn7TCN<>S`V2P&SXa=mHYR$@BBvt1>44% z?-12T*A>*FJVY}OHk8Xzg$`qKsru9Z@OLo4T>F3!@Sf1i@8EY1-vvu%|I!0>W?UQT z*JH(Q(uNp% zhw}>gaVpZwQ%BhDsRX?6moKfb!I@q9%h#_GiD08m0UYHy;}c8A{|XxE(bDE-W4Le* z1CRP)x{}-^csC{AwV1f=@$Q}Y8uhc|6G-;*@MWY3l6mWnulolUh$^$@E3hLX-Mw5^2%V1)Q3nt>&##Pkz)Yh%c6jffF|v|+2WW) z7%;X$Q+1QJQTot%W-s+eJE{$%o0(}nbmkj8a8G%E(gFY!LiQOhkXR@W;spL@w^W=x ze9__W7r&&R7q&r1Dh5bG54=tRg+&BoLdt`Xpao=URf~W>Xx*v%xW@-;&h+RrhTAUw zzF!f>3jmVDxhROe>H&q5@YgY$n+rZR#~7SP+jqsrcYgD_Gq|yd0DLbo0x%+LjQfB2 zJ4YqAO4KQ)7d%uCLD(>fFrT?mC^+q3tW64I9cYU7WA&&#g#wa4LDNk=OmsEMqvc^b z(X4@x@vHhLPaiLHmK_Pu>`k7MlVefxet<9)d<4}oa83Rr_%uFb-;hxAW33Sbqh^4M z3H{h1BYeb;3HZ{6)5uq`hyiWyDIq-;|4JeF&KF2zwq^KA$EkcTk%G!TSC1z=8;by) z4IRoA>_YJdz)i}&shEwya(u+Go*j-jetQ7ft5qp&5Q83s_L;0+m`4STMFEJMSNBZ$?<_RF6OA+@r(C98PSztie|y_yM@0z{ z-4rDOy?dyDi;8)`bKk!?{=X_#JiM%66aBwMojI6_;ThaOG07AcbVm19eb(1;dsgw< zK&sMgJ~CD3;oK>F0oG1Ic(m zAs!3|gk41~&K$q$FHt@ih}?#LXP zas$;&15FWMc3ly3h|c&Jg{gO}!@x;@dXr1t#XCIf`akYP6PtK^UZ{OLO?rFYfx{t; zsLPV6N|V7+m%A3L!64yKW z6C87gEVqtJyz=k&2x%=3x4ZEXw?(d`oA!HGt^}nMk9Vcb_y4KC^2Zo5h5ZC7CmKshlf-rhF6XA1qcSYntYZ29++D zpqIxUTO6$91MytCh~Ay$6t`uQ8ysf3!SRa)_1Wt^5@cS=vVL}{7yU{(z3Y2%<-ZXU zxzMnM3pUb=y?!R3v-<;op`5T@;qSFVz|5d)nL{4CuBNfx!uEMTxVHRs2`I*vHlG+IN%)fn~rND|}1P-Hl!B9rkd*pi;($Z1m2E7qB8&eQHixFQjvzv01tprN{M)Zs(yY^Md+@j6?F*( z{R4v#e}mcp+K?@F#w$?`l>uD3)U;~U(HCihgc#LJ=-gK#gG)Jm>O1N?@$Kzk1JDbI zjr(oAHWThg?;hRit~Xn1R$MokrRA{uBjd7a@YBv6*nd#gho9h(5@u`LiAvHkoBrcvy-8;-g(ea(cCP68jHf>5Qw>b17!rb@gCqLC z#1N3(dJo#nmYT`{+irblb9S^~z%c~)ER3*ktvq>kfE4^ld$dlDks=jR@RA+dYv!%8 zDmwMS=?Pu{KHZa(u7uJo8Dgv15V7ix$i2X#hZA8mfcV-(5;Mn>I)H@RzEFgWI43FX zSzAJ0Qk)>h|!eLu{pZV)v zdC&2F*``I_d(;c=AH000pN8nFr9ZvQ;7wqnQcnBU@z>1@^{d}(%1?)!Yzhpa%M<&a zf?qWA(ooInVR&Auenu5aKuoIi8ObwF4TJuIYdXVq4yG%y=#w28`2nq$wo4R$-s~qx zWpt@7UG@9CmqU;h?yc}KFPd5=k>FPbf3$MXKlgb_gW*Gx8O7uD212iG>#Ee!@%{I9R1tv3)8L}eQuZq*LX4Ft|hl+?kEf7W9-1582cTYf;@XnzE zT=8xJS5()Vs`JW{>}>|%6sZ&<27ZCyoFtO2lu!B-9HTE9uu4LTU%Aek^q zOZSXIMHKpp9@oHz&Z-hfosI(OUO0iMJkm%hDT#Q7YmTya8oSbbXu`%Eud{KAU1v34 z%k0lLOxnkkiGeq-ky`=EouN`pokP8=CExMwX7SKiRr4uI)s0-U#izM{yB)=Wu%z{i z-bUe#c4JgaZw!+_yl3iyO6un5j|I#|DleVc6|J!x5}ypHIhCRdn1#=35(hZC3vY7g z5BFQff} zdMas>PanxaxGG9Lb&;V|s6cko?+@MMG?@%D4Vyplbbi;|dF6CQS~rtu+Y8plVEP~)QZKcO^dtoQ44gcA;k{YwZ?^6lq+htL zlsoYKmRztM-GEx(a`|Mv&Ta<2$*UCHFO8tQItlEskv4na7!{3KtI1c@uQ*5^yO zi}Pf7(!U5}N(?dNU=I6Jja%)wTe_S!d1^lj9yHiHq!%U0A!;sTU{eeKQHRs(0`CA?rr`U()&#!-vnH-lZBPreLf;;{Yu+x2$^|nkDm*_^K7gA7 z;%E8dBOL(iBlmrlOjMjoX6lxrIZC_2Wfty%?TAzdZbqZB(Ypaj%dCWQ4{XK~Z zP)b8e9|OvTCG|Vfy_0iHJGjGEy>hl}Gb}BO7W>f?w)Ma628vydROpCn@|C=I){&n{ zTUhtkb1LiXv6>siCsCSaQ)ycUi8psF#nMazOEY~@o6lGmx7kTES?Gg~ETjtevV}V) z=b<<=+%Nm353mqT?8h$SKq>-Ab8LalAfg2bO*&9=_AvUD95ps!1J(70V0r>Jq#|$h ztHd~8OJ5)Sj6ejYl(vzsT;LBPJ{bszX@|d;>Y4~G_9EVcY5N6JdPB${Za@hWG3sqh zi4SBf_D?yG6|+U zVyY=JL;1x4MyD0)u?y0+4r-jmCEdR^;)*OSf+SP~3fREZuW_Wg#Yn3=yIb;Bs|+-G z3b>)DkO^u6|80;hFV@j#)^()j6I=yEyD-;ivlw(9@^HVKWbT4I8)4E>fL_%9_t$}Z zCms+&7Xj5w;v5;VdmUQpUB{m&E_|9_^4G!TO7v%jY6#1d`?5WtKAoOuTitoVu|QPB zB-ZuPZR{7%Vt(xcru2%fR9>29zLaXY7m&r69V>3LdmV|o>03vJl@ug#_QmS}7i zyfoxs5~+6f32mw$GYN@bRE_>7pDszOKbOm(Agkh%xWu(S`kIYZJko?mk-#AJvAc6V z0eAgQFQeG*^FFEbT()ip8iF}!bcTTH!bprJ^z@UUEV{Xq^ml;ctbcvP6?|^;%lfa$8_eDCOICm+Aaz5h4u&8Cu^pqaHRwmYRGjv3d|nXy^M;?Ui5=st(m?@P`xwU^q%w>&&>*t9YwQb+pQ{DJ{9u zaV6K$-Li6gcsitpL03{W5Lb}#T|gh7&j3T-)qb6fDYjemw;ui;DjFSS%-`Z%EFYkp z3YoR+b`zxx5>Xn$LxpDw;Y%8viwxy>F_WpR^oPeXb3FvNZ8y1a5f8KDOvRxCjqx7; zyMf*nloI61m4Y6GvU=R{f*XReJArCI0 zNE{Vo@hf%q~_fDk6wH?=@{FUgw?73=TyV9|bxWel=%Gh`R0Jv06Kn2udOD0i0?ptU`M0H0_#V z8KHn{>ctkdI)ne5auY)W7gngjdMoGpe}-Yo{nbf?`sZYq|BX%2mf;TYIVGR^DbQ7r zur6viU!{Q^^{Dz*C`E&6P_Ipn=;yNK#&`i96ShPh#ZiyT^tBFf_+WcgFYmJc_*Uhm zoN5+8tW+(Qj~9YV8Q* zs7lZ(vhjP9peUGWZu%i%Hq=eHsDy08J*qp3 zqc~EuKr7Fv=ZB6}xS>s5VC~8l3i<=&za^8xj)HD@BE#RM!YLcUP4POSRM(qOE6Sj8 z&jYbh+Eqk3U@_azXWYMp>w!2mT7^f9{Y~y#$dG9qTIf2%X1coFz?x05@F_CY*uB+A zT8YKo$Jp6ZktHjOTK}hO9gR<9h)?y_sBC<_Z#AX)PaHG7UHx^b)5z<5R!Xs-I9c+fHp8Pg9)5Uf@mJaIntbCU zJxH3R4m3|}1zI~oyIQUxjvvd}FB_J#N2lEz%Py)d^5*08Uj5UUfLZ+_CU$hH+Z?s6 z8@>X=MoI%h0GpL=-OjuEuXx6re>>t0}(~i3-~7LoNVAWvo~F zieP`;m_R5jd#ZB9A!^b-SqwU{O-|szYi$EH1sH1 z4!q69&=4^iX(d<_Y4yw7uXERDrad`lyXiIi@P}Lb`v8!6Boj8=jnOLAc=1tV_X{E34~$*{)M~G}4-WB0u)YO2SqY|1JR@O%PPYM<7?f(Dn4=^A z_c4v(*{dwVV3SKMFb(5s#0s4})a=$Yi&9>I2_269;iN{^EM#n73!%%GJ9@lI%!7?z6*P)^UG^>D}xO1gHqvds>dg zDsap<<^Uf?f4$G>(?Rluht#a!(a_Y9rPeZUIsHojLUk=S+tE4#V2!_w6A2Im;`CEW zAL9@(JBa~az_)g&Z2D;L*ekcHLdpc;n3$fPU9v(`aHv8(m^mQGy+4f<$>P^s;Yu!SKVsdg(&$Eo&cF{H>4yO8`gy0}%1>?p@J9@^8(uC)D9W$HEIYP{Dt$rze z?tI1`7|A^IQRAp#haWa0_A^#`=uMNco$pHUEcOGOuxzm!B{U_v=*}@#_Tk}lC^4wfQ^$zRl zz=~n=p+~n1o;g{lf09jCeXwo#w&GP@$@YEb;m1z9E73$q`m@66^0JORZvck50LG zKdoW?M=G4d-0>kfc=}5Cfek|akI2v3;OdqVMuACU)C>nLhS`0mR4 z4fUICK8@=wag-v>GBRg3Hs+8eiBeIUG5b@)y1qT`z!n{G>1-ax@0_QN{>xLll5ekf z(O~U?#!~lS$@e2z6vVJte`iMPM!_ip;c{dk3c-6b3}UGW_%-& zGpg@=rf;V#GBX{=)_M`roA!wEb?1%-MpXIZ?_)9~^h!!^PpllfN5vXTM(h z+x>`y$MI%n*)NX1G5?^GF3%wx`r7XAxH-+PSomC8UMZ@JZcaRMBNBX9gppn;Vj(*z zSAbHXaFyMdQpkIY1_0L|EGjB}y;Mok*XA>2RnM8IQjGgNYuC|yUzWm}>k@0oUzu}psd#lhz3Q!#9~2zAUT9M52N7eEWR~$jkrsAx?YDwkiTkVE7klqmM2-q6 z>aLW#0(j3E(JxxRpR&~s?nd@}fZ~kYkAVFhZ;p3#s5BJWnf|2ob;gjPpIh755QS`q z3L1O^2j_$Q(C8=?0_=eso~OHzBsMm-A0k(&4M_A?q1`x*g@yDH^2ju~kAQ>kd7RV` z8Bt41ORdb8Lg6jtj}Kmc@a&i$uI>oMB|$y(h;^{H9|21vL{k<}*4x{Q;o+oFS*d`u zdbm{mK#kbSiXHoGDFaA4McYqqL$^NemT{z%Jvcb1J??W77Hc2~M^p0=CRuN}llp6$ z4ltuY=yU!3>+Ne$boX=G-By6+aOo>=N4^hA7hCA(?KC$ln}LY2Y7rV6)&2mP9m<9E z6h`2lTj~5TjjYV*r%#`7>MLK_LCt|vB!jd2b$3@qA4SMTI<;S2zrHdTv_ET++}{4{ z$AxD$X&4h_tb(G*%DUshEwmFwzBAfB&i<-NY$?`#Xvm+>GbEF|OhD|7yMl2Msi~B) zdO5j5Q?zekwU5L`jlu_C>(RzrKBU#6H9GZj^{7Sbw*@8|!&idGK3e_>qlvzFL+Qc7 z<* zK=a+D%a@(_4K5F`G49~>nWmqyblYg^s(F4x1MeBmcHytkKT=xJYtj*!JBw>Omeu0l zTbCoBmua+o@6a0#UHWJc>-M!PRQC%J4k_Wroyds%{F0aqog?3-S_T}BU zAe>&&maC5sWCtHSpzKat(#oX-z9Zsz;DH)LY~2*gcV_vc`QGXG({RkIO=Dc4D3+aI0A1+20E_>umQCM`q1c2 z{+yPGNYUeP9JG6{JL;;SV+yuC|xKu2ae3&H6 z=OdtPVj9L-dvA`o_=!*7W$oOa8W*kHpAoNiK0EE z&^P=0JHm)JLeNA5TETfg`wMPsh-_4)+);vzq$5e1&x5;=@w`pG;W|yrI*_~{4&jw} z402e4soZGR$gH}ki%Uu^oVD%CyiT=2B36MF|KQR$h%h(k|LwZfy42DzJxw9^C;zth z@3E*yo0 z^<`faHzw7{f@1f|W)rpQ-3NoFwSIh8xd*ByL@t`r$lBm@z47!d;l`}WG^8@MvJDI#_?TmUa3{W@;f1r-rZHCql^O;`T6*Pw`p@O#oVz!ElPEB~qG6gTZZCvnbWiG0evXx%`Q zZ#_>=pcW+KdxAG?W_4 z*F0hty$^`<(`zNzQR=2`Jy6D_ym3R=f!ny(8efXg)#JW6-`eHB6D?XyW+TF>>_o0N zKDpnRF*n4IsU&4MuT?hEKrMIVY~Vw3N`M43NNB z=B2hXuDowz{Pwp1uiypb-V*AwLry^LcIt1YB4nI+&1X=LcN3$}Nv~@d-WjnDL#-=U zM%RRZ99FokxqD3#am0e|Cvr}&F5|l5Hl7b(uDX0u>YTv?QP5=|l)n^-r+C)42i6xa z*VF|ikW0!K3cb6+CGVrllQ ze0otTy&`})Br$hg-KjFVAVVdPp?*BvHO;_RR36Kprl%xsr+7YO7E|-0*WShb5`)QQ zFCzF;77GJGL%~MoErQ-1^iplG`?FOhSz3)eANkm7|5R)^MLU*9C~9X41xSU57T z&z%TCWchI-*f#cRwvz%jqd^L?q@?z9A5Z5n7l5q~Hl(j$6p|+x{z?+|EO5Nywo?_dk z9pCAh!m{}L>fk;9Qt$6BePnlK*{u#@!}Ui?{o%58*{)*((j8)~40>Y`*vwa5mYZl% zHYrU{QPp?5EM8jKcIwL)Ql~9ip56C@a_CJY)@!^N&>Yz5Qnedz?vqM;%bW1BAg&95 zIHs!sUqj)m+gZ8k@-4IXb&*69UP)7Z+IjO4{hVxirwkoe3;*j^+jq?0*X0B}H=l5_ z@MAMsdPMM9lCGfSDP@t(Ql+XT;GKs)-Pf={r2*%CUZ2K(XSe) z80eVWvAlctF3`9S@5g;d;y`_&viCE6=?cCZD?K7~DxT;*Mup2m=gnq``gA^@_q+fB zV7uKIft-II$!FV@!oMncT~Uv^f)6HyNbn#5P*SuG7P0F3{>2-4RAfec7co0h4Ou1L zI~Tm^x1&j3#Dx~E>Q0elb7UbncZ^^4`&k5p5x?cZ=#aE4P{e{=5xQbR< zp~Y~@JI@?!1!BLrKH%evSIF$AbxD(J7R~Shyg?*LTFR?}*=hzikj&*3D0&@~^X9 zu$J-d`F_bc(SF%hrnHv%*@IN4Ey0*CXXWajSSnfh$^<>D*?wb}{mj^f_gT;1ZqI}9 zZjIjG=owmXF7f5II&J=bL+R^)9Va+A+5GX9#mrX90-g1+SB6KOWzT~=t64P=g)+-2 zZRd5W61Np29b9p@C;*L07Q+;rYn)?@Vx z-nPSx0&K2kqQyFK1B_R49?bbaTpR4Xv`j%fvSrX&jd%+r`z$kRw z$3Ii##Hbu4J*;);|1p>*3VKCDRr~hU)jYqK;b&zv#|9Fdj7>c|u5wcmJY$uuZorHZ zwG0>T*kI@|5h<4-)lzU7Z#NrWKZt65@%E$IO*aJT2s9)^xdYUrgCRpPhnnXnULSmg z+g_1W_L@#*c;gW`%0XWq0xth4y-f;NMls0Xw+22oDVW-=zG8jI@83_eqEg!CKd2`+{!H z7jYd#14%_Zl8?{M?uCc6_{=Jo(ebxtMDR#$Yp8-$EwC?O^VZPz`~g$Es6_HMO;Qa!=;x=Q|jHj#-0J(%+_1h~XrxTuSHFolBS=k}`O+8qYOf z?{EfsT1{{thL&s|p7SG9q6?9P-;DsiN_{JrU}ua$M~|shCim@~Hjk6rS-Vo`=>MVi zSf}X{=7RHl1t~mO9>;Y22YTL)m^7VmPt@!|^~|ujg^#4IYV4>z|Jyq5F<&(G?8pVr;MD zQ3LfeJs1ha0W$=aU65kdZsY}CXpNBFc0#$BcRZ_Tz)+c*t8}JKx`ASQhE3n|LXk%F zS#3QCU9M0|-a3q44y(l5!0!6=};B=#}7@XjT0=IC9Y zm`g$B;BBCezXgBs^$$*2@e^3%Iv*^Umff9gWN^bEXY@}cY>eeS@z>OVaZ`+@`rzKo zrl%OKeVm$e6%x8Id7ClaBWN@{KQ#C9{-Noy@hoS^e;ZR_6xgs810)sf*p5iK#86HG zyT zKlnwt!psW}GA4q;!^78aodnH2!zU!X=i%{)SgS9BbpkTnH97gzALkBBmfT7H%N!d= zK-6Pad0!3R@TwyA%>z5?ha@!Im9I^no(R=0JP-%~Ym@os6F6xnw;l0QTR&x<^azE( zxcNz(ZOc7-*?Es|eU&RlepLCTz-Ft& zO7Jn(ojEt?IY>~^26u@H!J_NG$A&_Q?QK&Da@hBW?iPmMi zL6{}Cl%Zt)AxKG61)ABsc6MLyta!BW2cA$SuM}tWXQ$JNbV;|uE1C3r5a-PR6_PNMwFZSPl)AM+xZO$6t_afK1Uk;(%-Ev3JfeHqhF ztZ%`SH>jy?t;KLI-5L2E^!l14)iNitHa1KOLr>B_e2&BD)Y-dJwO%?JPV+W83+vX) zuZ4a+G}j4al#!q>ST%c<<-p`Z+}molkqxx(s`FBnq>$&>G|I^ch1}K*Z_Hb%F;zRH z@Wa-(rC)E2B+g+hF-bI%_qn2;F+f5GC*~gcMzDHbMX}8GH@METaNyQQTW|$R06U^+ z-5N-2Cw4or4$}1UU|SmB3}ZIUV@+{UI(kvs?WU^7$ZlllytI=(4*s?Qc+c_$Q1gJuR_6myV`v#zzQK z2Al5zI>1ql8e;7qA;9$Va~ZPO2WMqR_; z#|M{F=`|OBEUUydfii#GD+Ry108`Wi(HhCd-#Yw$zam-xA*^H10y6+W!q0~Iq^l`^ zse)XZmk z=eo7Ebq%P+{59{(Ph&#={3zicw3X6iCWD{v52*g@DkA#FstXsV41P}E*#Fy?gqd`ZqG~ajT_$g=zlL$3(>!`i?SBYPWq@f zh8W1GsB$2qkdAeua%1|ec)cFFyPyiv1cQQuqX7&e=qQSIgo+ymi0Zj|tNj-$z^ra_ z4xih^>D@)G&iff)PK1ylKO~~0WCu7`G$5fPe8obKtXArEl6n7J{5JxBZ`*u70wH4b z0??&A!b9;ln&RLH#+;eJ)CqpPYY2Qj`W+7w8vB@co~)#d7w2bbxSuSOs8(8N12`#c ze_KR!Yqlx1k&pb(BM259-`^`0ZAFfQM&nf=PW2J%IuW!iyqO2sBq9j$eH|8_*`q3h#0bKvdV*xF*py49<7_v&!cy3A(&y@DM*zv7=8 zfo5N-F=#Z#H)d4Odi10t|203B%>8ygXm{~*v%fo3pQvKsV^8W>5IrQlnG znwpvr?0-xmCaU>)e1z;}yu!Q+SOGGww?;MlaKb>KDX>V>KveX0m**%TY`6+B<>E%+ z6}D>t=~8kKh+P-ZY$0rg!N-|{S817f2{ZzHry?REl7Jx`AxJwZPZoC90k6GWyH6k? zRc`&8yJ~&IUJsaO0ADN1TW8`~Okm4Z%~hpmeo~TVaLw_vpwAx2LN|!?aW)C7Ez)U1 zOmz2}9s1BSnxpZD1sHxW3nPlZ7rv|dP9SZxCuj)RU9Z;aNtA}^@zz5|ya?O;swgj@wMp!!bRNifj>c@8jd*yb3 zh##K-aXMg8dvKAVwGK+(b!P&yqOymbKqcNCLN<$)z+jx)P;}Z@T1le6krrjep2cfva8K0Pheo<@p5|Rg{^JDvdOPm6q29-U0~O z2^bZ40DQA@!EXQLzyeHn{h+?#rs6OKS{Cp{h5r(IwrM27wI>sjz zQs!}qKk~K-M~zl`w?h|*>eE2DifJ@SByH+V^fy3zqV|mD3J1RP<#!$Z2Dyy==js@q zw!}sX#6^<{#0(^C8^Cyh#6W$+)^=CA+;P`(abe)g9Z*P{APQ;h00M?|50yWKbkNiMRK6sUK4fqO>3UlupKIF4(*rm-8Xzv2N)q;kN>v3Q@8L76}ir=TVSCYQ*?+RWkew^qXc3 z`0#=nFHi5$KNsCk05MuL9Cwn(02>^UAz)2z0@nWO!PY=>J$uSByN64L~i?O_w^x8xkBl`&-k} zR@1dvkU%gD${iEOb~)R0QqQ@y5D^*Fo3zNkI2O8v+I1#~rnTvE%$glRNj7WpsHVWv?C)by#-zKcW zzhXh~a;ZwFlI5*;n!PxYKsn+_Q;I<;*%sjWAq=#U3LYoML7xP`WLiR}(jxbCdwlO% z21z)>4lt9?9pEJwa)|+oO%-5-L@VKs&E*xi0n`yM0w{wvB$KG7O5$i5UXQJ zRF8w5f>4pfTOCA6YK-Z$csF`;GLytp8FwL2gmBxO zHw4|gYdCi{*FK*8LIcni%#Mimk;0v=DBMjxyWU7g4oU!i_*UFu43}d({O$f=tIAgc zG%n-e036;WI`5mLU-S`P)}W#SR~-9?Zz$Pb4Kgw^lWiv?8;=EwuMmu{yOM!~+Ys3uC^Efr6c^xkx>m89K%=0S11UTCpZ<(Wg@+w{D$f#QYRW=@nB!s12!m8ZLQ zw!w9jv{n;@&iou!Bn^n%r47KnTWMVTt~Qify=#U(S!!}%dI#9KG>k6m3KhV{f=H^o;{4v|) zSxEpbc>>*iMZY!gg`&)Q`%l>@`i&mZoBt|~oB|fRWvHU@-;AQLSWx5h^y-iu-1SV( zmkUZ-%`J7P3B!W|2!cjTOpHagTsR=C(B8(kS?z;@sUgh@uNQ~Qm4y(OeVNn4O-3dst8fAF zIk6&2-`6duxE}hzO~t|%Q%C$2g@PP2qvBtzx?w_8#^-FQIZhb$wCFZu)@{_V*}nn!ODmd+zD)QiMX z?%7M|#exC8jC;M+^h1Q@_sAvi21#Y=?ZHRFjS^B$J`M%GqH4fWoPE~AJmDiRPig?5 zPPz-f2cx0SK;lPmQ$Jsm?c~_-#ywI3K3Xq(okRcyDFBz~Sk{1f7bn0Kk9f)~bkks7 zS)@-*LUm478BP)W8^P!H|Ftpo8%7y3X!j?u1!hEv9@6f7dpg}dDcEE&RjmR9pCX1d z&wWj(Nt6L;Art5gS-7@9>=fu??%kqxhj(@6vGQAhw+kGsAw`HY9&D)b0xK^SkU2Tm z+Q3;n+!!m(0AX>ABS+xXlfPo~;~U%J6Fg6(8#l5Pld>~GThl!$!voeKB_*(B#P`Kk zrzRIX#L6JSg`^<{qe3pP<3Si1R=xIf!1j*={cot&KL(*P(sJSNoo z$!e;a8o)$&z4+o-*sUP>&pl)ltgy6?2#PhRi`6g0KYLN3D!)_Bl4FLImX@-x=7Zt7 znJ^;ER5rR%aZm6^%_=N9?2f)F61gNjR41!y{*?6zr~b`4gHP6gjP`yXhSd3Y)yqi# zg5D=XDIxoFvYqY$5|N^n3_I17xW)e{U=u<%o|HjywhKL4WVp;3-4s-y)Hwgb~`2E3N6(rnKpJv~s z;T7!u)FvuG9aa6Y4Km|^X^Dcfz`^&gY8V`*mOD!={GZigRQy>Co#9I=l!hQqHdSS4 zuKMrGZ|zTO3ywFS&|d%*CM{`OL`b$9%Qe(mJ^DA$)5Sv0!!HEi|{`x!qg`%cN+|J%A2{Npl~^@nxD z{=-OqAJ2n-+wb`6v&FLC9nCNPF@l2pzv?-Ux_{C zW^8qJ^^(%O?azDQMfdmRfy*b0Ahyb-fwv^miD9cSVq}r zBgtEwEcJr5wvrbX)@g7v-qSOzls+67VGCG-+r?LR(x~9$T5ieDmP|xnF08N9yr`mC zURZnTc=WYe@loz5w$ia)?r9OB_&4 zztnm^bXqHzUgH?fdi8D1RrQ^m->1n=wfA>Fb$@kl>1a6^s5zX!$a#f<6%;X9MMKZ< z@PRvH_t(LgH$nr6b#?jbg=($*shNl8WwDs@!grOODaaWEj&$XQcrz>Q&+GipE>D;1 zq-^WePrMh@n5ukd-Kk8%r)4(rv=`hE{nv1)#d#y$Wm2>+$K!?e9s5>37KYiP_D`Sg zex3MK6&fre;iUURJSF{-=K(i`T!QcEBOQ^V2Omy{#uz>BCj$W9?W)$0!Eo(ViGMZ? zPO6m=YB(5B6q<PL!p>DJ}Qf%icCGE-uo}dI-t_*dXh0e6q?~UQ#l1 z!3N~j(!B%9mZu2wN8p|l9Z4&lXAk;4YCtZD0dL-({9?z-cP3H~_78WXC{xQHt381j zX6p)*iq%}%0Xsu3eYwr}B%3#flDN#Wl8+mIpFRziy zzd`e1TEy#hJ*||(Gv%x9+^eF=Nk1b{3l_=YJMZ=}4(n3)PSx4#8&HzzWe%j&GhY=v zgl#;0cw|OJ-%a!wC{hSH66syv-ylDZ=U^({&&hU~YFG<7|2QG+g~k!l2g`pi*%s6@Q*4X<&ggjE@_Fv-!*)BWq4MvTG-d{j<8W+a}H+dgX`Wx)DiRTa3MRRtpogy7*Z z-h8$>9O&vX2#f|NM^mHj{7}xV5uU91pq{I(%MPodmwyQq7$@1IONjZE%F%5^qp?=8 zWrDk>+(w^)93bdV)94gHQv!)1>RCi4S0|O&~Q%DUkJpBMT z)m&KwSy(cwGdGv!eMsMN8x&$@c{zO7k?z)FGlK_LvV~MUz$2mJo@ykc7ICYff0Qmj zhA4JtpJ0+4#Z6MZa~LD}@i5grOW2TGJ7rPv_9rvs>xSjYG1I z1uDJIzB2q%2vw#~1mG zPNo|2yn=&+>-iR#4`^y$b>LtKJ55sds+JphoaoO=ttay~QO40SV`Ir!d!hZH{wq@mgVyqWmKK60L4 z5_XQ#uoU!RIn#hwqzy(%&M4y6pzS9y$W7t}PCX78CQ--UUAr9AR1N6vHCt#;U&{Y! zqbfIuEhLbBGbs>GCo`U&B_P+Qb7xyrHyQ5IvI;2b5daP**MdNI&JYxJM!E>79Qpu! zZ!a1suetzwwUNjJPQ6-hOGPjh@O|m!c<_PWjjjO&205{lElw{a@)?E}jyb43G+m6TfBkSxHQ7<8;&xnI90xKB z-`QP8E7_%KBSm0Hf}Va4{e{vWG7{W3W5HP`G2E>EmqG$48 z&dLTTjb$u5RFSqV-hRj!Ap^+*8J`z*m#%~EDNqWqf8wX>obDAmCvpD7fPkm(ZTl(eA}ye| zi*DE%HJ2O)9A(66Nq2Fh44*&7_|Y-qiV%4@^d^d>iGO0Tmk`(6QRsfW*{$E%%A>4g zno&CDEXEF#OQt(J@4_=wwQ`^JJBR0zDB0K9arJIR@af7Ig94YVN?Nb3Kn)a9BBunZnD&Mr=&Z|+ndIHPyKCc|u zw>apkN3zPw*Gl^%+aA?=4vR073pha}d{XT;H~a0zt}UJ6w{JR36` zJg7er(nu}oF|m3#rGH%`IB&pq`fc1!9Hy9uoSU%weywiZYw4*eJDE@GpN8%2kNVxc zMu$?qWFD>5&(vflh#ZExd6!B^(9kV)KXZ6i;k&nDuDrRo9%!P-vGcrGT!v}o>ges& zQgc5RgIcA=T&W4}$aV_!R^eu8+?E6#v6FotwUan4VNhaki{a2A^-r0Dpq~IV!Kbs5 z&8HC5zR5wNX2`I2JWcTcHSPg`-O|~%NuDuat1;}n`q3WDj~p}hq=#7B_G6fjGS#r?gb_gj^OYVjO>tPJEP>1)-g$RTYneF*OVM;Y6E=Q(F~U|~_Deqq(=w4O(z*&vqlgv+Ve1*5`<*ylX+S^Pv0&UloO z_FYXAEUfZ(!YkH6)#f>KAF4F(AZ5LDAHsCvw^EKW4%7+N(TZ?kL)uAlqmfV@kHtE? zM?DZ_I(mb+{m@#3qxi@)2U)VAW%0$qf{!f2wNCjx`xNur(J!Cg#v)#b>n-CrxtE6` zbe7k$_wwuh9RfFDThh!zB;3~WiHiZ7>0P_pqXQMaqQa~Ty0h#jaPHq#!78ALTyBJK49yc+lKM3$3}hQ&{XSeyjv$m zALaj|;HXn5-$Uw{F7KllosZb}r~K}9iE7KY{nx!Y3rsJaCfR0b*=ZbZ$Hp=YsH;-H zTS1MqSU$gC2}r2PI&^ku|M-CfdT1%gF}51fv$k?zbF!Pn23F;xxl$)wzvdw)N%8}W zB7IxQXZBCA7c`rW_gI5e0O>cKi3q9-)Hi~D2zYL?61x)6IBXb@n2Dit^W3h7tQ9d} zPLxX_h+tpZ{TM-pVUe(Z2KhN08B(DHe0+Qe5!Kw>^Idp18zPVj;tU6_?GnrTrbFwB zARImdC|dIJwD7!u0E-H6K?uMwCRa7P1pS+O#R(H zY9UKbyiolsNZ{Kzd&Zl3WazF;YNZkDxU0oFc3(1)c{_Tyf6(7d&3mP*mgV)b{|^_S zKe>pd^!~?%-0%_NrHU%tYIM&x@OV;(5_6aNkohb09&b znmW7-kpm?ZMmkWm-r>fCXUSTQd730@8%H~K}4GmIt|mxo3n-a3)1BmC>&9$*HL1# zpV$rf%g(aXOrt)~fU)eD>AcE1jRZ@51+G^w3cXxXJaOpXk~Gg9sxG+i+4%O9VsxXm zE6MIm)0gP5hY?y6VB>@QqiJB4F}qN`z9*$qVt0r675erkhZ;vNg;)zTeJIF5+G0zm zo`<)MexSKAAt*Q3Qt>A3jk#973Yi!?ZJaV&r*z(#n)KgBK;ol^^^YrFqyAV5apYGgv!%0Z}ndv=x z7q-Mo31=hIxa8*OL80ass?qhRC^50PxR^jXf{2VJfZk_kXGnQ(xC#cS>F>qM zpXcI3fdjF|77SDc447-)*8mrSe0e!zVA;o6A@ROSp8)8*8&B8oMdxYlP^<&r*!mrD z!2_g&-OkjU_5s;<3@#UY10wKgC$-I5-MBI8-aOIkK4?LO&Vls}4T$)l^@(Px4dCKI zJ1t(Zv*7)hX>58@W&IJdW||G<0hWjQu|zQY-tls+)P<_lOK6wh7o=UO{FxgsvY=~7 z-NDG|w2AY^IL>+{7Wbd{N3-VePVI^rHiQZ7QWr4{Rczpbiw=T(b5bg3aAPYxfM(ENjEy57hA z2#WEfvU+u$1+x%CuOa0qkO=zUXhFHec}3 z8uyPTv1xjkpUK_K)v5D!$sMaZNIw5~3VqKh0KFWs)YQ}LpN)Sd8%6*HnsVUtCy;qs zJXw%@-}I^WMM2X*;fv>G&>z+pU`-^!!}w^<<$#UkBv*l#`DpS8iZTgfI-XdlHx& zI<-mOL{kYHT-xqvVi2}^m4w$BqF)wzD?60HWWq%EoUC>cV~C4F-K68l@*(o+;OWpx z#@WzVHZ^n33!(4#Ua;qxPjf|=zIJCU2fU}72;P$`egfwUZ+KWxU|iC zyDk){0HO%h#KYPADMUY`AcI+Pd7@8^*bhv=C2!`*cjGqmSi*0se<>T;!8)!>t&B;g zv|68ZsNQ_a<0crkE{11U;EcMa5C0lY@3lJO^y8j24%9A<$TbE<4C94>wdWTF_d4s% zM|w%wJm?T;kk~8CZ<&1c{7qkrOHW^2z-b>~V7}9s^Q!jw5q{2sexuHsIv{Fg-e)Hn zbdmJ%1u!w+dF5piJcAeK<2#Wf8WyIf!#XMKncT(j)pKi)#7ZwSC`|73_(l(2vO z>rsW?&0%?UyRPKjRwFn&{%mvxGR&a|rzd?nUcDI4T7Sz5Z+?H2OwR~i+J}mBuP3yl zLbQGT@&y+C%Uq$Yvpcs=w2HKK{Z?8$66-arkQveQT)aB*2lB!2VkyO&Gi()A&s0Y* zITIN+ypi64JZno6EnQH-9556-4U4dg4bEBp8kMar2g}}o;s_yhyk{^<0B@BoqJHL$ z7IkEJ4ERK3Tn5!#TK&sCEufduTegG)uP`i#odp-0B$lP;xhp{AjL)q9=wqqqU#?8F#&f5kp(mVR6&wW4{LqCl-Ye z4~t_(vHUj`h8N7^jWhR=*>ev@%*oQCXlQ$Ha7^tGmArH*#&O#V;S7*mp&4AvxYbe5 z44?(O4AIBl^sDLK=l9SzOAl#^LpQOJ!Yc&CBgoG`eOyOzUG*O-v)t@5vaaf7+7Ue` z=l@WsW1>2WHKV}Mc;ajDylYa95IXmj*K*$_xZr*|$~-H&ITxRAUBxRc4R?rV_X7#; zW%Wb?ITyai4F#9WY3EfOV`kxp=n!ihGc#wcuZB$eAb z(imB@p-)Vbbr4ADWwFHg68ukPa!EJzqs4+y-TE8=~eN69#PTh6eP z>4^IX$_8nBE^o3Ohn0;@!_sGlngC6$Samix(qHD>{xgg?>d zj4jlk6cR2lwlESwLPUB2n^*ZDR+l!8HFUp;dgtH*;O#<>S^3h%D;sbXWHsvtkG$GH z@2y@Hc!=rM*ku7(=$C|;A&7tpB4b^v*lA?Vy8bJ#EH1SP0hD|1PL^Lzf?M=D4SdE# zIrp3&qtzW8~tqk(ZOZnH_6iD#ExJ!)lr{u2v|C z1NSL!Gvw+&lZ0(OdFB^4_Y_)>tixl12aO`gpCR9kf%6O0pG8q&IM~IJp-`rZ*DR;t zCgx|o3)os44K4|F3Lur6*giiiw|Hv80yPB-Wrg+Fs_v0G$9Zw3dd^C=U5RMSeZHlc zwZYK{U-GVGC+mmzOq8cMF%IOmZYSIgU_!CQyy&B-0#t+N;BIfbjZGzxqftUmAGZU1 zFduoT%ULlkj|8r&-Mu%wmQu@Na?_5qrHz$-1?UV%?;hrS5h5k%bRwTpzX+)p(W&59 z&+;j`K7aZn{EAzNgyw$xt3X{fse)MP-TA^-&l|0qhtOy`W<2}f`DU-9P)b9JL6c|3 z$4<)zE6zhc9AA9EEY_dcycj4%G(ZJ=1o4F8y!f2%Pq)kITOD;E^25{dan1m4Fz*L&fdlfIW}3mQ51~ zc!*t$i`{`1odx3~Z$`5rhf2?81<8Y@)G@-;D^vmN2!2BL%V?3Oh7}4W&fz%;zVUox z^|DtvnIC1}314;L>RVRo5M$E!M3UZq$-Xme0p6jXR=<|S%BYUGehC2EG5HmL9;hJ7 zW>PC|(bbNuQpuWazEhd=3Vh>A7#96Lwzlda*v>btCP=iOYX z_v3Q0T}qX!3s-H;&efvQ`_g?GT~UD<^i7}S1@!vW3_vZgKST3b@bK`gZ}@eDp?nWp zCJ7l8h|YPd1H0|I5^jDzsf^(a1!NXln3gmqs5lt~<3vJy+V&GMx$(Z`#6W($AJcaW&pS5vhxdF*}*$T+{4^vp}4 zmoOOJy8A#YU42z~TKxrX7g^MM8UdDGom@+bp{NIoCiY(0DoJm>eN)yiU0x-94|Gtx zV=SPHcERt{{PD%IiUd6sR@@yRr(%bi`mRaXvhIqa-(+E;Mn<5n42t)?fZd$#?B`ov zXq)$tZxPpH$1^RO!?8iH(f~1XB`Zr?FMQutJ{!a+I7pV zrV{)S4M^b(2J=|KOULH+O*W@-U5N*O?oz_u5QkR0nS)&3(zMKirQ)1zJ7peyffS6@ z7qxX~V;SDf%!sS67E}~zf_ddZHHH5oT-JGH++M_Zwelz6bC!w_zHQXw+iim00u^aR zqrCRD^D|%}njHoR5sbI|h!y8b=|#d|_VcZN%XQlya>8Hs9_u}@QjmH5F7bz$7o+h$ zYN%yCa!L$oH-AR*NBW`0*iT&Q`C=o9OV~~OZ9GVEF`WZE#lsPz>YJrhJ98+g9Ne52 zd`DfODZ{py5RBKV@Ilj{!Uh1x#4uB(MD}V)?svWJJM%BO;f3b-YV?tI)ztmmDui{G z1s$IBSe&P*ST2#ef*(%{rBGnxIN^hL>NY&798ekvinFZaxw~9tvAl3oENBwD<7g$Z z9O0jNwNLB;#_HR)Fdk5yq-$riq{ytp-SjC>#=2ovAr?=X+mX&#IcS__=auZtR}o20 zC}B%U*iXzuFA>vAIv@F#$B~zuWHN!hqZisJ-YCI~SF@fqDlnJQL@J}3-rq9QF)*s{ zlm^^lk5jJ2d1Wvb&@`2k7fEe_HDl0;tEVvo{oMA^sYg3@@1{QMoQa#1{4cKh@bpi{ zZg&+v3?T{9Ku^GeTwY$nN3;ls;V=7>={>Jfj!9->Fd@f&6ar8@8o++~-14!Rnlwdr z4uMnvTG8jO=&q&$0i)gA@5syc^Z_kC*>a%FlDJuVCYy-O9sH*dOs zx3e4LZmf6!_Ku>#>l>%NkQOOyG!p$x*F7+#s`OLt;BfSlKM1$qqu0zIVh&@ zdz8hn^s%%PjG$$kRFuiLwnf5oB|kEAxpNyWdA9JK$&wYVHggRyy;$$|n=Jbx?r<+z zKf{CBbUHn89aFX;a_XtIDI4%4I7+tSe!f4%k{woYM!FeMUcZ{nrolgcxk+NwwtY43 zI|#PT7ixGfIZ@%;a~{DSMz_lX2gjMxZ*m!)em{Wkh%H1&`M&ff>y45olEe?BE`!_ z(IG&@5)ZJ%oXbLI^tEC+kabwd;QDPsz^C~}BcPr0#HC3un8rAThlIR7O~U5rzmTd> znJw=>bIkYEt;t^r$xM(5bKdP`)8@91SNs7zm_Ai4D=5ZX6J0a9Xo%BAdp2WE=W%(W zv9|KgW;2|NIA(wT#`hlGxfT;>OJ}e!K~8_tarjj23jt-kiPptd+IZI}3|ml5e{UkI zQg5A14n;hwmx2z(`Fa~${*Ss?)rU(TQwrw(KnBC+)Gqo}#XMZMwqj)RDvDb@)=wW+ zDRxp}xC}<bw#TJo4XuGZt!<@s*$) zy?Bl>$@Gjn&B1H$;?2=pC!T*JxYPtwWZ0$!9z|h=SgYLH_UaePZjHXR zEcbYEKz3cbRA*uVFB?qDHMIhGfdmFM_*ZBSSS$1z#)@=7Bzsg`ne5W3Q*q%U^Y7lI zWzsK5MY+-SNP9d$7doyo==bgGnm&cVuz!gF*u)W|JtyG9=CvWwJTRc#c;OhuVj8CU z9hlcf0o8Cf5P`gnkB{$7;F16i`Ru^1>lRQSXg7H@0Lza_nl!K!zS|t{3}k{elSd@j zoyDQw*qVv`FiNLIa#qZS7xcYT*9s)icq^=xiZ>jXB2+WZ4!4XzA!;D!|7{E{bGGv zWRr(MUaApYy{<+6?MsAS^+xCvEz_M#K;NN{cm%^QG{EV9^a>Mxj68A>Z)vWShpGMz zL5$O*q2`?PQ(0O&-#Q#`z_~)&inYykGuwGr>t%ieXXr9 zfqg~{wr}D;O@pj9klzhldoYNm!&vqg}Y9e2MNxIsK zDf`-P0E!Sy<#!(HMyj?RXEwybbnBwNn)Nftc5dei*g`|?E#iPgOq-*lNi zaZQC=<61E=iG^cI<;PRR7@`&D#NQ}Dp;pn6NzdA0wG@99z}se}SI3xt>uyYhIR^2b zjpdHGK37h{Cx{SKY4#3aK=j~g;gvZF!pK@7lMO0Q;Y)qSx@utkB?wBI1`ct?Xmnos z*=Y1NBgUY)dIS0_qpU?mY%GPQakmEY8wPaj06LxLhhnzpk47Rcb+8gBRBj}opW%da z`YixsUFg^bdw>8sq$>SuyFo+H1)^&UeN6zH&WHgCXtCgZeEPvaTGUm(OXF=ld{Bw7 zB{ChP0|`Tw)$PF91!#q$uHQhF5q;CraM!*XG9thE)k700Jan16`zh=6x{zw1}81qz-+l0P48Id1YZofAb9PTl&`>?ze zSWUj|WhfyN->4jNVzGKV?=?F%$4OPuboA6r&9FSLB#OFdYtU6Vg}Us3ZETzdwYA0bRlZ3 z?Oe{gY|bt^7!XqO(X1|>*jN)R>``I^!Xk5z*(rvR!MPU+-;lx^1`^pojbuP8P>Fa> zDdaaPF~ML-MkiLP&@Ar3R?>|mCTqb2wik(&!gt4OfMX#hWc~7|+(OXWS62|jNE!*@ z%?I`$IUtq>(zy_jzuWrV);nrd2KyXXC4JtSmW{7aDr~-SC}6h~0W>s98XJRH4<{TD zxaP&#Q4jd+axdACQSQoUKN$pCF3=K<25N?8lUqY@+vaGb8uRDS7mrkx>aQu3QeTC+ z*pf~uEK`1E$;^Cp!T!FT!8gDZhW>q3=~YaDzK0~Fek$vkTbBiBvL|Rm-hbND$TT=G zV9*oki2ppPf|%)7=&28sz6^uUeLa;%*XeQeQq6fHyckRumK6^;{5z^R+acW}!LpRr zKIo_)5eBusWmNU(M>2ZW%7iVL8i7#@xvL>0s^|=t#_l5rgRHsSD?8=QJ;JTR`~GM9 zvuvwIXS3M_{wWCRd*dxS6#uHkLwH^)ns3M*awW#@tBi^k0U=>CYUe%I?wUpFGK($B zI!Z#YfaMBi8_9CTpS6n9sE@EhI4Vh_PQJr6tABj&@$m8ao(FojomL37e z5eu@j_ZjdZ>57rKvmB&$Ho802fhsv z83=BYkX5v=-$PF(d%FQqsk?{;AU*B#Q$@7@vV9kH)!cES2)Fzmj;6=aqyly^fDe6N zg25LeD6@slk&%FqbY*#+;7N8S94UdzQQ~c@<39gh)>bd?J3Ia8ry5>IYUCcWi9p>>Go*S)yk#OaaTO|T&jJi-ztn= zAW>qXT)^do?{d&nwSsg7MklLB^a8lPsKR@4H$Q#S9N-#U1R5Q z*=WSII~YUw?EdHM&~IN-*-*m;=^Q)VN!^55C17Zlu+O-DHgZs&WgFYb9amg+^xLh% zJlzxr1>=IACesp|&!jc2mBCv*ytebFh39(Gol#)t9C81;2|g5>!p(ObO51$z`V2` z0VA>>EMH%IANbUjhvqI~Yg_iZMcg%2yOI&GfW7Wh1HzkP$;&z=6%3TFXD=qdr9|bR zpVf<&-Qi^Ce@Y+<)tFvc9-fHQ9gnNm948mK`6Mk63tiy6+bi2oeGFG~0S zZx4f?*$d&l8XuoM)!?eUHPdkKXnWRa@SUB`Uz#`g%lLmxn6rh#&FQ_=387aPE%2pi z<=bZhKsj6Rq*NS;#iG|6$FKj-CC>au63={nHRnth!G?jDBIK#(vLNJkGY}xK2lhMn z5RPv^U~D4KpnLy6-yquY*Hi!&G8@EygWz)}G7=Kf(%yjdy+{+_4Ft-`jkIVw^FLew zg<1lo|B~6MKK}cL-o|j-OS*`3u7ji?BG-o^Dk*FINu|m{k`*uzr4Blw}LKHd`!Tm+IZ$!F(}ZDzp1}G{Q+;q+9V1B zq4u8vA5jL#p8g6F-XIUA{AK%Ro^`Zcm!-OgpQGQ@h)uyS%4Q03`+$k07Pyf~v2mX( z{(F6lkp2k`Fe+J;B7wT+Om#9N)eof*JqfmyiJ z-}}QzZt1Mcf{}UC3)t-;!g0tyrGOqs4#chjW~MX{{iZzdDbxDTPhTha^3xLXr&!MF zEx78rRCsuJRE8aHMJ|Xc)a_tI3s?a7sqcSQ`=7m|+2ikd8(#Id@PLaMf~@CJ6a9K) zOy$D;cxN7@GhhtT6k;({^zKvT>qW?M(Lz&EM0^YvhbNj0#$fF z!bjnF2j4M#0T@k)iH&4}fi@5mJ_1wg!2#z z=xtOG5mW>LgAgzPk&=*-Qc7A;L0YAyl9~DJp!I=#o7nHv5sd^EB*r zcm3ab@SLDN1pk}s5{2@SY>Cd2=~2F)$0Z~4B_k6g*RD0Va4kDdnU_m8Xl*r+J$z`k zWE2#|OF|3m7J)G6Wq<$m;9qSFt5PetG+k{)zZSm1me+-Tr02OPI?NC7|kg z@$aidJlHt=fB#%L&NmV7+{?}{yNcrPUe?9OGXr%0dA0Hc&A_?sKm4c@o*^`T*oR=A zoF2OI1LsE@>VRJF&Ku!5YhLSeqX1?J@uH_2N$Vxc+H>5OVonXQI=E}2g5*HnluqJ! z4E|VtGtbV~&tx9JBHaG-b(T0A<0cG5e2hv!r15EJVf+q4!`TuK)4bcn?|ghJr&u-q zSh2bvBVz*XQMTngqt!SdZtk75543v-?FI>Q(R@h}z+U_fcsuI*C)!dO$=J1nVD?mX zX^Oz7F$I*ZXq94^%r^g=T(zG#(c+6JMg6oldoB9fXl+n9O3n9b3e9lpY5$|688rzH zrz)%^7v)hK%zSMDAhTL4WH0xvl%aw?=}5s;Z7_W*DML)RTFJO|q`I4zL88U*vythN z0!lUw(tpil-oPtgFt91VqIa#T^bxvbRFg{xjf+b+HaNZjXgCH~z560eR`w`WY>E&AF%V$q zL8mqJr>xZNoB?DHZe%);UP3BEtwl-bS6}2BXlGo?@=7@II>xn#K-PH~X$mZ#xU@ts^g>$zu z63f@^1`MjPN$1)vPibMFcRqbW^6hFyZ-LH z8F!3<3VkJyaTUIafAQ)-lWc_L^T9Bk-eSw|=%_Dmb$hp_E4HBjN#dg8+5*COiBR+) zD#6DoS0q5L<`T@8`gHW3=CD~v(8P% z!^_bD&P!2#NA)sqszovZ*+-vIdD`%p^KG*wi*;iH#(+E7+I2MCrs8!mlM-52U%OOC zTfZ{gac4{zzfnmZtWSV_oyM=#Wpra%Li+8EmyZ@(du2n?(G}46xcbw5t5(&NAh6VS zp0CXs22sL6Eh$Z-j85*hDK0;h*aFHOfwm`@G15g3LKI|7r=l#f?}&}A_tw1#>of*l zGhM64=(g03VRRA2@U(GO716{E0$p;h)QihO-$%3ioijEiLY#8MGBkbdV-we3PWkC+ zWL#D@*S2^+_-%NC-SqdgLd9+6&}99@20ukU0teCNMEMKd+*AQCV@_(;ldFT^dD* ztooeLXDb}BOHa(Gl{u)x6v}z)AruqZ`fTV0_c&DTZR_A~hCX;5EreHjI?H2b<&k6YidfcQba&?A`X zfr0FTgVfdn#P;g>lw@KerwD}O9w>rf;^MBq-TjDfU5_uI|bD<-n*N;_5g>h@$@spG6{idkqg*Ng4K`oVef$G75 z^w$d!A<>4Btj=q5texxCSfP$ih#G8(g$AOgEkjlQnW^QKvRY@NWT1-KNbMsQZ$8_m z+`!#a+Vuirds>3t$RX^?!30OJLWr=!K`H`ki+nFF$xxPPnHWk2h_M4f6+%{Us#Kd+A8n5@M_0v_GN$8 z=dBJTKv)vp(knQe7lW^?OTV^l1_~Japw(t}32Y&eruiZYsz`&X>Na0u~547t;hw0>oi-d`ZyV<{s&DLOKPg# z11fq~47#5s^5F8%CvE=ZH2?bh`IJ(N?Sq4o(R9JRg+|qx*fmKTs#(ac@bzWlP_N^7ozyg9OcvG|d}SHVYc_T_`rjp&vhga3ou3zFFF! zV(<8Ta^|k>0E_KAe`C)+_jo7&!0PYU$_Uzi_c0R+Dt~n_U8~WdGm85gFuDlqZwF^# z^6VToVIN7zMaav9X;yFoh-d!vm8s$$vuV*u20A@j=#slaZ(s?H+$#^(e>|#o(fi~V zi|E*~#P)4^yI+*ZK$#6plgzEQ3jOK0n|522oL}jqLwb&`#gbR5!bthExz9&~>!sPA zCrHGm(wuxu$|hYQzN|WA=1WzU+1*%;l6hN*O+^rAaZsoCrfvP4K=!)*C>dYo!h3q# zIlaK=_VTsKfzI>s?7la4f>O<+f5W#c&#OBIk1bws5$4C1#J8~s9EMY=IIT>=cS-^1 zLUIb^fXl;{@YjhC*i^mFdKO#LXE!woMFds?HWxj(q^|00XoyF*mt5fP3c9$rzL-C6~?Co(fL1 zNPL#H^y8@-ZoYmW9ms#u#2(!ZiOyk;8Y1%Mu_M?Y>HUIS^njBHQ8&SkxmZ4_SZTic z>nfShP&JRCVOPEzDPy<rsV)Y$^xLcQ$Sk%pxB{n}<-%QOQ z4C`=GE|hK0_+eNv^@WA-rt5j@FxjYN-@>z0U((*)E8q*LxaDJWFy{Q1=^)*LXBT_Z zY#Xe)o2KkOuQ?L-=*V@vqRbDI4G3H*`f2s|YO!T8(RSlk+OFrquZU>|BsUAX%S9Pg zv@I&8)nhIvrnk!aS)THm@{LCi-A^2;q8)O@&EGKp)!i{NrC>W;#MM@B*p`=HcgF2EuaH&?*qrZIIX~K3MLS-_BKt@U}y+5%U_l zI-_h#yo1EX!Zfr;z&%S8TTMPH29D~}aH7~eJLY<3W~}KCNN@!M&JyYU48}T{>OwXG z9%y3!#IA;e`esLbv(~BJW%1>TrfjES!PV80^d;#dy}{BDaOjk8YK@yHuMWzE_C9W% z6D%rt6lQDO{NanPFJ&qZRn_JfcSG%dAFZt4m*8~G9aHOe5b7i2KOaDAk2~JjZ$-J* z&~FlqoW{R&=BpzdN%1ywv3Byn(jA8`i8%B=GKF`CuyFWK7B2S%Abok}s@e%|=buhj zJZd}Zfh7+no~YN*ooqSTnIi!h%QS;Tw%YWW8Ok1KDM9ab=63PA#h6RXZ4*YYUj9Gk+0?2af!aHi<=XAI7LS!k2X)cY2t z@#%1DC{W@42)*~^bEEPNKGm9N7m3U!vTL;8Mz|wyOq`e~mN6XfP}Qz7MF)NfcmMk= zTwF{K{mobJ#|?MicI!GJOrzlnkK#2h*TaVoiBF!SC83iELI@k7bEDo7fXOQyk0_;S zaQQ*CFvP>-+>$PkxM+xb*|1*fbA)F?u|68%tX z1=UDWHGL%BQ1@7W`(tlD`)sn%viE4RWF+~>0wXh9sGf3gn{#ngk5Wn4s)8Q&MzKvO zFN?sv-*uyki+H-J>1nQ&ilJX^1#f00n~v!+dP1P>Aus-&%?>nhaXkO6M&O1>2Y=@ z$Uzx3C*17J(vp~aYd53KIKXQ@2Xb&WUzy^YuMB$$5S=pF6D~csy3l6! z`^W12JVU&A=?_vNtPkv&RfdML%me7u$%`&1>7p0y%tB(`48PZ|jkq3>pL)*rh&DH? zW|^J3+}RSEqIun5i}9A4@H?l6KXukAe7Mh2fK6o_X!0!zQt3PW-z$#S738$r(^Mty zz!gL?+nc9d$h~jvu!3rKtRo|3c1FpfJS3MlF1UB3lh$Ig z%b?ozine^N`;$*sAivCSY1^M&3Sr4#AyCUb>3WOw5^#l=&Pf>pXUMxTCoV<&Bo~S9 zsH=vGMNfX-NK=+@U5`=5@@0u$o2$BtoMwr4X}dLe+qZ5~@ja0$4=?Lu`uHkyOoPvo znvr&#BgwM(&!<(!?4h~})LiO{)Y>tF#GgllhhmynQJcK^Te3bOB53)#INL}RdzRGI z*TpAi#>y-yLPE$1yFx;EslushrVks7{5|YkKW}3d_qYDoO;A6=w@GsjYkyJ8CY(Ji zOMa3U_a<9L(`ys;K}tbo*YRd@z7KzZBEyn*y}_W!VKxGtE=6l5@f{UF&r}kQpHTfi)_3lYKx>)J z-030_&Kcg^>AP{E_pTb;QJ=aT++j4vZ@Ut}P-%V^tm!%SKOR@m0mwMRpp0TndQdy z9A`rCRNJ}V4OPq$mn*?*=MGn$K!hcro+_5CB3CA0`==BYU3j_4ekFm3ulVmh3E#v3 zST8<55T{3OD2T@2|n*Gdu$23P9udFtH2jW<%kmz&>wya1xy zRtRxIf_!YB+EvTnoXXkS__}-8CSHO*CU77Xz-wL|AO-be_tK4}Cm^cni`260mj0ZK zI{UV5--m1@cWt9ux(dIIWmYu#=TgE(h}_ZUl%I=eMy?RT^_Q&aO(Rd=KYlsF_UT6B)=GY*D( zyB9*A=;OR_tp-l3XX^wBt9uu#adLNUW`DoAp@X*~?c!3c+01`<@7m5_uI<^wv^a0P z&&2PPGGl=9zt&-Eu><`L_}^~tM$^cn`f_9!5KZ`j<>zy_Ko~M%WGFw01S$$a!*xnH z*6#WO`>s=xX!jx{KM{RO$GaFS3|ytO>}COgOsdF5@tlL2W9Ykg?}iMCVVlaVClfr{;#;X zcX!%_ap8D{r``c$ZLTr;y*4VWX&hUoRMLfBE8YjB6wd<13o zm-M-GeYW~BG+`b8*w;*pF=H&8U#EAM>0y*8!0ZT%6{5^w9Lqgz4%+h9Z!J9+zwj4J zM|SuC!LIRAnR?N-y1Miq0(xHK5IqBE#_<5EyWVNz0oOfSz{7ckv932>61fMld~u*8 z#QO8+WW4|cF%K)w`Ysfn*|UsR%-Y>BR*M&65Upez82^zK7{zbP{&FG8WS_So!uU(~ ztP`$p0CdFvR^YwwYFBRV+G@2#)zP-|1FEjL1mrin^D`sdU$|TQL3=BD$+gvI$8{lV zd0;1XBbvdPArfmL@=zT>m;rU`W4Np13iO*4fNK!z^gcUdP~80u`Y*>_Ecgo#EqGW6 zT;70)4aCQ*2d0jtOYHMGo|xw>Nhw}<7HbO+5s?MgK?@A>p>WWC)qxOMV4D|2f#izF#D58WWOIq zUfsm(x7q6ZRU9{j-`sk8LjhVR?h7E|eTb#v*xfw6Z+qiu>@HW#z}b)bMVg0z*qDh~ zh0}Kt1p`BMzuOGgyG~KL?O){Ym{sz6jaNvEjC-bNltmPAspkJth!?kwbH*U|}B1{y8! z@A;GiSfQBvJ?4vN19vvaM#jBwUk%*ZeLhsN$Jy^vMZo*tu9i15Vywn>0CT(eeJ8v^ z=p*4mvYX}~VBUd+qlQ`jEBxmNvJPPRR%`d{xlR`sdCZkM@YUS1)ra@L7(q*A?pew+ zrQO@5w~@G_5@Q4xQY+r@d?$-ScGnYF=$%sP%>Q){h7TL~P5pt=C;a$uL#!r*K6;yi zb_@ET{3|si8R#)EZn5+qu9Rp(+p5xOs3z9rS%nNb8SEH0dCBz6$Cu|`!^{VOeHtQ9?Qwp z-<{mIg^^cHF|RsNJh36#x98vjTud=u&w-=()^3`zbK@@km{-@i24;2&Eg1Xi-}8F9 z7H<{z*)H;y3QW~`#klh4_5F7XH&u?QI?vXR-AMn>t4^4Bc(&W6>N)@EOTZ4RR%UlE zF7CV3-Mc|ZJ#${F@SlU?h6cvihYlA%m>NK|Bp_PO+K3XDs4KRd(B52U)rOX&k3Gy? z`wr;?*c#xl{#L+e=RVx9>?0k6NU7&(^;tv;1ko``Sp(kC<{Uj%-FX|5h+@nFK)Zn1 z?vsh3q5i5MH%|fGU99Clnk`nI6Mp?>TCovg#wRboZ^H@GV7xb#TP@9rn@}5owuSCo z5ZaO-2Kut&0U<3i``2%B^UXF9gqi+CZfs3H@F!QMX?w%)xb^VBOv?M64 z`>zbqKub*vb;)d_PIgbPsHk6S^6vYurV{hzgo9c{@W^nQBE|0Pd&f*X=GUp+DXD_* zVqwQ595EBxXGe&$-bvCT;#EDC9z%tBq-FuC^|g?Th~$P^9Nlk|{21RiYtb{XrcG*t zp8SdE1tK)3z~jwKrur#<-xUbc_+iWt+dw9c86OV`emV6UE7iW-9(PdN_dJ9v0muFO zEFX#qda*0OMHqPek&F##EHWPk zWKE|brp#<^2pcon3v$GF#(nS@xJ3t zX8S)ig9(Lwm2gQe&-x0BekNj2FU|$M5{+Vu@ykHtw9xR}c7M8shm*VeH06Z}6*#{u zKlt;5P?TGxuh=qGRP@-(y`%~`9Ijxl>zMoXi&sFzvNoIp>iTu8>;?+jM0rt3`$9Yy z7uLN4iTCTRg3v>0E_zV%(%m}y&o$8Og`Hk**Du0BFKT*9R%|bEH)U@*5B$2CAH0-WOcB2zy{W(TkcVr`CFJ244<#SQ}T9jONR80IA-&)zNv8 zik1bU{ZFk2V=7M#KMceToo*a#S`4#bhQ>61;9Hg36mP=bzu7`2h%y6oAiYMM6v%s=11S5&UiSRo#l&Ko0d9?mTh*7LWE0StGg|ZO%j<)M zZJhsnWSx0;Uky$_bsx2*nfdjac^DY$5!eW9UC4Wp z?E3HDGlw(r`*Q4U_q*Fde_s&x!yKMCt5?M5_j>~P+TA-iga4lwo~iBLIDL&fTR&&Tlb@dg zc+KfNU-2;_1?ll-+J1fym483QiZL9UhnMinE(3nd3{n*Z)<&>lVfa|H7A8b)WacdV zbLKwVJ8H%bvuj!mgzJ$@hqLQ|qrE1oH=iICEQOHBXO=A$gGPDdY2O67{e~n=1BSKJ zujNT4tnkg7Rw~G^ppRVlMhvJ!)#Vzr+>z=Sr{BLWIG(!;ChvDlskR&Sv#Ot%z>W*% zWUJgOqD#Ghj{o!2gpchSD;2IdH%^*>t%WU!iIw#hKL1Z&+ScAVZTcDi7d?2$dsH?9 zSi9cX!~RCg{zao9#aPjer$+O3v3NG6a#An%|N4L!=Eqr&GrUzji6uW)Ua)X%&m3KE zVeAI~Wfp4GajZ2Zo_}TFx!LS5MC`j=(3y&G&y|;2)T5 zP0~{D*hN9v$z)2vb}k`Jtw;gHXjniVAsD({Y}DxY2mf#e_hB5%Y`YEd z+#-N3*CRM>w*}#$k0yJ08Tu}o-?vGh>v!gZ{>8neb7jQrw89H_UGmaw=T9d9Px#W4 zQKZfXtr{@!((rSu5%{Ma<%gp=m-Ca2=Q>Dc9&nil0e3_@ePzHrSIPlixQv!hb3AI zf+Is@G#xI+s(lL7~T-Zx~~g*H97qA91dXC zQT)cgFSycRU`+gX51Bv&OQCc{08#WqbOFsrzt_USi~Zi4^PeD)2#<638)IC^LqQ_= z`~?Z0+=6lFriF;9qUPBl&4^0(eNZcM7kj89{TrZ!x1GBg$z^=eu$_tc)G0a$o;W5| z^BxC#fxCIrC8f20BOY)S#&|^hpxH}`*Pwrm9(a=j!5$(zx(WzGK^Y9k$ll=0J`aOO zX= z!`H=x)%)L?On?aH6z2U(RS>KEMi`6i+R{PujTiVNIv|o}(qH$_Spg1r?>5F}eO&0@ z^iz=|)hbN(jkQ+*qp9+r(1j#rp<85d|6yF=Tfw^nT)AZ2M$YH5b_~bgGGNC&ID5C;|5P$OYZlBn<;9!hVE-R+#cdddnQXSYaI7B7v@?Oq=;%TCp&|Nd}t@s)#DnJhh3Fssm<=yL~e^Xr;#cK}neV{Cb5R@g5z#Xes<6m3AyNGGql{fPeFcG@5-2d0U zK6?gg!|j>$r=Hf`K5z}rgSlPhaIp~474Urh@4kDn-=Ynm<8H?~sqzXy4RUUw#rw~) z7X`P5)5fBb@9%*}|2PPmMoa{RZ5Ji=xUwbB@H9M8pE6&et@RvGrlx&^mifm%0p7!W zhW{-0x}77Kjt(kpxt@cB1D#~lna!@>C@cwSOUfX$Tq0OQ#geQ0{*wtXlRcbbktZ-= z4TK?RLFpvP$HU`ow&jGP??j8=yBjZ$AT`HqkOQ_I^md}^__!Ycg_;D-UU)rsMu+Pr zuxTVEdBdR`3hwIS`!ay?gF7_rWfjxcWWV~HjeN&fh`)Q*ZEqbsfB<$zBwWa2v$bo_ zBg}GX$~jUnc%J}mj7U=`?~?&)+l|Ez5=ZRzfsfBcLk-K&Q+S<_iwiG?f5mL=ZDW%3Wt)Yjr9e80syZ!$o0{6b;09kvpxc)HnT2Dn)FFx51 zNy9D}!|VcAK{?uDN3aclC??jyCe#5m2}mrCdS<+)_}5JcV;&R!5ZmQi<2uNhLDQA5 zcJUV0zniRP@9X)+o4EclvIAJ$7zfpJ=5is9MMy6rtD;N@mZ~e|&%=XK4 zf&-U8YxWrBN>YkB6kD?$(N@&UHHwa tDPyRFPR)W1Zx{4_8)!+MC4E83F|DnSqZZ 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

yJ64@Axlaa?PW=>|J>eYdrmTnlx~QS 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̎{Wxx<9zVR?^!14Pmq?-^G*|PX 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%0A?Ao_=9;;oo>H4J6$58 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

F%JO=R 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 literal 0 HcmV?d00001 diff --git a/docs/anyspec-next.md b/docs/anyspec-next.md new file mode 100644 index 0000000..69de2ee --- /dev/null +++ b/docs/anyspec-next.md @@ -0,0 +1,5 @@ +# What will be deleted in v2 + +* omitting fields from model +* enum vaues started by + or - +* enum values divided by spaces \ No newline at end of file diff --git a/readme.md b/readme.md index ab1e1f9..60a0ca3 100644 --- a/readme.md +++ b/readme.md @@ -1,65 +1,22 @@ -[![codecov](https://codecov.io/gh/frolovdev/anyspec/branch/master/graph/badge.svg?token=8D8S09PRQI)](https://codecov.io/gh/frolovdev/anyspec) +# anyspec [![codecov](https://codecov.io/gh/frolovdev/anyspec/branch/master/graph/badge.svg?token=8D8S09PRQI)](https://codecov.io/gh/frolovdev/anyspec) -[](https://astexplorer.net/) +Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Domain-specific_language) for writing API specs on top of [Openapi (swagger)](https://swagger.io/specification/). -## WIP, I call you when we are be ready +The main problem we trying to solve is a verbosity of openapi. -[Main link](https://excalidraw.com/#json=4790454524575744,zoP_ISTzjIbi1HhB6ErtWw) +* **Linting** - specs can be linted by internal linter, that can enhanced by your external rules. +* **Prettify** - we support pretifying of specs. +* Fully compatible with openapi specification +Example in action -https://cuelang.org/docs/ +

+ -https://tree-sitter.github.io/tree-sitter/ -https://chevrotain.io/ - - -https://youtu.be/TeZqKnC2gvA - - - - -# What will be deleted in v2 - -* omitting fields from model -* enum vaues started by + or - -* enum values divided by spaces - - -# What todo in v2 - -delete $TSFixMe - -delete $Maybe - -Allow to describe lambdas - - - -https://swagger.io/docs/specification/2-0/describing-parameters/ - - -# Why tinyspec is bad - -Don't throw an error in this case - -``` -`/industries`: - $L /industries ?branch? - -``` - -No consistency in enums - -``` -A ( a | b ) - -A ( "a" | "b" ) - -A ( "a" | "b" | ) - -``` - -To much dsl like $CRUDL + +

## License diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 0c70138..7fcd12a 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,5 +1 @@ -type $TSFixMe = any; - -type $TSFixMeFunction = (...args: any[]) => any; - type $Maybe = null | undefined | T; diff --git a/temp/openapi.json b/temp/openapi.json index 71b066c..429e6b7 100644 --- a/temp/openapi.json +++ b/temp/openapi.json @@ -23,97 +23,60 @@ } }, "paths": { - "/industries": { - "get": { - "summary": "**List** _industries_", - "description": "**List** _industries_", - "operationId": "GET--industries", + "/documents": { + "post": { + "summary": "**Send**", + "description": "**Send**", + "operationId": "POST--documents", "responses": { "200": { "description": "", "schema": { "type": "object", "properties": { - "industries": { - "type": "array", - "items": { - "$ref": "#/definitions/Industry" - } + "document": { + "$ref": "#/definitions/Document" } }, "required": [ - "industries" + "document" ] } } }, - "tags": [ - "`/industries`" + "security": [ + { + "token": [] + } + ], + "parameters": [ + { + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DocumentNew" + }, + "in": "body" + } ] } } }, - "tags": [ - { - "name": "`/industries`" - } - ], "definitions": { - "Document": { - "type": "object" - }, - "PermissionType": { - "enum": [ - "own:companies:write", - "own:documents:write", - "own:conversations:write", - "" - ] - }, - "C": { + "DocumentNew": { "type": "object", "properties": { - "pathParameters": { - "type": "object", - "properties": { - "a": { - "type": "string" - } - }, - "required": [ - "a" - ], - "additionalProperties": false + "id": { + "type": "integer" + }, + "name": { + "type": "string" } }, "required": [ - "pathParameters" + "id", + "name" ] - }, - "WSEventsFromServerForAgent": { - "type": "object", - "properties": { - "messages:New": { - "anyOf": [ - { - "$ref": "#/definitions/WSOnNewMessageForAgent" - }, - { - "type": "null" - } - ] - }, - "messages:update": { - "anyOf": [ - { - "$ref": "#/definitions/WSOnUpdateMessageForAgent" - }, - { - "type": "null" - } - ] - } - } } } } \ No newline at end of file diff --git a/temp/spec/endpoints/test.endpoints.tinyspec b/temp/spec/endpoints/test.endpoints.tinyspec index f7b4d4b..c10dade 100644 --- a/temp/spec/endpoints/test.endpoints.tinyspec +++ b/temp/spec/endpoints/test.endpoints.tinyspec @@ -1,4 +1,4 @@ - -`/industries`: - $L /industries ?branch? \ No newline at end of file +// **Send** +@token POST /documents DocumentNew + => { document: Document } \ No newline at end of file diff --git a/temp/spec/models/kek.models.tinyspec b/temp/spec/models/kek.models.tinyspec index 0312fa6..dfdf1ac 100644 --- a/temp/spec/models/kek.models.tinyspec +++ b/temp/spec/models/kek.models.tinyspec @@ -1,21 +1,8 @@ -Document {} - -PermissionType ( - "own:companies:write" | - own:documents:write | - own:conversations:write | -) - -C { - pathParameters: !{ - a: string - } +DocumentNew { + name: s, } -CompanyBankStatementSummaryQuery {} - - -WSEventsFromServerForAgent { - messages:new?: WSOnNewMessageForAgent, - messages:update?: WSOnUpdateMessageForAgent, -} +DocumentNew { + id: i, + name: s, +} \ No newline at end of file From b6aa9eb6fc3bab4afe741b8bdd5b408ff3327c74 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 11:50:32 +0400 Subject: [PATCH 34/70] docs: update readme --- readme.md | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index 60a0ca3..1e95bf9 100644 --- a/readme.md +++ b/readme.md @@ -10,14 +10,109 @@ The main problem we trying to solve is a verbosity of openapi. Example in action -

- +Before +``` - -

+// **Some description** +@token POST /documents DocumentNew + => { document: Document } +DocumentNew { + name: s, +} + +DocumentNew { + id: i, + name: s, +} +``` + +After + +```json +{ + "swagger": "2.0", + "info": { + "title": "Test API", + "version": "{{version}}" + }, + "host": "{{host}}", + "basePath": "/api/v2", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "token": { + "name": "X-Access-Token", + "type": "apiKey", + "in": "header" + } + }, + "paths": { + "/documents": { + "post": { + "summary": "**Some description**", + "description": "**Some description**", + "operationId": "POST--documents", + "responses": { + "200": { + "description": "", + "schema": { + "type": "object", + "properties": { + "document": { + "$ref": "#/definitions/Document" + } + }, + "required": [ + "document" + ] + } + } + }, + "security": [ + { + "token": [] + } + ], + "parameters": [ + { + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DocumentNew" + }, + "in": "body" + } + ] + } + } + }, + "definitions": { + "DocumentNew": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + } + } +} +``` ## License From 55322af1b9e1ce88bfe0af0fcf55cb8103279c26 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:08:15 +0400 Subject: [PATCH 35/70] docs: add osome mention to the doc --- readme.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/readme.md b/readme.md index 1e95bf9..57711d2 100644 --- a/readme.md +++ b/readme.md @@ -8,6 +8,22 @@ The main problem we trying to solve is a verbosity of openapi. * **Prettify** - we support pretifying of specs. * Fully compatible with openapi specification + + + + + + + +
Built by 2 engineers related to Osome with love ❤️ + +
+ + + + +[We are hiring](https://osome.com/careers/positions/) + Example in action Before From cddf736bb3df6948d727bf7a93b6245d21162480 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:13:49 +0400 Subject: [PATCH 36/70] docs: update readme --- assets/osome.svg | 1 + readme.md | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 assets/osome.svg diff --git a/assets/osome.svg b/assets/osome.svg new file mode 100644 index 0000000..d99431c --- /dev/null +++ b/assets/osome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/readme.md b/readme.md index 57711d2..9f9e9e2 100644 --- a/readme.md +++ b/readme.md @@ -13,13 +13,11 @@ The main problem we trying to solve is a verbosity of openapi. Built by 2 engineers related to Osome with love ❤️ - + - - - + [We are hiring](https://osome.com/careers/positions/) From 103e5bdec89246a6c22a710bbb21e5545feb297e Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:14:28 +0400 Subject: [PATCH 37/70] docs: update readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 9f9e9e2..681a2c2 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ The main problem we trying to solve is a verbosity of openapi. Built by 2 engineers related to Osome with love ❤️ - + From abbe79761d3cc698f919bb94e8a2e003e5c167ae Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:19:26 +0400 Subject: [PATCH 38/70] docs: update --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 681a2c2..359c04c 100644 --- a/readme.md +++ b/readme.md @@ -13,7 +13,7 @@ The main problem we trying to solve is a verbosity of openapi. Built by 2 engineers related to Osome with love ❤️ - + From 5030cfc12242969df6ccf6fb02a87d1b0ff7f38a Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:25:15 +0400 Subject: [PATCH 39/70] docs: update readme --- readme.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 359c04c..e49566a 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,13 @@ The main problem we trying to solve is a verbosity of openapi. * **Prettify** - we support pretifying of specs. * Fully compatible with openapi specification - + + +
@@ -22,7 +28,7 @@ The main problem we trying to solve is a verbosity of openapi. [We are hiring](https://osome.com/careers/positions/) -Example in action +## Watch in action Before ``` From ebceb219947b6ba3149c4f381e2514ec0d0287b5 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:28:09 +0400 Subject: [PATCH 40/70] update docs --- readme.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index e49566a..df15d1d 100644 --- a/readme.md +++ b/readme.md @@ -12,13 +12,21 @@ The main problem we trying to solve is a verbosity of openapi. .table { border-collapse: collapse; } + + .raw { + border: none; + } + + .cell { + border: none; + }
Built by 2 engineers related to Osome with love ❤️
- - - + + From 0e0191a42ee44fcbff1a4fe98f91be5dc2a853a3 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:29:37 +0400 Subject: [PATCH 41/70] docs: update --- readme.md | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/readme.md b/readme.md index df15d1d..0c96c7a 100644 --- a/readme.md +++ b/readme.md @@ -8,25 +8,11 @@ The main problem we trying to solve is a verbosity of openapi. * **Prettify** - we support pretifying of specs. * Fully compatible with openapi specification - - -
Built by 2 engineers related to Osome with love ❤️ +
Built by 2 engineers related to Osome with love ❤️
+
- - - + + From 2c0bd8dd5b6e6740c0699be7bb054f5d2d18e11a Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Thu, 22 Jul 2021 12:41:46 +0400 Subject: [PATCH 42/70] docs: update readme --- readme.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 0c96c7a..1f57c63 100644 --- a/readme.md +++ b/readme.md @@ -8,18 +8,17 @@ The main problem we trying to solve is a verbosity of openapi. * **Prettify** - we support pretifying of specs. * Fully compatible with openapi specification -
Built by 2 engineers related to Osome with love ❤️ +
Built by 2 engineers related to Osome with love ❤️
+
- - - + +
Built by 2 engineers related to Osome with love ❤️ +
Built by 2 engineers for Osome with love ❤️
- [We are hiring](https://osome.com/careers/positions/) ## Watch in action From 24193f69ebcfbf6ea365fd0afab02de30b33df4c Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:18:47 +0400 Subject: [PATCH 43/70] docs: update readme --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 1f57c63..f11a261 100644 --- a/readme.md +++ b/readme.md @@ -5,8 +5,8 @@ Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Doma The main problem we trying to solve is a verbosity of openapi. * **Linting** - specs can be linted by internal linter, that can enhanced by your external rules. -* **Prettify** - we support pretifying of specs. -* Fully compatible with openapi specification +* **Prettify (WIP)** - we support pretifying of specs. +* **Compilation (WIP)** - fully compatible with openapi specification From d61f60454b336888c58b9bde1e7c8be358fce27e Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Thu, 22 Jul 2021 13:19:15 +0400 Subject: [PATCH 44/70] docs: update readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f11a261..6c1af14 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ The main problem we trying to solve is a verbosity of openapi. * **Linting** - specs can be linted by internal linter, that can enhanced by your external rules. * **Prettify (WIP)** - we support pretifying of specs. -* **Compilation (WIP)** - fully compatible with openapi specification +* **Compilation (WIP)** - the result json fully compatible with openapi specification
From 7a928faf099620c6a5ce46fd2169ce1ebb464c26 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:27:38 +0400 Subject: [PATCH 45/70] docs: update readme --- readme.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 6c1af14..7155829 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,11 @@ # anyspec [![codecov](https://codecov.io/gh/frolovdev/anyspec/branch/master/graph/badge.svg?token=8D8S09PRQI)](https://codecov.io/gh/frolovdev/anyspec) -Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Domain-specific_language) for writing API specs on top of [Openapi (swagger)](https://swagger.io/specification/). +Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Domain-specific_language) for writing API specs with main compilation target to [Openapi (swagger)](https://swagger.io/specification/). -The main problem we trying to solve is a verbosity of openapi. +The main problem we are trying to solve is the verbosity of open API. -* **Linting** - specs can be linted by internal linter, that can enhanced by your external rules. +* **Write less code** - get rid of boileprate in your daily routine. +* **Lint your specs** - specs can be linted by internal linter, that can enhanced by your external rules. * **Prettify (WIP)** - we support pretifying of specs. * **Compilation (WIP)** - the result json fully compatible with openapi specification From fc972e9b817e9c45513132d18c17cdf064076bc4 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:44:19 +0400 Subject: [PATCH 46/70] docs: update --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 7155829..3a77cd3 100644 --- a/readme.md +++ b/readme.md @@ -5,8 +5,8 @@ Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Doma The main problem we are trying to solve is the verbosity of open API. * **Write less code** - get rid of boileprate in your daily routine. -* **Lint your specs** - specs can be linted by internal linter, that can enhanced by your external rules. -* **Prettify (WIP)** - we support pretifying of specs. +* **Enforce best practices** - use predefined or write your own rules for specs. +* **Prettify (WIP)** - format your code without pain. * **Compilation (WIP)** - the result json fully compatible with openapi specification
From 8e660425f9495b2d3112a32c26ae57f323bacc3b Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Thu, 22 Jul 2021 14:56:50 +0400 Subject: [PATCH 47/70] docs: add dot --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 3a77cd3..ce5c1ae 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ The main problem we are trying to solve is the verbosity of open API. * **Write less code** - get rid of boileprate in your daily routine. * **Enforce best practices** - use predefined or write your own rules for specs. * **Prettify (WIP)** - format your code without pain. -* **Compilation (WIP)** - the result json fully compatible with openapi specification +* **Compilation (WIP)** - the result json fully compatible with openapi specification.
From 197b9f2297c46ecaa7b522c61ab05884bd59adab Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 15:24:34 +0300 Subject: [PATCH 48/70] add traling comma --- src/language/printer.ts | 2 +- src/printerModel.test.ts | 42 +++++++++++++++++++--------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index 12e08f5..9152708 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -110,7 +110,7 @@ function join(maybeArray: Maybe>, separator = * Given array, print each item on its own line, wrapped in an indented `{ }` block. */ function block(array: Maybe>): string { - return wrap('{\n', indent(join(array, ',\n')), '\n}'); + return wrap('{\n', indent(join(array, ',\n')), ',\n}'); } /** diff --git a/src/printerModel.test.ts b/src/printerModel.test.ts index 60c8042..fc55596 100644 --- a/src/printerModel.test.ts +++ b/src/printerModel.test.ts @@ -121,9 +121,8 @@ AcDocument {} const printed = printModels(ast); expect(printed).toEqual(dedent` -// My _perfect_ tiny model AcDocument { - name + name, } `); }); @@ -173,7 +172,6 @@ AcDocument { }, strict: false, kind: ASTNodeKind.MODEL_TYPE_DEFINITION, - description: { kind: ASTNodeKind.DESCRIPTION, value: 'My _perfect_ tiny model' }, extendsModels: [], }, ], @@ -183,7 +181,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument { name, - surname + surname, } `); }); @@ -244,7 +242,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument { name: s, - surname + surname, } `); }); @@ -305,7 +303,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument { name?: s, - surname + surname, } `); }); @@ -366,7 +364,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument { name?, - surname + surname, } `); }); @@ -436,7 +434,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument { name?: s[], - surname: b[][] + surname: b[][], } `); }); @@ -503,7 +501,7 @@ AcDocument { expect(printed).toEqual(dedent` AcDocument !{ name?: s[], - surname: b[] + surname: b[], } `); }); @@ -574,7 +572,7 @@ AcDocument !{ expect(printed).toEqual(dedent` AcDocument < Kek { name?: s[], - surname: b[] + surname: b[], } `); }); @@ -649,7 +647,7 @@ AcDocument < Kek { expect(printed).toEqual(dedent` AcDocument < Kek, Lel !{ name?: s[], - surname: b[] + surname: b[], } `); }); @@ -746,7 +744,7 @@ AcDocument < Kek, Lel !{ AcDocument < Kek, Lel !{ name?: s[], type?: ( standard | service ), - surname: b[] + surname: b[], } `); }); @@ -944,10 +942,10 @@ AcDocument < Kek, Lel !{ users: { id: i, nickname, - avatar? - }[] + avatar?, + }[], }, - surname: b[] + surname: b[], } `); }); @@ -1010,8 +1008,8 @@ AcDocument < Kek, Lel !{ expect(printed).toEqual(dedent` AcDocument < Kek, Lel !{ pathParameters: !{ - pathParameters: !{} - } + pathParameters: !{}, + }, } `); }); @@ -1068,7 +1066,7 @@ AcDocument < Kek, Lel !{ AcDocument {} AcDocument2 { - name + name, } `); }); @@ -1373,10 +1371,10 @@ AcDocument < Kek, Lel !{ users: { id: i, nickname, - avatar? - }[] + avatar?, + }[], }, - surname: b[] + surname: b[], } `); }); @@ -1468,7 +1466,7 @@ AcDocument < Kek, Lel !{ A ( f | b ) MyModel { - color: A + color: A, } B ( c | d ) From 2d75db1cf931f9f3ae849a3e37b28149dafeac21 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 15:27:33 +0300 Subject: [PATCH 49/70] ommited --- src/language/printer.ts | 7 ++++--- src/printerModel.test.ts | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index 9152708..c4397f3 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -44,12 +44,13 @@ const printDocASTReducerModel: ASTReducer = { }, }, FieldDefinition: { - leave: ({ name, type, optional }) => { + leave: ({ name, type, optional, omitted }) => { + const ommtd = omitted ? '-' : ''; const opt = optional ? '?' : ''; if (type.length === 0) { - return `${name}${opt}`; + return `${ommtd}${name}${opt}`; } - return `${name}${opt}: ${type}`; + return `${ommtd}${name}${opt}: ${type}`; }, }, ListType: { diff --git a/src/printerModel.test.ts b/src/printerModel.test.ts index fc55596..13e93ad 100644 --- a/src/printerModel.test.ts +++ b/src/printerModel.test.ts @@ -742,7 +742,7 @@ AcDocument < Kek, Lel !{ const printed = printModels(ast); expect(printed).toEqual(dedent` AcDocument < Kek, Lel !{ - name?: s[], + -name?: s[], type?: ( standard | service ), surname: b[], } @@ -935,7 +935,7 @@ AcDocument < Kek, Lel !{ const printed = printModels(ast); expect(printed).toEqual(dedent` AcDocument < Kek, Lel !{ - name?: s[], + -name?: s[], type?: ( standard | service ), kek: { conversationId: i, @@ -1359,7 +1359,7 @@ CompanyType ( expect(printed).toEqual(dedent` AcDocument < Kek, Lel !{ - name?: s[], + -name?: s[], type?: ( + amount | - amount | From 59b671b352ba621a8d8c1bb7482f4668f41d7abf Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 15:36:09 +0300 Subject: [PATCH 50/70] fix --- src/language/printer.ts | 6 +----- src/printerModel.test.ts | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index c4397f3..3b6aca1 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -88,11 +88,7 @@ const printDocASTReducerModel: ASTReducer = { }, EnumTypeDefinition: { leave: ({ name, values }) => { - const str = `${name} ( ${join(values, ' | ')} )`; - if (str.length > MAX_LINE_LENGTH) { - return `${name} ${enumBlock(values)}`; - } - return str; + return `${name} ${enumBlock(values)}`; }, }, }; diff --git a/src/printerModel.test.ts b/src/printerModel.test.ts index 13e93ad..dd1ee47 100644 --- a/src/printerModel.test.ts +++ b/src/printerModel.test.ts @@ -1102,8 +1102,12 @@ AcDocument2 { ], }; const printed = printModels(ast); + expect(printed).toEqual(dedent` -A ( f | b ) + A ( + f | + b + ) `); }); it('correctly print model with long named enum', () => { @@ -1462,14 +1466,21 @@ AcDocument < Kek, Lel !{ }; const printed = printModels(ast); - expect(printed).toEqual(dedent` -A ( f | b ) -MyModel { - color: A, -} - -B ( c | d ) + expect(printed).toEqual(dedent` + A ( + f | + b + ) + + MyModel { + color: A, + } + + B ( + c | + d + ) `); }); }); From 1b95475cb7bac69488702054ddc916e9f288b073 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 15:47:39 +0300 Subject: [PATCH 51/70] get rid of maybe --- src/language/printer.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/language/printer.ts b/src/language/printer.ts index 3b6aca1..4798ca9 100644 --- a/src/language/printer.ts +++ b/src/language/printer.ts @@ -93,34 +93,32 @@ const printDocASTReducerModel: ASTReducer = { }, }; -/** Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/ */ -type Maybe = null | undefined | T; /** * Given maybeArray, print an empty string if it is null or empty, otherwise * print all items together separated by separator if provided */ -function join(maybeArray: Maybe>, separator = ''): string { +function join(maybeArray: $Maybe>, separator = ''): string { return maybeArray?.filter((x) => x).join(separator) ?? ''; } /** * Given array, print each item on its own line, wrapped in an indented `{ }` block. */ -function block(array: Maybe>): string { +function block(array: $Maybe>): string { return wrap('{\n', indent(join(array, ',\n')), ',\n}'); } /** * Given array, print each item on its own line, wrapped in an indented `( )` block with `|` separator. */ -function enumBlock(array: Maybe>): string { +function enumBlock(array: $Maybe>): string { return wrap('(\n', indent(join(array, ' |\n')), '\n)'); } /** * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string. */ -function wrap(start: string, maybeString: Maybe, end: string = ''): string { +function wrap(start: string, maybeString: $Maybe, end: string = ''): string { return maybeString != null && maybeString !== '' ? start + maybeString + end : ''; } From 6c6c1cc28dde70babb1685b69c5a0e5d94a6191b Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Fri, 23 Jul 2021 17:04:32 +0400 Subject: [PATCH 52/70] Add typedoc (#115) --- .github/workflows/codecov.yml | 6 +- .github/workflows/docs.yml | 48 ++++++++ .gitignore | 3 +- package-lock.json | 109 ++++++++++++++++++ package.json | 10 +- readme.md | 4 + .../base/endpointsKnownHttpVerbs.rule.ts | 6 + .../allowOnlyShorthandProperties.rule.ts | 7 +- ...banUsingTypeDefinitionBeforeDeclaration.ts | 8 +- .../experimental/enumNoSspecialSymbols.ts | 6 + ...finitionShouldStartByNamesapceName.rule.ts | 8 +- .../experimental/uniqTypeDefinition.rule.ts | 7 ++ src/validation/rules/noExplicitString.rule.ts | 4 + ...ntsRecommendedBodyParameterPostfix.rule.ts | 8 +- .../endpointsRecommendedQueryPostfix.rule.ts | 7 +- ...ndpointsRecommendedResponsePostfix.rule.ts | 6 +- .../recommendedBodyModelName.rule.ts | 5 +- .../recommendedFilterPostfix.rule.ts | 4 + .../recommendedModelBodyFieldPostfix.rule.ts | 4 + .../recommendedPostfixForCreateModels.rule.ts | 4 + .../recommendedPostfixForUpdateModels.rule.ts | 4 + 21 files changed, 244 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml index ecea0ee..994baf2 100644 --- a/.github/workflows/codecov.yml +++ b/.github/workflows/codecov.yml @@ -1,4 +1,4 @@ -name: CI +name: Code coverage (CODECOV) # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch @@ -31,7 +31,7 @@ jobs: run: echo "::set-output name=version::$(cat .nvmrc)" shell: bash - - name: Setup Node.js + - name: Setup Node.js uses: actions/setup-node@v2 with: node-version: ${{ steps.read-nvmrc.outputs.version }} @@ -45,7 +45,7 @@ jobs: ${{ runner.os }}-node- - name: Install dependencies - run: npm install + run: npm ci - name: Generate coverage run: npm run test:coverage diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..8c6b46c --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,48 @@ +name: Build and Deploy docs +on: + push: + branches: [master] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Cancel previous workflow runs + uses: styfle/cancel-workflow-action@0.9.0 + with: + access_token: ${{ github.token }} + + - name: Load current commit + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + + - name: Read nvmrc + id: read-nvmrc + run: echo "::set-output name=version::$(cat .nvmrc)" + shell: bash + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ steps.read-nvmrc.outputs.version }} + + - name: Restore cache + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies 🔧 + run: npm ci + + - name: Build docs 📖 + run: npm run docs:typedoc + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@4.1.4 + with: + branch: docs + folder: docs/rules diff --git a/.gitignore b/.gitignore index d792777..764a3b8 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,5 @@ coverage src/cli/spec ./temp/openapi.json openapi.json -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo +docs/rules \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3a5264c..2d19690 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2605,6 +2605,19 @@ "dev": true, "optional": true }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3767,6 +3780,12 @@ "yallist": "^4.0.0" } }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3815,6 +3834,12 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "dev": true + }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -3939,6 +3964,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4113,6 +4144,32 @@ "mimic-fn": "^2.1.0" } }, + "onigasm": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", + "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -4770,6 +4827,17 @@ "dev": true, "optional": true }, + "shiki": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", + "dev": true, + "requires": { + "json5": "^2.2.0", + "onigasm": "^2.2.5", + "vscode-textmate": "5.2.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -5580,12 +5648,41 @@ "is-typedarray": "^1.0.0" } }, + "typedoc": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.4.tgz", + "integrity": "sha512-slZQhvD9U0d9KacktYAyuNMMOXJRFNHy+Gd8xY2Qrqq3eTTTv3frv3N4au/cFnab9t3T5WA0Orb6QUjMc+1bDA==", + "dev": true, + "requires": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^2.1.1", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + } + }, + "typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true + }, "typescript": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, + "uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, + "optional": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5712,6 +5809,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -5800,6 +5903,12 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index b6f2583..a5ac4eb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "ts-real-lang", + "name": "anyspec", "version": "1.0.0", - "description": "", + "description": "Your best friend to deal with api spec", "main": "index.js", "scripts": { "postinstall": "husky install", @@ -19,10 +19,11 @@ "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec", "test:tinyspec:build": "tinyspec --json --add-nulls -s temp/spec/ -o ../", "lint": "eslint --max-warnings 0 'src/**/*.ts'", - "lint:fix": "eslint --fix 'src/**/*.ts'" + "lint:fix": "eslint --fix 'src/**/*.ts'", + "docs:typedoc": "typedoc --entryPoints src/validation/rules --exclude \"**/*+(index|.spec|.e2e|.test).ts\" --exclude \"**/__tests__/*\" --highlightTheme github-light --out docs/rules" }, "author": "", - "license": "ISC", + "license": "MIT", "devDependencies": { "@anyspec/cli": "0.0.1-rc.8", "@types/jest": "^26.0.23", @@ -38,6 +39,7 @@ "tinyspec": "^2.4.9", "ts-jest": "^26.5.6", "ts-node": "^10.0.0", + "typedoc": "^0.21.4", "typescript": "^4.3.2" }, "dependencies": { diff --git a/readme.md b/readme.md index ce5c1ae..a615460 100644 --- a/readme.md +++ b/readme.md @@ -128,6 +128,10 @@ After } ``` +## List of rules + +[Watch docs](https://frolovdev.github.io/anyspec/modules.html) + ## License The code in this project is released under the [MIT License](LICENSE). diff --git a/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts b/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts index 81a1180..8e83024 100644 --- a/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts +++ b/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts @@ -15,6 +15,12 @@ const HTTP_REQUEST_METHODS = [ 'PATCH', ]; +/** + * verb in front of endpoint should be one of available HTTP methods + * + * [https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) + * + */ export function EndpointsKnownHttpVerbs(context: ValidationContext): ASTVisitor { const set = new Set(HTTP_REQUEST_METHODS); diff --git a/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts b/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts index 046f028..81d47c6 100644 --- a/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts +++ b/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts @@ -1,21 +1,24 @@ /** - * + * WIP: it's an experimental module, never use it! * * good ✅ * + * ``` * AcDocument { * field: d, * field2: s, * } + * ``` * * bad ❌ * + * ``` * Document { * field: string, * field2: datetime * } + * ``` * * */ - class AllowOnlyShorthandProperties {} diff --git a/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts b/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts index 300acc4..36ac16d 100644 --- a/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts +++ b/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts @@ -1,26 +1,28 @@ /** - * @description * - * rule should work only in file + * WIP: it's an experimental module, never use it! * * good ✅ * + * ``` * User {} * * AcDocument { * field: User, * field2: s, * } + * ``` * * bad ❌ * - * + * ``` * AcDocument { * field: User, * field2: s, * } * * User {} + * ``` * */ class BanUsingTypeDefinitionBeforeDeclaration {} diff --git a/src/validation/rules/experimental/enumNoSspecialSymbols.ts b/src/validation/rules/experimental/enumNoSspecialSymbols.ts index 7cf96b7..cc2897e 100644 --- a/src/validation/rules/experimental/enumNoSspecialSymbols.ts +++ b/src/validation/rules/experimental/enumNoSspecialSymbols.ts @@ -1,11 +1,17 @@ /** + * + * WIP: it's an experimental module, never use it! * * good ✅ + * ``` * User ( kek | lel | lol) * + * ``` * * bad ❌ * + * ``` * User (+date | -date) + * ``` * */ diff --git a/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts b/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts index 88d6cdc..f27174b 100644 --- a/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts +++ b/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts @@ -1,13 +1,19 @@ /** + * + * WIP: it's an experimental module, never use it! + * * if we pass namesapce, we allow in out directory start type definition with only this prefix * TypeDefinitionShouldStartByNamesapceName(Ac) * good ✅ - * + * ``` * AcDocument {} + * ``` * * bad ❌ * + * ``` * Document {} + * ``` * * */ diff --git a/src/validation/rules/experimental/uniqTypeDefinition.rule.ts b/src/validation/rules/experimental/uniqTypeDefinition.rule.ts index be2b60b..cf884fc 100644 --- a/src/validation/rules/experimental/uniqTypeDefinition.rule.ts +++ b/src/validation/rules/experimental/uniqTypeDefinition.rule.ts @@ -1,15 +1,22 @@ /** + * + * WIP: it's an experimental module, never use it! * * good ✅ + * ``` * User {} * + * * AcDocument {} * + * ``` * bad ❌ * + * ``` * Document {} * * Document {} * + * ``` * */ diff --git a/src/validation/rules/noExplicitString.rule.ts b/src/validation/rules/noExplicitString.rule.ts index a863dfb..694a9b6 100644 --- a/src/validation/rules/noExplicitString.rule.ts +++ b/src/validation/rules/noExplicitString.rule.ts @@ -9,15 +9,19 @@ import { AnySpecError } from '../../error'; * * good ✅ * + * ``` * AcDocument { * field * } + * ``` * * bad ❌ * + * ``` * Document { * field: s * } + * ``` * */ export function NoExplicitStringRule(context: ValidationContext): ASTVisitor { diff --git a/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts index 91fef1e..f45eed2 100644 --- a/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts @@ -12,15 +12,15 @@ const prefixMap = { * * * good ✅ - * + * ``` * POST /endpoint RequestCreateRequestBody * PATCH /endpoint2 RequestUpdateRequestBody - * + * ``` * bad ❌ - * + * ``` * POST /endpoint Request * PATCH /endpoint2 Request - * + * ``` */ export function EndpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { const isInPrefixMap = (verb: string): verb is keyof typeof prefixMap => { diff --git a/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts index e77d44e..0383dc7 100644 --- a/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts @@ -8,13 +8,14 @@ const POSTFIX = 'RequestQuery'; * * * good ✅ - * + * ``` * POST /endpoint?SomeTypeRequestQuery + * ``` * * bad ❌ - * + * ``` * POST /endpoint?SomeType - * + * ``` */ export function EndpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { return { diff --git a/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts index e77a4b4..1f8e7bb 100644 --- a/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts @@ -9,15 +9,17 @@ const POSTFIX = 'Response'; * * * good ✅ - * + * ``` * GET /endpoint * => SomeTypeResponse + * ``` * * bad ❌ * + * ``` * GET /endpoint * => SomeType - * + * ``` */ export function EndpointsRecommendedResponsePostfix(context: ValidationContext): ASTVisitor { return { diff --git a/src/validation/rules/recommended/recommendedBodyModelName.rule.ts b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts index ff1925b..4c286b6 100644 --- a/src/validation/rules/recommended/recommendedBodyModelName.rule.ts +++ b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts @@ -9,16 +9,19 @@ import { ValidationContext } from '../../validationContext'; * if model contains `body` field ensure that model name is substring of body parameter type * * good ✅ - * + * ``` * Model { * body: ModelRequestBody, * } + * ``` * * bad ❌ * + * ``` * Other { * body: ModelRequestBody, * } + * ``` * */ export function RecommendedBodyModelName(context: ValidationContext): ASTVisitor { diff --git a/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts index 0d9f010..de42f60 100644 --- a/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts +++ b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts @@ -11,15 +11,19 @@ const POSTFIX = 'Filter'; * * good ✅ * + * ``` * RequestQuery { * filter: BkConnectionFilter, * } + * ``` * * bad ❌ * + * ``` * RequestQuery { * filter: BkConnection, * } + * ``` * */ export function RecommendedFilterPostfix(context: ValidationContext): ASTVisitor { diff --git a/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts index aeb7325..ac27098 100644 --- a/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts +++ b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts @@ -11,15 +11,19 @@ const POSTFIX = 'RequestBody'; * * good ✅ * + * ``` * RequestQuery { * body: BkConnectionRequestBody, * } + * ``` * * bad ❌ * + * ``` * RequestQuery { * body: BkConnection, * } + * ``` * */ export function RecommendedModelBodyFieldPostfix(context: ValidationContext): ASTVisitor { diff --git a/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts index 04514bd..5efa173 100644 --- a/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts +++ b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts @@ -12,21 +12,25 @@ import { ValidationContext } from '../../validationContext'; * * good ✅ * + * ``` * POST /connections ConnectionCreateRequestBody * => ConnectionResponse` * * ConnectionCreateRequestBody { * connection: BkConnectionNew * } + * ``` * * bad ❌ * + * ``` * POST /connections ConnectionCreateRequestBody * => ConnectionResponse` * * ConnectionCreateRequestBody { * connection: BkConnection * } + * ``` * */ export function RecommendedPostfixForCreateModels(context: ValidationContext): ASTVisitor { diff --git a/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts index 8cb8b7b..4d399f7 100644 --- a/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts +++ b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts @@ -12,21 +12,25 @@ import { ValidationContext } from '../../validationContext'; * * good ✅ * + * ``` * PATCH /connections ConnectionCreateRequestBody * => ConnectionResponse` * * ConnectionCreateRequestBody { * connection: ConnectionUpdate * } + * ``` * * bad ❌ * + * ``` * PATCH /connections ConnectionCreateRequestBody * => ConnectionResponse` * * ConnectionCreateRequestBody { * connection: Connection * } + * ``` * */ export function RecommendedPostfixForUpdateModels(context: ValidationContext): ASTVisitor { From a7f88548fec6c6f47936fced40412982cdf94832 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 16:37:01 +0300 Subject: [PATCH 53/70] wip --- .../recommended/endpointsUpdateRequestResponseMatch.rule.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index 2159c7a..948f2d7 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -159,9 +159,9 @@ function isFieldDefinitionsMatches( } function isNamedTypesPrimitiveMatch(t1: TypeNode, t2: TypeNode) { - if (t1.kind !== ASTNodeKind.NAMED_TYPE || t2.kind !== ASTNodeKind.NAMED_TYPE) { + if (t1.kind !== ASTNodeKind.NAMED_TYPE && t2.kind !== ASTNodeKind.NAMED_TYPE) { // if TypeNodes not Named type not go deeper and compare only kind match - return t1.kind === t2.kind; + return true; } if ( From c039833d63e8e46f6e1a9b6db65a1c3a502ba80d Mon Sep 17 00:00:00 2001 From: Andrey Lukin Date: Fri, 23 Jul 2021 16:54:07 +0300 Subject: [PATCH 54/70] Add Configuration: Allow Enable rules by config (#77) --- package.json | 6 +- src/cli/anyspec.config.js | 15 ++++ src/cli/bin.ts | 87 ++++++++++++++----- src/validation/baseRules.ts | 11 --- src/validation/index.ts | 3 +- ...commendedBodyParameterPostfix.rule.test.ts | 4 +- .../__tests__/knownTypeNames.rule.test.ts | 2 +- .../__tests__/noExplicitString.rule.test.ts | 2 +- src/validation/rules/base/index.ts | 3 + .../rules/{ => base}/knownTypeNames.rule.ts | 13 ++- .../rules/{ => base}/noExplicitString.rule.ts | 10 +-- ...ntsRecommendedBodyParameterPostfix.rule.ts | 2 +- src/validation/rules/recommended/index.ts | 8 ++ src/validation/rules/rulesMap.ts | 22 +++++ src/validation/validate.ts | 3 +- 15 files changed, 133 insertions(+), 58 deletions(-) create mode 100644 src/cli/anyspec.config.js delete mode 100644 src/validation/baseRules.ts create mode 100644 src/validation/rules/base/index.ts rename src/validation/rules/{ => base}/knownTypeNames.rule.ts (85%) rename src/validation/rules/{ => base}/noExplicitString.rule.ts (71%) create mode 100644 src/validation/rules/recommended/index.ts create mode 100644 src/validation/rules/rulesMap.ts diff --git a/package.json b/package.json index a5ac4eb..067bc0d 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,12 @@ "test": "NODE_PATH=./src STAGE=test jest --maxWorkers=4", "test:watch": "NODE_PATH=./src STAGE=test jest --watch", "debug:tests": "NODE_PATH=./src STAGE=test node --inspect-brk ./node_modules/.bin/jest", - "run:cli": "TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true NODE_PATH=./src node -r ts-node/register src/cli/bin.ts src/cli/examples/kek.models.tinyspec -o ./ ", + "run:cli": "TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true NODE_PATH=./src node -r ts-node/register src/cli/bin.ts src/cli/examples/kek.models.tinyspec -o ./", "clean": "rm -rf src/cli/dist", "prepublish:cli": "cd src/cli && npm install && cd .. && npm run clean && npm run build", "publish:cli": "npm publish ./src/cli", - "test:coverage": "NODE_PATH=./src jest --bail --collectCoverage", "test:cli": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/bin.ts src/cli/spec -ns agent client", + "test:coverage": "NODE_PATH=./src jest --bail --collectCoverage", "test:cli-printer": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/autoformat.ts", "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec", "test:tinyspec:build": "tinyspec --json --add-nulls -s temp/spec/ -o ../", @@ -47,4 +47,4 @@ "globby": "^11.0.4", "ora": "^5.4.1" } -} +} \ No newline at end of file diff --git a/src/cli/anyspec.config.js b/src/cli/anyspec.config.js new file mode 100644 index 0000000..71ace5b --- /dev/null +++ b/src/cli/anyspec.config.js @@ -0,0 +1,15 @@ +module.exports = { + rules: { + 'base/known-type-names': 'error', + 'base/no-explicit-string-rule': 'off', + 'base/endpoints-known-http-verbs': 'off', + 'recommended/endpoints-body-parameter-postfix': 'off', + 'recommended/endpoints-query-postfix': 'off', + 'recommended/endpoints-response-postfix': 'off', + 'recommended/body-model-name': 'off', + 'recommended/filter-postfix': 'off', + 'recommended/model-body-field-postfix': 'off', + 'recommended/postfix-for-create-models': 'off', + 'recommended/postfix-for-update-models': 'off', + }, +}; diff --git a/src/cli/bin.ts b/src/cli/bin.ts index fb5fd42..2845a7f 100644 --- a/src/cli/bin.ts +++ b/src/cli/bin.ts @@ -5,12 +5,14 @@ import { default as getPath } from 'path'; import { readFile } from 'fs/promises'; import { parse, Source, DocumentNode } from '../language'; import { AnySpecSchema } from '../runtypes'; -import { validate, baseRules } from '../validation'; +import { validate, rulesMap } from '../validation'; import { AnySpecError, printError } from '../error'; import { sync as glob } from 'globby'; import ora from 'ora'; import { concatAST } from '../language/concatAST'; +type Config = { rules: Record }; + async function main() { const program = new Command(); program @@ -21,6 +23,7 @@ async function main() { 'name of common namespace where shared definitions stored', 'common', ) + .option('-c, --config ', 'path to config file', './anyspec.config.js') .arguments(''); program.parse(); @@ -31,9 +34,10 @@ async function main() { commonNamespace: string; namespaces?: string[]; outDir?: string; + config: string; }; - const { namespaces, outDir, commonNamespace } = options; + const { namespaces, outDir, commonNamespace, config: configPath } = options; if (!namespaces) { throw new Error('please provide namespaces'); @@ -45,34 +49,46 @@ async function main() { const processingSpinner = ora(`Processing spec: ${argumentPath}`).start(); const specFilePaths = glob(`${argumentPath}/**/*.tinyspec`); + try { + const sources = await mapPathsToSources(specFilePaths); + + const config = await readConfig(configPath); + const groupedSources = groupSourcesByNamespaces({ sources, commonNamespace, namespaces }); + + const { groupedParsedDocuments, parsingErrors } = getGroupedDocuments( + groupedSources, + (error: Error) => { + console.error('Unknown error during parsing', error); + processingSpinner.fail(); + process.exit(1); + }, + ); + + if (parsingErrors.length > 0) { + for (const e of parsingErrors) { + console.error(printCliError(printError(e))); + } - const sources = await mapPathsToSources(specFilePaths); - - const groupedSources = groupSourcesByNamespaces({ sources, commonNamespace, namespaces }); - - const { groupedParsedDocuments, parsingErrors } = getGroupedDocuments( - groupedSources, - (error: Error) => { - console.error('Unknown error during parsing', error); processingSpinner.fail(); - process.exit(1); - }, - ); - - if (parsingErrors.length > 0) { - for (const e of parsingErrors) { - console.error(printCliError(printError(e))); + return; } + const { enabledRules, invalidRules } = parseConfig(config); + + const enabledRulesFns = enabledRules.map((rule) => rulesMap[rule]); + const unitedASTs = groupedParsedDocuments.map((documents) => concatAST(documents)); + const schemas = unitedASTs.map((ast) => new AnySpecSchema({ ast })); + const errors = schemas.map((s, index) => validate(s, unitedASTs[index], enabledRulesFns)); + errors.flat().forEach((e) => { + const errorString = printError(e); + console.error(errorString); + }); + invalidRules.forEach((e) => console.error(printCliError(`Invalid Rule: ${e}`))); + processingSpinner.succeed(); + } catch (e) { + console.error(e); processingSpinner.fail(); - return; } - - const unitedASTs = groupedParsedDocuments.map((documents) => concatAST(documents)); - const schemas = unitedASTs.map((ast) => new AnySpecSchema({ ast })); - const errors = schemas.map((s, index) => validate(s, unitedASTs[index], baseRules)); - errors.flat().forEach((e) => console.error(printCliError(printError(e)))); - processingSpinner.succeed(); } main(); @@ -111,6 +127,29 @@ async function mapPathsToSources(paths: string[]): Promise { return sources; } +function readConfig(path: string): Config { + try { + const configFile = require(path); + const isConfig = (configFile: unknown): configFile is Config => { + return (configFile as Config).rules !== undefined; + }; + if (!isConfig(configFile)) { + throw new Error(`Invalid config file`); + } + return configFile; + } catch (e) { + throw e; + } +} + +function parseConfig({ rules }: Config): { enabledRules: string[]; invalidRules: string[] } { + const existingRules = Object.keys(rulesMap); + const enabled = Object.keys(rules).filter((key) => rules[key] === 'error'); + const invalidRules = enabled.filter((rule) => !existingRules.includes(rule)); + const validRules = enabled.filter((rule) => existingRules.includes(rule)); + return { enabledRules: validRules, invalidRules }; +} + function groupSourcesByNamespaces({ sources, namespaces, diff --git a/src/validation/baseRules.ts b/src/validation/baseRules.ts deleted file mode 100644 index d8b77b3..0000000 --- a/src/validation/baseRules.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { KnownTypeNamesRule } from './rules/knownTypeNames.rule'; -import { NoExplicitStringRule } from './rules/noExplicitString.rule'; -import { ValidationRule } from './validationContext'; - -/** - * This set includes all validation rules defined by the base spec. - * - * The order of the rules in this list has been adjusted to lead to the - * most clear output when encountering multiple validation errors. - */ -export const baseRules: ReadonlyArray = [NoExplicitStringRule, KnownTypeNamesRule]; diff --git a/src/validation/index.ts b/src/validation/index.ts index b49c5b0..cc2b213 100644 --- a/src/validation/index.ts +++ b/src/validation/index.ts @@ -1,2 +1,3 @@ export { validate } from './validate'; -export { baseRules } from './baseRules'; + +export { rulesMap } from './rules/rulesMap'; diff --git a/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts b/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts index 992c86a..a60402b 100644 --- a/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts @@ -1,9 +1,9 @@ import { toJSONDeep } from '../../../utils'; -import { EndpointsRecommendedQueryPostfix } from '../recommended/endpointsRecommendedBodyParameterPostfix.rule'; +import { EndpointsRecommendedBodyParameterPostfix } from '../recommended/endpointsRecommendedBodyParameterPostfix.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(EndpointsRecommendedQueryPostfix, queryStr, 'endpoints'); + return expectValidationErrors(EndpointsRecommendedBodyParameterPostfix, queryStr, 'endpoints'); } function expectValid(queryStr: string) { diff --git a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts index 94cbdaf..00d3399 100644 --- a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts +++ b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts @@ -2,7 +2,7 @@ import { validate } from '../..'; import { ASTNodeKind, parse, Source } from '../../../language'; import { AnySpecSchema, specifiedScalarTypes } from '../../../runtypes'; import { toJSONDeep } from '../../../utils'; -import { KnownTypeNamesRule } from '../knownTypeNames.rule'; +import { KnownTypeNamesRule } from '../base/knownTypeNames.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { diff --git a/src/validation/rules/__tests__/noExplicitString.rule.test.ts b/src/validation/rules/__tests__/noExplicitString.rule.test.ts index d4085ed..98fb0ac 100644 --- a/src/validation/rules/__tests__/noExplicitString.rule.test.ts +++ b/src/validation/rules/__tests__/noExplicitString.rule.test.ts @@ -1,5 +1,5 @@ import { toJSONDeep } from '../../../utils'; -import { NoExplicitStringRule } from '../noExplicitString.rule'; +import { NoExplicitStringRule } from '../base'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { diff --git a/src/validation/rules/base/index.ts b/src/validation/rules/base/index.ts new file mode 100644 index 0000000..05c9b60 --- /dev/null +++ b/src/validation/rules/base/index.ts @@ -0,0 +1,3 @@ +export * from "./endpointsKnownHttpVerbs.rule" +export * from "./knownTypeNames.rule" +export * from "./noExplicitString.rule" diff --git a/src/validation/rules/knownTypeNames.rule.ts b/src/validation/rules/base/knownTypeNames.rule.ts similarity index 85% rename from src/validation/rules/knownTypeNames.rule.ts rename to src/validation/rules/base/knownTypeNames.rule.ts index d5a169e..079e416 100644 --- a/src/validation/rules/knownTypeNames.rule.ts +++ b/src/validation/rules/base/knownTypeNames.rule.ts @@ -1,16 +1,15 @@ -import { didYouMean, suggestionList } from '../../utils'; - -import { AnySpecError } from '../../error'; +import { didYouMean, suggestionList } from '../../../utils'; +import { AnySpecError } from '../../../error'; import { ASTNode, NamedTypeNode, isModelDomainDefinitionNode, isEndpointNamespaceTypeDefinitionNode, -} from '../../language'; -import { ASTVisitor } from '../../visitor'; -import { specifiedScalarTypes } from '../../runtypes'; +} from '../../../language'; +import { ASTVisitor } from '../../../visitor'; +import { specifiedScalarTypes } from '../../../runtypes'; -import { ValidationContext } from '../validationContext'; +import { ValidationContext } from '../../validationContext'; const standardTypeNames = specifiedScalarTypes; /** diff --git a/src/validation/rules/noExplicitString.rule.ts b/src/validation/rules/base/noExplicitString.rule.ts similarity index 71% rename from src/validation/rules/noExplicitString.rule.ts rename to src/validation/rules/base/noExplicitString.rule.ts index 694a9b6..e960cd9 100644 --- a/src/validation/rules/noExplicitString.rule.ts +++ b/src/validation/rules/base/noExplicitString.rule.ts @@ -1,9 +1,9 @@ -import { ASTVisitor } from '../../visitor'; +import { ASTVisitor } from '../../../visitor'; -import { ValidationContext } from '../validationContext'; -import { stringAliases } from '../../runtypes/specifiedScalarTypes'; -import { ASTNodeKind } from '../../language'; -import { AnySpecError } from '../../error'; +import { ValidationContext } from '../../validationContext'; +import { stringAliases } from '../../../runtypes/specifiedScalarTypes'; +import { ASTNodeKind } from '../../../language'; +import { AnySpecError } from '../../../error'; /** * diff --git a/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts index f45eed2..87f32a3 100644 --- a/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts @@ -22,7 +22,7 @@ const prefixMap = { * PATCH /endpoint2 Request * ``` */ -export function EndpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { +export function EndpointsRecommendedBodyParameterPostfix(context: ValidationContext): ASTVisitor { const isInPrefixMap = (verb: string): verb is keyof typeof prefixMap => { const keys = Object.keys(prefixMap); return keys.includes(verb); diff --git a/src/validation/rules/recommended/index.ts b/src/validation/rules/recommended/index.ts new file mode 100644 index 0000000..557177d --- /dev/null +++ b/src/validation/rules/recommended/index.ts @@ -0,0 +1,8 @@ +export * from './endpointsRecommendedBodyParameterPostfix.rule'; +export * from './endpointsRecommendedQueryPostfix.rule'; +export * from './endpointsRecommendedResponsePostfix.rule'; +export * from './recommendedBodyModelName.rule'; +export * from './recommendedFilterPostfix.rule'; +export * from './recommendedModelBodyFieldPostfix.rule'; +export * from './recommendedPostfixForCreateModels.rule'; +export * from './recommendedPostfixForUpdateModels.rule'; diff --git a/src/validation/rules/rulesMap.ts b/src/validation/rules/rulesMap.ts new file mode 100644 index 0000000..c59e39e --- /dev/null +++ b/src/validation/rules/rulesMap.ts @@ -0,0 +1,22 @@ +import { ASTVisitor } from '../../visitor'; +import { ValidationContext } from '../ValidationContext'; +import * as Base from './base'; +import * as Recommended from './recommended'; + +/** + * This record includes all available validation rules. + */ +export const rulesMap: Record ASTVisitor> = { + 'base/known-type-names': Base.KnownTypeNamesRule, + 'base/no-explicit-string-rule': Base.NoExplicitStringRule, + 'base/endpoints-known-http-verbs': Base.EndpointsKnownHttpVerbs, + 'recommended/endpoints-body-parameter-postfix': + Recommended.EndpointsRecommendedBodyParameterPostfix, + 'recommended/endpoints-query-postfix': Recommended.EndpointsRecommendedQueryPostfix, + 'recommended/endpoints-response-postfix': Recommended.EndpointsRecommendedResponsePostfix, + 'recommended/body-model-name': Recommended.RecommendedBodyModelName, + 'recommended/filter-postfix': Recommended.RecommendedFilterPostfix, + 'recommended/model-body-field-postfix': Recommended.RecommendedModelBodyFieldPostfix, + 'recommended/postfix-for-create-models': Recommended.RecommendedPostfixForCreateModels, + 'recommended/postfix-for-update-models': Recommended.RecommendedPostfixForUpdateModels, +}; diff --git a/src/validation/validate.ts b/src/validation/validate.ts index 25bfdcd..576c489 100644 --- a/src/validation/validate.ts +++ b/src/validation/validate.ts @@ -5,7 +5,6 @@ import { visit } from '../visitor'; import { AnySpecSchema } from '../runtypes'; import { ValidationRule } from './validationContext'; -import { baseRules } from './baseRules'; import { ValidationContext } from './validationContext'; import { assert } from '../utils'; @@ -28,7 +27,7 @@ import { assert } from '../utils'; export function validate( schema: AnySpecSchema, documentAST: DocumentNode, - rules: ReadonlyArray = baseRules, + rules: ReadonlyArray, options: { maxErrors?: number } = { maxErrors: undefined }, ): ReadonlyArray { assert(documentAST, 'Must provide document.'); From 013f928a46a8e8693e9b4484a0c252417ca58994 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 18:15:21 +0300 Subject: [PATCH 55/70] add more tests --- src/cli/anyspec.config.js | 1 + ...ntsUpdateRequestResponseMatch.rule.test.ts | 50 +++++++++++++++++++ ...ndpointsUpdateRequestResponseMatch.rule.ts | 13 +++-- src/validation/rules/recommended/index.ts | 1 + src/validation/rules/rulesMap.ts | 2 + 5 files changed, 62 insertions(+), 5 deletions(-) diff --git a/src/cli/anyspec.config.js b/src/cli/anyspec.config.js index 71ace5b..bb8ed6a 100644 --- a/src/cli/anyspec.config.js +++ b/src/cli/anyspec.config.js @@ -11,5 +11,6 @@ module.exports = { 'recommended/model-body-field-postfix': 'off', 'recommended/postfix-for-create-models': 'off', 'recommended/postfix-for-update-models': 'off', + 'recommended/endpoints-update-request-response-match': 'off', }, }; diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index afcd9fc..9de7ce3 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -166,6 +166,56 @@ PATCH /endpoint ConnectionUpdateRequestBody field: {c: number} field2: string } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + it('should ignore named model types', () => { + const endpointString = ` +PATCH /endpoint ModelUpdate + => ModelResponse +`; + + const modelString = ` +ModelResponse { + entity: Model, +} + +Model { + field1: number, + field2: number +} + +ModelUpdate { + entity: { + field1: string, + field2: number + }, +} `; const sourceEndpoints = new Source({ diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index 948f2d7..f25a81a 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -18,10 +18,11 @@ import { ValidationContext } from '../../validationContext'; * In PATCH RequestBody primitive types should match with Response primitive types * * good ✅ - * + * ``` * PATCH /endpoint ConnectionUpdateRequestBody * => ConnectionResponse - * + * ``` + * ``` * ConnectionUpdateRequestBody { * field: string * field2: string @@ -31,12 +32,14 @@ import { ValidationContext } from '../../validationContext'; * field: string * field2: string * } + * ``` * * bad ❌ - * + * ``` * PATCH /endpoint ConnectionCreateRequestBody * => ConnectionResponse - * + * ``` + * ``` * ConnectionCreateRequestBody { * field: string * field2: number @@ -46,7 +49,7 @@ import { ValidationContext } from '../../validationContext'; * field: number * field2: number * } - * + * ``` */ export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): ASTVisitor { const findModelDefinition = (name?: string): ModelTypeDefinitionNode | undefined => { diff --git a/src/validation/rules/recommended/index.ts b/src/validation/rules/recommended/index.ts index 557177d..c208581 100644 --- a/src/validation/rules/recommended/index.ts +++ b/src/validation/rules/recommended/index.ts @@ -6,3 +6,4 @@ export * from './recommendedFilterPostfix.rule'; export * from './recommendedModelBodyFieldPostfix.rule'; export * from './recommendedPostfixForCreateModels.rule'; export * from './recommendedPostfixForUpdateModels.rule'; +export * from './endpointsUpdateRequestResponseMatch.rule'; diff --git a/src/validation/rules/rulesMap.ts b/src/validation/rules/rulesMap.ts index c59e39e..86ee4de 100644 --- a/src/validation/rules/rulesMap.ts +++ b/src/validation/rules/rulesMap.ts @@ -19,4 +19,6 @@ export const rulesMap: Record ASTVisitor 'recommended/model-body-field-postfix': Recommended.RecommendedModelBodyFieldPostfix, 'recommended/postfix-for-create-models': Recommended.RecommendedPostfixForCreateModels, 'recommended/postfix-for-update-models': Recommended.RecommendedPostfixForUpdateModels, + 'recommended/endpoints-update-request-response-match': + Recommended.EndpointsUpdateRequestResponseMatch, }; From f4a49b3e0529ff0aa9970941440bc30739fd58d0 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 18:19:23 +0300 Subject: [PATCH 56/70] more test --- ...ntsUpdateRequestResponseMatch.rule.test.ts | 92 ++++++++++++++----- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index 9de7ce3..b796eab 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -14,12 +14,56 @@ PATCH /endpoint ConnectionUpdateRequestBody const modelString = ` ConnectionUpdateRequestBody { - field: string - field2: string + field: string, + field2: string, } ConnectionResponse { - field: string - field2: string + field: string, + field2: string, + } + `; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = { + kind: ASTNodeKind.DOCUMENT, + definitions: [...astEndpoints.definitions, ...astModels.definitions], + }; + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + + expect(errors).toEqual([]); + }); + + it('should be valid with shorten and default type names', () => { + const endpointString = ` +PATCH /endpoint ConnectionUpdateRequestBody + => ConnectionResponse +`; + + const modelString = ` + ConnectionUpdateRequestBody { + field, + field2: i, + } + ConnectionResponse { + field: string, + field2: integer, } `; @@ -58,8 +102,8 @@ PATCH /endpoint { field: string, field2: string } const modelString = ` ConnectionResponse { - field: string - field2: string + field: string, + field2: string, } `; @@ -98,8 +142,8 @@ PATCH /endpoint ConnectionUpdateRequestBody const modelString = ` ConnectionUpdateRequestBody { - field: string - field2: string + field: string, + field2: string, } `; @@ -159,12 +203,12 @@ PATCH /endpoint ConnectionUpdateRequestBody const modelString = ` ConnectionUpdateRequestBody { - field: {a: s} - field2: string + field: {a: s}, + field2: string, } ConnectionResponse { - field: {c: number} - field2: string + field: {c: number}, + field2: string, } `; @@ -207,13 +251,13 @@ ModelResponse { Model { field1: number, - field2: number + field2: number, } ModelUpdate { entity: { field1: string, - field2: number + field2: number, }, } `; @@ -254,12 +298,12 @@ PATCH /endpoint ConnectionUpdateRequestBody const modelString = ` ConnectionUpdateRequestBody { - field: number - field2: string + field: number, + field2: string, } ConnectionResponse { - field: string - field2: string + field: string, + field2: string, } `; @@ -303,8 +347,8 @@ PATCH /endpoint { field: number, field2: string } const modelString = ` ConnectionResponse { - field: string - field2: string + field: string, + field2: string, } `; @@ -347,8 +391,8 @@ PATCH /endpoint ConnectionUpdateRequestBody const modelString = ` ConnectionUpdateRequestBody { - field: string - field2: number + field: string, + field2: number, } `; @@ -410,8 +454,8 @@ PATCH /endpoint { field: string, field2: number } }); it('should be invalid with inline models with non matching fields', () => { const endpointString = ` -PATCH /endpoint { field: string, field2: string, f:s } - => { field: string, field2: string } +PATCH /endpoint { field: string, field2: string } + => { field: string, field3: string } `; const sourceEndpoints = new Source({ From d40774a4bb91b15b342c83c9743ca5fff68e60ee Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jul 2021 18:29:57 +0300 Subject: [PATCH 57/70] fix --- ...ntsUpdateRequestResponseMatch.rule.test.ts | 72 ++++++------------- ...ndpointsUpdateRequestResponseMatch.rule.ts | 2 +- src/validation/rules/rulesMap.ts | 2 +- 3 files changed, 25 insertions(+), 51 deletions(-) diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index b796eab..418e37d 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -1,8 +1,9 @@ import { validate } from '../..'; import { ASTNodeKind, parse, Source } from '../../../language'; +import { concatAST } from '../../../language/concatAST'; import { AnySpecSchema } from '../../../runtypes'; import { toJSONDeep } from '../../../utils'; -import { EndpointsUpdateRequestResponseMatch } from '../recommended/endpointsUpdateRequestResponseMatch.rule'; +import { endpointsUpdateRequestResponseMatch } from '../recommended/endpointsUpdateRequestResponseMatch.rule'; describe(__filename, () => { describe('valid', () => { @@ -38,14 +39,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -82,14 +80,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -122,14 +117,11 @@ PATCH /endpoint { field: string, field2: string } const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -162,14 +154,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -190,7 +179,7 @@ PATCH /endpoint { field: string, field2: string } const schema = new AnySpecSchema({ ast: astEndpoints }); - const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, astEndpoints, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -227,14 +216,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -277,14 +263,11 @@ ModelUpdate { const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(errors).toEqual([]); }); @@ -323,14 +306,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(toJSONDeep(errors)).toEqual([ { @@ -367,14 +347,11 @@ PATCH /endpoint { field: number, field2: string } const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(toJSONDeep(errors)).toEqual([ { @@ -411,14 +388,11 @@ PATCH /endpoint ConnectionUpdateRequestBody const astEndpoints = parse(sourceEndpoints); const astModels = parse(sourceModels); - const combined = { - kind: ASTNodeKind.DOCUMENT, - definitions: [...astEndpoints.definitions, ...astModels.definitions], - }; + const combined = concatAST([astEndpoints, astModels]); const schema = new AnySpecSchema({ ast: combined }); - const errors = validate(schema, combined, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, combined, [endpointsUpdateRequestResponseMatch]); expect(toJSONDeep(errors)).toEqual([ { @@ -443,7 +417,7 @@ PATCH /endpoint { field: string, field2: number } const schema = new AnySpecSchema({ ast: astEndpoints }); - const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, astEndpoints, [endpointsUpdateRequestResponseMatch]); expect(toJSONDeep(errors)).toEqual([ { @@ -468,7 +442,7 @@ PATCH /endpoint { field: string, field2: string } const schema = new AnySpecSchema({ ast: astEndpoints }); - const errors = validate(schema, astEndpoints, [EndpointsUpdateRequestResponseMatch]); + const errors = validate(schema, astEndpoints, [endpointsUpdateRequestResponseMatch]); expect(toJSONDeep(errors)).toEqual([ { locations: [{ line: 3, column: 8 }], diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index f25a81a..d259fab 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -51,7 +51,7 @@ import { ValidationContext } from '../../validationContext'; * } * ``` */ -export function EndpointsUpdateRequestResponseMatch(context: ValidationContext): ASTVisitor { +export function endpointsUpdateRequestResponseMatch(context: ValidationContext): ASTVisitor { const findModelDefinition = (name?: string): ModelTypeDefinitionNode | undefined => { let definition: ModelTypeDefinitionNode | undefined = undefined; visit(context.getDocument(), { diff --git a/src/validation/rules/rulesMap.ts b/src/validation/rules/rulesMap.ts index 86ee4de..8c63e3c 100644 --- a/src/validation/rules/rulesMap.ts +++ b/src/validation/rules/rulesMap.ts @@ -20,5 +20,5 @@ export const rulesMap: Record ASTVisitor 'recommended/postfix-for-create-models': Recommended.RecommendedPostfixForCreateModels, 'recommended/postfix-for-update-models': Recommended.RecommendedPostfixForUpdateModels, 'recommended/endpoints-update-request-response-match': - Recommended.EndpointsUpdateRequestResponseMatch, + Recommended.endpointsUpdateRequestResponseMatch, }; From 710ef603f54e0f4c6a64b92014d693d5d76f6c79 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:14:25 +0400 Subject: [PATCH 58/70] update gitignore --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a66609b..764a3b8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,10 +9,14 @@ coverage .idea .vscode +.now **/*.log .huskyrc.local.js src/cli/spec -temp/openapi.json \ No newline at end of file +./temp/openapi.json +openapi.json +tsconfig.tsbuildinfo +docs/rules \ No newline at end of file From d2da80bcba77f8b8c58aa0d84a175c30fb9a157d Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:15:00 +0400 Subject: [PATCH 59/70] docs: add license --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..96d3e00 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 anyspec + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From f24bd5fd7b855c62e069f42f3195db16b23d7bd1 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:15:34 +0400 Subject: [PATCH 60/70] ci: add ci --- .github/workflows/codecov.yml | 56 +++++++++++++++++ .github/workflows/default.yml | 49 +++++++++++++++ .github/workflows/docs.yml | 49 +++++++++++++++ package-lock.json | 111 +++++++++++++++++++++++++++++++++- package.json | 27 ++++++--- 5 files changed, 281 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/codecov.yml create mode 100644 .github/workflows/default.yml create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml new file mode 100644 index 0000000..994baf2 --- /dev/null +++ b/.github/workflows/codecov.yml @@ -0,0 +1,56 @@ +name: Code coverage (CODECOV) + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch + +on: + push: + branches: [master] + paths-ignore: + - 'docs/**' + pull_request: + branches: [master] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + codecov: + runs-on: ubuntu-20.04 + steps: + - name: Cancel previous workflow runs + uses: styfle/cancel-workflow-action@0.9.0 + with: + access_token: ${{ github.token }} + + - name: Load current commit + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + + - name: Read nvmrc + id: read-nvmrc + run: echo "::set-output name=version::$(cat .nvmrc)" + shell: bash + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ steps.read-nvmrc.outputs.version }} + + - name: Restore cache + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: npm ci + + - name: Generate coverage + run: npm run test:coverage + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml new file mode 100644 index 0000000..6bbaed0 --- /dev/null +++ b/.github/workflows/default.yml @@ -0,0 +1,49 @@ +name: Default pipeline + +on: + push: + branches: [master] + pull_request: + branches: [master] + + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Cancel previous workflow runs + uses: styfle/cancel-workflow-action@0.9.0 + with: + access_token: ${{ github.token }} + + - name: Load current commit + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + + - name: Read nvmrc + id: read-nvmrc + run: echo "::set-output name=version::$(cat .nvmrc)" + shell: bash + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ steps.read-nvmrc.outputs.version }} + + - name: Restore cache + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies 🔧 + run: npm ci + + - name: Static checks ⚙️ + run: npm run static-checks + + - name: Tests + run: npm run test:ci diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..2878c46 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,49 @@ +name: Build and Deploy docs + +on: + push: + branches: [master] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Cancel previous workflow runs + uses: styfle/cancel-workflow-action@0.9.0 + with: + access_token: ${{ github.token }} + + - name: Load current commit + uses: actions/checkout@v2 + with: + ref: ${{ github.ref }} + + - name: Read nvmrc + id: read-nvmrc + run: echo "::set-output name=version::$(cat .nvmrc)" + shell: bash + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: ${{ steps.read-nvmrc.outputs.version }} + + - name: Restore cache + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies 🔧 + run: npm ci + + - name: Build docs 📖 + run: npm run docs:typedoc + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@4.1.4 + with: + branch: docs + folder: docs/rules diff --git a/package-lock.json b/package-lock.json index 3a5264c..0d2866e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "ts-real-lang", + "name": "anyspec", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -2605,6 +2605,19 @@ "dev": true, "optional": true }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3767,6 +3780,12 @@ "yallist": "^4.0.0" } }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3815,6 +3834,12 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "dev": true + }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -3939,6 +3964,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4113,6 +4144,32 @@ "mimic-fn": "^2.1.0" } }, + "onigasm": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", + "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", + "dev": true, + "requires": { + "lru-cache": "^5.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -4770,6 +4827,17 @@ "dev": true, "optional": true }, + "shiki": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.5.tgz", + "integrity": "sha512-XFn+rl3wIowDjzdr5DlHoHgQphXefgUTs2bNp/bZu4WF9gTrTLnKwio3f28VjiFG6Jpip7yQn/p4mMj6OrjrtQ==", + "dev": true, + "requires": { + "json5": "^2.2.0", + "onigasm": "^2.2.5", + "vscode-textmate": "5.2.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -5580,12 +5648,41 @@ "is-typedarray": "^1.0.0" } }, + "typedoc": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.4.tgz", + "integrity": "sha512-slZQhvD9U0d9KacktYAyuNMMOXJRFNHy+Gd8xY2Qrqq3eTTTv3frv3N4au/cFnab9t3T5WA0Orb6QUjMc+1bDA==", + "dev": true, + "requires": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^2.1.1", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.3", + "typedoc-default-themes": "^0.12.10" + } + }, + "typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true + }, "typescript": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", "dev": true }, + "uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, + "optional": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5712,6 +5809,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -5800,6 +5903,12 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index 0320224..6803db9 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,31 @@ { - "name": "ts-real-lang", + "name": "anyspec", "version": "1.0.0", - "description": "", + "description": "Your best friend to deal with api spec", "main": "index.js", "scripts": { + "postinstall": "husky install", "build": "tsc --project tsconfig.build.json --outDir ./src/cli/dist", - "test": "NODE_PATH=./src STAGE=test jest --maxWorkers=4", - "test:watch": "NODE_PATH=./src STAGE=test jest --watch", - "debug:tests": "NODE_PATH=./src STAGE=test node --inspect-brk ./node_modules/.bin/jest", - "run:cli": "TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true NODE_PATH=./src node -r ts-node/register src/cli/bin.ts src/cli/examples/kek.models.tinyspec -o ./ ", + "test": "NODE_PATH=./src jest --maxWorkers=4", + "test:ci": "NODE_PATH=./src jest --silent --maxWorkers=4", + "test:watch": "NODE_PATH=./src jest --watch", + "debug:tests": "NODE_PATH=./src node --inspect-brk ./node_modules/.bin/jest", + "run:cli": "TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true NODE_PATH=./src node -r ts-node/register src/cli/bin.ts src/cli/examples/kek.models.tinyspec -o ./", "clean": "rm -rf src/cli/dist", "prepublish:cli": "cd src/cli && npm install && cd .. && npm run clean && npm run build", "publish:cli": "npm publish ./src/cli", - "test:cli": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/bin.ts src/cli/spec -o ./", - "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec -o ./", + "test:cli": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/bin.ts src/cli/examples -ns agent client -c ./src/cli/anyspec.config", + "test:coverage": "NODE_PATH=./src jest --bail --collectCoverage", + "test:cli-printer": "NODE_PATH=./src TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node src/cli/autoformat.ts", + "test:integration:anyspec:cli": "anyspec src/cli/examples/kek.models.tinyspec", "test:tinyspec:build": "tinyspec --json --add-nulls -s temp/spec/ -o ../", "lint": "eslint --max-warnings 0 'src/**/*.ts'", - "lint:fix": "eslint --fix 'src/**/*.ts'" + "lint:fix": "eslint --fix 'src/**/*.ts'", + "docs:typedoc": "typedoc --entryPoints src/validation/rules --exclude \"**/*+(index|.spec|.e2e|.test).ts\" --exclude \"**/__tests__/*\" --highlightTheme github-light --out docs/rules", + "static-checks": "npm run build && npm run lint" }, "author": "", - "license": "ISC", + "license": "MIT", "devDependencies": { "@anyspec/cli": "0.0.1-rc.8", "@types/jest": "^26.0.23", @@ -35,6 +41,7 @@ "tinyspec": "^2.4.9", "ts-jest": "^26.5.6", "ts-node": "^10.0.0", + "typedoc": "^0.21.4", "typescript": "^4.3.2" }, "dependencies": { From 5395a525abf881b439d0919539d4748d9e3f6e68 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:15:56 +0400 Subject: [PATCH 61/70] docs: update readme --- assets/after.png | Bin 0 -> 435076 bytes assets/before.png | Bin 0 -> 122898 bytes assets/osome.svg | 1 + docs/anyspec-next.md | 5 ++ readme.md | 199 ++++++++++++++++++++++++++++--------------- 5 files changed, 134 insertions(+), 71 deletions(-) create mode 100644 assets/after.png create mode 100644 assets/before.png create mode 100644 assets/osome.svg create mode 100644 docs/anyspec-next.md diff --git a/assets/after.png b/assets/after.png new file mode 100644 index 0000000000000000000000000000000000000000..915711e35ceef95855a450a7125a4f69edd8c3b7 GIT binary patch literal 435076 zcmZ^K1yt1C);=Xt(o(|EB_$~^15(2bHA72EODkOx(#_B!!XQJZk`jWFLr6E$4bl#X z2>9oI-@WgP@BRL3{aouT)_Bf7XYc)-XYaFjv?dI4hlqg)3k&Ox3RFoO3k%N&3yb74 z0si%08p2vZSXeArDoXOYK2LUAZclT9Uw<-HOa!gT(;egBiyn9^%3A6RxLW!EeG^-KV$0`^RKJY=Wr$cO(yBwj^ySJ>)B_6fB*v4_G5W zf|pn~J~;`TMDiI;BOuPASSvZm{(=q<&L)RmUYfo07(?{uUK3$hY;4)N6}Me9R*BkD zK9f&9p9 zg2%#nT#Y~E1!DCvatV#I!ya%Wkla{~dh*Bbu<*_mvE0~(8nMtm3FM%pFD#sF!Sn-d zLh;NA_TW!H|A5=Bg)A%An>>+xqrEQLJ6+v;0p^aKF5 zG8J0-l-9r%n~Z7SAwvaeHQE2wy;3MgO93KlM9rlc9!f1$( zm(jy}+)u68eUue+Yg^ZjnWtYop1sg z;SlpgpJXM5BVoi*--_Rp#Vv}KCo}kl^~G@pSJ6C@Ntan=6U09%pu4TlF684Uz>n{G zmlC}tP$Zlxoha2AOF3|JLtL4k4ODZGeMr|t+R(G=IO(D!8c<6b4SnTD*C+SxiI(8z zrYwg*Xm6^J3U0m|28Y|g6NsJ1!BL1do_EgHw}u*s5?xInla}BnC9mqo$=+P$dTdEx zO#!#M|3cX?A}()@UZqVmfzq0B3a@0f$wp4E>p~uEe8cC0wKx;O@fe3ALw&J`YFkF| z5KkpxNYU*Nu~o@H`q6jY@SwQG7{9~1HtL(}C@09#$c(qTl&v#ru}iMoZ@ zW?A=4m*3KcGz!UWU^avVxo#TT101|+yX4$=qW$-~m99^Gi@vTdE_I2XmR02V8=YgW zsB8#VhdskNv#R<{gJ*dZEPO=3nZfVC30&i^VK|}^cW~?Uq=*}pR#rZY`$%mO7r)CO zk`V%$<$w##94vH_ikfpIg#GCa!^}AB`@D2k+f7_8w`Jq`TSzY2={V&@c9Ly5@P>L~ zl8$%i8h_e8pzzgIM?S&#z1{!vS>jli!A*UzJkZ6-+vXnytND@Tar-NqV&d8_UI_Up z!xDHtpp#y|z~@VXbggZ3ZkiR7*tx;DtKMB5X_%0c-oD}JEEGK`Dk!_>d~uEfPxkZc znb`f6o;oX=BD;N*Q za2(uzHlW!2N@?2>c98qK-BuS2&)J+eZX0`{V%gY*aT|Qi4*>`yEvOZ)TVLYldZ)K` zlX6E^-gE-Fx3+lI#c_j^sSx~vcfu`^lv>DJHtX}Y7Ar<}W}9_R@A5KjB=5pXd|`4abmske?8Jy24q1iY&aHWtmInwXzS&4*L&uqQI-3iHs7i z&}h!-F(AwV#j42IJEbbY7dK|_wT;~~RA^v)Av~o-m5dh1|B>84(m$h`L$yrl@{s=c zP{keH_NNBzaOQy-pJR?;EC_a$933|@Uz%hO@e>W?8O_+M#?x!>SI8h2Yay;Q*JZvIfHOVc+lT!5g%v!r<28et>#wb>EIzwZOCq|emp7sZRrPPk^O=P!Lh zDiOZ5GO@li!(JY)CT43Yb`${_o5Q!@Lis97>L->70$-r#dHxZA(Pr~Y=Ec zYQnS84HoHv;qWXIZV~R)3qSW)ok}+WP0m~sPuk^{VF5h-XMuO}zHYla!G{NeF&Gt_ z=DrA4J^vJDj6avrAx3#$$%r~r?QNZiPe=OZN2%pX8oW(mrA`-7g z!JX1HifOiIl2~$i*g9IrX&i=92NMIZ((BDt6ZXDr34lC=Q0wPa-SS?PZS+(8W|#3{J7+gJ?{HN zu<6G++P-y<66KpvUq#mFbiwBAERzLD>GhICk8z6D8~aXf(_P+VnQ?T%lklxe1KVUJ z`{ppErxlxX4s(a{Qc7eHdO$C>|I2FIIZn83i0xa;F4t@lCsKh<*oC`K%ycxPK(%l3 z7kgp-ufN`d1Pxb6ECx#)y_j;opvt0i&2HF9us)tqf2e+*r@yA7mF5>m9)6?2#tD-= zG|~9XQ6S?(1CwvZ(hP}P^tQcY(M$9h2845P=^S)JR5sLtLf{tLub~rLHa}z?cAt27 z@adRe3vM+A;5#n%5<7{kv0V$C*YPP4YdKK?sf0yvvS@5G;ypy?KE| z;q{Q6bzVhG^BX;z-e72B@As+t$hPtLEO!eRN7U^H#GTCbd$fbb8#(@?(g0ewf&pu{ zA@;JRZIe>+XisT`)?FY4*^$;U8_H~Dn^@vr=LM>pV6b5oUs3Wl(>sFs&>NmW5-K-N zb@qVE06{MRT+5|!bdpgf%B1<-H{Z5(ZV@4kmrdd6hIYkLB!AKFu@5NHR0Je?E(%+24H769p2bF~{18;6lj^(x7 zoO|H0ODidAO+D5Za*|U$8r7JzF*V+@Kr3^TTzaU#yqKOp z0)gf~WU;Bd?35z<#?iZ4%L+Al;X*2)1kVb3tC2ccig))Rw#YoAWjM&-t;LQ>G9KJk zq2N~b;D$mf5QBCy>OXv+5cqL0Qo<{&fGxXZG6Z}I%krAf^1-U2w@>Pg_Y;4;Ht`ns zrYWkhlb;kX2r#bbhER59aaNg4t)S4vT5N-8U}X&=RpHA{r+rF(9i@dJ>-`E@_+7pV zd{4$ykyn!;MWVT*A?mj7gvRLvvh@TxSNL$)gFIM6=kl3>p?BupRw+d>o@##79D1UoF0FU)o4zaR1=E!$Nq5B9z z)XQfc_}}61NKpJksc+eFm}H)R$Z!sOz$)P^;O~(_Wulhuy2cY+*QEwna7~B;FnAc1 zJwy4<#-uF~J{x&EV1l{@=T<1_vg{J|r-gTR%G#^4%*9BUbQfnIrb2B)IgE@Fz&l^F zIPLkh*}t9JZ$^g+>g1g|_KIP9;NH9^C-Hg^Gq|~lTuB6utYX5nvqpX7-465K?#YAS zsf7I6sfx0>6&{V3#YnK!JshcwH;86nLAmalpzyBO=d^Tn7=vvn_{0>+=tmk;M7R~< zO9jBQ2x7o+N}=U~SPPYapIlIe$noL~vKD*(`kvF4*U+_(H_3{exd>qx^W^O|&V8wz z2et}Si%mTt5f4Zk-;vv)4cLYJR$zfqqfj+u5;Z8hhpAmhc5ehYcb}h1q|hq7Xtm|D z3LDo0{1UP$e$)o@GsdSmPHE7GajDA7dWDz-t3S_~Mb3o`S79QMtJd~+)D?SXrb`Ga zV%YmVVwk>{%eVb8RPa=uzcyIGnjr_RJfuV>2V!{&ux=ZBt;;H?D)G%45LR?`s95*u zmIXnO@FKSI9$vUQESC!ZTcd*8gLjqXJ$%AJ-#Ms%7KQ#1*vY+AVmZTt?Qqsn1khM8 z%N>;2-`e^{(3e?X=fR^x_jZfoK2MaG=4xbZ;Sx*glUfO3H_oQ-QMkq5SqPD^eAP}% zX{JZ!Puj`mOOjdb)XMX-D7iq(%0b!0*);C=xl|rKFnlXj2{|WW6Wq!utPStNMAiR6 zG>4ILXDTfLi(%|vW!fVVF~<50kG^SZhimK{)vMUtl~Gvt8M4f9M{N<3$u;!tY7{3I zoL~jx@~+;#1ut^reE$-L<^oCH9*_4vUEYu6^U}_T^;JpNdYyB8N#}~3jek=4QX;yt z_3IYx4L8EV>wY8G9xAQzDa^PoN1@@l>#=s2Mqd@XpdZxZYtF}|A2Do3A=$M~;5s`9H!w!&jc_ga+Top)JB=~vP3h;`xou!7F!6zaRSOR>zLm`4mB z*k6u~CfrNF`A-`N z#*ize4O#!BKYf@9;Rjyf^c>$giT`$OUTQSxQE8@EhpE&0cWY^Y@|!7wUidSSyq!_wq~ ze{{-Si)i*K6$kozMvXtD z(OK3xhpD}>Qm=K+3;k#?8wF7ME(VKV4{;zsR;2*LiVolNy#L_hJujGTZ(v!JJ+49_ zZLzY`rS?oia!NReNW|NgMB_=Cci;S=a0JclP39MeiyiWtMKDEBHi}7q;CP^FH+kCP zB1W5t6b<;#C9D(NG@(`4Wv zrSu-k---6IIvz~@t7W+X>AuxPj%2Gun7hi)_K{{nGx{ALOdxNKheJ+ksOuj@l)#!z zZj6pMwCmA}u?_0QcUE_knCjxCqSNmQA9EE}99Y*U$qZWUGAp_BY^pWgXB)El;wfV{ z!j67(9BQ^m@k8le&HYW$7Z62CWW7B*8XDig*3&rpp2$#v8Cd8HD^Xn0kbExu%CrGE zT29mgey*BfIXOtMnoIbHo-x5#+pcfKMjC97Q>l4JJuu2)y}p({S-8q733R?xV_s1x zZimZmkji7g^2fRchKTC^$3vBV}*Pt`SqRe(_B=qz-bX{Og2u`>04(%bQ= zHlME$cSN-3;L8>fU?s)xOn81VgkQS64TPb-zi1Ynfho2_6xX|M>V98NyU~m z<3e?Cx-a$HO>ulJKf3j1gryw+c?sawfjFwQJu|uV8Pu)a%~eGN#sa=QGc)9X8?1&6 zIrz5P(GqSuN;Wv=R0R_v%gGw>g5~_`$vRIHtP5hdE`qOT744+Ot8!)r&xUS=N1Jxw`Ue(2Te+X+7_A5G6F zV-CkLJk?x>1hMRVWRYBqbKZEIqG*Gx0p{ZaSK5oT8%BHmEJ6|z8vSn|K(Aa=J-x(l3}r0x{*q`e z^_R7i;w(pYs3_3}vXE-290X(50GZ0&QPFZ7P?xq-e66XR0#_&|kyw~m#}ciQBGgqi zSzlQrrrEn{XfE|>i8p^HANxs4!uOMFmrvT18XNu10?4;dfm0A)^)QvWxNzLr6*?gB%IbE* zqmASJE55-X+Jvu1SlF3%WgrR&H zh}DuDLliQdcDpmfZ`8i}%n_S4Jj;_pu-h~_4C-`jm+^4Bov(M&O7Q@5MQsuCZ(ThQ#tVtC z(1zv*M+M1}B50i`9u<3ujG+Q8*}N=g({)HH8mG%o z)cSVU{$YKCdHFuKJi+V77SLnKY?#w{s`UHK>ERC?{;qy6wiJ#r@Iwx;QEmLJE92Cm zq!@NS5?uN|xBg!0G%Fa3Q#G68^=c!mos9*I(^qp3P;lh@%rz=dAbkG;)v+(IUxL-; zz50Jbrr>fsO6H~NL7S*-t&btURq6-UI`Sgm@Q@2a?|l>9xzHEDWy-9D;ut`Tk{fce z9%U<;%)Kw28xUDdjFgqFMUTgpyboU^UAD+(bLMf5k=n-9W`D{sMnYJ-fjyh1#5DEs z!pMv^_ov^x@Ad6M3M=H5q4>nJ-edDbAsxr@(D0bmznS)1E^>WhDg{0}iVH>~R}LoX zXKOjaKBSdSb-BUjE^9azf zo4R!wIL6#ICaTK=d+waKDG;2u$xSf!?-WQdfFkOJ z;K4{|bEc|v;uau^jc59~La2o*^DJ&Fd?P;^(9CX6F*3%M$^B-{p4AT(qyEb5Lsl|8 zFw}lC=PF?6zE2O?4-LMhtSWAaj)1uDEJa=R7%)6r8@cD43t(-eA_ul#hOHsum3Zn@ zzUeTth&|yeS=eKF|8;l8$#Y|KsUy7BActBS>1DrtA<}zF}g>-ozzS%1yGMr};&h5aB>QElzm=QHXaZ?W{HWenLe7nt#If#)DpX0eI^_dBgF@w9e=E92iPf zCP#895Wn?kJniD+1gJPWkLd;xlzUE)2*|Lqy(h*uK$^EfvHNJ6g*YWHkF})|C1ggD3Osm4WNCpu=xKqelub zhNDlW|EUG2p37DG)!CDs=wzS1OvnMUDXm(SK__W*8*OzeZ+K`n82TR(ERt7?v0`j~ zRj2$y{KTDi6BJf_D{w=`&*TL8GVDg&jGXr4fGBs?6XxBru8sz@j}qQSDqo@UHT{%n zRDwTf7Er;6xs}v9-skY`660Y8OBulqcxNc72ZxqT4e@yE~os zx`i@g1dpMB4|wWlD^WaUUg!@oOTlwmmG@U?B)J@lws|mvmTL*{{6x;!!)M6IfajeF z!rqACW5Tp)-Lfsb@|XPteY7FOgr}@R%nD}vpFXSHM*p^89;R4rEX8i?c<`6sDY6dl z3p?@X#50On*mNq6b!jw1$qsN^$HqEU*^D8c%&iJt@k#zCVHZF3XE`v1tWtT53={)Y z#xJF)2gXhr2v2~O$=pVVa{FsZK-O*4FA7ArozYu|kX+&M=Rmz(FR=|5E?;bz8J ztS39&$rzMnbAPvMC`-{^Wbd@K0ya+MuD1J(Dw3k|%O4%yIi7~+pNM#_#z`K0+)PiB zbknX%0%?VC8}3I%KKZ3%INrSf0I|_a2%aVfbn=#%2qys-?C!bWYHboh^3X4OZQ9ny$$~9253AZod0=m>_{hR-IOk3u5I2B~*DnPRjx?sTBE(aqiDSN#ug8A-`EqRxaUD!=$HsSHIW; zp6qpZY5iqk*8?#eyfOK2#a`ToO(YSEc(!+u%FV)-N-%X}};{+OX#l&uJ_8Eg^$~RfRE^tm)~2 zR5ZdGVYyZcIc4zEC&G$}KnzYFsj~uq)^0Snh{(4&F7(}SB^qg6`Bl)#Bq{%5l9I3D zF>|mmG~n#&iqo4#`aqfd*6(L|*f;(4DGoi7wVytmnIk}lY$$X%2pE~C-ai_AB7l|~ zukVZunqTG_k>-L%?ruwzqVLLB^W2+~(&Bo>m&wgx9g+m1F{9e4k-eL)M?O@eLlyps zdaXGaJ}brU!*v~0b!u#Vmj~}@vU$zkh3T`!W;W`bfH&PhozSsCGom(V~m|; z${`CJ(=S;x+5>zhV6)3MQ-;#4i&1~PU|zr05#Vq>NW*Mu{bsbg{O|#kU=X)aN~J_9 z(}(8vV9Y5{KB-k*B#H$D3D{0an_e0T#CatsXmj!S#eKiG^L(5Wp?4UUKbIR7^7*?H zbRkUE8?v{R+;(k;PkIG|MSZGL7%Hsfo?ocOHuTcMwlkH|UuU$(t zXVFJn!*BODf3iO@4*m|76i`jk^%Vulr(8D6Q2dq;1^*Swy!^aH6*Uvi{o6r@-B&x| zM=b89drQmtJ2PoX=`l8Ce=RA813{G)Nu+KO+M;iT6Va+!^pZUanK28>?Rm2XMUrwL zWXkyX#jRRHH-3K8KUB|{V|^a9KTBisftzES{oaY%V;8mhi z{+h*~!6ox~ZS-*NZv95Oj)MAA7@1@llgIy@zK z{jphGxmps$4oOg&(aEXS7${#rk2n8$pyW z|8o%Wi{nFO?^xXuMZRkHJOLnit_n0fhTL*~!$zUwzw;a=#MzT0sFVU^tzy?_R`0DQ zj?|P+=iBe1r_co?vUx$ZBPpG&7Wi?|nkaW3Xa692op80CBdwr1(f(IneS8kxb|n8v z{#};{lFPF^zlBf^RPR(@c~eg-*=2Bq{#MIF0jg?8=cbdm>;2w|S?Hyl7}LkpmJh9} z6S|w`houS#1)(JQ#)ltp!rgZ(IT2hw)v_<^Q-K=GBh+#$jur#Ex%t1=(ttmA_Qu`G z3arCB6A~ha4>UVrEPMC0wrbO)oIl|@BgXd6=<`XG)Gva}mk9n7W&JDBtOv4wo5Z@p z^JJy7FDDTb{c8?GumE}S7(==oAf5^SA(;-%AsAWRQEOq?-R!(ur}HsK+rQEGqfBxU zs~b;}l$!<3>gdz2FMb$BvilaAoRoe2E_?6##jJn4TsRT9T+GzmRUH#1C#}z83Ax9c zI$L04N}>I}*xqq+{T!7~5)Y0d(tZxBQsAl&C~xTfweI)>B4r=H7t#3#+B1>c@j={R z;nWtXEFqRtbk7c`qytiAXmaxm@FTyDjK(@#T(xR*B6I@D*?i9heEE;N0jRuyx~7B` ziZ9hf*Q&Lb9nsk-Ol0%Mf%i*|R{Lv7P_e`dhV>jKRfkD!Vkwq&6@5C@Tn$O^TLJgh6~NgwusaZxxD59GBRMkmU{ge-ouRKgGf;C{{^4p(D8 zJ=zgay=z8UCD7AeaEPS-pRsLx*h+@k95SRi!lmyTSL>t8aOhgICC0u|L z->B`2xY^RV6={qoI3ougB-d}(xA#_B_Bpubduc}s`hOAKP2uE7QfLiSG~?d?A{{s1 zJM29|;@92(^oHDNF9OqT=UdBr+XWOi?0G1ZZ!;|ISCm~Usfp-b^%x+mL@ zl{X0}!E3cQL{n!Ke`PPRtG(-^Gk4)@GLgod%(E~Q|4m%qC#;+F>e7i7Y`JNdtr+X- zd};k!jhvFnt8sZn-olW8x>?iFU-^Axyhnw8GMaLG^<1zZ&@7qF2SgU1 zyOk|bVi*r)B;`EpRGDpU9)TNlcY^n)&uhr5Uiek@7np ztR5&Zsr*}|ehP)0+)q^_R@A3^~9kJAfkL4sj$3 z4As}QEG{5$D{}bBZv3T}x8hrYZ$4=wdCg;t2i1U8>_>Y(-;XPu-Dt~md{*DxZ|+@O z^owIX-((O=y$mg5@1^2_TH5nWIsC^;iM2^U!x&z)^4_#b+&i)g8SpO8sIrXc#8=;Z z*f%5T$vTPO8A)LY>rGxw2`_7Nr6`T~Hgh)CI;en&RQ=-`TaV-qrT)He;smg(d5@?F zWIsk=aSgH0$-fU@#hyYkQSHY2vb%eTuH}yjHgWTNmfJ&ei;?LlG}i~r50876cSQkD zyp*x+t$_i-P^1MEDFJl6!yZ#)dIu@EPWs7QVFVZ)sp9QHD&U5`Ye5+^7o7&wUmk`Q zlm;h`R`n@+FS-Jo56FVd5waKLFRmIlr@y`X1ZYZIb-xMX|1%C2=6HZ+bbnt$Ec7Ma z&`YX*=gs1mh3f9iuKQ}lT19U5_z-6lZE~fF=Gd?p7#`T0r{0nkJsApDeh+nbHT{g#FK{08-P zriPvtIAwB4b^5_JhpFQ$W%`Z!x_@gtQPn&NOlx!C`};Q0$e4(8S-JvsFMDbnYn;ge zZ<**V-4Vr!m)btQ@4>I)#mey+EHl#~Z+{L3=(mlLl+y<_u2L%qyK(D`4-N%hu%CW4 z`+fhUIpIcr?mzXcTrWSL-*f)5@S~0FF5dv-z^dAeTQvQPmJMwZ`%Nna4!E@pQnHOI zEwgL;7v9hoWZxqt*{00aYOBvu=>5v?}kVD`$ECz-nm05>Vs7wo-$JQ?#)WKuq8 zAQA(5^%G6bQ3&2=jJ8e_SRN)@KhUT%=@J8qHJ(GUgOH~GU@PgUd63#qfmjS-4sxI6S(!eYTQaL zArf2pfTX(E?a>-ciFG}KE^}bN^^#QSz{4d}@zp<9d7y$9!-EvxvFwQ`w%@N^PiS`q zf4?T=Yuh@8e5jYWaN!$GG^efkPYv|u^3V*@1HP_*!_>?8{qGfFL zD%Vza{>rig*abv~BqMxziTu4W9i!=D-#I5;`{P9V7}-Gk;(c&zFf- zpK;K6h0Z*+QT{Yt@5MZRx}96hEQ8i)j^nxYswJ75yla&fgd4XItujDVR|h$0K*fCN z$#^=zL^@qwwOZOJO5Ui`_;zMD7VRJ0a&`VK#p|HW@1I79g(pIpVU-{?Ee{#6*3*rl z&t*ru(U=S71>&GfbiDT7PmqHLlEo+L_nXKG$5%(H>lq4_UkSIiR8$u@%+O2*KCaLY zDf+&ZoiWaDMxDs%$8F$^W~)2D?|nAm-8UjC8dxxL_iwcO_sM?Fr<7dV5{fE7WUdKQ z=9Z4x#^P(YXjG#5uXF{>GSe%I#D1Yf59-#?gFJ8l62tu= zrxL^T7zrtMZ+s5#vrPD9`-s%1p)KNnszuIRfshgOeM=cLSgZzc99buj8jBj#dUwaI zZ^|6ygTf=z+dn*M($2*ruE2L=CqbX@}ahLW4gFeRIagu z8@o+3*ZT?oy?-tvLbVhU`ANM*l(BcUcsoTG0TC5pkkMERBjW96XIDxxGDIV7?rI^> zNrg7Fpacwm>5@I*+2X`~U4FxYy@k`PUu?fC4NZHq6>v(d-rRb_WLd0Xl+F(RHg0wO zO8OHSv48VX_g`akHbO>!-Jkx3P564dBnroC(24tadSjnG^bwK#zD^{aYJ*8zWnr`Gz+jyly^g5rj53ty5_5kO}H3R~N|9s7?C zkL!w$9`Mpqo=^N#-+t7y%Mp-Gs>Zs`mqpJJ%X#JbDCJ&OU#AnF@)Dz_JEc<&AK$sY zZ}Tc}5D#%PY4#TnPnC`nuSZjMjZuSSVi)YWy~CbTf|McqTNW~fU#fbU0`V5Pn1ueR z|LaAeoSIH4mD6|BI1n1=JPgINtsj#qyUDIoNc#e#%^DLs5;2h+K7Ld!ik0(LeN5o9 z9=_HZR3D}%Te-y6Y%M|SH{|NN^T?05c8*hNBH4U*BnmGc ztm>~g9@nZ&jN+w}Dk2Vrgv4Y2H?uM^60T4R;Sg4z@+8^r zqb`f?raDxg?|OoOLy^87IB}E~0mdVH*7e`3ZsU=jU#N>J_9Ls;qjr;S$0BOf06K@` zrv*tB`5!G*0jj0?e7z|ZGzg2dzA;smvC&&_T|a&3VFnuq|FbXsBYGeyU0uT;4+}iB zfZl!CMmf{r2>3oVS|VXg^j(+%N@?F`J%J6`>a#1ny=aN~ul_TZ2S@)BK}&f&LCLbD zKSkqs`rDZNinHLE58z~T=7Zvzha z%y@GL4exc+fNwGQRX{QtdUapFxTR$Mu^xXOCp?x1fKJ$)ePW)rTb*sAXKi{NH9AXa zOjzi)jX5}ayx1Ic9$H;XU~^h?aGRJP8Ld_q&X3$3m*paFq~i5n({A-(Wb>(>>m9xs z{``+T>XN~@2!1^HG6_DrZ#nqY9bCmUkiMZM5tk>`NdhOL+1$N&y1L!0kxS9u$P*8t z5ojQ^uj!yK0P0*eomi++BA%(YeS9mnG3(-ME}8zmOM{v8{xsorf!xpkR=M-I5XZ-I*k5rJ$*Hv$M-VA!rLcnRxZqPGc zH7%POZw>0M$+;@!eY$P4m8oMHPH-&Z#q1F|Na~sO7VbZhhb#LtHpKr)?6oaBVqPK@ z@Cr;XRiB>u=~y>ck6lh(v=v6#;rtCgZA>giNF@``tt&#ot)i@o@#l2 zxvrNQPB5ft%qxCv`MPviB^CG)NPtxNbj#}UpPNgJymp+60_B6XWRU0EIK$_VxZ*hD zi)Zyh8#dkVGSD;U_h;5rCq{An7z+>q&L;L2@lA4RlcTU_k|DOk+lGcHZYv`kZq55Eru4>m{TJ`RB<#7{POB8%tXg9;+GG<&O@GsSa-(4a7?3 zuJ!a&ZClT(^I?p(_;TN8mtMCJugdgCXw-uJt4y1D3pHMY@=9eYkg%t>f*XX6w}2*z zZc&|AXF=!Dhc9VE-!W7PIa~M0X~=G*ocn#1liuI*+tD=2Ra$k7(xJk_#ZC*P)V5k?#V$|p`~|1I?t`6)ZzZN;CqNA| zD5qV+-_GTL=1-C5YRn_zAwYs2iePSbqW#aJDX^EsfS;wr4Bq^{>N9K+I%p@N+zrMu z?@qF(rFvf~jp|opVX?y1N=JBjFr7mlDxOyku`BkRJ`s;!plMn}=f?T#_F-0B5ySRG zd|+pBl;^I!Vd>oRqa4>2!jwR=_VfRPB9Tu&?_M^-g9Cf>B2NfdQGFERI8Z+-yRx|1wvRvAIHyGH}4SQqUc5ekDLt6=Db~aZFgF$f&2fY;!Yt@FT zAqR&?3SDXL;DarB*?JEVZ>D>~@G&DPof-vC@0}sN+_CVvF$ zkqQyT+ZxB48BjpeT1fz`0f3m*cjsx_8=Gj7T~FF!xa-Ltgt=>y5VOKc2mo`47jZAz zo8;c9v!OAp=dco&-fn8BHa&01^KN%5($om=N$MBoOf-7bQykkNp5~Xe9nmQw;$2=aElUSETo=)tgYNjJQ*@1SX~dGZS;aIv$r0k^WqNzZo#GZR~Iuw=1_@MjxOPM918+8a+obUpfLD=waaGfz<99 z?NjR{e;>|^J9}<>?b>Gobp8M3+914B87E~eL3A=|!uh)V?YKBeLAbF4AcUL4=VOUsW@4}53y2nvvY+0^xe@N| zcg;Gr@frheQ}bG#NtvbVXNGry8$+cA*KY34t|;_hZoZAzuvCJHs3S!f<)D*g3zTMf z>e7gLwQQUkV+EVP9Sv*O5j`y6MOey2T=-0+NH2|y6E@`*AjR>%g5v)E`eOC+MVPRv8Nl1UD=gX+LpBhr6=b+!+ zlWoaRGh@h|lluR~cG*Zk;lbPWB<@pz@i$2lo`*1|%Vcc?ci=aV=KS8fT{=AUGS!e5 z@D>!*-iW$)OicHJDRSuu+}Sfjf$|Ouw+nofX&k}FYdVASww`DB<*zsbtkAB}Z7b+w zbSCnfeI+i^tK(j@Q|g4z{n3X{=W(d|C2AMrdSFoa*?i+gTrPHCvZW3|%v4p$}~ z&tCycQ6lT(hDBMRk%uh*eJpY;WWfQXQsaOMo#-eR4n+OeG^6Ii$_giert%`GG%dM8 z7vA>h^6IWQvHPTYoX`&?M)gh7vTZu$N}@{LDkOw}jt4XBKC@E`yh=)<3XnmO`cs&y z#rh~(338CAQ^UV)U>We#K|gOl!EC=61rgdXA!cc-q1LfgJX~u`$)){gkdWbm^Mcu} z_{AF!#bY~rlL)B2DnMLZje<(ye0r>2>@rDMugsJhVayMP93_s`^5bx)_7y-5^T7vp zAw`~hObVEU0)CH$t?a%9o>t`@-V@Q)&Eh8Dj!cA^0ya zxeklu%@0D!C@4UKO~8?4ZWI8)>0Fi!a&XSlEKS!kDbk}xxbUe`CmDR8$Ig!}UHR}- ziBw9XY}*~>Juc$#FF87i0E>f$!q@(LPzC9smQ{M^sPpCVPcw0*a<7Mawd$?{Q(Dp@ zmfT$8WxS}_ekR#_1W3jY!k9mMb^nDiEO>CneD#-;j~ zzM^U6vduc>Uy;pT6C#ua9LVZs>2v7m^Znv9E}zWFB11+aLr12z>-w1@FRr_avxA1X zF$=;dD<#X84N_F>oxG=5yYOs>$1*778v>Kk|Rw$SDW|CJw*!^e5S z8@97>X;(`1rHz;!U*09_`FyxNK&C#~3`eS_%! zUh1w@)iHX@T-xwSoH;X#`7z`A@-<^RB9l;yX|QeA7$Nn{4-; z68hHeEu4SyV!7+)rd`j&HcwPiIt^!61kDS@Sy`Fu^clOJno1gjM`?Pa>Bj~+_1>`@ z9;Egm36Ecq2S?W<2h!Bz;KtZABd!@<@1509psgXB+boT~giZ~Hg+=Cm&s^nvomILY z*Zrf_L?Gj`lv&s{sJ{6>Kvjxh*K@e7;M4H8!{Q{6k*m!zFmqe;>HHg1G+-oeT%T*N zw4l(epvXarBfd2Y$6i$cV3`kNk5?NaW``UZ+=ACcRMlBldtD}a4QcCSu8k-==(5MF zFcpMuG1)q#yC^5L_qC1lw~&(aimQFCG%caczfLyzv-r5pbr0YEZAZPS%y=uOu9ep|HrDCPnh8)AG2WBrE zI~MS6AzZ`Y`vh=HrEhET3$9apyo`4W-d6)OIJ}GRZ#=nrUO3M0DeDjhlc6!)cS+a` zJc?}~zS(5=Zz3Qk5Fmfc5VXl)_kILYs|8vl@U(SP`64aWZlt#YzB zIlw~}R_~9===5Yx5^$?-MKKSuub+8nQz4WjXlK6E8)tkwZrkC^Xr4owU& z!z943GPVu<)~$v4t}{D@ppw{XCt#&VWejD7AZ+hh`B&5!5#N}0jR`pI(yb`WF{-eY z7^xvK6Xsmiwc#{dYd@jV^!w`9OdNgWW;1av_dk&iE7%%G;V>1Dn-22pOEE$e9ZH|3 z7ViWcR2of~S1TZF{PiTe?wUyC#g6~f$4wirt(Y?gAK6Jg=2VWvB-!>sYlzeUL7Dnw zc!>L8)#zLr{mB8u=Or4@2F%>gFC7(#ksT)ys3EA)dX6?Sc>Ufnolm^qSa(K*Ry-!E zW~*k&&}+tKrlbhjzLDh)JDqiWSM~Mzr)-(;Uut$oAj~$8O+EFF2W~U{#r6Igtg&kn z0gZ7S-@RZ};@!4;oU04=MpfQ8aA2@9;$`ubDkbK?Cvx{aq`)yxcv zMxCh2nca_Lt*HlJvl@$>Kg_2GT&yxvwH!w=0UAST|Jx}Z5$^ha4%Smj$jD8vy!)v} zUo@s@YrL*3J$Y?{99S8J>dPrU@kTiuWmxu{zVK}g0XqB~t3`b~MSZygn7+jb8dpaLol(gM;9NDDK7A}|O7(hW*CQp1p=C;~%_ zNJ$OS-6aju?a^eZTkpTZ_fw&x`9kkJ@`5`!e26XYsTua*kRZV$Y8U zc|b#kF~i(8JF7zQ!Acyp5`C~a6)t*6;+z})@Y!2L`P>(pVm36~cdPbT;|L^S3X>B~b!?UBD|0B4*i^C4KFUoX1EhW( z6UU-2DQ@fWc|U)3dOV<46U?eMf2B;uojn;qo4rJyIB}YhFg&4$acraO($upPg3Wjz z7cqxEE3VjYZvOZ1{b*w0!|iNACXGGqCFE-qKA8c`F2R0ELxJFfRk}qbQj&l}<5GF| z({MecGOBWTMVv>2i{1Up*YqV~NQiak_#r)Vnj;lidHM6ovkcE&87P13i5}}Rhi0`$ zik1A1AMy&FN`99pZd=}xOSkod?Wm?|&EWREVoPY(G;}wE9Z$KH#0a2TFG>ED<$tu{ zs5deT29k8V9Me$<7nQkdT$ZE`%4={eQ>dmMGAU?L3rc7lnFqAGf_xhKw0td5L%J`3 zRaP3n>D?+gD1*IBVgU~Wbn=n1l|(R8mnKF% zROl-^y4)2`7Dh_)EUAx$&i#y&@c7ck0W|-H8aINO3GUSrJw%o=Uj8VIH~ov1QfA)l z?$ERqg+P9{65}WNK-D0$>Ztm_(8gBg9($<`1&dJEB%cC(O7F_Wfb!0kB48m?k#UFg z@0;lV0W|(R-i(o^rhU4#MxD%fbk%Bc$#y7{`vm~mZf4=47~Q$S)*92&6Zy5}9J((o z%p_V+trAPBTpTj7AusXG?O0GTYv3i*(~+GAu^9zkQ0N`j?kS_-dx(a*tCuW`Sc;ZVx#x1RJAn(cI9K{w*GYG zl+NdS(Y(f5M&7QxD}k^6T};VvU^5PqW_Pp43)^F#9wm2esg_-+K(Yt35IjDeL@g$t z7f;m6x~IxIbJ7+B^Q`ms=AWcm`Qi3`9Vi(ep3c(0hhkB6TjLaN;WUiI;nbtaQi)hi zp!JK)Id}?PRN@1R?&@x1i+CX=489gAA;QK%ymimw#9SH6=aF2+Wy87(kC*jQ89X-~ zZHIGpep>uLPtg8+TT7-|U4_?rD((%&Oo|LeL>Ur54{cm}m<(U<=3%)?R|KJ75TN^= zhoY4Q6uA_!+DI-f{$ye95EqccC7r5Al*Id}Rl2fAE-7~&+UdDCy<2JrVGNx7oole& z0-lbZ&z8UQ7K+rL_KfTMoDC!vDe%@t)Sj*9)P84X{dccC%UU>5cWzA#5$+g(ZMf*2 zMR9sc+bYF4Elmnf$@OK!;=Z+Yq-i8)dAu|a9E$r&nhY;>AB-_any4IC^D}#AcOZ|> z^g((_BWihP$2;jVB#`YhaKu4w;jGF)oHaqJ>`-R3p0%TyfJX+kBN5QVmajnG%IQAg z2!4WL5`#`e)ryrN|EIOvM>Hv5Ym>!N8v9HZL`OB1f=^*Yru@zYe-7hFhEn}hnaP$qIB!MMGLSu5 z%$bItT7~5+z+)y?2#25rK@t@lT35xRthGLAc<9vm&az6PfuvN6$`m(g!trgr-h`4b zbhV@r;4@wIwIRwz6T|Sti^cjP;DK~&yn$dTvdOPZU#Z}KP594*%o_Kc5q{EDQKFH& z$Vjd~Ou&2BZIClPx3z;^CUHqLZ$w>0B<1bk%oed|>>`y*tY+pzlos}6ea9sX4O9!@ zS#+C&i>ftP9G!-zRgTuanZ&7x89&2~0*Q06!w;&!uE+`7qotDG^(DH19klD|Qgom} zX@2E$^yZ{<-_{a@kK^CHlW#-*`KHO(lsqwWXx@O?+ydurd%!%gluRUJFFU=zzO_zJ zTkyP!TK;?roVz8eng|ls}0#)1W)Bp%?$c2$wK%LUbj*CtWeF)xL6x0`?1!Z61yH&#LkG zx5+JiY$kszbq9c9kK&+MeW)kWH>@-;Dv;PW*?EBuT`t~R%Y4~hs!GW+d*91EsjYN~ zt#nmf;VzBgQD~Obpvja@IZw_9p>vLtzHMmq5=Xx6U^S+{L|0~qJ%?jsN-itKt}_2# zylhB9uv5m7QPu19l3CHy#qd#iuDs^$x^sJB=Vgp|UC2A@fA<~sjVYZE%;NU$S6d6& z?5>)u`JrvrRPQmEaJlL5W_FIM9t3DMR7ODeBDmbO%0UCQEm6$L@NqI-9;-phjDm;C zT#XArG(`k(x*1axILGRb5-nqN;P$Dq?F9EVH4#n7kOLk(Rsk4K_c=_F7= zz1tQ@3aDHEE4JcDEki2by9l;_X5+Uw_cn_~lrfyFx zI@Qkdg@*5vzxJpu|yQN>FygF2>$H7aDEpuKGH5hPBeNdlhMnwf<-6x8Irl$Iu67wG8`s>S`F@Zh^Gn0qU zUU-ft*x~j4e`VgVhF;IDw9VHVBeAbIe(IA+@+>IpLU%J=9Zan?IfU;QsZr_;t2L5U zqzqB1eoN10Px&=s$tdPmuHsZ%ii#xEI2Byo>W?G?NnIw49^`gzWI92^#P?{_{5MxI zBI&s*1Lz17A;$q>afMeb;bR8tnj4>{sB4uloRe<^oS^bq5(M-T$34Om!FF}08KZ+) zYB}c%m&Y@G=H1V{NOq#N1^#(W52Ap{#!onGP1(Lf?cUcbyO?RSSj}@W2nCf!oyIQA zfIJnzX3YJV;Nz(lL{HUptQtD^R!>ck{ zz@G=1bb9a1>_V5fb>zuVh zIjx7A0=e>Yk@1~)F<=WTXKq;kH@^?_ZoR7O$LyDew*bjW)c-?r!jHFkP}vvh8en!A ztNL9q*?!$J_AQxmOeaf*Wy2oPSDEK2GB3`(`M$sRj||^qaj=fyl>3J$*6cqY*O5mKXYF>7$s^z@B}yVMac= z+6ZD~T0ohbPcetPcrtBvmrT2Sc!uh|ho-cnnX4yE?=s=XY!;HG%Q7ij?yGY~e)i9j z@;pzDNb^4P=y*57?H$3he@;|@vF`I*;H^pv=Qb{84K5fI6!S}i<3U@fZtof7qb@{# zGo;+i0|X~?RShwqV(_-$mcbd4%ueF(Ddn25*PRxFM2=9gG^S91g@f1>REeuCc3-MD z8ryrKW6^2K6`|uQZhhHqCDg_Tp(;O5RqvtkYPO6!{#l{FCN_k6ZtJ934smGA(UslN z3-W(sTdC4M%6_2#j6pRv3Z1Oc$s|6a5GE~8Y~|=N=?WJ^&Q{9sHl*P0k1~65N}9ad z+N0FgT%ROsO|N2_*g=~Go?wKrs`%Vp?2pPczfOV_x-(7^m-Y9^wL-IMNs-fYB>=C5 zPGC39jPn*r-^kAtK0- ze304L6vp_c$sj5KN?UGFe{iwSwp;f}=q3`(V&Lzll*DfA^v z?+jYKT}tIHb3;!3#HS~M#Ozr9KjeZDABZ5TzTeB7;wREcVT0?Bkr~KY4mx>_ASg{v z?uAJZpx#nYYsftOfKU776<^w$g#~NjBf-4Tb?hQBB>hpRKB6tRR_*+er-$ZN^mw|3 zP>S#P@C=?q$o6b-xUgMgL7G?;lQ4I8v#Wiv7$>Qut?I{vC1)yjkQw zSyL@%hA+MQ#(G!Xt}1vwYaJVr-W-;mhKy4hC=GChXG?VfZ)Qkif4++ee(*ZWnka6z zh+KQPKO(jp)L7Ei?J#C`j2!8Y z;jBC9LFE6u9nUFosC}WMcUp*j(nq94 z;vR_uC7DhcvyX#BDG#0X!=xG$O0s?Me?}X;e?d935w_!8ce-q{<1td*Ear1uJyT?n z=&gBifj+K@>k;Uy*+d~On9m0iuLSotns3eHahG)S+lB}Y6WzT!X_KV5?v=d0umuop z3d!rEih47|`NYgTnEn^BgMovXXA{J^sExrRRQ&2a-wL^=jxVTc@z$o_ih0rbj>j+Y z9FE{x$1^6|mZ7M(15rBPd+KLtM!9(FThZR@JDXW;MsMAwF7BPL*c1@jYV3oscgip7 zxqH(Kem>H(9rxYrfF@d?AlUn!t5+E97*F1r+Xv*VX|M%mp=q4$%%{)ySdN(1~GSh6l+ zUd7o=tyB;a>Rk{ryPIyY+c*@F`|%z~s zBfdBP8iU?O;MvxnZ@cPJ7y%?3Gr~<~_h%4@P*^c%I!k^#Ic+;Vt%JEp*1dJ!Z9qP| zX@MBhQri9Xv1@+kie@8e(Wl|38$0Zgo~5flq&QzyNKeok6yQ#MoDIVW>mDfaDezdt zyZUg0Eyz_Q`SCL;w22@`6Kptr?AJPLux%npu-!r9&?tDOKK91tc+Rz{vg9e#`Njh8 zJw6G$vtPF3{c1Vk*xD{c+tq3ijy%Lbfk!;ju59B=Fce#JG`_L<(GzWolDvoySk|#$ zY8i_VO)s>#K65+j;Wg?r^sYj};&;V7F8t`K#1MMP|D?lvcWB zBSjfj95Qa*LfPl(In~Zt{Fx2O@{~e~U9ZQo_ln3AQwW|oHfC{{#@Zr@Af1k`VN24D z11o3Xxh+hZZP;F#s!W;sueTfD|EmQEvobT2R?Ioz#z57clm$+Q{aV>0;B5|Rm%8D5 zH`*`g297c#T+_%w=V-!a+rsT)n~_m-a3t12FVy>Fz$QrYS&5-Xq=Cy`-)JtPX1qhD zWvO>BhnsQp;yC}eS-%HOL9_5>^Sbe*o&)^r*Pn?+T{CsY%#vVxt&!vW>gUdlGrd6&R%G(9e_1>SyuDwaZ^6$u=6xLV#S{$ec{udm6nAGO&%v8O&vj^M z)Ts;9W(c2i|HCQ%hY|x)HpF&FLo082Yn>O$;PrJW+6bLjv)5_cLas%GTX4M>T_4~( zay+d!_;t5dQ`btSyqQD+>D)kIwm(v8H85H|T~?Htvj2x-Yoqs!pL*Z)z&C9x68t}K zH34tUQ_tm?#t}Cwy-#e-F^H=u*Ypz9<#|;yN5M|h#>Jw~t{@-1Vzbdq-KxkY@3HvM zBjbbzT5lOn24m+h8GQE5VIztt?F_(j>wNQv0Dug)<`uIn*FM4>kIk1RlnFKy^=104Ct;P(8+I*NNQa-MeFG#dRgiA1TfgBm}y0X z7UvqnberaDG-RRz!Ith7&=qlEeD0huk?nivcwZu5NhH!twZ*H*>|O1ftQ#ugwn|C zRoP3mRl-jmlPuBtzkCi-j4jxBq#lYN5VelXdt4qCAj~NB-zO0X<&V%z1C^^!!n5RX z#Hb##2;2kV>iu5u7+;&$3$Jnj_%C5gw3W49T>Z3TTi*0=LV!oxwg6bCLL0#6qQ?L% zc~QTM-gC2Y`g~e(6kruwL&4kdqq^f-)K=97k8P;v^6${OmF2H5ADR)0AG}E^i1)Rq zJsdXi+$;hEU^(Y`kAwZ&j6@%gRTqoP8imG^erttd5N!H+_wkp+>#)l`#6Bf@+PolS ztiOx*m!bDz;^ttVjWylEJRK_`SyG*n!iEBR+}KSJD~Y;?~S*5YS`{;h{XjAi+*Y&jsn;FH-; z&5t3vpP`>2hl2xBPq@nl1Pa19$7D5?-Ro|=Xn83`^p zFJhP>^UEg-%9${HwYy8jYrtmAI|mOnVqnzzWM6;z&{0jtbE|CZU~RyUd(L^5H*U5A zb61i9N_Xh~hl&bx1h8$xKV&E}fQG(@xec)x1|4m@%fK{UQJXqD2YjdkD^*lpxg4t? zm*vmk^Swv%`j&0wQj{41&(Fu;`2glI@8hYFRo0BzIpbicR>uf2l(uoZx*&j?x;aOo zasSAzpj-GcJaDE^hsioL%>XF3l*gXdn@$|$*oAy<{hh`EC~O`RJ#Y-q&67{Ts_ z9X}o=4BDFY27h{iO^wH+CHMd)vIx^?OY|#v| z@A|oCO5*Ih9N)JB z1K3!M_v~#3B7XDw%Of@bbMo3(F3Kw(mk%y#dI;7Wk%;D}u`3M=Se=`1@^b8O1`uI> zda5S1_!CIa$QK&>_J_}Yd~f6R*(D&}+CSTnc`*fCoH#o8?9E_kQhT%_7Kmq5N#h-w zr}R3`)9wIiQE(Y4tih85r|CUJa^=631fExW>{Vlv+JbpcY>Ro1M@)iaE0u2QLrMvT zv)}%oe-_JNu>ll_75u=}8MOnv*GSapPnGWl=G`&Vxg{&U@rs*KW5*@@nUuLY*Tcv4Qhdk>oqx zzG8)nQPG?&!e?{Lw!M|hZwaqp!h|bOJ2IwcULsE)Mh)TQe^(9a;~FGai<&ej^A-O!PcsDWa(Pt7W`_GYK%|F9YW> z{b*CNK#C!?P7+4sfqIVhU5?6>sBd>#EwsrkczlS%VO!%G(AG!9kom_l(vidxy1r__ zaQaOESy`lz?o{Yeg=<-MjeIc$d+OV!>KU$y@K+ujjg&W(487HLI#7ZX%{+X+i2<+c zi-!p%>(qLb2!|@Nllw>DhKC#!c#LrCnCcuAP-;ajMC4?x{5bGzi6#bW(Vd?9TrGV^ z(Kxqh_p$4%o$KN*p6YlAP62Mo@w8`(>RB^O1Mo%0&Lj&*6y*A#OagretE9IW49S^lx!_phC=7F!TZKj4P>|?Hub0o zpa=h`3P_wUfH|NEuKRtfY{I^}SW#q3z1tNi_7$?ba*a)>m2dVtwa3KC7TN`hBHj!W zX33XHk~V|m1g_%a>j~=Q=#7Fp)a82H@sp!bh!@&@#rT|d|J`n5 ztsA5_|DtoJrLVdd&Y%a!oQ@@4W1pNCC?L3|Cw#8m1nLsbB(JXU!7BtZ_{@fXAK6dw zY%4bMkwhx%+wDo6_ozYHttz%UvOB9`Lh?9Dz{!-&&N;hE?`BG6+nR4a(yRr45QFpw zkiWMRa;4tUT50qN2K)N6!(;oQVHC!%(_~&^1t&UB#|gM|wl;nzSZ7CmR*@7SU^q{9 zL!Kh9K`YrEv_i%0k?1sfHZ3DObh@-Pnby(f_cTg9o?+a^@ayze&zj9*1sTNz;D!4o zz?lrHGPB-U3*Iew=R6{~vj2esNzSsmv!`}n(_sCMym z18#C5qd-+@r1xBP*!(k1U7ad>(;U(|FN6t!87>SlLtFKp0hcp~X-=Q%6#@nlVmYtP zf&>F;54+kn@K`Yyh;`fDD1P^)@I=YER%m4s;eT5u00dOO6+1geRGNn|s6P(^fd@*n zjeCuMR0TMT+V3g@1n-LRE8Lv8IItV}oHXOnUB%pxLYy zwt@=zJ)#ZlcU8;I$dSq9tay*0?PV6b^W0NIwO^UHWRGIgt{(D<2cf9c5N*MQyF)V_ z0Cfe*=Qaz|{t%n5p^#JHb(;LD_SmIrn@ZrJ$wt23=Huo8z^MAny2ysqtSx)LPf~es zWiE^pV(eEBuZ;t=KKd6I`-#`_2?!rXL%3pWNuPwmh1UVbsBjoFw`T6e1Mv&kS!{8$ zjpa{c=d8j0Qp-uGHt&V#ZsxKW<>Zx9gSUU0v=n$jB=Wb)w#p|80hnT8o>>jZx(lNw z?hk&5;Q7?>gi`lrUUe^x>R2RjEIaOXu-TBj?$slQoNreHqJg3|vD$~MdCuth(k(-p zAa%C7kTb2m)5w#GAj*Q;CL1i4a)v5sYT{JwiDamqEiDnB&1dyZ7CKiKpE+Wh9?^P;79X;vL_j71N- zU~8>si}t$KdGVuypxW18IpN4xi`h*k!>bq^6c?_7q2(*zwlH+dxu%)&ZnYr-%2As; zvdxEs8t;unvz%#Nv6&y|THAk|?<`KJ^webeL`^K^8XxXzb0Ax^q>AlE_tZHN<0w;# zNYRHiZeX$P)Ti@KD}9Ko5_Y1CiJ9rgS7o(F6Ang4K=uirav4zEObu6}P%NL=F4;_B zxXcVNoU_t{7$EE6AqhZN0hO+>t(ZF61UOMl)gtak$;&lR4cMyVcBuH#GdmGbUF~_@ z`8JotvWgspy5r~!z=m4Or(k-!VH|L$1IG>)$`U^cUG{as-O^`hdW$-sotX*m^D?Kg z;9JgY{H;wiD`ZwLNu`wEs5}%=>GxYQynVl;*-|_MFJ}#aKOq8td ztA2!HIvZd>o6c~kmBPf}q^%ndYOxiFLIR}|D+_0-w!e;{_hj*8`3Mccg zLV3k=Xu}G{tHfYYTNq#kTXplhN$D#SWzGFlt=d;^FDf5JQh66c*o|6iw2h??{xftX&^%Yd|E7>^5sZQqf<+0?HC~i#XVf*dA!s}-{VtmtW<%ZFagM z=|-0^mj~x=$m1i(`fb~fxGV1fD24WXU8luf5B_(7&>|b)j4hCs6(a$#GwX;;D_xmE zBu}Uy)e{2HK8p?#qz1fnLN@#8{0u~(NzOHgPv-hvs%m%gh1F_zE0YTDQvFcf_|a@> zl$erxFCB-zX`@NFC|TozQr|qOP3Pm?d?DX9H3U@A?3o$Y`F63Ga93He*Ny8u0CdzSRv$q@!`k+ z^F1`;KcUc@_O?iR_q$%Yo?ETF!T=}o@rYEQvberKv^3lFwPp1|)o&;F_(io4z1pNS zRm=vqovxk?YYk%TQ_>v|_HqT5)|EGIb$N*m(v@=mO4qOFgdpi7uOm-2Ugp-P1Tj?4 z0xN|0Jmt4~ch_`UPH;)@p#!Ql($l*@6|~^>%)TJqXXSDvKDVnb_PUynmMjung%@z6 zfF?-dzt z>6`PXl!=(AJ7b5#?NZI66MF5d)|NSov$xLfc+=KvN?z@36pQ5527d)ho}l7J#Va1< z=VLNpaPWC_1vg8S_m!ho31wnp%W|xzQu**%S5aKSbr5@c%_cG^aFFjxHO1pj5B|bm z!O-x8h{zY3F32I|oa$l~o<8Iu0&=!-@wqi_A3gnoj$Ygs`dW!nDpjiMOi9;_wj z`FF9nFPkRzyIJf;Asv-6Gr?AXdpW2uH_iF5^h$}vv6GCG16C#1=Q~R^4T8nlNi<39 z1}X>O*_QN_hm4EX{NP9V%(@*$68wSD5F0uw*+|ZGwEn|jDQToGQ~>G z7s7(2CL{iYu5w+ShVKY-Uk`yzeI?xF95fP|Dq@;*%~ii0IjsANL#W&~@y>s%bFS#Lh?SDOwYEDj<;}A$t>2LKTfQ^W_ygDxP+VZeH_}e;J(~}=~^m#BvkJu<@ zk-YqJg+6_MHlrjnpZEi^bRJv=B7=Q)(jGF-y0p+J6v~Kst2gT#0*R;h&k@%JL@EFl$6bAS z1TO76r9RPJ1Wx1Pa!}%ATN}W2VgpR)Ijk+vI-AtX9*&Gaq90?JKWBxXQ~|38hM*-t z4r44bqrZ7)=y=3a@<{Wj+^v9{i2!lZqc=JwBKb|w%&^TOXKJP~%Fv!z<^E}Xy%V$N z#k>08IlZDC_rbfs9NF7~_F5D@I&?<#7<%SWnC|yn-zlHE+A${pL3lmS0x3t+jH+0z zLI*!7KbwP>cXH+gEXVhuJ$*vOFI|p>0yFnt{>^7*71>Y@Yf4vMN4$gAV+1-&l6=>&Scm%-_E&~z1H>weF7j>tB{Cx=287Q=sOrP zV-_3D1n_ZtGvn}eazw*92IbS8Uw`Fs1XO}D>d(+B+n;lHY|poXG9N@2YI`46XktV! z-Wq23k8I5G8WzStd)i0(e2xTQjkuK71Thw9_fZ*2Z=J!}Il?Hm`1i@|o!oU-YUza` zBGcM(O!S~%%q}MzG&3ix=hMe^8HY_Hziei)aP%#gu9Wi`(>pe{Cf&o0wrdW4b#2bwMep+193l*&yiIdlvxVKJPoAD9 zI*hs5tAWQ4NOMXKg$-ZTw4hE~2)B)SFE7c}79G6>Qd6{wdzc%f z_y((9l0Q(7tmxEo^NXq;<*X%vG>tMP@W7eyxwS&s46)yZoKm~zEHr~k!4F zN>EA)nA7sCW54tASiw?G-F;<#2%f0wq+`JOtotk}_o96q6z<{SbxIM?q<3#Vi zNLDzIQ1dw>AaPWR|fah)6O9FedEsMppkmf*$Eg{S@Ar+(euJLV`)KQjHE;Gvl_8Bl$>-xk#58rf?+4&bYci3?IvEtsRHcklrp%Pa*=f6ipz5#Rv~=ltic;$cI}RNFnzR9V}g71Q8{0ytn&D% zO}cUUcMzrW)rs&1puR(-Sa$A2_eq`;mSc?%56{kRuA6;)h76MOi@mSblpPu+F4v^w z_C|oA$OOi>T{d=-{J$S6{CGt&3R_9YmW$1tD$Qp4RX0@{>+2u>8#bZ}8|ZHi(@lK_ zs3KHQ&{x3sW*}Y8rh`KqtojKJ5ecPEc=UWMIzLZ4ZS2E#A0KKg=QO6^levFZbqL{Q%qQE#Y8?vHZHLiCD-1g^c$P18F{?R@mq}C}Wsy0j)Q- zw0NuhoO{79u!nL+>JrG|#**h_eKLy?TSFp^O)KpV>-y-*pG);p1D=~wfEIja($@d> zG;@E}e_*%j=<87NlQuE=E)knLHHzq$HKPK`Bi{<@>reQrm#XRuH}dO5yfI)8y21wMy4Vd6jj?(;@}lLww{+-M#fMWVq>?jKd2RvPU+cuRU}iPNXr z#hDFsIy1Lk&j+>&To!c^{JX+lNObQXu%OFJyZIFWH6(-22{AF?mfbQ?2cVi7baeoe zQrsgl6JL8WA7tA`cltp5LVoKL^s(c+(u017+@E`5GBrd3hA9efJ89KMow#^;taobo zH_BH1u#%GsHI9tsqoueqiu85fXHSiapFfMvl05AgYKq5i{Y#bg@gotiaXw0(odVeP z&U6Z|x;DQ7l($aXBy@QX0p9Ke3WGFXk>^zsHmTh6!#M zfRlc{?QA06{$Js#3Xw-^Fjd}gYzj*A_QGSL)qsXu1l$e4o`>EfL(cip= z9=YA}o6RDiS6DN)M@=8X)-*tg#{5I^nSN0lP3j#BB#>lRjmgRr#q&gY?4U#SK)_3!~M*#1HXBwGbWAC%#sB4fyBSC(BjuhJ4=~qgo9-8l9*`>lU z)8_fmyft9=e7j=w;BfbV(NJ#eXg*8Ti;ca`c@(I644a)?1*PR(80eY&@7wq8f4QMN z06F;mQhLt8@Mk>b)3(1kTd{upKn9Vi3Reuc534@t1@=o@B9`#-RWaEjcbMUT2HGdb zg%Q3-rmea3>a=7LGb+=iDyRc8%|$-6+c^9%yY{o8n8GS$XpFA{ic;<)F^1-WQ!foE zw1xXiP6~{wab%*{=49iFTbl?I8T(n?iOuVpNO^5*W_<~e9*~-0qM4|8%HU2^lUI5yuNL5z*KsbP z5B7F)z}fZX%(YHX6rnlmBiz44w|A5qSmB=u!*C-MDjO3%3E3%30P2g6*__|FB{FQI z?E}d=Yr-|tY}UPUITg9IEn|L$NAo1Dk-ie+)5_kH(`-Ef`x52$xX%);DXj^FhU)1vBF54Rdv?`)G z-KuPor#4FFa9b1T^h|M7>3~K3tjbHzQy&djMsR-C^l*w@w^Y|wxxChSZd406!zIs>=V97?t4-|C8dtJ0ROnzNauUVI%tkI3Uw-KQ~rk(Yi^OO9vt z)4=BWLlgx^YCA(r6>Fcb5Hh1Wp_E-O?XFsB)fAJ#7@I=YfQjsK=0yI8YxvTg^~f;} zIuw-wGjkvkcG#=A&dW(*WDN{X+x%P0SiP1*>`bWN0)y6O$TJ(ooD} zCjTiV%|{~^Dm$oN2OU$biM0S^_QNy8$(g<6DI+r~i{bhuu3#54|3X>2L^1ME)cK(T zaiajSn=bdiHX+4Wu`zUR+|nVh2{>7L8Y&c`oiYo>fHd6Z3LiY+N)tpGinPluskW#& zdRY6M^#STY<7c9raeFf(lev$+FAvR!%<`4X6?lh|7=%B82TzrIsJx9)MPvkRVYa-b zur6NyFOUEJj{f}plo7B>G8v1MmmUAvU)o&?N~?{aT~^ZK|CPak0_3LI?1`!unZTE4 zm2}fW!x&$rvGYj>m*;4^N^1y;=FIYaRuoUtofqVh5kmTN!^vXQUL_jdqj%kKVaZPK zUE*Z+`Rs#~$M6$yS7gYPT@_N(clR{69|$uoP=O_vn+9OjUrS1{i5%&O_V3zxim!r=o#ft#;~&6(6cIO8$ZZl&^A$ z^WNg*-DOK+IDJnh&5LCJn-u=D>j11ftfB!y{!s+y#L;}Kz3#BC=#pbGEcB>=+RB9E zdoG!7RJ9A9=(oy;C@$YNGDyp4OSLslm>3&JU}?Gh=MZlDCkjGbG>$^}po(!$aZT*! z3OQagWX%z`5WL1WW86tUl0PjiOQ6tNRJDUPNvkxkzsv0#E-JVA3endWhnXoSvmY5 z^_(0MBAB=73XhPBmapP8QP60E-%JkasAY& zQpT1}Fir8m)w9C6;rH>>rB_{^z^@QTy|-T@jcuBs{lx?dy$avhUwnOnWHRT|cfR#H z^T|ze0g@-*pE6Q)9GmR5iM+;{P@D33z#^oqKhhE_%ldMsvaY^nf#UEigo zm6&~1RpDsVdm3sHrO4hun$%eA12Rwlx}~ch^Mb^S%JcgPt9&W&E$HRw*9)y7na@Ao zDs@`o9Ir$4Dj*|IgO~+62(Y7%L+ji$qF5RDH2l-hqGjK-&RyE9jOlRU#=}eo zb9g4AOAgFh(KnjETfD~5#g{$Q*X;=BQ(;{gUCHczB*gZGMVAi;f==(Do-I1v{cMHe zX}K}G>ob#{o~}AkZr9Q{R$`%MZk~SPTn$@!BQLL_Tj|7-XILxtyQ@ki<;wv8n*>w> zj4xvC6Co?E7%zSJ`f%P$x0xwFC5g&(5X8u+!hUL@C>7b^QJkNnnU|`ObAL-oyo^sH zUth+wx;p_ZlE2Z$d;+j13INI(b+6Wa-+cG==0pVwph`T)3*WtjL`lE?pI7tW_w=yrF z>QWEz0ZSflf^xc ze*aE-X;PaCqTlGK@;Sgjfggq-lUmQ?^m4ntbUy;h7Vk@KBig3yiWy-apGQi7KyDv4 zO1pteO!&VS=Ra@fN#!j%@XWie>7v_I2nPC`($03#BKPIbLb}8A+0Nma8dbweUCWJ4 z$EpGtJREqpbLw4`_-BwJ6vFY5A08aodhwhJLR==dQuyKq%D&sSZx%BbGVQL=H@k}i z302LrgutcT2Jvy>Qm()Idk4fUbe^}ZXD{7>7&?N8a2ggazXY?)cC@z>eehQ(WmP=; z3hc|qG8ZfXP81=3RC{8u%|{O&J$-J5d15W#{s60|#%~!`#T2!+?)GP;11v+m&yaC~ilS^Ujv>Y3#8Ixu%-_{~wiV>9N z5)cr}&;w18^Wudyru2o0^xuLU9c~dp9U}8B&MYHj?+SmLJn>Ga5V<0{+mI5eTzNmr z{Z%zI{>4BrNsCJ3TGtpqgBV`z}lK(~Oz)o7Ar0cU}#>%ma3u$$< zD$Qlt$=o*PH(=Fg0}Y|4(5og^CXcB=c}ts%5G=^dqiAZ>kJtluNczW3|(C z`PlpTMe-};DjI@rezXOR$*ef17*y5pxK80qQJoi`Zau3fT&-^ky8+)LoSoat?Tq9a z2&St4ovD&Sa&`RN@HPabE0_UjxYSpl!LdZTHE_pYLM^_3OIN@dJ&qy!eN#Et3vPQQ z+}WV>D`YmI)Oeh8D#jp{A8z~r9!~@XuFtb{>%8C$rhd&eVl(V#>#%L#XTx_{Hv`D9 zqa}8w_N%WZnWpMLY07;vGfGUv?%sgU--eIw0M|z>f7Z5{rrE1PHe_8rNlIqC)>9-; zyGUyA2e8f_PAzOJCuB4HqbIK7p3x5=%bwNs>6KbCcK%vi9nRx&1UpFV0PucMg4@BW zN~|QJ&Vk#o-muogn6O5o&!`%f@RZ!J8fN#SUJZEC&L|MqfvC>~{Kuh*INk@gVI&j% z|2Zsstq(U*HwYMm!$LM`r%=%SDLy6P`>{Qe{y}Ub-_le&COM~yCyR^{T|@Tp3N4l` zHN_eE;nHNxAGAieUFE=*Ad7fb2;BJhi=aYfZ6v2s8C zEUXPX$9`YZdN-cZ6?X@SDf}M$z+qsHc;S6^;D}3TUF-$GG#Efq`MN6#l=0%z9n4EY zaq0VH@e6?XCRpO6VWQN1zWF%w{oJpQSE2WYWOCrU^MfT8%6*5T&ph#KcU$9boqeV* zx&^raM41?9rcR0ZEo?BgP%H&VmuywcL^SXw_0Ffe!0Bai8^8Gf3)6q1aZwYOY&Pr$ z^tQOBXxPp7+&k1L&E>JDy5%?N*X}-9^($9m(oLHfewwMke}mqcZ5tZw@GAEPYMMpi zMgsgM{ZvKk>x~XYx>8fCD1yz*4Sq4(m|NBcb)|c}C6hrb-q_)Z%EKw*5pN4h>|mZ= zG*9&=e_5NbT`w7Lk=)I`P&zP9%`C-25Ctgx0nM;lrPETtoK%vOpY#Re%P$_cLg~dl zGDRUf2LpO4^78n06Xl8@n7wJA6($-YE+0gvw;;(=R?sx8RYtqoMaC>3gEJ9w4%N@p zLe|n6Ihy2&&J!nBmv?^$lCpX2DCFKCtkARww-kN0zq*!@7`U-NOCG=TYG=B(Imzep zEa)}Y{eP6DMDo@5ZCmC?A!cHm6FdgydzMezmJLkI_X^Rl1#@0R;^KO$nfs1hrm3Od z^#8}!SI0%&rG3wUfFL2=gVNoSLx_Zgbf*GCNGK&kqbLm{ASIy^(jYAe0unv6@w1x@F7T z&ILl#n>VPrwQHg1(*uhS_iq>L=SNF*D=uPxwErBOA&&tgjjO7ZU3T8ujpUJa_$A=L z;zL%4Zu(#RUQyxmkp4AZp>`*nm|RH5eOS(Q!s|gjEA*Ogz|V4>+g&7*Gm4TkkDJp@ z0DCpM*uzpZYMQ$>`^f;51(AbNNe%$h`TW34M?S*G?i~3z-N@Yh^-!u0si=9qd=@Ma zd;6Bp@7*OFK@NXQ-`QHAq>zk41RQ-%t#hA!y((~D?!Q*j5G45aj9sD8s{65Ja*h2T zcCN@*SfH}tjIYl*Zk3TeM#Sx9RRNNG+=VZn%ezh!4J9~nSLh!OF9 z`>=Aq|Hgr$lx9^^Z{2{MvIhm6u{3K^F{de zxi6jZK&G_VuHvK=+pSy4e+23YlQk~mg1?3rvOn7RO4P*|{8y?_qWS>M=AOzAz+oAv zR#T!4P%8_~s(}XuX?&^T*{cr|%c_P#xjb`n(tkdL;#DWSG zzI%_M~_^W+)TMIX6%7NvQIXszPn24w~p30 z8~hsI_Nd${sramF@Lp?&YQ1jSJ)f`qqY{&*A?LLgZ$?RXt@ZH=T6y>m%#vpO{XIrr z%a1R+WgdA%X0W0H;zK0g>oK7#K2*D8$gwT7Z0l&=#!LCOh?%Q%;HRl@039VkD31xN&Khu|7X4PC)|1_;8=%p*?-y> zmWR9Fu%oB`q}ke}(NZHSSm5E+q1q=ZKYu;FY=IwF4At|q=y9l;R%*Ijoj9|{I0t6< zz1dzI{S^H7+le3~t8+4J&fZKYC~@7nRW&H@4ih@U-z=psc2Y09vj86#?(cw-O+w4M zsKvk_*pDO$%}|{oQuAR({!`@Hho0T(?ZupNm95!_HK8k@ob^UC<9B$(#|Sn?HhMQ$ z1O^Vu$wiT*--){m)rlZwUIpTBnwtTK8!FTFkB*2d+EE@0UBfyG_xhS8dmUG(c@5us zeU(=8=2&peULMFGXVmpt`2ZFw0eq9XQch2MeW_^*wN?>^^8LF(zFEcjf z&XW;ONb=nvr1xshDYpCjcDTdWulM!U)$ma_6BEsZ$f`-DZ)kTD!|dF=t{GdR9VJ%n z+yoS9%bcL7zK{qLA4jazxo@o5i6u#KB&sZyA>Gri46?N_;>W2GrQzn2yy`>u`I@BoSiyD{JLM#lH^sMjzO7Z$G8gikhyyWQ#X zt=uXj+i%&~V|CVdJ|94RyfO)%!)6=O9WXd3O=y;fEMGeW&@Sb;v>E@`t}dmzii5OQ zMLlOrpce=L@6m4e;JI5T%mW`4SS!>J z%p`#OQ^cDIFFp9++Dg5~$3}fuqBW_R)O?qrc2_8(tqLM%UgDcR#`g8wgO^u~PE7nP z*PHNKDN9VuR;3!qu^=S-{0Yg?*8uHy`XZ`o-06EM{lTUSoiK_{{ZgF#ATZg*9&P-= z8o#>tD@0AEYa&0{`rfJLPnb4H#3u?khr8Zp5-8p(S(v`v2MsG_hne7`rc#$X?QU}h zFfj{G!jWfZzQn(5kB*0dp01w>?*adZ-0#tM2n3jwpjh_h{G*Fg$|zawAfN@?p9`RD z7xe$DMB=Y<@Z=4Pn0|A#F=+s%J-%(LvG1W640;oC@%tO7Bt2rMlf9;Qk!0Vi{Pvb> z+-Dn^Ty)CUDSLCd=ge=&|DQ7n4(MGPJa&voXqdS9lMHIc;GWmy)mLu&e|jum?(?}y z<83T5JF6xK0=KQ;yjh7BkDrK(KNmyxPl~2RJ9pNjN5_+o20s}!MhwP(*Pq*Lr{uu= zC^_%P#Uk4>H*jHPuIiKYr?q$M!{`woN<(8jEa~}69&r#>5vMdaA!CJ&IpZqYs&I7u zc~X31yvH=GI-hLlJ!&XVjxft=JL_%EquC-g=N{IWae4f$Fu}0WR^{aP${XkYw8{sx z+W4)bZ`*jpk=Xl{<2nlGuRv=y2+}P|HV_LZ4W8G0ULT%ttqfwvyG)iT|OnR#EBsc9!w*~2wFOU-MePY!QQHE?;>I1Ok1k)l+xLv&b^ z(dPfr`1BOF4%E*(;PQ#CcU5OVXi8SKxa&Ep;L!)1*8Ug0e1NGRj%%|L}msGFbNOV2)FQ;DW|Wghe~$hE#8B zN7QQ_6fdEdBNl>X->NOFr+5RrNN1G|@R~Zx(U;s{%nkMns#EZ4d`0 z*N*OuABI1Je{z}}$a1@o#ZS;vv74KNb3RUB?i9Cy5!z)cqA}v{Lr@OUuF3Z4=;R+& zpTi|FJ5!9JNQ%AiMcUz)H}4b%pZk~NH3vRP#KTf?>nhs!ffH%Ik@4nT9HV6PlOM#$ zMa);TncIAN3jiL<75nNWAez$^&#b1IDtPbP$ipl!&Pl%|Sao^GKu1pH8qHZUR_^}o z|0*uEh_1G>MLw%G?A;$tXl=W4EBqjStut4~M%p6QrPB5NfORVu9OJP)unW+3ccGnK z{JWfT9Vdd$$PkD%@s9heFX)Pa_DclN;IC zdS3qW&@+>p!hID-QPvGANo^|y6S0HJWaS>K-Vt`@j&4H+F)#G+?U+IDXUy}Y=F9eM zKUDKq=~}sRNX>s`I>h+=$nO@Z3Mg-AiHS zFt4lPWueQhvdMwM;{~nsAg~wemiY+ILOrXG{pqAEFbjMXb-x3RK+;23s}BBWc5fL- z4ky~;vImknLeagw!>07#b`An} zy0_+YQ$wXi-7|+&_kM_YCzQ?9dJ1`He;_sYgh6zgtlc6rSg5!GxaqV0-N^gyC>l6r zHTRYW`p76S4F9>vq56sha0=7s8+jZLVo8xXPRUzaBl*b|(i#QCgDj{-{=MoO^zdSe zKE2lnNwFs>uhrAVyYuBePc9+{B6IQgJnYw2H^&7$*-QGpeGzQox%PdB>4#_Gg2N*v z1$mlr%U*V&MCS!NYBXVjO;8g=kvk z{Hh)1=#^b(&E1-N=oaI~N=|4ID2k+#N^nVkuDWMbSF15D>(=8_HqA`XYFEj6?WBVM zn}+#vJ4gwEo#;0@7e#)7!qke4rCKTT!cr2L?GV@0TWu|0CwnYxyv>i7)k<*NQKFO5 z)LlFz+jUPMZB2@qdo{uPpJmA(46cVdk{VMP=n^|anVZ#^y_DE(ycS<2np|r)LXmzm z@AKFV!{?!BQa>dK%+V4Q(+{^fvgtD3Rn7hG+ktlqhjDRZb|g({LX};0*ZmPjc7Bf7 zZhm^7D*m7Kvvv@Sd=OTvh$bp5`V0ojdqCi7huP|ErCM z;JsB8)Ki4Q2yfI7!zPzBIJ>&5if@#SoI_A}%H9~t4@Ql3YDojfprlU;mDa4GQuas* zOLsBd8A$gJM@gU?VSeob9~aXc(j{Yxv~!o5NRdqR@}Pg=B~D5g?{;dU&*%*eq zvA-Q|>3y;=$6T|KRkP@K!C~}zTbEs6#O=EJb_XIkWD=507;{`rHt#2y+Qj?e-hUoP z@NPkc=YZ$lxM^I?-}j)#RZ55v%^o1Ea195!Autf<3Ug#yGqP*F!RFG*d$9W`S@504 zOKo!rZjQF-Z1M#>q?V|i+1hacc9EzxS9-mhiji-;Ypusl_xeHq)F%_3UDkM6&6=8O z!wj$4`;#)$bJChPw03%YVQ916S5~dLH)6zfpZG0bA%MFpz-HIcZWF|X?MC@pOF#bgyi3qWqhf*VJXjL%qL%w24?2l_)nT#Z)LlgED)xq zOAoH>tf>3Ktybcl;Za2xx;X3mWTcA0r9sx2hwP0oJ-mzNj{QMe3<2-322E=&?hR0X zkID3HyxiJSUBW{K%K3>`Fb8zSi+dlgJ;`rGIPYn#BA~34?vuo+cObAg0I(9W$1Yx^ za+gE?_stUjNw_y+LQ1>~L_F`d=KkK6ic8s?Ef1WkDA~(`bQL6}46L9DbG5WsEAA1N zXDClYQ9Z$>p1g?t()bA(fBI7N7l{;}+PXTGXZsgsKMk1i=~+y5R5qZfT)UJWfqv>c ze%Muk(Q`TE7X-G03Cqof5Xk7R4{ErDhRDwej8H3kdJiS4_Wk_m*yjx*f^m9US!{nS zS!)t8Sl<6CXaBjpk8xmx{ISMs?$x$<&s>)b&GB{aw=Q%qCd?@SyeBE~xm&WJm?yi+ zP7kKXqc!(-Hk=4qT4&B%-Br9GTJ1|5`*TAz9}|Ob$}YZpi1B#!%=vxyBo6%Z^&T$1 z?&s2nq5^Dpu7+|QwJ3Yw{YO>#=bNYYx{5g2k>>g9W#2fij)V+?hi;*U`B{@RCb!;>?rloMCeR?7=(uJap;`4p?N6cSlI4h~z2tG)#dzyI+ zh4F>;5T-+rwg*#6O#h#A{+RbVDfYNljJ6_7sfb|@D@E$@JyJKeV1>z zs-3<;=i(t4({-CYh?#_c5<=A$MzFmYNmXcC$!b(=m~gl`tp=FT_|+LFu7ZLBgEDij zfb6dUnCAQcnT5b9-y;&n=soVpquZk3Et#$N=?<5wtfb($BzX1(WNE3>!j9$ z)dGzw*0Iuh_SiH&Q!`b40z4DqpR5-7>!&ZL%zX79#lh4wylc~hFnXuoU>S=LcyCjh zuLC_vOwfrvwu2hG8mv&>pEZFC!@cNs@l6ew97wKB6vDyu{5HA2$}H|alLmSxrS$Yq zPKO)Pww|i0__rQ@yW85vWAI+tn~)g%bn*`94`Wy1(tbm4xe6b&hudxfZ0sFCMOCO* z7L!~?Uf*)T&6+NqbpBTV$Y!ts;LQ0dF*JD5lqKqc3df(Z#}}vDo#Qn%;xfQ7(fQ`` zc!3NMJ-($WF)o?m17d}DHEvE-$;Z^W3LjeLYD@E4eWu$SkWns4arG&ie`|)HPbEM# z_W5u_{%*7Pw>DfaKep z_PTr4pchkY`0?)Tsit5_x7nA}PRv@*aQ;4Bo+z9)2+HV$9UK>g@oe33;;pN>xb$X3 zOZ>ypSFujB4YB!JtG4BQ3Nd6D^5M-;bY-~@8j3VL;=8HA-MWDNNx0HxCsdgTlM3HI zq*BiBsYhMch zjxh{qjMe1~*(;6Ve`q~m^w9uyXu;|B_MHsLN2K1_UKHE!Zig9kpox+3Fp~4WoV~MA zZP_>(?^VTojpRJ=CkUqQl$qDAo~&0Gc#V!~>H;pa<478c1S6X)8&|Snw&#qGn$!c! z42viLV5@ZIhiT<uqoiDoo;BlBld8DKkR$i%3wS8M;DQBQx0 z0|0ZZdJu(=of%no&HgxxG%hllTIXE=zGdEsv!4QS=JHq5g@6MYjI`$}-R69VY5&sYNA8qt z)+&cZDUY8vug`uxstHbpTJ3urYzpw)!PR^bL#4kWv%UUha^3l)eomM&lq;T$SLx1Q z7{py$P<|cIi0ySb_Af}kZp%GF;veSV3!A%t#B-p=hCWv(N;fsnsk5Sygi1_0J+5Z@xuLn|sfNFhsZ8G|8r> z2*e6%^4FQrnbp`s;RV^&SyMLi&*?f`EvsXS#{~KA_vaB-2MXOKfM2^jj<^6zR@Y$p zWPGa%->_bfV@EpmP4mHsw~VKhcRFHy@7IuYDuY?To6onVt6c|O3?T3Xxqvj1zgqSi z72I!eVP;P_kk6h=@-CA*2t19Wg86>uhA3Ltvj$dT@~C4Y|}~&Zc_D z)BIU2QG!kHD?{b%@I!PW0^#1EG5CEH9I@qA_^SueQ9mEFYce4UHr&K{(@l!M+Lfng zZxy{m)lN30ViVjDW)4NK1U_|@DEILec{*TCTYIKECT)d=fjR&e&M-|#h$Mb%SL>+5 z+qy7jq`5rhLx$H>S!{hD90lUZvgd>lSj5!XPj@gCpIWMy)R zS36X#oa4yW@(!dmSCL#4>DkwJ%e=KcTX?M4$RKs{qX%0fm@C_PRMC7WgK%(|Vwdt> zy)Iz+amav1f=c_IPwFDD|DjLJu;hOrVZ&lW9v|@g)7Qdm1$P)E-J8}+H>c}Ir)u8~ zq}oA|#U>Tn8=D5z4kQ}tJR0lY%W}s`Oh$K?!pZIxlDm*)Kf}AG50qdkljb>UqR{N! zil3<3)9xP7*LbpiN`IU8XA@Z`ia{K$e0H@8} zP4CB-Nqx8gRf z!MiVb&Rv%&BO`bjg?+i0QB#%QlD#T?!6Cds_1j`^mdGG+lp`WLm7`E=k zm%#}OMH@~d?`D;a4yZ}G;_HC6Sd5{hwb!9P7g5vALNg$28kAQ7K4eh}TdJwyR@4Q`{QYCbZ3V>1U}=o_N;_KZy|-| z<+lpA$!GUiN1vbDoT=_r>%6ZPD&L--?HlxZuV1V0?eZx1)NDv(tBA$PCS{nM7ZxVw zD-{-jmSuB{)HWEIcwKvJ`}0k9A3h#@i8tS1gSeL6D8}@6*v# zqIkV^Ve1J33bQEL52c5fzIT7_y57%W@gYWi3ckQT#yeXPlR_<<5sI$MuB116f^fg* zce&~^rCIT%UR^R(gheJ-wf5r4j4l{q6c?gS+Z3j=c$HLWaxJfhHAE_aX0agGV@bcuJ1&qcC%@9U>*+Zq4$ zGQ;<=dLw#e=0-m^XkoV@U`oOsOR-t?`)G>_Ypb8en`-e)@8&~%eGSa3>_tQt32)_q zNA624c#2C9dEm!yQI~04YAR^n>?NU-#HqU61r%~?KO$Im+@LI)tz!1w_hpu-+UK9E zwFI9#bw(!>25@^ZU>_4yWHe^+RJlJtTo-lTYt)hnKD%O6YM%J;yMU1Ve1jWHvs_@~ z@r?9@L3rF#zm0jXv=o6UtpG8y5p_Im3J;xfo9q$IeE$ z*&?4ck`VOM&)6pk;9t+pU5E&X;KoEet$ zFf~ou|$ja!W_Ywt5+zhgkj;pHXmTy+Kt23-)W){b`; z#Gh=Kz7|=aojx?LeW(I20J_$FFmYjY+$Ln9s4Vs31rar?yUJkLHsyT9jRhd`HEE4q zQ8@T!P;>w3ER*EjOsADsJT{p`RPZR$4Ou0EL;3)1A+uK>z1LO~7G6>32-JHGIBBI+ zG}hvc$<~TyNnHp9$@+aRIg5O7ZSaBV!njItyPR9$!vRs8t|nRAaK6!q!KJFa{>@Y8 z>1DZ_`Mu6$unSZQs66gEcN#pWu}tjDebOH7U6ww!H|)|9lPI=wl?eH@xd~eP(8MD1 zVsAWTltrO}s7SpgG~x|k@Mk2}t7DK7B}yG_@Dzt@_-S(lUdNYz6YjeyIFfVzF}o;2 ze5AJ&B?GowU&y$Bt`VLPieB4c+kT^fAwRt(Auy>uVvnT@7}aQ(&yX106{$OU%a@VW zfdjktcmj?zR3&+&@H7U<#pfNQyF3D1B@5*=D(c%?5n+_>m3>kT0LoJK^$ zuecX%rKu2D*X_e|8=^DYmAu+(VScrBcRMO%ElaOus4mXzCL)Rk`+SrE{V!nnX;TsC z@mDWoM8nX9Nfb-!b@66ZuX@3T1%gzKqEab$jNR*78I}AtECRCK_?G+z2twP^w6Db3 zrXXNda@#Gf-b)$i6J;sKa+pv3`pJ|*paYovGPlOv>7A3<+=t6>8c2cy51v$1>HD(|VxkBzl|J7@A0z`%jelHpydFX4%v^Ik0`!f`F=Kv4znQTg z1_%6Bvbd^zw?5`pKMKD$`u?7BIu%Mj2zGtR9LP~FjPo_9{|Ft+U&xl~<%JfUliXYT zW;~|sTbO`*Ss)6}^dB!Z$#(zvsrLBzfcE`xx!b9$!4`91RJW9QwKroBQmQwEs&T&qHNeFZP8x`==heDB8crZ=Z`xGaSyN~&WF~g1OJ-em$xbUBi z9a;N8#}NP95j%nEi(oZRLKygq#eT<`U2CwDrMic&BToP?Zt6?+X`fo3lzbqH1dFm5 zBRof&JP#cN`eVSood7Mn29SZZe1D=_u%Ns#D(1O()k8L%gi+ON#h-Di>oj<&>o@@? zJN~HVUF>Uw)85IfxW~R0V&CDM!}(0ktjh4UF#Yn*T1K_=*t~_?uBGqFn&J8@qMu@d zF6P)%nW^2utwI^AC2>r{-aD@%*B3u)+(u#kr%P*f>#jlWZZa!X_&=-b)%qVJ=2kt1uBJ8%TMRUPmzsQc^v8qeMF>AT3NqjF`<-%(yc)R{cTFtVn zpQjJ+?QjGs@*_u}@$zk-wDaT%0>`6r-2J1oxG%9Xs}KxfG1ck~c4++LrLeg$1Db0`O6}2Mr#Tb-TioCstAi!czK>9$uSK zIV8Z*OKH})hkF%-ew+~_L0q`I-J+n^wAf(xeK=PQclNj^iR+X>fPm=bAg2lrasqd` z%~6mxM9ssIA7At~{^|bX!zeG|8R@+*{v9weSBg!hK3ezpkK{AAE$}&4R@gDle%b;u z+tJ~+e0(&I-dRm=GB+JptQfC+qX-|}$Y?i%pIrUfMyYJK!UV~7GHjRr8)Mn6z|n5C ztK~cr8m@xUH^=r}!=_zn4^?~zfEP}OObY%mwSfVSP_+#cIrkCGyTRA_z-Mj8W0U=o z!@P$8naSCW?^tkCbZ zzpnO3H4u*#+gR7Y9dCSDKslGJt~|ORZBW+6$tInh)*UlP;ApnW!#B`u1Q4D3Yr^FJ z0w5xDaS|Y~l7WU4j|B+a_wrNu^KEDPF7WGbL~S%iLz#S zK^c2PoM?H9q&QBi-HU5ODtzpiVTKeJdKo4#Q&*@~G@iXtnU4#CYU~1fu`rd3P&AHK zHzsO9=~_N&RkE?e6!ZZEub{pzp-gS-0F) zX7<}A@$i#O3r`gNSy1;7z^3&_qjd+L(h|}oH`pm`PE?J1y-_i^W>7nY=&WS9_!PN3 zU|zBe#diEEy8Uku_l7Ld6(Y1vA24Yn02S@U7l(AP6>}e&i@s- z)~HZV+)foKbz@u(#LI)NAR&YU{+@l*!!Yv9Z{YR6W`2|Iq>iNsSgc;0o&tGsTW>O} zDd$ZCHaz&sWdV7uQ-CP5tbe98^C2Zb7r6ybU48v+47xkHu~NT z@IX$PXgVG4uLf(gHosII02gaWz5&;expIDexXYlTPo%efJ5~4TGp^yOrRlZY@nFz} ziel8&)!+RYmHY5}>FsN@f;m8#CTilF8MFVpHSlk2yg~hG9u8b|lyig_Ml*9oql?9; zH`Zx8I{>&snxhl!LeXQaS-wfnfvy39>c0?Sa9D#$SM~ROgxwnCzl^5CuHI0u)kyWn z>&E;(0>IB)$ISlcR_k2Dw?GuTKjYQjF=^Kon-64H(#3ZV*2i<--HC|yLdP)zHPXI; zvIpIkurLmIJo3g{E_uWZ*o<0+f^K8BBaJE?fg$LnN%WbLGIX)7Jr3(A6iYF zcjp0{%dMF^UqVbgN_<+{FwdbxxOpBr7uOHLBM7gWi95=Hy7czM@5;2tOJxFu7e&c( z)48$>eNWalti=6?j=UGKA|f0@xIp?TGYqbHD$1ji_M|%B)kJ<^j0p&%`#V0pRkSCX zL27c1ZmZTQ*Pkvk+tS7?=1D`b2TsWNCM6L z_5}=X`^*D(fdskFX<8+v`I?|ljhpL}(+h#&Xf{lxZ?mXX?EaRSxx`E8%RsG+d##HW zIY7)eIn7HuxEumyQ3z(D<};41bDLHLEB+3AO*H!BuIf`9yj3tsB@fusbd8N^;$U*& zU_-wD`8XGJK7#?c;b&0T4<*! zTyE#$)p+h0D;D-S2+GQrs!^hQucDs*IPOY^%AvW)A=DgbC%|Z;|?Mm#-R~G zp(D}xg^0o9Xto8-{YbIgig`Z6IGCuP$;kma z4IqrHf!4}^wslY{m49cV(T7iN|E1m+YWIJr&HPtyCfr_Nx@{h#u-n}Zpj}NL-a8D0 zuYt0O^R3RuHhSqljxxvfJ%Dr!V}A&JQlb*HOly3yskAv&Yk;QH->FUIF$f1%mXZ-6 z`m-4?ox#V`-G@5{I&NCCpL}W8b>7I!=}PF=(Z(5sIzeDL&G5=^Q zi=YtMlVg};Uwkr-kFP+Po&9iH4i|P3Jq(i zW=Br>1*lV3xl?`8)s-sbXs11^lGalT*0&!D)Gdv{W*g>rlQoB!9X{;?_-SOEg)UtO zpxKhX3Q5IdqJhC*Nbp@iv%x)6WX!WnW`h_gX1FkRvqeRK21g$6Z!Lh>!<%{X1HF$a>h=4U^g^^6iL)*7k%kT^ z6KCTO6lH+5tIDOBm%s4B{NY6>TADo{D2I!gSo?8QRz3nS-B?W6O@e^YE6hLy^Gi;X&`b2L1hj# z`FTMbO>tK+G`}=c_}{UFoJC1#v*KU&;et6=!2uQ<%B9SGw}9Hm^W2<-_juydijpB&L6?{L+e z`(JLWM44OT!}+f|j#cW(1Q=IF&;>+2_;;t#Q=rHXMNONU)ybyL=CJl-hBa!nG7v`E zT^hyxHy0S!PxE##g5lu>FH?uB9ESL(tJd?)>IU~EHlP|c z{ZiV2`1)5G5f#F9@;Qq1l&zXk=F{gOQ{R_Y$O z%#cj2_H?J!UYc+|YT_?o9Laq{t|U9?3Eepm><(T1zyF^OD^+dN1VK&nskyk2wo)RZ zjDbYC=$pm-8>?MQDAm zh>mAo{Z&#y^L`5#pZK}Vzhhq_?@NK!h1K_nKFn~HTd6*8`jTBF`8|A;2~P@XUg<|p zhMr-GwG&uBf#UWVqVWF1n=IEsmqFh~r4>Bf6acUjoxV^ zEFh)KCB?Wazt%ie;QPVh`d3$Gdo25!#r5gG$WEi)xKsM4NjXwYw&KS{?60?O%p2($DtJ*KAPEhP!Nmj~3;C1NB?$2an>%03! z5E1DrX`V6(=P$^th)s$kb3+(aB{%KwRf@)yYH=MoI`H|ta^hHX`PbVJ!ULAEyC{VV zse9?7FXT^F7c3vC#((aMPxcU)4HycLtRj67@sJa46`hgwvCYuBVSdY~- z7b{aO37_4}-T~1lMF3^}Ip2|hXPkj8g?}?Kuv6~~!cb?8v$KnIpFKBHvxdo`n`p+K z68rI!15g%2u!{$&9OeIT{=Q_P=C*1S2NcFKS`&TiUv04uQ3v?-d#ONw&WZ!q9$LT+ zE+sW~h!C(iNFsfor(V+(#Gpk{8F#5S&_Jx|49)mPKlNr4VX`G?&YLGSS)i<$VPF2f zvAAUW_XcnT`(4FOH0q}Rnr`wHPos(<&Q1gJm^yJG79@7D(U()=?b^>C^N3w!;-l=E-R#}PB*3J5-n7|0qYYD|zph&A zJ09p}FP$>NrW{2BL5a@j`6)`Yz$!p~fwg~3XUPt^ zIpVUKH48VohT_XjT5QGUBc5fZ|t4 zG?N>)$97k7IPxb;=V@flEZI~UqzbfmvkGMkO!x@F#5~Z+ZFV1+)8_#D%0z^vL+7n| z!nlV=#5^*sYQEsYlHccw8oe4tE#JxY9VIf!St3AMX2a{;%^eB^jZ__yHKeC=ak1>^ zYlNTvcWo7)u2OXmgsLe~H|HjEiR;TtQP9y#sR<1e0Wz1~pD-0aMF|R<7Ej;FbvH@$ z$96Ddr8H_G$edGXm)ZY3+8+|x6bjmAU;ouVOJ8!mFGnHeP3*B>Rqq>DlBSyPONXV* zW>xmtE`gPumHjEV+HFNTx%V}~fm?{|`$g;{zYtObr&mrt%B}(FqP*UXGE;IulgEuj z7wA4Te_&qkNdQDARKsIvR#oL|ww@zAy5;&Z`FT`1xTo<$7eNtg-9PNew?$|~SgonJ z{!XXeH}SwjJQaUV7WYZH4~%7aL;3cef2l@I>3PE^v$d|F2bwj+PZn%)5U~1Ay}7|)phSCCKt3i{D@x6M{~Ygk4`ayCul#8o zyf~Fu#cNAR>eMAEdEaVSYXVk+r<(T^%Nu`{JaSR@VKmVXm;)GP@Tmu0nQ09N)~AD2 z71Q}Im_m`14}*uytI+lY63_emA(^HSSlFyoUo8_14uS9T_}C9)(dM5#xiESdG*=jx zBosDz(0lUGVTC)CN+ygTlq+K1TTgHvG!DS3N`!FO$^mMYNN#$1deBm{K}id=(kT#& zXF&{<$LdM)*Ds%aaGmsI5WcTiPRU*YXZ+LewlC8wT_(rWk9?L>O}Up#V^s7w;aQE} zx%*V(O+M^-Lyn!;!^f}5g}hFKr>Z<8nPnco0;qzTZ2cAq6&H;Nj=(E2&Yi)Dut96i z;O`RUeR)Ud{(d8qpe{e3Li5ck!%}5EUKeD~!&>$_2HiJUU_lh~5i<#W{7luvtdM8Vt5aKSsq7`xWgj$YB+=P~Qg+5&d z1;iVvGIHZY*}Sc0WW(tHwq>|1l@s6a^eD@?=*f%9^`gZLKhjVBm0x5xD1l=dzC(R4zs`?upFrutVr{IE#e z>>;aKPkgLt@NIXpKW?$2zQrTXt`kRw9os@h>)#ym;fWpWRF}{G+%2UWMX@FxauLWN z=HROJlT-9ASQ1-8WUrA{!B?_6%K9G}>U+*RZx~rWb5ur>@8kdveo~~2!chFgpwmIs z=Kf~Hp4Y+HlV3hGB6()jfwDnoQ`>r0nl&OI5G68l{S&2Cd`5j89LHsDA?5&C@7XXl z0@^PtUHu(;Ua|K%sUCE{OO(1@QBz#u5u&T~7dwny2UNT}2Lzvix+nR)_H^E8i<7?^QQY;RvSN`V{Jp9h5BRMl` z4!?HRCwWN$TZ>eQy*u7AH>@pXWVr}rem#~9@CQ1M_6^JP5&#-8Ugy`E_I!_s!n1)Akg6lGU%U;`7A%WVse z%dTO!jrn|;KX*v{i7{>4l^+FYH-&awTQgq2);K-f%x$^6kX^jsH7>mibQ-i?VCsP~ zkT33M+SIw46}X&aEYNr4$V~{tGYRk@oI1xtF%Kq%{BSix|^Fb zWC1_xpT-2}K9m6Knu~Xh=IW?jiym;_%bf2U+qN)O-%Vhx@!hsIZwbZ)hGv@@L`;Zd z2C%m10Xc%@yD+Ckco6`!ynA^HbmJIq6$bwH1XqkXnAf`t2v{}79&XQXf4XG2Rcrt# zSZ81;`EnX@Nl{`}&3VgpLU*;%Z;$5P%1FLuyS%}$JY(?F7-~LF$l+7ms7=pT(|{V3 zSyE=)3?o1dg^ztwnyc4Gj1&egQP_TMG?HEIzPX(;4SJ`XScd!}rQ}4zIwg;(Pp3EB zrfbxWDVZli*cTbr^7V`KRn-CQ{`?n1ihj-YTMw<1KU(<$-58I{IMn=;>nCBkL&lk> zv7gkED-55FXj11ZfxflvT+Ipnz4?zc1u*TGnY8?-p%1h4+o)wCRlg=h=NIUXy+#xU zCR2O~aTq^5|Az|Z!xLI&`PIug9_t)#qjF;nI@XGlX<-(J^O7-MP5N7!qfbHex_&ZS z6F8g_8TdNqh1iLY%Ad`>;X+RN&vNYsAyv0es2U%a-EYIL_?lqe{+yWk#y z$XWXDW|?UtK-4gU(eL0-o?J@(# zw0nOybGt(PYb2kKSs{2vBF@G$)#?eo&&I@4B3i)>qDuE!1@XY+$5S=VN!tv6Yx+V9 z00Mv$OALeGRfMe|55`QKdtb3wz7eYdGnM#6UhXo2xuG}znE$dPG+%Mw2HK_Kb<;e~ zJ}^Ze|6q043L?JJ-QS;=Y7?A(aWTy}Gy^Wr^9Hv{T#LNrG<3s%^<6}vO3ZS(6qwiK zxDT$(dLHPR6C}~}%=(Z2ce8f<>cSSFb4J1Ilj8~`stoLikPOCoF5BG>_&U!;1RDgbZp1wY(z&fY5;4)b%^CmE()i7d4oApYlO^b1TmvN~rRg zD)*kt;q=Z1S)0B1XiHi}6rO19XrG z1YTNWc4axK&947LV~Ck{pTj}g=Eo+l-*aK;hvkSPOy$iyFms@{=E2j=x5~FnkABZs z&R1vlF~ab^V)U|=$RRMiNcL}{gB+}B{44!2LaW8Y7Zih&9CyO$tm;+cnN(WNc4Jl& zd3bnm{IMqCyu>E^ZS-O&xkI{JZd1yEU<#N6V4Ouj0rbAuNURXZI&n^zL0P_MsTO%l^x>l^OwZ{)T4oK;mUeXoQ^((t&sO+kqCZkwo0# zwyf5)~DlUh_`By+7~t)L4Tu#_ey;$IgVD=LU0)DI7O+HT{ks6f4!&bF2Y8sApXr?~$7G>wN@YHIC%XW0+0BPe+!}*~DUmbx9(2q&5RKVH* z3}*z(Kgu?41we2v>eD@^o)a11`Qq;2SOpOB24XMo&02BxEQ-oyD1h3T^q2kS=5aL+ zn?s+FR|?;N*)Sx+IiY*gh=q>WEF;*iZHle?nQP)7lWa}nI8-P%(MuAqA4m7q#E5zD zxLB92a4&S>_sq`i)t76ke<4SsHTzzhQ+~3Ee>imE)_+~?El-U|8y6yzY{oubyOLkd zgZQ#15e}MzTbQmp#&kX-bXV;`3LrPZhEl7(>#fqcQiAKDb+jKulYY94CvOz~*g|(n z`zBQQDh~HM^cC}Z_+2!JjLhAKjc7d_+Ig`-8du$RbQOL>w)Rj-fdN$6<>RZvbH4%j z&0E63=|Mv6S?qOmsi?$UKi&5GX7>=W-WKk&4{eU9tmEp#?vlJ^rO_;NYZ=A*W%eS* z>A-W&-sU>&`8&w?qxxL9Yh-?y8_m3|mj@sI65rCWK)=*M3VfBm446p;rLRBpyC+cvkA9A)t3Dd_q=+@LMkuof8_Qq-jRiX3I=;Lykg ziXOyw^+A+2n5AeQ`vl>`XCO&{{H~sd=L6!sylk?d0U=w?IvR$Ocx9famyh z;mTl1)M=UTg)JBYDs41f#cs(y+KA4J_mBt_S%Gp9_wA5YZBs-#w0CiDdUtV{jUIJJ zYxTzU-|1aRaFcvUUbFLg4@mcXE~M!()BX|aLsaAe$pLa0fj~McfS($7fSJuW#X7+b zws^CXgMT3b`ZS~r)%^K5_KKP#Y6(wXpgXb7Cucea$+(3WP8I3+PgsUh%dcW~H|3P$ zv%gJEUWw14H|i;wSM3&^BWMIQjxpPFJJS}l-qY{3cpPB8>h2v>&AR>sG?duC%gNht z<`^=1`%3qsirLw5_TaUI|D)aFincCY;v}h=7>TS%rDyWF$@-_xSM^*f^KG|}vFv6y z;FLV2?4Q$QQ(EA4bOBMtf(u?^t+ z#h`OR{nfIj%Mo)7gWhN3nER0Ty-Uh_?=Rmka_H$X8I8s45kog6>=f7=WMvR|N= zpF;fGn0}g2kdxXNdsV{Wp^fx*)7Z<~-fEz-Ia-#NR9{OxD7`$)~?dgiV@EH%tCZoaM#HUM^>pLBiNOO~DnPn@ zdHT)sG>2mo^$g>>aarc(06US#RHlhboR1)Tv=#tfp2hon`fK^UfiSiNFl5X*$Wx57 z#36l!r@i+MyHn0eP1oG@JJRkN)_9LR(8t=FhKRc^u>!nFXjE)rCFjivi(G{x1%1@L zd>mTKV>IKIZ{2f()Y@LEaDT~ni{Y@CyKMJ9N8E@5%3RiA$961S-3LsXp*!k~T0LT9 zDwH3{9qSrv`CJ!6UIok2!DZt*A(X@WaI#wB+{#ay-i`Y$iLy5arnxRso>YQiGOIvq z0PEQTh#3lTm?!Slj;`o?y+G2jp0=N{b(#gw-QcBYus)c9p?*8{?3SA?64&^xP1AYr z<8Cg>Pyyv6ETD_sN@0PvAj9j+v%|xI-qTNn%tk3MUg;$3(K-zPr^I1f**vf!NaqLG zsNZ2kvCR+;HG7t%X${XWrz(mqO;^nntX!$J+m!4NfqGDzws2iOAK|YC40A|-)meXU zu}-JPgeC3w$^ySTPk9^;(6tvd+2vNmuV+bWu28nmEB@ZUy!;CEM*MFHMWaV~a5X z;p`K_gqXYewcYsk*wcbN^;5m&cb}s3BrLou$C|YwGrLmHx45JATJ0hnwZU(3wBX_4 z8K}clL^QRHq%*L`|v{jXs{AFJ}I@8H(tmBj6 zpzV3rf*T6_$Cnm%BCSq6Nuu&%Dg`%W;{~R9FOF0|e_f7pX+R+1-5o^|IDS|N6s8a{DfhI|sO{y+&8oa=m-7(p(M_Yb{G;7fZJ) zNb^b=v?fa(g4$;1oO;GyzXBTuUKz>y53WzD;=vC~Py?z%W9LE!PE^*aEN`$aUQ*aeNU;z)97OKo=m7y&<`D-#Jg#cQP905}faV$Y-n`R6H|yGj zc|b0mNp>d=1p?}$2QBS@=jq%@3qqY=3U9Ij{pgdvcr04%4KXbQfW?Pn5 zli#g}$-l0`NiOL6$t^YB3g@chN?1qd`npZ)hGpaYx`O5+nrPcf7%(6A=6j2+v$$1X z#34GzbwX93>V8j|dLO7~#eHB5Es$gCU^BU%+G_Q2v6nT4cZ64+z8_Ho;*45lTX! z$N62p&R{1siVQP|D2eA9DwCDj2I?C-<~G65Z^&uZv9POWV2=&qa~p0TU~} zJRBJT(UAD$GVhDTPtG0t-bg`A{C7;-1O9LUSh%coCyqcra9*xvZZFtarsw$N_m# zkmx_0a&se`-~ugp+g6L#70qn8hx?GFF~a0^%J6vX{ud4dmEtjM@4t--9TXYemi-^+ z8(uQXe$@A~jvFt0T2fn(amqHntqBBTAf8W=yk%m1*LV z4S?xfD?81ub;9eOJ6#K&uU|RTOne6v8o3M=it!Q`!s_cwrim)Z9cU44uFzx;)LW6Y z_?eXH|GhaDy7S4H()SF%3nhMznH4?8 zB`6w%pYoNz)0tpvtK;mAe2cC#$-%o#uEVJ(f)o6a=oYc#5bxG#7`+;^VxhV~N zmH}wsN;+~ZuQy$xl1t|Uid2d9AF7!buz?ykSx=lw{wy6Bg_mZc6^66>5}wQT5*t)Q zxZ)m(IH`H#PBQxv@u!e*(#I6%N=B)T@bjVHiDp0#W)je-btIQ~%G+tpiNh=^+X@v_ zXlpgUd}SPI=4Ufud`h!tBz6L=?2D{4Oh#IJ z$Y~Q)YmLYyVrFx25(cVgJ|;<={$k>7YH;ttay`);@ro(UrB%tSo!pu5;WXH*(ZL{D zM}jB+qr&7<1PjCUeDuyNeFBrbCusr~3;{}kt|1ncPPlmmH$>Mrl2f&{BmK3nLfnjz z$YYJ2$Y#@uTPYj>ZWoX0y=Yue$Wh6RTvR)6n#xPU2dd3goL!n;l7jmJF&oQsW_OD5xW`StDKf_ob($kP6P>p z1pL1mYyFYx_28$PMS*l>Kd~3|AE0WDuP5o1e%>t|Zb0;*)fx3|QuAviJ-K<#NuE#4auW8YN&IuzAj8xK$Vuc;|*n4MCePOa*&I8|L zp<5Aa(2Oxu_7Lmh01O9xnF$2ZO{Xg5ZN`D)^T|U*3q385>a(=FgI;E}a&;bX(8C$z zc(_V?f5v|1su<|Z<)4W5zMZ#ja5%|7kplb$fyuHN*VvltbKH@q0E{D7w`wPwKe$zy z4b(gr2I}TZW^uMnC$U21E5zCP>}-j4A3ocdu9(0=ObhwcCm&_J@jqoWTbKfGI5*I#Y;|xD;@(fo@?Z z3`EHX;2C#eag4_*4cNsa)!kc}j7n#Nm$nvS>yul(kfdrHxUE^Kd-`YVP0P-r&Ou@D zL76l3Y6>FIArSSBY4bEbAab zUNgT&7~Rv|sC28Pj;2V>Yi@_8+Lu6ysZ7h63QJqX%-=` z!7fqm+vd)Jpl;o!qR?xiU?iyw0B4OfuApe*)5Zcm@Nsv@jf~Z06N)Nck8b5gy>*7o znYPXRY3=sl3FT>J5!4S*P>0jJ1UXBVi6e|`Dj{j*y|raP>Q?}8FQ|0g09 zsQhYwak)6|YYB*LqH_dFS~44qHd?%i022LJ{hS>LO5C>rAf{7~8^{y|?mD=<6bHCA zQbY!$edBnc9+iAf%quieh(-HIQSW_{?e!(Rc4P=72u!U<00V_>VHI3<>q*an)&!h! zwD?1*Tt#SZ?e~&VOsB$Kx|@)|&6XE(=`crl5PB>M6=9mIW+!XIG0nN6j`D%QTc$OK z$KI@X4CqQ*YubA#m+4GTDbw`%thW8`JS=3}c~y;4HL+YN;nhIT)`eHdyHtM}*dM#^ zRvV_-a7VULsdw0;tc>?Kpa<2JYVvvNk-3#QWR_#NL5)a3GRr-1a;4gqlxm}p6>#_D z=9hC{wjR;dS?i@O%heiUg;X@*i1+y`HTk?(kAwTuaENisLEUWWOk{wVq-tm`!u>ZRV=1=@$q5-bzk8vZHRO}KFoaNk3PWsIZpqii~W;cD@r;K>|7h5 zRg2BI!6$TWlC4qw$@R+iIT-6O)11ohM}!t73_c3o2iM&Rya~^xu6-18)o}K%^d#7L z8Y#0%h*55c$YPW>lsf-Qg|pXiQ^ zsk_=*fpEG1G4`Wk?{xN?+|EujMD#b}v=6jQR5%$=nJT{}^I%SR!&N=47{YUL`J zCVB%kaSt$4We|2V?W~lK=p?HsdW=*mbg5iU`e0`Y%Yf?38hWwT5$*ZA%e)XC4Q-HR z@|V1n{G;U&41)jzc~?kH!04A#K9SyuNqWY$d`+uj){CD!-oYdp$nl|-Dp#*5Tl`DF zOh+@FHKBwv?;YM{CE~mnb;?{o?&Uel!{tyiT3>DC24!Yn?6tKuxoSsdN>JHTN+{AB zCGa{a&<4g8cOSjs0j5^4?0OT6JzE_0W&s40(V_)qQ|(n%^+ zzI*7xzSlcT9?J-Vhj{^R$#cE{ zJ!&`{g-72jLkh8~K5I{DhZ__;uE^l;gy+)uDlBJfh}Z{OXI-O+Zok0v8qs_Q0XQCj?&R-Cg>(?w!k{chez`(j2LVSbO>ezr+~OH0@fg!2%#g zc|Q0<1;R|?dk5&)3L?Q;XDi49cym(=LjrfnR9-*Uf!P)Qq2(ffuPLm6Uo7$y!amT~ zAo#Au2qX1++CT{&h%VvDf8}43t6V&Pe%re;!84krcO+AGr+nl+xQdWK-8{YQ?D~X? z3}}Xwt8$aN6ua#MzHupjw)+&&1|am}UccMsgBwx3;J6UOUiwF++Dn2PDiKy(sr%46 z%e7uZ@}YHAquG;`@wQQMpHcZ3kxTG|1_p}fI-=zOcoCTCd~1cxUi6lr#t20ZsI>TIvF~|MBO3(Vh4hs9@^gz@cM-3)t^4 zTA}HFW zk757QJgk!cna9oc?dSlb@!|}CG$*(SCOGd?;PW`Mt(^qi`_Da&nfmu_CQY+S=g0!u zO$^%}_grm}#T@Zd4jThGON&47>pvg&jPAFO0$X5kryQ_n2E0%fnhD53WW#fPy72$* z{QtIV zpW_LD_ExTEQVp?_2n8l-x}K3GVMqTLa`ml?{&j?&b4RGx4Sct!Gny#PscZqQCLt|B z3BiLS{@wq%)Wq_CU1I-<;OiBAUELqR+edN+UPz5TT@P_oJqVaK4=- ze|j!NY`g!PkN*DG+v%QgV-6hPtaII59+XCd;Rb1-DA`}A*O{!6^*bdQ0RLuC=k6ih zT=$#8wtG9BF1KU-W`Xd**c(1ecOT#i3S~NrwZ`&fs0KQuW0aKx@s>Ke#5*I#7-)*( zNlrj*%tQ474lFA2rN)ePMbvk9r#aN9&Xr52tGbK075|e1i_3#!ry6f~VfWuZn_plM z(0?95>N(PP?%Y`&KcZ-AZ6#r0xzB1gSqJ(ogCir~AF(aL=kmCme+3HLVnxiJY(g&Cf$;XG1QxRq?wWjXyR$Y?fkPODI__5%@J?x+nO*{uE}u zKI|i|U&nEk;F5#M_4Tz+U|^3mr^%n2{cm^8ohOZlixLd;fB(26z`ua}I;fQ>l|KG^ z;NRz{gQC3M{dJ5UJZ&xr`Cli1K~ds!_w@dGw0fp`%KyFg-+%ZYOZWfTP1F^joFYIP zT1W7q)43Mbbb%xnv?Sa#Q<)+YN%yiiY=S#@T(@`c9yZ0F>XNpQFZ9Ig)^QxZP;Nmo zGoxL<_BtgcC7-f>z!8V|Z@rWx|32tGR`P?v!-Io2N=gXK{bA%%b6`l%$9IEx+OIHP zDAp6A^Jv_y$GW`tX}7rzOISpt#6W4dl*k3^363Qv3dYDh^?G9n6|<2n##TahPVD?v zH0Nm97Ob5)hkk+X#<|r)xg1%+k(Q&*g3*F)CP~7I?Y31m)_;cZ^4VX@vF}Xs_C^{n zHO*=%aXK;M7ZS?anJ96BF*Dm{vtCB)iRaX}n*`Ww9Uu%1mH;ay=DJLp>ZYRuLs#h0 zR(dt_D^cbs)Ow-ZAByyuHvt9i1K43il$59dXep`e_ADp*8qWGU3qCU!-2`1xb81rk zZIM>~xrS?^RC&B^-;d7~Yzspt1YZ2p!WEbV0jsenl;=8EwL&40G1k~3X5*^|W}NVm z$I?1i8?D@r14{DctWI9!5`WcBen>-LwWN~T_f-G^;#iR>j2AWEJXoFO%Io!kljh>g zbnh)zcpe@you+*_NC))^ zuXFyZw5)Jx#S0Q*m#4>BTe2=gB@{D8tywn?f)|b>Xy^ULoCmI3N&(}H25<5L*Cp4D zS~9;FwL}k{qVe{|nIodhv*L?ArY&r>O{{CZ)iUdfJBxVQI$A(DH(H>xe!*`2p5)mx z7=Wd>09ko0yExFL`;^JR9hgosKML>R#>mXNJ}KA74ZwrV*KIdnzXmhM5=|#q*ql$1 zfg{nkjYY706aRc^Z`AroenfU!GqdI#$#Jd(oj_*hhRYb2Rf@|tz@tlum8e~tK5;N0o;X(Gr$&35SFW&omI5~cwYkrk8x3c4_im?}c zGlrOzAX4$x?GRFg6&Dv59;|%Ts^vEU**rr`A7F!z>Jglas+bsZIg0r>->1KkVUX1O ziKeKWMuGINd-J$_eruk|)9k1OsL)Fd=faI3&(`oBKrPz+@dkY!^h~VIxVaAn`GL`? z%8d$It3OHtD_`o*tF#S2GZr%&x8Sc|P;G#_5-e6cRk*f8_O?@g?4T2P0v9yIci^2l zJ6+8rj$1Lg?#$KyzSkp%C~4&~L-_KzThfn^3L&UDT`A;`8>_qj+k08~MNZL3+hMzkS;GsZdu_u66bV5}frCzl3OCe?-|nG8H|aN47QdYJQIb9m~m-O;Ije(<ew%z>V*+H%>#u%vuHf8Kfjb;p}#hJ__S*`$&QjBD~;AIe$) zinf&PyI@D#o`n^{J;1~B2TkVbVHI55-17a)ySsOR79^>REDfig$hrA&Hic*;wJ#=_ z=reY9gpd#nHkWgzKrrqpJp54@5#UnG4-G}O5^Q*J*see0;UOr}@1@Tm#KG~s`=n5^ z#$fQLqQQmxR?6`!0b9B{jKaMBXD9LSA%!4Zp^UhZvM| z){+8NGhTA2d~cOCBg)x%wsSeYY#2e9=96e9td=)7QzXAq%C|h>A)AyBUEoA%FLzjA zX^@)Yw+UZko8+}x# z_ftHT6IA+$>)ul)e&E2wmm#xtcf@0l5w<7kZ^ZJ8iWs3z+isBawKVxcg$1kiK?>X2 zIKBvZ3WaR!^W&{7$(zvQF08d$kVy)QGH{&%X*w-~(fq{b-uGMMw$YsSW|2pxWDu`r zB*Ln^mgk-;opiMgAR?hA(AS_Em)YeygwQax>%dEyjsJMUm371A4>d0xj$ce&3X5|_ zr*dU?mmR}9P|x&7hdO7_FY3}S5KnXu-#DQWs}@pO8HJNRpbfDMjjpIvRe&}fm!#dJ z1&{+Q-900np@leZt$Xu2JIfGs1gStDC67NA?GE4d)1xH?)Nf z%HS)I5q^`T-xUEc#fwAANrRrnS`w1*2|CC9}YiT+vW~S zL{QvqwRTZWH^61Tf7y^BJXwx;SJMsMOP&USj*!(B@R?TfT{D&+aV!wGHr8^L(<~Ys zgon%7nmEbvbIHic%x$gY65DusUUiicy-q($9|d zB#`c>s#RDS31eVjRIWZAqa_P@Sx`{m1A$iCO?DAsn)mMf|P)&K@1$C{Z}2`8)ZWy+RbrunjK;;gt!sux*y2|;6*-Cl38*d z=VDS+P*fPcp@O9FvZFe;U&bR&WGuo{u#1R(Zo>&-YFYYtO(R_+^K4tKh%NjN7a%od zeh0y6D3aE6Z{M!5D34j_ExRU}Tg{mbx3)Q1OmW|G-@3tA4Q0Q~K*4Nh_j`fQCir2= zoxOO~P#OYNXp%e_#tq#X5I-t&-n)Z0~g8!Q_-*SZTi9R3ZvhmT|tEB%0`z z36-_&>Z-PmENIEUw~`=$4_>#?9Ni~(|Ant?40piynBd4&7R2*x9k0{qAj{nsfBPp(V_ zK_c2X*Z759mvnzQE#Yyx=4F}b#3#C%XtT!>;Qz_fKBWjfgaCpv;t{1>x;up|k9-1- z5XRD{l4@iEobUM|UcFJY>M{-x)Hf(7ci;N@t52!DO-dop9HPl0cEel<+wGjh4_+v? zrYtphbN&Mr>NOz}&D?W%70xj=V}P)>v;R@`)M1$AL!yXH5dWF*7Z8bHA?W6|9cT5| zyO!fy3&jiSsZ|~uC6&sHyw>xzDqz}gSJMREzyG>XYEW>Y6iZ$)G-&m-hKh2{THCpB zJTP)Vfi6UM>Z0uR*jtGtD=iC?8!W5{l7nvAGHJ=3J9%M$QyKT_-%;Xokl_VY)5;77 zifQhON58}X{Yp%RNzP~c(HuvNM`!*xn%W>=uH?Y{!r)T*o^z<-qu(xofMW4IP0VAs zogypW(?$jPB!N(`v9(pm)I+7z0Kwg-kX3uycX?Y0~=-?`(;OicPGL3=iN^ z)6%l=-V|bq)iN0?;%rq8$`Q6J*_pHX`RONHg_AEs({d1k4yC_KBXe-cBIV}NBC69y z7a)w#tx!K+@+yeL&q{Ro-m%YGeY?7JJZf6#d1S4>0+647XCeC;ziGU?Ia3p!e*lKeNWs+Fgz+IKEOm?rPv_x^ZSsC zRQ!ehOnEA_r%Z2`YWgC*yx`-wogNDX5i}ofaavqC9#=>dpGfa6Zl$8;;Q0i9_OP(E z_iz)Tlgq_O8H0V~f>hfzWyT^DU>O8#W_%EppxyXj1>LDja?=+Y@HW|%ojEs;mtGu7 zlV&EuBx7PjTmuca)i!k@A~VHanG1OlMPObm_~n5_zvY%DA}fj6!gwln9J?c&RdEGr zVo%1X%C207{L`Ql19*{XY5`~%zcLvqsm?^EtkE`mL}@%}e@5Zj_}!)W*tNq#QV)y*2?b%ImCx=1e*56+DKb!XnCvBfeS+!~J6i>Xs?~+q`8BgR95(43 z)g9%!V=30eR(R!&mRpB1tt9-gkgcpL0T7D(bmtJR$M4V0RhqbFDngG6pNgfDk)cjAQQa3U9VeD=Z<=SeS6KusCPzc!L=-5O$~I<9YH*-Ed}7+t*sxNk1Q|ZwI{< zWW)bp5RZm8w>h;?b&fxXXDGNj6^==|vt~1tix7d_1IbYPh-PnN4D+&-BId1s>{uT% zerY~kWrFlvn#*dl0co7+5afUoavO^)7coubL{ckzl8L!8PRIkM?%q-qBU3Hk^(Eu=|ida_yAKKpWEyIEI- zAxWO65a0%=aD2P33DuKKqorfw&k?LQ@*7$qiBiS7Lt>Sty7LYB{@u3&H+JhSCJ&`2 zWOjvJiP{-cTuYZt8kekxJHH534!yZrPNalg^$Vebct&zx&013b{i>e)d@ArS(-`7#r<-c8DHU4uxm?WAX5L$o-(}Xxx@qvAR0_lgM4HNUCJ*?`Xsk z#zkC-PHP*t%gLZ4@8&*MA}1wJOXuH=qSGv0wi_nu2aqL_>0DzB!J zn%tq?S7QtdgNxYFDt174qO@i%Z`_Rv3nz{6k{+B!7oxuW!S$0c~le+=pcwZsj@RuK zQ80fy98!%h5TD89)i2=|Jr88uA>PT+mvP==%$W{PYXDXyYV5 zmM*GQdvq4|7b*vGDHZ5a7X$I=T*>KitjTlVh!$p;I9tBMRYR%$sB@7!+cKmyr3v4x zuKqxU?CsIq+Sa$gkOXc^i9ig=-s)*stjtKc{?%GCq#+8mb`fQuv$iblf509>9^dV*riGVA;Ur>+`80l@B zaI428u#YXYBkXb|{3PV1Vy@aNad9;M?bC~kjp&^Ta&ik7qmXp)nNBnSvXR@voCTYBB&VA0_fUg!5gWh0O*>H?H*ZMB7y+~*h2NT#~( zWxwh~T|Ko?w>3OIWqv%RGuacyjhpCrWktCzd`{!T01_fFaz$+9sMt{R9cWcTpnr5M z@&_t;%a42uOQ$Qw-)<+%aOPeGPa#N~uOb}cq4%Y6m8*!TXalG@$-};9U!PP%K|y(S zvQ5XgZ-Gr1M0=!XJW_i@3zXQYo^2`1=uSi}UOVj8+Zh>0fnVFDpu(rs6IT(*q!Y$5 zJv}WfESxVaK94u5Dr4#n7llSTjR9hd)PvDV#sk_8J24K#FKWn9}B zFTPUMwJ4t~OQqvZS2CAEO5!pjX0%}u;swVQDM9Ux%&>AhiWcqj)Q;1y@~uWM@aK^L zmLg31%(Ni9fTcCqM;gQ2(6F*Lk($8!IE7y12eog^-6Y|fOrV^Z1ST}D4|0Xn1Avyw zCox~@k2QG^zy9?xUBAV-1a!MQhnTJ|FW&;`If$dtxSmTj6Kt8lTzyI^!!F{dnps5axW5S!M0dof~HQcPh?22M_PB9`YE^wPdY#tIsr z7r#($XFBkvl6JDt-&G613!xQC&C1bwIIP4CuW0||kg)I75*$bA4Qk|7)yz7Ji9=&r zf~265685yK6LPLbwNdA{vB&>18SDo?F zdC`X2@F!I+lhPoxJgN?Nd%W4)-nd+rt~_W#KxJsHfVHf<=)hk$A@ZlrvLEsriL%~Z zTnKH<6|Sp6_Q3|`Vd|s%gHF?5EwP3Ps82E(N;*S&H?hYd!$99{9P^Ks5YyPhneOq)% z^P#qndyb;}st)A^es(*~!qOHh>&g6R(OH~rg(i4z3>Us7Dx@T%Er#;2V1H285WfDp zp|E&`VPdtfz(-*YiXTLKc9^tKzt?KTN3B^C>lilMlQ=gQGet(KD^(6N@4BCEl*No0 zQJeg&hJ9WA`2ubsC<+cL0)5fjJ$c6WZgZ4=cYnVH03DXIbso;EA?p9!Kg^$sMPo_u zPb{nM6Fe!slbTvwbNi_2D03|FpAY4WhQAo-=UvRUjDKm`uYAp2=kL`m{fGRE{za3& z&fq~T{-;iphD_%X$MMf_e%%fm;?G3*Ho0k4>Snw9XIcOMcmsGwD2FE}LIws7%xR$2 zmzaX0J#kr4j(lNd#XCPA)##jD3fcgI13yaC9!?}!GlFL6QfHKuwA6+9u@@<6X<=X_ z;h!}35z61fp^`)qrwF0QTlvY3uX+mP4pwlp^r6BEN?V1xkw*p^4Mc76-2f+1MmU`(*` zpgjmjUh1|zkhfp`k%)|5YtZMiOgRL2-ADNNE_cCIrR6<8e2@lh8)R?_c^dH>r3V)+ zDgmBz>&u=SQQDSQR{rZXKrUmKZt3GhfxYGNXaLu}4DEntr)N&j$k?%jPBeOCRnKg# zHv)%#Wa=;vO@%seTF%*|NK_v0S_vG1@tUepJyWj-114AuN6ImH-K69)al9Co#Ohjm z@r9AJlQ1nd-opm&)OvbNu!|WxkS|UJTP?5NYic$0GT3S%daoH;JNZ$G%*laT5yPs)jsX60VEU%fH@d=P(~ zSDmaowd+;7X5rz*&~Zl1`gpiGGb@fOw6A8G`9sa&cu$q4j)P56-?7e*Pa62lXltr1 zU)T}5g<|Z`TEE4c3!)pL-3HXs^;d@zmc3wVSVPwr%?yk{{0s0G=eL>!Mtv4oSlE0} z-?_ZLAbhXSS0Cn^YBE+B&2!~vl2Bab4Z_LR`R3YrAm(?ruVAy*k08Z!1|LYk{TYX` zrZ`rB)RO8xI8}!R6`$_Dq=eiFhEySe6l&=c*ppLCv>B9|Dc5>NKUBp zzPx-?txM6v6{#`7-Qq1dI2wXnPf&h|zGzn=ZCavM$^KHt)!GU*cK^}gp*$T4Q1tJt zagBjTX`q^Ds~akuRMSYPuyx6x&q*8aCo_YNJ$7f>b$hgMpR_cO+q8REDe4bS{`JAH zk3=5DZ8pZ8qX-g1ho|SBE1-Vj6EJk?R~;7iP&E9-9e{GH3jqQ(Hm_?{D8b2h=cA!0 zWK`6Kz-*hT=NMOeXCOo+_1aMG+^fPU2Tev z6|Lb7({-QgM|id_2YKHM{k2*7692`8c4bP^yQ9k?073j6mLT5iJbI$J`7=Q7B_Sc% zn|69b#IWl67?oh6uUhk0ozGFIlnj5u9--59%>4VSCk>G?C0YJ<>PDGuoo5NAd^Rat zWz3&v9V!)NH)k*ct7ChJh^Ak@7A`fh-55ZFYUHkK>bZW2#rdM+AMTm71{_*aD{qKdM1AasUqmYz#iYXn&ifAOVjM(QE-RM&uNZ9X!TSPWYcd8bwwgBgszWxo#|dY6@ziS|&7WCQrd8w`ulZ%?vZ5VWwP{q}vj zY-b}_w!mwlKebbQI}CnYS~@0f>tk(rg=E_@JVqhZ;AtS`iZ~lY7XQ*HgJB-kY)wZdhVgdC1Ju9qTcn$;hP#pn)?6YJ#4kqBQ&V-l@|J1a|`?jPF< z85uq8iTBAjVk7=CeVU(KDYU;X?22y<41qE`Tl{wffB!f1)74eqh{ttYoH-`C+h!=n z?Rd!F_$kJ1ZX@qTZBW$5mFE+Wo(a3YxG9fR~B;J+nFfK9=ktOW?oAjWc{RXu)-R!z54K*{hqKIzL5-zVKI#v8)%@$;vzQvCV3@ZQVsNh z#bXYAU-1H>qabLOAUdE|Ohq8D|Y%HKtT;|09q_GNn`P zjI=C~=Q}NoQD3a>+Tb&p;JiP#hPIM+?jM}2|3I44?7s_2Xif9fp$fI<(;twL_Z70e zlobTVH+T!HF}d`EX6guMwo2D+LkyDapW7*%s8wSJeAF~$b^`uPUP<}O?+t|a=@(%2 zTn?(_T4Tlil6j6%&S6!Zw?;M9)=4i*z>L>EkAu2;nTKZ z=~MH?Jv>DY>q@r74yR2-O@<|h%_Dw8qQU?nXt3fbL4Xz3Wkh+o^Y-IO?$0FIjufYn zyKha~GNg$8x*{qiI!UrK1=}1U-!qfvQx}gO<@|{A^*f$x^2k!Crb>Ntxx24wI>ha5uioUQOzQM)wg8oi>URL`-uOFh zV*K?*G$LjJv0B=vM;I81er6aU&q4(xKYaG{W8~Dm(&Xm|OX(5$E zcRh*eUBB9!9=tRYm)MtDRiXBU>RFn#*NEANtt1mufFv>Gl%rFm!y;T8xgBohgIoWQLWz=0uJyLy-4 zOpP?S?U^Y?`$6qU%o|L!nXrX+^4xCAPI+M^n9ABdQRWau@X)HJ@?QM`R0XG&=gZW} zZO8c|-iCo>Gx>+ux74uGZIa$Wfvd+@&q5@McvJ#Fr8^5Mb&+fPBR%4|35f+w zuFN8Su>Gsg{5b8_VpZ{8{K@)SLwrhqHoI^g?JpGaNf^i;TWJ;3)zCyWcZI#$>O4M( zmujtNiqzX%!I(gl6k^{VFgWXk*uFy~TeB9WnBIE7YQa9M;8<{UE+WCJK4 zQQ8`=T9iSYd2M`Nk}qg<$|yC`Qv`S@>1#n^J^#*!Qe1&x>Y#`Vmu?&9`=vPfhecnl z07|+5c)yDC(n-bBfUu2c4WsNaqF9k^B6Sap2ZGZP)s>RDk&0M5(G<>T{c4#$@`d+^A?-xoC`0qVrpjF&9VadXWNcxd}kk^=$aY=&75hM6MWm)0;Q1NKc&=>fMf~kwG9s> zg1R~n^UTb`dz*mg``-Lv#{PiR-9ba8gJqZGB#&YN@T%Z@z!+lN5mJ>@?dH#vp(3ic zwS!BrM zY++m0g*kcok+b{4Ikuq3jnhP%BBU-Y5U(#$UBRiD4xGg>?P zboJ3;u92vQU0>N#Jf>Fq`W@I!VI%oM*gz5KTJiPcmkUmdgOu$RB-FaGVX?8_b4BAh zN`}+~tbjji9plNVLWO2~MY-w@|11?hZshNNT=QC>beu7dNdS-?EjgF(*FdZ88)igy zX3nBs2VcIlN{WngT~eba$tZvL%)unZMBNs3VmOXrHVatnTs|oQiz0Nj51ILCc;i&l zBWHFyz0%&c$DTsGBi)(2_ZMaZH>IY+?l?GBXxF6&8r=BJ;3)?Tq<8 zNHZ+?W&bo41}E_+($=>sDjcq{wGZdgB+8nw#-2nyB>#hZ{J{7HtHIrVACj~E&OP-9 z)BB#cJC+=5PFHh6T`RNBlNXJB0|Qz3cEM1?dAA!UmWi<9Vpe}#*6B?{6)@zd0Sq#_ zCz%kM+*~4(P-Z?8va~n9Q^g2Rqhe56s-&We8*PF#0E~)6wGChgwj=ZN+VY3}0k{}I zW-P1y^5`NQ8EfpE)Hkq*T55w zY?5$OFR46QkD%WAFuhY8R*O-vJ(H{qb<}I9^5i9Ou8I^5jFSyn#q;g&qXUmq?@zOC zU~8Rv6;{%hE+JsM=7+AhYSj^)WenikijSEiRDOV#aO&8v5^>WSx^I&3K3$1K7(e2A zYcQZvRqgYW#@J-ehM{hRi_*B(akoH~{y0YhQ8ea3QihwIkq>NDt^0V=k+uygf9qy} zzaiPqTSzvrFn#U+koVS6Rc`U$paD`MEg;5^7y>5>M;prj5hrGRvIBLdPQ z-CY8LbjR$23VMHQX3hLD?|RqFy6Y}k_p0YP``LSc;}c($#QjNv0Kfr#m+%foJ5d3b zfxyeAsv{b%=9ZRhifR^vx*RCKTvJE{=bHr0ke}@YJ9zUurRXRG9m@*1I&^1dHN)?&1 z#}ZOgqEBXt^c(=cgwj*cbt}R;PEEseL4D&k5ue&ZH7heVWKeLT^C-cry(JK}%#{kF;NPHWoRi)t+NMbyh6V>eolx-myp# z3+$c^+g%a6e!(2$gQ;r<3K`Jwtkllf3JnQ-V|5tnMG!$4#BA8TvXh^4bQh!VWA&on z;ZLC{kVm~6*F8$NJKb5ht6OcPZ-ifdya8SpkC>&EzTFM}&Uo>t%^+Y~m;D%+ps7Zltt&6NvA0_khjok~i>$@;1LGb?d6b^g!Rh=tYEuy5UV zq0kIzfl_wxa^|pn2C*#&xb(%;E(EfqWkNUrV*sPHe%1bVW&AZNoj@a$NXw5!sgPrB z2eljxP zrOSqb#6Y^-O%~EtGvB(MS{+L>w9xdiB3pa~a^sMmO)~XuM7qAU5AaLOsDVI}TA;mI zVw@#j;^7n)Ltl!AD>`inGN`Ny?)>Qk3ipuzV&}TR8lX~IM?3I}&s-ngLcRA2%rXN0 zDA_{{Rm++=cxiH&5ZA5r;cDl6EeR23N-u=a*hR8zUN9MEp(eAyptNl@GQdcpErW-T6|yf*2%Uw z`YfiSCFHXNXl8cp-y@i;YV%mQMF#kc(Mg;&7xLTkTAvjr;(MN*tue>*V?1Vk!eYR^ zLoi4TcvpoMjartv*0pM`fQZ{~iI)Q<^*(LmYqi@X_XNG@LaSXmOTC0*;XcLT8s`qz zoMK10=w^1~E5uHU^4IEF{93)~9r*5}-BniiJ;Lxz|Iipti!@nm#!6kv^uRJd7uRDe zd86RXL8j9;Mq^MeWEy^q2%@2XVQ$D?wRspdvEtcRYU?}@8t1vdbm1AI2Dbx`OlsyE>lIF62ReoHCbz*oV*U6#Rc?h z=~y&m^vEyhtn+Xu}gT8iiE3FxoqsotkSw^bvCOjHoFLZlkLD(FNGz;Kn)HfP$a-)DV7y^*k-CnK2r8Wt$WmKdkkxz=8bY@ z8aaDtr@W4dfWv^$L`=3uZZf%jsu9k0n4kS^f+)JzbthX4mXkFjk0y%-7^<-{#Sx_` z1LM7@(gkD;jwGP?frv<;r2vY_2uoQ7g|EjzmyRaJ%#+RrM# zb1(KBK+A)!r)He+waL8ENj9bN*2Z;HkhT)wWJiAn8j^?i8*LNrTPr3XevK9U0O z_%VGABmPUK)tw(BSc(F>sd+MqN~UsEmVv+f0+w>W&_rce=ql6GM$Y2|aXWAtZc57S>vI!y3bCcO7nJT!>tw6&#E~{^#$we2{j^_ zEk+rrF-k<4+18Pouan4iE?do#8z>v%_FDo} zuFUblO#ppB{RV2iN?T6IJ#UYCopO0b9>!}EZrrcqr0hxsR##JyE5`BZA-d&8Jg!+3G}qg!vY0C6hZEC9HcT$j zt-xP+Iqqv%;g<{qOlrNj5a2}^&4;Y#g;C{khzx;@D}%-;Ckh4zyGiG#uL;!;Om;yJ zAO$qbRva*R0p&nhS=gRDO8Pdhj9i&9n0=sWwGFgK1YlZMl?Xq%%bVM-I@{ZkiFu2?^MPeUu0(c{x)<`8oBynG?7-nZ^o@UoytBWhc;AU6wC~~Z^FFEP} z3|nb@I;aCR^WvQwvTkDbBhn*vdmJ980{uvO_VWihcG;-!xF?eb-hZSH+v+0NlzrR! zjG?RBg8uB(oa8HU{o|gE`MT&SFJY@yHfC~(vm?8Zh88GE`cJ>T(2NvNaLy#bFFM$0 z_4B?D4jNj#u3{mq&1a(cFa^&@T^!LLuc##TW18X0hH;cex03)yOo~*9iqNXcys3`Y z7p*JhT*$Ahkl~^=XXDyF;RiUP1Twv#z1fN}S!67$V?9~pzucFejg?eH4?}MNvl-FA zz~Ci4kam3nj@N3F@z-zOn*QKRtky#VEMM3|IqZ!pC?DskrU$oee(!znhv}~m23bf1 zBSlCc%k(RO*7@yM!AB$ViY=86OJMOePWGo{<7|4Mg5pnVx7rziDSzzsz|>UAfu;QV zvjCtld9>J>-@gkQ?S>2O>LY@}Ge@25irH%hy>-$gR;=X)4l^>^vHiy?J>Qi3+bqVuezVoxya0Z~$3;5XS9^f#n+ zI+2KZKgcbT8H2=MW8XM9GX8-E`6pF9Hr!exkC0kqV*KO6)x$KPY42%qF}zj;b?*-RTfY_1mHL{j1-$<;NzPspXcS}t>DH1;#!smA7&*~ z&nTc$k}5j5H4(5+#J1)sDVwrs;{Zh;zZFmJ7Ns(T?XJ1vXsy%g-Or6IT4AZ4_eVW~mrp}L}&RL%D1i2de-J}qpR=VvgTm#H13l8PeK zgY`O9ts2|Rlja0<;v@@PL&o-8BSsgXteaU|4K7-c%YbkUu{397ysx>dXv6K-4~4#i zzTx+eJ8hRu63iCxGqL2ety;m(o{siy*>1fkWopNhcpZH51=%=%bTSIBXY&`gg z6N%v|5 z;no?kKvfEWpLkriD1m%sE!1H?_4lFrgz@_e0S^3U?Jv9l9mf{Eu}A8HOjhPWP(-Qu zvo9SD7+L#*39gUED>mu9@h&;^&pofCH{ApNDS)zI>jE(Ky;DE%VXwi|)JI@5JuI3p z7mbu2uWPe+{9OmydS8C%c+$Y@To}qHdH0zzD-{Jf65|RG1j=l_J|C|45WR@48 zSw%`p`pM`9@V%Fkm6e@Iz>`w=!}$U&qR^k0?2s+b89HR5TL=g#Ms335)zJaq621GH z&LOyx^!~35?$i8NO#@F<(1-Xc5mDJcW{ zYoh|!xVfFb*QeuFmWY2 zJ)H*dc2nx6N-b~!EP>n=QQ||x%zOtpn0^a72D%CupYyc|F(K_=Z$h}?;+naj(;P&$ zn!)`6_!V1%PZ0q&r8?Ce%dTT(s#W8{>IG={)dbw|-KXA^Xo3f%lP-qOSH4#+C2AS~ zdiYBa8MA)^hW$%G78yT(F`R*rJB{&}*K*jFptRlOuRQ@5Kz_-Bsn$6L$j^G%aMyG2 z>!PwP>1F={{P0Zj&jxDw8b$Tor)8bkf8w^EPm47%Jc8(7ujY~I<*WH&sg(@mX$ViG zZh~J^d>cMovQWSe!#GzTtsP->zbs%nY`z)*3ZhC%=1$4#Zf;ew!yacR@PrVTZ?mca zlr3^#NtEh5TqA!{@$w?!GQTne+ruv?h_j=cr>zJe`JX?327oWqtJmtEfcLJtHJRLY zGu*9P$w1?_GWqEfw8DM?`D>C;{%Gq8&l-$aTDUe3QUzAt6X9W*peq3`W85Erz%oSdB4t`0HyEDevIEE(Wyvu1^>UgPlm`^QB_E+F3DSe&=*wC`K1_ zJAg)v4;UHNWI?6Q@P4V375 zrYnARb;lC&JX`uWr;I(6H94kMpJvb^>dE|{b7lmuC^MyV1LuE9CF)Ijt47R@S$~PK zkD}~Mf<-P^=!ND>aXl~ZiNS)=d_}e#u}PF>14S5vm~UOWBx&yxu#6S1?8slgex=pp zLxgdhdMLtayaRxf&^w|`aVL+HO(|NPvYaaBFeVuM4>lBxFYxM(hVVyO9CgYr{+~4# zy>CDo;)l<>ciI}3QsHq3t*Qs@bz3_-<$ceSO&&sC`=(S>47SEMsA7Oa)6cnl3=H9b zO@oNE^nKuLo1Chsq5|c6A@e1f2~@X}oEXZ^>*Fu{SO6Wx39fvn{z)@(E8B48wxR4b ze@o2eRD*ffx5NUnG$sm(kk`PFT?8&#e7iq89Y1MD$npE}io+ZxHukHwaG@8VlD+pc zPp?}2G$O*ti4E43RW5vj7sad>K;o?%x-e!a*Fe!-4&q`}9T=LDNglUVth6ytW3?x7 zb(n+Ye-(c-u;Op8q~G6+Rx>aDo{G5mE6f`zfVUNy8fK+zXJ@B%N9#DS+HxOb^D&`1 zxfM)nsF|;?s`Iup5)g{8z&-k2d>k+v3e0-QaSoFW#H}H~THAy|2qdyAfe&KYjFIn< ze2w4%j=zn7`J6-kQk>1-l8rfm&q*{%uy&vYptUW4QHVM(1CT;-bie!Hjt*H7)46E8 z5Zrg)vviXA0!GNA?VcKVpT3p|!c0xk@Zj1H!4 zGmua-mxw<*h8k1g;{rioz$ks%Z|Kn1zN#y2h|a|_AUx=@kr65!_Dcxwbq&_aAT*}J zF5GNHn`)ex(342_*q_+fP|O8{UV1mF(NQp-8klH?855|qkY+KZq}5Fy9{;Q_{Pv(^ z5P`(weVLVif!pbB-7QZScXu#vd^t3~C4>a#EfBkw4vbe^R&zyG^ux5EXi^|QK0I1= zeOPP~bW~$KQH963BDQ-9P;pzJj@~^LLla0XWAG=%=TYiQi~xKv!_JtVm16*Z69wX) zKaF~AS^IRVuC_hBFWFQ=1DSsnrYc(=(7sJE z&K>uZm&qe19?L{qU9mO)(`eK_syklSDaA26Kf4*jVGbQo4cBEaij-;U0%cvye0gE2 z2xu=@eYZ*Koy-q<8s-I@T+PwRc0S!ido=xtTYUfti#jXy+hTxa4-j<2%YN^S+eZbk za&8vrsRKEps(<9iR;~;%StQVb*7-nTu z)GQNFdDtGsyDT>94JND?Tee`9mE}O2i)3SQN`Ix^DCbH1&6TC;%%~pGanL*>UKQCQdQ$6V!A9#^7?!jBem! zWVN41+^s|;wyOJZxLyAuBqW5hQE65$t=swp?qss~~p<8RZ+$qtC)Bej6B{ z16)nnyR31vD>i7H_y$0W4(7zJMC5@DHwO#~ zirfgbCZ>P>3<0T6vVQFmaPt1x9!n_^1G934hoZHZgcm21Armt^Dy08A2`#%!-U9mB z=y=T}Lx|ypgoK>>kAP0gn$4ScArtheO%%(Eur&Z6*QY2H1acCkpia@2TBX&T~1ZYJ0AL`J|0YMPmyggpv%chHf7>UQ{>f0iwK zU3 zg;RU_oF4B_?R)L=zn^Z?9RKn5Dw`yH2Wu6<{s|FdvM<_wI@^Twu+km}7zG5kwn|T& zh>rvP4`F^yvj1qS!o%+*t3JZfNnF@lY5&6o$W%oL5j^s1*W&=)zHnz*g)IPEPy#afTTp6$xBpR5T@CBP zexIsO8s%~ZX>+85bXnTOPap#_8z?XH*l4)#)T<3hu8Ak9U3FKb46u6o<50!ZPfr7V zG+C4HH$Oy zJp7zJ(ud_M&-I`nHr=>1R8;hFsQwv zM7gwe^!N!Ii%yZaLIjh}E$5%qGoU|452Y3g6z`2-ph*{eoslwW%pYz^67Cms!g$13 zqRXOR6Jr%jx_02<;emcnoA~VP`qMj@GE`y0Y|+UNXuow zXfIpCo@;FQxtuJ<**NZo5b^7iwv;XLJkt1EG*X~*rHiN*wtGZ5{T;5vr^O{PzwYRs z^;F&3_r9f*tNr#I&hoOQ((*z(KBsR5#(3+KG7Zs&8l!I?0=$JhuW2z8Oppmnzdk>+ z2nhU$xtJN+JOz4KB=h*n zX5^jTMYI@p4`?zexO!(Et&n_wJtXKN?RmbPV^!fX6NTz-r25aRSK_&BJz@tBWL=Xq zSM*8mbJ$fbmvL=snQZ=nREY&CGfM#@#YKSH0sa(jSm^3ZhyHfPxNsX9+RgmbBGI5a z9rDTO8mJ2QAMlW0?qKl4@s%qbNp=`fu#Zp688I?^$f*DptbO}OG$;K@@bZy{Tb>&E zrWAafwzIbv1vW7e`PhCc3mzDr?AN2aC5>ZQ(sVO~YCOgr)$Wzvc}eM67Z>Am9!1FU z0f!*L56CNTC5l`oH`s@hOJ z;gS_Y1N(N0`uEXnB;d4W)w>kDYg*vij1=Boy=xAg-tGSCZCPRKMYrwl1)D9Qhe~|FnHf*K4J_Ycl9f#vj{;cw|&EZC8~c z?fM@nYSN|T?WL<6as1F6OFzo8P^}vX);!;SySJN%zw>eE+2ZMF;k{B*m`rLQp?~15 zI{Uy|*6dB7rQ)5sO`K&7>-jW&Yz;;_IH+utepv>Usj&Dv|Xpyh-NOM*#wPGL>L@E~4 zx7zoSN}V5GjdF@dx_u62D=mZ0jJ$DLJoS)*y2VCVh88MU*nv;U;Dg+Fw_|3v!7+z2bCf zCbvUQEzcQNt0w#6HeZ5LWHCTh?hgfg#FqyZ!0OZmaGHHlwdPwgr;=|FyQbycJKs;T z5l`*eD>Yf8Ptl8hw{kQP*fU%^!^oT%^jVJrBf_BD_w?^Za_IAv3(g|!da^5V>SA6@ z!GXvChSitv=bgcsB7w-?W5^^Zv#7qBt%je;SNhknu5)l(eV5v>eE5v8nmdt`AD8#2 zX0=1UzjUg8?6pG+#qAXw2Rq3SZtau@e$-^e&t@v|?Fe8hz|I~59&ffAU>?h7V_dYT zmw#svq}Trm;HopkQ5t|#-43D$->Ye@-D5JsadQ`y=x0xGvLc#bj%Gs4=L^>Wg~O7~ zbm@tLS#KKVQ!ZplrIAjo&m}li=DP+$KSUhWL}$DX2nGJSjsaM8?N1_*c;lfPVZEFb zHY83nu_?GTy-Tp>-fqVX@W$!qZ0n;qbSq-eud_zHvn%zmR3+4Xp@fZYi22KOdaO<- zaq0Sj4XWv-@8HEjt-J)1!jExYIh)9Q!hr9tv%)Rd%cn3|8V7{Q67Qn2s=coCRSeI* zEn31ben4)JuzmQv>U=Dd0Knk;jfVL94>(Ga$S<^?o37>j%jcBjbn&V7_X<6`UTb*?p8ST!FslLynorY zuzervXhA)da(q5N%==q=mjUh!dfn-pF;QG%k**r;05?(uZa_&2%D;Z z(a~Us@7rb8JLC3igBuDh^qyDmVqL4{Vy|`}@EE%l$yB~?tJvhJ1 zoyGS&HX#aH=;@Li)BlpnVfB4Ld7_P`S7ULQgT#Ea=UkUvy_PkLHPx`~vxKfMVZ^6X zbVyNGCh(-l=u3qFD#&!A-BtuCq-K@;?08Knm?PH;M1!1zT~f^1_1QLDg2sUfiJ|Cu zcJ6CV(TC~B zaA-qcL}i7^&EpeFdsxghXt<)xm-^onPKVJZ&gM0vtFT^MPt5bHx$B!juzA-8XM4k5 z9V%7!jQ1~#g}av!^{<3ic>S^@p7(;ENw}l$ZFSCw$E1a2$I{+GJ`9Q)#BXtEAP)-Y9rr3mLGIMH{u-`N&K0^G@1A;9NpEHHh`;~O zCxX9<=iZ;2fmljsh==4qF9MU+{_@d5aBM-k>R|t_9{!0j|L;D)5BnJuU{vz(VNBa_ zFc_JgkwIHc$d2$o>OuIcIQxDu$?_O5e;7c&+*-vH42d1Cbcogqj(vIQsPH>fz3{nU z{$A7}N~?-xr(A&J2(V6dCs1DZ)VQ+m3c!cx2{PXa_~&Moe*gSxn{2Q}IP4dxuY%T= z>c;%r0M4tl{vy8*puJq|YJ)R?CZA#0J^yFZ3EzOf@@IG+{UN?OeY!0c!{VQp4&t2E znvit&Y+dZPVtw!*hOtjJ9_zge|X`fP8S|a zHC_LwJ_8?i|Ibq=-q3$zzn=^4I=`W#1*2%P@ROFAbC_A$~WnT#tW!*rUs* zhOfE3FfIVE`1S3>m;YH$vrD|c@K`+*0O}+d2>*s+N~KSiPmSz?-(Kks3KRUozs$&C z%O%`%fiGRO4feB1;X@{b$nX4e*SIXU{>RG$^mO(osQ(^<7s(fJAB2Mq(r}w`px1yseFK=lCqNc^)TiEA3st*KWSBT<jg zywBUMvd+y-VHf-^whwzmEGt^9k?n1>2^dx4izWI0-*)d1WA zA_3;%9~2Y`3;@#Ugx^h9K3jX2V^BW{*(33ervg2F8C8dwM}MCk=;d?=nq>xQHa&bo zLdI}vd9_@Co82D)BA6rB_K3Ep4DEn9&bYmF{_a6-@yL$CdtfaG(`NuSX#Q;it_Skv zA}^16Yu%k)cfN4ycWiSgeC$*yXdqpUmO08JQWx8-is>YSOc586xiNVhk{9? zVEdEY{(E6|t{TpBgIvhOA=OmNPld4|%PY_9+5X;(c9+*2#9AbEdb2_Yns-aQAw18T zhDPk~aMnPf#GiKV=X_U(+L{zWw7S$XCv)9; z1&B;<3HcnQ3xu&5A1cX4Gv|)-x$nidGnIIspNY3TM+Stm2$herasa}ilnN%a2Y3{( z^LozHIY1GKN|MtHq>_umCP}hh?NF^x&~k?3e5U7w7^?*LFg^@dDcNqCuO;Nh9TQi7<5#3 z#6-r-t<5lEqDDFa21yx43Xka9rB7#qL0Uk}B1Vcils`oZ*mH`TXc+K{ z0TiabS7&58?Ba;@zr-i`W=Js8h)Aqja)-i2#TwN?eM7i)=jVAau-BA8JpxwwMPM)h zuifk`%$pb(Gb(`Y*Y=Jx8(6i=+t!pgx$aM#Ev|Ma39*FInt{n0v-HRa3qXFg(of!c zXEhlq5zqlLzvB`f*SYT#^E$1h&VNnN0RnnPAYIjn_T1^QRd1=9J`EAPmqzZlaeIBd zQVv*J(sJ8OVtRWEfsNo7!Jw%j@%1*|{cjt$D#bR;9KdwluzUOp??oFh#=-B4_$U`G z@vtM0L8$1_@&dP_>>6yDsirNVU3sl}`Cr_pQ=zGX5AL!%|hXeBa zJz0FKJG(0abih7EtsZ<^)w&b=7=v%s=Oi;N{%fF)p}4Bx z#WHL!b`|3()_d8=0TD!hSsB3pWP$04)u!M)>dN#PK=GZofP?>Vr&Kr{KvGqobn*2f z3~2yUAghMPG8T7uOvGfgZk$Ax2;iI|r=%2mG!mBUu01vyUpgiA7LN?DfJ?@l?Q29D z!U@$zsIRhsRDoYhnE4SLQyKS;=uN-P=F>nH>I^1!zZ}=?uJYR{A|=^m4;i;){b?(2 zwmF=ic`o;)q(4@`W%`Wpc{Yf9vc!M32PF|6L_p zjJB14zm)O!Z)p8Lx0kx30kgE(_TEHwJvEFrSp(FHkL{*xlVHrQwkW1JM%@Y}ldmU( zTG(wWBxBdAomSJDu(#N2kJqc8ZDR{4z5c@mAfxKIhSw0T`*4K$uT|jvoiT$g*2ScY zgjxZB>#eW+r)rTP{mWVt`x?QhRn!Xb?f2vsgL!%kN#24D8}^ok_wG;Y?M}|OsjAsO z_5_Pi=Q*XJ6Oz*bv@nz`HIFc<0JpnXX7r?ARZ#}esr!wA4EAz=W z9W4LnV}LBaLiV_z44$S3WsZKnBU+LA!GZ4Sn+yW+DLfp@?O4bm!)}zaT7dpWiN$_E zz^x)?KpBVxYL(1rj6$Cpwj-Z$elXWSiG?h78%z~q26;Mr=b@pE*E%L7zou6o@Xgb! z%z>c}P}^x)S&7}D$gSCu<#*j1F;%Z4_v~GoX%vD24G*mdr_09iU774%q@2Qu+dZ1J zfMpm421jW>SgqZ^B@3)l2P}qXOO4tv2huQfq<%WPWk@xI6R(pm{YjX?C7bt4Fr$b8 zL~g>Q1cfG_)8i3j!n;Q4pv|#ook}8GZ0L-M#HJU&RiuQ&4~-XMj%i5&{|aO2=tU z09t{p)Gh*UYb9@!648e6o^_rjxvLE6%daRAE&@Q?aQ(Y7YaPrAH7nzlfqi|S?Phqm z2p9SkTiOAU{6`s#(isTsy#hEyn*8g`d=Ok63ToRjc*tFBi7*i;o~D6#a-%Sn#q2zg zrA}!q>TN(ZoFb4!b`^EvgWdNST|8KF45nIq;~z!ltnV@dpQ*iT=kz4XsbR0cAB$#W z;@0BM&9Ga{@26#Ma{G&2)fO+X|G2~vLg)(mQ+089CbB?{mL+ytMlL0#1ZXGtT$V9e zf>xuBrKqhL!asyJ-ZSdghy$jnwQ^U2kCeqQm{JgMmxf$dRW_i;JsUOw2H?Ef?CRf56Wiw-;I(N*uReg$Hh^Q(1^$WKEIrv1ieG_z~6hy zt2!y3BApNyQ8QVC=|3=T`$#QV9NcQG-^!KlX9M^0eg=GK@^z0OWJp^wzmb#g=7 z&v&8sQik~@J%LA*3YfbGhlLe#k5eT8n+|H}vvj(TAP0&AwK_t|K!spTV&Xg_HDTfB z^49O?zbj5rZ*jeT{W|MJ`l~gPW6LnD%eY9G)m1l2c=UH^)`*x`QV(4=xfXWq!}F~n z1MfBv3#R)|(BXYlOJD{g;c}8w=*h3pnO?Cy{tTy8Y+@CFOzilEqS4NgXY1NXpmu|d z0ng?tkP`RS*Dv?8cs67{?n{$bPgkYVghP8p&_n>`s6RU*;A%@vs1iX^8-zkqWL1*O zp=@_3+t>RuQ>qX^)Cn)2Tw!QEkAS}Rp`kJ_X89`+>;8%&%SLc$6fO|wSbJ-ugXEy_ zbo8(rAD+*Z0XB`Vs|g$cinjEc(X%=xt6 zYy?n}WF4*6U;5BU*!`1QJpA>IW>R74>##aK(oGP)GXO!qMHW%`6R7*t%PdEp1m}F( zO9Qj85Xl8?ExCh_2cv;;K}JfiGFs6i-~wmAlOeN3igri*hJD?8Jge@{tLx|x9#H{O z(sWn@=h@Fmt0)3IT>H%$pl)0_*c={ySW2|Ev)sp3Vw=Mgj4LHVZX!-FW5iOBsbBkU zXT_Kg9)bPts8K*qh`)2#^x01}CfD5+}lln+kxZ;*hKIu9z zlL-U4|5wpb_*=KKDjk2A1*F=ElT*zUveg)Y;7ZBH)_XDu=A#W{>eFe_x~M?8j{j=U zbYD;qQW6zlo&()_X;3aUKOdmT$j-pP7GEYMK`ZMfH4Vtm&v&Z@eK0N`gnXgxPIlRA z=Kk&&hd$wzp{o+^R^W!Dhqmy!Aq-WEZG6X)G&}*;u@PhCKc#^cSA-_Q=GR@a}7+*07Ry`#!j$v%Ub`L8?O2 z=ZDI+x)7js#YF^TXwzd2M2X%Gb$3rexNH2)a)IZGk&9yZ9wn8BI>;|mLD}*24ufW1 zL|b?|r4%<(nM_0YZ0pEh`ZO2Hi>}S?BNbrs?J|$NF#Dd=zCfbwyNjLp8o0wA0zSWu z^Oz!-qVUnQn|QG=t7JylkF*{Q^Zr;z`RtvB?Snb>`B>9;a+|Zwmcddj4@q+tyOV6f z&s**h7%9M#Jn%odY(!*%?npmPA%Py2B!R9TH6YpY<$+QHmJvWL2jMX-eoodFS&rD_ zd`w~SyDyp-hm1o{8~a4BAQH7`1>6J0BX1UG4I{oUpsS+4;VBa2M21&gDnLshs*y?=}iX_Jpx`ztjWz3lsib7?RHLqWGD z^f|Q)X{AYL%;UUb=bv?IkuEiQS6@f?2HmA3k;Yh)XipNTJvDB;n=Z62k&DiwZ{ztJ zj}rcJ_4l)C@PCEE_0nAjY`F|2vbYiXcphayu}e@e?J~crTftD#%NF@e`+r*FAl(T4 za@mSc-86pN_z&CRq7e_%?ZW<EVv7|w<6;!iy5LGwUf^#Fcr@SB1V8akk^h<`w2-i=0ER}{IbDR zp)^W{uFO#m2X7ipFtpx2Be0~FtLthn?GmO-UPwMRM54I=0~vTa=JIKB#xHgE4R-i9 zM#q~>FDy`=b z+UOes?GH}Ze`QKb`b}zm%AMA|EZ*KMhVveFxVF4(M%8xRB&igduH*Nr9hFSSk4kMT z30hwhYMw@U!3QixeVYDZf4V}%TeR=t7E8Z$3F=Hs{;oE#A=bJoy_%|B`dOsL^uBFv z6g^vg{Z3Eq7qTR!!!;Jv#2bcRc&Fzh5p>=PT@Nq}R?lKNqi)&(lFk@~@u^uvcLxs6mTLax46C{=jCq)7kJWN!Mx&!n=CLzz{c`rw5~ zwcq;Pn-2kNO%%Ycj=~!o zT1%>J8-%N|#`8Gw$&6*g9&>zA1b=>#tVhtRu4tBtP_gQ-Z6CLh{NQlcWgg}I$P&tZ zF7Z+Ob$@=K_ZSs-{zPfa7a(AtKOmcU)l=nNK9ELkjI6S<@Om%4BOG_qs9myj{lUtz z%=NymodT=$r%z{6C2Irq4IhtzgP`{2;vve#B14*7vKgns)|%O*KB=N(*N&G6A^oOH zo&I>dt_NV~d7;k|oq>x2($}9XlOsilNAhfm3|I2kM5oOyzYp(8LlXtzJIxo5-Cu6-w)9h;2 zvgawMOOK=0$+0%g3eIj)rHZcJ8is^U)ag?Lm;R(hu1!PTpLg?HO7q>jlUek}His+> zOP_Wpqv`>>^nT8u0gizRzys8(BNm$C0X)E*&IHalhHwNdTZs+0rQPr)esy&N+cg}I z%@gNIg=) z{&iCad2TSfOjOt>Jl^L45y-4R442+u(PtKh^?#cRsqEv<2(Q+5%B2R%Zb5^XMjLi+ znVr`Jce)91?2!BWSTxm!I%8`z6o}*>&Z_5VDcvihH5^7*d=A%z6xqV&Dl>=ME)y&J zSXKcaC*FQKb@SW&?Rf%KF#*ot&wru>+Snk8f`(@&d`sjo+)6JLs{h$Sxl|zYs{G25*x=VRZD8b zwV%1@Qc+4)I;_^k^WDoWJ0tDA(ZhL2VV~9NFVlE8Go@p^f#pKBgTjDJp5Q72}moiUPjqh8VBs#-7K&NVTgV^?x>1wc-^o z=p|vID0>2={mnj9MY1uKD1K?P#@m@wL>Q3WI4RkM(KIu996E>T7qHjB@p=Og1ZxqVSYb4g4dU(h|_snclVb+bm-boS?ck+Rj*LY;cxx$5&~Zc zBZ0?5Ca-xs3UYX}-&3T)fz7xHv(mj~%eALms$p)U?@PdCR>t?MRI-C*J~QoRa-Ud8 zk;vG=cMo_dQvqcHY+dq%_HC+>W%e2x&8Z`5i$TSO?_iCM$hSs-mCr zE^JSuli!#|6-S+ZXn(qQhw{*Bu&M?MIEIq=?QqV382V5JK4f=ZyIw;N8M|vOVwz5e zO7~qEbN;)}du8=YmYN2$yYLu_LE2G~65G#45s970u{;gdWs7uEL|8KiQeQnCRc_c8 zPnlII4qL|CES0;{{!St-r9`_ZjSD^q-fw|7W@2x>jzbJ_5E@iZo0z-%bpMx)`pw-JBuw{{WWMmcv6xrb5I0L z7l=bb*H%N~mNN3O^eLlj2%Y)HdronU8qjnY$vx@SSV&QIqLhXS zUw5C3=W{<4A5_oQR9oR-$jp0r&}cfSkA(d71KdU~!G33VMUUG&qvqh{?I!(u<|vi| zEH>3e^L57)1&4fL?WM)?WrB`rV9>bnzGRtlFW2&tX>say_R#f2(p0`q5j{FD2ZD&3 zTPBrDO|fxQ-p!Tllz~Dbt1mPi17+my@CHo@?Z#L`N>BF1rwpDV5f^+H%=j>^D2>~S zyXuqcAuwf=v9+RG>7rUke4GT2RxAACQ#_x2W`IIZG|2Q^cY{V(J~r2{tJpV%^`>dc zM>-={hT8scKRJJCH~&%%!mWIl}MUcykDNUuxYW_ z&!Pm8WPYY$+mxs|1sB3IdiwoE;9WiAc0y-GkK*<-BGY-rn-~i`WP?|Ysq4QKH7l7H zoAE~M7F+@RLgikhdW+w*2xUl}nLPkBs8J0p@m!UXbp>7ba8wEEz00-ktQB^y%>;Ap z7|Jp=sOCJ-H{X1U!-+l5G+MbSUNm0NwC-Qm*N+K#9e|JxhyzIexbt*bD(MAT+@3pZ zf#S_>FPrPWu&VMzH^d8Yg_R~qilziJPIvYQ&%0(IoN(SQoEp*JcOriE4e|+ z>)>1Gq{hy0HbO&i&OfV`?VS`PVoG7DJd%{; zwtUqV=8pLM_~E_9{6dc1Ah_=<+q8>)=<(rWtxDVa#{`~& zmW+aRTJT75=Lt5|Ol?QxOv$%(kkf;-qNX!dktX;};n3jZ(Zm^mo7PxXS34U0Ze7# zE59DfX@y@mkZUryf$Ww(e=d6f7g|wflJaE5WxJ`JrEh2~KJ8;$?5p5dNrm@AzMRTk zHrjULXUFbI5}NB~VpEU6{$`qS`jPT5GJUa!f+iSqNdD7+d$MVmwhuxw%4Zbgm5h(i z6qUq+Ddzb^52sl8jfNHv{IF_;wf2^XM~YT5W++BiUrN&BbLB}8AmLE5um2zHy>(Pp zOZ>)rR1g7`5)eeXQ$aeUyQNz~q)WQwMd?ln0SW2u7NxtpgqQAayz}A_J?H#x{&8ci zyIjk~Qh3>W&+M7+%sijx*$3(u#BkX-UstT{IwlChfkaeKzVrtFG;Z#!!%=a%C6`kP z-l(I}V@-1fBrKFD?0Mp3bUzOMi3{Oa;@Cq|cCsJmHB-s#u3-x^brYte%6oQ^gDRl| z$jM=UxXDb4U700t%fPh!n;I&kQ9f>K52T&>FXNZ@MuvQqW8=RJqtjK=2W1J*>A3bm zJL@*m7xKp@?iS7|4-T&p{uA@gK)AL}Bhq?3I0Hh(bif#~TT_Ly!VlMiNv_%F%WbRZ?9L z>mv=NFblAmjYN0<~|ET*L4e zY>qhT;!~SLC6E&zP#Iedj}ip8#Zpkm(bj&dz|g|O990@d>`;P*YUHWcW>w-?*ow-h zMVQ-p_9|sIg4Pw0<^idhQ|#_-y4d;`cBW6dx8MqIHFy^3U0A8^uhIM4frW~7y5qg; zTjjjkY{*#hg~{VSB1;Hc(8#=g`^I75&1rA`jCmM|U65~{R(-~xxiJTe<7U7;>-8in zuygL4G2nAo+>*zA{FL*e*gK(z{QNMqjah@sJ=o8 zkzbJ_NvaXei@XHY@Zr{&dF9T7Nje8yu18dn#+dSY$`sbBAMY%6*79pA!v))F`}8_~ zHWP|GLsBojJht)|!fegl^u)~=8K&i-G{J5mV9(G0z!aVT=8>#+ZHe)BH`V${MqFU` zGgjSsdR=X7{&coTpn`2l+B4AORB~TLq4?mmVx~X_yh@gDlAxuw;g~YSa9R6K*4T}F z#&OAPjy8#Sw|iUxtWyTw5^6h|C9O#0)uv25t~^3TK}BWT#dFk0r-Ao}@9>|Jq!2OF z!XX1ST-+!b)>bv>3yQDb(}<@|6s#BH)UB+1*j@WI*kA4jgM;tKJf@3{c%J

jui;7Ht@DZB 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 n|&wRLuu01`~+UFL6@!msLS`#!feG&bhEovlPT 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 tDPyRFPR)W1Zx{4_8)!+MC4E83F|DnSqZZ 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

yJ64@Axlaa?PW=>|J>eYdrmTnlx~QS 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̎{Wxx<9zVR?^!14Pmq?-^G*|PX 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%0A?Ao_=9;;oo>H4J6$58 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

F%JO=R zQy0t5*!Qdy5A+OvCC25N_)~+{eh6?vXP9DfK|$qygIp5MCtg7(*o*!Z*8R=Ei>CnT zn{BQTt@X|O*ZaT0=50Q(A|zB;hiE`P%Paue%Wmjut%0Tb1WPP?EIT{nBApJO=N&2> zF=KAm!lq-NSQCy+cI%RZA-q$5{s4*%15TuJ+o?we{9CUpkB9lVkV1}C`m0T+1C=od z&wOYZdsOv`8qm~HvjMb#4o>V2U9P6*(_RMLNpY{1qEtXW;8HRfL>a!5f?LR4dg|=_ z$bW)fo{&-5?|3(7P12*kW1!tc_?s%__kv*vRE)SQb;h3cvK^c5W_}^^$d>x33 zUprxcrK%l`Z#QU~?UwA}TagEPZ@W6tp2eAN3o(wc;-l%#)ZLE!Vm8njx_{B$p~ZvN86r@w$Lxu*W+K;V z6bpIl!Ls4P%^hzczdr9CDh-{CG37)W*k@It%;DS_Dg8`8?5=lPF=}bYWl{h3XTY7z z-%%uAk+%LQSV#4poaOOB&AUF*dfU+M8u#B7V(*4gSyH|KvHeAXbXaejt9B7f^Pu@j z)zSP&4Ts=YVw zPz$CM)!~%)7NhAUm(EOO^d^!6Xa40FK|nsW)RA0Nl$t1Bc4e**n+iQcp+*vAv^z=P ztvR#chAj=;Co*stM9nO@P$(inZKrpY8060~=`}YRLZO7wX9YEIUze2r;H{e+}Jx zv=Ejve9@Q*V)WND+t4rT$*}!$@ZbY*pX+gtSvyC(?fBR)_Q_gT6BCBhebEMzfR43^ zbOYVT~<;t*|Ld$ZsBd2D_*|SjiVBr&v7+OjLZ2GYU zsI(|5M!%0%eQi|$_ngaSC^B!j0IkLmi`t6D$G?q&X zH`}iNVetZ8?!C1`&fh+{!2vIQkx9K$Q;-Qqq0p_9%dk)oyh?hnk4%sy8xNT@a?I1I z**%JBk<)wS&1+B)<>+uBHk`CZp}jhj5*kGXeLzc5J;S;+Cej$ieMNn0de>aM!wn=Teta=AHy^|@+bEg5@;ZA1V;lrg!{|u0u~_dX zO75l+Ab8jY>IaMFl~de)j-g{!Y&4y?%H5Og0JN|gM6my=IsflW2&nL`Tmf(aL3x>V z8c+;ylO-Js0ja?Bj%8$U178|p&~Dqlk0HULyXnb2B@?U>Pv}C$?EQz$&ms_I zjm*nHg;6Iqyx(}u1&qXOd15CyRAuvMQ6Kviy7$aJQjF3qeJZcO%PjtST6lrMw{M{;E3=vJM4A8n84q=cP`*ejk!%X(S;aWo zpBn}CLj4T%b|lBF%UMZ)@~i~iiC*jR(7MMkKPsH>_ws}cJ=1QdqmEkXuc7I~eew$w zDyBVRS=qmN$c0kidt){Mg|Ahoa#?dwaB$b)32c@eBZizW z994qGlh^#11|A`GkdH0A2a|uk>_*HM)x*&xmNQeZ-qdQhcYkP9bnmA2%|sn7wwMAB zYEfi>@mWz%4XiT=Y?Muu*##9p6oq1sCoL#&GUEi%x;*FzZnZ8JA~PNygu zaJMJrbE6+f-}Oi_g5TNlZC!k zuFn}pqUN=RxFS&a`xfyq{%-d1Opr3v|-Fvke!-WI)h-<#n`l8Hv3wx3>8h_6X3>LTLEr3aTr2^(e9KA%)44h zV#aKyWG4If+_)5I1Tf>BwWy`=chcIh`-wsU0~uebS@!x6>x;Hme-TdaE4#9G``up( zM?l>MV9JBnr8jW(mXx@_ouI!!h8s1#+me_V(l-dYuuI2 z&?r0@1^q+@?J9xaZlP~^3$*2;jkQ;7i}5?H!ZK)kEs0I zV_`E+lB&90@$pfr-Le~nzYQ=NkcY2}osK|MTPZ9&M-SNIv=y)_Utv%Bw2DFJqr!D2 zyujJVrc8uUbgV+5AmOC1gIK@BX#r}2gq{)IHhJI1&|KFCtoNdZz$Q=wW&t&zd;n48 zpW^7PHjoLIa>Ic*P%Subnsp7jqlG02NBoex9)1W`mDxbQu*^a&ft6}{4I6=%hkm?l zt~1`?EJ)3+k)^{6OdXM7)(6s()Xow_e0NlXW2k%%A2ju3_dE_3L+;~N%3b#m1d^10 z^MZ?=oQ^`DnXC)TW$s&Rp=X63otryot6qyn*@ld;!+X59a}3mIVT>6TPmV@5i$YvY z@S#E^Ol({m5+Lz$zzB4B(;MLyVVeejm5a~>tmxm-3Ps1!<82cV*fhuZ-&eEh3pvlZ zJ?U>~#_^l=5OH~PSR=N;SPWf?rYHA!Ajbcv+C3sdr6Y4JA;p*T8<7+#hc>A9gFfA- zV{-;gcCgA?Gv*#wkN1k+z>@onP(u&LdcS^R@fd!DKn)Lnr*f0@q#M(Px^DKB#y6NoVs(~e66LQ-d+Op-kK!) zLy&9T1H@2K?>;hF&lhH+cGv>W)b&Wnq*ix0aGy59g3FA#)o%4YX?_H46m4I_gAId) zakMF8f5*pa#V6W*0egAxfz6VffxFMfrLt`91&wzJ4L8U;IFqbClMC|Vun_V6R#=x@e873;;c{u)f zC^=jJ*jGg3XR*`E$b~`n8dg zd+Th&_JD+oaZttYP6Ol;{Bp-(HLj7*Q69yUfLO?&N*&VvtHO0v5 zvrn{f^A_d#Dd$gJuA-n}&#mK`@k8IE(|FplHNOd}tu@@y&ef|@9t9@!--0G%kkRxl zcAkZX98{Zk6Dh`PZq{RVR{B2llW4{#0 z!UFP{;1lSW%fF+_VuMw*HD1o5&ZSc183xt zw;l()2YR>RAn-&~K&Yqg zuxT=u(|3Os2F&wf4`|A0L{}UGvijE~Z8kB(H`=!x43l_1I!^fX9(etQ1UID_L{w(G z3>|WC5J)+^RmA{kvS#?Nff5#o8~$Q_MCb2`?99Kecy0kio1O0D18&*#N1=$ZcZB$*;LQ0|Hy1luOvdSZr_51{4^AncHCDugL?eeWgd{Q!R0l=%3{i1kE{?P z*<}@mPEqzY;yJ z3uJ3<&%eX(Jjeyas<>kTv+&UilmskO^d4CHVep|MRaHrMlEDWPhu&vFLp9`|9o2J< zy@R|eEmm~y$sGfp6hKb~224k`@U;%+=~51s0PNm6=`Bw9$%`TfC-)rpNf{(TQ}Gn- z(2!;4g)W5MpY=zEHx7z0bdDWT<(lmKaV>wBlj ze2=8$2;G{t=TXdBKPg3(Z+gsrzjra_JEv)DW_7jRGfeEkyYr#B&I=6l=~tu5YQ2j0 zFX!v_DC|v_v>wg1_PSOh#|}?EraKMBNme`pwqJ{kNlO#%n# zROgl`Q5g=3p7$LbuC#7@gGl8rTHS^80AZ9o&_~xeZF~f^U{A>T}t3qI662q4tYj;vv}dj*zN3sxvL{cZbiMR^!z&!f<18FBv3g80=PN?fbu*kc zzD5)K4x?Zp)3db0YVQgM;a_oEZmWw>#7V9~fvfFrQ7FCdSp&v(KGaU2H!)ujP_t4~ z9(`-r?G0FY=N#~T6BBc?74yboyA{SR>vt07l6s{*kv@~8LnWs{?5n3ry|~b=q-RAW ztv~zqv#jcqCTjq`*miJtX?Hw%pb%YRWM+;Qm6eoRXdY(G*J%%@iD`RR4De=Vd#_f! za8IFfbM_;-Fq>}Ov%K6R@yYV1_jpe>AG@FNY+P-P$<4`-M8kqnEvJf8N*6mwG5q0! zFodpudTQ_|iJUZpmCzT!jlf8D8OjM6_|_1LjRh{>Cek#ud*efn%=S%o3XnD5-lQ@Q ze3~Ze?0MeyoXmP*i9Wf6Iz%;kPHSj2+&~ICAU#VL*o0N^3jhTK&cQpol1=ud`&^G{rK-AjXm zB^D1eVq-yDP2`iP*&|nf9ODJDDlq5>C>;YdLI6({ueU#9U2ZkBn$XK(3{5-6(bjVo zOSL3&zr$>A+jRDSd=_5hN$b+Ir}Z6)56q{3M~A;SE0t3`%8=EOHDZEuHne!%yT~~X zZ_FZ5OUrsL$Q;&|bljrO&en^qc3hcR@sQfJB7bQ(d=AKaKZk7BiJOs9kOvtoC$V_LtC>2lVR zUQyH(0?ifbAv%A`57>Z&HL+o>cK3g^1yA~?rF67^W#S1OsoXMruVIvn&i9SD-TknL+cw?^et7y&^T2L_r&&+`~uM z{ugOm&n}Lgk{eq7(1Cl*0uWv%L<3wK+Zcv8bzJdCQEUZRtXvTdY$Qk5LibZ*>*Q5C zFWy`ki2yh>9JJT>Gr_<(%L{#nq%_9>fwU4H6dA6^FM{66LlO7UW}=~UezNvJNnd-H zddDjV<#%*)EAT5>7`U5m1|aW|SIQk1)TYsJ4mB}9Ol7jpuvt^{u&aqr_ww9Fusx8D z2=IcS@vzB5p|9v@v(LtML*Gv-CU2J61+6y4wQ{Bd0y4Q$@O_}tAXp*b=&Z#TuA-FZ*Ne0^pZ)y zvB>)(&>8Gw`SZ8uir4K#z;k8dSM31gb&;eXG@>+EfO?4h9-OX0c5}P4#n$EfjqA~P z_QpL@@e+6GuRx#7-)^b@O<26T1nyo$TQwj0aKn>O?Wb|%pyEn2Nn(RQ#irEOS*kt0 z#mXgK4Xz{2x`zh=LTQfqx_XuZenw5)n5TKY>OtWMerjhfabsxbOO&`umvVZAC*lrI zthOYkf#an4Xb8PJqFS^Dr{{v>iV#I8XQSh{w2nkqukG!|DNN_|U35ezUCxEpU$a-- z=Yr24#xtCmH*-*Lk!O$E>UQRyo!x zN$M0ThdvakjTY4gnLwi0Jb&0%gwOD#ZBrMf(x)4Y9G~o<>>K=_$pW==J@213-6K+z z5t1Ue4->~0x5$Z!vn(&q4~l{E08+rJIrp544m>-=tA#p zX#BwSH4}$w+{f&W^x!3+!>1OQ5LG5|&@$N+TAGoj&n=kr2*Mqi?q65E(QfT3OH|8cWE1u&tR zVHa?5Vdt=sKq5(no6_HKdYi!nXQDb`VpXE_j$Lu7?4uWJ1?R$lThu9L@YSmTy=`yj zN34!!z;N8=2W*A9<7mA(N8RxRSc2?3zf>P)%KKv5q6qM~vQXYEdqIlcU|x@s(2o&f&q-6)9k7)9#pacqzKwsfEqaklK(+0RzXM+9G=Pc`co>V z30shkuZ^{60J)yh0xP2pFn6&M$%#(9(H`|i{q*c$P_Du6+;6njrW7Xw(DbzZZ_^xD z)lgC;o_u~stFF#-L0KE(R+(vfZKH?D9(|jmbyH3$*V~#H+c)`UT}+O{W_ob-@1qQf zot|8Y?pmmS8YVKb%%ndOX@ET(?WsDjW+t;5Kti5H86$a(p)*@GQFLO6l)6Y1w3IGnd9}){b;}$sefbR`abtl5 z6xv-MIGu>ffQ(AMCky8@weo?T^}Dx$HkL~h`^LX=<+JYqs}LPKi9B|--gd$^ta{lp zDD2x?;z=!txde)k<>o#3i|3&R)t)E7vYFZL1sas4@@pDOH@DnA15hE>_MctP8w58^ zt@G1wz_C3j0}Z9Q+X^G|R%UXfvud=B^$}gN06Q>h09iX`ZStML-l~$R)IqJ{%}5Mj z&~w}jPfB0+`Q<0AZYwo|Td^5GIVyKw5(Jc}0uM9q=Y4gwdt%4W@4dB(-}G8=9!=CG zI%qNv6x4)uf38?N~ zbf&oQ1M`^Ra@u^RkZux?aUuaBaV&WeE10*W7-1cS;7l3~6vW7P8+lskOhtyj&wsl8 z`VJJf6#nR@CGmIOb@6FZ$7ORt^0zKo_9?hNw{wfZaaLF+ox7a5(YZ#d4^JJ z(E(eT2lIx^-o*}bfj3-#X{3ecZVb9jZJTOgQimg*&cr1vG@N!9-|r=t^gsLC%L6;&XI^x_0=WPS2XoT-KGS?eZ5=sDUQTLkEi^QI#@>s$P^12$np#(Fiwd?(jWW6P8E6@c7Z%F^IH&E4 zo_|re^T53JfOTj>X9;bD>jE%5)I`DCT$xkuqG|PA54bi@#mDR!z)%$a5Q22S`<&dGFgi%mAzw?TYJP0oD^sMLzy& zmX?-glXq6HUqC0?!4K8K5YW9i7^AjjSL)<_tH+~uUyN=FS$5dW7a(yk6bhhD3(z5e zT#h9WF;`93=zMF3Wk#X!Rb3;WFPm3|BFK1P-y%7~rbT`&InMjPBZdl1@6az{fdG1A zdC$^-WX^8Yi6oVfS}S8)gMDzA43v*pu5+sUskz#9{lyTTxp6Y%Ma^Q6R?uZsU}pGNN6 zcgYF?xEV)ud3nNm-A15B@mIBrR6t|!#%wmqn}jwfQ*3_zP4G8&SgX0tuaLy;MYX*$ z66)8vG6r@NW9DJK5pj{2K6I; z@0E=F-)+_hTX)WZcB8x@5@i8OhAYI=`_MsQ2`bS}i zOoVN&7X0RJ@oU(y_3ZA-iVh{;yC{LZQlJl@!Lm^eI{wNEV>BMw*1?Vm%;;jdbg=0# z>=YaPcBWUC@u{_%arrcEoWSty)9RHiCb;(0evBPnpc9^2-HD(;*vqEp%AXy`?diPy zjAld%(QS);&FydLzHc81^|l(<=v6ov)5tpT+?I3=UCh}3F{3^Jm;*Fr;O$?~hJjp) z7tD+7;bV5HesD%yHLeRZJdH+K*Qkc9h{?x>y>a3QX3J?%~J0{;qISx`umN6Mi2Q4%`u}q;Cc3juUh=1sya|{@9ez>xlg2qrS&O4~4l{5R$OMN55LITRu!t z)I!c@T(R9#xrM+jnqJKvy^OL@4uJ6LVV?>2iEsmbtE`8qj>oK9P?C ztH@sOTK!q|WcTOHQnXd)E3fY~B0TS>r%9at%+ubGd+!o~SeK&!(gw~13F&^xkDAxw zf0z^O?CAFM#0utn2sHPnkD{Zxsl|g)Bh-w+hwTTGc@%lqTPV$%z|-2;Pny{Bm{d8I zJT0~dGQhpkE}Xfy5&cO|3lVwmyO&kDeGpI%JVk! zlGps{177_4P#DhzinS1KV4-%?$g(p)ha*P5 zNI;j(=OL7G%3^=b2mcR~92@qI^{9$J&aoZ>oK4a8WpUGtrg1U#))i!Q%k2vK@}<~hytRIg?8 z`%t0hs@m7sh(K&EJ#LC1r2$=~0m>OX|3&3Yx85(CF)HB* zyP`aUoF4t+tXoEg3rio9R**^DqO}^Hj;sHy-+-f3|KTqePPnrV>L|_F5J{00fG8?T ze1}Rs?OI(5kjPv>}y{sfos8F7j znoB+XBN8P@HxbB>uq^SVew9%4U1;a4pNwk%Kttdqd`f;O2EEm{is0*G@reyb2z++E zAD~h{kYJe0C(i-TWK}pYz!X!n@#VL>PX`YJ;$My?)K$A(TtVNf-?VbUp-3n`IjeE! zDy>P43G%us44^{tzTcVY8Yo10LwHL*%>#+U%#k@DqKl$N;y}2%&DAQenoH;-dN4NI(Ir4FY?8w41SV&@z_IH4~?GNN7bX z0%t>&l=QeXc~$Y((I}C=wXnI$N8cXGi8pOjVKKFKUFeu8u&SZa4;grSC<5ac8Eznf zWVhtJuhMJ)W5+Kvf^^pjx^l6C3z^rQ#n^xM4S)BpXITTmNQxhiRre)eg4$b1D>g{= zXVT9|U=J0zTaS(!jf4Y)Q)2flIbKBCmQtrZa49qt`%x2x3L*xPPn$&+=RA~fC6BV2 zICHn02uH}qP2M0VMV^p`A~=wYR;IAi{P1!mt!$VGWuavgxX8y@sHi)dkYLmrf)syOix#1tc-D34)ld(Na(1^(=fP+P$>Wa?pm(v6EL0LgT zq*d2RxXj_EITtT)l(%ajip_nprRO4n`1AGl?MpJurZjfefSaYV>Gqa}0E3j?7a9x! zFwP|NDs+5yboIl$j9q%ePH4KktqkAPd?u-;)!q4PjlvLV`4UE+pOqIX=vDfRSrt zcWaqT)~q{`0`A!r9|Y_ze6P)Sr7HB+Z3=>Ur+CRF|JR9Di_FO-TeceZh(ji&f7yKd zWqx?wuAtsLQ^p#t=C`{m7?Fxg;YLybdGelLIGizf`V9)JQTf8PE=;#GTL@kn>j4MtLTi`^@`3wL~ z!hFyGUm%ccB3(0J>^X67VtG<__eP;f83i)<9pisLc8xoDBoT;)5X9iBM9Hh1x$Z$a z-FYJgAb?gYQ%0ebIJLalaksK~1N+_@3hFl60!Wz4i{bacdB1f$k(U{MQh~220K4u~ zrPMAgL#gyp#wrLUp2W&wgyV(_KvZuT0)}?Qr8cQ?>QdrEX^fPYVvzYL;3lJRAiOaTB@~aw)aj$AaL(3?JM*D zECMa>E4oHLg+`w&wOR?Ci3bG@OBzEFDuCi`7M6Ni$E!JCEov@nO*Ed&D_>^k#}hF4 zfD>BQ8iES*oLnuNU#YSxu!Id<0wfVTZ24f0Y9Y%Q%HJ~?%6so&y zljg}3K}Y=szE#wxz)I4kn>#i)iTCHS=7uXLr?0?ZgmZJsAD|R->p9BWMMySI__~wT z`_O&%fN&(4;1lE+Y*&VTxKcbY^7F6Ml}W7sI#$_dG$(DIDrI+Z>EnEwGN=ASY{yJa z@PFUs%ZHXsM2RT;YZ2dG5SBU~oF)|l2^5%W=V;LrL+9@b%bzDmg@6e4wgWZyiUbo6JN7!jTD4Ux$Z z1Z}Rr#n3f~-X=>&Td!%M<9y z7`5f2M*K>mtVSG0x?W5uX1VQQ-DI~g+Lo@e_2SI%M^9$YSNVze5_mN|Xe?LJF-fe| zD{a05_u@%F3vW6w$uz`u`-a=ausXLf*&7pCiQ>ke6+8kW`3lT{xS(xSaQS zUpfF`%g0FVlNB0Ob$Hr6f)vuN4~gOZ3-b>XnThVh<(18mR>Nlm23EkQS*Y%6p**Um zA!M)6+)R-bf*57F4Rnyx=M*8`WQ<26$q38tklk$NV1O%I22N)h35*F`8SA?;+;w&ZS@U`^TK*6%}5yww;q9aI+qab`x+5!@FZVx$`2FN8`w54 zq*ZOl7DTcXtdu=%Rrzr*WveRm>9ToCD8d<={Q~VBPp!&1a5~~vZQh~)xE@n*`}GUe z38q1!s4E;NqaCWZ4B$iM->P{}ch(MU`Z-_#k>pg?dJkAXf4=f4fSYM9_nkzq9zs-e z1h_7{Mm;W8%3rkc*R{n~b&B~9zmQUj>2dcGzF#teDZL92d{_mAw$&6LmTl7$lGxd=AR>JbcicX1q(^wwz+ zlSDvD@5hnH-6ZPXMMbmi?eT!&tdW9?jQK?987fDn6<~9n9uC;e*~_!Q-CrbDB-4}~ zDkKGm@t@VK*S>zSxB5ValhIEq^&(%9@I5SX_h|&iDJl(Ti2ie=YKMPG95&9M{}o1n zNbFxs&U_zkV7c-kr@U)m)j&4$13E?yda~5KQ-iRmP9cTyRixBmr^65m^<$;4n!p_j zSh|gYuXM{kup9Bp{wf;KTLZhJl*f)GPQ5KExm`NYd}vm%qTlSEZD&#;kr}fbEx1q_ zcoF|0jxS!sQ|K*{a>6~0{4X~C3bj%&#zK(OIzv%O5G6=|N@(I?R!|@zC~R=mAR}4g zsgtm*Y~e6U^%(bd>FH>T5iKm>4Ke8PmapGM>#Z!=6pNh!m3B3 z0ZC?D(}8BE4%7~Ct7gEBzn;$U4VZ4QoxaW}hwYeZjePu{i1-pn;4EIC@O8dNa)xjD zpzzrQX<(FoVUg80F`G$x-Noi?G93gTyz=K>fM(R~O{-M{PxQP1PW_k#3gOK}r50oE zWIy739AN-LIyW5;&k?WG(gvb#(r=5@MRUW0qp6SEr*V2L7ByUy z>SC#KQ=7c%P_=l@S$oG$bl+5Z{WEBjUDhfewS_Cc9^lt-n62iuq>T_?;SQzoclhrk zKNKh03^O33PFI~{ z9+K0FdijG@P|&xx^6Hg}>A;+TRxJZOm_R=)W_<>LU&S-}rSCqOj&$v;M2V|esD~uP zlilVJI?%NI?1h}K)rn4vMA`blwC}H+xbcCg9T}~bvkrU@G1ZNfJn(3;Ruqcb8K*NF z5MGD1h<9vXWh6Dp`(6W`X`~2j69qH~41r&SlheNk3*?gj)v;1cs{8y}SabNirvb7m zkR=dCZ?3S@X^wXwHV_uGP35AU^c+=a`YsX`6f>{Ol?>Rg`JluXP#-mFvb3MLdZ#g# zi^Yc*JO5(=28GHpULKUCDqlz+M*0LmmG?6(d{p$KYNoE!`%vQE;*2g7>IkBmkyW6G z9?1U@>Tfr0*i3vn!Ug9w6wW zJlQDpc-+cI_Mo-|%x)axn$@Tpf7tU@dcXIIpTkFg+-m(EWZp}v$9OpRy4h#iICM|Ip6Ln%j~?4Z`~f3frbgI9$|A&TICD(VQlN^b3XX9@yZrVp%!o)QbG#d$@;3 zQ&+G+UGsnUbvCZr9ZTomEB!wMHxs0LnWOazn`LWa1^>!`1wr-<(Gsi7HC9=J)9%LW zVJH#XOdEf{=w)tQe~Y;;KcnPPEnN1=ORwPzCY&W<(wWEHh|?H8<~7AUpDRQPr~;2X z<;p0E&>;B4X#!b0>29{f=)m>y48gG{z%nG9(kx@sA5d|ALe#fmQcH0Ercp74om3mR zkbs`}6c~pke=!ql#%ym;fxN!n&?}J)+yW4>XPd869OfN;v1yL~$EHzM{B>Q_Xye7J z8j~(mUi+`RrU~`rUyE6G3->Gl?k7`5e+!7TnM>z-+m^IR2*G8VOg7W6eJ3VIu%c0kxJx+oMK6ldx+q|G4Z;wj$jR_t z&*91{a~Iz9)xn&7SH2j;#pgJf&Ztu-kTBc7IP3ml?W?2wKr)zkikrPK|Z%rGh5b8}omi!QMa7El|slt8r< zF(~S|%rhGS7^A&7v2|g%$~>!zkak~{vbdkd;CXhr_nBJ{H`B*HL+FnD?)7Wotc!yH z4kei(I3WSzz%&oM?m0E7T?Y>pK%eaGUvS~Gn-c#Hbs*ZX|37SfRal%`wk_^12^JiJ zC6GV?!QI^@xEBt=-6gmtg*z1Pf#49_Dcs%N{np;+cHiB7&l@lGvHrQHj45l(Z1E8a z+f#zZC8XId>m`32s?X$2j-@~uuPDaY066Hum9KT2V>h30$tV-PZR9xzY7kEN^#7u_ z71e;Z-t-=JcDjM)sv271or3^TgSc>>fGyAB^PvQMfM!Ax0`aOWz$sr6Zv4~L0d7|D zzHo~wMYKg(y)CNvh>sCZ?#^LRO2C$+HotSr#1Hy?U;9ec@BA4FO*y%tx*Y$4?|;pg z{Z;4)*LwN&Jk>H?NgF5zEwWr};dh147B%UZ6^0gzNxq{s9!j0JkiTH3n`pwa{n}|n zy#mxtH=m`-y@x(vlAU?NeO?%X%Vf_Vam1$?5c>o9t-~-|%!pdrAN~SG^j3(G`M(s7 zr{5a%Wc<%-@P9#Kf`C%HU&5&0wJhEc3}y8^aM0&Z{r&krKRHsT?Al6Ut1UC(JO>FaD@!Zpn{QeJ?1Wp%5>POG5cQ}%pPS2+YBO*0qs<5PCd@116ZPHdvZ znuJLJ^TWGSEi5=%U2j#r%+TfZqc3eP9UzOQ3(pP-tGj0hK^Yr;Y(# z(J5W4fP6#@#y(2q4tCa^C15P(SMD25kf6HqrGgj1CU;~?U9mP}+=XqecsZ6|8nlE6 z-o_wi_&P%l8$eBd@1*#VJ6ABjxM_DoZ!uZsN4R}7D5;Afks=X`AmW1`4qz$epZ{16 zuCUm{SWS5{h0gq_D>AhT}4iqE} zNL*fi>cc#xC@8kFR#j)ew~{VR1r?p@loifOM}U|UdKVhCK0U9@`4V?m7O|0(#DBsk ziMDn~BzZUBLLaXaUFox0Ta0w8ns~TQ3H)v z4l=8M1_`p|8fdm%ag0&Ue>1t=p4<7RSluhH|C4uF)tiEB>h%Dfb#3(D?)&dlJhDTb zYo&M+?ZeLmSZb>>#VL`^{fr$_b{=Kbf$v~>oo0SWk}v4{Py!yH+;rkbX_H-6ACg2x zOhq#T;*5>!{}~TG*=q(}ZB4bUm84o)0{xNf%mC;!ILi?g@BH?(oJ zl>DF9rvmYQ?oZgy+9CQmohD}*SDcX4q%Z$H(NiET_x>F#`^>Sre{qPMcb(XAtJP{! z32mP{H1o+d=c9jHrk%{BDYS*$S7EHpdLw>ysCv%P&k52$#Kp)_UNM&=R^xprRgvk1 z1ARsQ4r2e2nXuQN{sGu4uu{0-NMc~Ue|e*cp83+>7gD_5i}A0bGgKmLZ|mc#pLUW2 zYuD>_M0aGg44n^XgT(Tm#G$*JtWvAV70#;gDCCvdjfJ8R%?IRsqI8vIX+T-icN^>P zd95KV%C*bVUk!k`&%OC#2IBHEa#y*9qg)5!zV>D#yvGwDFcFQ+s!VIrr{t0{)!O^k z3n*j6#>_vDkd6A)XDT|NB$lyUk)6bX_oN%mNWqJP$=)$gY>@x_(`V(&LLL&hy*b1D zi6^Ma(pj5hv^}xhfi$gQoiBKz7JgJ$68@$D@7MF%(FRawGG#O#Y-cv2J)Zg4D@b1< zMc&Ppd|~B^DG^gq7~+^M*w4nbATd3=lGM%!E?#f==TQvtPzdV9rpVP%!m&0SM8xW% z?g~|Uzh0)CJaDM`x2W^(e)01xpvB>p>Tzl8AP4G*ET5~}*I9~xQ0DMk$bCa=4}Jb( z5*r5vRuYs7&8Z+p#|E*IOO=-&OIMQi7kLJm>Dc1qSCYwi&;^W>G5ha5x9@iyE&hjq z=3gBM@wJ0AyBaW`Mvygh6(7N8XAtH0c(lw|8X#&Rzs~1vMfYz{iZXG}MU}=yy_28c zumE2eqj{272|kLZ^6jpXb*{{EtKVAPdsg-gXvuw%2_%r(bh=8Fmh-_#shJC)j)!_W zvk{=rhs`T>^|4~UFW{{g#Z$v_Qdwn4elQ|e(ad)1*&$@hgLH}_I&@a&LC)y9_v-iQ zAZj?t$-uuW0MI`;VLt%Lem$ zKyO<*A&C|R`EWzDPtV20>;IuN(3`>ol!A9Mc8J)HCvXX!`E|^+vvz)@X-`beg3AXF z8s8L!ff&Cz7RV7U4tFkTx_3#IvEj;=Cdm6y}pbh}nYCZ<#zEy062dz#PJ)MHQaMbkPLY$ClxJuRok+Bb`842)x0!_$KO>8Vg zrZXia46hh}u0$aYy8j8cq?9iQ)z&y9Wr0tJQxH#p^#{#+sEhkZw>_-RVi3#ealIZW z_L&K21&s+!f8GFOTatYDZv|u%D5kAEne5GLtyLjcFAdoq%=#&8%_hjmkwn%b5GQuk ztK8WAx3lyLTCteQ-O;BU zi@t7_D!Du0=sM1G3njn$Gxb} zLQ04{Jp8O)nDWz{zZeQ9TzaMZVn?(PNAvTMU{y}YI;@a78m^EF?}yjvD$SOI5Ru4l)^~?ku!XMg`r~Y}6eB^QXcM$iv&FZ?Rt6@?PKONb9Y@Be` z2K}KMB18bHVNh)nyG2kBQcon&RP=s?XW8{guIqw+n z(qA3b6H6HwtlWk5uJcb@fxO0yq&0S81I#MN5GBLu!w%~axa$Q z+}f{cS*4-Mt$*Lf-0t*KWsOm#6=8;lIF^=He8>&QRzy*}|F~H$mxFP|f1$c=O zyUBTL33)v?@PbE$?Jm4Q#@%P@m`c2HAPV8*N52z;r?6FE=>AW#A-&_w}zKxU@n6#${zOn8H|XZ!X-| zjrz%uyyBPKGZ#N+hN&AV(NyiU$YKhYcS@-Cq4mR%gbHJJ+VxxI@fe#NrGx6=SA!%B z2*+W;Scd*O?~MHV=8I?5052!CNY3xODEw|LeCgZM{zHBLI@>b5;7g*QHok*l_}X(- zUkYV@hbr$Q;;W>KENuPWeO;$Yycl)ur4?eSlyO{IHfNPWrcYXc4hP`%lhV|hEkOJg zrZIUq7Cr_CAqSB?r=LNwll5Zb5J~Gpr_`&Utl^|^REQv_;oeeTo|5bUh zm1y=anA5M0V$PgtkE$&kY>0W7ikpmL%d@z?WNB2{wseBUbXPc|{1G(1xT3uTA7)?WFnyj1Ue9zt1Q`=S{7bjK0Qh7jbiS!vjTyW|-g@mu;&%+k2qOTK(83aDYY4(t5o(3l#PL%}*N(jiHaudt zKQ2G%|8K5l`PAD&NGB)0f)*ey{X&7~3~{SWMnaDZe`^^;G7b4nj??5V5FLtpqx8od zFJN>5JyW>Ugk`4T6=U&{JNxUsWrpIWOBh<%uTYECl(C|KjHm56=m%g0kO+U;JR%NM z(-poQD^Zrov*_(@^;N*=#yLDTMsM4+S#qcqz2&Az2^e|RTvEZ5yre49mNJ5Oe3m>})0p%J8hLCAt1c0Xi=3M#I z!oa0fQ2EiN6{)z#(_C>%aRIAvpW-haxjx|( zE?)p7L^*87yeEu*K0Aut6km2!Kc;y3_P^h;o8JL1|9oEzNQ3Aw()lQYTY%%JS~Shu zZ^574Tatv5ke(Zs?VSliQf@x7)w6JNnc)}E!TER0FMVPNUF6J#2|R7NuJ{mcZ@?dP zid>pq2si_HN7IsLBcy}@iG0TXm0NPTcx_DFrGmS=Y-Kk`Q~Y(Jst-xZ6A!z8+%lNowMrOA&CQd5eI^7+H3jk~)L944B13d9!M z)~9CA+AOO)L3ETYC9T8fpsbhu|2>4YW<8W#d~x6`55TAIQ<~=Be*b3VW-g~};qyb+ zr4ipzb@tHY;}lBx%mY6-F;tTC{c*csc`hN?-T_ihQ|*d5yO)op4uNTA`j})+d2ehz z3-^TtuPH$(A9ipr$B*PwjA$!3bQ#?b!Cfsea(K1KReLy@GbOrOl%?3svC z1x434*uH>Q1&hpY287CmK`#mb{*rzOlS`v!4?lTrR3@& z$DM<{om;th7kL`oby-y(tfVW{OQmt+_gUJqE}9&}Qk6dfg($1lgDSE?Gkv0IFW<-@ zOdHu{E-uoe-q3mRHUU2QSIR6q>#cN>04e5@{tez~&osUgDHqc*ym{Z3tNp1lUnnJ- z@2#63S9`|)7cjEg?nmr>AI?wtY6K?bLJ*ct=yCU1hmj!McL|4`0vt=YolXw(e2X+G zhkT}Og3)1si`yc{I8tH?x5;d1z)0`+LKmo8@@*%1mxbQ-^WI|Bu#U(anTKR)E) z_oDf!8Z%N^{((Kc;K9?B-&3sM^Umwb>V19EfBNn?^1Cbe_S0LR2VKD%li8-v@y(gR zqLXjGzO7JIxmcB=?xK<|c3OCxVmqql9EXW!@Fx_Lq#R z!mmC>#q~^_;CE5TO5m!tP9;Rfu>+rnb%{6IA69M!o>O0+vM#L|{}TdG@}KR;zD5Y1 z@3ZsYpua> zWx;mTB+qSu08SK z%=RgpbX;9|>d!wSnXG&bY)OtUtv=^FLps@d!$I^NF=k!}6-)t9cQ19LiL_o)24U+} zk_!1}a-4vob$gus?grnE9;+2Af^vED_lT5m!`eMstu{q!d@)xNi)r3fbDyB<7 zLO`AMwhbt=CAeF^*7>PjUKqbHr%?RL6g-!v z)#?o%-Ckd&+Ml^zdD?UT%c|N$u%GVR&)y0?uVp>f4gqzbt7Y)w^>>20$kF?RF7Oe0 zu)eqpl=~uSk!|+;>0D_n%-^QKpc`wCa4Ybzx+jh+4-o)%AkN-_1pO2+b3$BONME>n z+H#FsMej`BnN{z?wLgLvL{nt79?{y9o%{dcVZE=(*{CoBcF_FlKJ#l3fKmBnF5=^> z&oa8mkyF)&1C)C5jAF@yE+mklg(1w4YfK{68dcH_3m- zop|&1Wzyi~3R(98C&8CuC9iiSZO7a*IO!=wbI+q%yHFCLME`A#K#a4#9Bg;p6HLTA zB2qC8f0E}b#UZPEN!771-v?X3Qnr{?KX9V zPee@_9H%NUHhJZiCagzeALFI0f@|C-tX?j>@p>2i`m#U!y6E?O)&8>k`gG;zd&zZK zFlX?<VgUQG5w*`BK$dbi{qL)hp}% z(9T&~5GskgC_XmhOo3rb-xhH$TBSk8jfQOK6K>SIAs#^!J;^TtT$QucT^M7j#)rgn08kcrve*Fgqy1sK`eNXL(kQB4 z?SYofpm=w(q7I^3ug%QnHU42U>_IGm>AACY@6BjC)%n)kZS$Az+yVL4 zHb%7-mqJ+QmUKgZ>XnIT&o|!q@fsp6?q1+#hhv3&Q~N#{?*L=6BMkH?47_q^*U3A_ zPoEOeMPf<5z@&EPxp51u3ya5m3jI#e5PRst;ev%UzGrnIxMoB0lYF5aia*}lIoDZwjGMH0Pf{@aD#5DSu3O229u z2%ji=2BL8PoWJs{`UOrO{RLX zBC4HdLhFnbr?vCD;_X+>JyI?12TvXNhPIFW?Ecno?X<@F-M^jL<2>aAs?eS_eAS%m zffJpK^NxcoO1!N*LM>+ZYWJX-KQ4r?_4Hh0zUuh?v&@4VQVy^DexZZ-cIEJjfq4*z z#$mIxvH<^J-VFI6R7i7wwuN`$y)5{#jGkqsp=+v$N?F|s+C{Pu{T z)Kd{MGaDWzkqeswIkoym(#k>Rp`Pp?!RxU$iIRqP{j}Ygn!$puiL>1lmEaMH7dRV# zdX^$az2-ZD4ICX_VIxZPEMM z4e#aKvzc!ayhWPav$p<$LfvJADw$4P;Yy3O1*adcrA)g25E`dCtgu@Mj^L=mSMG+} zXBs01{i(+_z?X5N%Os@3mZTMMup_GVn=skxs#ok5wsjdeA~`XdiI^)8$h8J^JkqyV z#%1^Gf}A`vF$w9K#MHT4n2UQd4CRC$y2iu!*^TM7+LaegYlIk;&%_BOb0_J| zu|Wcg%-84#zVogmiGkMt=y!g0Qmdj{SpvW6iFOFNzv~-J!pN&C1m#Ay1Km-|kz5K; zBhm5Z20izgXH`xM z!ENpPA}(qpi3{zBN5#1sdvp9d-P4+G+eaO&z+o(Le&*vrCzG+L6wCrqyKH3_BUZ&w zOztm1JrDY!bv&-QcFXFM;5^;5E^JbZsf8ivJJ*%E4GdhB13KLO!!S`OEF++ba{5#Q z5F_MP{)+0AZ-%sX>B8xgVnpmUrb-0q*%_PLI+s8C8d9YmTiqw2v`K2bbZ@MSwj`{A z3-^uh(d0BRR4|vnd2l*B1o);ITu96QDPU(PxPDy`edZvtG~3&!Ue{vwu2uM}h%zs# z&DKwxv2JY#>vpwnn6UOHMVR>r&dlo40nWcmoE>RiYb9sXy(fbKheDhn`rk5VoO>Ag z9$2b8>Dp`4x0`c`@RoU_ECeHP9B5c3G%=g1A}hHvI)Ia9s_2%fVUJE1Wf)?%PO=gc zz;xYucHuK_c9=6T`U*82?N`O+{M)MZz6R>PubU*4=%)|RhPLKA&KIHy-FixSmM0Yl zEMP2N3ffwLPWfTj_kH5Wii2P4p<}jHlC^@ltuV-&n|x2zbIe8`9^h=sD#L^}db0u; zumj3QMH#HJ_UqX#W*B5YQT(u&iR`vQuqLH>m*pW4Z4sJY)>Q2cvnT$m{41m-v-##g zoR{xMgY0iJAEq&Nj;|AML1YWYW4zw#*RfQ(aLbmqSuJmBE=|McHK3K}Gfr}c&OO4E z<~5El?UP67b)BLF_v3snHs1=q(SOu7>~;N78(o|e8Nm+(46BYyw0_Cf+y13z*64RF zHvO(;w2$w>>d+<_k!d}qzT`H9LkeT^Xg>6&5p^sYr^+oZahc{XJU)*f`?pG1&$6lU*P@s;P(6T<=6# zxGkC0Xlf}_GFn0?o5lMQlxqC3_>gXjQe<3m-X};CG;!B4I07X$WR1SkV$`s*qtDpr z9^_J6)VXt)%k3(%q-7dS&CH-xC998(#>E$a%g;5w^ZVs}Vxe4o>$dw=AJ*kNz5Mt0 z?ip9+4av~VFdJDP&6PEn)i%X#teAfxcU-c#$PI95wsoYvAND08EQ>MCqN0N!=&l#^ z-is~41u~KSj_5#3$Ih0^!3!^c+K2;%Xx-%~N-HB9Ng5#q$EmrAoa6jlT8nyjHD$W) zKpZa2r^@9f3L~S62p8hoMJ}o8RNlV@;4J26J~}sA6)1*IpgL*80#tmTeSn%SNp=T8 zrlmj?mjn8$Z!gs7CLs(p(-l6}7SrRQyI^2<1dX0wt1HILoYzRlDS>C2UsIq4eeV#` z{16UIxeKcJ@HAlZt>zp~SKpTA;{%+EUxnK?1$-0&UG2qlW_+>aPk z1N+(SO?E#L*6I9Fofv;pbB|mQF;|*_D0&&Z!7+5A#T3czFn6n3!-o|_7t9oyf_w9; zwD7v5Gd0dFQ7dJ%IpzUa;vC})IEe<(&1l}TU&Y8ecnXx`+IxVyvU^j1C7z#8+~5`S zGqITYsc{V!Bp$*dZ6U+AxB?#R%V{?!q)t1dDG0CGYtSq9I4Sb+4l|`2!mO@z(8-gMJ zybe&>U39Dzn_T37H9NlQNZks+&Z`-UPz!yJz(TE49O$P9; zMYNVf%?J_BRkU733FEehzMWv$t>O&L3GTiS#0VzfY||mI)crDqn!E z>as0z?p^^|e6#W&4w8Dzt#V^U)7t~K6@VdVK&YnpdBB;z`nI*;M|__#9xu1*(%FDc z(650Y)M#>4t0x$J-kc}x)f^B0zYseQA5LJwRE0Z}cTTm0&;qjCev(96+jW=UuW8`!xUh-oH9o^EL z%9XAF+dM?@a4U?JmFz6W`w?BufdK|PBhlV^ z_+D0ZIUl06PF7E9+V1p&)Bx{xCW3XhA*!{{z4&xJ@C*FM%u$NwBL}S7p_jc5%IGi& zrX+T3XVcgSQE6p=nwwI^+~+<59dCuN0+8xcjG+_@y;m4R?-`|<<-f2<6|ymz)32$S z^wlN`>ixzXah45#jgD_5U0Pg&b+(HxKwUJOuOm0+;YSX7{K%GNMHLSn-i{1n{bGy6 z1pJtj;4#u-Bf+f&gh?6v^1@`7ct%5(4{Zyn8`wv(ht4ciNWeWeCwgoRn0@VYZ4=ybEqwDW`An&v}CpX zHy!M{c?$Os!w6mzwKz{erwM zD!6N=Z+cetwBB1tDJ;th=R>*8vr$g{*P|L#YH+iW7pSuCai%_wgfK8uDTi?OMxv6Ic`edqjYo>ZC&+tDtD8Xi8mhIx;CdL*7ql0=m=0aUz*}6A{g3%3Fq#5x75D=wHQB2=(S8=3hSE#66eEVf$U0b~so1uk^sQRkvY$n!N= zM=tDjz}J`N!&z5D3(H)i309Dow`%o9VJ{*FPJVFKy4e~>5K2c9IPK^UU`j<=>dI+- zxGITbVMJN}(ms8yW!s!YV6do)OZ45Xj?dFeFL6UdXE^qswYabc^dRVMbKIZUY}D45lZ=F{XApMf}j#b?2}LTc7LQFBPs7x zMM`z1KmF>)V@C<)Q_m&v?q|zMK%1NV@FRWI`T18xOk~bxp=v3Qej+(>!dk-Y&()^z zTXS69YR{Wy7J^|Nb_JcwH3JU6Glx9)1IA|IVHrICtO*db+`&Z84H9aKcgocfD~*!x zNI=-zzwYY=7c=f|Dos-zU)0D~=VF$|NvQFhpM16=RZpqY#EjY^M)^(h>-rO0vUHcq zhj~aoejHNU1YUU5qE2C-v7#XM+&xQ5LRQ`KjE|PQs6mG)J}jWF7Av5V=7Pu$st-vN z_pbbT^ukbg8sm%5IDe~CpbI8hz4}ZT9Y&@%h;vwK=uuKspps;QBbpA5vbaSFwPU9nJr#fDtZztD4ZT z?_}oSunrgO2y+CnP#_i4m;JvjSC7vzgs((vA@XHHTBUDQHnmpsv*ueJvy0M*L)dFz z$$OmYO&HZ@epI!jvgBV4iI5nPxsL^L9FXWq=WV8ok~GSL-S|9)Mw>XQ_U62%z}qZS zCZ_{DX&SpZ=Vm_*Qldge)bHa3QR`w<%z_hV1T23x!Flr>os$*o@p9gOa7Kqza7yO! zEh(e>v8dxv3YV|X!%E`y<6^mE8l}MEO=qd3hzvReD@`A`gIsvQI>*%yp5$;}miqeg z!USB0xRL-z=tkv>LtR3W25!@U^q}gOqofyZL7NF6CB0Y;>^*lwgG~qA1>0~E;C#*o z1`WWX~pvOKxKerC2dcTv~QT`2x{pN%Q+mMyX67rielpMK?5FjD{U!}8DI2$u*cHM|* zP+mR2txh_P)4M`+7po&nfK(XDF9ULLUCuvtrt|`2yCf!!^PIP_BBn#!QX(+hEAow2 z#Rl-HQvO(w=O^Eg1Y;zJGdQ~h27|+M0*=`q{pv;h>@$iAJ6mY{GnA%!L8_FPZ?=Yn z^AO1FT1qM&+JkQf!}hgw%=NSIt<1b3!^Dq-qdAr+uvGsPAQRac{!> zo4PzgSeVszLc4}VqSLEw469`j{wFSbH3<|ZY&04j>CAY_HW3HClO z^yYCkWDa@1;7<8|_*OUE8}UdIQjm<<4>U zP%C_F7KbF8v>0(IJzC6f*Wa4aIuS)n=n(_%<=Vto$DAfku!K|3{dBhAbWZG#_YN5h zEXd|AQg0PdosMk(xe&U0(DS(TO)F7`2Jue?c>TwLDLz9GVilZq9?2;BF^)P;-R~4HgmNVLqoCV3GcIZ@s#P~yaYonZqj%~ra!70^OXLT28`OR_WsWWtS zyf<;Bh1DVWs9pqzcvRmSZXT3+e>A_|UGjUG_g+-g=Ywv3RU-jsD^hfXMQ66S#+`+1 ziSYPKk#rqEE302hH9P~I^+OCR0%BrcWUDGK$Oe5`Pb&-Qn@$zcJ?Q+R+YV@Mm^Hub=|Yk(@{jKZ`vp;KR2G$R`RN| z3?RcL3I(YTj}z8Z&o*$4C@Td)*LlMb2DvFIl5!?sM4?EUwpieQ$MK5B=~w9;M2PTx zCejiWOarfA%smj`43aQQ1ouw<3A?19)zb4|`g(R|>OyJD zkE-;$!Nruzj2YGpox5Fe@GQEq#FLV3z+Dc@LRkxb2_LLejX!Fx7enHdrZ#P83ge@Q z8gNwT&(9{U3oR5Hr%P}8%RS{@F?WgJ2Es<(dwgm09gfO)?{6#T@KZa4=nAJr+|qiL zV1a^uf&Z?3lpjCcQL0aEm*6*n^Fe`2x=y9hZN*9xYWVk7v-7`9#`>ZIj_vr@pD>p4 zX`v6PBTI0J>;28_T;dL#KMa&(#Ye#a++H zYi8DyW`}m8_%GC#7hu;GQEJ@^5h)kteV*Cp54jIu}+X7sflWtYSM zmk#__j7>Vj(T zqYnnJ1(49#@g~RLz!Tt_mfa?Ql47P;`F%$6Z1Wz6SoMwClvI|j2g9kn3Hq_E&@oc} zxy7!$P`OQeJtmu`Tdzd3pUPphQ*WWc0L*-O$EA`iSjQ>=4CHR$lvt+c>ke)BW_gwH zJxV5Ei@yF0VMfi5!Qu}Nf$}ox<(J;l2MOijqgfV)-C4u+xkE%7ODO@gTLV1D0(srq zZ}OAZET{5gUasGbDU1WBe5y8Qexd0PKPfYL*iD;g3qZ41_Y~x>d)kNG2s$m&vq+6X zTT*FX;uwy+a zn<)(B*w4w>0hq@doaz2`!0Jps1n*p7ou*~)iLx1Q_8knR%Ft99Lz-rW^N}ATTWf0ACvj0Kt^@iju58WAek!2FuNXZyKNyzQJI6lR;A_9?*7 ztEJFvZBfHCV~~vSH0JN0Fhi)^kpb_xwFM?$l7m04N@`R8mBZKYtvOGbwp0&7OJO^6 zj2s~IDALK$xmNSUWN}qQo~k}?>Fd08bwtdAq*yj2xKI=-O=;Ky6rAU>C0a;zoyx0K zhpVP^>AP^Zg7s^WApUNXMrk1;buzmA97Tqzcy_;QWCTSyW9o+@1!~Huw%XaGbS}>A z0wx14jY4HCvp4y;zs`^z%4I z!PjuE%`Zj`YEyMAaRuIqKL`x*h#7`B`sL#OaK8>O5fy+iYp}BY8K~`GX2u2OS|@ia zWUZ$Ui+hv_@ybr(o18F>=V-&|q;b8YHO6jS+6o(R(GSViX}Z-VUd9j1rd2AGZpe%y zyH}#CN5DI+P)7l+CaYlg2m#F}QTrzs+@^VEuRLI7KcvBuHnNw2_?Z+qJ5>?o(Y0xh z)k|>(>8avH7};x)NuZoV_+mS~M#$=8IAl`h_;iSV#9BdOgm3Pf%KvOpExVAkxU>^f z#nwA%PC-Ym#)nF=z%eElnI(mtct*R}+Z*fivaL2TD?UFbk_5ikBLGcIm^sf!%p2J2 zgrn^eMra9Xmz;zGOTp7S9vZ@G(-qX$fpw}Pq)e6v#2*ermVymPq@v~GCb3WjcYc04 zQk9FX>QN(-&qT5<46uaic z)F}NOKBTa5uz!tDbG>G6YODnjVb4nAtm0vDA5(HMF7yVK#w#w*Xe0id~#(QbCkT+-qh)|7-BY{vd!&YUId`@MC$6!GPw`NnOrtMk~gW+EO;-P!{la z;#qH4pQV=Gwb31hj@9}DD;xrGLrZK<3?jGFGRU5 zl9=rzb|HdHX-$@QoArp>IZh*NlIl|@g`{x*nguvWvDVmIk{eiG_dSCmg$69ueFRqM5%svmGJd0@SF% zc?z}3i!rWI+vfgBQc{!FSLWu~9Gc5&vUT5c+9brYs*D}D03pRO`UASR&+AJ-0p`EP znGCX#y%oN2>^;7_AHQasKJBybvxm>XLuQ|`drSQ$z#euqTrvhu$LdRduAVqyeVP6# zCsQQ`jzt4#tX~UDlw`r|4%BAYGGf5CRgE>LGKHhox7)Cx!Ojmtgz83ug+(E(~8#JgrkqXeOI-R7MD|^Ipzj0sL!Z;zG^N&Tb!;|62S`PV3qu; zekj`1oQGo>B82xCu6Nb4V7XY0+zafCFF&gf3lg@v_9A|xKA(-m5T`Y&0z)WO5uH<6 z*Mw_r`~Dn7SJpIysHdjz7w%ZnE)B}tL&~sriDcx&RsE_E4NNSdeQZ|o=QWPR#{cQh z4e_r9DMIoALY{RbhhD9Eb?!*Ub!7JuSe^~q<#Z#y{Xaih-t64h4*9Wo!efu z5UD3P(0X43T}u&ML|M+UDs5bm-gF`Yxs=+&lMZdh&d@lN%w8BD*5d;SPV5Pnz;l12-`OKYYWwMK`+MPI<%tl$ zs9@qzEc1G7ojnZv9|oWa&I}G`ohCd+gP}A>V1)Qb-XT9)C@JHJx7&}DulWzzUWmzs zH(xNUmzCgZ-)*sBBwSfDTC&F_Mw)7;e=;OhjZLHxC2LgYY-l*~*Uh+p5${kvfAk|D zR&Q0j&8fI{py<*^HoUdHegfV8B^%ah_*)_RgJdE#kMfLa0Ga^^V18%3su!bETQ&aM zu+ToqdKLd#u9Qm=4@!6hlh5((*;+}w*ScV_ooQ}&qKZFL+39W=o~8p6%WC;#;3qd$ zA6mM0PO6LhyTQ;jdQ=Ux0+OGsIfyW(YAX*Ip9&o3;1Ua-12+9Zy%OVZB>afHl`g02 z!eWV_4Y5WDc&4#NxW-Wa1JAta?FEm`2CI2KW@WFS9W@#ceow{FAng4Y> z-soW-c~>RqSIDs=oS6Eq{>o6apAqNcC^%kV-9%&tKOH3hSFX=`-9hZX@aZ1wn~|S$ zoLX<+M-Pi@1%Kjs4D9$~yU2Tq)Mq~RF`1!RKWTto{JOuyG1w*h6BeO7f8wm8636i? z+2jvnjrST1Rz5$*{Ob-v(DeTNTrPEq*_-FiA#uv0`q8=jDQZ65uL{JOl9Xnc&x=eh zb%;&UpqLr1dGg9k$Llt5?A zLE^GW)92lGl;3wcVE|P}lT)q3mvkm;ZVit&7>@~S;JMvk5mzn;hcd2QX|p{Yj_e9n zx))^RHuJtQ@4*2OEpwUxMy()OKM?;8n25I1_LYf^UVea;+D(L8b}(V|C;D8UtLvZ@j( z(PSYsYx5>b8zY1dZ&gU|!&Y_5^bvX(p9m>ib4@RSp{4=;#4_uP(*(tYDsUlB7!k6y zGlmE-YcFn31V^opY6B(-*@v+L(rp&ric${TkmvX_+MFRZki&V*>l6NNN|9&_Fr&~=|G=ectW}KmmgUgC{1;%UCG+oZo`erY_U_*xe76VuqsNKfpt|Usqnb_w z|2tZE@~l%ivs7^p)~@gAXg;s7Fw<(55M`2chlt05ZtWK+6{x#kFHBM|i_KaF2zDy) zSKE3v)zLCBU>(V1$XBPJcJ3-g6bomF$_bz%9L;AcEQfEx(#}n7)1P;y5h35THsq5q z(Yv~5Czqy}l*k%BzN@+#qf(mUvKCgCpWm{=xitbqziw9Z38x>*hsrmN(_b2UK@p5T ziHr=^h%51(;hph(J2=#|XftLI8GRGLg(G%ARCn~9Z_|Wvum#9qU%zWiA67c^-YO=@ zjl#$(P}UTGO~q&+uoC4LBldT9guty@G^Z!tZbaTP2lQS$^&Ruyg2>Ce4T*mzE|s(J zhlbx~HLZojJavl?LTEhm9E6AGw9)Y2W4U%7O@yhe2G^E)a~(Z&jHPHBnem}YSPjl6 zt*TEnw`vrd)WhZU`g2_KTg?d!rxyHh#F=F0Q?Q{vG0y%ThwdEQur>~<4I1=x*XQxo zl4Ht#8wMWxsgYSG-z*U=S)xy_m;?)qb(%5%1t`bUdc{Hs5ftI7y;ZY{j4T}eHl!vV z8jI|^^^Y`i^XUZ01SaV7-IN zP2d)?BOvKhpMp(Kw2a7QMW$PoH!QyhNm zMrA!CNz_q=i<#p79(H3Hu~t$OwETE5Kb`B(efUmWg*g7;hkv^9)ixchM6YbwHn-%% z^8}gfaHr3u8lC(@IRxS? zuxrU+4FL>bESeokegQY1s=6wMv*<>h{1@3-#WY(gziHbR7BF<_TU;JRiShiYFZ*Z> zVi%>XAEq2?fPPS|2)i^tf>Dk?>=g;x0>;`x*H`$4A)brz@p>Iw9i;__mZ#eUCA4Z7 z-9xJJPiw=F5>7*fs2tYqS+G&cJLXwY0X-|Wp})MMK?ZUrs`!}G&Kn!;-XBKc5+Ul8 z%)hlSVxKIpE4!%X5ob9MB{CVUG#gd^PfzFJ4p-N;ag5%3uMwgpL>Z#@lIXqn&gh*) zCpuBW=v~HOl+nxRy)#PGh)zfZLC7c1^Ss~r3--CLz4uvb-M{-j8y!a;na|N38(~90 z(KlAdzFJ--exJuuLmW&zovJn7%5Lku5~jlT=aJN2b?_M18?lNj+^y%uLu<6D$7a*b znRzZmFuZBNW+4Z26kZg}D{VOVb@5dO3|){uHTf%_JeD&7jM|I#k79I&`_(qB+WH2M zEpB#$=b{xzO|N636@p*HDP{d9K;w@p>4;qLOAguFa+3uzt5iFmtAwik?VL5?n3}OS z4Tt2@`((vxQg@DFhGs7yPsWQUjbqO><;jKlUxXC-p(HOXg>xkuVQs6w(-^1~*SSeB zN-h7lfj1(ekFGSEM+DBD^`}u2XG#@>)~)f%N$wec6yl zwcwZsdhT3aa}YyJKjR|XSvVN_lXdf<_bk}-9?2VWw)9TP?KXq^%ZKIgt2(gJubooO z6R0s~;Jv|$Y08_dnho}XzQKbUR^1TWTZh`_PtI2BU9|RYEX9!e(ITD29ba=+4W%mkqp?>DTP)_ z91E_*)}HU(&s6-HdSOizliK4r+tWdgc^H#%n^-HBBT~SSj98bR`E<~e`&@@glfyUk z@+Ag88>?+$f{3!Y9`RnrN81$p!&kuHmwm;bBhIO}yrr*^4P8So=w|Qduk$dzKST4J ze5IJKL4YcbZzWTw>PHvI{STbbS&5akJxVu(X&R`Od|zR8I<{N%RscRLIb14}UGWaa z;DbJ8$s{fj>X&JQnCXZ-=J}fTi+US}#*!w=})D zF@D92SC(-+-ybg!s-MZp=4QZ1e%gI29$3WAjiZ@vVzd*#>|2kwT7mrR+V1;nD3@8= zvw{rm6Q@@>Z8Wo}^U25FRYh!D_q$T7q<$qPJg(PXC+|3HLDVwvx51n&sldd=*BxAR zG=)SUuNx8Hh^?3&aWf3U-?sO2Lg5Z+Q3bexvkd)iZT-Y;E{e#%f|;ZZ5xUh5gHmfq zw;M*^YFOk$T+F*5OTW`tRJT2Q$1TOD1?@c*OUVct>L9o}3ie$(;;?d~PIo5P38X2_ zUA`=~Z149dw37$V`bFtw&wOclClf39&4lf%CwW@;x9QWyMM3Iu@woR`P6M32_gPxR z3N>eBgTiF%80`=+JWdaoo^{lmS^LN8nnmx_8FCl?$t=q5DCU7Hfw?j?>&$@rlK6>5 z1$0&hbEAbFbn2oQCC9ZBd$S$pN3{&G8>FWoJv^!ym#@sbSpn{e?Nh zYM7XQZJtH?DF7M&sI4a}{qXyDk}WO)!`DXg5g>kae$mI1H9U5}8w#>>tHCr%;ZL8u zS{z_`+}ux$HB}{Y7r2oM=8w_VoO;|pJ~*;9mabB@sNp!BNSIt_Wj3vrpxIZ-F^->m z=v~0Ap$vpou;c?)KGdMTk+F2Ubt(l3O`GfO`V};|3xEsgbJFM2=<0f8ifGg$oD0TA ziiCLGv4xGEcZ(7}!~43+``j+Ht#@kc`%APJ-wKSX$zrxXMLT6#qic+#R03b$9o$ma zaTRGMKkVWd!eqgM%t0OrexQsps&-JyS@?YptKHt>eTM^cR@iqd;eRYyV zEyIO6e_gilJ#ll(QvG|dX8R~ z%B9iLaLTj{G?lrzQ*O;n`=iUlSNY3kFQ-DaWeBcXED5pb9!8Ff^jDvt12MM{`R}5mUoMq?bwo8eQvEbpmgc-PGFG!P-S9{W7QbAKl(VF!K}2b!tjsX#E&1& z0bd%pDowo3j?{=dmu{-^dHl!HSJZ>HE-nxt6j7nC0A}B%jQ#NCetx2%nIODQV;Zc9 zqKmNJLU%Zz~d7VaEFt-%mt1CPZQaO&F*9bwU&uT+8CW6p&dtd@+`;u!bgyd}7{m^Np z5VkX?$1(3dqq(*raNre-Aa)I5w z6Q&r_FUQ$7O=5odlw4}MmNTP~00eFP#f1G;Ae{YTnhDiQAb7!nS9^PM{HbR54SIRt zVK`O5Rwl~Ni0uQX-cp8K(w%}QG3&K)G0BhePI8yp1&c^<;u}Dr7Xw9;)(81#4c@xw zW9^1z)s6-Uvzo)&hRd%r8h|Qq9OjOcQE?AppNIy64@|R96iJ8$-!h^I8KEN$Evi=A zy%C#c-aDMFALZo(F;~1n5#Vl&OKG)}fM9>ds!Z^;o{)8Kx-4^@WW2cEkTBlk+d3RA zCRoC*XrcQw`(PulG-rAOA#`{(U5fLnj2!`c4UGLt4U0c`-}q%Z@e%yMR^(}H zu(TXkPNqVzlHEMj(>x4vLrC{raY~JZ(bqGqA1OFH+_DzS)hL)2ufFd5{9A*iRS&$pjLa3v>SN>9u<+7%JvAeW!(}7~zoYO2INBJjs zJGHOH*ozu(*^=~7m;cY`X!pbtG8#!}vG|RN1QvmVKaKIq>H^s6YOv6a-&~gu7zL3v zSpS{0X9ij_m=^37Nx(YX|ELkqUsu^Nb(LiI4&|OEoci4A=cDA2+_iq`H_}1H;hjiJ zDFlE|LNO)4qWW-E;RVkCG7$Tfw|cYzQ518{6u`GscVOu4TX8$i!`HOAN5&bEw9N_A zpQww__FcQU79CuIjErhedAXf!Z9XSuD1?nG#6`B65$9t(Pp;#+8VQ)NS(FPF4Y z=DS4!4}FtgiSfP=DGo1*>*zrfZ+FKtuUJJ%Oy~wynWX)1B+uUE-wn?o0mG84RPtgf z^LySfEY&hvRcV^c&RsvwIW}X{O6yomC$2Ec5iG=@I~`9GGJ{QmtLej-9fqAHBUHQM z8YSu#TnniSYx*K6am=pr}a9rN0 z1z#NmMM*yV2>s0f5_WV%8F0N0nL;&eTx^Y}phR3s@G*>X8j_*(O;smJh{wL#y|>ng zf?Fwhj_^cFJ$G68)I>%Y`xVI-e3a+ZeL6pSu|nn;wc7>&4a#(-z5imr$`*@zs*Yka z#weK$mCM*<|5H0w_+K8&76qeWWD2khn!A8E4u^m7&SRB>Cc5_O`Wy0mD zg1EuLuY~HlS`SltQd}pqe8Q159Jv57L%-HVG&!8~H;?WG^~sRYJ@S}--Ivs?h5JO0 z@SEIGI_mMP#lDs@xA#!bGuu0)=%4ML+sf`U&oh%A55U55cQdFlRu4wt!_GD3`*Z2~XL*FJFh1&kWo>M{(pK7Z1d$TPh^yk^y z64>kw7hSG9K|{%wU1kDuKczeezu&6Ni8P6=+n8%&(qC6X>-Q+tx1`0B#$BWIAPc&L91K8Hb3PXnhWwqHvo$AIj!+q4T<2UuVGUhvVGzh2N-iJ z*A?u1jYLjf^dIzIu-1hhwAiHj3Av({e{<2dQ>_unjX9m8(8OBct&QE0ZBgXlB?^8_ zDTetRL|!Gihm;guwbuORG?&Rku&YNxv`-4hFwjs_TN5`p!4}OI@_?hGQ7E&riz=vxIrA;=#jrURLSE zh{hq>u2G?8jeFqn; zcs7~G_n^!L3F9vJi3}@s%lZ^@%jwH9GAOf7NtRXA1O25ZwdWbt+#^;?AtK5dFh8TFlG^VcG8$$! zV8QD(s5S-NtVy(}C~}eXv-LiMsh_kTJC7r}=ei3etT25{&gjO=lXymGCJW0?SeTbbB$|E%?V>+cj{z&-pspiZu!}tI3 z4QzF>q3Gxi47xs$SENDMl&HTSs0@VngyzcHD#>TKmRlVZ=6wmx=IKAGz$H&ikClkO zT3&&>EutSGNejYw1F$R8&dZjvIh<_Xn}Qk_`-0Ej(Cq~Hjo2Kj5S0%!I$dd->&!FW zN6SoZ2x3wsb$@5j2>1#$KKytB2?mJmFWS?cazLHp$u3jy-(-kC>1V(HXq{qS>&cfY zFP+E{@gVYZBDLulHQd`9YXR1zx2^IyxOgsS!Kd5UW1NbrkpX@73q>X6_Rg)BdR&MIha67=M zzhldR8$Hb;Qi!>go3Ew-5IkE`xps{q{bq%)#g`UMNQ-H) zZ1w|>qEb0(^1GzKNDkGQ1~>$&XESL_Z)+G-Nb>pP^rL^18XADPJeJy4Is~2ESF(_& zZ5m~p+E0JbH;Wc-|B|seLrDKzZUWEBWu>`;j=cH-Z}>Nq#kS+`Cn7+^(d9F$hn&v7=1}w37|%wSVw)$B8MA#3_{|u6uN~dLE?JZ|`=s?b#L;IW+qoyO zU^OIZo4SmoPPI|zh(_e*w{EVUkUqByr+G8&Rq~^WQI!Ej$i+J`rML@65(2@|VUJhc zRGB810kk@=w>|NtM2aFjDAb5iujpE&N@^)ub5J2!xP`JGGm#b`lV~6TVt62UJ566| zSM<+wf3l4cR^oesVcTFBHakm^vFpW3?nl?Zp7+1wH+&-Wu<>Y~4WA;lX86aU=kQ)0 za?E)={dv)Bk_l8RBEhF>zT07Fth#q`C%C z(&E@7IrIAI^BtHR^ikcQ0X?T~;{=wt*Iveh^WB*0rXAY}Wa|!e|J;g}e&$D+8=k$~ z*eY&fjWQT_#JN_k-ee=nWDo|zs5oU+ndk2uZDv ztjI$bOW(9C$T8Qi6)CC(j3t@jbo;942x_LOJ3-VqLnVefI}{YAmn!lyy84fzRQUT<;3JzH>XW5;L_OJBoDuT9?%}ta zX4W}eH1Z!R>X)fF42Az$%vaf^^wYSQxXk+3E)o~6aA=@A#*`1mQ}R{py*KY^gxjns z^=97t_gN*+@ajyxCL@>c)v*=bdrjNh?u7eLt>lK)WvJi#Q#>EY9-tld!9J5{LdYbU z$rq>=%K!5sf4qqOYUr!UejCL2@Nl5kdgC33csT8p>-vvGs^XR`w(#T2hJX~nnpLng*}q=<*ZP5rr1uRs45t3>q$BE z-@P~$gup0kT%SdXw;P=VAHx9^fJ9hrSbqpdx{0xxOz}4y*X8OS+2W)D^l(Ysk(qFp zxAImm3jCN7$xB#bTfSeki!M{H%ByhOA`QOcD3?}C11`7n(yh}mL;<2+Dbqrs#7PeQ zLFSqJA%xC8u|&B})vI(YYAl0Yn& z8Qm1s^2aa-osr#eu%;qvczxJyZDT{*(uqEO31};m;8j-{x5m2mpiFQWkZ(|OJoRp$Jd$1N6aHR`phkgJeA2Vq#}7kQ2J7VAr<%?&8;ZTLjX92 z^Uy{cEgW{Ud-o^KSP|F}V(?lXI9mmKqnB=sRjCUfS5e))#WrM3ACv=J7RGWHV7o#> z5r!c3=UQW$Q9jX&+N-x!qi5A(mT+9pbhd*(gys5oyA~s^!xYk?KL3zskN%eh0E?xl zofdYdY_w{EJ`2=+yPtw}Yd^Diiv_sHCrU>8Y9O^sSh|SEo5w>)FHq)e{xgEXz15AJ3FwQ-hbPpI0uKLa@+%gV*z$=}(=pH7TXt*`AoGLwOOkD(r3KiKYL32weFQaAObEK!@It#m=A;nS;# zljOpsSTSN+?a5V0wlp-m&j^iFU*v~mH_h_Ilw@*U3I}3EW5{$nD8JzncjV$7eECPD&T$Cza!|DDTjayAe|?zSlv4{{rT_@Fr$5v1e)?OhPMwgY9(a1L z{Gdmw{z4YK7Aqt~qvAgGYW@=65Wv0_Mu`PvpoZ7`b?UHWP3J=5E;;i)xiaB^-X8WYxLr9Bt*Y3?yAQ!md#Bux=40{~V1#ZDpn*^%f8oj7JV2BXb`~BlI z^qEMhG)bU;Hi09C7l&1zR05D^&tt5eaa5sIZCzfCA&Jw;2MX`?_(8mPnQ9GrmUXB> zEpTVH(8OBA4qU(-YI6ue&s|}@7B>_?$lA)t(tj@MMfDxnr9?S$VJ~SmGsn?R1Jm1#$)`&>xYjQOm2b^tnDqu(h?yin|1GcP z0Fq^nlJNjar1_c4#&lVi8Z&q9jbX zG72`M0i$vDJUZ<(n`VDA*iC9DS78q?^3$&hSe|+X97a7%Pq3?8*qyhRkhp@oMt|QR zF#D}t1`KWZRFIu8n!dqVDW&41iEn7Tssi+GeQPI=4k1casNNJ{xt$;_?SC5iO^_u~ zN$2-kna89fYuG@IpYX6I3sg5|febrSu9UKmw(h>ouY1C=&P@Nfii{Y&X*_kVom#I) z9q(Yq_>L}S4p^R7(KFI65~F(A$dcrzLMh#1ll8OTELK2BjpwbTU)#|=x9xT?(Vgsp zjiu5-?<#JUM0*E@OO~vX|IND08LErj!cu74njK=b3bioE$XsO{Y8E3*8pYJHWwAHM)>v?MS((OLz%}FCI$?SiaWXClu zj7o_Tq^<())ob1!c`qH}&l&pLYC97ZfPrr_B8aZQC4Q&xEGi+Hlg-R8F2v4~A?&fh zTZV};RBUiROLbycMr%3=DR>9Si5&Z=q=8ZkuolRQ{35vhp5EcR1Mzb9MGb|0gci!0 zDqKz2tX8ZvuZ@~YmeT<=vk1o#&Ru-H*}|n1o3;B--y$6(9r((7nG>~jZq-Y;!3uB$ z1h(FsOmg{E1JyDJypF@1uV9nTWb5^i0<%+oQElN{%A#Pe7vRL;>AoWAiuFNxQ-KTxv+6D?DRmQ~9RCax}@B1e=IFgT{x_+nY>V2#9 z1Nx8LIrr&RXU4skBNLI!0y`wt35E0VBKaX0-Cu;dye%+;$6MYIwBXmm?n+wTOd8~OK>4ZcqpjCXzA3;-v z-*ozYO+$&E!(pm!{tm=&Jj0TY7=xz}I$Za%u3vGoMIo`mGM)fM5%e#n9?ZBXtXSf! z^o0x4_;cj(;Ah13d$oZIFMg1vUOB!cT6j7OQ)3R*Zi5K+@EW-gdN;tY!-S41!rGsb zM&sLR%e?o>{r<&?(7$tz5oTnQYZuSs`!oN(!5A}L5+grs6$$3&N$>Gf)%UL2#n8MU znW4I2v(W#6M^7xoKK|ECbr=p{{Dtip4}ObR+m}Cq2Y%4{@EbDSf|Q~U zNM}im1x)jza0^K&1##Nv2Rr!a$VruK>em-yE7+=uy7THNbon4~0!lm_?_LyvL5IRVZr%t`!!|sG z^Li;pA|c*5l$R#+XM0N_o@1oAAVp%FgW&VH^1f(UhGGl5wY{Gqlc^Ot8$XYom=-uP z->Y|?*5(?@uf%QQMv_0FGiAOWA`-(VreYq9|W1A6MKHG=Qs?hygrx|RAV^lq6hD2oT z%C}f_giX2~zor#-$85`BVZQ?P<*Wr8P>hEGbDr9wq}=}4i-WM6n-UBuOVi!IhrJnS zAue+oD=ue8t~6w5PB95Erp)9t?!OkL=sId+{`WrjLODU;IH5Al)=N0|cRJx?bP zT)1YRw}7YujcU*AtP_W=%O?m%PLG7?Qr~Pn!C%|4p<`B8#j>g?}^Wmjo5a}keGbU}J7Z_|bY?(O~_ z$Y|Vcr%GFnBQWpD`sPAgAE(Q)K>1GmwUHU0VA-l2>2;$G93#O$6rn{p?nG(-0Hu%B z1L6${)nzKtEAuzolxRm`EBZw*dUK4jS)V%+xb{ z7MZIyzTHq%${0lFG_NZCT4X(}ByC(DU8AnSsY4|Ic;#~Wyw=}!ue(IiNk03a7u@as zmH|3RA*$AehS(k*pA<0gy6Xydn>>=pa7EvHy*Sifr8siRFPZT&9WmiL;Y03)a~f_$ zzG{1RRadhsV2ny^VqYkoyTQA$E4hd{-SlPUUmo@+VreIwk8%aYtIsHbZZvhV8iYAM ze%}O|3=}DCeJK`fAFfiI{?f@*hL!lG4x%CqC_3w!_sP*+3$KwFbC6d1))Z_(a=N{{zqqV^zhkAQghfI6sM8fmjGBJE#H|AW zMTd;2tEir=QhvnJnnr1H-28SnN$^WFLWS<$+2)mX!f_eTzim~w_@lt`jQ@l#SIRr| zHsYN@dPN?Z0G)K1usxRsI*)4pE_xBF&_Ut_J;h`M#Ek6}z3kJ>;1Y~@N}NqC9ELq& zG(9!B|C7Gzc`umq$FNeBD~5wrg6MIoV*i;T87N;Lsffjx0qvvB$5f*Md{iwu3V#7d)6OXk9|Jmzp@fbC~VHF*6~>jwA}t*t?~&y&M8 zWP%5}14=>Os^QJ*RraK`2lf(-1r8Gn1k$WoYnroAKk(r2ROw3x;~84i4Qp>ryZLTF z0h*H!XrvI4inzV(Zl8((*Ke=uEM};+jk#U$seB9LB|ws&w8e;vb+8{zgsF-34ACwV zCFnw_yj^7)8YC?nBs70~OZW9A-Wmw{?Ktvk?T;49&+e`t@BUq!4G}#mSHqdq#+MJ* z`k639cObdZ@=TE5#F>CAtnXXalzN&<#LI0Z2A~f%ssdD~7?qYKswm!XG41%EI!Z7T zCb)T?3C$o;n3AaGMHLEuqt@d4IF5V$`3&GfiM~yLJ1T_VWTq-88?KfReo~S{LWolu zCuM@}KMY366>X0L zSJWj*z-yY|F`Cu8qX3!%mr3yY@LTgUBz2*Ub~E^&*;2PNkvLuLlc`HB6$7UyppO!u zDy-#$;9a6m_G9+%AmxtRNzf!%1ZM7Aq8SdV2`i%gr?n-sG6#W*iSLZ;2P@^k4T1|x zCIQlJFPxg2n-scR3%d5pB3F4I#zJp5=Z;9HK9aVLw*d9=*XUE@S6b4#GT@x6YG{CY`XE~*?&2%hzp6W zZPk$oK<<4jR$W><2!Y6H1krt_)J@IsO!o~6yrEa3b@6i)JQZRuy{r@^^O|pl zZ!`n%^1`<4mn_Fq>VC90caitzhzgA|)><4P{o0&KDHPRr-s^9H-;hN2+MsB4$zjM< zm#rG*fAPtv{Q#w~vE>7)&xfAbbI*i=bw*+Q9Be7Fd&+PuEeETpVPs%x<-OI z7t&@wmJ2D6)sx@F*{pPmXpG_i61{Oe)|^#gjn7?OXsc|ST=bSvBb^Z9vBP^FbN2$K zf3nz*aid(Zg6A29CC8GGK#_{aVLgrBoU<8{-AqiD*GkXMX;3i99~=r5A+WCeEcSqR z$A{0@!b|rT{Fwus?S)5%f*yYyfb4a08+;d>MLKZzdD*slEMeYF^D?JLeue1Gn$`?D z*ey@NWJKkx|907QsI&Dg>+Nl-64}B;(w}d_eH9RUzJiCA zw@EsL?9@5^v>0JI4LkWJ={7Hf>`|60?4Hwm**AK}B+=MD(PQS({skwB;cdR#s;GNL zH?oJ{faUeg^iZqCud19onN(vvwS9HZtY#r~J>~S{8A%~; zag~IfKn@JKZ%Kvh7O^aaVn0|Bm+{XwA_$l=&E5-OHvhRhhvXFb&W9WQP2~AIfz>5i zi+xeE5{SKwn@AG^__$x3$ik#DCgjF1Y3{V5qEl1P`yKx=xcjbWs{qu z?dcsCX*F%dl@Lgl(iCM*N62gmlf6=P!0suZvQv7_O4@mt@54k)%(Rk~jby!UGjIW9 zCrGMV{k(O*H=BtfKqJ#6@E~v{s#|Phy!~GhX-DFmzBNAim@w*a`D?!+cRj#Pu`t&G z{KSKOWjun1-;1dTE&0b(u}W$Qazll-;X@T$rr>=bUZk;Ab!6@+3{oMt{JFqLXOiJv zup)~r?rD=Fn+ z=s$Akku1;)w3ONo4;`3t4>nNis2JH7l%TSBnlbzJRh^E-A?bQLo&$Lkn&nwt35D?V zTL>gabRKC}tPcC3%Pms}8BgTXJ`L^*<>=ddvHCkF-q^8`>03Kx2nAF@8nLqfg42Z% zI*H&S#eG%t$IH?taxtYTj_ONWZ#;?6q-A00d5p`d9ZO5tcXLF!dWFV{#PYGm%~5*Z zzf-+O0HB=l9Cbus|KZ(_+7I@rGq!+loAIC-R;xrV>1=j755G(cooPb~@JOTx;_8nM z3J6Gff$kr*fPC;z`V z=+geik3=HFv^{sStQa}yPM74DA~>3z=pqhYjyC}#*#+&`mPm2c&5b+?kCVssjgJ|6 zgJ^A@f=>7{pw=d}qOMvQ_rX45^4&urWoIR~7gDgS%1TLT0q!3OM<}jF)*JrH#}G|N zAV$9hLuN2!pWq3r0l)NK*y{*QQ?APg*#3zOYi}SBD;@i6o2(YbinkfO7E<*6O&;m6 ztVAGS?Czh#@VE(Ag0>#m`K1lgo=ApastQf>(D)jlOzDk#5JYV!_HE$1eyeuCdpjA@ zb?MgB7Vn2Xr#m};W{_);8%j{rSnvlBiW(=qT6$-v=`DOc%L`{SoEI)o%7il*>Kp|~ zJH*P)4Gp~CBwfy)oI9we-6JV0Uz-DGfB0w^edi1&eHb$#^3cUd==fK>}(x=!^hSiK7S|l!``0*MzDy7R~1S8CvXt1EKdASf0 zLDR$UR^Y^gQq^+G<%GKB`8oTiMh&jd-f#V`&4_E4JGHY=I3RTXM!E6vx<3d-T2A+)l} zGsm_UFR3>SaGVU7%fz!p74i7&C`r_0_h+wN@8%ohmeXa=gqFml*^0+w1?MpXK+O|b z{>+`*{<6Vxah*UUs29|qC93OC%f;$4nKHM1uBf7q54E34<~G%mo-ck1e36vkR=J^} z%zC^{S;Ypu`5xkZ3BnX257(DvVVfSf+uroLLkyi1Mk`oXR&V){ZanpcSlqIp;H4^7 zF&z5`6y0B1{LygoSx$W@S`iN5m5`pRKb(M9!SZEPibWyO% zjg~vw62zLjpbt6IF7ztJj}WE$OUd5pscw^ItqHsb&9Ye*Q3 zSU>spv!(uz>0<=!=5xNyFHDjA!MTho`!5u?l}%=!vM?4MUR$xOp$QH?EBLUtzJzp? z1>bxHYTga~Qy8x2@6#Q-78-rlmbT}!N_tw6t)RwDjNM^bW(3utx}gC{!%hN^T*U+G;(1*)(5Ta8F&i#-xzEQgYkUDe&s#eFXx)r z({sFbw&WPzRZSoklhdveDwys|75+fu1H(p&zP%!wu$@{Rm(x|}8AsEGoS%}43+T^` z#ZCHV$g&^$!dSO(tJ7|2uz(@=oskAcy3W_dIGL@B1^7II66_6ZxuE!gd0ru=qI$LZ z+Jd_a;JZPk$mLiN`(HQmt5Y0?VX#4LX8na=fV-6q@YAaK<)%|^X>*4uc1LGi8ccsgbtQ3FR|HBO{*vfG&}NNT zak7qAw4buz`eUAoAbTTV`FD#h_NR!@RBX7ygi)PU@}8y6#@Xe6F26@l^;Y-@yQJ%$ zvCa0Jza@0#Ax#qrI#)X3=4whZ38M_$&&}nLm)(i&Vp4l)$Fp7sm@B|^-d4MNVwk6A zjr{U81cobJKz#6o_~4TZ>Fb5G=csg`d4T*|+Q@aFAq0#kXZz+uZ+F$zl9goZ%#U#g|8xiu1C$_(veq(QIN$G^hSHk*b)dX9C zLeHa3l^n$N&kbGJhLuIKBfwM#dLYq=La|*YKDv-DPKj!m%3#?HK-pV=WFU)Q#wl#0 zf%_0?0ye|UAd(rMgT&bf(`VrMOm(a@Vdug@G@aV3FE-kS%Gd@hcg>{qSRCX~a zx2vEVjl{bhS2JFFM6C#7l2;F&Mck2-Qk>c>V``-e0p-{x;|Nh$8( zcic4dy@P@PbR66QkTg5fKDn};2RHf?6%gk4g4lt6Gt6k(( zmVu%gzt!T{RP{Uild?~bB()n?KmOmV&qTOcld0ilO0=9J;*HxFt5tISbwg&eU2yw2 z^)gO>Uf5h%1m&Us73do3`=zdXvEHThJeULygz#AJbbts7Y^L+iKJFW4)cm!GoqY@M z&#m%jsm`N`r^#6Haq}d3gz)pQBaq!m9>ocKg!Q!%m4rY literal 0 HcmV?d00001 diff --git a/assets/osome.svg b/assets/osome.svg new file mode 100644 index 0000000..d99431c --- /dev/null +++ b/assets/osome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/anyspec-next.md b/docs/anyspec-next.md new file mode 100644 index 0000000..69de2ee --- /dev/null +++ b/docs/anyspec-next.md @@ -0,0 +1,5 @@ +# What will be deleted in v2 + +* omitting fields from model +* enum vaues started by + or - +* enum values divided by spaces \ No newline at end of file diff --git a/readme.md b/readme.md index 1e1382b..0f7eb3a 100644 --- a/readme.md +++ b/readme.md @@ -1,91 +1,148 @@ -[](https://astexplorer.net/) +# anyspec [![codecov](https://codecov.io/gh/frolovdev/anyspec/branch/master/graph/badge.svg?token=8D8S09PRQI)](https://codecov.io/gh/frolovdev/anyspec) -## WIP, I call you when we are be ready +Anyspec is a [DSL (Domain Specific Language)](https://en.wikipedia.org/wiki/Domain-specific_language) for writing API specs with main compilation target to [Openapi (swagger)](https://swagger.io/specification/). -[Main link](https://excalidraw.com/#json=4790454524575744,zoP_ISTzjIbi1HhB6ErtWw) +The main problem we are trying to solve is the verbosity of open API. -## TODO +* **Write less code** - get rid of boileprate in your daily routine. +* **Enforce best practices** - use predefined or write your own rules for specs. +* **Prettify (WIP)** - format your code without pain. +* **Compilation (WIP)** - the result json fully compatible with openapi specification. -- [x] write a visitor tests -- [x] write a base validator layer -- [ ] create cli -- [ ] After creating enum /Users/andreyfrolov/Documents/osome/anyspec/src/visitor.test.ts:538 +

+ + + + + + +
Built by 2 engineers for Osome with love ❤️ + +
-- [ ] After creating endpoints add similar case /Users/andreyfrolov/Documents/osome/anyspec/src/visitor.test.ts:538 -- [ ] lear how to visit in parallel +[We are hiring](https://osome.com/careers/positions/) +## Watch in action -### Parser endpoints - - - -### Validator - -- [] split up base validation and schema validation (sdl) - - -https://cuelang.org/docs/ - - - -https://tree-sitter.github.io/tree-sitter/ -https://chevrotain.io/ - -### IDEAS - -Генерация клиента для мобилы - - -### - - - -https://youtu.be/TeZqKnC2gvA - - - - -# Чего не должно быть во второй версии - -* удаление полей из модели -* енамы и строки начинающеся с символа - или + -* значения енамов через пробелы - - -# Чего делать во второй версии - - - -delete $TSFixMe - -delete $Maybe +Before +``` -Allow to describe lambdas +// **Some description** +@token POST /documents DocumentNew + => { document: Document } +DocumentNew { + name: s, +} +DocumentNew { + id: i, + name: s, +} +``` -https://swagger.io/docs/specification/2-0/describing-parameters/ +After + +```json +{ + "swagger": "2.0", + "info": { + "title": "Test API", + "version": "{{version}}" + }, + "host": "{{host}}", + "basePath": "/api/v2", + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "token": { + "name": "X-Access-Token", + "type": "apiKey", + "in": "header" + } + }, + "paths": { + "/documents": { + "post": { + "summary": "**Some description**", + "description": "**Some description**", + "operationId": "POST--documents", + "responses": { + "200": { + "description": "", + "schema": { + "type": "object", + "properties": { + "document": { + "$ref": "#/definitions/Document" + } + }, + "required": [ + "document" + ] + } + } + }, + "security": [ + { + "token": [] + } + ], + "parameters": [ + { + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DocumentNew" + }, + "in": "body" + } + ] + } + } + }, + "definitions": { + "DocumentNew": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + } + } +} +``` +## List of rules -# Why tinyspec is bad +[Watch docs](https://frolovdev.github.io/anyspec/modules.html) -Don't throw an error in this case +## Inspiration section -``` -`/industries`: - $L /industries ?branch? +The main idea of library - DSL on top of openapi comes from [tinyspec](https://github.com/Ajaxy/tinyspec). The syntax constructions comes from tinyspec too. -``` +Also authors were inspired and use a lot of findings and ideas from: -No consistency in enums +* [Graphqljs implementation](https://github.com/graphql/graphql-js) +* [python lexer and parser](https://github.com/python) -``` -A ( a | b ) - -A ( "a" | "b" ) +## License -A ( "a" | "b" | ) - -``` +The code in this project is released under the [MIT License](LICENSE). -To much dsl like $CRUDL +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Ffrolovdev%2Fanyspec.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Ffrolovdev%2Fanyspec?ref=badge_large) From 39841adbe06f16ae9ad1c5f5699b61f307814ea6 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:16:31 +0400 Subject: [PATCH 62/70] update cli --- src/cli/anyspec.config.js | 15 ++ src/cli/autoformat.ts | 65 +++++++ src/cli/bin.ts | 175 +++++++++++++---- src/cli/config.ts | 40 ++++ src/cli/package-lock.json | 387 +++++++++++++++++++++++++++++++++++++- src/cli/package.json | 6 +- 6 files changed, 650 insertions(+), 38 deletions(-) create mode 100644 src/cli/anyspec.config.js create mode 100644 src/cli/autoformat.ts create mode 100644 src/cli/config.ts diff --git a/src/cli/anyspec.config.js b/src/cli/anyspec.config.js new file mode 100644 index 0000000..71ace5b --- /dev/null +++ b/src/cli/anyspec.config.js @@ -0,0 +1,15 @@ +module.exports = { + rules: { + 'base/known-type-names': 'error', + 'base/no-explicit-string-rule': 'off', + 'base/endpoints-known-http-verbs': 'off', + 'recommended/endpoints-body-parameter-postfix': 'off', + 'recommended/endpoints-query-postfix': 'off', + 'recommended/endpoints-response-postfix': 'off', + 'recommended/body-model-name': 'off', + 'recommended/filter-postfix': 'off', + 'recommended/model-body-field-postfix': 'off', + 'recommended/postfix-for-create-models': 'off', + 'recommended/postfix-for-update-models': 'off', + }, +}; diff --git a/src/cli/autoformat.ts b/src/cli/autoformat.ts new file mode 100644 index 0000000..bd5642c --- /dev/null +++ b/src/cli/autoformat.ts @@ -0,0 +1,65 @@ +#!/usr/bin/env node + +import { Command } from 'commander'; +import { default as getPath } from 'path'; +import { readFile, writeFile } from 'fs/promises'; +import { parse, Source } from '../language'; +import { printModels } from '../printer'; + +async function main() { + const program = new Command(); + program.arguments(''); + + program.parse(); + + try { + const { args } = program; + + const argPaths = args.map((arg) => getPath.resolve(process.cwd(), arg)); + + const argumentPath = argPaths[0]; + + const sources = await mapPathsToSources(argumentPath); + + const parsed = getParsed(sources); + + const printed = printModels(parsed); + + await writeFile(argumentPath, printed); + } catch (e) { + console.error(e); + } +} + +main(); + +// private + +function isEndpoint(val: string) { + return val.match(/\.endpoints\.tinyspec$/) !== null; +} + +function isModel(val: string) { + return val.match(/\.models\.tinyspec$/) !== null; +} + +async function mapPathsToSources(paths: string): Promise { + const specBodyFiles = await readFile(paths, { encoding: 'utf-8' }); + if (isEndpoint(paths)) { + return new Source({ body: specBodyFiles, sourceType: 'endpoints', name: specBodyFiles }); + } + + if (isModel(paths)) { + return new Source({ body: specBodyFiles, sourceType: 'models', name: specBodyFiles }); + } + + throw new Error(`File doesn't contain .endpoints.tinyspec or .models.tinyspec extension`); +} + +function getParsed(source: Source) { + try { + return parse(source); + } catch (error) { + throw error; + } +} diff --git a/src/cli/bin.ts b/src/cli/bin.ts index 3db78d4..baf74ba 100644 --- a/src/cli/bin.ts +++ b/src/cli/bin.ts @@ -1,45 +1,124 @@ #!/usr/bin/env node import { Command } from 'commander'; -import { default as getPath } from 'path'; +import { default as nodePath } from 'path'; import { readFile } from 'fs/promises'; -import { parse, Source, ASTNodeKind, TypeDefinitionNode } from '../language'; +import { parse, Source, DocumentNode } from '../language'; import { AnySpecSchema } from '../runtypes'; -import { validate, baseRules } from '../validation'; +import { validate, rulesMap } from '../validation'; import { AnySpecError, printError } from '../error'; import { sync as glob } from 'globby'; import ora from 'ora'; - -function isEndpoint(val: string) { - return val.includes('.endpoints.'); -} - -function isModel(val: string) { - return val.includes('.models.'); -} +import { concatAST } from '../language/concatAST'; +import { parseConfig, readConfig } from './config'; async function main() { const program = new Command(); + program - .requiredOption('-o, --out-dir ', 'path to a directory for a generated SDK') - .arguments(''); + .option('-o, --outDir ', 'path to a directory for a generated openapi') + .option('-ns, --namespaces [namespaces...]', 'array of existed namespaces') + .option( + '-cns, --commonNamespace ', + 'name of common namespace where shared definitions stored', + 'common', + ) + .option('-c, --config ', 'path to config file') + .arguments(''); program.parse(); const { args } = program; - const argPaths = args.map((arg) => getPath.resolve(process.cwd(), arg)); + const options = program.opts() as { + commonNamespace: string; + namespaces?: string[]; + outDir?: string; + config?: string; + }; + + const { namespaces, outDir, commonNamespace, config: configPath } = options; + + if (!namespaces) { + throw new Error('please provide namespaces'); + } + + const argPaths = args.map((arg) => nodePath.resolve(process.cwd(), arg)); const argumentPath = argPaths[0]; const processingSpinner = ora(`Processing spec: ${argumentPath}`).start(); const specFilePaths = glob(`${argumentPath}/**/*.tinyspec`); + try { + const sources = await mapPathsToSources(specFilePaths); + const { res: config, err: configErr } = readConfig(configPath); + if (configErr || !config) { + console.error(configErr); + processingSpinner.fail(); + return; + } + + const groupedSources = groupSourcesByNamespaces({ sources, commonNamespace, namespaces }); + + const { groupedParsedDocuments, parsingErrors } = getGroupedDocuments( + groupedSources, + (error: Error) => { + console.error('Unknown error during parsing', error); + processingSpinner.fail(); + process.exit(1); + }, + ); + + if (parsingErrors.length > 0) { + for (const e of parsingErrors) { + console.error(printCliError(printError(e))); + } + + processingSpinner.fail(); + return; + } + + const { enabledRules, invalidRules } = parseConfig(config); + + const enabledRulesFns = enabledRules.map((rule) => rulesMap[rule]); + const unitedASTs = groupedParsedDocuments.map((documents) => concatAST(documents)); + + const schemas = unitedASTs.map((ast) => new AnySpecSchema({ ast })); + const errors = schemas.map((s, index) => validate(s, unitedASTs[index], enabledRulesFns)); + + errors.flat().forEach((e) => console.error(printCliError(printError(e)))); + invalidRules.forEach((e) => console.error(printCliError(`Invalid Rule: ${e}`))); + + processingSpinner.succeed(); + } catch (e) { + console.error(e); + processingSpinner.fail(); + } +} + +main(); + +// private + +function isEndpoint(val: string) { + return val.match(/\.endpoints\.tinyspec$/) !== null; +} + +function isModel(val: string) { + return val.match(/\.models\.tinyspec$/) !== null; +} + +function printCliError(error: string) { + return `${error}\n\n------------------------------------------------------------------------------------------\n`; +} + +async function mapPathsToSources(paths: string[]): Promise { const specBodyFiles = await Promise.all( - specFilePaths.map((file) => readFile(file, { encoding: 'utf-8' })), + paths.map((file) => readFile(file, { encoding: 'utf-8' })), ); - const sources = specFilePaths.map((path, i) => { + const sources = paths.map((path, i) => { if (isEndpoint(path)) { return new Source({ body: specBodyFiles[i], sourceType: 'endpoints', name: path }); } @@ -51,28 +130,54 @@ async function main() { throw new Error(`File doesn't contain .endpoints.tinyspec or .models.tinyspec extension`); }); - try { - const resultDefinitions: TypeDefinitionNode[] = []; - for (const source of sources) { - const doc = parse(source); + return sources; +} - resultDefinitions.push(...doc.definitions); - } +function groupSourcesByNamespaces({ + sources, + namespaces, + commonNamespace, +}: { + sources: Source[]; + namespaces: string[]; + commonNamespace: string; +}): Source[][] { + const commonRegexp = new RegExp(`\.${commonNamespace}\.(models|endpoints)\.tinyspec$`); + + const namespacesRegexps = namespaces.map( + (n) => new RegExp(`\.${n}\.(models|endpoints)\.tinyspec$`), + ); + const commonSources = sources.filter((s) => commonRegexp.test(s.name)); - const doc = { kind: ASTNodeKind.DOCUMENT, definitions: resultDefinitions }; - const schema = new AnySpecSchema({ ast: doc }); + const namespaceSources = namespacesRegexps + .map((regexp) => sources.filter((s) => regexp.test(s.name))) + .filter((sources) => sources.length > 0); - const errors = validate(schema, doc, baseRules); - errors.forEach((e) => console.log(printError(e))); + return namespaceSources.map((sourceArray) => sourceArray.concat(commonSources)); +} - processingSpinner.succeed(); - } catch (error) { - if (error instanceof AnySpecError) { - console.log(printError(error)); - } +function getGroupedDocuments(groupedSources: Source[][], errCb: (err: Error) => void) { + const groupedParsedDocuments: DocumentNode[][] = []; + + const parsingErrors: AnySpecError[] = []; + groupedSources.forEach((gS) => { + const parsedDocuments: DocumentNode[] = []; + + gS.forEach((s) => { + try { + const doc = parse(s); + parsedDocuments.push(doc); + } catch (error) { + if (error instanceof AnySpecError) { + parsingErrors.push(error); + } else { + errCb(error); + } + } + }); + + groupedParsedDocuments.push(parsedDocuments); + }); - processingSpinner.fail(`Failed to process document`); - } + return { groupedParsedDocuments, parsingErrors }; } - -main(); diff --git a/src/cli/config.ts b/src/cli/config.ts new file mode 100644 index 0000000..c1b65e3 --- /dev/null +++ b/src/cli/config.ts @@ -0,0 +1,40 @@ +import { rulesMap } from '../validation'; +import { default as nodePath } from 'path'; + +type Config = { rules: Record }; + +type ConfigRes = { res: Config; err: null } | { err: string; res: null }; + +const isConfig = (configFile: unknown): configFile is Config => { + return (configFile as Config).rules !== undefined; +}; + +export function readConfig(path?: string): ConfigRes { + const resolvedPath = resolveConfigPath(path); + try { + const configFile = require(resolvedPath); + + if (!isConfig(configFile)) { + return { err: `Invalid config file`, res: null }; + } + return { res: configFile, err: null }; + } catch (e) { + return { err: `Can't find anyspec.config.js in ${resolvedPath}`, res: null }; + } +} + +export function parseConfig({ rules }: Config): { enabledRules: string[]; invalidRules: string[] } { + const existingRules = Object.keys(rulesMap); + const enabled = Object.keys(rules).filter((key) => rules[key] === 'error'); + const invalidRules = enabled.filter((rule) => !existingRules.includes(rule)); + const validRules = enabled.filter((rule) => existingRules.includes(rule)); + return { enabledRules: validRules, invalidRules }; +} + +function resolveConfigPath(path?: string) { + if (path) { + return nodePath.isAbsolute(path) ? path : nodePath.resolve(process.cwd(), path); + } + + return nodePath.resolve(process.cwd(), 'anyspec.config'); +} diff --git a/src/cli/package-lock.json b/src/cli/package-lock.json index a1bf1d9..0e33657 100644 --- a/src/cli/package-lock.json +++ b/src/cli/package-lock.json @@ -1,13 +1,398 @@ { "name": "@anyspec/cli", - "version": "0.0.1-rc.8", + "version": "0.0.1-rc.17", "lockfileVersion": 1, "requires": true, "dependencies": { + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } } } } diff --git a/src/cli/package.json b/src/cli/package.json index 375ca84..fb90fba 100644 --- a/src/cli/package.json +++ b/src/cli/package.json @@ -1,6 +1,6 @@ { "name": "@anyspec/cli", - "version": "0.0.1-rc.8", + "version": "0.0.1-rc.17", "author": { "name": "frolovdev", "url": "https://github.com/frolovdev" @@ -35,7 +35,9 @@ "registry": "https://registry.npmjs.org" }, "dependencies": { - "commander": "^7.2.0" + "commander": "^7.2.0", + "globby": "^11.0.4", + "ora": "^5.4.1" }, "engines": { "node": ">=10.8.x" From 8a485e653d7ef5dc58ac22300cd9c99a194d1e34 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:17:38 +0400 Subject: [PATCH 63/70] update language --- src/index.ts | 2 + src/language/__tests__/concatAST.test.ts | 51 ++++ .../__tests__}/lexerEndpoints.test.ts | 2 +- .../__tests__}/lexerModels.test.ts | 29 ++- .../__tests__}/parserEndpoints.test.ts | 241 +++++++++++++++++- .../__tests__}/parserEndpointsErrors.test.ts | 16 +- .../__tests__}/parserEndpointsUrl.test.ts | 60 ++++- .../__tests__}/parserModel.test.ts | 107 +++++++- src/{ => language/__tests__}/source.test.ts | 2 +- src/language/ast.ts | 4 +- src/language/concatAST.ts | 14 + src/language/lexer.ts | 1 + src/language/parser.ts | 68 +++-- src/language/predicates.ts | 13 +- src/printLocation.ts | 67 ----- src/visitor.ts | 2 + 16 files changed, 573 insertions(+), 106 deletions(-) create mode 100644 src/index.ts create mode 100644 src/language/__tests__/concatAST.test.ts rename src/{ => language/__tests__}/lexerEndpoints.test.ts (99%) rename src/{ => language/__tests__}/lexerModels.test.ts (95%) rename src/{ => language/__tests__}/parserEndpoints.test.ts (85%) rename src/{ => language/__tests__}/parserEndpointsErrors.test.ts (89%) rename src/{ => language/__tests__}/parserEndpointsUrl.test.ts (90%) rename src/{ => language/__tests__}/parserModel.test.ts (95%) rename src/{ => language/__tests__}/source.test.ts (97%) create mode 100644 src/language/concatAST.ts delete mode 100644 src/printLocation.ts diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..eed8e5a --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from './error/printLocation'; +export * from './visitor'; diff --git a/src/language/__tests__/concatAST.test.ts b/src/language/__tests__/concatAST.test.ts new file mode 100644 index 0000000..dc693ed --- /dev/null +++ b/src/language/__tests__/concatAST.test.ts @@ -0,0 +1,51 @@ +import { parse } from '../../language/parser'; +import { Source } from '../../language/source'; +import { ASTNodeKind } from '../ast'; + +import { concatAST } from '../concatAST'; + +describe('concatAST', () => { + it('concatenates two ASTs together', () => { + const sourceA = new Source({ + body: ` + Lel {} + `, + }); + + const sourceB = new Source({ + body: ` + Kek {} + `, + }); + + const astA = parse(sourceA); + const astB = parse(sourceB); + const astC = concatAST([astA, astB]); + + expect(astC).toMatchObject({ + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'Lel', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + extendsModels: [], + }, + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'Kek', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + extendsModels: [], + }, + ], + }); + }); +}); diff --git a/src/lexerEndpoints.test.ts b/src/language/__tests__/lexerEndpoints.test.ts similarity index 99% rename from src/lexerEndpoints.test.ts rename to src/language/__tests__/lexerEndpoints.test.ts index 39aa218..7d6cb78 100644 --- a/src/lexerEndpoints.test.ts +++ b/src/language/__tests__/lexerEndpoints.test.ts @@ -1,4 +1,4 @@ -import { TokenKind, Lexer, Source } from './language'; +import { TokenKind, Lexer, Source } from '..'; const getFullTokenList = (source: Source) => { const lexer = new Lexer(source); diff --git a/src/lexerModels.test.ts b/src/language/__tests__/lexerModels.test.ts similarity index 95% rename from src/lexerModels.test.ts rename to src/language/__tests__/lexerModels.test.ts index 1d56309..5890b36 100644 --- a/src/lexerModels.test.ts +++ b/src/language/__tests__/lexerModels.test.ts @@ -1,6 +1,6 @@ -import { Source, Lexer, isPunctuatorTokenKind, Token, TokenKind } from './language'; +import { Source, Lexer, isPunctuatorTokenKind, Token, TokenKind } from '../../language'; import { inspect } from 'util'; -import { dedent } from './__testsUtils__/dedent'; +import { dedent } from '../../__testsUtils__/dedent'; function lexFirst(str: string) { const lexer = new Lexer(new Source({ body: str })); @@ -580,12 +580,31 @@ describe('isPunctuatorTokenKind', () => { }); describe('lexer understands enums', () => { - it('lexer understand normal enum', () => { - const enumString = new Source({ body: `A (f | b)` }); + it('lexer understand normal enum with description', () => { + const enumString = new Source({ + body: `// description + A (f | b)`, + }); + + const tokens = getFullTokenList(enumString); + + expect(tokens).toEqual(['Description', 'A', '(', 'f', '|', 'b', ')']); + }); + + it('lexer understand normal enum with ":"', () => { + const enumString = new Source({ body: `A (f:f | b:b )` }); + + const tokens = getFullTokenList(enumString); + + expect(tokens).toEqual(['A', '(', 'f:f', '|', 'b:b', ')']); + }); + + it('lexer understand normal enum with ":" and ""', () => { + const enumString = new Source({ body: `A ("f:f" | "b:b" )` }); const tokens = getFullTokenList(enumString); - expect(tokens).toEqual(['A', '(', 'f', '|', 'b', ')']); + expect(tokens).toEqual(['A', '(', 'f:f', '|', 'b:b', ')']); }); it('lexer understand enum with spaces and symbols', () => { diff --git a/src/parserEndpoints.test.ts b/src/language/__tests__/parserEndpoints.test.ts similarity index 85% rename from src/parserEndpoints.test.ts rename to src/language/__tests__/parserEndpoints.test.ts index 352846d..a1c6026 100644 --- a/src/parserEndpoints.test.ts +++ b/src/language/__tests__/parserEndpoints.test.ts @@ -1,5 +1,5 @@ -import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from './language'; -import { toJSONDeep, log } from './utils'; +import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from '../../language'; +import { toJSONDeep, log } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); @@ -120,6 +120,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -170,6 +177,13 @@ GET /endpoint }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -232,6 +246,13 @@ POST /endpoint {} }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -327,6 +348,13 @@ POST /endpoint {name: s, surname} }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -403,6 +431,13 @@ POST /endpoint (f | b |) }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -464,6 +499,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -523,6 +565,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -615,6 +664,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, @@ -689,7 +745,7 @@ POST /endpoint RequestModel responses: [ { kind: ASTNodeKind.ENDPOINT_RESPONSE, - type: { + status: { kind: ASTNodeKind.ENDPOINT_STATUS_CODE, name: { kind: ASTNodeKind.NAME, @@ -754,6 +810,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -830,10 +893,17 @@ POST /endpoint RequestModel value: 'ResponseModel', }, }, + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, }, { kind: ASTNodeKind.ENDPOINT_RESPONSE, - type: { + status: { kind: ASTNodeKind.ENDPOINT_STATUS_CODE, name: { kind: ASTNodeKind.NAME, @@ -842,6 +912,13 @@ POST /endpoint RequestModel }, }, { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -903,6 +980,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -969,6 +1053,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -993,6 +1084,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1060,6 +1158,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1090,6 +1195,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -1153,6 +1265,13 @@ HEAD /pechkin/mandrill/event }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1182,6 +1301,13 @@ HEAD /pechkin/mandrill/event }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -1245,6 +1371,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1308,6 +1441,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1377,6 +1517,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1408,6 +1555,13 @@ POST /endpoint RequestModel description: { kind: ASTNodeKind.DESCRIPTION, value: 'lol\nkek' }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { strict: false, @@ -1471,6 +1625,13 @@ POST /endpoint RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -1498,4 +1659,76 @@ POST /endpoint RequestModel expect(toJSONDeep(ast)).toEqual(expectedAST); }); }); + + it('can parse endpoint that return status and model', () => { + const sourceString = ` +\`/analytics_events\`: + POST /endpoint RequestModel + => 422 ResponseModel +`; + const expectedAST: ASTNode = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + kind: ASTNodeKind.ENDPOINT_NAMESPACE_TYPE_DEFINITION, + tag: { kind: ASTNodeKind.NAME, value: '/analytics_events' }, + endpoints: [ + { + kind: ASTNodeKind.ENDPOINT_TYPE_DEFINITION, + verb: { + kind: ASTNodeKind.ENDPOINT_VERB, + name: { kind: ASTNodeKind.NAME, value: 'POST' }, + }, + description: undefined, + url: { + kind: ASTNodeKind.ENDPOINT_URL, + name: { kind: ASTNodeKind.NAME, value: '/endpoint' }, + parameters: [ + { + kind: ASTNodeKind.ENDPOINT_PARAMETER, + type: { + kind: ASTNodeKind.ENDPOINT_PARAMETER_BODY, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'RequestModel' }, + }, + }, + }, + ], + }, + responses: [ + { + kind: ASTNodeKind.ENDPOINT_RESPONSE, + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '422', + }, + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'ResponseModel', + }, + }, + description: undefined, + }, + ], + }, + ], + }, + ], + }; + + const source = new Source({ + body: sourceString, + sourceType: 'endpoints', + }); + + const ast = parse(source); + + expect(toJSONDeep(ast)).toEqual(expectedAST); + }); }); diff --git a/src/parserEndpointsErrors.test.ts b/src/language/__tests__/parserEndpointsErrors.test.ts similarity index 89% rename from src/parserEndpointsErrors.test.ts rename to src/language/__tests__/parserEndpointsErrors.test.ts index d98479f..84a991e 100644 --- a/src/parserEndpointsErrors.test.ts +++ b/src/language/__tests__/parserEndpointsErrors.test.ts @@ -1,4 +1,4 @@ -import { parse as defaultParse, Source } from './language'; +import { parse as defaultParse, Source } from '../'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); @@ -135,6 +135,20 @@ GET /examples?sort:i sourceType: 'endpoints', }); + expect(() => parse(source)).toThrow('Syntax Error: Not supported inline query'); + }); + it('endpoint with inline enums are not supported v2', () => { + const sourceString = ` +GET /examples?Sort:i + => {examples: Example[], totalCount?: i} + => 404 +`; + + const source = new Source({ + body: sourceString, + sourceType: 'endpoints', + }); + expect(() => parse(source)).toThrow('Syntax Error: Not supported inline query'); }); }); diff --git a/src/parserEndpointsUrl.test.ts b/src/language/__tests__/parserEndpointsUrl.test.ts similarity index 90% rename from src/parserEndpointsUrl.test.ts rename to src/language/__tests__/parserEndpointsUrl.test.ts index 473b4d4..3a03358 100644 --- a/src/parserEndpointsUrl.test.ts +++ b/src/language/__tests__/parserEndpointsUrl.test.ts @@ -1,5 +1,5 @@ -import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from './language'; -import { toJSONDeep } from './utils'; +import { ASTNode, ASTNodeKind, parse as defaultParse, Source } from '../'; +import { toJSONDeep } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); @@ -40,6 +40,13 @@ POST /endpoint?RequestQuery }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -111,6 +118,13 @@ POST /endpoint?RequestQuery RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -172,6 +186,13 @@ POST /endpoint?RequestQuery }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -233,6 +254,13 @@ POST /endpoint/:entryType }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -304,6 +332,13 @@ POST /endpoint/:entryType/:entryType2 }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -375,6 +410,13 @@ POST /endpoint/:entryType/api/v2/:entryType2 }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -451,6 +493,13 @@ POST /endpoint/:entryType:a/api/v2/:entryType2:b/name }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, @@ -547,6 +596,13 @@ POST /endpoint/:entryType:a/api/v2/:entryType2:b/name?RequestQuery RequestModel }, responses: [ { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, kind: ASTNodeKind.ENDPOINT_RESPONSE, type: { kind: ASTNodeKind.NAMED_TYPE, diff --git a/src/parserModel.test.ts b/src/language/__tests__/parserModel.test.ts similarity index 95% rename from src/parserModel.test.ts rename to src/language/__tests__/parserModel.test.ts index e3546f9..99e61e9 100644 --- a/src/parserModel.test.ts +++ b/src/language/__tests__/parserModel.test.ts @@ -5,9 +5,9 @@ import { ModelTypeDefinitionNode, parse as defaultParse, Source, -} from './language'; -import { AnySpecError } from './error/AnySpecError'; -import { toJSONDeep, log } from './utils'; +} from '../'; +import { AnySpecError } from '../../error/AnySpecError'; +import { toJSONDeep, log } from '../../utils'; const parse = (source: string | Source) => defaultParse(source, { noLocation: true }); @@ -1188,7 +1188,7 @@ describe(__filename, () => { }); }); - it('should parse strict nested types coorectly', () => { + it('should parse strict nested types correctly', () => { const model = ` AcDocument < Kek, Lel !{ pathParameters: !{ @@ -1258,8 +1258,10 @@ describe(__filename, () => { }); describe('enum', () => { - it('correctly parse model with named enum', () => { + it('correctly parse model with named enum and descriptions', () => { const model = ` + // лул + // kek A ( f | b | ) @@ -1286,6 +1288,7 @@ describe(__filename, () => { kind: ASTNodeKind.NAME, value: 'A', }, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, kind: ASTNodeKind.ENUM_TYPE_DEFINITION, }; @@ -1334,6 +1337,82 @@ describe(__filename, () => { }); }); + it('correctly parse model with named enum with ":"', () => { + const model = ` + A ( + f:a:b | b:c:v | + ) + `; + + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f:a:b', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b:c:v', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const ast = parse(model); + expect(toJSONDeep(ast)).toEqual({ + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA], + }); + }); + + it('correctly parse model with named enum with ":" and " "', () => { + const model = ` + A ( + "f:a:b" | "b:c:v" | + ) + `; + + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f:a:b', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b:c:v', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const ast = parse(model); + expect(toJSONDeep(ast)).toEqual({ + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA], + }); + }); + it('correctly parse model that uses named enum', () => { const model = ` A ( @@ -1835,4 +1914,22 @@ describe(__filename, () => { ); }); }); + + describe('unexpected symbols', () => { + it('no unexpected symbols at enums definition', () => { + const enumString = ` + A = (b | c) + `; + + expect(() => parse(enumString)).toThrow('Syntax Error: Unexpected "="'); + }); + + it('no unexpected symbols at model definition', () => { + const enumString = ` + Model = {} + `; + + expect(() => parse(enumString)).toThrow('Syntax Error: Unexpected "="'); + }); + }); }); diff --git a/src/source.test.ts b/src/language/__tests__/source.test.ts similarity index 97% rename from src/source.test.ts rename to src/language/__tests__/source.test.ts index 7e55aaa..776c4a6 100644 --- a/src/source.test.ts +++ b/src/language/__tests__/source.test.ts @@ -1,4 +1,4 @@ -import { Source } from './language'; +import { Source } from '../../language'; describe('Source', () => { it('asserts that a body was provided', () => { diff --git a/src/language/ast.ts b/src/language/ast.ts index 33daa98..330e23e 100644 --- a/src/language/ast.ts +++ b/src/language/ast.ts @@ -183,7 +183,8 @@ export interface EndpointStatusCodeNode { } export interface EndpointResponseNode { readonly kind: `${ASTContextEndpoint}Response`; - readonly type: TypeNode | EndpointStatusCodeNode; + readonly type?: TypeNode; + readonly status: EndpointStatusCodeNode; readonly description?: DescriptionNode; readonly loc?: Location; } @@ -252,6 +253,7 @@ export interface EnumTypeDefinitionNode { readonly kind: 'EnumTypeDefinition'; readonly name: NameNode; readonly loc?: Location; + readonly description?: DescriptionNode; readonly values: ReadonlyArray; } diff --git a/src/language/concatAST.ts b/src/language/concatAST.ts new file mode 100644 index 0000000..41b8dab --- /dev/null +++ b/src/language/concatAST.ts @@ -0,0 +1,14 @@ +import { ASTNodeKind, DocumentNode, TypeDefinitionNode } from '../language/ast'; + +/** + * Provided a collection of ASTs, presumably each from different files, + * concatenate the ASTs together into batched AST, useful for validating many + * source files which together represent one conceptual application. + */ +export function concatAST(documents: ReadonlyArray): DocumentNode { + const definitions: Array = []; + for (const doc of documents) { + definitions.push(...doc.definitions); + } + return { kind: ASTNodeKind.DOCUMENT, definitions }; +} diff --git a/src/language/lexer.ts b/src/language/lexer.ts index 75b6a97..886e37d 100644 --- a/src/language/lexer.ts +++ b/src/language/lexer.ts @@ -572,6 +572,7 @@ function readNameInsideEnum( code === 36 || // $ code === 38 || // & code === 39 || // ' + code === 58 || // : code === 40 || // ( code === 41 || // ) code === 46 || // . diff --git a/src/language/parser.ts b/src/language/parser.ts index a435aea..0a6f54f 100644 --- a/src/language/parser.ts +++ b/src/language/parser.ts @@ -60,11 +60,18 @@ export class ModelParser { */ many(openKind: TokenKindEnum, parseFn: () => T, closeKind: TokenKindEnum): Array { this.expectToken(openKind); - + let count = 0; const nodes = []; do { const curResult = parseFn.call(this); - + count++; + if (count === 999999) { + throw syntaxError( + this.lexer.source, + this.lexer.token.end, + `Unexpected token or not closed block`, + ); + } nodes.push(curResult); } while (!this.expectOptionalToken(closeKind)); @@ -74,7 +81,16 @@ export class ModelParser { optionalMany(openKind: TokenKindEnum, parseFn: () => T, closeKind: TokenKindEnum): Array { if (this.expectOptionalToken(openKind)) { const nodes = []; + let count = 0; while (!this.expectOptionalToken(closeKind)) { + count++; + if (count === 999999) { + throw syntaxError( + this.lexer.source, + this.lexer.token.end, + `Unexpected token or not closed block`, + ); + } nodes.push(parseFn.call(this)); } @@ -160,7 +176,7 @@ export class ModelParser { parseDefinition(): TypeDefinitionNode { if (this.peek(TokenKind.DESCRIPTION)) { - return this.parseModelTypeDefinition(); + return this.parseTypeSystemDefinition(); } if (this.peek(TokenKind.NAME)) { @@ -177,6 +193,8 @@ export class ModelParser { } } + this.lexer.advance(); + throw this.unexpected(); } @@ -205,17 +223,20 @@ export class ModelParser { parseTypeSystemDefinition(): TypeDefinitionNode { // Many definitions begin with a description and require a lookahead. + const description = this.parseDescription(); const braces = this.lexer.lookahead(); switch (braces.kind) { case TokenKind.BRACE_L: - return this.parseModelTypeDefinition(); + return this.parseModelTypeDefinition(description); + case TokenKind.PAREN_L: + return this.parseEnumTypeDefinition(description); } throw this.unexpected(); } - parseEnumTypeDefinition(): EnumTypeDefinitionNode { + parseEnumTypeDefinition(description?: DescriptionNode): EnumTypeDefinitionNode { const start = this.lexer.token; const name = this.parseName(); const kind = ASTNodeKind.ENUM_TYPE_DEFINITION; @@ -225,12 +246,12 @@ export class ModelParser { kind, name, values, + description, }); } - parseModelTypeDefinition(): ModelTypeDefinitionNode { + parseModelTypeDefinition(description?: DescriptionNode): ModelTypeDefinitionNode { const start = this.lexer.token; - const description = this.parseDescription(); const name = this.parseName(); const extendsModels = this.parseExtendsModels(); @@ -341,6 +362,8 @@ export class ModelParser { }); } + // Name, (, { + parseTypeReference(): TypeNode { const startToken = this.lexer.token; @@ -502,9 +525,16 @@ export class EndpointsParser extends ModelParser { * parse status code (404, 202, etc) */ parseEndpointStatusCode(): EndpointStatusCodeNode { + const status = this.peek(TokenKind.NUMBER) + ? this.parseNumber() + : this.node(this.lexer.token, { + kind: ASTNodeKind.NAME, + value: '200', + }); + return this.node(this.lexer.token, { kind: ASTNodeKind.ENDPOINT_STATUS_CODE, - name: this.parseNumber(), + name: status, }); } @@ -520,19 +550,17 @@ export class EndpointsParser extends ModelParser { throw syntaxError(this.lexer.source, this.lexer.token.start, `incorrect or empty response`); } - if (this.peek(TokenKind.NUMBER)) { - return this.node(this.lexer.token, { - kind: ASTNodeKind.ENDPOINT_RESPONSE, - type: this.parseEndpointStatusCode(), - }); - } - - const type = this.parseTypeReference(); + const status = this.parseEndpointStatusCode(); + const type = + this.peek(TokenKind.NAME) || this.peek(TokenKind.BRACE_L) || this.peek(TokenKind.PAREN_L) + ? this.parseTypeReference() + : undefined; return this.node(this.lexer.token, { kind: ASTNodeKind.ENDPOINT_RESPONSE, - description, type, + status, + description, }); } @@ -587,7 +615,7 @@ export class EndpointsParser extends ModelParser { throw syntaxError(this.lexer.source, this.lexer.token.start, `incorrect or missed url`); } - if (url.value.includes('&')) { + if (url.value.includes('&') || url.value.includes(';') || url.value.includes('=')) { throw this.throwNoInlineQuery(); } @@ -630,6 +658,10 @@ export class EndpointsParser extends ModelParser { throw this.throwNoInlineQuery(); } + if (q.includes(':')) { + throw this.throwNoInlineQuery(); + } + return { kind: ASTNodeKind.ENDPOINT_PARAMETER_QUERY, type: this.node(this.lexer.token, { diff --git a/src/language/predicates.ts b/src/language/predicates.ts index 99cab42..b2fceaf 100644 --- a/src/language/predicates.ts +++ b/src/language/predicates.ts @@ -1,4 +1,9 @@ -import { ASTNode, ASTNodeKind, ModelDomainTypeDefinitionNode } from './ast'; +import { + ASTNode, + ASTNodeKind, + EndpointNamespaceTypeDefinitionNode, + ModelDomainTypeDefinitionNode, +} from './ast'; export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainTypeDefinitionNode { return ( @@ -6,3 +11,9 @@ export function isModelDomainDefinitionNode(node: ASTNode): node is ModelDomainT node.kind === ASTNodeKind.ENUM_TYPE_DEFINITION ); } + +export function isEndpointNamespaceTypeDefinitionNode( + node: ASTNode, +): node is EndpointNamespaceTypeDefinitionNode { + return node.kind === ASTNodeKind.ENDPOINT_NAMESPACE_TYPE_DEFINITION; +} diff --git a/src/printLocation.ts b/src/printLocation.ts deleted file mode 100644 index e3821fe..0000000 --- a/src/printLocation.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Source, Location, SourceLocation, getLocation } from './language'; - -/** - * Render a helpful description of the location in the EasySpec Source document. - */ -export function printLocation(location: Location): string { - return printSourceLocation(location.source, getLocation(location.source, location.start)); -} - -/** - * Render a helpful description of the location in the EasySpec Source document. - */ -export function printSourceLocation(source: Source, sourceLocation: SourceLocation): string { - const firstLineColumnOffset = source.locationOffset.column - 1; - const body = ''.padStart(firstLineColumnOffset) + source.body; - - const lineIndex = sourceLocation.line - 1; - const lineOffset = source.locationOffset.line - 1; - const lineNum = sourceLocation.line + lineOffset; - - const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0; - const columnNum = sourceLocation.column + columnOffset; - const locationStr = `${source.name}:${lineNum}:${columnNum}\n`; - - const lines = body.split(/\r\n|[\n\r]/g); - const locationLine = lines[lineIndex]; - - // Special case for minified documents - if (locationLine.length > 120) { - const subLineIndex = Math.floor(columnNum / 80); - const subLineColumnNum = columnNum % 80; - const subLines: Array = []; - for (let i = 0; i < locationLine.length; i += 80) { - subLines.push(locationLine.slice(i, i + 80)); - } - - return ( - locationStr + - printPrefixedLines([ - [`${lineNum} |`, subLines[0]], - ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine] as const), - ['|', '^'.padStart(subLineColumnNum)], - ['|', subLines[subLineIndex + 1]], - ]) - ); - } - - return ( - locationStr + - printPrefixedLines([ - // Lines specified like this: ["prefix", "string"], - [`${lineNum - 1} |`, lines[lineIndex - 1]], - [`${lineNum} |`, locationLine], - ['|', '^'.padStart(columnNum)], - [`${lineNum + 1} |`, lines[lineIndex + 1]], - ]) - ); -} - -function printPrefixedLines(lines: ReadonlyArray): string { - const existingLines = lines.filter(([_, line]) => line !== undefined); - - const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length)); - return existingLines - .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : '')) - .join('\n'); -} diff --git a/src/visitor.ts b/src/visitor.ts index d5a09d6..25a1166 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -90,9 +90,11 @@ const QueryDocumentKeys = { EndpointNamespaceTypeDefinition: ['tag', 'endpoints'], EndpointTypeDefinition: ['verb', 'url', 'responses'], EndpointResponse: ['type'], + EnumTypeDefinition: ['name', 'values', 'description'], EndpointVerb: ['name'], EndpointUrl: ['name', 'parameters'], EndpointParameter: ['type'], + EndpointParameterBody: ['type'], } as const; export const BREAK = { From 2d1a2ae230162951ec1c2bb4ba1186d10e93e890 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:18:26 +0400 Subject: [PATCH 64/70] update rules --- src/validation/baseRules.ts | 11 -- src/validation/index.ts | 3 +- .../endpointsKnownHttpVerbs.rule.test.ts | 4 +- ...commendedBodyParameterPostfix.rule.test.ts | 53 ++++++++ ...pointsRecommendedQueryPostfix.rule.test.ts | 4 +- ...ntsRecommendedResponsePostfix.rule.test.ts | 6 +- .../__tests__/knownTypeNames.rule.test.ts | 88 ++++++++++++- .../__tests__/noExplicitString.rule.test.ts | 40 ++++++ .../recommendedBodyModelName.rule.test.ts | 65 +++++++++ ... => recommendedFilterPostfix.rule.test.ts} | 18 ++- ...ommendedModelBodyFieldPostfix.rule.test.ts | 65 +++++++++ ...mmendedPostfixForCreateModels.rule.test.ts | 122 +++++++++++++++++ ...mmendedPostfixForUpdateModels.rule.test.ts | 123 ++++++++++++++++++ .../base/endpointsKnownHttpVerbs.rule.ts | 8 +- src/validation/rules/base/index.ts | 3 + .../rules/{ => base}/knownTypeNames.rule.ts | 36 ++--- .../rules/base/noExplicitString.rule.ts | 45 +++++++ .../allowOnlyShorthandProperties.rule.ts | 9 +- ...banUsingTypeDefinitionBeforeDeclaration.ts | 9 +- .../experimental/enumNoSspecialSymbols.ts | 6 + ...finitionShouldStartByNamesapceName.rule.ts | 9 +- .../experimental/uniqTypeDefinition.rule.ts | 7 + src/validation/rules/noExplicitString.rule.ts | 43 ------ ...ntsRecommendedBodyParameterPostfix.rule.ts | 52 ++++++++ .../endpointsRecommendedQueryPostfix.rule.ts | 15 ++- ...ndpointsRecommendedResponsePostfix.rule.ts | 22 +++- src/validation/rules/recommended/index.ts | 8 ++ .../recommendedBodyModelName.rule.ts | 62 +++++++++ ...le.ts => recommendedFilterPostfix.rule.ts} | 29 ++++- .../recommendedModelBodyFieldPostfix.rule.ts | 52 ++++++++ .../recommendedPostfixForCreateModels.rule.ts | 78 +++++++++++ .../recommendedPostfixForUpdateModels.rule.ts | 78 +++++++++++ src/validation/rules/rulesMap.ts | 22 ++++ src/validation/validate.ts | 7 +- 34 files changed, 1099 insertions(+), 103 deletions(-) delete mode 100644 src/validation/baseRules.ts create mode 100644 src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts create mode 100644 src/validation/rules/__tests__/noExplicitString.rule.test.ts create mode 100644 src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts rename src/validation/rules/__tests__/{recomendedFilterPostfix.rule.test.ts => recommendedFilterPostfix.rule.test.ts} (69%) create mode 100644 src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts create mode 100644 src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts create mode 100644 src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts create mode 100644 src/validation/rules/base/index.ts rename src/validation/rules/{ => base}/knownTypeNames.rule.ts (57%) create mode 100644 src/validation/rules/base/noExplicitString.rule.ts delete mode 100644 src/validation/rules/noExplicitString.rule.ts create mode 100644 src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts create mode 100644 src/validation/rules/recommended/index.ts create mode 100644 src/validation/rules/recommended/recommendedBodyModelName.rule.ts rename src/validation/rules/recommended/{recomendedFilterPostfix.rule.ts => recommendedFilterPostfix.rule.ts} (60%) create mode 100644 src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts create mode 100644 src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts create mode 100644 src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts create mode 100644 src/validation/rules/rulesMap.ts diff --git a/src/validation/baseRules.ts b/src/validation/baseRules.ts deleted file mode 100644 index d8b77b3..0000000 --- a/src/validation/baseRules.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { KnownTypeNamesRule } from './rules/knownTypeNames.rule'; -import { NoExplicitStringRule } from './rules/noExplicitString.rule'; -import { ValidationRule } from './validationContext'; - -/** - * This set includes all validation rules defined by the base spec. - * - * The order of the rules in this list has been adjusted to lead to the - * most clear output when encountering multiple validation errors. - */ -export const baseRules: ReadonlyArray = [NoExplicitStringRule, KnownTypeNamesRule]; diff --git a/src/validation/index.ts b/src/validation/index.ts index b49c5b0..cc2b213 100644 --- a/src/validation/index.ts +++ b/src/validation/index.ts @@ -1,2 +1,3 @@ export { validate } from './validate'; -export { baseRules } from './baseRules'; + +export { rulesMap } from './rules/rulesMap'; diff --git a/src/validation/rules/__tests__/endpointsKnownHttpVerbs.rule.test.ts b/src/validation/rules/__tests__/endpointsKnownHttpVerbs.rule.test.ts index e81f630..a85d482 100644 --- a/src/validation/rules/__tests__/endpointsKnownHttpVerbs.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsKnownHttpVerbs.rule.test.ts @@ -1,9 +1,9 @@ import { toJSONDeep } from '../../../utils'; -import { EndpointsKnownHttpVerbs } from '../base/endpointsKnownHttpVerbs.rule'; +import { endpointsKnownHttpVerbs } from '../base/endpointsKnownHttpVerbs.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(EndpointsKnownHttpVerbs, queryStr, 'endpoints'); + return expectValidationErrors(endpointsKnownHttpVerbs, queryStr, 'endpoints'); } function expectValid(queryStr: string) { diff --git a/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts b/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts new file mode 100644 index 0000000..3580df6 --- /dev/null +++ b/src/validation/rules/__tests__/endpointsRecommendedBodyParameterPostfix.rule.test.ts @@ -0,0 +1,53 @@ +import { toJSONDeep } from '../../../utils'; +import { endpointsRecommendedBodyParameterPostfix } from '../recommended/endpointsRecommendedBodyParameterPostfix.rule'; +import { expectValidationErrors } from './fixtures'; + +function getErrors(queryStr: string) { + return expectValidationErrors(endpointsRecommendedBodyParameterPostfix, queryStr, 'endpoints'); +} + +function expectValid(queryStr: string) { + const errors = getErrors(queryStr); + + expect(errors).toEqual([]); +} + +describe(__filename, () => { + it('should be valid', () => { + expectValid(` +POST /endpoint RequestCreateRequestBody +PATCH /endpoint2 RequestUpdateRequestBody +GET /endpoint3 Request +`); + }); + it('should be invalid', () => { + const errors = getErrors( + ` +POST /endpoint Request +PATCH /endpoint2 Request +\`tag\`: + POST /endpoint Request + PATCH /endpoint2 Request +`, + ); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 2, column: 16 }], + message: 'POST body parameter should ends with CreateRequestBody postfix', + }, + { + locations: [{ line: 3, column: 18 }], + message: 'PATCH body parameter should ends with UpdateRequestBody postfix', + }, + { + locations: [{ line: 5, column: 18 }], + message: 'POST body parameter should ends with CreateRequestBody postfix', + }, + { + locations: [{ line: 6, column: 20 }], + message: 'PATCH body parameter should ends with UpdateRequestBody postfix', + }, + ]); + }); +}); diff --git a/src/validation/rules/__tests__/endpointsRecommendedQueryPostfix.rule.test.ts b/src/validation/rules/__tests__/endpointsRecommendedQueryPostfix.rule.test.ts index 2500e1c..af8d9cf 100644 --- a/src/validation/rules/__tests__/endpointsRecommendedQueryPostfix.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsRecommendedQueryPostfix.rule.test.ts @@ -1,9 +1,9 @@ import { toJSONDeep } from '../../../utils'; -import { EndpointsRecommendedQueryPostfix } from '../recommended/endpointsRecommendedQueryPostfix.rule'; +import { endpointsRecommendedQueryPostfix } from '../recommended/endpointsRecommendedQueryPostfix.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(EndpointsRecommendedQueryPostfix, queryStr, 'endpoints'); + return expectValidationErrors(endpointsRecommendedQueryPostfix, queryStr, 'endpoints'); } function expectValid(queryStr: string) { diff --git a/src/validation/rules/__tests__/endpointsRecommendedResponsePostfix.rule.test.ts b/src/validation/rules/__tests__/endpointsRecommendedResponsePostfix.rule.test.ts index 9ffa39d..98ce64f 100644 --- a/src/validation/rules/__tests__/endpointsRecommendedResponsePostfix.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsRecommendedResponsePostfix.rule.test.ts @@ -1,9 +1,9 @@ import { toJSONDeep } from '../../../utils'; -import { EndpointsRecommendedQueryPostfix } from '../recommended/endpointsRecommendedResponsePostfix.rule'; +import { endpointsRecommendedResponsePostfix } from '../recommended/endpointsRecommendedResponsePostfix.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(EndpointsRecommendedQueryPostfix, queryStr, 'endpoints'); + return expectValidationErrors(endpointsRecommendedResponsePostfix, queryStr, 'endpoints'); } function expectValid(queryStr: string) { @@ -31,7 +31,7 @@ GET /endpoint expect(toJSONDeep(errors)).toMatchObject([ { locations: [{ line: 3, column: 19 }], - message: 'Request model should ends with Response postfix, e.g. SomeTypeRequestQuery', + message: 'Request model should ends with Response postfix, e.g. SomeTypeResponse', }, ]); }); diff --git a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts index f8e61a7..1f1f722 100644 --- a/src/validation/rules/__tests__/knownTypeNames.rule.test.ts +++ b/src/validation/rules/__tests__/knownTypeNames.rule.test.ts @@ -1,10 +1,13 @@ -import { specifiedScalarTypes } from '../../../runtypes'; +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { concatAST } from '../../../language/concatAST'; +import { AnySpecSchema, specifiedScalarTypes } from '../../../runtypes'; import { toJSONDeep } from '../../../utils'; -import { KnownTypeNamesRule } from '../knownTypeNames.rule'; +import { knownTypeNamesRule } from '../base/knownTypeNames.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(KnownTypeNamesRule, queryStr); + return expectValidationErrors(knownTypeNamesRule, queryStr); } function expectValid(queryStr: string) { @@ -22,7 +25,7 @@ describe(__filename, () => { `); }); - it('all knwon types are valid', () => { + it('all known types are valid', () => { specifiedScalarTypes.forEach((type) => expectValid(` Doc { @@ -32,7 +35,7 @@ describe(__filename, () => { ); }); - it('unkown type names are invalid', () => { + it('unknown type names are invalid', () => { const errors = getErrors(` Doc { name: ew, @@ -101,4 +104,79 @@ describe(__filename, () => { }, ]); }); + + it('known-type-names rule are work with endpoints, valid', () => { + const endpointString = ` +POST /endpoint RequestModel + => {a: string, c: b, s} +`; + const modelString = ` +RequestModel {a: string, c: b, s} +`; + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [knownTypeNamesRule]); + + expect(errors).toEqual([]); + }); + + it('known-type-names rule are work with endpoints, invalid', () => { + const endpointString = ` +POST /endpoint Model + => RespModel +`; + const modelString = ` +RequestModel {a: string, c: b, s} +ResponseModel {a: string, c: b, s} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [knownTypeNamesRule]); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 2, column: 16 }], + message: 'Unknown type "Model".', + }, + { + locations: [{ line: 3, column: 6 }], + message: 'Unknown type "RespModel". Did you mean "RequestModel" or "ResponseModel"?', + }, + ]); + }); }); diff --git a/src/validation/rules/__tests__/noExplicitString.rule.test.ts b/src/validation/rules/__tests__/noExplicitString.rule.test.ts new file mode 100644 index 0000000..51ca8a5 --- /dev/null +++ b/src/validation/rules/__tests__/noExplicitString.rule.test.ts @@ -0,0 +1,40 @@ +import { toJSONDeep } from '../../../utils'; +import { noExplicitStringRule } from '../base'; +import { expectValidationErrors } from './fixtures'; + +function getErrors(queryStr: string) { + return expectValidationErrors(noExplicitStringRule, queryStr); +} + +function expectValid(queryStr: string) { + const errors = getErrors(queryStr); + + expect(errors).toEqual([]); +} + +describe(__filename, () => { + it('should be valid', () => { + expectValid(` + AcDocument { + field + } +`); + }); + + it('should be invalid', () => { + const errors = getErrors( + ` + Document { + field: s + } +`, + ); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 3, column: 16 }], + message: 'No need to explicitly specify string type since it is the default', + }, + ]); + }); +}); diff --git a/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts b/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts new file mode 100644 index 0000000..d2643dc --- /dev/null +++ b/src/validation/rules/__tests__/recommendedBodyModelName.rule.test.ts @@ -0,0 +1,65 @@ +import { toJSONDeep } from '../../../utils'; +import { recommendedBodyModelName } from '../recommended/recommendedBodyModelName.rule'; +import { expectValidationErrors } from './fixtures'; + +function getErrors(queryStr: string) { + return expectValidationErrors(recommendedBodyModelName, queryStr); +} + +function expectValid(queryStr: string) { + const errors = getErrors(queryStr); + + expect(errors).toEqual([]); +} + +describe(__filename, () => { + it('should be valid', () => { + expectValid(` + Model { + body: ModelRequestBody, + } + + ModelRequestBody {} +`); + }); + + it('should be valid v2', () => { + expectValid(` + Model { + body, + } + + ModelRequestBody {} +`); + }); + + it('should be valid v3', () => { + expectValid(` + Model { + body: s, + } + + ModelRequestBody {} +`); + }); + + it('should be invalid', () => { + const errors = getErrors( + ` + Other { + body: ModelRequestBody, + } + + ModelRequestBody {} +`, + ); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 2, column: 5 }], + message: + 'Name of model "Other" should be substring of "body" parameter type "ModelRequestBody", e.g. Model { body: ModelRequestBody }', + }, + ]); + }); +}); diff --git a/src/validation/rules/__tests__/recomendedFilterPostfix.rule.test.ts b/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts similarity index 69% rename from src/validation/rules/__tests__/recomendedFilterPostfix.rule.test.ts rename to src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts index a6a8a2f..e9647dc 100644 --- a/src/validation/rules/__tests__/recomendedFilterPostfix.rule.test.ts +++ b/src/validation/rules/__tests__/recommendedFilterPostfix.rule.test.ts @@ -1,9 +1,9 @@ import { toJSONDeep } from '../../../utils'; -import { RecommendedFilterPostfix } from '../recommended/recomendedFilterPostfix.rule'; +import { recommendedFilterPostfix } from '../recommended/recommendedFilterPostfix.rule'; import { expectValidationErrors } from './fixtures'; function getErrors(queryStr: string) { - return expectValidationErrors(RecommendedFilterPostfix, queryStr); + return expectValidationErrors(recommendedFilterPostfix, queryStr); } function expectValid(queryStr: string) { @@ -23,6 +23,20 @@ describe(__filename, () => { `); }); + it('should be valid v2', () => { + expectValid(` + BkConnectionIndexRequestQuery !{ + filter, + } +`); + }); + it('should be valid v3', () => { + expectValid(` + BkConnectionIndexRequestQuery !{ + filter: s, + } +`); + }); it('should be invalid', () => { const errors = getErrors( ` diff --git a/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts b/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts new file mode 100644 index 0000000..e0a1922 --- /dev/null +++ b/src/validation/rules/__tests__/recommendedModelBodyFieldPostfix.rule.test.ts @@ -0,0 +1,65 @@ +import { toJSONDeep } from '../../../utils'; +import { recommendedModelBodyFieldPostfix } from '../recommended/recommendedModelBodyFieldPostfix.rule'; +import { expectValidationErrors } from './fixtures'; + +function getErrors(queryStr: string) { + return expectValidationErrors(recommendedModelBodyFieldPostfix, queryStr); +} + +function expectValid(queryStr: string) { + const errors = getErrors(queryStr); + + expect(errors).toEqual([]); +} + +describe(__filename, () => { + it('should be valid', () => { + expectValid(` + RequestQuery { + body: RequestQueryRequestBody, + } + + RequestQueryRequestBody {} +`); + }); + + it('should be valid v2', () => { + expectValid(` + RequestQuery { + body, + } + + RequestQueryRequestBody {} +`); + }); + + it('should be valid v3', () => { + expectValid(` + RequestQuery { + body: s, + } + + RequestQueryRequestBody {} +`); + }); + + it('should be invalid', () => { + const errors = getErrors( + ` + RequestQuery { + body: RequestQuery, + } + + RequestQuery {} +`, + ); + + expect(toJSONDeep(errors)).toMatchObject([ + { + locations: [{ line: 3, column: 15 }], + message: + 'Type name of body field should ends with RequestBody postfix, did you mean RequestQueryRequestBody', + }, + ]); + }); +}); diff --git a/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts b/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts new file mode 100644 index 0000000..da84ab8 --- /dev/null +++ b/src/validation/rules/__tests__/recommendedPostfixForCreateModels.rule.test.ts @@ -0,0 +1,122 @@ +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { concatAST } from '../../../language/concatAST'; +import { AnySpecSchema } from '../../../runtypes'; +import { toJSONDeep } from '../../../utils'; +import { recommendedPostfixForCreateModels } from '../recommended/recommendedPostfixForCreateModels.rule'; + +describe(__filename, () => { + it('should be valid', () => { + const endpointString = ` +POST /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: ConnectionNew +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForCreateModels]); + + expect(errors).toEqual([]); + }); + + it('should be valid with scalar types', () => { + const endpointString = ` +POST /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: s, + referralCode +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForCreateModels]); + + expect(errors).toEqual([]); + }); + + it('should be invalid', () => { + const endpointString = ` +POST /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: Connection +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForCreateModels]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 17 }], + message: + 'Type name of create field should ends with New postfix, did you mean ConnectionNew', + }, + ]); + }); +}); diff --git a/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts b/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts new file mode 100644 index 0000000..244a59e --- /dev/null +++ b/src/validation/rules/__tests__/recommendedPostfixForUpdateModels.rule.test.ts @@ -0,0 +1,123 @@ +import { validate } from '../..'; +import { ASTNodeKind, parse, Source } from '../../../language'; +import { concatAST } from '../../../language/concatAST'; +import { AnySpecSchema } from '../../../runtypes'; +import { toJSONDeep } from '../../../utils'; +import { recommendedPostfixForUpdateModels } from '../recommended/recommendedPostfixForUpdateModels.rule'; + +describe(__filename, () => { + it('should be valid', () => { + const endpointString = ` +PATCH /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: ConnectionUpdate +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForUpdateModels]); + + expect(errors).toEqual([]); + }); + + it('should be valid with scalar types', () => { + const endpointString = ` +PATCH /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: s, + referralCode +} +`; + + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForUpdateModels]); + + expect(errors).toEqual([]); + }); + + it('should be invalid', () => { + const endpointString = ` +PATCH /endpoint RequestModel + => ResponseModel +`; + + const modelString = ` +RequestModel { + connection: Connection +} +`; + + // TODO: remove after #58 + const sourceEndpoints = new Source({ + body: endpointString, + name: 'endpoints-source', + sourceType: 'endpoints', + }); + + const sourceModels = new Source({ + body: modelString, + name: 'endpoints-model', + sourceType: 'models', + }); + + const astEndpoints = parse(sourceEndpoints); + const astModels = parse(sourceModels); + + const combined = concatAST([astEndpoints, astModels]); + + const schema = new AnySpecSchema({ ast: combined }); + + const errors = validate(schema, combined, [recommendedPostfixForUpdateModels]); + + expect(toJSONDeep(errors)).toEqual([ + { + locations: [{ line: 3, column: 17 }], + message: + 'Type name of update field should ends with Update postfix, did you mean ConnectionUpdate', + }, + ]); + }); +}); diff --git a/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts b/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts index 81a1180..428b3a3 100644 --- a/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts +++ b/src/validation/rules/base/endpointsKnownHttpVerbs.rule.ts @@ -15,7 +15,13 @@ const HTTP_REQUEST_METHODS = [ 'PATCH', ]; -export function EndpointsKnownHttpVerbs(context: ValidationContext): ASTVisitor { +/** + * verb in front of endpoint should be one of available HTTP methods + * + * [https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) + * + */ +export function endpointsKnownHttpVerbs(context: ValidationContext): ASTVisitor { const set = new Set(HTTP_REQUEST_METHODS); return { diff --git a/src/validation/rules/base/index.ts b/src/validation/rules/base/index.ts new file mode 100644 index 0000000..f9111c5 --- /dev/null +++ b/src/validation/rules/base/index.ts @@ -0,0 +1,3 @@ +export * from './endpointsKnownHttpVerbs.rule'; +export * from './knownTypeNames.rule'; +export * from './noExplicitString.rule'; diff --git a/src/validation/rules/knownTypeNames.rule.ts b/src/validation/rules/base/knownTypeNames.rule.ts similarity index 57% rename from src/validation/rules/knownTypeNames.rule.ts rename to src/validation/rules/base/knownTypeNames.rule.ts index e8cdeb3..7aac97c 100644 --- a/src/validation/rules/knownTypeNames.rule.ts +++ b/src/validation/rules/base/knownTypeNames.rule.ts @@ -1,11 +1,15 @@ -import { didYouMean, suggestionList } from '../../utils'; +import { didYouMean, suggestionList } from '../../../utils'; +import { AnySpecError } from '../../../error'; +import { + ASTNode, + NamedTypeNode, + isModelDomainDefinitionNode, + isEndpointNamespaceTypeDefinitionNode, +} from '../../../language'; +import { ASTVisitor } from '../../../visitor'; +import { specifiedScalarTypes } from '../../../runtypes'; -import { AnySpecError } from '../../error'; -import { ASTNode, NamedTypeNode, isModelDomainDefinitionNode } from '../../language'; -import { ASTVisitor } from '../../visitor'; -import { specifiedScalarTypes } from '../../runtypes'; - -import { ValidationContext } from '../validationContext'; +import { ValidationContext } from '../../validationContext'; const standardTypeNames = specifiedScalarTypes; /** @@ -14,32 +18,31 @@ const standardTypeNames = specifiedScalarTypes; * An AnySpec document is only valid if referenced types (specifically * variable definitions) are defined by the type schema. */ -export function KnownTypeNamesRule(context: ValidationContext): ASTVisitor { - const existingTypesMap: Record = {}; - +export function knownTypeNamesRule(context: ValidationContext): ASTVisitor { const definedTypes: Record = {}; + for (const def of context.getDocument().definitions) { if (isModelDomainDefinitionNode(def)) { definedTypes[def.name.value] = true; } } - const typeNames = [...Object.keys(existingTypesMap), ...Object.keys(definedTypes)]; + const typeNames = [...Object.keys(definedTypes)]; return { NamedType(node, _1, parent, _2, ancestors) { const typeName = defaultNamedTypeCast(node); - if (!existingTypesMap[typeName] && !definedTypes[typeName]) { + if (!definedTypes[typeName]) { const definitionNode = ancestors[2] ?? parent; const isSDL = definitionNode != null && isSDLNode(definitionNode); - if (isSDL && standardTypeNames.includes(typeName)) { + if (isSDL && standardTypeNames.has(typeName)) { return; } const suggestedTypes = suggestionList( typeName, - isSDL ? standardTypeNames.concat(typeNames) : typeNames, + isSDL ? [...standardTypeNames].concat(typeNames) : typeNames, ); context.reportError( new AnySpecError(`Unknown type "${typeName}".` + didYouMean(suggestedTypes), node), @@ -50,7 +53,10 @@ export function KnownTypeNamesRule(context: ValidationContext): ASTVisitor { } function isSDLNode(value: ASTNode | ReadonlyArray): boolean { - return 'kind' in value && isModelDomainDefinitionNode(value); + return ( + 'kind' in value && + (isModelDomainDefinitionNode(value) || isEndpointNamespaceTypeDefinitionNode(value)) + ); } function defaultNamedTypeCast(node: NamedTypeNode) { diff --git a/src/validation/rules/base/noExplicitString.rule.ts b/src/validation/rules/base/noExplicitString.rule.ts new file mode 100644 index 0000000..82d3d27 --- /dev/null +++ b/src/validation/rules/base/noExplicitString.rule.ts @@ -0,0 +1,45 @@ +import { ASTVisitor } from '../../../visitor'; + +import { ValidationContext } from '../../validationContext'; +import { stringAliases } from '../../../runtypes/specifiedScalarTypes'; +import { ASTNodeKind } from '../../../language'; +import { AnySpecError } from '../../../error'; + +/** + * + * good ✅ + * + * ``` + * AcDocument { + * field + * } + * ``` + * + * bad ❌ + * + * ``` + * Document { + * field: s + * } + * ``` + * + */ +export function noExplicitStringRule(context: ValidationContext): ASTVisitor { + return { + FieldDefinition(node, _1, parent, _2, ancestors) { + if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (stringAliases.has(node.type.name.value)) { + context.reportError( + new AnySpecError( + `No need to explicitly specify string type since it is the default`, + node.type, + ), + ); + } + } + }, + }; +} diff --git a/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts b/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts index 046f028..acd8b33 100644 --- a/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts +++ b/src/validation/rules/experimental/allowOnlyShorthandProperties.rule.ts @@ -1,21 +1,24 @@ /** - * + * WIP: it's an experimental module, never use it! * * good ✅ * + * ``` * AcDocument { * field: d, * field2: s, * } + * ``` * * bad ❌ * + * ``` * Document { * field: string, * field2: datetime * } + * ``` * * */ - -class AllowOnlyShorthandProperties {} +class allowOnlyShorthandProperties {} diff --git a/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts b/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts index 300acc4..c43ea4c 100644 --- a/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts +++ b/src/validation/rules/experimental/banUsingTypeDefinitionBeforeDeclaration.ts @@ -1,26 +1,27 @@ /** - * @description * - * rule should work only in file + * WIP: it's an experimental module, never use it! * * good ✅ * + * ``` * User {} * * AcDocument { * field: User, * field2: s, * } + * ``` * * bad ❌ * - * + * ``` * AcDocument { * field: User, * field2: s, * } * * User {} + * ``` * */ -class BanUsingTypeDefinitionBeforeDeclaration {} diff --git a/src/validation/rules/experimental/enumNoSspecialSymbols.ts b/src/validation/rules/experimental/enumNoSspecialSymbols.ts index 7cf96b7..cc2897e 100644 --- a/src/validation/rules/experimental/enumNoSspecialSymbols.ts +++ b/src/validation/rules/experimental/enumNoSspecialSymbols.ts @@ -1,11 +1,17 @@ /** + * + * WIP: it's an experimental module, never use it! * * good ✅ + * ``` * User ( kek | lel | lol) * + * ``` * * bad ❌ * + * ``` * User (+date | -date) + * ``` * */ diff --git a/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts b/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts index 88d6cdc..6f4d679 100644 --- a/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts +++ b/src/validation/rules/experimental/typeDefinitionShouldStartByNamesapceName.rule.ts @@ -1,14 +1,19 @@ /** + * + * WIP: it's an experimental module, never use it! + * * if we pass namesapce, we allow in out directory start type definition with only this prefix * TypeDefinitionShouldStartByNamesapceName(Ac) * good ✅ - * + * ``` * AcDocument {} + * ``` * * bad ❌ * + * ``` * Document {} + * ``` * * */ -class TypeDefinitionShouldStartByNamesapceName {} diff --git a/src/validation/rules/experimental/uniqTypeDefinition.rule.ts b/src/validation/rules/experimental/uniqTypeDefinition.rule.ts index be2b60b..cf884fc 100644 --- a/src/validation/rules/experimental/uniqTypeDefinition.rule.ts +++ b/src/validation/rules/experimental/uniqTypeDefinition.rule.ts @@ -1,15 +1,22 @@ /** + * + * WIP: it's an experimental module, never use it! * * good ✅ + * ``` * User {} * + * * AcDocument {} * + * ``` * bad ❌ * + * ``` * Document {} * * Document {} * + * ``` * */ diff --git a/src/validation/rules/noExplicitString.rule.ts b/src/validation/rules/noExplicitString.rule.ts deleted file mode 100644 index 0a147e9..0000000 --- a/src/validation/rules/noExplicitString.rule.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { AnySpecError } from '../../error'; -import { NamedTypeNode } from '../../language'; -import { ASTVisitor } from '../../visitor'; - -import { ValidationContext } from '../validationContext'; -import { stringAliases } from '../../runtypes/specifiedScalarTypes'; - -/** - * - * - * good ✅ - * - * AcDocument { - * field - * } - * - * bad ❌ - * - * Document { - * field: s - * } - * - * - */ -export function NoExplicitStringRule(context: ValidationContext): ASTVisitor { - return { - NamedType(node, _1, parent, _2, ancestors) { - const castedValue = defaultNamedTypeCast(node); - if (stringAliases.includes(castedValue)) { - context.reportError( - new AnySpecError( - `No need to explicitly specify string type since it is the default`, - node, - ), - ); - } - }, - }; -} - -function defaultNamedTypeCast(node: NamedTypeNode) { - return node.name.value ? node.name.value : 'string'; -} diff --git a/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts new file mode 100644 index 0000000..c221438 --- /dev/null +++ b/src/validation/rules/recommended/endpointsRecommendedBodyParameterPostfix.rule.ts @@ -0,0 +1,52 @@ +import { ASTNodeKind } from './../../../language/ast'; +import { AnySpecError } from '../../../error'; +import { ASTVisitor } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +const prefixMap = { + POST: 'CreateRequestBody', + PATCH: 'UpdateRequestBody', +} as const; + +/** + * + * + * good ✅ + * ``` + * POST /endpoint RequestCreateRequestBody + * PATCH /endpoint2 RequestUpdateRequestBody + * ``` + * bad ❌ + * ``` + * POST /endpoint Request + * PATCH /endpoint2 Request + * ``` + */ +export function endpointsRecommendedBodyParameterPostfix(context: ValidationContext): ASTVisitor { + const isInPrefixMap = (verb: string): verb is keyof typeof prefixMap => { + const keys = new Set(Object.keys(prefixMap)); + return keys.has(verb); + }; + return { + EndpointTypeDefinition(node) { + if (isInPrefixMap(node.verb.name.value)) { + const verb = node.verb.name.value; + node.url.parameters.forEach((param) => { + if ( + param.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY && + param.type.type.kind === ASTNodeKind.NAMED_TYPE + ) { + if (!param.type.type.name.value?.endsWith(prefixMap[verb])) { + context.reportError( + new AnySpecError( + `${node.verb.name.value} body parameter should ends with ${prefixMap[verb]} postfix`, + param.type.type, + ), + ); + } + } + }); + } + }, + }; +} diff --git a/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts index 72918a0..6808c49 100644 --- a/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedQueryPostfix.rule.ts @@ -4,7 +4,20 @@ import { ValidationContext } from '../../validationContext'; const POSTFIX = 'RequestQuery'; -export function EndpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { +/** + * + * + * good ✅ + * ``` + * POST /endpoint?SomeTypeRequestQuery + * ``` + * + * bad ❌ + * ``` + * POST /endpoint?SomeType + * ``` + */ +export function endpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { return { EndpointParameterQuery(node) { if (!node.type.name.value?.endsWith(POSTFIX)) { diff --git a/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts b/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts index c9b621d..f8c7c9b 100644 --- a/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts +++ b/src/validation/rules/recommended/endpointsRecommendedResponsePostfix.rule.ts @@ -5,14 +5,30 @@ import { ValidationContext } from '../../validationContext'; const POSTFIX = 'Response'; -export function EndpointsRecommendedQueryPostfix(context: ValidationContext): ASTVisitor { +/** + * + * + * good ✅ + * ``` + * GET /endpoint + * => SomeTypeResponse + * ``` + * + * bad ❌ + * + * ``` + * GET /endpoint + * => SomeType + * ``` + */ +export function endpointsRecommendedResponsePostfix(context: ValidationContext): ASTVisitor { return { EndpointResponse(node) { - if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (node.type?.kind === ASTNodeKind.NAMED_TYPE) { if (!node.type.name.value?.endsWith(POSTFIX)) { context.reportError( new AnySpecError( - `Request model should ends with Response postfix, e.g. SomeTypeRequestQuery`, + `Request model should ends with Response postfix, e.g. SomeTypeResponse`, node, ), ); diff --git a/src/validation/rules/recommended/index.ts b/src/validation/rules/recommended/index.ts new file mode 100644 index 0000000..557177d --- /dev/null +++ b/src/validation/rules/recommended/index.ts @@ -0,0 +1,8 @@ +export * from './endpointsRecommendedBodyParameterPostfix.rule'; +export * from './endpointsRecommendedQueryPostfix.rule'; +export * from './endpointsRecommendedResponsePostfix.rule'; +export * from './recommendedBodyModelName.rule'; +export * from './recommendedFilterPostfix.rule'; +export * from './recommendedModelBodyFieldPostfix.rule'; +export * from './recommendedPostfixForCreateModels.rule'; +export * from './recommendedPostfixForUpdateModels.rule'; diff --git a/src/validation/rules/recommended/recommendedBodyModelName.rule.ts b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts new file mode 100644 index 0000000..a043418 --- /dev/null +++ b/src/validation/rules/recommended/recommendedBodyModelName.rule.ts @@ -0,0 +1,62 @@ +import { AnySpecError } from '../../../error'; +import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; +import { ASTVisitor } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +/** + * + * if model contains `body` field ensure that model name is substring of body parameter type + * + * good ✅ + * ``` + * Model { + * body: ModelRequestBody, + * } + * ``` + * + * bad ❌ + * + * ``` + * Other { + * body: ModelRequestBody, + * } + * ``` + * + */ +export function recommendedBodyModelName(context: ValidationContext): ASTVisitor { + return { + ModelTypeDefinition(node) { + if (!node.fields.some((fieldDefinition) => fieldDefinition.name.value === 'body')) { + return; + } + + const modelName = node.name.value; + const fieldNode = node.fields.find( + (fieldDefinition) => fieldDefinition.name.value === 'body', + ); + const fieldTypeName = + fieldNode?.type.kind === ASTNodeKind.NAMED_TYPE ? fieldNode.type.name.value : undefined; + + if (!fieldNode) { + return; + } + + if (!fieldTypeName) { + return; + } + if (specifiedScalarTypes.has(fieldTypeName)) { + return; + } + + if (!fieldTypeName?.includes(modelName)) { + context.reportError( + new AnySpecError( + `Name of model "${modelName}" should be substring of "body" parameter type "${fieldTypeName}", e.g. Model { body: ModelRequestBody }`, + node, + ), + ); + } + }, + }; +} diff --git a/src/validation/rules/recommended/recomendedFilterPostfix.rule.ts b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts similarity index 60% rename from src/validation/rules/recommended/recomendedFilterPostfix.rule.ts rename to src/validation/rules/recommended/recommendedFilterPostfix.rule.ts index 2852aeb..da18a96 100644 --- a/src/validation/rules/recommended/recomendedFilterPostfix.rule.ts +++ b/src/validation/rules/recommended/recommendedFilterPostfix.rule.ts @@ -1,15 +1,42 @@ import { AnySpecError } from '../../../error'; import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; import { ASTVisitor } from '../../../visitor'; import { ValidationContext } from '../../validationContext'; const POSTFIX = 'Filter'; -export function RecommendedFilterPostfix(context: ValidationContext): ASTVisitor { +/** + * + * + * good ✅ + * + * ``` + * RequestQuery { + * filter: BkConnectionFilter, + * } + * ``` + * + * bad ❌ + * + * ``` + * RequestQuery { + * filter: BkConnection, + * } + * ``` + * + */ +export function recommendedFilterPostfix(context: ValidationContext): ASTVisitor { return { FieldDefinition(node) { if (node.name.value === 'filter') { if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (specifiedScalarTypes.has(node.type.name.value)) { + return; + } if (!node.type.name.value?.endsWith(POSTFIX)) { context.reportError( new AnySpecError( diff --git a/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts new file mode 100644 index 0000000..a72c9de --- /dev/null +++ b/src/validation/rules/recommended/recommendedModelBodyFieldPostfix.rule.ts @@ -0,0 +1,52 @@ +import { AnySpecError } from '../../../error'; +import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; +import { ASTVisitor } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +const POSTFIX = 'RequestBody'; + +/** + * + * + * good ✅ + * + * ``` + * RequestQuery { + * body: BkConnectionRequestBody, + * } + * ``` + * + * bad ❌ + * + * ``` + * RequestQuery { + * body: BkConnection, + * } + * ``` + * + */ +export function recommendedModelBodyFieldPostfix(context: ValidationContext): ASTVisitor { + return { + FieldDefinition(node) { + if (node.name.value === 'body') { + if (node.type.kind === ASTNodeKind.NAMED_TYPE) { + if (!node.type.name.value) { + return; + } + if (specifiedScalarTypes.has(node.type.name.value)) { + return; + } + if (!node.type.name.value?.endsWith(POSTFIX)) { + context.reportError( + new AnySpecError( + `Type name of body field should ends with ${POSTFIX} postfix, did you mean ${node.type.name.value}${POSTFIX}`, + node.type, + ), + ); + } + } + } + }, + }; +} diff --git a/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts new file mode 100644 index 0000000..15c17b2 --- /dev/null +++ b/src/validation/rules/recommended/recommendedPostfixForCreateModels.rule.ts @@ -0,0 +1,78 @@ +import { AnySpecError } from '../../../error'; +import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; +import { ASTVisitor, visit } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +/** + * + * if endpoint is `POST` && contains Body parameter ⇒ + * we should watch model that referenced by body parameter + * and ensure that every `field`, that is named type, should ends with `New` postfix + * + * good ✅ + * + * ``` + * POST /connections ConnectionCreateRequestBody + * => ConnectionResponse` + * + * ConnectionCreateRequestBody { + * connection: BkConnectionNew + * } + * ``` + * + * bad ❌ + * + * ``` + * POST /connections ConnectionCreateRequestBody + * => ConnectionResponse` + * + * ConnectionCreateRequestBody { + * connection: BkConnection + * } + * ``` + * + */ +export function recommendedPostfixForCreateModels(context: ValidationContext): ASTVisitor { + let bodyParameters: string[] = []; + + // TODO: Rewrite after introducing type info #59 + visit(context.getDocument(), { + EndpointTypeDefinition(node) { + if (node.verb.name.value === 'POST') { + node.url.parameters.forEach((parameter) => { + if ( + parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY && + parameter.type.type.kind === ASTNodeKind.NAMED_TYPE && + parameter.type.type.name.value + ) { + bodyParameters.push(parameter.type.type.name.value); + } + }); + } + }, + }); + return { + ModelTypeDefinition(node) { + const bodyParametersSet = new Set(bodyParameters); + if (!bodyParametersSet.has(node.name.value)) { + return; + } + node.fields.forEach((fieldDefinition) => { + if ( + fieldDefinition.type.kind === ASTNodeKind.NAMED_TYPE && + fieldDefinition.type.name.value && + !specifiedScalarTypes.has(fieldDefinition.type.name.value) && + !fieldDefinition.type.name.value?.endsWith('New') + ) { + context.reportError( + new AnySpecError( + `Type name of create field should ends with New postfix, did you mean ${fieldDefinition.type.name.value}New`, + fieldDefinition.type, + ), + ); + } + }); + }, + }; +} diff --git a/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts new file mode 100644 index 0000000..f2d89ad --- /dev/null +++ b/src/validation/rules/recommended/recommendedPostfixForUpdateModels.rule.ts @@ -0,0 +1,78 @@ +import { AnySpecError } from '../../../error'; +import { ASTNodeKind } from '../../../language'; +import { specifiedScalarTypes } from '../../../runtypes'; +import { ASTVisitor, visit } from '../../../visitor'; +import { ValidationContext } from '../../validationContext'; + +/** + * + * if endpoint is `PATCH` && contains Body parameter ⇒ + * we should watch model that referenced by body parameter + * and ensure that every `field`, that is named type, should ends with `Update` postfix + * + * good ✅ + * + * ``` + * PATCH /connections ConnectionCreateRequestBody + * => ConnectionResponse` + * + * ConnectionCreateRequestBody { + * connection: ConnectionUpdate + * } + * ``` + * + * bad ❌ + * + * ``` + * PATCH /connections ConnectionCreateRequestBody + * => ConnectionResponse` + * + * ConnectionCreateRequestBody { + * connection: Connection + * } + * ``` + * + */ +export function recommendedPostfixForUpdateModels(context: ValidationContext): ASTVisitor { + let bodyParameters: string[] = []; + + // TODO: Rewrite after introducing type info #59 + visit(context.getDocument(), { + EndpointTypeDefinition(node) { + if (node.verb.name.value === 'PATCH') { + node.url.parameters.forEach((parameter) => { + if ( + parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY && + parameter.type.type.kind === ASTNodeKind.NAMED_TYPE && + parameter.type.type.name.value + ) { + bodyParameters.push(parameter.type.type.name.value); + } + }); + } + }, + }); + return { + ModelTypeDefinition(node) { + const bodyParametersSet = new Set(bodyParameters); + if (!bodyParametersSet.has(node.name.value)) { + return; + } + node.fields.forEach((fieldDefinition) => { + if ( + fieldDefinition.type.kind === ASTNodeKind.NAMED_TYPE && + fieldDefinition.type.name.value && + !specifiedScalarTypes.has(fieldDefinition.type.name.value) && + !fieldDefinition.type.name.value?.endsWith('Update') + ) { + context.reportError( + new AnySpecError( + `Type name of update field should ends with Update postfix, did you mean ${fieldDefinition.type.name.value}Update`, + fieldDefinition.type, + ), + ); + } + }); + }, + }; +} diff --git a/src/validation/rules/rulesMap.ts b/src/validation/rules/rulesMap.ts new file mode 100644 index 0000000..a2b315a --- /dev/null +++ b/src/validation/rules/rulesMap.ts @@ -0,0 +1,22 @@ +import { ASTVisitor } from '../../visitor'; +import { ValidationContext } from '../validationContext'; +import * as base from './base'; +import * as recommended from './recommended'; + +/** + * This record includes all available validation rules. + */ +export const rulesMap: Record ASTVisitor> = { + 'base/known-type-names': base.knownTypeNamesRule, + 'base/no-explicit-string-rule': base.noExplicitStringRule, + 'base/endpoints-known-http-verbs': base.endpointsKnownHttpVerbs, + 'recommended/endpoints-body-parameter-postfix': + recommended.endpointsRecommendedBodyParameterPostfix, + 'recommended/endpoints-query-postfix': recommended.endpointsRecommendedQueryPostfix, + 'recommended/endpoints-response-postfix': recommended.endpointsRecommendedResponsePostfix, + 'recommended/body-model-name': recommended.recommendedBodyModelName, + 'recommended/filter-postfix': recommended.recommendedFilterPostfix, + 'recommended/model-body-field-postfix': recommended.recommendedModelBodyFieldPostfix, + 'recommended/postfix-for-create-models': recommended.recommendedPostfixForCreateModels, + 'recommended/postfix-for-update-models': recommended.recommendedPostfixForUpdateModels, +}; diff --git a/src/validation/validate.ts b/src/validation/validate.ts index 107320a..576c489 100644 --- a/src/validation/validate.ts +++ b/src/validation/validate.ts @@ -4,9 +4,8 @@ import { visit } from '../visitor'; import { AnySpecSchema } from '../runtypes'; -import { ValidationRule } from './ValidationContext'; -import { baseRules } from './baseRules'; -import { ValidationContext } from './ValidationContext'; +import { ValidationRule } from './validationContext'; +import { ValidationContext } from './validationContext'; import { assert } from '../utils'; /** @@ -28,7 +27,7 @@ import { assert } from '../utils'; export function validate( schema: AnySpecSchema, documentAST: DocumentNode, - rules: ReadonlyArray = baseRules, + rules: ReadonlyArray, options: { maxErrors?: number } = { maxErrors: undefined }, ): ReadonlyArray { assert(documentAST, 'Must provide document.'); From e7c2c7436e1aef58acd81382cc35e4994cb8e4f9 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:18:57 +0400 Subject: [PATCH 65/70] add printer --- src/cli/examples/kek.models.tinyspec | 3 - src/error/AnySpecError.ts | 3 +- src/error/printLocation.ts | 67 + src/printer/index.ts | 1 + src/printer/printer.ts | 127 ++ src/printer/printerModel.test.ts | 1544 +++++++++++++++++++ src/runtypes/specifiedScalarTypes.ts | 6 +- src/types/index.d.ts | 4 - temp/openapi.json | 72 +- temp/spec/endpoints/test.endpoints.tinyspec | 7 +- temp/spec/models/kek.models.tinyspec | 17 +- 11 files changed, 1782 insertions(+), 69 deletions(-) delete mode 100644 src/cli/examples/kek.models.tinyspec create mode 100644 src/error/printLocation.ts create mode 100644 src/printer/index.ts create mode 100644 src/printer/printer.ts create mode 100644 src/printer/printerModel.test.ts diff --git a/src/cli/examples/kek.models.tinyspec b/src/cli/examples/kek.models.tinyspec deleted file mode 100644 index 36785a6..0000000 --- a/src/cli/examples/kek.models.tinyspec +++ /dev/null @@ -1,3 +0,0 @@ -AcDocument < Document { - a: s -} \ No newline at end of file diff --git a/src/error/AnySpecError.ts b/src/error/AnySpecError.ts index 565e620..a2f5d45 100644 --- a/src/error/AnySpecError.ts +++ b/src/error/AnySpecError.ts @@ -1,6 +1,6 @@ import { Source, ASTNode, getLocation, SourceLocation } from '../language'; import { isObjectLike } from '../utils'; -import { printLocation, printSourceLocation } from '../printLocation'; +import { printLocation, printSourceLocation } from './printLocation'; export class AnySpecError extends Error { /** * An array of { line, column } locations within the source AnySpec document @@ -211,6 +211,5 @@ export function printError(error: AnySpecError): string { output += '\n\n' + printSourceLocation(error.source, location); } } - return output; } diff --git a/src/error/printLocation.ts b/src/error/printLocation.ts new file mode 100644 index 0000000..95a3019 --- /dev/null +++ b/src/error/printLocation.ts @@ -0,0 +1,67 @@ +import { Source, Location, SourceLocation, getLocation } from '../language'; + +/** + * Render a helpful description of the location in the EasySpec Source document. + */ +export function printLocation(location: Location): string { + return printSourceLocation(location.source, getLocation(location.source, location.start)); +} + +/** + * Render a helpful description of the location in the EasySpec Source document. + */ +export function printSourceLocation(source: Source, sourceLocation: SourceLocation): string { + const firstLineColumnOffset = source.locationOffset.column - 1; + const body = ''.padStart(firstLineColumnOffset) + source.body; + + const lineIndex = sourceLocation.line - 1; + const lineOffset = source.locationOffset.line - 1; + const lineNum = sourceLocation.line + lineOffset; + + const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0; + const columnNum = sourceLocation.column + columnOffset; + const locationStr = `${source.name}:${lineNum}:${columnNum}\n`; + + const lines = body.split(/\r\n|[\n\r]/g); + const locationLine = lines[lineIndex]; + + // Special case for minified documents + if (locationLine.length > 120) { + const subLineIndex = Math.floor(columnNum / 80); + const subLineColumnNum = columnNum % 80; + const subLines: Array = []; + for (let i = 0; i < locationLine.length; i += 80) { + subLines.push(locationLine.slice(i, i + 80)); + } + + return ( + locationStr + + printPrefixedLines([ + [`${lineNum} |`, subLines[0]], + ...subLines.slice(1, subLineIndex + 1).map((subLine) => ['|', subLine] as const), + ['|', '^'.padStart(subLineColumnNum)], + ['|', subLines[subLineIndex + 1]], + ]) + ); + } + + return ( + locationStr + + printPrefixedLines([ + // Lines specified like this: ["prefix", "string"], + [`${lineNum - 1} |`, lines[lineIndex - 1]], + [`${lineNum} |`, locationLine], + ['|', '^'.padStart(columnNum)], + [`${lineNum + 1} |`, lines[lineIndex + 1]], + ]) + ); +} + +function printPrefixedLines(lines: ReadonlyArray): string { + const existingLines = lines.filter(([_, line]) => line !== undefined); + + const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length)); + return existingLines + .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : '')) + .join('\n'); +} diff --git a/src/printer/index.ts b/src/printer/index.ts new file mode 100644 index 0000000..49495e8 --- /dev/null +++ b/src/printer/index.ts @@ -0,0 +1 @@ +export * from './printer'; diff --git a/src/printer/printer.ts b/src/printer/printer.ts new file mode 100644 index 0000000..a117dc7 --- /dev/null +++ b/src/printer/printer.ts @@ -0,0 +1,127 @@ +import { ASTReducer, visit } from '../visitor'; +import { ASTNode, ASTNodeKind } from '../language/ast'; + +/** + * Converts an AST into a string, using one set of reasonable + * formatting rules. + */ + +const MAX_LINE_LENGTH = 80; + +export function printModels(ast: ASTNode): string { + return visit(ast, printDocASTReducerModel); +} + +const printDocASTReducerModel: ASTReducer = { + EndpointNamespaceTypeDefinition: { + leave: () => { + throw new Error("Can't parse AST with EndpointNamespaceTypeDefinition"); + }, + }, + + Name: { leave: (node) => node.value ?? '' }, + + NamedType: { leave: (node) => node.name }, + + Document: { + leave: (node) => join(node.definitions, '\n\n'), + }, + + ModelTypeDefinition: { + leave: ({ name, description, fields, strict, extendsModels }) => { + const extModels = extendsModels.length > 0 ? ` < ${extendsModels.join(', ')}` : ''; + const strct = strict ? '!' : ''; + if (fields.length === 0) { + return `${description ?? ''}${name}${extModels} ${strct}{}`; + } + return `${description ?? ''}${name}${extModels} ${strct}${block(fields)}`; + }, + }, + Description: { + leave: (node) => { + const descriptions = node.value.split('\n'); + return `${descriptions.map((description) => `// ${description}`).join('\n')}\n`; + }, + }, + FieldDefinition: { + leave: ({ name, type, optional, omitted }) => { + const ommtd = omitted ? '-' : ''; + const opt = optional ? '?' : ''; + if (type.length === 0) { + return `${ommtd}${name}${opt}`; + } + return `${ommtd}${name}${opt}: ${type}`; + }, + }, + ListType: { + leave: (node) => { + const arraySymbol = '[]'; + let list: string[] = []; + let currentNode: any = node; + while (currentNode.kind === ASTNodeKind.LIST_TYPE) { + list.push(arraySymbol); + currentNode = node.type; + } + return `${node.type}${list.join()}`; + }, + }, + EnumValueDefinition: { + leave: ({ name }) => name, + }, + EnumInlineTypeDefinition: { + leave: ({ values }) => { + const str = `( ${join(values, ' | ')} )`; + if (str.length > MAX_LINE_LENGTH) { + return enumBlock(values); + } + return str; + }, + }, + ObjectTypeDefinition: { + leave: ({ fields, strict }) => { + const strct = strict ? '!' : ''; + if (fields.length === 0) { + return `${strct}{}`; + } + return `${strct}${block(fields)}`; + }, + }, + EnumTypeDefinition: { + leave: ({ name, values, description }) => { + return `${description ?? ''}${name} ${enumBlock(values)}`; + }, + }, +}; + +/** + * Given maybeArray, print an empty string if it is null or empty, otherwise + * print all items together separated by separator if provided + */ +function join(maybeArray: $Maybe>, separator = ''): string { + return maybeArray?.filter((x) => x).join(separator) ?? ''; +} + +/** + * Given array, print each item on its own line, wrapped in an indented `{ }` block. + */ +function block(array: $Maybe>): string { + return wrap('{\n', indent(join(array, ',\n')), ',\n}'); +} + +/** + * Given array, print each item on its own line, wrapped in an indented `( )` block with `|` separator. + */ +function enumBlock(array: $Maybe>): string { + return wrap('(\n', indent(join(array, ' |\n')), '\n)'); +} + +/** + * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string. + */ +function wrap(start: string, maybeString: $Maybe, end: string = ''): string { + return maybeString != null && maybeString !== '' ? start + maybeString + end : ''; +} + +function indent(str: string): string { + return wrap(' ', str.replace(/\n/g, '\n ')); +} diff --git a/src/printer/printerModel.test.ts b/src/printer/printerModel.test.ts new file mode 100644 index 0000000..2eb3c84 --- /dev/null +++ b/src/printer/printerModel.test.ts @@ -0,0 +1,1544 @@ +import { ASTNodeKind, EnumTypeDefinitionNode, ModelTypeDefinitionNode } from '../language'; +import { printModels } from './printer'; +import { dedent } from '../__testsUtils__'; + +describe(__filename, () => { + describe('models', () => { + it('correctly print model with description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + expect(printed).toEqual(dedent` +// лул +// kek +AcDocument {} +`); + }); + + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument {} +`); + }); + + it('correctly print empty model without description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument {} +`); + }); + + it('correctly print model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name, +} +`); + }); + + it('correctly print model fields with trailing comma', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + extendsModels: [], + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name, + surname, +} +`); + }); + + it('correctly print model fields with s', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name: s, + surname, +} +`); + }); + + it('correctly print optional model fields', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?: s, + surname, +} +`); + }); + + it('correctly print optional model fields without type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?, + surname, +} +`); + }); + + it('correctly print field array type', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument { + name?: s[], + surname: b[][], +} +`); + }); + + it('correctly print strict mode models', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument !{ + name?: s[], + surname: b[], +} +`); + }); + + it('correctly print extends model', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: false, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek { + name?: s[], + surname: b[], +} +`); + }); + + it('correctly print with multiple extends model and strict model', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + name?: s[], + surname: b[], +} +`); + }); + + it('correctly print model with inline enum', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'standard' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'service' }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + -name?: s[], + type?: ( standard | service ), + surname: b[], +} +`); + }); + it('correctly print model with inline type definitions', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'standard' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'service' }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'kek', + }, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'conversationId', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'users', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'id', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'nickname', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'avatar', + }, + omitted: false, + optional: true, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + -name?: s[], + type?: ( standard | service ), + kek: { + conversationId: i, + users: { + id: i, + nickname, + avatar?, + }[], + }, + surname: b[], +} +`); + }); + it('should print strict nested types correctly', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + + definitions: [ + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'pathParameters', + }, + type: { + strict: true, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + omitted: false, + optional: false, + name: { kind: ASTNodeKind.NAME, value: 'pathParameters' }, + type: { + strict: true, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [], + }, + }, + ], + }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + pathParameters: !{ + pathParameters: !{}, + }, +} +`); + }); + + it('correctly print multiple models', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument2', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }, + ], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument {} + +AcDocument2 { + name, +} +`); + }); + }); + describe('enums', () => { + it('correctly print model with short named enum and description', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + description: { kind: ASTNodeKind.DESCRIPTION, value: 'лул\nkek' }, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` + // лул + // kek + A ( + f | + b + ) +`); + }); + it('correctly print model with long named enum', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'Branch Office Singapore', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: "Private Company 'Limited' by Shares (Pte. Ltd.)", + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: '+ amount', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b-office-singapore', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'CompanyType', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +CompanyType ( + Branch Office Singapore | + Private Company 'Limited' by Shares (Pte. Ltd.) | + + amount | + b-office-singapore +) +`); + }); + it('correctly print model with complicated inline enums', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + fields: [ + { + omitted: true, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'name', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 's', + }, + }, + }, + }, + { + omitted: false, + optional: true, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'type', + }, + type: { + kind: ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION, + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: '+ amount' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: '- amount' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { kind: ASTNodeKind.NAME, value: 'summ +' }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: "Private Company 'Limited' by Shares (Pte. Ltd.)", + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'kek', + }, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'conversationId', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'users', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + strict: false, + kind: ASTNodeKind.OBJECT_TYPE_DEFINITION, + fields: [ + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'id', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'i', + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'nickname', + }, + omitted: false, + optional: false, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + { + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'avatar', + }, + omitted: false, + optional: true, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: undefined, + }, + }, + }, + ], + }, + }, + }, + ], + }, + }, + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'surname', + }, + type: { + kind: ASTNodeKind.LIST_TYPE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'AcDocument', + }, + extendsModels: [ + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Kek' }, + }, + { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'Lel' }, + }, + ], + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + strict: true, + description: undefined, + }, + ], + }; + const printed = printModels(ast); + + expect(printed).toEqual(dedent` +AcDocument < Kek, Lel !{ + -name?: s[], + type?: ( + + amount | + - amount | + summ + | + Private Company 'Limited' by Shares (Pte. Ltd.) + ), + kek: { + conversationId: i, + users: { + id: i, + nickname, + avatar?, + }[], + }, + surname: b[], +} +`); + }); + it('correctly print model that uses named enum', () => { + const EnumA: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'f', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'b', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const EnumB: EnumTypeDefinitionNode = { + values: [ + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'c', + }, + }, + { + kind: ASTNodeKind.ENUM_VALUE_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'd', + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'B', + }, + kind: ASTNodeKind.ENUM_TYPE_DEFINITION, + }; + + const MyModel: ModelTypeDefinitionNode = { + fields: [ + { + omitted: false, + optional: false, + kind: ASTNodeKind.FIELD_DEFINITION, + name: { + kind: ASTNodeKind.NAME, + value: 'color', + }, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'A', + }, + }, + }, + ], + name: { + kind: ASTNodeKind.NAME, + value: 'MyModel', + }, + strict: false, + kind: ASTNodeKind.MODEL_TYPE_DEFINITION, + description: undefined, + extendsModels: [], + }; + + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [EnumA, MyModel, EnumB], + }; + + const printed = printModels(ast); + + expect(printed).toEqual(dedent` + A ( + f | + b + ) + + MyModel { + color: A, + } + + B ( + c | + d + ) +`); + }); + }); + describe('throw error', () => { + it('should throw error if trying use printModels on ast with EndpointNamespaceTypeDefinition', () => { + const ast = { + kind: ASTNodeKind.DOCUMENT, + definitions: [ + { + kind: ASTNodeKind.ENDPOINT_NAMESPACE_TYPE_DEFINITION, + endpoints: [ + { + kind: ASTNodeKind.ENDPOINT_TYPE_DEFINITION, + verb: { + kind: ASTNodeKind.ENDPOINT_VERB, + name: { kind: ASTNodeKind.NAME, value: 'POST' }, + }, + url: { + kind: ASTNodeKind.ENDPOINT_URL, + name: { kind: ASTNodeKind.NAME, value: '/endpoint' }, + parameters: [ + { + kind: ASTNodeKind.ENDPOINT_PARAMETER, + type: { + kind: ASTNodeKind.ENDPOINT_PARAMETER_BODY, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { kind: ASTNodeKind.NAME, value: 'RequestModel' }, + }, + }, + }, + ], + }, + responses: [ + { + status: { + kind: ASTNodeKind.ENDPOINT_STATUS_CODE, + name: { + kind: ASTNodeKind.NAME, + value: '200', + }, + }, + kind: ASTNodeKind.ENDPOINT_RESPONSE, + type: { + kind: ASTNodeKind.NAMED_TYPE, + name: { + kind: ASTNodeKind.NAME, + value: 'ResponseModel', + }, + }, + }, + ], + }, + ], + }, + ], + }; + + expect(() => printModels(ast)).toThrow(); + }); + }); +}); diff --git a/src/runtypes/specifiedScalarTypes.ts b/src/runtypes/specifiedScalarTypes.ts index 0fe5f41..a4f2c21 100644 --- a/src/runtypes/specifiedScalarTypes.ts +++ b/src/runtypes/specifiedScalarTypes.ts @@ -1,6 +1,6 @@ -export const stringAliases = ['s', 'string']; +export const stringAliases = new Set(['s', 'string']); -export const specifiedScalarTypes = [ +export const specifiedScalarTypes = new Set([ 'i', 'integer', ...stringAliases, @@ -17,4 +17,4 @@ export const specifiedScalarTypes = [ 'text', 'j', 'json', -]; +]); diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 0c70138..7fcd12a 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -1,5 +1 @@ -type $TSFixMe = any; - -type $TSFixMeFunction = (...args: any[]) => any; - type $Maybe = null | undefined | T; diff --git a/temp/openapi.json b/temp/openapi.json index ec21702..429e6b7 100644 --- a/temp/openapi.json +++ b/temp/openapi.json @@ -23,71 +23,59 @@ } }, "paths": { - "/industries": { - "get": { - "summary": "**List** _industries_", - "description": "**List** _industries_", - "operationId": "GET--industries", + "/documents": { + "post": { + "summary": "**Send**", + "description": "**Send**", + "operationId": "POST--documents", "responses": { "200": { "description": "", "schema": { "type": "object", "properties": { - "industries": { - "type": "array", - "items": { - "$ref": "#/definitions/Industry" - } + "document": { + "$ref": "#/definitions/Document" } }, "required": [ - "industries" + "document" ] } } }, - "tags": [ - "`/industries`" + "security": [ + { + "token": [] + } + ], + "parameters": [ + { + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DocumentNew" + }, + "in": "body" + } ] } } }, - "tags": [ - { - "name": "`/industries`" - } - ], "definitions": { - "Document": { - "type": "object" - }, - "PermissionType": { - "enum": [ - "own:companies:write", - "own:documents:write", - "own:conversations:write", - "" - ] - }, - "C": { + "DocumentNew": { "type": "object", "properties": { - "pathParameters": { - "type": "object", - "properties": { - "a": { - "type": "string" - } - }, - "required": [ - "a" - ], - "additionalProperties": false + "id": { + "type": "integer" + }, + "name": { + "type": "string" } }, "required": [ - "pathParameters" + "id", + "name" ] } } diff --git a/temp/spec/endpoints/test.endpoints.tinyspec b/temp/spec/endpoints/test.endpoints.tinyspec index c4abea8..c10dade 100644 --- a/temp/spec/endpoints/test.endpoints.tinyspec +++ b/temp/spec/endpoints/test.endpoints.tinyspec @@ -1,5 +1,4 @@ - -`/industries`: - $L /industries ?branch? - +// **Send** +@token POST /documents DocumentNew + => { document: Document } \ No newline at end of file diff --git a/temp/spec/models/kek.models.tinyspec b/temp/spec/models/kek.models.tinyspec index bbb5ab3..3c0253a 100644 --- a/temp/spec/models/kek.models.tinyspec +++ b/temp/spec/models/kek.models.tinyspec @@ -1,13 +1,8 @@ -Document {} - -PermissionType ( - "own:companies:write" | - own:documents:write | - own:conversations:write | -) +DocumentNew { + name: s, +} -C { - pathParameters: !{ - a: string - } +DocumentNew { + id: i, + name: s, } From cf92cf9df3eccaf57e0251e91a5f1b39da73ba25 Mon Sep 17 00:00:00 2001 From: Whispers12 Date: Sat, 24 Jul 2021 13:28:54 +0400 Subject: [PATCH 66/70] update job name --- .github/workflows/default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml index 6bbaed0..fa95734 100644 --- a/.github/workflows/default.yml +++ b/.github/workflows/default.yml @@ -8,7 +8,7 @@ on: jobs: - build-and-deploy: + build: runs-on: ubuntu-latest steps: - name: Cancel previous workflow runs From 2b43cd5cd2a8f77bcf2c57c1ed8817fce82ca120 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Sat, 24 Jul 2021 13:37:53 +0400 Subject: [PATCH 67/70] docs: fix typo (#129) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0f7eb3a..f3eda7f 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ The main problem we are trying to solve is the verbosity of open API. * **Write less code** - get rid of boileprate in your daily routine. * **Enforce best practices** - use predefined or write your own rules for specs. * **Prettify (WIP)** - format your code without pain. -* **Compilation (WIP)** - the result json fully compatible with openapi specification. +* **Compilation (WIP)** - the result json is fully compatible with openapi specification. From d4131b83e733e1ccab6c10e9e184d2545b85aee4 Mon Sep 17 00:00:00 2001 From: Andrey Frolov <30667180+frolovdev@users.noreply.github.com> Date: Sat, 24 Jul 2021 13:39:31 +0400 Subject: [PATCH 68/70] docs: add table of contents (#130) --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index f3eda7f..bf3d0a4 100644 --- a/readme.md +++ b/readme.md @@ -128,6 +128,8 @@ After } ``` +## Table of contents + ## List of rules [Watch docs](https://frolovdev.github.io/anyspec/modules.html) From 7fc17b19301869bc55ceef8660ab792cc5b28a54 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 24 Jul 2021 17:02:18 +0300 Subject: [PATCH 69/70] rule --- src/runtypes/specifiedScalarTypes.ts | 48 +++++++++++++------ ...ntsUpdateRequestResponseMatch.rule.test.ts | 14 ++++++ ...ndpointsUpdateRequestResponseMatch.rule.ts | 46 ++++++++++++------ src/validation/rules/rulesMap.ts | 3 +- 4 files changed, 81 insertions(+), 30 deletions(-) diff --git a/src/runtypes/specifiedScalarTypes.ts b/src/runtypes/specifiedScalarTypes.ts index a4f2c21..2d83af3 100644 --- a/src/runtypes/specifiedScalarTypes.ts +++ b/src/runtypes/specifiedScalarTypes.ts @@ -1,20 +1,38 @@ export const stringAliases = new Set(['s', 'string']); +export const integerAliases = new Set(['i', 'integer']); +export const booleanAliases = new Set(['b', 'boolean']); +export const objectAliases = new Set(['o', 'object']); +export const floatAliases = new Set(['f', 'float']); +export const dateAliases = new Set(['d', 'date', 'datetime']); +export const textAliases = new Set(['t', 'text']); +export const jsonAliases = new Set(['j', 'json']); + +export const scalarAliases = [ + stringAliases, + integerAliases, + booleanAliases, + objectAliases, + floatAliases, + dateAliases, + textAliases, + jsonAliases, +]; export const specifiedScalarTypes = new Set([ - 'i', - 'integer', + ...integerAliases, ...stringAliases, - 'b', - 'boolean', - 'o', - 'object', - 'f', - 'float', - 'date', - 'd', - 'datetime', - 't', - 'text', - 'j', - 'json', + ...booleanAliases, + ...objectAliases, + ...floatAliases, + ...dateAliases, + ...textAliases, + ...jsonAliases, ]); + +export function getNormalizedScalar(scalar: string): string | undefined { + const scalars = Array.from(scalarAliases.find((alias) => alias.has(scalar)) ?? []); + + if (scalars.length !== 0) { + return scalars[0]; + } +} diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index 418e37d..6927a45 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -58,10 +58,24 @@ PATCH /endpoint ConnectionUpdateRequestBody ConnectionUpdateRequestBody { field, field2: i, + field3: b, + field4: o, + field5: f, + field6: d, + field7: t, + field8: j, + field9: s, } ConnectionResponse { field: string, field2: integer, + field3: boolean, + field4: object, + field5: float, + field6: date, + field7: text, + field8: json, + field8: string, } `; diff --git a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts index d259fab..55a161c 100644 --- a/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts +++ b/src/validation/rules/recommended/endpointsUpdateRequestResponseMatch.rule.ts @@ -1,3 +1,4 @@ +import { getNormalizedScalar } from './../../../runtypes/specifiedScalarTypes'; import { AnySpecError } from '../../../error'; import { ASTNode, @@ -113,21 +114,23 @@ export function endpointsUpdateRequestResponseMatch(context: ValidationContext): }; } -// TODO: get rig of typecasting +// find EndpointTypeDefinitionNode in ancestors function findEndpointTypeDefinitionNode( ancestors: readonly (ASTNode | readonly ASTNode[])[], ): EndpointTypeDefinitionNode { + const isManyASTNodes = (node: ASTNode | readonly ASTNode[]): node is readonly ASTNode[] => + Array.isArray(node); + const [endpointTypeDefinition] = ancestors.filter((ancestor) => { - if (Array.isArray(ancestor)) { + if (isManyASTNodes(ancestor)) { return false; } - return isEndpointTypeDefinitionNode(ancestor as ASTNode); + return isEndpointTypeDefinitionNode(ancestor); }) as EndpointTypeDefinitionNode[]; return endpointTypeDefinition; } -// TODO: get rig of typecasting function findEndpointParameterBodyNode( endpointNode: EndpointTypeDefinitionNode, ): EndpointParameterBodyNode | undefined { @@ -135,11 +138,11 @@ function findEndpointParameterBodyNode( (parameter) => parameter.type.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY, ); - const requestNodeParameterBody = requestNodeParameter?.type as - | EndpointParameterBodyNode - | undefined; + const endpointParameterType = requestNodeParameter.type; - return requestNodeParameterBody; + if (endpointParameterType.kind === ASTNodeKind.ENDPOINT_PARAMETER_BODY) { + return endpointParameterType; + } } function isFieldDefinitionsMatches( @@ -162,17 +165,32 @@ function isFieldDefinitionsMatches( } function isNamedTypesPrimitiveMatch(t1: TypeNode, t2: TypeNode) { - if (t1.kind !== ASTNodeKind.NAMED_TYPE && t2.kind !== ASTNodeKind.NAMED_TYPE) { - // if TypeNodes not Named type not go deeper and compare only kind match + if ( + t1.kind === ASTNodeKind.OBJECT_TYPE_DEFINITION || + t1.kind === ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION || + t1.kind === ASTNodeKind.LIST_TYPE + ) { + // can check only primitive types + // skip this - { field: { model } | ( enum ) | *[] } return true; } if ( - specifiedScalarTypes.includes(t1.name.value ?? '') && - specifiedScalarTypes.includes(t2.name.value ?? '') + t2.kind === ASTNodeKind.OBJECT_TYPE_DEFINITION || + t2.kind === ASTNodeKind.ENUM_INLINE_TYPE_DEFINITION || + t2.kind === ASTNodeKind.LIST_TYPE ) { - return t1.name.value === t2.name.value; + // can check only primitive types + // skip this - { field: { model } | ( enum ) | *[] } + return true; } - return true; + // if no type name its default string type + const t1NameValue = t1.name.value ?? 's'; + const t2NameValue = t2.name.value ?? 's'; + + const normalizedScalar1 = getNormalizedScalar(t1NameValue); + const normalizedScalar2 = getNormalizedScalar(t2NameValue); + + return normalizedScalar1 === normalizedScalar2; } diff --git a/src/validation/rules/rulesMap.ts b/src/validation/rules/rulesMap.ts index e516287..319b987 100644 --- a/src/validation/rules/rulesMap.ts +++ b/src/validation/rules/rulesMap.ts @@ -19,5 +19,6 @@ export const rulesMap: Record ASTVisitor 'recommended/model-body-field-postfix': recommended.recommendedModelBodyFieldPostfix, 'recommended/postfix-for-create-models': recommended.recommendedPostfixForCreateModels, 'recommended/postfix-for-update-models': recommended.recommendedPostfixForUpdateModels, - 'recommended/endpoint-update-request-response-match': recommended.endpointsUpdateRequestResponseMatch, + 'recommended/endpoint-update-request-response-match': + recommended.endpointsUpdateRequestResponseMatch, }; From 16943c2d48937a3b2b8004c1aa0de1979520c85f Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 24 Jul 2021 17:05:26 +0300 Subject: [PATCH 70/70] fix test --- .../__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts index 6927a45..ee731c0 100644 --- a/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts +++ b/src/validation/rules/__tests__/endpointsUpdateRequestResponseMatch.rule.test.ts @@ -75,7 +75,7 @@ PATCH /endpoint ConnectionUpdateRequestBody field6: date, field7: text, field8: json, - field8: string, + field9: string, } `;