From c3755ad68aac6c73cfda8d54762f7a29e65a2e16 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 15 Oct 2024 12:02:57 +0200 Subject: [PATCH 1/2] fix: Support AMD factory with identifier --- .../moduleDeclarationToDefinition.ts | 3 +- .../amdTranspiler/parseModuleDeclaration.ts | 10 +++- .../transpiler/amd/Factory_Identifier.js | 5 ++ .../transpiler/amd/Factory_Literal.js | 1 + .../amdTranspiler/snapshots/transpiler.ts.md | 44 ++++++++++++++++++ .../snapshots/transpiler.ts.snap | Bin 14304 -> 14512 bytes 6 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/transpiler/amd/Factory_Identifier.js create mode 100644 test/fixtures/transpiler/amd/Factory_Literal.js diff --git a/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts b/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts index 9f1fed33a..5afebe574 100644 --- a/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts +++ b/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts @@ -241,7 +241,8 @@ function getModuleBody( ts.isLiteralExpression(moduleDeclaration.factory) || ts.isArrayLiteralExpression(moduleDeclaration.factory) || ts.isObjectLiteralExpression(moduleDeclaration.factory) || - ts.isPropertyAccessExpression(moduleDeclaration.factory)) { + ts.isPropertyAccessExpression(moduleDeclaration.factory) || + ts.isIdentifier(moduleDeclaration.factory)) { // Use factory directly body = [createDefaultExport(nodeFactory, moduleDeclaration.factory)]; } else { // Identifier diff --git a/src/linter/ui5Types/amdTranspiler/parseModuleDeclaration.ts b/src/linter/ui5Types/amdTranspiler/parseModuleDeclaration.ts index 5ed36e7a4..84900aab6 100644 --- a/src/linter/ui5Types/amdTranspiler/parseModuleDeclaration.ts +++ b/src/linter/ui5Types/amdTranspiler/parseModuleDeclaration.ts @@ -46,8 +46,13 @@ export default function parseModuleDeclaration( const sym = checker.getSymbolAtLocation(arg); if (sym?.declarations) { for (const decl of sym.declarations) { - if (ts.isVariableDeclaration(decl)) { - if (decl.initializer) { + if ( + ts.isVariableDeclaration(decl) && decl.initializer + ) { + // Do not use the initializer of a let declaration, as the value might be changed later + if (ts.isVariableDeclarationList(decl.parent) && decl.parent.flags & ts.NodeFlags.Let) { + return arg; + } else { return decl.initializer; } } else if (ts.isParameter(decl)) { @@ -99,6 +104,7 @@ function assertSupportedTypes(args: (ts.Expression | ts.Declaration)[]): DefineC case SyntaxKind.ClassDeclaration: case SyntaxKind.NoSubstitutionTemplateLiteral: case SyntaxKind.PropertyAccessExpression: + case SyntaxKind.Identifier: return; default: throw new UnsupportedModuleError( diff --git a/test/fixtures/transpiler/amd/Factory_Identifier.js b/test/fixtures/transpiler/amd/Factory_Identifier.js new file mode 100644 index 000000000..efe60c58b --- /dev/null +++ b/test/fixtures/transpiler/amd/Factory_Identifier.js @@ -0,0 +1,5 @@ +let foo = "a"; +if (something) { + foo = "b" +} +sap.ui.define([], foo); diff --git a/test/fixtures/transpiler/amd/Factory_Literal.js b/test/fixtures/transpiler/amd/Factory_Literal.js new file mode 100644 index 000000000..4dbb7cd6a --- /dev/null +++ b/test/fixtures/transpiler/amd/Factory_Literal.js @@ -0,0 +1 @@ +sap.ui.define([], 123); diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md index 0d840743e..48b8fcb88 100644 --- a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md +++ b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md @@ -485,6 +485,26 @@ Generated by [AVA](https://avajs.dev). version: 3, } +## Transpile Factory_Literal.js + +> Snapshot 1 + + `export default 123;␊ + //# sourceMappingURL=Factory_Literal.js.map` + +> Snapshot 2 + + { + file: 'Factory_Literal.js', + mappings: 'eAAkB,GAAG', + names: [], + sourceRoot: '', + sources: [ + 'Factory_Literal.js', + ], + version: 3, + } + ## Transpile Factory_MultipleReturns.js > Snapshot 1 @@ -1453,6 +1473,30 @@ Generated by [AVA](https://avajs.dev). version: 3, } +## Transpile Factory_Identifier.js + +> Snapshot 1 + + `let foo = "a";␊ + if (something) {␊ + foo = "b";␊ + }␊ + export default foo;␊ + //# sourceMappingURL=Factory_Identifier.js.map` + +> Snapshot 2 + + { + file: 'Factory_Identifier.js', + mappings: 'AAAA,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,IAAI,SAAS,EAAE,CAAC;IACf,GAAG,GAAG,GAAG,CAAA;AACV,CAAC;eACiB,GAAG', + names: [], + sourceRoot: '', + sources: [ + 'Factory_Identifier.js', + ], + version: 3, + } + ## Transpile sapUiTestGenericUtils.js > Snapshot 1 diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap index b685bfaede13fb2b7c38605eb6475de3526528e6..637d13b27a07db77cbd4acc02e3e5a5486f4f056 100644 GIT binary patch literal 14512 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 O?f(ONoX$IR9{~WSP_AtN From 184e87b1641448da887d91b988d1c53dcbe0426c Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 15 Oct 2024 08:58:17 +0200 Subject: [PATCH 2/2] fix: Add more missing comments after transpiling --- .../moduleDeclarationToDefinition.ts | 14 +++- test/fixtures/transpiler/amd/Comments.js | 5 ++ .../transpiler/amd/Factory_ArrowFunction.js | 2 + .../amd/Factory_ArrowFunctionExpr.js | 3 +- .../amdTranspiler/snapshots/transpiler.ts.md | 77 +++++++++++------- .../snapshots/transpiler.ts.snap | Bin 14512 -> 14636 bytes 6 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 test/fixtures/transpiler/amd/Comments.js diff --git a/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts b/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts index 5afebe574..836ff4fdb 100644 --- a/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts +++ b/src/linter/ui5Types/amdTranspiler/moduleDeclarationToDefinition.ts @@ -225,6 +225,12 @@ function getModuleBody( nodeFactory.createToken(ts.SyntaxKind.DefaultKeyword), ]); body = [classDeclaration]; + + if (ts.isArrowFunction(moduleDeclaration.factory)) { + // TODO: Comment in equalsGreaterThanToken is trailing, but it should be + // moved to classDeclaration as leading comment + moveComments.push([moduleDeclaration.factory.equalsGreaterThanToken, classDeclaration]); + } } catch (err) { if (err instanceof UnsupportedExtendCall) { log.verbose(`Failed to transform extend call: ${err.message}`); @@ -235,7 +241,9 @@ function getModuleBody( } } else { // Export expression directly - body = [createDefaultExport(nodeFactory, moduleDeclaration.factory.body)]; + const defaultExport = createDefaultExport(nodeFactory, moduleDeclaration.factory.body); + body = [defaultExport]; + moveComments.push([moduleDeclaration.factory.body, defaultExport]); } } else if (ts.isClassDeclaration(moduleDeclaration.factory) || ts.isLiteralExpression(moduleDeclaration.factory) || @@ -244,7 +252,9 @@ function getModuleBody( ts.isPropertyAccessExpression(moduleDeclaration.factory) || ts.isIdentifier(moduleDeclaration.factory)) { // Use factory directly - body = [createDefaultExport(nodeFactory, moduleDeclaration.factory)]; + const defaultExport = createDefaultExport(nodeFactory, moduleDeclaration.factory); + body = [defaultExport]; + moveComments.push([moduleDeclaration.factory, defaultExport]); } else { // Identifier throw new Error(`FIXME: Unsupported factory type ${ts.SyntaxKind[moduleDeclaration.factory.kind]} at ` + toPosStr(moduleDeclaration.factory)); diff --git a/test/fixtures/transpiler/amd/Comments.js b/test/fixtures/transpiler/amd/Comments.js new file mode 100644 index 000000000..57b5f9194 --- /dev/null +++ b/test/fixtures/transpiler/amd/Comments.js @@ -0,0 +1,5 @@ +// This comment should be at the beginning of the file after transpiling +sap.ui.define(["sap/ui/core/Control"], function(Control) { + // This comment should be after the Control import statement after transpiling +}); +// This comment should be at the end of the file after transpiling diff --git a/test/fixtures/transpiler/amd/Factory_ArrowFunction.js b/test/fixtures/transpiler/amd/Factory_ArrowFunction.js index 2dd8e7957..459913f35 100644 --- a/test/fixtures/transpiler/amd/Factory_ArrowFunction.js +++ b/test/fixtures/transpiler/amd/Factory_ArrowFunction.js @@ -1,5 +1,7 @@ const factory = (Controller) => { + // This comment should be above the "class" statement of MyController after transpiling return Controller.extend("MyController", {}); + // This comment should be below the "class" statement of MyController after transpiling }; sap.ui.define( diff --git a/test/fixtures/transpiler/amd/Factory_ArrowFunctionExpr.js b/test/fixtures/transpiler/amd/Factory_ArrowFunctionExpr.js index 7b8a92d08..d5855406d 100644 --- a/test/fixtures/transpiler/amd/Factory_ArrowFunctionExpr.js +++ b/test/fixtures/transpiler/amd/Factory_ArrowFunctionExpr.js @@ -1 +1,2 @@ -sap.ui.define(["sap/ui/core/mvc/Controller"], (Controller) => Controller.extend("MyController", {})); +sap.ui.define(["sap/ui/core/mvc/Controller"], (Controller) => /* This comment should be above the "class" statement of MyController after transpiling */ Controller.extend("MyController", {})); +/* This comment should be below the "class" statement of MyController after transpiling */ diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md index 48b8fcb88..4dca240d6 100644 --- a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md +++ b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.md @@ -4,6 +4,26 @@ The actual snapshot is saved in `transpiler.ts.snap`. Generated by [AVA](https://avajs.dev). +## Transpile Comments.js + +> Snapshot 1 + + `import Control from "sap/ui/core/Control";␊ + //# sourceMappingURL=Comments.js.map` + +> Snapshot 2 + + { + file: 'Comments.js', + mappings: 'OACgD,OAAO,MAAxC,qBAAqB', + names: [], + sourceRoot: '', + sources: [ + 'Comments.js', + ], + version: 3, + } + ## Transpile Dependencies.js > Snapshot 1 @@ -183,15 +203,16 @@ Generated by [AVA](https://avajs.dev). `import Controller from "sap/ui/core/mvc/Controller";␊ import "sap/ui/core/UIComponent";␊ import "sap/ui/core/routing/History";␊ + // This comment should be above the "class" statement of MyController after transpiling␊ export default class MyController_1 extends Controller {␊ - }␊ + } // This comment should be below the "class" statement of MyController after transpiling␊ //# sourceMappingURL=Factory_ArrowFunction.js.map` > Snapshot 2 { file: 'Factory_ArrowFunction.js', - mappings: 'OAAiB,UAAU,MAMzB,4BAA4B;OAC5B,yBAAyB;OACzB,6BAA6B;4CAPvB,UAAU', + mappings: 'OAAiB,UAAU,MAQzB,4BAA4B;OAC5B,yBAAyB;OACzB,6BAA6B;;4CARvB,UAAU', names: [], sourceRoot: '', sources: [ @@ -206,14 +227,14 @@ Generated by [AVA](https://avajs.dev). `import Controller from "sap/ui/core/mvc/Controller";␊ export default class MyController_1 extends Controller {␊ - }␊ + } /* This comment should be above the "class" statement of MyController after transpiling */␊ //# sourceMappingURL=Factory_ArrowFunctionExpr.js.map` > Snapshot 2 { file: 'Factory_ArrowFunctionExpr.js', - mappings: 'OAA+C,UAAU,MAA1C,4BAA4B;4CAAoB,UAAU', + mappings: 'OAA+C,UAAU,MAA1C,4BAA4B;4CAA8G,UAAU', names: [], sourceRoot: '', sources: [ @@ -485,6 +506,30 @@ Generated by [AVA](https://avajs.dev). version: 3, } +## Transpile Factory_Identifier.js + +> Snapshot 1 + + `let foo = "a";␊ + if (something) {␊ + foo = "b";␊ + }␊ + export default foo;␊ + //# sourceMappingURL=Factory_Identifier.js.map` + +> Snapshot 2 + + { + file: 'Factory_Identifier.js', + mappings: 'AAAA,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,IAAI,SAAS,EAAE,CAAC;IACf,GAAG,GAAG,GAAG,CAAA;AACV,CAAC;eACiB,GAAG', + names: [], + sourceRoot: '', + sources: [ + 'Factory_Identifier.js', + ], + version: 3, + } + ## Transpile Factory_Literal.js > Snapshot 1 @@ -1473,30 +1518,6 @@ Generated by [AVA](https://avajs.dev). version: 3, } -## Transpile Factory_Identifier.js - -> Snapshot 1 - - `let foo = "a";␊ - if (something) {␊ - foo = "b";␊ - }␊ - export default foo;␊ - //# sourceMappingURL=Factory_Identifier.js.map` - -> Snapshot 2 - - { - file: 'Factory_Identifier.js', - mappings: 'AAAA,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,IAAI,SAAS,EAAE,CAAC;IACf,GAAG,GAAG,GAAG,CAAA;AACV,CAAC;eACiB,GAAG', - names: [], - sourceRoot: '', - sources: [ - 'Factory_Identifier.js', - ], - version: 3, - } - ## Transpile sapUiTestGenericUtils.js > Snapshot 1 diff --git a/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap b/test/lib/linter/amdTranspiler/snapshots/transpiler.ts.snap index 637d13b27a07db77cbd4acc02e3e5a5486f4f056..145d86a49784e01594c11d5e24014e9d78cc88c7 100644 GIT binary patch literal 14636 zcmV+{In%~LRzVNPD$&QagbdTLyJmGwLC2pJ{HGv+)$ zz+It*(jSWm00000000B+eG8Bz$yHeP?CJJy5uAjylF$OmYoXho+gA6^%>G-WBfGk1 zws&`S_P;x~EUTLCoax%FuIjC-o|)dg5eN*}SSEzcM;MF&+X_Tr2tMW~^9?x&8>27| z0^=VR#{9wj!3g{zKUJAomDN?t1@4{eEHtXmoHzw{ML=fWm8DUwCT6vT^w1)1<~@<(}y=6#ekUn^%#s*(k3fv|3(4 zXvZi&sw4EM4ho-9D124{fUw|e9J7bx;102VUvu4nzXG)4NvYyNRwiEc;1>3L%XR4Q zr^r9guui`Qd7e2e%!E(RJ@*`;*38QV0NzsoN}&Tvp+lfh0EO3*R)CHcoFjHVORz)( z_p#H#PTRtIw)kn8EoOcQaK595%Qbm+X&qzOlUXD!#YC4dTkY?vg-4CR=wXCI%dym>sWTJP*8aG4?~{qU^_55|Iz1S?a-F# z!A=Nx2p6G)w_(E!aA~%(iGv$f50_@)JK#KATwH|5;Y+Y++WoFsgy&#!9a9)F-hFZi zLI}68w|)+844iggxehGN^7rJ=!@s%BggFG+& zf=*Ju7y$5x0Dxx;030g-(3nzEkBmSjYmU0QiqQ5_G)MK9q&ezTBbuWgG}#=rijXVb z?lj7qb%ZwSbnbGRV(w~BDidF{4|CT)EdcNxW6xcqs2a+}LW*2mc7rRPyJdB7=YEs& z-F-HmS}FM^MN0l2(9S$&rz1~1J7qZ3Og=mC7#xl@!;C^z=Hx%saq?FI0G=uUaHIgh zVgZ0#Q*!cbZq%~)`X)xGP1N-|)8kZy(|L#LcA?R)BEzmr(}>Xjp~CM(`o2L~bTBDz zfAv1__74;Q_?Khzc78gCoc=i}oPNvnv^@R$3Qzy?t5x%}?#puWQ#v`>0Ra3O0N{TE z0Nz#r;LMbA@&*kOSrW0bii|V$P}4US>O#{Stx%;mu7!HuxD>rJBrV^vB`tq@Qc3Xl zK@vV#0N|U)mINIoInQqkmSX8$RL*}o5{UKSgBO~PQLHyWnzZMCbKl4*Q< z4G(-Am6DiO*IFtQD;<*A_X9fi^#A}r0s#0q0Kgvs0A4#K`+mC8d=}##T}5cKS?<*l z>eZ={(kwqR5PD?P&KSrzY4A^!vyM&5lFR$Rl6Cd((FxQ5 z06;9=uluXH;D-tT{M?iR^|~?5qnY0T#5c8EzK+m!B2wMu@~JvPr>NckNcgPIHp|EB z2py;IePQ{}HP}3X(ei^OVkBKITXlr2dbGs0>uga?YlyWzZBSjMM|PMazhwSe_AJ)v z$x07|mv<#H**0P(+wV`R6<)g!OZ2%J08Wp+L{AKHs2GYuF)W$w!1adrk>|PFOI&*N z3gX)p1@R4q#FUjeQwd?uw&9c#o;wIEXR~_V@(H$ds{!8VT0U$ur#AGv?!fNAbqvjQ zcMHRyi(!#Ye?{mAW`JoacLS~rC4|k50DCat)UcdQ{RAr4(N3Ra)`aOOtz+BWo){&q z{zw})d1C%iogUc*0Q?s|DIYEXP?=JXyd@2jtU3DKt5o>u0&4|beOxb}s3UZO8kZ+! zOY?C(R5Y~{2D-Mz>QGr*nN&!veVDqx>aSpa&Dc|SD*ZxXeIY|wn>&5&dTOokoFcGb zGJ%~&AYR-T8HF!a$B+q59$7BFLnjyS0|5LhE*t*`0PyB1<>IqPVUr~rZ(l{|m=Veb znlnP#IAI`kW?2ZpsYwOk+CB)tb^(Chu?1ixp+X^mNg=44zSUlFI|CbQ*?$Ho?EeQ- z%~umRA^2RSDW06oLbG`g1j>T1S7oo#{?<7XbKp0f3nq0FKN|C+~047??y);)R^p{pu@t$J)HjzOiBqk62%%P zF?)SGR77+78Jj7rc+r@?V&11zJTmO)e0aEyA3zf>!nv9jsd+6@tlBzUg!5(ChKq1v z&j_}VpI{4m+%zRm@*NiTQbWk7*2|}s5IVI~ zL#TOrN%CTa)8erPn;g&75n3>!n$5t_6eio3%eV9Z2!w{+;1JH#k%9R0CJ8SSpp7dk zPT|~)#%%DRA+`6=5bf1mxj}<87~6WS9W&5!lNO*;`u$05fhYT53w+BA03RCL78uP@ zns6GW{B0}fx`W`d+0z;XcYav02fkyU_L($=Dol5jp6t%1xWGsBLtd?aG%X(H;{bp^ z0|1cN-1%waVMZX6wOD^CeX|Kmdrfg~bi~w@AFocjkniooLjLa;0Qlhe(Jv!tsM(SV zOE-J{V5sHY(@G%v>_{dGp~#%$r0t`8EdbyvM`P1nP*ew${jsopnC+t#j74?I?8q=yIoX1nFsqQ!T6 z_?Br8@Elx(#SPa@ewkN2Y_n5)^oVV3wP6njCLt_blzeTL6JT${Y-9f%ysLQNY-`;! zyaa_N&Tt59^u_zLa1p-e^PY%LyYG=`c3iGC&pz~U&~-a= zN8>E~wl(I1M?a{oMg zE6x){=LEna438R-J}5tRdr?W^abr^9=U&1N*$fwg{QG*bc4#-w zfg7%y!E_2fGS~grw3Xoh1pvH>A3M4_CD$F+qLIaR9fS~yhpC8|5JXPdiTH5ky!D2r z1|l_Xg=f4Ct4_ZpH0D?g`u=@j(C;Y#@PlJBsGh_lJhGRp0DGp^MR#XKVb7Oh+%`AA zkil&Nw#;g~Xx%8XkLgDHF1+lz4XNTF5xfw>GIe$FC#g3qQzCgDL9B)gw;g)MHsS5*{V`S#i;ILMO}R zZH6ZmzK>2SwIAOHsU^WCpEhCo9OByD*Hrqa9QZ9ILAGm;QwB4NiJV=}XIeDP2n?9}%0?V$_FUcvKzAio4EyL_Upg2-8Tm48HTm44> z!0!V9K9gt0*%P*kW0J*Igv|8$DR;X^5a7@lUipaA8t5+}H;;{JRAJzIt*t zj1zB!m#6JIo%@!xp^shrW5wqD)mNv}Qzn7T@ZXo_4WRH7UR2ec<=6ECBF7^F3^r?CFVU!AP4F>F4ZmUo$?iuw%zz@Y*FZ=W{r zatwhSI{td3<1hE~arng@iNouYa`+eS1BZWU0f4_Ve(L2I(KM--!x9g!4zM?5fk0aB z{!xXyzboW!R!`;Zplf-ZzUc+S>Vrq*v*22?yo^%xksnD`We~&DCZtRmJ|SCTBrUV) z6=CMGGu9WGSAQohYw~M3kCMI3FPt`Oatb0@JnOP^Ct-f2t%j6$>6l2R^njhaCQH!; z`TU7^5}AxeI%E2zW-_MSx;rVGf5Seo`HvL<_~_Vdo<{Fv4nMXhkb1W2k>Vn0$9H8D z2VD7vLUCot0Q2Z;x}~e-P^JA$C!5FJus_2Wh)++Oa!+YKiyNOO83uSjCeP~?dhF+< zILLQQ%0Fly_=h-8?D3QBDRj|90f_ITveV!BOGQQgE?~P_y{Iw?iqB3$zcQp5=-1qV zS0riUi@f<_?T~NwD+8<2!5fx?O9F5?oi|6Osn;+r55`Z`v075d8)AN100Id)`pyCX zA1eUx>(d4xXwk^p3;T0GBM@To;6h_glY^etP0K;g0Em1V2pQca#^PWulIoO78a*(|UrlaQQCZk*bcH_&U}XnO*;3+A{E`_@)loBYfku%fJ`{ zS-knq5!dhV>kQ^&SMDrK%BQRQz^6e0fXCyn`(jkmm^7DNw;yWI5tn!TtiqZ<7QdFD zBpvT#ELb{PscyLL(b>q>s03Z?lz2(y?AuX)&~9VjKRR23yHbU=8MM3l8rbt(kCm^b zrsCE1O}0_)rP(NZnUD9d7L6<$v!S+qe#s;>G!K8AFqChHPh7QtxO*m3szXr-agnd&GL z`2Cq284!38eo~&7;lIRZW(kD%t?*yUZ7d{=mwipd5S#t`Jrdn?$u&uA)0~1x^uAa- zlt^J3;2n~=;5@c%7v6R~yHhOlWBAzjOKHdK6D`ixNZvEHg7e|PVKUQ^JR~enz};e{ z+H(4Xpm?tgOY|w0(jeXxD^pAT&LNK|!HGGd1S4olqE$^}rD8=Q>n!Vh(DmGHADRxN zR#lX#uF|*7Hbz0I*yan`G-r^?eUc_Q@Ijp>@c{roIRn5i&H(TUGTBa`v(9R9vF8Pi3y3uI1LMs0Kav!{ZM~iEt^q-lWZ zR-qBsm3%SmYls_no|mO=(zzgYQhLv2Hz3Pqn`YF+o%dwk3#%C_d0qRnY3BbQ6aaW; z27ni505GOZnE3_`5?QMEc3~B@9tp*{Q)j9dqw_2|%H{M#)=}0F^0h6Aw#eZUs<(xN z+TE-Zy&GG^#$5a{rJ`Q`7sd^k^wf(^Z6tGG2X#dYU9citTOOSWE=cELh~J4+x}`-% z@~1|1y5jO#cC*d;q<;PP?!!v@pUeR8;jvfJI;PTit>UHhv6pMlT~(A-{W-3zRurRj zm^j<^sqdfq{;BVOjlU1~tp#!u27KWKSSp35N+U~yZ}WxcNq1+%BD~g1V^t!1`z)Uz zImfzT+CGl&Cz2>9niatIF+J@%4*Vpr#}wFx>y8Dd%D!Vh6(yj z&x4Eb?j%6U6E%IWc8H{J*fPo0g5z-muQxwtMR<(lTjZ5V=EQeS)GW!4$V}bws`GRw z+;=Ga9zr^Z=OY_p2uU|qsm`Qtkete=CgqCL z({RO^NyoNJtfr~-2h&x%hdQowRzJG(hiBN_g_E>YJG9|?utfT3!9{qy1}*rm@p=fY zW5+^_Cz1BM);+2m!`O}uXRb62JOWJK6rB)8?NDj_;hqgs)NVLL1tsHECPs#*XIOtQ z7bT^oSx?VR1d=U~CsOJ6_~c2E3PalI|0S&Sf|jGFlcOb)1d|W8Yj%`He+tYLxH`0U zB_@3lZej;}X5e~Z;7Qcl(86|SV$LNlm=5myWX6?MWQ~4l^FMhO7WnJ~wbC0+HKx|bJoztlCfdRg=Gwhqr_ZI5&)wXSGh zUR}|Z+^p+>Zs@42YhL^Eq7J8vOSYP=kk)D6=0<4F!h z=;Q^v83iFfG}67C#Q&GL?HYx*U5E9S{Ag#Txe!GKH_vOrl#kU%HdZyV8+#O0Y(ADl zf8;DbP43rKPoR(%?xdy!s$C>dvkBtlAjr@NlR-C63Rmid^tKUdHpE3oqlt7f2az5M z1iZwKTS%Xbj*j1s($PmFpkLMTRV$URny5J^1)7tmMwD%PITzi?R$q=5=S6?IqoF0K zlZ5tA;2(%+`3vfvgEe{->>TX2E#&XC9F;H58DzIJ4qLY(Igd(SQ5(y{$Nd~F9v3~U zruJ-E-Dt^Z_HmA8kBMgc4N0NtFDgs!?-)^PdR^GiI4V!>bXa6xlqlm&(Lr^iY47@* zL4HF^?btz>*u0`{rH_NmPJU$eOO_1OJp0#0X2%hu4ARlI&xk%cLX7C_;EwLu=^Q-V z6S_Lot}SF-$~no>!sqh@sGumPAQ6gD)7qHAw~U%Q6st?D$yi`@jC-@$VIjwmSdC~% zf`$ZLO)5p8xufU5ogDMunR=vUY+aQ0WocZf5R-lrIK4e?n<=*#6NF?tzHg0%9c?zG zVa+LD<1msz>?2iSU5MF7`%6`+qg>f=mBQ}c4$bh*(I#QC%Si;3E|c#|S+u;0jK?_u z9}_)u3~_#)#68@KsLB_3^mL@?S%zdzWbC%MvAgFzi(OjO3Qu$pX!9c)ThlSf)eHs^ z(I+H)gfU3Wu;5{gt?=@sQ4_-?JQB%{EdNPcRkj$y8jpDvgz$DI`5Jmv@#>=uW3f6& zy|149UMeGW9!nkG8`zWzI0Ux5N;+NTouRX2>-xx6 z<3k%wD~)u^RMC-JoFw$_Cqa@tGEFXtYGx~Fw;6Hb<0jKqqiLc#EOeS=^hjuFLZh#K z;P8ZDTmSy>-iK}d*C3z_f zgcm+<_M)OjnNlZu6f++=;qgx3nQfB!iM!J8V}{=Sxf1rgSGCh|B(YyAUsyD0y8I*#S#I<1AsNEM5Ji%9hGz&z;XMm!;x;EoZd%a^zj?W|EO&tjiiu_zIm2Zvg=QIRN0J0DxcP*DOsV!>>=E zkaaxvO(bhvB($i>*Kc&#KX=kO^4vbmk@pJ#;IU7^CJ8d)2oo!lGDAMSq|A_~pUz;I zPrdupyHD1;>`3>_cVR?(bhbGPSC8II5{n*H9u;V=21ASXXiRI4fMXHD8`ZrRi|QR! zSBlk*wM|Y7Zkcvzwj`osQ+qUC=&Jyuk82g0cB2C4as8yjOcUoa%5S!Q9-g97(U+8JVkYur2wl4q#>HQ6gAVYYuX{9I$?m- zjp(Il`>cr6x|4ibj-W3;5CtzpwY4vG)VLS{YH7o~qV8UtkJd@vQW(%>hJH)BCiMM-EPW{#=@7M{HwU@!WOG z+0;8?zgt;meoN?xWhsbmnCtSDsWf2*eWzwe8d&7gQ*7UV;JeQK3)fdKuh5@z#er3& zWvZl1H7b*qc%x?y*D-A>k#>W=C0DM>DAF83hU;u$FMxr|^E*Of+R_pc1hOiiZ)Rg> zTL|a~Ee<}lV`{P^Zh{kYougdwaX^dG6xvb6(yW||BWL;yF?{j{&5g7Tnjybn=X(nP z{LEf$&u_0MD^1! zg{Ic9Sc?*H(CD8{1EI}E^yw^DHJX}|V$|H>%^+Mw##u3OF0rR5i^XqE>Z^KsAAFm~ zW&oI*d_PAF?uh*yUMR&|b?6g{8u{%gvDz?x@3O`bAPUXrDYTHM(1|>SPUb0eDo>%) zc?zA$Q|N4-LUYG+mC8l)xm-k_%SH9MTx6fiMfbT}grCbr`MF%ApUXx2`CPQ0&&Th% zXg{Be_Vc-DKc9>C^SNk0pNsbMxoAJ1i}nk-Xupt)_6zxxO)lCmnw-F2Dk;!W9#ct$@{}8rzKm6rlw=}NhNK(IvJO;&9J&33AKoM@>NG$6!o+@f8jT@Vy*s(w#R3=d@_`YD^1$HPfvK-p zxaJaPaOnkt4dJ?LO5Rr-xq-Q_J?5Ros+*YJ=aVR85;8~MlTLPVz(y(A9An=g=^%D^ z<+e;FLWi+-3leaf3Jp~9Y)wX<5#1MsST~f;H0@^jQC-=>arSki!6&(;DIhP`Mg!~p zsEvl8A@y1HSXb*3+R8DrJFE^Vbh;kzTj-jtiOq3tj&|vXD7W#``NvBdw$?q z0KV?oi9#4*xoYi_wJwTq+(|bKa%VPQX({&~ zV?U^FvT{{z`RrRZsxQ8H2)+nEKN$9L2XDY9F74ZHXkwE#D!h#fT^zNX4VP9S%OmUs zL-@oGJj>bKW!JvZ8%S?-F~06K+Uy3DS4eY1_V z1fiT2s|-JXV4ZxYhY3+g23c9qWPry@bO$ih%b=<&*9;SKl zJ8*pnecSZA*q@E=ff4P7J-Xe+PT07FuH}b(VmckE4U04ocoyEm9k^wg&Pmal!$ll!fX7J7n3*+NDb&=-?g_aXOnf@gzsv*9sKT*fZkQ5 zWgwHou#?ruwLlA=lh({<{tKDApCDvF>VVRdw-k+0rwZg}? zRQ-ZVb+ZhM)#7Y?N0x`)Nlo69FCM0_;y8x;!TwBS$y6w7i*jXmj^U**Lp9hr%{@X9eleVP%ld;-@*f%CNoeuO=sEVh>^^HQ zEaKN?NE($~QshI^wy93@T$^ExeHwZ|^aa%^(56ay7)oM7kA@TG-5!~HuaLL?JxHFJ zcWc9HLs}LG*z;4>uw1>u+vKwy`=KhQsJcd%Xib3%8(G8bo9mWs1s3*Wjk<{fto^q1 zCY%yD$&%d>)L8A4X8n7drPxf+b?uH1HwGR#BtxKVSertVM^M&X*T$wJfvH$d+a7c< zw+;M7x+`*zD1Qnn5QIAFL(EG_vmkMOS{>|>`M`(U*tRQ^Y5KeOa_M@9?39>8La?#5 zzMoY4$hNtuq$q!B{K_z-RXps*zhtd*&8=awno_nWkAJK}l0o1rufQj}Dg=|={uK@s zaylX6WZ&qXC>)|oS_vQ1;88;H;fcc`h3L#En$h1z55)v{$y%>aM}0_}S$2J_sK}|4 zrY}u{D~rWQK3|GdMJOHcoPuchM|a&)_&RN_lG+O&Ni%IT2r;dMOrLAk(!txX>;QWu z*|cCC88wNL;H@rhKP0^(l8B+{VQOGRRB$~Zkmi6{i))mOWqA&ll78J>tHHg-0HE_^pUo;5O+4cBX$?QSVJ-TPC`%vjcb(0;5Fic2Lr9beyCAKb(j7pAfSw?79LmvgKp8OO%@4X&?j_^>7 zEl0Fs+IA_4J{MM5=yRHCd4P{FCd4BLC8JPE=nyl~?>d{>swG~D3UnPC2`71z6i+u5 zyo8}BRAI~C=NFZuJEI0gG`<&@Jpa6e3pe>jw=X0yA_*5rT{Bm2I#xjE*HST>3tYz@ zs!B&%>d}RLQMQnYBzr-c#L^9OX|r69o3d@L`(uq%+=nc*qa25G*Sc2`u9Rc22z`uu zJ_(Lp$MGHwd}4FNJ5?#dW2x!zIM1- zJIvu5ptg|Z&=+K2{DBofvJHIQlrD&v$ND!sYz7#bk?}7kDM*}l9q2mJ zB7m7biYcsL59D`lu@%=1VNA;?FzS(LXvYssC$Ok*N!!wdroWqfIl|iaJnZ+~4p~=+ z=*H3Mnf+bZyN-i^Y+%FaA?}VE5aI?dY_kyvv;;_)=DEq*q6BN>*h(b{o7vV33l4GB z<6zFk{S9Ruy~?7yvbYnirK9c(FX(_&7zQbJYI=nbFM&clKArs0@Gvc8Vxh5VKOI6+ zY;F*5B^kX9%eIxpGk3v~&vXIA*0m(aX)ung>_V46DWb96b$u+iv55nUL&CB7Ne~OC zlN1ZaT?9kkohuRUGINEU)$&*3)=~ijE=F`Bewq~=m}EnvG)sOVTWYN|TaGFYV~e{n zxKtuNU89xZ)-5u$H{9zuAdyIf-bH$rl`U1}(Y-JtWL<;Vol8CY&uo|x65=v@WQy|REC^?0bxH}V=M z+G-FQ&3|Z-dt~7{Zkq$2YMzIVyX`>B_Xn7+f2<8cjnExLg(9vJNjH5aiF_%<8cJA1 z+R==4D$PHt7lh^xT`gV1rtdnHuIaCCJ0ZAy&83+;8q!LGF$!cJdtRg6qVZR_b1xd) zO$>ytbHuvNL*&bDV02Aq6B8p2k@auOu>$zQ3kfWyX@zKZ>|MsV<6q~@7tPCi+|;UL z4@Hk|S!Ug$dQrz2L^*pHF!Wwx;vN{sr7HEj!UX>U7vFZ26R^tlQMNN!DZ7 z?2tJ=GF3>oT(5(@IGn(R=9X)b9cYLh0*OrW*lc&>`zVktlH&jp7UqVvNf=K{F+ona zO>w2;iv56^CWJh+NsF}D8BiS_hr+QUYXfdNvt>KQI|5%Jt$7i|I1p;}z-^N;*3m7? zx7KZZl;fb3P7$@+=-TDh<>hlwux;d(AU==44cUS*g9Z)GUgZYf35ZBiAf{-Ia3PTqLIMqFy$PJ8T~V}B z)K8u39yT8)KP5ZG9TwT03M;hQOkw5iT2pqKl^HS#jnlb6265v&RePNm@@c zW8+F#Sx!&Tke)N>qBfDINcypp=gn6kkUOWaYbrPzEKhB8UX_2?A#(CRZYP?m#` z>#cy>sKj#akVr#rG?}(N)V8eI+8D>Fp_BQ&82eF<4$Tg=#*&F+#&)dp6qI(b$sy=* ztDH;Q%Ot!U23}VzzZFgmeo-@2kiz{Vmm&Dq`EO5-)kPd z1^wewxf;$@fbTZMK6T@uH6mh5K|y)R1?TN%eWl`Wv%4Jfah zY5leu+gyPSmuySW<)_%sdWIahLKMF7SKPSH#0?reoRAxi0yZJatR$b%jDr#ppYXo$Em zpN0wBUCZu-d!gs}R)61f*KOP@v&|b1cLr_h0U=SWZFdWM<|ZNPy2kL$?=hq7l3(hn z3Q3j;xDweT*P0qE9L5WfqvWydW>h_=957EiaU>lwKk}QpL*}~xfM<>X@U|lWpd$dh zd}O*q=5I;EBr})mTUU{}#txsYpi5qz9qFx;Y@_GHT%;GOb$Wo)C$C$#*`c%*biN;* z0$fGQkLvV9=_7Kb!O}vbJZ~U0Z;(W%52IV18vQ0ck4Z9n-l(y^7Fuo5`|HS$Wz<@h zZp92QW@1MuY4KHbahV-J6)C`Ok|){)`jeqS&NKGqgks{@94$|eO0LnPmGm<`qepwj zyP;+{OnFON)t$dSVP8x<%~;IDQ@(D=VqNAq@>94#>D|xw@wc%Mg)=&5siv> zv!vMQ)|s?pSY{Kzd6Wc3P4Qh*##7A@1K1d!$&hs;|^0twR|(2JQU zJ=bV*1#!4Gc1|{Sd{}&-<4mQI3~@CrD&= z&3R(l^5eQxGNvg>MVd?`JU}f}C1uQ52L;E*KB!VnbCR5Fh8z}S3URVo-1RK(*wJO6 zB?z8vC{z>RR3uoBjW`7ImghCloi&#cje$=e6j{;c0m^UP9I1wg_;E&2uSJUs71fAq zLf-Mf^dEjy8RSTogBpq>`ytSDOE_huz5MP&3Fn6!mmn}5>Zl2R03G+ zpD3$E`B4L*M~&JEGPy68-4;TwJkkX5otEhJQj%KXbhZ|8st{5#2_*=uodH+TDxd$D zsVGrU^oM4ZsY`alRb&J_X$=1+KkJ5$uop)&Q7T3~^_qCnmdB;ij4tI`BSu6l>ugN# zgq6dLAuS?)YWG8{bV;$)sP+`OEEu{JQX{TNh4K~V0{uyI?AAl(G3FX!3$$7q&7#B> zQAKA-YAvRdk2euIPA(g5K3JBLvrru_@KlFD&chqCOoZ-lQZ*|fMr6~gmrtEX=+t>C zz2_AJH&I^}*g0cVS(-_MKIy+}CcU#uA#Mq~U#-XV1?L@7Y()UMlCpBpKg&Pq6&L~JE#)XbU#GcTsNI~WJV^|;U60XxYe}d^+T9D%xC_lGrT|sJ*@i?N zk#&Y!>GXM6kFwwBfW|Un5ulz7RAeP0K%GpWv8hC(ewig9;}A1Lbr5x{zgPmW2=?QK zjwo>pN&wU8e^tSs6wgYc9)YQ<&Eg4ZHYFHD;mG|_Mdsy@t@r|T*g|O7V&d6~bN5yG zsUa~EopS`5y5SK2&?Mn3yLTgmhU8>biel>4%O@HLooJ9BCmZGY214`n$3mlg+(76! zEjDMUU)%;lF8$GOgxSxTaWQNlG^Af1H_F=$gtqCAokrO*==~FGG+&x-9AkzVn*pvx~Zf|rAAhE@@yfPL#&%a{e89}tv*G;*b?e0 zwPo~HF3H3vXd<3ss##h1UuP?%H9BL{{_%M*yjf)}CMiUdJ~qmOCPD*xb^R7wZpX{& zO+fB3;tL_SiICf*zxqvm!))!wdP5;y(E;M~D)}|10+P&r`Z>q~HQz*No`G6umWg^B zM&D$>k-^B+p$wM3F)|71)}!lkm~kW~s^qktW`9t?`nRzsq3hJ4>5nuF#AKfzzDAp! zUS{99#hMU|Y=BhdK3Gz~WY6Jb7T8(JQJyK=_^M$kE@`^CN&IuBfzX)-?XbNpD7=(n z&d3ZhCNT)u9ifXOBgaVCyE0(jpa7WmF*aFXFyNOl(=uzPQ z@HJ#qn-X2roQqOT+3=6~I}}6ax>z%xZpJ!79YO0_!$;Nhp(+_YizU`^bSPzhaqIMc zHJx%1MwFPP=#$?>$d~W&pi9;j;S#(i`oj50=XH;*o5XfNQ?U^Hjk481$YS#Fpb<6G zyp|#lkD3TQVyf3`N_guqQCY-O+=7E8ga%8BRV^m;sJ)KX*B4_bjSKRm(iTNVu)!Lg zgkuaT%yCBK-ZDZx=AU<#%MULh^zag?>0FA{OnSwI*Tvke&Wcu=?GKz+WsH?dqf*SCjkK0uUU}* literal 14512 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