From 870e495479541556016fd27d63f85581128b7626 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 22 Feb 2021 16:33:14 +0100 Subject: [PATCH 01/16] Doc: Describe "Generate Constructor" refactoring action Fix entry in the change log to use the correct action name. Also fix the entry above to use the action name. Task-number: QTCREATORBUG-25162 Change-Id: Iebc2c6634c7bdc51ab97bb48ecce081e4000eccb Reviewed-by: Christian Kandeler --- dist/changes-4.15.0.md | 5 +++-- .../qtcreator-refactoring-constructor.png | Bin 0 -> 14432 bytes .../src/editors/creator-code-refactoring.qdoc | 19 ++++++++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 doc/qtcreator/images/qtcreator-refactoring-constructor.png diff --git a/dist/changes-4.15.0.md b/dist/changes-4.15.0.md index 0063b200108..8c9140cd2f2 100644 --- a/dist/changes-4.15.0.md +++ b/dist/changes-4.15.0.md @@ -33,8 +33,9 @@ Editing ### C++ -* Added options for generation of getters and setters (QTCREATORBUG-1532) -* Added `Create Constructor` refactoring operation +* Added `Create Getter and Setter Member Functions` refactoring action + (QTCREATORBUG-1532) +* Added `Generate Constructor` refactoring action * Added filtering of `Find Usages` based on access type (QTCREATORBUG-19373) * Added `Open in Editor` and `Open Type Hierarchy` to context menu on items in type hierarchy diff --git a/doc/qtcreator/images/qtcreator-refactoring-constructor.png b/doc/qtcreator/images/qtcreator-refactoring-constructor.png new file mode 100644 index 0000000000000000000000000000000000000000..57d0bd7fd61ce8ac95cf82ec4b5f81dce08096ab GIT binary patch literal 14432 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index 19f6f53a6e9..e6194918701 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -184,7 +184,8 @@ \section1 Creating Functions You can apply refactoring actions to implement member functions, insert - virtual functions of base classes, and greate getter and setter functions. + virtual functions of base classes, create getter and setter functions, + and generate constructors. \section2 Implementing Member Functions @@ -217,6 +218,16 @@ for member variables or only a getter or setter. \image qtcreator-refactoring-getters-and-setters.png "Getters and Setters dialog" + + \section2 Generating Constructors + + You can apply the \uicontrol {Generate Constructor} refactoring action to + create a public, protected, or private constructor for a class. Select the + class members to initialize in the constructor. Drag and drop the parameters + to specify their order in the constructor. + + \image qtcreator-refactoring-constructor.png "Constructor dialog" + \endif \section1 Summary of Refactoring Actions @@ -668,6 +679,10 @@ \li Creates either both getter and setter member functions for member variables or only a getter or setter. \li Member variable in class definition + \row + \li Generate Constructor + \li Creates a constructor for a class. + \li Class definition \row \li Move Function Definition \li Moves a function definition to the implementation file, outside From 3f773cb1e5f2885c420702bc8533a950a78bd229 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 4 Feb 2021 11:31:26 +0100 Subject: [PATCH 02/16] LanguageClient: avoid sending message to server shutting down Send the workspace change method before the server gets shut down. Prevents an assert in Client::sendContent. Change-Id: Iaedc9829379d987aa6f91a87e26d35b64a9f0f55 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 795f67fe050..7d1c657ca86 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -790,6 +790,15 @@ void Client::projectOpened(ProjectExplorer::Project *project) void Client::projectClosed(ProjectExplorer::Project *project) { + if (sendWorkspceFolderChanges()) { + WorkspaceFoldersChangeEvent event; + event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()), + project->displayName())}); + DidChangeWorkspaceFoldersParams params; + params.setEvent(event); + DidChangeWorkspaceFoldersNotification change(params); + sendContent(change); + } if (project == m_project) { if (m_state == Initialized) { shutdown(); @@ -798,15 +807,6 @@ void Client::projectClosed(ProjectExplorer::Project *project) emit finished(); } } - if (!sendWorkspceFolderChanges()) - return; - WorkspaceFoldersChangeEvent event; - event.setRemoved({WorkSpaceFolder(DocumentUri::fromFilePath(project->projectDirectory()), - project->displayName())}); - DidChangeWorkspaceFoldersParams params; - params.setEvent(event); - DidChangeWorkspaceFoldersNotification change(params); - sendContent(change); } void Client::setSupportedLanguage(const LanguageFilter &filter) @@ -1260,6 +1260,8 @@ void Client::shutDownCallback(const ShutdownRequest::Response &shutdownResponse) bool Client::sendWorkspceFolderChanges() const { + if (!reachable()) + return false; if (m_dynamicCapabilities.isRegistered( DidChangeWorkspaceFoldersNotification::methodName).value_or(false)) { return true; From 1dafabdb87eb1cf038a86cd84e958607549697d9 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 22 Feb 2021 17:09:08 +0100 Subject: [PATCH 03/16] Doc: Describe filtering search results for symbol usage - Use the current name for the menu item in change log: Find References to Symbol Under Cursor - Update screenshots Task-number: QTCREATORBUG-25162 Change-Id: I3c46561c91c01f2d33039cb4431cd6b88d163e68 Reviewed-by: Christian Kandeler --- dist/changes-4.15.0.md | 3 ++- ...find-references-to-symbol-under-cursor.png | Bin 0 -> 7483 bytes .../images/qtcreator-refactoring-find.png | Bin 9887 -> 6988 bytes .../images/qtcreator-refactoring-replace.png | Bin 70727 -> 18222 bytes .../images/qtcreator-search-cpp-symbols.png | Bin 8088 -> 8730 bytes .../src/editors/creator-code-refactoring.qdoc | 6 ++++++ 6 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png diff --git a/dist/changes-4.15.0.md b/dist/changes-4.15.0.md index 8c9140cd2f2..1ae6ebcdb4a 100644 --- a/dist/changes-4.15.0.md +++ b/dist/changes-4.15.0.md @@ -36,7 +36,8 @@ Editing * Added `Create Getter and Setter Member Functions` refactoring action (QTCREATORBUG-1532) * Added `Generate Constructor` refactoring action -* Added filtering of `Find Usages` based on access type (QTCREATORBUG-19373) +* Added filtering of `Find References to Symbol Under Cursor` based on access + type (QTCREATORBUG-19373) * Added `Open in Editor` and `Open Type Hierarchy` to context menu on items in type hierarchy * Added highlighting of previous class when navigating in type hierarchy diff --git a/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png b/doc/qtcreator/images/qtcreator-find-references-to-symbol-under-cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ad158b183843838902289a105c310082f854d2 GIT binary patch literal 7483 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 DT7t3r literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-refactoring-find.png b/doc/qtcreator/images/qtcreator-refactoring-find.png index d2524de7ec1bcaf567a6e19f2c83eb84abcdaafe..5cf396361e2b5237316eddd7b86c6742967fdc08 100644 GIT binary patch literal 6988 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 literal 9887 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 WB>|uJo!BM>(&y>w=d#Wzp$PyjwfkWJ literal 70727 zcmeAS@N?(olHy`uVBq!ia0y~yV5(tYV0g^I#K6EXK_PA*1EUC^r;B4q#jQ7cQ>Vy; zZ_~T+|M}V3rkm5w-ueCP+@5#0bAFd?zpZh4+R>wDBF~&Tb7pCfp)m-gCx(R?Ij5$E zg{3{6(-Cq?b&HC3-s!Hrc2kx7=X6*&KJVUp{@(9DX%#6cMOjrvSzHJ8xgV@MbLQN+ zb7%MPIs9GuGIN7&5u>1jL&F2{j{6PuDngwf5;-P%)Wpx~I{w&yXUxKYihov2uYy;G zY|v#CbP;f5nHWFMVF~xY!?hAkN0a>h{O)xxYbx7xGskXz{WmM7SCdaZiT`KmWzSvE zq41qa(8bQ+XM=~h#+T2ZKTAtXJKV1geDA#cay?h(!$J$Df1%kzAJ@C@`Xhd#+I`mp zt7L;2&CSdk8um1v*z3R|*iv%;!&g;7&z9|(}Rd?^515TGq-1|P))m6Sq{eR#ct5V0GM;_l<{1K)?M#nKy6V%@@!#vFdH8&t_rTCHi2-7o|(86FaJ_ zt8eZ4wX^c4j@aj|oh@$x&+4C>hT_JELj~3$`-FXfR4K-Z;ME|+bpwBef*UE&=IO()KK?W$0kTC^iz+We^#V{P_yu>Df|H}S-jgUjn}qLhMWUU?c8%)a~3 zLuS6Ye|Chc2=S-yn$1;YY+QVLnVCU~(aZL`F?W}i1m4oWU|}uW>6Ld;_%pZh)SoHQJEh}hNrV{JW}KedEY<qANu*L zzOJlX78@>ifA!h_50w(c+HPn6PTOE1)Vjg^%DqdL8@;ATCOFvIH2NG^^WDtce{FKd z1>O2jcT!J_sO9gva#u?ut0H4neZs>TPD&5v=P5UO+>4(pF)!|baG#oWmD{szA5tC_ z&-#5ij!|v0p_SFM=khyt@Ah7NaS1=C)2U5_-~>mS;X4rt-+&LyVCLU z8H@5C9tEeCINbmDpyI*px?8_*iJNcD$u)VebwmAJ;(}8Rq6hR2$}3IeF;ivSr7Uz} z0ZT~+i&FFH`e4%H4#-2LMmraN6?XxrGU3+1}hr@@P z!_9X#yD{c&tzun&(JkZtfy?n{`#hRn9xj*2zwLd)>QEquzH;o!%19<|g@n#0K}D_( zCvThR3v0x@a+)z~WBoaUXeG;>{(t9=ZQr|g@47A7(@!;RiPP%!zj^wbc{p!=;)er! zmjx{N?b*m7c_%k=Y`AeO?3hfr!~tzc>R!tUoLCYlu*to!MCEeT)Y1NuYKU+ zCBe^Q0pG&=1*EGhd{A0_%OQ)tS6cq}1 zm^xi_i`*N@EpfkIJ-qkg-ldEyA3HgxOguTax=1hYowc=fLOaJxrKS_o60aQCy=z(- zl^v80BraOAMMv9OUETb>;kpTWoql&Sul;uU=lH+xNz>Nq7RC2#pRnA1^(x!aB`hgo z_tVC88nwE<%U^U({kw}PUpKe*_=m2kEA#mGMsuxl(~Ptf`*wE~xq0vh&*O+{McmrwYWImTkEGcJazZdh4e}+?zOAa^j6` zO|w_=e$$hG=@(S?#lIl@=iU7OpXbHJ)Vg=h?%T9!QBc-#vlkurW>myG?OO1E?%dg* zxjD9ME#6RE!o(K+Qk?6<>ZA)VH#n7jVp?sL5}J4W!0Qr$tm%b3O7BExvzM`Vd=uy{ zmQ|?We^_qlAH8J0QtX1$eSN*^_CBm{tZi+DrKeArG>dP-gc%{>_Ziws@6TH1y`W%) zw_%kV-^A2nYwN$3^UP(MX0P_%Jn7YQ^Xk7_LashFP2$?TcHQ5%|9}3NF!Ua`{(n1`WQxh zxw}(g_Uw@$U z%1O#zxAA9sE-E5=b@z_Y`NE0msi`7=3OK8`-JJU7Rn7wK^79AGQyFVxB>SBf`h>hc zxs*@%+36VHzfDqHUcsBI{8s#4dG6D95m8$sspHX~bieYNY%S@&rG9zN{{Q{#opIi*BsZKs-L!9Mt;_uIWImJT-u~L>)_X=8TY#1 zuq=5k7CHTKeoDeMvz>D@etwlVZBkF${d+lID)QO{bF)6bs`cNL#j{D(#zF78S!xa|2+#AEmi%0w*K!?qbU!_)g`o@-B1CJlb>4Y|%f(eCbD;|Bue^oh$pk_E%xT#UmyEPq5W$ zo|T#!vzsAeqotvxqx98QGH^j=P?7q#yp7y&U`iA(|Ypi!d zKfj5Ix^>Ii?&dt*F7B)Q|9&j}-L%cd+En`e&a0gPzMm&d*;P@md-=tzgNGO@zrI*^ z?S}sTYb#%^*tBo)vp55?{9Wws_$aFJR`mt?iah?&TQs)E^Bk&)YPkg z4th+Qzq0h5p3g3mUpWWfz8BrPb>A-^n}c7^_Ej(S++IhuiS#hN{k%du@SygRFODk~2PXYbNv~P4dwG9-=xqnT8LJCV z83^BhzN~V0mbZ`OS*Mf7r%l~8qso0jrqG)c&f3|}73`lcXwnpGKlp6UrS&@mY~Q^& zS;AMno4Yjn-tM%Cr=MTQRGw3%3|jttkm)9RF+P3z3FWB#0@sq1g?d|6J-yVlg{W^F2f8VL7h;;?7Kh*O!*w7pu>9(e+Hf_H{L7~@Ckz=zmrElz# zzO(OLz_sv)X>aDcq{*pD-)2`AVc&7jPfl^ZoaxQ`MLK%E0R?^c4(HpsM6#!R6^@%< z(r7AOW0CgsiJ0hghUD-%N5KdSE2~M%x*a{l1zqBfuDWymI{%)?-|TEJOrlatOC1tU z{5f>U`^}k#lIz#5B_};@JX(@hCnpimI6col|GnsEqls=YS*P??%17T{-|1%Qz9dA& z;`B>)pZ79)XLzR3({v=t0ulvpK&j6lmA?|_wRZ`R!B*T z`R06e+4X8>+S^Z!&zRP1OTKqM`+0A|hP#!!rX7sEe0ZZ7R~6&b>fPLbnVYv-_A(dS z+IiJqDfH(lG`zy4k=e8T$FJWL)}6Z%{cT}x>czCGD%IH6&1Xern{B6=|97_DH`i_H z-qO!TKcXb1rLVh7zI-A1LUMu0mXgWAK^J%LKJc2QCFsdB@s#IJ7+XKJ+Db8&moybi zt5|#$W?&4CTkFn}&X{x2H{0T?nbTjbcaieX(vO!M+%EJWb^}isw&! zja&0eeah`ZSf9?l=q}oQ(O1xX&L6JFe{@ZiS4&&9J*(Oy`oH6orzd}TaLM`GH)ee? z`gu-s?{3XwZbx_S*n1-E^2K_|!!!6Fmny}M2|2ftLD8^8uP77^S51j zvn$B!`YWI3&R1%`K5F|mZQsLrIqU6f*UL#g__o*Y$Q`fVXU{)nZtc~JlKM82mp5~s zSX*av?afo)OHZlyf15sw%iH>PlvP%c&i+4}9lt-UYTKH(=*%7-wrvMpKb(DWQ(1n| z_m6M+eb!Y^{jg(3#oyWgcVrs-Ei?al^8RMtbsGBq+#7>0^{mz{x?KK2_QeW=kgNUL z?|aI2z6>{skxyOrAmB>en}j!Sr@nlf{4gLS{y~BF!Hu<MmpK5;Gh zM0W{yZI(%0*8^ zr(QW5v-`UF=a^p8tyg>l4_?)6cKtb#^K7?`-t&ZIcb)(DE#i8W=osmeRCD~(yO2n? zl$y_sv)v9gi&q-nw%t+0arS9Y^(N<>nl7`jDA~YOUS3>b3vc?edfr;KD$6R*_w()5 ze}B4te^RQOySH}LGWFB8aw6;XeUDhI(pvr7)~96m`b8_(zP-M)@WVCJ*n)Qp*!w%Z z8RiOJD47~^<^3tmkdRPDZ>Hvh59WV7aNIGh?47rVID7v&Chd)}@+MZ?cP7QB-jI}- zw%c6s{_07tHW&Km@6Gg|sORyKxxUL$?WO{?~5#RWgT_%}*g%V5X)2UD(YG>FPxucg2K$<2-K zk*_NR=1kgN>XW=-g|A@Sti;k1v)?Jz24^ll+4(GW#bWj+p7->)jDkZ#0;idKWzIc% zSyJRu(!Ox7@0avA_uZ}d;kYY`Y5Qb{rE>jKTvwdd*4ET&op#Q^P&o10u2osD-gTP3 zX7}#AcIwnKwX(K-vfb^)y_scgzl!G9*KmJ*(BS*lw|uwu`ZYZJ)^)vdI`eLIX4dZ1 zFBc_O^REr$e>F|<^QWoZ4i7g)l$;6(T@zi#-h7zl`BKq)N1o)Q@BV$=M~1US{LA8# zZ&s}MqS7xtzpljJ@1o)|uG&4~3xC_&|8(uz4S!E#J>Nxm(3&_HWjYJyT+T%_W` z`Ktmvgij~WkCpb@NZ9D$hR&qJFjIZW|19mG|PUH$r z;E!=qaaf#@z$=pD!E|r-1a(!Jl^%=_*+ot;&twT}7Hf=cDBa}X%rw)j)y8?@3BMDf zlR2)oe`Efw?40^QAZ5`SnLiADN(vc*N3?_%IK-~x*7zE@b^H6hJm+LHCL9o7xnaeQ z9ZN(QT6h?L>pt1wt6(76(|2xN&zU#VC+qR?Nk-Wom{}$)r1o)w__x!KOE`Djw4LL~ zu9!WIf#dhisq;2DAF@Libi zyUeB5;Drvi5BJMH`Oe2%)_lCpspioxn`kD{L+tF)PU{W@JmK9VyyBpXQil4U9Yzv4 zcU+w3&0oHF*(A4!dnOZ|7u!{>Svf&|@0XR!oZ`-=2vqC*PTEx@_`qzkMv2wrJvS41 z=U&&_qWa_&PrMS-#Ixf5Popw+wdFiK@36&?)%J0Ao$jVw|B7Qw=`68gFFaCy{AJ)> z?CkfuK!d^emzQI&y61i6A7>e6JM6n~fwgh({)1e9Ccmv*{9In@)Z4djC#OBHdj}d& zb%{H&JLvI+U{(G4$J@4Tn;U!Ac=M*lXVWIn=09`#z~rAZdqVU%^J^T}Jm_~3c(ndn zO_lk1Znr&~E-t?Rqg-}5ch0*_0a{`|gfw;a`8j!+pY6D@qoSPu{iRJs0*`+z{>}cy za&PzRI}K9*KW$@r$G~%U3)j`Ei|t2(mvBe1%FJ+V5O{O4MzJ#Jz^(G>6S@93RsX#+ zn`6G5V1L{zxtVv5p4z8Auk$i%Mzf2{2ONYPiwd4`t-?r z_O5bH9-|{s=WVX;c)sQHOXkKOPvp;W_g6paIm!MyIN6w6;sy7N279|1^Q9v0SgHwf z>gRtfzSsJE-l^zaQy1hm+^T;Qr_jWql;6JG-*3a>4xJWx^u6*B^9cr~FAv0P{TrV1 z#v}?HarzTEN!jUNV@SgDw9PYlF8O;!eSP$~Dagw)>-A!ds0DX|?-#YLDOa)oyw`zc zBEN4#Xz#Zr4okGJ&Z_^)D;$Ju{vI!sV98>A0fta?iRMjg)s+T zbFAP$vuwxemlNwIDt(=ORJrL6w~N5f15eB!3r}WecmMsneSg)Px3V&FO`M^92M$$V zjB@y!ATyDTDKk!TfgM|Ot-hbYv4ia&9w>fiVq{|J|2TW%#fe9co;-S#lV!h+kDl&c zvvqgQp8U>!Vy{~R!$J1O`)BlhJXI8Svx*&D&#i87uY1{}d-InmIW#aF^gopU?Ah`M zdhaC;uIEsH{(SfC+lRTi?|OUN?vK#XbE?;z^7OQ~PSJG%1&0rc42pN-ub0_4NvAj(G>H3y{^OdjXY>n?GlqAG?QF&@=t* z-U@Z5Z#=WOqA{EnO`7u@z|%3 zvrq16?eLkN{#p5NsddVi$$Pvf%sJ=BWBzc*40ZSY>&=9&sDE3wiaq@Lo3mf?lCG_< zSQKk}T=-SubF)NmrMOs$HwWg*#T1HHeGA%i_IaB}jmxe>?nQNadnO%u^@*wFGgrJX zgZ{jrzG-O}bvArCBDH~kV@bXKP3Z{Lr*Fh%g}@>ACxs!j>$BFWOIH&uDppTkU7}_c zeQTb4N=!n0Zt(`8G1_OkcS{dcAu^fG>@<$BU4Wa(3v9Wwm- z!Vg%Re3Xxzs@un1I#cQ4)))UCZl6EXZLZh3h`VL~fB*lnIr?#ni__%V#|#$?ee16O z{}a9cAL|ZDm&l!4DpewXpL|>ReUI1aX;xY4=F=a%m)+B|XXB<>PqwX)=4)Lm^wBFm z^`~BT{5DI+GEKSpzi+GG?d`SHls#0WI4$PQmuZ!jmX@q)J~E$Nk|s_u(06q@&^mpR z`zaj-H^ZFIdqo)Are0dwVlZcIvAPUzxcEGKu?_4|?ruSDzjwLlG--UjsCO{0<$3>= zfwH8&}KBZ}>S+ zWwFhk9#*-{a-P@rJLYJp#v0WsMn3MldB!rKZd-?Sdup@Po4sv23a&F9SoVSKK;Nld zK}t_u9dqR_0pN>B}`snXE z_GMbLzKe?XR)0J$zGNLoxva4A-Z}FazZEWRZ=AGkk)v_d%L=tqw-rA;X!^?cjyJOC z*0b{9yH*$WrdC&)-FLt4rL3WEYWee_Sih2DD7)Iyq?_EKp8o_B&DIIFJ{S6xwYPb3 z_r{5@)*kp}$G6X1+3T{8yYKZoNliYoo}pZ8G+v$ddKnQT7_^(ICodx-Yq~%0xhpKQ zqcaxIiA@XpbvN|?efyekr72ZDQ8m}ZzCTG(IvDY?Z(HaAss0)x$<${_&sJ33wplqr zS8ZSD)bD~XnZ8X)Tgk+IIqxr2elef+@*+u5tzi+(#mo=>`(RoHJPopl2itb&_gov2awLjNCd79*} zut;?7=NY?aXW!l}A;qpEbV2&{Y-@>W4o9r!WJ}&n_!zg2m;X44Kaz54vvCVD~c zf|VREl^hx#@P=yUtew~ycrPKc=Vtl3!l&sI{#DgfR%$$1BUETC@#opmpTGXSv+!on zEXw)BBW2s9n%~{(&H1ao&||&QCC8tN?+Qfr?(ev-{b{0c?!6gyHaGXQ?40a67D!&gzl=fA-EHlZ3@DV;=85$Il|L*~x2r$DQj@b7h_`SiCf0TJ)@| zdks!2@^6XNd^tx_+|k5uA_u#z=+wPSm)w5zLQFj1+4Ar6x95m^C~IqHa8@s}x_tf7 zz57#SCyOt?bhfu?nt#-v{8iW1^_l&c@j^Pf>Sk?ybolwpPi9wNQ@nlpar>O7e_#GE zc<*tB_4C{bdb=$hPMa;ZR6fWf8aGc~Hc#l*t!r{wQ}*ns33w(nCDi5cm7{8GdUF0Y zTTJBAFaA>6x9_b~{hmq7(xog6<}6$Or}AKezi-b@=c?@dg?=feVbf+_J^ZTe7mIWA z0iQD`rGCpCznOiqr+DA@r}dVi+qN$~adX+U;7(J%@3K~EU3YV?d}6Dfb?EGw=5BUv zoqbon-H-DO{>gT=s;O@E6y}NVe*IeGQF5}~h2h6Ui)jmM|GQmM;Whi(mBIdZp+qJs%|FzsH&spC2C|R}NKE~eb;vvq+#FBq+weYPNnX^H&y)QAB zJo0{BG2!VXjij$fBdZAie^3AAD|TM^_3i)P z@A;yaZdYBGp1W^vo%``i>+{vlf1aIx_3V`Wf0q~iW&Abeg2eN*gv=!m=FMnyGp~4g z-|=Pb>(~n?#2NQaYkK?n@ALfsZ>^dC&ur}r;V)HPo3Gon`Q(<31@i5OwjO=l_`+d2 zyY&mM?)>))-n^?Ty__+pEmb#dmG+&gB`@=)-l|zD?K9aR(RIejn`=Eg3pQQa@%3*w zR~(~Ut0x3=Q>AD4Mu@yr%m6YW!{uew&@Uw>KFkURFt<2Mt-qnF8t&W(NXU`|MYgm8&= zy=2WA4wWwxGvY(d`NOrZ-sW??>-;n8--Tzj`=sQy>R$AF_iMHgW39rOyB2%49dowd z>!$J@|_O~i-FR|Xf&5ZfY;eMrJ7AM2mH)7?|voaq^d@7iD;w4Y;zmSV}jywId zw=ZJi(410 z%AFWdqbA__qk7{vyPvtAOIObG^Gx2d*eu#~cjUY!_Kqj@@?(m+G`%(0>Sdv*O&c=@kG`$GHIObO5m?U|FdLw(KJRTlD_qyPVy?VFhDyd~+?g|?R4 zc?*|?ZD;!u-p3H1Q5d_mz2$B1uE)WFHwBj!2Zx@%8T3z>_39Um&He8dr*WKSxwP#8 z(F{`o)_TXedFp=p1rr#w3$ja z9{sxI+OLxG&r9Y>YQCJLSHPRLYCDsb^!Dx5QL7%^{&vu>(p}f{;=H4m3T z@-Ae-;yc;=7dI94-oH0b`_rUie&4vbHS!TJ_)T{&lX~zzeVzElOSdMr1Q~VCVtl^v zk;T4XagFttZOj8+tj>^%^;zntyUygwH1oG_rrfOmS^mChTXUyH{_lqJ)VQ>(x8uz7 z?4y=#{Ql!jt4e+9@wP&PRWoYdf1khm*rgWhR!1)@Ma{QsMJpYbZTl9;%5N$Y)OGC^ zb7;>V_hXyy%7jX}RR_%pxx=-~%2<@y>#~vWS|ROMUCmRs+6ryow*7;#rpDuHU1McW zv-=Y1+j^gBOS`1W%TK+1ckBBZTHm(?duQfqd^g|LrSW?8=4t(!ljm%`RiAyO=7*n$ zIM360hYndky%3S}V%f**Hol=}ihp;-?z{N$%q#iXv*yludzSN(IfqWZhx^J^roO&E zv@5sC&iCA=ou66N6SyET;!wuEPOnS*S|VSS*>5W3F6tNZ-eDd4>w4YqnR6x`60iS# z%_OU2!zCX(sTp=|L0|uPNoDL$f+SnPY}RnWrbFpIcN@vqkhgoHmx&5zr$^}j_*$C(?N9}Pn; zTn#Py;B9Hw-W0&^?!B5@>b%^}0O#gD|7kX#(#1aix_swrY3WqnzsegEo)noJb8tU= z<4$JJo^lJ3^voqKMP(W%R;G2CXDvRHvsT3JpZxXH-@ds{3A490jg58fzp`dqki9Xp zDf9OWzG7`g(&E3?ojL8onQx%4kvDA*cdc_w-nNhy5g%Poz3;1%uin)ptJ@DFMYg z`@XD?5@%YkW4K)ZZt!t~I$58y`|f3BWlW0+e7O9_T<4md>o1y~pY*LLT-vyQhJ}1+ zrS9~$NmG8mo2q=Z?^fK$m_NIkH+p9L=5yM`A)rtpy`b=V*BRcai@Y`^*VDxf9f2zj%ybx>AXALGq!f` z#bsV$dHtT^+}Te>BGCg;rEvG0~{d;xZvPMrn-s^X- znQiiYzhJ^W!>M(*e)$P5A*LDi}DL&lTy+bzBhP$Ri#zeTN?w+(42TwuX9QI?mV%e*e zG%s0dsh4JLnC~O^Ha9ETn{PXtae6<$%A1LADxNPl3ff!vJYFL% zB=~>I;iQc_{!i`=aU!+wfXBKC^{3cg-;iOv(fWZW?pagSbepW=O>(^%z^vpS@DIp{_uW;ep1jb$#Usp)elxu-9<7tiWUUSx! zyqL_WZ;;YBE6DXlq3@iMGa_-WZQ>FexLl^@s`iSc9$vj-la)?n#`~+z38}kP58U&( zbk`_#qi0H_&xVlekN(ZcR4Dwg(kO1$p_lPYheV(LldS*Z-WGr6wYv7t>6Ky(`WIXPVPLzl#1;QPWZ) zsNnG7A;ZbNf3!=UFTOZ!+BCPBJ_pvwbO<(@ow9veRQW((;?dKB9UoS0=iw87aWegZ z#QLpQU#?_0!`M@yuk6skpcu>YUUNf|VOf2BQqiX5x_$4(`)=O6H+3qboqVrN3x|M$ zgU9#jY;$z-m71nApNiuw+H}C;*GqwJ{+2_w2JY{p+Z`IjI{E5Xem1qWJ@)_eJ(nli zER0MoCI3rrN&oOx(|`M}FDK_qZr(TL3d?QV*tTtFKX`w8)8pg^+;VG%MBYpo_jBA!Ls97%)4vRyeiHO42({@);sTVdGzSpHzl^s`}gnPyuaV=!{&z{ z3dCcIO{%)i->^{#L!K(Ggh({$~RgHJ|u3P6*jOxyD z^92Px{%G7$FUiCrZ}BoI<)U}KZN~Gbxd-(0%0B;0SDHBE|1=gKd-i7ws;zf7EniW+ zp0)dE*&(K;s`=53GbBI!$dqJ%aO2I_sZ%HJ-MjVf-KonNxDINGW&b@@taMh%sVcon z`d#Jk>3j#1Qa9@f)iJ$y>X)B>TD1A5TwM4ANq&9D1D{@V+(^mJW-NT=*6`rE*RD%8 z0Xh;_ruXM`{+O-vuJ6Yubt!(&O*Xy(4Qn2h^ww_sf5}cT;&v6o%O=gIEDbt8m-DbS zpM2PPRADl+bkwxYEq|PJtR8PzH_cvK<<3LH#ws-%d+VnL^TUO6>Z;U4K3F95H*qtb z;5u00XnH|*|Natgr;6a9pgnu{`X(}Rx3;z>T-uxNIo+XRO~u0ulZ03IYd+d-cW6B> zq9K&iFlW*1+07NF?pY@Yu5sDYeP8;{9VxYse5vfJUM{PBJJq~S6;(P5r@Zs&onLW^ayEOY2-yjJ8`R6G3B z+oCUZb3M|QzU43fk|iRt>cnGhKK(h(Vd}eAaCA-3n!WIQVe50f_^oej@15inzHDx8 z>9g4PeD1k8uM@TWQ){)N)-RcNz;1pCYr?1SR{`nC*Z(YRV1Jf#H!C+|?p@WU2N&Ee zr5Xy(MeO+6H*FoSO!MhP@6U3LCC!&|1p4a=EYj2e9E-?Z-?Z)N!H+LPd87sO_cZb5 zGlnzP@2o!UY<$~7?s36}%mQKerv;YwZ@jlq{dWTiepajoY?u+qm)K z_3PI!Uab7_Vd0k7^@cC?WaalyDCzHKe5rSmt=!N%RWJVkU+G$AR!iRQ!bwxaXBHIs zW(oy}&H2`X(}eMbjRYPMykAvM+oqx0~^j ze)-Qi+PCi>P56|My+eCPMP}+4o`b`ZmaeK7X61;Km0mAwe`~7zZ;yi zK!ZacUaQ4&727@h_I`f}-?wYKKhKTNR=*?tD5dS-@nx0)MceKtqzZ|+hy~5x@<1@< z*mL2VZQ*MxD`rmh&zg1Ya#<9c)$eOoO#8O?TTi}F{pkG;5z~WSX8%~PrOhZ|;AEeb!U>A|45V^4%G@84hj`-`*Pnk(aXF5j~` z*x{tiJO>9_N81^NoL;!E?^+J=$&|4XquY9hn)$)!J37Cf%~EH+m`8qq1`cOJk&k2J61>Jw*pDyWV=y^Wn=DzLmN5s{P-t z{BEzl`OB^4?fi?XSH6kZOK(_}RrPL;-PO?N;?G_R&7OMg{;vzCPwq*}l-!`1W^(TK zWh(>g`A4RwZ8{d~mzyrNHJ%itD^Xf3NqqE9^L*|5{h_UjF$D7xm}f zpLpT-<-==iYyY(Im8;&_XJYTI?%w}zZs<+sKSh^PnbcU#7(7m=_RRYKdDph=4U3n} zDN7Oj%HvhZ`EjkllAR)qlZ{Sz*6Im3oiylY3n&W{?S3%XNrgdkt-j*kA5JVcXR}Ul zkhE-F@QQWI-JK66dK@nSwL(DUkjkeg%+Y^cKCCjnt+U?p2)F8$zw;!ti*sYy|L=Tz zb6rfVaq*PCM{oZ;eLR^@{q+k8n>r)&fa7N(P8wSAZ%`|?@Ot@AmRI?^<(pS&$sHS8 z`xa(%%qnJy{&_9?lg(u{G5_>QvXi>bop(24I;3iaaE`?XfRDB5%5=9ybD(f`&}Uwm@%n#-L1)Ap^JHmkAp`@99p zad)-%FSFF#o%W<*ll7xjrNMz$6}G3BZO}M&;)KKHQ^^T6ryM_S-~apf*9Aw|4G*?% zw)o~2-t}(pZ>_e4$rbn9%A3|ro!a^*_U;8Q8}}b}M(;j;+}PjGf1xltE9=1dckl8J z>`3UaQdDHTF>~(Rx$Cn&*f*B&t6z%k(NVfy{;Notck{7pKdO&jvtko0yjH$HKv$>x zdgzbU@kNtXALN~WDzP(T^Kt{dE3bB+4`B5ET)C^L{-c-ArhR|aW8d$1rITHIIYnmQ z%|mYbDwq8JU7lU2n{4!&jcm%%3jL>1SeU zR(xy?ataJ{n-hBR!X4GE_kujn>0Sza{@MRcv)qrUnrAT=y7InX{d8jX%Ytou{T92A z=zm?(R;gL@@8sQocPDBz@80k-AmizMcHeKKs>=us4DY ztUpEe8%>aVRr&hz{^+Ir*N?1@QrQ;t-D++A?(1K!+?e?)rR3~2mYa)gR!4t+v;RUz z)LhN5ABVQ^`But%Zr{IOeu8#Dfv%2DR(AH%)|D$)wzaiQn>H;kFE78d#E{$d+x*%u zOYhv>|62WebLFgXZ=U-9Pj%U?r)=Drni{&On>}lCtNgi5#%FUB(s} z`jM1nvzI^QdbzhkJbzoL+Yl(;!=v%0=~D^ZT0z@5y)Y~|&xo0}EI_4dm@&E@$F`_%qk`n2nG^PM{~r=?Db zZJfQKR{DREvT?zZSBVBM9N2A{m4%%;XIMQea6bCdu`p~>c}OOEd+n5r<%`oFr>!q_ zjw?3<7CH;BxXgT}i zD}Rg+gfV-5w|&iaQ0Bm^XX_pxsjcvMzw+i^xykQZ?$)lqca%{+y8X|ym0u*d`*-O+ zDrwxjvwgRJ#nBHJ%hE4Aum2Ts{K%_Y^?xs}FI#RMdURkXr%%dDPJW!M zwr%THR@HUu*5!AW@V8B#GxzVQik>`i|MqET-%fUGU+=@L`9N=e-kKiO+g7i2g!y;L zMMb4-->P1pKjpq^O!xl9`S{l>T=4fzmHVOKHcCI2E_N-aheb?B0`YQH)26*OqOYc(3%MoZ7UDr(dtE+Mc&X?+eSz zn#U8Pw{P6rG_&Js*wvi4`zpE9eRDjYr!9}2a7$+2Uwe^BuQ+GBn*YDO-?fiFe_OkS zq^nQA>Yb~_v39ps@&7)zZ%cHO=8n~`w-oF%{&wL<>$B8b9WSRpGhN-Tu+si}iutM7 z!%{sj;~pgC{rxCkrs-Z%Gi&**W%Ysi<hm=vb;q8(f^`3xbEmp_ z{?3@PbeZ$9h}cQ9+{+v%H9EV*g>UO$wyO5jooDC5>euznbE>=_)AF*s%G3GoOQ~7^ zj{er>eP$k;{d;z-?v~_J)|>9?_%P3o@|yFm&7|{W^RxJw*K_tvU&0-;o|&1su~L%f zK9g1DhX;<%&deJ5d3k1LW^8$9!kHJ>bG(g6hCkNBi&Hf z*xc^6gNxWT
0a*EAx_$!e8T=CUCS?R;OKb`9=-pu+i@SFCHx35ZG&uFwfS+=j; z^$lnJe#L;F(>Bd{rMq^~N=`$Y(vOMVm)-aO?iTWL_VzYSuW+;K70*<&Q#tW`Msdu< zEP3mI*vD@!?Aq5U-4PVHXWhc8)5fOTZSJ~-yE|UIP?%HrCDf^H-Gp@!9q%{pd1vGB zO#WMX=1;XXdcEv3G9yyIOfCywmM*?}(*g6ib8hj=PQ_lo_K!_CeRj(gcD3?Yw(rO8 zzW;B#t4!&BZ0K3b+_dEO4R;@}P!x~Z>*d5>;-3>7;WVQdTu@zqxA)Awm43aa6dC93 zjyTi3QA1+pp}wP1FEn1iej)zdME%yEm-EX-N&>evtJu^ks%~C5smkcfh1kgR$E?f_ zzIV`>AR}^X*2~Dc05I+Rs|CJVWr~f`v8>B%jeCwz(W`mMadzUJH>FqZTj^Y#a^msi z&eeJyr)BPlbDnHnXw~=g^z%8re{L)|sC=USX-U0>wz29h*LU*q_pSuFFa7>Lc$-zg z{r~mmB3sVH3QvFeJlIsQHFmGBXXMqx>?UVQRz6M{ zNlA+qFZT8EX$X}R*sy=UeZdkb35kl%??xvY8jt4fw|G^~9`ZwR^0A`_cLu!L(qsF0 z&D_qyN!}){TRN22ed7-)FA@3vEp*#KLvMwQMD@W)@S)?&ewXV_T$r!tp)KK zhdhq7KX0nNvA1%%Tbx4RHCFMUXpXRweWxF;3HIbxxuo>_O`zIy?+N<9YW{z^_{?4W z`ET**2dv+>9FJ;S^^s3sf19Ip#+|$29l`A$)4i59tQQcFJI1)?bd-L#X7mEbE1S~Y9dty!xCMJJ!x%>CdyJBvkx;*xHLgX^s=+f2Oe*xpGl zoqS@_L)L9A_QKD9iorgr*$z{^jD+mIWL*b!WzWL;cT{2a2cE^Z72}b3L)?M!Le$)_?+| z+b^0n$tumAU%XRc(scHnipDpWr%#_gY1f77vYpNWI;s{=LKe>4T6bU2q}cif^Y=G0 z6|$dM{urMSoypE*e(pT$fs;RdK4^pqxxCo4vu1*0bNw-K4#oYcdj0yb%r40ZtNsf`J zt*NoD>CZ&3z(UT7M+;K4l}_YKw!Hn8e(RL0S#!49L;)e{Wo&N4aN zv0?Q1%w!w&fb$7=VtcyakAsQ!LI&bS;9(K@G`Cg4ofY#tWYvoM=Uvx+XfbE)&Yjy@ zTlp9^9C(!Ye{|FH=-6SO}r zbvd!L$@5O+A8!r&3(=wzR=oJ@+s9~Abo=)0y?gdFs2dw-GMkoHR7hA{unXnwjoaz8 z>-hBP5_;v6PsSt~h0j086~U^tCu)|PluWsI`+uQ&ow#rD)BK7O7jjR~>kyyZmiqq9 z8wT$KCr)te2z&fkxWsC%ZudR5Bc1j)B3$H)A4t427nbYq2Q5^S&yn)bS<{&mf8x}I zs7*e`c9rgb)ue3CrCgdIbK<`cqgnIayQ*x-UuW8M>(6@oAlyt>HYGz*;6r-)^X1DY zeBxq#-E}bhp6Uzn9&ZAkXL`sGZJm;c-eG;Pw`MXhkycTk>YMPg}bU1>!#MaymoJ304>;&<+C&R<^JxNn9(&BWADU(e-4>F=LyusdXQOi}D3kn?7FoabVTarQ+vzb%A0-UgKrcoQDbTwikOa zXwNnFywQ90=+B?6%%>zxwx9ZWnJM(qWk`^7WWH$KF##15s z@|55~Eu%tqVX?xPDoK#I=iR8nO`wB;Z)M}rOPr4 zWS7;*^d$dYo|?P(@a>=nS(l0}o6M)rGyOMx)^2&w8rplRFS(9RpS~t&`Rw>RLFOh` zu5S32eP4lb?Z=JNw1nnyvpjd0YNPsP#ozh+uX<+*b(}Xkq_gMMwsm~7=H;1G|Gah1 zaAD;`mW1U>|J=g+HZHUA@;`oLd(W=>3l_Y$Kid|X`eMVP%-h_zZ*E4GhmoVR@t2K!s}AMxNqZ_Ow5Qx_d9LV@W$bM?rH-0x z>t=i_cx%z!z-^5W*_#gYt^fW1-^FmglQY$qvvkPzcU=kirFZUE*~8A=IS%c&|EBIs zn1AxCY|;;DmKM$RTT;IIocZ*!x%cc#>mx^Ra_#RZD7SW>Uum@9(&V4B6s*0M?yp}M zv1wQ3$rtqxx;B+|T2Hy)cQMtq@}Awcwuh{)IVV>>DOsd*?$X(_>*^9YJwy8$7@PRp zOJ@48B`6y>O3M2rYc6|YdC%_!OYMS`U5BE5jURbvEc6M#5fRCjvTXv(^dv?3h{~7l zwd?ACznK?%;mM;!we)U9UCss9%ERgpJd?d$)ue zX*0>FDK091@j|WCw%DDWd-sMprCl$Ad~(n7ZP~JEZKR59-!!u?>o09s9crrj+vQzE zdf`_dF`qpr#W@btiDk{X>ibsdkMISD$wHHE7dfq2vnJMgviS?8lKigSn>SA`zh%_6 z#qMIH`Ob}(CQcNR=DT*?M{ZuX%X6lEAqS=(J#^@R_wkZWrh^lgFWmV#`j_twQC>Eju2f~cHBH?q4kxs2Y2nVcAZL>`*I`eaA(^`FPD%Oy%5 zHY_sV*LU)~$>o1Wc{x8foDM#$y<_>6ufe9vZ=Ri2k?$KW&(Hi*zt`AWPf>4qoJ`ov z6WT2yBD{J%A6;Iw?mALYzO;Y+?b6=V7pMN3YM359{G$5&u8&)b7Vp2eF>Cdw9fg;x z{#BS9K6$`Q&raFnzN*dI-3Ok|npS%Ij)r>$)8xE`ht^h4ER}qyCdHp+W!82ncgol1 zM?LTF?6_Fg&|dmtZWg=l|0#Ue>K69yjk=$;efJ-ET{*Gi(X~sb-!9rUYvucl%Tcov zR^(4HzcX20GhcdkoX~>&X))U`rB(a-?c1W@;TpTQE;DnPW`P zzy79DzttYwJXPAoC>S&6qrP723zgX?Rz7w7@6a!1@_2#%VXy1ESD5*}KW83#Tj<}z zgtVd^&&22Na1VWcyh3`JNt$*1?#FW?h1OJ`Rg*c)w7LDDI>)o!VsrjWymWF4v#bB! zt^e=e{eQRr8(H6G+wwep@AUPP-j!{<{oPa9deYgHrwtQ2zZKN`KVSK>ioLv>-BmL7 zv$4_%2Jc4+Tyyeg>&JaknPmJbWkvI10bHhId(hSNYBe*l%)je!ev8)jq|MloIK^ zK8rv9s@S2WZy)mCD|}9Gjrqjg_fuBSjWnCT_VK(h)rmQ-zpam5UFLrC#8<D9X)%dgK~^d|SqT&71GCuGj*+B1PeK;ehLp6M@34j9(R zO)yTVRefrCw>PiJW4gZ-x7*BT&(u%vKGtZs^QeyU?FUXw@@IM~9q(n9gngKMXAVa} zv0J1h>sG(3JMQ+qTjuT3y{^bEwYO5vE=+hq^}Z*~o@**=>^4ZxfB1Y+j_Fh0Aj8*Z zrQ965mCC{!ic4~Qt z_9@kGwORN7NZ49mCm(qwe&UP>mzD&DC#t8OnY?88 z^tA~uO#IqBwx4(z<@DdGUN1~hp=6Qnk-HbG3JS%J-_|Jpds}>)V~OAfp~)>vqPnBa zFE5*}@3Lj`LkIWj+05Sx%XVz@kFMT(I{e_>&;RYK^BHANPF&i1DsQFA)Gg27o|{vC zuKwHGIkndL-~X4hzfrtx{H&~ecVw2^))_mGo;hwr>x{zg&LR`+L#*s7llA zZ7=Wcy;4-b(P_?6-7J){bNZEsH7{R1W<1pw;`PdZ*Z0dE(4!f9DseuP-=jI`YNa>{xf@ zwADA`H#@z|bNgG?>`GDAoy}o)M9A=WxrW6NzCD3Y3y#`tDX2AgGVR*lb*;w?78if5 z-tyC_S^E5`FmIl%bN@=PuMPY4J?T|f^BVhZ*{CDt7I#d#58ruIcX(5P-owv7YQ#?Ly?U)}vU7Vd>#z9VK0Z^kZ9mC8lnb$% z!Rm4?-dnAvC)&tHb0?Sn|g#4a0 z&p%+p_LHf)(@*f&@BZD_`umBY{NdYE|He+6Z?o>6&5Dovvfj;`BJ^nK{D6s1s|=S+ zEVwcML+j4>ml_!~cEzwb%$+~uMTPOpN3M%xQ)It$+tfMf*>Bit%J8Q9aN}{NLz$PB zI_>^>%88 zx3+B8uanQszs#Q&#@5PG`L6g|m+)DoUB@D7<%?xqp;ce7x(ka>e<_~ zpKbfOC1~>f`ikSa6|Jml?ln<@(E8mq*N5 z7R26^SNnJ8wWX_f-TU@>Lu3EWI{*uMH{CfQJLwCF9*Ogt~k(OFmZ}jWr zQGLC6m)9Q672ah#N9fVhITtzX+yC5jy_MA0d5!&+`98B!ua|EN_M~L?>S#T_uwFIl zLesSU`InXkX*#ezVJK*<{kh?U>+A3HnjZ(MgZ3-^W?X-`H~a*845>AC6Ad-}-lzTI8Ci37@;;#5)BKV_`E9ZI{(_FYG_M8sL{>+~ zg$i}dNhrIiv^ZW(thh0E=0=G(FD6}TZvXCT*cRjCoHgt8-LHCg_f@|P-)|MY`&=IX zRqOiC&ve&*KA4&6>Ur^;<=Ll+zdYx%wu%^O%wzT2oNBXCu1vYB`C+J=ow-mn%Zh%s9x7=8GX;?O4| z#{G=#miLk9prbw!pG(f|I%Mi~C~}G6bk(BPX*;#WbT0Ehzi}wnWxZ{KO7@n+kyhDX zZ>;6Gw@BxKp3#ieLK)F|x2Jk-OZjAL&=RqUxmp!?uxVzd#YO?-=jgdMR*miuolv$$IeU?#nW=X*jVUC$8ci!1eJllLV?U-U}eg1r> zcIje^9I?4v-bVx@9>{ciE;f$HQE1}(_nDPRtar!u?#0EdHG1u56Ac-DAFh?qNzqC1 z>v1;Vc;FKu)qeI#z_)a7VW*h2@9ypuHgTWawKK#(W?~VC+A#*{!xBDff7m$^4kT~% z)9d5C@-zQRNnyz^nO37-ixV1Id=0nt8V%|mEw2`unDu`O$Dft6Chy^Dx$b&1AmmZs z??-WK?%S7geLE@m=88+Zb$gq;?u2U-&31$*70zjSY+hl??(?Y&|E~WKLCi{<-K` zAvGtMdDDdOuIV}ZJREMyoaOlR@gr~U9BYA(mK$o0RINz}yCCxOaFyP>C$DbI$yd26 z%yy@`^~yh{jnm5~9!=qU#MJFPHxd+k3!diBFPZJBBGj+W((`kB5X0HS)vFgM+s7ps zKdX7YFX8{E8xhw1+dut176+5W5siQa4j+}KxVatovktFiZfL*!?c29Uj~-?6X9RGzZxQQsP_@{)bt`L@ zh+Lq8*o-9OZ4-{O^&QhO^H&jVEbd9JRQh=`FISFxWn1i|NSO)y0}iAbN}PEwp1>zF zVOF3S=th2&it~IW~YVG`=0y%bmIP;K8Em~!wXKT!{)0dg9A7z)+`yum8ey#zt zq!ZgFmm(I0*rVKe@%qd=k`G^ga-eY^YtAw0)MnwB#sHNkhWp?CWm9=Yz?Js)_Ws`9#>cuW1}~W&iEI|Xz4^@7FJE}ho_7DpG_hfeX_Qp(Zq_-| z6VInMM(l|fe6WOD>cy<|t@qw6yec&+SW>x_Wx9 zT(^!-hS|=|WBO^~&u)|Vyt6MmnVr2_d%e!;EcTazEiES#KL2+8Y-710gqve(;x6;N zozu+9w}q?BxNqz$yVPmU%^M$*WadwJ{6Zko;@H&g#Mu6$!4>-54cf*FQaCRJ&t#g& zvgb*si04Grh6xAw?JulRSYXB6+pX^wB=NcN6Z@mwE=NBN6=%bMHR?vZxrZi|O9)($ z7p?59)LF3nqo~&RgCP@t{yk7RFG6YJWVKiC_kVw^Zdt3dkmbzu$_pir7wfNSj(V`? zc*mo2PrH{o+4Za6d;j6@2ma}M=ktDe;`HGQQ;?nJBz5LgAs=}b3D(ZJ{Xq(!D~zA+ zi~ku`wBq;W)7ej)+58m(eVAjI_-CrkFgFm8(c8LgxoiFh1--=D!n(OyTv< zen)GJLff1Q(+Wk(o%x!2nqs7cT)B5jWPEbyWxcsvbiLyTF;{-E_+znaF4VrV+u<#v z&9k%a<)N?swc?65tHKwZW&Y2)uH(GZ{!~y*7W(Y!GQIoe&71Rfzu)}%`B_}B=F>^_ zckkXMG=94g_Q&XDQ){$?%>#$%=-kJOs@VaJx< zl^2(8y?X7`j{`T-CU6MY&qzc70?qMQ()Qy;_%>nrzcubrkWcBXe*nQo5$7I8Os*W=<_-x*sT**dj#-Mc$; zp6vNGbMDr8OIFNS^e%MXgzcLznA+T$D=R1%Z^fXLa8~r@u48F}ssg1;)m62$?ABMc z>xxbYKQ%dd(W1@A#hz&i$3C9bxY^i6LYv><-_7;!mgx&f2x-=DJMr?6@a`EqroHUE zc9YjAVe#Ij|86ZzUDy&REI4J3%*%(8HjeC)6V271AG6B-q`W98+O3>b>Da4B8TsMC zSuQDlPgVFQ>0N2bXurPsgZAUk+B^%V?71^tN>p%a*dC{}^IM-Co*sOsG5y2u$zS$c z{jQ#VX5ZDPOLw01?elPoeed7Z)6wHAcl_f~rb|xGe`J)qx`f2M))8E!f24|C^y>qa zq<;rrefW`+?^)uL`1{JeB>NqOS8csxCMKk>GBwn)GBeCA>Q_#9)9xO?x} zpBpb0o>jJ%VVzmbvgh#BNk>+6bo5MI`gZHusqf}Z+q0wN$)db22cMgf8S-+uC;B?N z^kbJce9+xs8>u1wci!1Nmo|{*$d|532 zSHsLKY@w^B$8`Nhjk|^XOu^%IYygAG*=J+z3on2DyoaknY&Xxdiv1fVDAH7|${QWe`d-L+s zUWQ-2`X=vr+|C{QZ%umo{C(a3Hb1xTUqVuE?EJqo_sVOzlM{`u zJox)kUHt1`XD7KkJLlclzdhvHi>Z_L@3ENqD);rH=jmS@)Rj{AtiSW<9P{Z38+tb8 zUaE<%bBK_NV+(96{@dJBtMhl!?C_^|W)}GOJLJD_SaR)|$mHXOwhD7RCcYNF-Q;;K zYH4%;=hFm3wFApDX0Scn-Lw9G-0eH3@1OiIYv=zL=i;XQ{b_$^6W`a5J1TE06u(MX zulgt~=DTC`4#$LRw_b&8IW4O!{eMEs8dt9TeTKaI=0y8XdVTEnq~3j2zuA|+nbtPN zqx|%t+&>fU3(E#?PdLB4f9;xLv&z%^=GT^9JYjm|+quZaD^j}^$S7vs`B zUsrbS=+Bks-mb3N_RntHulSc1CGU$?d|sPqH*Z>1R9d2KPEh;K#1nsV_V2y-bN!dM zchAb-F)Ey?(!539!TjF(4;wBTZ}`sbF)t!Yo3HlEeQ|lWU%%~l{Z&~~n!Wwz_x*M| zUp$q6^y5KaTnV@Dfpli&#sb}Y=Ztseuxb2CSTCEn@|>@BN|%1ak0+=TAlv3~U+oIJN#AOJm!0$&=_17lHvLMR8jV-=G+sj1cWxu zj9J*SD=NF*yl}SVqf~io=SR*)C%s}jyl?H8aWntR!{g%bUP`>ksQ*&E`k?bkr?t=5 z*ZsPm`1XK!^oC0l(=&1w{5^TzcYf#>v8A)@Dvvd(Or5x_e_pS1(IMmG-aj`_`gUQp zUM6!w-j972!q->r3wplb&YyReT0Z~(`H(sIv2}cX=7XSs>5o5MxU;>u@x+s68K=X6 zii*6ela7VVo4-Fe*SodYp)S5OA|t9SvTBci4S(kTyPo!WKNnm-Y*jJo)XV;Dm5(HD zSzC%_{<>kiyMOcb_bItCCfquY*62iEKQiUlmICMXMHQkoCgx|Z?km}2|1d5`e53Y3 zJG;GBst1oM&Mr$)TCQLINI$%gOf`_vf{reY5DV zi}>Ol`~J;{es;3iU>??8VuV=K*v~y>F+@U9>GGlw`*0WMd2ibal?ztVdkh}fF zoF7N-a1_r?|NFuE_MA75q^<|bS0B~w0uwl~q z+w<33D#Z$JwN$=hyQGtK|4C3MhGoi*v5rtam-HV%nkIt5ckQefsj})t@JCE{R36)$MDZBfRRv>DsdX z{XK3xJ0~#23nVO^Zl|VN7BREUU!bCB<%B)gBy*&Uyd(;D{Iu9!@6T{&Lc`6dBeE+v ze*Ws_R{U!5(C1ub?fSx93+&&Wy!>L#v^jekmOr)Wm^lAIV)!YPV;^%_~ftmK5g^%MQieF>Ymwz0o^|E`($cHB0cdt_b3 z?-x@ZElDt5&ck}Jur2u9OHIA!8+|jbUUHb(zy7e)hIa8IKW~Zq^QcQyPTlyROj}Uw z*viGt=igPD>PF9^odZ7nY6c&fG-%#fZp6>nDcAluAVqWK3|D=N^N9NYOdOiQ* z1XI(>ZiadFyt)xYIjX);JYUe|>ho1&@GZNpWM$2C4s7w3il%W$fa3 z8MZr)dmhUYZH4fqthbJqa0U2^gBtB|sZO zyU~q(TP!DJFD?GNaN$K|+1qQrZQNzR{=P+P633*1Y0k2DXQzLkwrg^a-u;@Cl%$f! zlmGudtp4`3j%K;3$Ma9Q#@_|!gs54p@czo7Cn>Dv{R@>kK=TTlMlBH_JSEv@|-g zU;fB*u^qGGcNZPM@#EfF_r{yIQ=BHgUweKFPYM?*L+XSHyc|^vQkwhj;TmapL=B>fFf0+I4-xJM+g!{KFqE z*q2aI^X-lXd2a?8Urazw+ub|Mt;KElQUQ+~xz`Eh*|pr;4z4plGBb)@=d+?%VtR4y^m7lDJQX6@tFvc2 zU%h8n_OVq~Ha9k#J*H#lWZ|?Yvo2k^d(CK*i$M2Jkw4cS@lEu*6M6GaGN)^TRBrEA zUfB=2htBgTO*h`>sKOAw=Y9?p0><;IVueeU)OOS)3HKj1w9vV8>)1KF*29a|RKA0q449%nKNhJywT~fXXU8)Cb2+h4im3PoZEr9EvMV} zrm6_tI6kE}McnOAkb_jBTCZEU%Xx<7OM_N6xZb>feBuh89d0^I_cS&*Ys$zznsDxs z=8}#?aWT6+UOan34rm!(SpM)`lEoacH8IUR?J)*gb6yCrTw^%Is&IsD|C#4=>c0xD z=}`J;9uZ^r#*(XjpMchqreg=rvd>(`@a9+3;(!eY*2Nguf2d)wX_YL;kWZY!B{z?pKa2Ihc^@)mM~bn zX$p=pbHCWeec#c5*K9I#-fEd|+>agvAD%bsiGI_`?uQ?wn`RpQFaEdn!`UfaqRmX_ zTK6tuxzZ-`f6_i#z3Ke+ZJez(>lW_40MJBEzg_O!uB&&y|Vg7goznt67lT zcc6W`^a1PBhxPkI`PVizi%To-(Vp~qr%g-SL$41P81xTv@9<%hn#cvJbo?g1yYZvN zM{RPQKf}M>_s=vXtQUKk%h=KQ$k1@%1~YAgc7`iHetu2+8{Tr{i?X{I zJr!ViZ?R-jC%gLA3L7~ac?WxzmVW}loO(P<8knzr{J5HRPEvhxv$^Olp(B;-O%o2e z#L01s{*SOM^uUxna(k=0 zXD~~W;H9^Y`(r`vz>kL~>3Mu$KeKIl_M^v-d3kw7x5X@Yv(NVwYub~)y&sQlI(Bg8 z%#REEZk^huYUAm++g|2nkUR6c`gKpHtkM(Dc8ckJ=<&4woL2eyY=;SIF$~t5`ub9( zUj;r(Usw0@-Sq9DRm)5j?TWnCadw(0XkLnFE07RhDI()7a5#te3CFh$$-1lLZfWJ7 zj_4>q@@RsG@CU>4aOa|~TZwMrU#2P^^1t42$Sv!DMovy{>nkP3l_4h8lO5g_mY*zK z>hpO;gBPRNqJ>MkLFG?=Yl-8eMU$sHy#9MszmBoV^7PZ9jS+vod6rkFE?Jx1ckub< zl|LRnd-af4Y3i55lh*kN%_;MKxozDiCU;@0fO5O~V+Z4>s$QG3KKyJ)_}ti|UEi;~ zo*ZJFb(J-QmytR8-C7}u4$tmTVWwTTj+>>fDC)fL$|D(Z&-Thh-;EoBg;2w7N%eK1JC!g zur{r3V3{Srdwb&IsMxjlrge96A2sP);k@Viq;)CDOVpH&vkREZa?{q9q^G4^_kBDu zIB3En&GoB(Hz+&rpA3p~&+of4cQqs}U%vcc+|x~)j7&{U1>BgOid6QbUb1Dly_{qB z;&rX+y0tb< z%*)bBm-pZM8{t1y|H_oLE0!)<#aVXsb8yJ=YbFbvb5$f>G3!L|+k!YRem3?cyHgyJK}ftUUEtdIoRfqDD1^ z6B*K?*6I-prko%QbAqlDbt+b_O+x$>eQI{5M%zRo|)*}EpF?6~H< za-W~+Rri~Bqqo|In_5RrWzOt+cD3n_!R6{%0)cn0#_X(Zc1w1%pVONy6*+M&rzAW-FK{_(aOX{%{IB@O#GmWQ<1XVez zrj{svDrj5pekY{-lX}!I*1L~czwOg~?Q>L9u)WQG!6(t5yn&$lM)hv~`j<@dD%{-M z0yBT!Ex*rtaE|Eme@aVsn_Y~#w)4Q##+di)k7cjcYTNIqlx#XAb$3db$Bl(1Q-2hd z7WGFJHmzd#FgYe!iA{L^>M+sONolK3HJB{@{pzFHsb$Z!{N=P}OKaZ#wX!R9)*-*1 zufaU?x&x%RqhGBz+Ou}!w1tlZN{R8#tK{9#E32{iD6Pg||;B)@X}m(6t-(hh6tigyco*iR+Sl#dmNrUi!QK|1bRm zHT9a8SnuupF?Z>f?=M|Bthe{~N%!izkKUjt%a2AJ-z zeD=;()R{STZu==uRs+*@X{%y(ugO`ko+td(>MeW?t)V&5JzWdeeY!b+fA!C4n-;RB z$wVyYe3hAZYS;GjHJ?70A6&F)>2$3|t}UTCl`~GgWiN=|TYbuLVHSH#Z)d=nyX>cy zEz{zkuQC6x{rjra6@@<&CW~*gbbQJ<;hW3N8%&osFHt5#@&)VMoN74(*=JHo-trI)t9Gh(rr zwq^T9j$?CY%!#{oM}2Z##&ku?+_S}NyfZfh&ta!iaOPOZa zM3|{1O^*}RxR7vm^>_0_Ozc)yTpe7OC7b`c>c0C*xcG)UvTrilZ{1iR)PDc-E$Jin zH|`$2e2{VW7ViZGBG;arE!sW5Hp}pk%l>|7+MA?z!g>q8lIG(A1wP|9TZ(xmG;kEi zbM$@ORyo~gp^`=79riE@v_7|I?;;#FcAePwNk_30t1u zzQ1|quNO^?zF%&4FtKt?DcLW5pzrD3yLW9_8Zy4eu`EbD6wh9Fpd*B-{)YF|f9F0Q zs$yTHQMz2K^|!XFn`UTv;|0n04n5^@8O&V2WpAzva$XhW)Dh&>CDh5}mn}wO>5u{OEH@HDV)K8_vpM=@8u7L zbo`7Lc>PzL>vt^&)6?(*!TtX~-JE>LHjh~`)`9nPZO8wAfxTbO%KqPVs``WMguX@h z^+5BzKQ?=a?_g&9z2Q*RA0Y=-3s$K=hwlejMonk}wPZB@*<51nWOj3RzkcmnSl`B7 zyLN5f%zUlT@#%>Z91&Ko?=`^Sa3!h2&f&y|=BQ@HyMYA$$VXRog0 z&&$u>?>k}QjtN16vp4;Bnqq(M-z$v_10!eK+!s?n@xL%R$G_O1+wzLD+Hc=HO(nC^ z`NexKXs0ok&a2Hzim{q_;K6>kjZ;7Je=qoxZ^^pVFCq;#wv zPS6&*P`LZWwR91UfIoL9>P2wXc9t}5`h9u+KarMdmgBQ$&sLAyx#sLb3Gv&*_#_tKjp&e&3A)tC4@%!NPOSCLoRT!z|pnb zn+&yMrWpJ_^Yzd1j5lW=tyuBLZr&f4&5V(Ztz55~`|84%Cav_*YVzk$IX|7>)yY-D zac0AD`?YRdj`dHzx-D%k_cB~0eDbG_Tzt(HFRhmNkNnd&-`zWb)9KDux%jp7YhK+y zGfg8dt)}*_hFxZa+SGZMK0Um-CX{W4mDO)n@xwhT_CoB>N@q=MC^;H%`|U;ZMN#n& zaw<|9L-^+Illc|VHhJ?$fv2s%`CC5yICR-->7%6uyRB_(@>;5*=08*3JdOF}iJm8y zp4YJC%?at?QLV0f{^WzMRch>nIlEHL_Xe9uEN^Eue%869Xr>Fx`PdGPn|Jn#*x!9{ zjd|mnEnZybBfcF{{oty<_S-3!4tE=>W@m&%$W+6RGuS2x-@v+|T_v`=j*Z(-2U-x;ozy04Wd-llWnAHit zY^q^X_{O^6#{VDv{|yWc872ArCa){m9CTilxBk=<%ZZ{BFIwy~y(=U&i`Ap|%FJhv zL`n;4rtJ+#Tq!(f^2aar|G$WfpJfs+PgAN%O4D$fvBJD9=}Zp~FHexw^zwEsrW)^+ zLUDC54)?y?^C@hYxbR`@<^!Bu-xF5o-8tcS{m)6^%O@sH>S({NZ~IAy#q8D0plWe{ z{o>rWpLfkGu6bFvcXhm*3p$clUSJ9^O?dX?}5z$TUk9 zz1iCXL?ui99z46_UF-xQ_Zt%L65hQMo_+Q9yr)wx@UGr}`KjZ%qn9V7Xd7yzXRcDU zuvj1-W0kFEcHRtX|Ic&Y_iNVO>N;~nZsQEwIWJeQ zUAlH@sp&>B_0|ZlpK7Md%>d}7%$A8!s%(9bx|JZn^f&AOlv=#pk*sYtVJc<9Rjd4-QhWZ7yUpJoT z2tGAe_o{o|&8?qz-7K!j*#FNjL9Tg&)bx4RHtMFnExTpEYsK2X3e|I5B=o9Qr7!q= z!>GK$LEiJ{m%a1%ecu^c>7Sn%^Qg(eMec;*j%7>N)}Az6)~nt)ZS_3X3d@;y_Wjwq z?){U47uB7Q-0Cabvuy3!w~?22U%4xh`Y0pi|AS9gk1tjBu`K^Kb6+>J5&!%(Cnxt` z3Y)sz-;Y;Dcar`5r;lW1q~xE5v7ZyF;`&=FRJdYYHxp~ue$Gp+Q#ZVQ%g!%X^W$N= zxL(YQH#K`Ft184MIJ2?8eEIVK7ytiD*02A+{{OG_wzjtJ(@rE`dfLDIrK|V^f6eOb zwW7Vw(i2kjZ4Gl7)Nkc`mu>g6-{@HMaj)a8kJ>$s;ioqol#S?~dFrF*yaf#1Tkp3@ zSMk~Xi~F_zck^AIJYDmn*AJaiQdru~sL^5}C;Dc6{l_)ong45o5B>DdS^n*0W#6sq zHCg;CiVr@!E?pRq{~$c-nI;S0a{J4tG>fy=9@O5mq-x>znD>7|uQSwhuU*f(#%uLu zxjV(Dg4VcxzFsXHEEIlpLdi-Un@fw=DBQHop13_;a>j(PS+gXjS@z97UG-^;8%v;& z&fC@7e>~}P+5aZ*!bVF)o9)^0=Vor&Q+RE4+GOXM<=abFzKYc=*k5*h|HPw-qAiv` z()@&v2g@((`|LJ3XY#2u>(zI1V%!R41f-o+S`okM@%k%Za_;}Ov63-vp{`$U}_kzMnuZ8h$!UjF>uiES_xmhx+ zXhLe)=Y{FA!uC0D-UQk136WSf-AesYpSnclp>LnJ_T6D9zs$dWrkUm>QV_q1A1 zJuF%F%SvTierfyu^|^L_4+MT2f1P8*na$hZ#BK50c%9-wRp#!UjbabyM$7Ppv!v-9 zo4%~=rtQw32h`>rc`oJ}apap^*Ne*!ugNW5{deB7b5}37%bbgwHnsAWM55BwZ=aO+ z%c|MkzoxgRf=SWcGrei9tDAWH;fLKS+Mx&2>+?;$o<6V&o+~S~eA}-1d)CiwI&(Pu z`m(&|9xvrRKJ;n6X?OWDFX{fJms8JPyCtzc?L(x%+39R-H~cqW%s1f@(fH@)A)b(y zcI?KD9jjKo@?Gn15-SkHbR?AR;?(uAyUQM_eYvy8=cU<>=hvJqwh5o|^Vu}1v*v&L z)#NEh#g;D*d%R|G)TNARjn&N4?ce47&k_B3H$^Xer}foKM}p06eUCXLbor9;XYO4m zA8ao*d9}a(&;Mm>90iiqYz~~)S2aEIXijq3)r88_E$Q4ZA|}hexWy8ZQ51II?XKJm zi=X#4E8h5UDqeGYVZO}j?>&0@@~ckOeVOT)lNFU#7WVszS!VS*8|6Dk@9eFb#^uS+ z{r9j}d*-6Kw=Nib|5zGRHKTQTyi4tGhw#uUhgUN~+O)YkvR>%%`mcKG^eO86Z~2o;{al=O_EvH>GM> z>eQtwY%Q|wCsle|S$`={|2#D|%e-)*sm-0a3?jQ<^%z{=HFYP?c`eriYH^-DzJESM z%!`Y#XS@^oXLGdO+S?8vmDQ?#G?sq&TeW?`o~nwH>lfzC%Kf16R7@sl`>9)RG&;{@ zuJG?#b7w(bX*z4=&t=Px+V9AWv)&LBE%WXs&;IN$6DI|{|FLeJ&D|%8PZ(2Fj~%P6 zSQBTyrJ;BB=iW}A)vJ3i^2gb43VPff>@?qP$x^nNFK$%kTzneZ`R!)+g6l~=lmEZ) zSXy4z-NZQk^qkl%_2ZYF=1=W!m>!&27g#CVak9ex-@nVx?kbzj)%N86oY6L+@<)5s z^s>^UFVvLf)#^OAWQM%ISoA4j(fiG}CN}T9)ct;M{ow;|?(OWa|NHs1>*SDsQLzOI zUZ4dEKV~b%a(G(*=UwZ+{^hS=^3eQ>T=De;~uvJL7%v?FX4z?=M^k@IA9sd)LwG1=pJ<&+{#NZ4t|HvZ7^^ z!TVQR-`ZHueQ<{H!Hg}w$s4y$6mJX-PbJlIy3Wfp8J*f_)PDP)$4p`+c=z36rVeLg6Q?T%QWs! z`ukPN`uY#01II+K$$fM^ov?WJ*4@?r7V%ikIsdJ?;__lwCeGb|zI>gRwq9?mw2gtr zoA~VNXB8)nQfo3a?j63lJLS;={fD1tzms)#?(MAmmH72c@2b`FX0F+*d7R;Y)4!u8 z)7igqhB`Yhwtl_Wt%~1C`nfuHY)Q$RYd1ITig3O?W#Qhr4+FTLPux4x!`b=%oO25o zM(tNGGd+FfAxr-P9*eb~5_+O@>SEKK9i0wl6tB9Q{9WV2JDoSdV%dkk>P24b=f8TS zx}s|O8u>4lHFd_UGutQ6`!DeI#m?NlSB|Q0?>c20Gk1=Zq|Awe?X@+w1&;$57i=^ZMt_o42p?KS$_>tC3eP zY;Ra|rqfDk?jozg33CF4pD;^3yJ7r|E6a#FoI+iN*r z$ihgcq zQ_f+b+#^*i*S~HtGo9Ahow)W)$+q6c?il&JweK3_EnXzwRP)by<|%4iX-yX=RJim7A^?lPKCh-ST@A9`8OpBVlYrD&B+t#(o5At-v z)FocMlB{-FTeNeo;kpw~cTD%yZ*K3K#Uj49;m*Z>_nw`SRH#|1_>XhO`iYTuZE9q5 zJ59Skm}zI-HZEYeAubf8mXv!)Yq$2R>cq!yOCn>>TkNTd3kx^rDi&0}dh3WW_dOH! zo04BPU%b9~)0e(=F}DwyhX0JI$jM#3{JB67`;FOFQ$FlmxRt%=^n``WgkQI@Z25cY zSequ7iaJ00A@g&Ka`N)GTAmGwzklhF^5Ug!e6L?srd8!#Jv@1CsHwG($DWAnG>-kd zKYso2Z`s;)v!*Q+{o#CxRn5%Y_)_3iMv=mz#(u*Lktk!E;P{_k9wi4y+d8*TU}aNT z$X6+IesSKv%47Eb(po3iJ`#KXLbbGP$5O5r*Drn3$=`p+^~>)bPzz1_5~~aMwisPq zU0r?s_3PI+Z;)_^j&WnqI;hF^xWD?G2Vc0mIbVFhdhu1skAm5@SuEF1_4)Mc)1CR5 z`Z;|2}g*OzM;|Nf_z*rnN%|Gr6@759FI_lvUcU!|7F?iZ1J(lT4!ch6Lf zSfh&vpWQHf{&oADjrZO>$+*7l+p9H^tmkcHUVS(}e@>LrmZYkC|JVzcJ(xM)`R+;Y zV`<&(VLbm#d0Bh+`T40P>(|s>yLH!R&o90}ThN-0`uHW>Wtzo1V-Bo26Ap6mQL|_J z<$A9eiBd{f_fD`uY1y)q+yvpS25X64_v`U})tdUlZee3`UDn1i;__WA;yXKE$)7Og> z+NqrU|4sPE@pqS{`>_TY8e&HD0wSD=qGdzB_vGrWvyF_tsi$|hH?RLTa z(+^dpCh4CIxYSoC37Q;zl;2a5o}S*g|NTpuPYUi#1xHw<*Er0(yK&>j?emY!D{xSm z%o+W9b@c9vN2@*GELD7gsuNtgxfr}D7NN4Y0Q7_RDbY6<9(%x z*&N?DOg@{H-25u$R^g*^wmH22Hbh^2rk6Imdex_BF||oG|CY}Dqsg?9iyj~an+wOU_^vm<&8sfp*J^sAE<7+cX>fM{WAF|vfr(0NW zc6stA;o}xX&DlJ&M zzO;)`?;hLBbLUD#TW{k1^kSdOt~XN;>~UGTPm;HTIaoP0L{~Gaw33&b^TBlYJ*<2c zvo_V{I18!i$xNQNu*~6N%T2$+u2zwwjZNG)kJtNawMw-oXT7sJ75~p~XEyV)W5Rt; z&aGI=x=PSezewfxlqZ)>)q|P7w%@p_S^9`ksrPFyQ~WHR#}S*7Zk>7Wu*>LLT=Kuo zpEfR@aK-3Tj#pIP@jI`5E*BkiaZd87NlGeuCiB!fzi?8~^vP?#tgk6CUYY#0HJ548 z+Cv+fGGCQHxA1Vf6&tm1-yxIwT?dpWq!rD{V78<2KOSefxsds$-eshaAvqNE(J z<6Tqw*ZX$)`J8)!ELhkvT9CldF2=l)$9)^r6#-(xw|Pr@ey-`!u%?q$tApsf>$yM_)YqL zZ8Bx?&T?ebn%XQSqow2WPpvVh!ib6KPHaI($@0UOrx}{4r0fV{GKqawu5fq8@%TS~ zlDi{SPJF7^a`ON8dq)phPV&(b^FA7y|gJX4(}Pv&BATGGe=szSdlZQj`vdbzVL9(wK!IrEq+etFiR+MUar%(`1^ z^o-ixEa4Q7pZiYs#vcCuL*l3Q1uAg-?BSRq_f?eZ;L}q}nF2H`W^O(C)9l>M$?n!q z%&kAm@XkNvcxLgRGrml(mt8ZSd;V|GX*D~2%MQkTcVg$A9+e>3cpZw%cEe z4maBw@Lu+|p>@FRh}|_Dd*As6#(eeuE^voY@Vkb{HjX(DIs5MEKKWL>qiOLzBhDT1 zMHVa;HM*Pf=Pb$LZEKdhfV zvs{x9e)i+$a(lDjryEQaCAaCgm97aiwG`TX{7OsN6=%8ml{w2F<*ry$8~d|OZ&`V0 zv+bI!y2r87{5^+rQ{QH%e~Asb{;@-f_lhsywnL1UH`n;=O6q-?bEdaD{hjm*IgSZz z8@#$=*9DsHDszkW{&`7RR9>3LagAnlNOA3ooF%JsKDaDh$E+=qb&Btba{j!^_tW3k z)qLZTII11id-!V2UI(i(Bl*Rpta-~)yJy~Q3cX$7{WSY}NY0n@8S$3Ml1opqo!%8R zqlDGCa{m8U>dPwiE%xX=pZWjE-}6Pw`xaH5d-`;@WNf$WL&qjo`SR}#%U3=SFIK$% z7x;ZarX?XIyQ*J)by#3DiQ@+Nt8Oqy#D?Ip= z+kGZ+(S)r+d0(C;UuVegR$uV0%`@Tnwa+TG&7CV%-v+CjxX)a__0qn7S6QzM{^CsZ zf7&SijuNg zn$vYpA>iEoxho8=?d6>nd%0L+{^FC0iSDaTw{o+UT{CxBI?emfyOkpCpXT0DKbLvC zBYk#Dqc%^$x@hZ53M&u)bgVR;I`N@g;pQWb)6cJ;UH10CK&}9Do&!XG+ zV%V<-uX@hxU8MGr=Yx$wtWfFa%isTfXHR$hKKuLJ>Tj+2n-l`B-!57A=ht)l-|zqb zdAa`XDzO<(554ofs?MwZ@lcBMtNJPDG-u}}>FMid>^iRQcB82?%5BPpRHI{Ft=lDS zB$>6BuhO)s(75^1@0!)}it zm0o`(H`AwPVu|WO-Z-z9Ggsa0%v$?%)l9<~cO*g?mu#H0Fe#<)CY#IY!)+4tKKh4D zcbxUZ?dm4B(hX~F&s}`Wwu6;@OVyd1>+hY-I{ayd)Q_-GarscD=wu_WpNFMSEj}$} zBel(*_wno{$ApxuUVAU$771=+D~+-}$hCP@LTaPhX78(q0+!~xHXpwbp>_Pn@6|z$ z@vEwuG>=^mK6*9g=eO_~xr}EX9SZ&Wg2U(U3bywF&LtHoK6Q}`Jc^f#J$}&@dE?rH zi>A-CL*M=l^~~}8wrAGC=cm33N8HmhyZqYcXp0cb!6n+a-j!`P_Ih>C`tQ6)yC(O( zxwFfxe@2>$sr70DV@u2RYximC?>D$<&#jSnXDQq3_HVfco4saF&iVSLiy^XbJDd0E zR}SVA7HrtS_bp89{a1I09{=JR4M(G!y>YK(Lo8#x7mQrfA`V-LV?eVQ} z!PDuU;u_0pdr68_#u@I;R|gJz_PR_m=S<1v{n6BVtx_q&Ejp+46Q6|r18s@#@!> z$CV#ySpF>iwdu%By|9*d0^`@c1FzI1fc2Ds^i%qHVUwrGTje)pA(AMnp-zwWbnB1^E*vpLVN{x7~PG_R+9 zJCfYW zH@Zh}oN;2AuFbXsyv>u9t9Pi((w;fviIKw3`3jPk=JE%Z#xL^PVXmefYkJcC=p#-x zedjets$X$(&S><#z_aFk7KdiXndz)qUs6`^^~?CTEem|N*r?%h14ou-T$a%e_Q>Hl7Z9M2z?6@R6AgU}ZENjX|)8~xSoMxt!O>B>=PS*ezN_Y9=%5Sn5E3iQ~uc&*Gi@f&)X^^ zow4xYxjSdVn2x;UFI*RLg;U&Gc=6k6&0O1<@?I&6E;=#E1d5xt-PxqYq^APclWW2FF)jL zDlRfEdOiK5!-N%@tC!UGFd6>}aZB>u@ASR?FVB9{mx~-4C%rSDIla5P+tI3}{9Yw{ zOV=OoiR+RArypD}vB0|7)beSp@o#o6*Ko&O56WHq?tl8QZ<$E=%58S5{UUQ!Z|rB?XX_1<%t z!qQjXn98_yTTSTg*QYAiW;OqfkaG{VS^X?y`J~8oY%JTvSGC<-x$g4DO8zOy-dDuL zH}V>4iQ9$b%{cCL;Mq#%uUj~#&dAxiPb@TFcqhD=V0m7kES~1p|&^P^!P6n3a?3t`}bvUz46J~lY4T$1m{4ZF$m)^%gb< zj$PTjaeaN&T$Og0=AREUTT2seH1^$5ziwYEaL4P}18=3XlUF;$zTdq3S9#2&#w@J^ zy~}L7*GWgT7~Y#S=iY|X4UyB0W@SoGVL_(Z9T^nI(?UAaFNOLeHUMr7VxY5Y5w)5qvx4nidpl{mrDqH||XCGpt_pMr6UZE6b!LmpsZ?z*HqE zwTeggaL(S)MUURJ7G4N8t67ute%&tr%Pgl?ti7nk)}Q!r!KDKt#@m)LKD-({cdEaZ zu1zTC2RRMja~oz&owup6Z_~s^ulIA>d{&&44&8jUJvxeYrP_@ZEz4IF9^_i*k-R?i zY9RZS)laUh?EX3H)7$G@S0uaw4Xb#r&z4A@=J8=xUZc9r!=9qjI~!KD_HA0)f5}eR zP(QzP=ZzPtW&0B1?!B*Cmj3qAPR{-P?b>VO+S=IKp1B6gcx;k=o0^xAArWY>;KI9W zr`Fp2IQuv8hS15Zt`8T?4a&S$G504tnaIQ)ES$W$W8%kmi$ta`@3SjtOJRP!NHJpn zL;n;O_aD}?qMNOpKQ}1atm#>2;ySBoItLGr%!Fx^zKLWvFZN<)p4~CA_Q*5O+5E-Z z4H^<-FYMN2HM}U%9T*q(f#cuB^G$bZnKo||wC!z|?%mSJ{_*Uqr=3d`4wSw=&Ghj3 z(Y*(oma}nHn5=EM8g()t&?4iZ9vAuJLishy*Ngeurpq% zpPDBIX*)Y7|6arUDKFCGM0D;XdzXsCJgMHjFXQTd-dCG*rTe2#X~w?V&^x{I%@S>gY00j$x~5Ih68)c^#WU?tz4$whGQoZ|P4_V7rxGit z$nAdDVbZVCutU0xU*-FAwfXPn?);nft8~_@ zb*t8`+qhdh+;W=mIg5rumE_3>6N-$~+$S2(m{WYtlB;u0pqrD1!jyM*?m}$LS5w0u zu6k$p+Iqh3x0~s6b>}YroV|AMxBt%59J;v9XD#{@&>fJjZ8U%9GK2ab54Ba2TN&5K zOxd1#VbVf_>*9Z9o;dbMFzw3EXpm&?_{8)=R!(kNfQAD{qDS(ANs?Rk)E4#ZZLHuf zIeO1P`|>$cGoG3z)>m%~-}2X2pD>GL-nG8Ki=%Us=AQZg7W&&=yk>sX$M_-hQI|5~ zZ~s0z&#zneS4CpGUQO+(Zu!LD|DH(9?!9RC{QNwdPyZ%f&imQ)cbRZ%lT-fP^LD?# z99cU3=xU>98}9EtZ};<2cJ1mFFVF73q<>K@y|2>2)BnRymKn`W_cvdES5>ad!T*5e z^=|!Bx0z#Ks`a0BIbkT^?C||}?Zj{96SCMczF%g#Yn!QH88zEP_hQ$yp0%o}Z_lqi zaqU)0hNondw2AJ{W1US)RTDFEFKsoGi0Zn!-S7L4H0kHRFFBlA;x$p?g|&v`r4P|U zvx5|VvWwI@Zhc#JVv^I_gf>}0&RefvtFXV$X!KmduA<7+;Lo&ghV&y|$s$Gp=QryG zOP>Cgo^kE($;Nd#A)21SUYp|XE{UAr)WB1xcr*R>oz>@`m0J}2Ry!T4^?6^g|4By6 zGc9(Etbcbe)OOX}u}(y4->%Mgn&uCDYs&lgM$eA8{5JKmZ0Y0e@+)q!eAr)9V0HHO z`<;7dI)C8I5mP$PcSOMX&2jeF1U%tG5`pTAy`XyhC<{o`!Ai2fX;rns3l@U9) zC`|v;BKz)3+;6ihQWhI{nuYFND}Uv@VQWTnRL!w}zj)X0-rMMGAUE;ycYedxoMT40 zyqx-i&OD5F&CLzUPbY0;x$P6WmnV?7z+%CKSMCh4Qq8XO-@eX}T%dEoG`;@!g446# zcYXcJ-Lo>{){TkkOU&Kl|Gd%s+HQT3|6M`4++t77t3i1}S4`uX7Okqu$^Y5T>-%-u zgRNf`pO`o;G*>&oZq2a6W!s8XjyJE{yt~)_;?Kd{-utz}LRVWe@4SC5@L=7I4w zAAF(vwz^j7@L4PQ+tK{SEW7J(7_dD~zGU@`zfU^S=&tP+r9U4}H;5)3JmMgJXb(6^ z=j~?Y=i=tBt*v!@+^3hX4C**|+y3 z@b5_Mb+vf$`u?TexsNS>{5s#c_2|AQ3Hf{VeO872urBL(!7TeY|4U7($+oRN@8n+2 zw*GTkE!l)+c7`qA!Mt^jp~;WT*36T$S|_pW_l+wJui0WO_IjWw0+g*sBnH6hl2SmX4rUnyno5fM7J>ZA7Q+ef4m zY&pMfj8@HGHO-gz)S)h)%V&2S6WrlY`#4&5RojxH6PH8!y-k!w_Hyl-oVxE>U*)S; z*{xgDjbGgJO<1;Zt8qf#Zlga3zeaCA^Z3=v%dw2hw&&e5=*f=@`6{a8!^@}pHqcE) zW~=ee$8&yG+0Rkg?8{pJb6?9VEfKH4eQ!65U6XncG;QBehwASfqSAYs1eRZT#0f1h z_;%f9FCr5AIRJ5wAcy;yia&9?~9gqF@|NHSo zc6;Ot{#nmo_UlKq>2R69G~R1_m)SdewvplNJJ&DUy51I9@7r72HtV&d&8BYOcMWo3 z(lJHx&;P8dn0e>sg$oy~m~`Fl#LRsw|0ex2>*Ijv%P0KK?(q8lpl#{e=Y37a-g%kq z`+iz?r?4!}^?mTb?9?HtZuYfmVjJ77W=Tm)&%WjM<5jx#^ccb7`&VwL^OodD%vq3I z*X=C1eDhMllGk&ZuBT~STgmJ^<>u0p3y-xO6MJR$P`vNu%P(PO}<+^~UW^F*8+` zSTA^Q@3Pb4VMP+h-e?imsfD^PeH7^wu35KYzQV(-15?=pBlNdAA2-|f;AKb?OPr7C<*t04qo&gy zOb-FyhEJHP(0YM#jV*~iZ$y*k~@ zTcR7cMa1sUgNy>(0QU)J_{&Pa@Lu>~t+g$D`NG-D_LlEiYO8LQ9#iVO?DxUcR}m4S z>w8N1&O1I>_h5aA^LFRt<1?yi4R*Zyd0y^?)sd#d(zAcRIP^E=cgtGQlXfp77k3`GX?L?m!H`{#4muhG}AG53CZIik}WXPHj3yCP3sxK#w z+_17*%Kt&c6?9QTuiB-&AnYgtBqT&ERy-O*Uy+a zm)F|w`Mq@E#>R(lUvH0XPBRf=KGb*N|3~AsmlbPouYc+AB2ss5Jzrk%+VIRb+*dzs zyY%g}%89fO>-;a&Et6Ollx`yO)&Bo`=fF0%&^5m^*Vs3lLCyDPYWR{Kdn9!Zz5GoM; z*KlU^0`4b*y9@oc2h7huseDLE=oH{`w!Q4$xRUTICr-2`~J&weG1u68TqF7%bR}Jy7#Md*Olq1`K!3~CV$*|dpXa$U(=bo zCiON3&2Mk})mHBN{&oD1U+3HZb{!YFGxL;%cCc`PwT;o%syP>}l%{FBbuG%DZ}Vrj z{<-GE@1?4@>A#Evo!zmsu)GhkC*@cc-_w{7vbQdZvOt3 zx`~nbf@sY<2alcMvFdF1|0u-&YZJ%uuCM3if4@4y>unueU~lOr`bovfYiqx$jf8RW z+Jw>i+!FK3~?p{N9VchpM)Jr#$mCm{se3;#En}hLdule~zY~KKEO|@QA>L zs||V`d5pTpb{0QxYHI4~>8bnoc|LQQ*3*8~iVLAaA_B7}&7CXo(Z*O^Fe52yLhk-MHX6g$q;yQ4>YU}0$4>OOn2naD2)aOi#;h%Vo_o=Juv@P7O zt5q)=?#xYjA!#;cMfrQj&0QDsc0Qk3uaO#TIsfyEJ+UoZnJ>@IyjNIxdXueVc<&}n z|3ll1I!}jAyry^2`&CJdf92s70#Ofc{W^2u(49MXe)PRNdH&8-tJPg6e{6a3?d~2X zYnfB+T*9@By+anR?g)DQ=9w>RJx7$xI(ykhx%k(tj^&q3zZ~0i_2#XvMeii<^&R<< z;~(hy_ROkRwkBmZ*S&lXs@XcT|4#lav~i=~j7-BoyI%fHF4HF}F46hme*4Em)dtHY zlHz}5ydMj=e=3+LXt4OJ&ApF(WdV|BSkJ02saoKzVRg!{XP(`vN*TXDK_3|3&G@Hk z@u-HiB)t5ja#tzKUkm@_lD8&jzHaPUfAXO2A%WSM?PmMBw;4Fs{>op$Wh7(k-7$CO zj2&XU|2s4E_qrNRyw>))@QBZ*hj}G63v737lJA)&P$fM#n4h=0r{z=qN1>AE-gD%u z+zlUAOx+yvIC=Vaqw|Xu*pH@7XREqxTO}qaIDJC!1o21f>d!AObe-$*pyZl*OIo&C z^YrAuwNfWuuX=Iw?zv0*Q{oh*3e3x;TX&ncOGsL(G)-UgY{BCHALXz29(e=l5F|4qNY=6P+0L=wk~EC=xh$q1>Ee}5`v_`YwR z|Ch(3dsW$Ai94saJZ+t6_(@}?&&w4jbaJHPVisPG>n&M2^&aPAr>e*W`*>H*zIJ=^ z+z7_^55j*`O;~koSC?&`^vZwVBP1!a#dYxP2oQrbeg1*s!K5!h|6Sx;z8=M`hktm;FZVNKt+t%9b-%~j`$99rH%!_)_cu!b zi|Fg?3r8O_wxyIMts>$+mnoLEf9NDJuW#{J=r$3aP<*?L}j2V@}8%sTos`NX3`fov6_6JgH}4B|B?%+zDs(Yt5UoOkb=sW0kV=UU0bl3|qCz zl`Gp~4hMVaeyN)iVHq<&rS{=o?z+1sp9(tu)&H4Y`K3!OYF8)?)RlNWFyt8kOr@fnL=$75j$Jcpgv7f(h$@GZ$!W{8clXu-& z_iWFZZEKyc&pdmM&EKnfWrD%w&BD38b3-^zE}iPRbFRVpDJ2SqyViJ@o_=rZ^l-!4 zrLGm+kM;SAp~>@|kAAbJoP#}g$zKNdtNrY|0$v)WPc<~XG+AC;XnMT;z74Ur_#L{F zcBwwTC2zm~t*mRB=2Y#w{_kGQ{qxK1qsAYO1pXg4B7UjH?{f3ockkZ4bLaZbCtEiJdvzVXC|o|*aq{-*y>s2m z&Z>CWmWi@7>WSO`I&|RNNo$Q-9*_H-V%*7lW8eDt*OgqkblX~CrP!qIL|&WnQiH;8 z4D7qDqITMxoHKQU_M11oF?*Vun`PI0;s5{X^MWqM7s_IKDQia?ap=VtWCzC64;{_4I8_P39lKbE;#TRseHunSUt zcI)~rw=ju(|DMgfzbZN6G!)NWP54`DP;Phq+TN~jUk-&FUK(-t<%K|T`wM0p9IAgO zx-axGQZ(nt&FK2}?O4U`#5KHzdp{pJ$iXwgormw>uicC6{~uKhmcL^Zvdc%JqH$+A z|EtV8ZrK@)(>pt3*IUeC{N>#ue*S{lHHm!wp6$H1>_m<;Ppsk;+p~VT;*YDUd){Al zcIVyFCT3c^YfT$Ff0LU<*2hIFf9+X5?cKqL4t*+HHKf=1{^pp3gg}*-Y+naGH z7hCkMoOX?G!P)aa7OlHCIpf84k@82ZCx3Q^8>HC1({pU)&K3y!d}3$Xvwp{L^=|ht z#--~WB~HF5xn^B>@Wf^IUG6e-Y`AZ1+S5P7@N_{Z;?HUC!g`!;hoI%kzm>a99+ zFR@c}!kN}7_d`We-aljRKX&?_>bB}R$K}@UDEzYI-r*%jL!(wcpQ&HM`>8GRcW;16 z*t>66_WrgOaLjt=tg;u>1-Et-Z`tWJL+S9zlbV*6mD%DR*8eq{*m;f_m2TL)ZPTuO zOXpg-*Rz&9-@WS5mDNUlUjKZ;wJZuVCe2cqus>qs^us&1)vOTD=v>`;Ut+hR zx~7@lwq@lrZSM>EcX?}MBpj4WeRJ~CpEK7wWnahdn7nr8PgUU@j_@C!EpHx-GHjf2 zEUsyiqejos2~HbbRVyTY+-#?}*p-Ue?&f-$`TNpF!-Y3mc=j|nr)+(=sCnbXz#T8k zV*G5>^!UU@8#uonE$ep(T(d+_*zZu9%Y#FI4Iet*u(S%v+;gL$`@=z(wuFN_9nK%q z)A(yWp_%vVQJ40l#q$!KnhURJ?vSaP8X(92>j2-$f&gx=<&zB-+ReBi5);j+XU^%K z?r8V4yQQmOMS2}CW7LTwir?Os?O1qN{)p=D!+d`?PRV?+H^8g#L2g>w!^+|xe>8M7 zW4iaS?(zy;JAG^VzX?`CA^~sr1#!#$`EQCHW>PE9T3 zD|6U6nR7}9!%cL$58a!!PxPzkv8HV=n%-T1e3^xbHS=HLOxM5*u|n6^YW)p1&@Otk zAoxk>_NyY#o?U7Dw14HXHy&SSI6vO}YUZkVsY_Se-WXJv7=CpYm{hbvw^Kz(b7x)a z@f=;>&R#{+AdBk$0L4u2`hO-1-t1m;?{=NMQkw+Rt}N!)C5%fNEo1ej?`D&(*vKWl zLgruLwUnbo+(Y!cq9R%}?F>+{X*>U6i*KM#I<-gY$qMeWxSdpk`>7AroV5Y(DxVKxy)|n`6U+Ao3xQ>O-S9&l#JSqdME6%BYBlxcN<^HJfU{d z`R|j;Z{OE!W##b|?Tv;KLXYrxYhb$g$@ zIXPpw+xK_2TfUvSGpQg7b^$pfm1rNpewrRbXTfP0>&hqa8za_$U_Jwj4e9A28k-d`f*QL5|=k-SW zgS=78U+)vP6=65ItdSm^6!VU0^CyqF_8cKoxK}6XG?YEC6<+^0dmcYu=|pvdB#swy zFT#Bm{y15v?`-mWQ|xVRwcF{pH=i%J{Gh(0cKh@BTOxO^TKnXm&&j{-({I1B*HHcM zy0XRmrTv>5Ur%jY`SRHHEo=TZ2k~t`@vnQ*_qE6Wm6(0tWGK`+BH+xkQC_y>V2fUP zJ#%(@Se?{2p%QbYse9&YU$6VUIQP(fEm8Y*hwnSgZ&>qr_uo7r=51^S);}-bn$nQh z^iNFIk9lJGlbekaNgaQGEZ|n*b=W$^%QigKAwoPPym8vTeRc}f8;)|8D!2xlD1@I+ zay-R$`u43C1=6+h7fOTIWolNw*9d>uTkdhve#w)pe|PpZ9y6_YUnje-mf78tUo*8m zZXS0|_WO<%QClOU_G~SWyRH7>{O!^!vn@hAe_#Fg_1+PsUop8aCElyQ0d)$U-#9pk zJLm{lGGso{wX{F*kK<7M2PPd=CMFkl>3!$Uf4MeQ(| zm*h4r;Z%I+?v4{H4#fQwG5+UP^u35Lq+`qCkG?W>@q*PqmqlpYJ9kc9n9D`zX57!L zogo{x?b@a%(s|D%x5-s+^UlK9_jwmi{OU8YTijam)cgBK^I0Dm%AdXadE@=VfL!jm zSM?`deI1+`D|*%T@az+Z*$j^eSa+y8Cw=7m#%^zKZ)l&|V_&N|7c^!NEHkG_O;HB;MtOYg2p z=`^_2Q@p=r-MvX?1E(JK>NK(n{17(vGUiI1=}q@Jgc5>zh?eT=VHf$GJFQ?OQPgu zc2=x!`*kbTTF9<;%kq1Fch!FVwEAZ3%!p5JrH8zCs}^_OqP1qn&2h5~o@0Zw%zj zLwdzII=eD!cIh8GFZ%d>^W0^QwIV)F|AfDMOun_<#~^Oqj4d&HGHT`99~?iZVs}GS z%BMg~E~@LW;uN>U;L8Q96D9Q1&vdKp30lDxtC?(~Y`7|`W$WKro7`6~61wdE;?m#6 zN4Fk{uA2Tnny#NgYHBbn_FY#N>Jg-Z#ENZjA8bLWX~N;^BNXnA)k*Um}P-@g|V z5R(#Sz09}%?6ae6Q@-_?r?ypAR@!>!G6m?&%Jk~s&Xr&I#5wog%F@ZV&ut5QBXncK z9#tvD`FZEQf32MsWVNNa+0$mK*aK$EGi#(?DKLkGZqR(G`0s)Gg8G7ITOwF{H~*ZM zc6`5O>1)FmFQ$fBYWxyw@A;QtzaqNeB*UHVuvv4a%!-elz;f$P{Fk>67A5fQt@vS( zc)MLg^Q#$m?hIEs^A5$f8;vfz6jHC>yT`{;a{2P*jS)Ht%Y*ibx@oa>+nV1A4c*CG z5}x7n?Nvl^>Q%c1tEW^?y_s2QdwfZnV8+^rYHgn^gR)@9GqnXTzRNGFn$~HgckkPY zh5qjojta@Xkd z2afXOKJVk?K6oQ?;a;PUT#6fwSpGgdzg2!`(xDo|wElp(lcT&?S#}*d_u>E7_^sz! zzvk~>*8Ff+)c@oA+qQ9=o=l0W?3mgaY9QLCw^3rjld74sr-v`8&U(p{YjO6TrpeTh zZ7ZidkE;3j`|vW`GrTh!vVNa@Z*S@;&b)T_%||bK{AM=Hnoo&@S#I{=Dv{)o_$?x*PpNTe_!jL-)+yFdw%WOxyq}y742RBA^i07-CB%KryUes zuUl)uy7%_!JEyK$3&`Yr{&35D`Q2v=9>3aiCdSsrW=@WrrM1WiK-eLK%lc}ww@Pg<{nPt2UUF--p7?TPMo2NMs@OZ(PuovClX zaiPxc>XUbG+aI18)X(kzSwK$}G|T9~!ha*jY{KW=#m~>(+??JoW62bCkMBiO*UFm< z!yUvG4BP+cF3|p}Rd7X1`>3nEqixxNYfBS^=OzF2l9gnAp4n``@8y)=y?(J!h7S1Wwes(eVj12d=%a=H2GQQX*I(MqhmQ)G9xyA2}xw<4A zpINZ%m*|Dq*3Xv|)@?o7vwn5RtCD4t4C@~5;8pceJELMCuBh>pCn;8M5zp7a?dunu zt6}BjIl!6a#Kd{oa(C~s#?7Y}PPs9y;cU%9Md5jBE!K;6JFf9L{L}7;f!TsDr9X>9 zs@NawZn%7UlkdWW*gZRyH*zh@xz2jX_pHt84>W)lxR!POLhu?bUILT}ph@Prvue&sRw(?0CD~Y_rz#h6{mlvQHn%iQK;tBA=Ko zA9ZVCi>tES&$dyg?6q|a7rm~xY-daU!A~K1 z3*u`Ucl}nIf3p3?0*lM4de;?JF1>Aje!k_yl?#u}^YZY2c_+4W&*6n@bggYS$9#5f zu@!um$89Luy}L%&!ytae3Y$|pb3c80@oIr~S*Eo^`N~H>)A<)q>`Dj6s8VczM`~u~ zN~Oc6&zuQa&dM)SlDQ`Ip3u(i%XU>w+IlYWQpl$|nR~w~qDy_<-*dGezY-9X8@>E> zaL#JeO+GKYTqbvMXm8zdMInOUeW9^L8*kU~rN0;U$USD@$@h80>>GIO*^BC58pX*| zb{dCiT)esBsKm^KWt9d?3OO>@y?AG-G_}R-^P!W8bA-P>QmWlhoFhBq4~Lh2`8j8n zUs-?4SXo}3+&07Y>Yg<&?QsnoKONfCy5X>?Q#xDUF~uV>&Z6I)dOE)ttvShirb%Yr zvbhJ@*^*{0Q;7SwEhI-)!RyYArv;NO=CqyEJ-phnoKOB)*UThgbMb=2Z#R4&w0o}T zbQ9%Y=@@=$(X(__(||IETUuKUHI4fZP05;cQtQW56ZI!d7|o|L5i znxJ(oeAlg@ z$;8kdQmm=PnfvzL)loG)drD`6=Q=)<)k@8ipI<3lwB?5ClF8eP?J9DuZmOnrTlT~W z=Zel)Hu?)r*W=wv2EpA57 znJXzTDkmr_J3sPD*NzT>8em z{f%4Y{%B2m)5*^-YkYZDeDLz=_5bSMO^y4v{(rXi-aV(EI9E2h-~W3!yj-@5 zvHok(*l9V5dfDqOu6KW5-QQnJv%e>wQurZtev?)8y$5U=yVjL|eRtW4t3X$We>eZGnqTka z_g&jt^0zVkc$d>oJHfp2zg_Rl+wcEBsufJ=e zqA1VNAFtx}mVJJ9w!1uEuKN3i+8W!C7h6xR^(@+1BUiHL;{mf}wN;@9mD=AHX*};? zj9TG6VgKvtdbVEDY|W898~6TbFSqB{T&DL$eV)aicZRoHDt%u{%$}29rC*gA{UGK+ zn%LD%4K{h;9#GxM30gCG)+|}VvPQ7#XU??K{6!}Pcu)NB?dj#~XHc{^l3+{C;tTN8 z(?8eKdmwkQvh(35D|fnDopI)D))UcPd)8|5?k#QBA7mz!#47b{dF*ce!P|IMQGC+D zuO2)-S}9iVF0*sz zxmocs&+^~6M=p(so~ays;_#C~z9m;qGuZEOJDKdgI!m3EPh2KA@ureweV>h$mz-q$ zBc@aFw{%ilY^=yyOTmobmEoyzcnv?$b9&6(piJ! zZ40JdR8_04OUjzJbeHc_CNi!K zeMc%H7S{d0&u97c(bQFoR1Eioo62gpaQ?My;o*LJexIYQ`ol`63`4yaC*==W$6J(q zv9emu#Q#+=JM1OL!^5GoUzJP{IB@!nq1=lOOi~QktCRhs@x2b~a;t;q55N5O{{Ktoy=o_)WjO)PA=B5!y^;P*qv^4i+k!otE# zd1lrydrK*gjoMqhN=t7ayBuV+HEQw}C8jNt7H!pGi*1L0d36HZ+KHr)(X{(Ua z)}TpSX6XDlP^x=y!?kXWwJiy24+X95wdMcAna6(6L-lsf+0#88UjAO%Yb0)k%ewD7 zxB6uDM1lD;C*3}MT)D7yvUOXTxUT<5MDUuzP@>}M| z(f2M(@EkkXeeH5t`iAoDe^qT`kHj56GEZvn{^mPjhF)@PLM%_-XFX4zIy>UUQU20J z*ULKER+_w?Sj}j7M4)>00`3-GH+T1gU*5JHW4PATVw}PF)z{(3KL%F*jFOC7)3$Bd zu|s#pGUFRM$4-5^^ypGQ&#q6toc)KRg}vex#h(PeVv7Adt$v5_-v@mEH|17osz!M+ z#_jA1FJjy;8mDy(5b6LNA1Bq)N|Tb<6ms+M(S&5=kAhJTICyJq+J5ol(Hg z-@o}%YQWW+hO4Jdta1y}N*3%^vR2)?ByrX`wkHw_dtztF%D>4v=j*4DAsdxuP(C@i zW9H=8yKjqaN;B7W*j~M5wBgYG$C@hz3fpe2dL$PLhlI~O(X02XP@=g+zuXd+;V4l!l#MtJ#j{V?W!f~Rpck=JG+|>aOPFr5FD4)zd|L?Ew_g|!%Z;t!Dm~n|vP}r`i{&$6*xBpzD zI_1TY9cjP%>-pF6?VSIA>9lpcVJjNGNEFFs{QoT&@>(Tu?ac*?7$-W`D1VZyxg-3g z)n5MBU&D|xNtYQ*A3bd1+TR$`{OYJwOpk7>tFqa{W4+TKs6Q6G^BzH~RDz75e zKULhUtQ*>WXDFsP2Q%umYI-eMRT}wWzfVmG%d$$DG(N$%?-XZpdZrPt}Bp?Rj0%R5O^L9=1O@$lHk#f#?lHcpzful7xk%Raj~ z$=PM5Hpb_FD`s5Y+`H!C{urH2(_U|xdnmwcig=Z?|M^3E8}{x?)vF}v*z8?y?)1TXBy|bV--IS&rYvBowhCh^39_Co6Y5>1jVO4 ze){O^)~|0*R<3{49#t;CNa}eBgYTEW!Yev7=J>RNJ49{8{@;{EM_#kmZ9 z=dTx3aB}VpyS>6h^~gezGrip!-0m{bOAe+f7OoXfU(YVP`a8#DsgBhA7bi3=`ggBj z-yX>SE-|XTlWSw&oHqWem;XKZ>pXwH!^>F5O1B5sSgoq9MFb>EBMuzol(|=Sd=ta| z8(NCT*mBc4KW=h)8SAoB?eUY>`i|u*ZNu)bONi!kx+s?Ua+ZA)v=t;*!nlLUrn|S7 zb@FaSMa2r6c}|TQU+Na!Ieltt(D{Z5OCBsabM0W;mWJmaPhLDKv~ zd;jg-pt@qK?URlD>({>z-rZil&V_N6dTUPYHr?CjZW^u zX5GHTzU%1(8#z}|&Xh$buXP0Pw-*e%Wqcv_<>Q=)b&Qc83!Z(n|9eZRdDGuned%_; zzD`Vj+59S!S+Q2-*t=IpSBGt#%<$s6oB9l+ndLJlhk3B5Y4X`eH1U2oqQah}+OYjJ z@7G?vDj9~g6CSKvo%^EYcF2nlvo@@(Y?wAFVq#A&`<-b*N|s`O|FO5<@!ZiE=M>9x z?2z#BMB(n7t@S@wmW631F5sU2psྯ=n-Uq@zFSqp7tl4bWrWKNHlk+9v?7GFm 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%0DWKOZ6;IS?!TNwVZE> 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 z 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 diff --git a/doc/qtcreator/images/qtcreator-search-cpp-symbols.png b/doc/qtcreator/images/qtcreator-search-cpp-symbols.png index 9f34e8f621c413288e6a2e1ed62d9becbef752c2..f5aade540c971e5f2848c43394652b7d5fa8c23f 100644 GIT binary patch literal 8730 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 K&t;ucLK6VrBrbyh literal 8088 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 RF)%PNc)I$ztaD0e0sv|}cI^NF diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index e6194918701..23f7d690639 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -51,6 +51,8 @@ \uicontrol {C++} > \uicontrol {Find References to Symbol Under Cursor} or press \key {Ctrl+Shift+U}. + \image qtcreator-find-references-to-symbol-under-cursor.png "Search results for finding references to symbols" + \note You can also select \uicontrol Edit > \uicontrol {Find/Replace} > \uicontrol {Advanced Find} > \uicontrol {C++ Symbols} to search for classes, functions, enums, and declarations either from files listed as @@ -100,6 +102,10 @@ \li To expand and collapse the list of all instances, click the \inlineimage qtcreator-expand.png (\uicontrol {Expand All}) button. + \li To filter the search results for the usage of symbols according to + access type, such as read, write, or declaration, click the + \inlineimage filtericon.png + (\uicontrol {Filter Tree}) button and select the access type. \li To clear the search results, click the \inlineimage clean_pane_small.png (\uicontrol Clear) button. From 605df0c4b6fe94282a9724422c90f0dabacf000a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 19 Feb 2021 08:57:45 +0100 Subject: [PATCH 04/16] Java: use a temporary directory for the workspace Change-Id: Ie8fc01f680393f141f099f57b98eb16a10b37d7e Reviewed-by: Christian Stenger --- src/plugins/android/javalanguageserver.cpp | 41 ++++++++++++------- src/plugins/android/javalanguageserver.h | 2 +- .../languageclientinterface.cpp | 22 +++++----- .../languageclient/languageclientinterface.h | 19 ++++----- .../languageclient/languageclientsettings.cpp | 5 ++- 5 files changed, 51 insertions(+), 38 deletions(-) diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index d0b900a6066..f40656f6c1b 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -28,9 +28,11 @@ #include "androidconstants.h" #include +#include #include #include #include +#include #include #include @@ -67,7 +69,6 @@ JLSSettingsWidget::JLSSettingsWidget(const JLSSettings *settings, QWidget *paren , m_name(new QLineEdit(settings->m_name, this)) , m_java(new PathChooser(this)) , m_ls(new PathChooser(this)) - , m_workspace(new PathChooser(this)) { int row = 0; auto *mainLayout = new QGridLayout; @@ -88,11 +89,6 @@ JLSSettingsWidget::JLSSettingsWidget(const JLSSettings *settings, QWidget *paren m_ls->setPath(QDir::toNativeSeparators(settings->m_languageServer)); mainLayout->addWidget(m_ls, row, 1); - mainLayout->addWidget(new QLabel(tr("Workspace:")), ++row, 0); - m_workspace->setExpectedKind(Utils::PathChooser::Directory); - m_workspace->setPath(QDir::toNativeSeparators(settings->m_workspace)); - mainLayout->addWidget(m_workspace, row, 1); - setLayout(mainLayout); } @@ -117,9 +113,6 @@ bool JLSSettings::applyFromSettingsWidget(QWidget *widget) changed |= m_languageServer != jlswidget->languageServer(); m_languageServer = jlswidget->languageServer(); - changed |= m_workspace != jlswidget->workspace(); - m_workspace = jlswidget->workspace(); - changed |= m_executable != jlswidget->java(); m_executable = jlswidget->java(); @@ -130,8 +123,7 @@ bool JLSSettings::applyFromSettingsWidget(QWidget *widget) "-noverify " "-Xmx1G " "-jar \"%1\" " - "-configuration \"%2\" " - "-data \"%3\""; + "-configuration \"%2\""; QFileInfo languageServerFileInfo(m_languageServer); QDir configDir = languageServerFileInfo.absoluteDir(); @@ -145,7 +137,7 @@ bool JLSSettings::applyFromSettingsWidget(QWidget *widget) configDir.cd("config_mac"); } if (configDir.exists()) { - arguments = arguments.arg(m_languageServer, configDir.absolutePath(), m_workspace); + arguments = arguments.arg(m_languageServer, configDir.absolutePath()); changed |= m_arguments != arguments; m_arguments = arguments; } @@ -159,14 +151,13 @@ QWidget *JLSSettings::createSettingsWidget(QWidget *parent) const bool JLSSettings::isValid() const { - return StdIOSettings::isValid() && !m_languageServer.isEmpty() && !m_workspace.isEmpty(); + return StdIOSettings::isValid() && !m_languageServer.isEmpty(); } QVariantMap JLSSettings::toMap() const { QVariantMap map = StdIOSettings::toMap(); map.insert(languageServerKey, m_languageServer); - map.insert(workspaceKey, m_workspace); return map; } @@ -174,7 +165,6 @@ void JLSSettings::fromMap(const QVariantMap &map) { StdIOSettings::fromMap(map); m_languageServer = map[languageServerKey].toString(); - m_workspace = map[workspaceKey].toString(); } LanguageClient::BaseSettings *JLSSettings::copy() const @@ -182,6 +172,27 @@ LanguageClient::BaseSettings *JLSSettings::copy() const return new JLSSettings(*this); } +class JLSInterface : public LanguageClient::StdIOClientInterface +{ +public: + JLSInterface() = default; + + QString workspaceDir() const { return m_workspaceDir.path(); } + +private: + TemporaryDirectory m_workspaceDir = TemporaryDirectory("QtCreator-jls-XXXXXX"); +}; + +LanguageClient::BaseClientInterface *JLSSettings::createInterface() const +{ + auto interface = new JLSInterface(); + interface->setExecutable(m_executable); + QString arguments = this->arguments(); + arguments += QString(" -data \"%1\"").arg(interface->workspaceDir()); + interface->setArguments(arguments); + return interface; +} + class JLSClient : public LanguageClient::Client { public: diff --git a/src/plugins/android/javalanguageserver.h b/src/plugins/android/javalanguageserver.h index 58310070771..ab528cad15e 100644 --- a/src/plugins/android/javalanguageserver.h +++ b/src/plugins/android/javalanguageserver.h @@ -42,9 +42,9 @@ public: void fromMap(const QVariantMap &map) final; LanguageClient::BaseSettings *copy() const final; LanguageClient::Client *createClient(LanguageClient::BaseClientInterface *interface) const final; + LanguageClient::BaseClientInterface *createInterface() const override; QString m_languageServer; - QString m_workspace; private: JLSSettings(const JLSSettings &other) = default; diff --git a/src/plugins/languageclient/languageclientinterface.cpp b/src/plugins/languageclient/languageclientinterface.cpp index 91d2562e672..be1f2bdb20c 100644 --- a/src/plugins/languageclient/languageclientinterface.cpp +++ b/src/plugins/languageclient/languageclientinterface.cpp @@ -89,9 +89,7 @@ void BaseClientInterface::parseData(const QByteArray &data) } } -StdIOClientInterface::StdIOClientInterface(const QString &executable, const QString &arguments) - : m_executable(executable) - , m_arguments(arguments) +StdIOClientInterface::StdIOClientInterface() { connect(&m_process, &QProcess::readyReadStandardError, this, &StdIOClientInterface::readError); @@ -99,9 +97,6 @@ StdIOClientInterface::StdIOClientInterface(const QString &executable, const QStr this, &StdIOClientInterface::readOutput); connect(&m_process, QOverload::of(&QProcess::finished), this, &StdIOClientInterface::onProcessFinished); - - m_process.setArguments(Utils::QtcProcess::splitArgs(m_arguments)); - m_process.setProgram(m_executable); } StdIOClientInterface::~StdIOClientInterface() @@ -109,11 +104,6 @@ StdIOClientInterface::~StdIOClientInterface() Utils::SynchronousProcess::stopProcess(m_process); } -bool StdIOClientInterface::needsRestart(const StdIOSettings *settings) const -{ - return m_executable != settings->m_executable || m_arguments != settings->arguments(); -} - bool StdIOClientInterface::start() { m_process.start(); @@ -124,6 +114,16 @@ bool StdIOClientInterface::start() return true; } +void StdIOClientInterface::setExecutable(const QString &executable) +{ + m_process.setProgram(executable); +} + +void StdIOClientInterface::setArguments(const QString &arguments) +{ + m_process.setArguments(Utils::QtcProcess::splitArgs(arguments)); +} + void StdIOClientInterface::setWorkingDirectory(const QString &workingDirectory) { m_process.setWorkingDirectory(workingDirectory); diff --git a/src/plugins/languageclient/languageclientinterface.h b/src/plugins/languageclient/languageclientinterface.h index 182965ab882..69055bc49e4 100644 --- a/src/plugins/languageclient/languageclientinterface.h +++ b/src/plugins/languageclient/languageclientinterface.h @@ -25,6 +25,8 @@ #pragma once +#include "languageclient_global.h" + #include #include @@ -34,13 +36,13 @@ namespace LanguageClient { class StdIOSettings; -class BaseClientInterface : public QObject +class LANGUAGECLIENT_EXPORT BaseClientInterface : public QObject { Q_OBJECT public: BaseClientInterface(); - virtual ~BaseClientInterface(); + ~BaseClientInterface() override; void sendMessage(const LanguageServerProtocol::BaseMessage &message); virtual bool start() { return true; } @@ -61,23 +63,23 @@ private: LanguageServerProtocol::BaseMessage m_currentMessage; }; -class StdIOClientInterface : public BaseClientInterface +class LANGUAGECLIENT_EXPORT StdIOClientInterface : public BaseClientInterface { Q_OBJECT public: - StdIOClientInterface(const QString &executable, const QString &arguments); + StdIOClientInterface(); ~StdIOClientInterface() override; - StdIOClientInterface() = delete; StdIOClientInterface(const StdIOClientInterface &) = delete; StdIOClientInterface(StdIOClientInterface &&) = delete; StdIOClientInterface &operator=(const StdIOClientInterface &) = delete; StdIOClientInterface &operator=(StdIOClientInterface &&) = delete; - bool needsRestart(const StdIOSettings *settings) const; - bool start() override; + // These functions only have an effect if they are called before start + void setExecutable(const QString &executable); + void setArguments(const QString &arguments); void setWorkingDirectory(const QString &workingDirectory); protected: @@ -88,9 +90,6 @@ private: void readError(); void readOutput(); void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); - - const QString m_executable; - const QString m_arguments; }; } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index 030fefef3d8..fff4b3d9c0e 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -722,7 +722,10 @@ Utils::CommandLine StdIOSettings::command() const BaseClientInterface *StdIOSettings::createInterface() const { - return new StdIOClientInterface(m_executable, arguments()); + auto interface = new StdIOClientInterface; + interface->setExecutable(m_executable); + interface->setArguments(arguments()); + return interface; } class JsonTreeItemDelegate : public QStyledItemDelegate From 65d977ed934e3d4cb0304b84fb2fabd8a8837976 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 22 Feb 2021 12:09:52 +0100 Subject: [PATCH 05/16] Android: generate .project and .classpath These files are needed by the java language server to operate properly. Change-Id: Ie96a1fe32fefeea7333c7fa752557f79796a1478 Reviewed-by: Christian Stenger --- src/plugins/android/javalanguageserver.cpp | 115 ++++++++++++++++++++- src/plugins/languageclient/client.h | 6 +- 2 files changed, 117 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index f40656f6c1b..a329057ab32 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -25,11 +25,17 @@ #include "javalanguageserver.h" +#include "androidconfigurations.h" #include "androidconstants.h" +#include "androidmanager.h" #include #include #include +#include +#include +#include +#include #include #include #include @@ -41,7 +47,6 @@ using namespace Utils; constexpr char languageServerKey[] = "languageServer"; -constexpr char workspaceKey[] = "workspace"; namespace Android { namespace Internal { @@ -199,6 +204,12 @@ public: using Client::Client; void executeCommand(const LanguageServerProtocol::Command &command) override; + void setCurrentProject(ProjectExplorer::Project *project) override; + void updateProjectFiles(); + void updateTarget(ProjectExplorer::Target *target); + +private: + ProjectExplorer::Target *m_currentTarget = nullptr; }; void JLSClient::executeCommand(const LanguageServerProtocol::Command &command) @@ -217,6 +228,108 @@ void JLSClient::executeCommand(const LanguageServerProtocol::Command &command) } } +void JLSClient::setCurrentProject(ProjectExplorer::Project *project) +{ + Client::setCurrentProject(project); + QTC_ASSERT(project, return); + updateTarget(project->activeTarget()); + updateProjectFiles(); + connect(project, &ProjectExplorer::Project::activeTargetChanged, + this, &JLSClient::updateTarget); +} + +static void generateProjectFile(const FilePath &projectDir, const QString &projectName) +{ + const FilePath projectFilePath = projectDir.pathAppended(".project"); + QFile projectFile(projectFilePath.toString()); + if (projectFile.open(QFile::Truncate | QFile::WriteOnly)) { + QXmlStreamWriter writer(&projectFile); + writer.setAutoFormatting(true); + writer.writeStartDocument(); + writer.writeComment("Autogenerated by Qt Creator. " + "Changes to this file will not be taken into account."); + writer.writeStartElement("projectDescription"); + writer.writeTextElement("name", projectName); + writer.writeStartElement("natures"); + writer.writeTextElement("nature", "org.eclipse.jdt.core.javanature"); + writer.writeEndElement(); // natures + writer.writeEndElement(); // projectDescription + writer.writeEndDocument(); + projectFile.close(); + } +} + +static void generateClassPathFile(const FilePath &projectDir, + const QString &sourceDir, + const QStringList &libs) +{ + const FilePath classPathFilePath = projectDir.pathAppended(".classpath"); + QFile classPathFile(classPathFilePath.toString()); + if (classPathFile.open(QFile::Truncate | QFile::WriteOnly)) { + QXmlStreamWriter writer(&classPathFile); + writer.setAutoFormatting(true); + writer.writeStartDocument(); + writer.writeComment("Autogenerated by Qt Creator. " + "Changes to this file will not be taken into account."); + writer.writeStartElement("classpath"); + writer.writeEmptyElement("classpathentry"); + writer.writeAttribute("kind", "src"); + writer.writeAttribute("path", sourceDir); + for (const QString &lib : libs) { + writer.writeEmptyElement("classpathentry"); + writer.writeAttribute("kind", "lib"); + writer.writeAttribute("path", lib); + } + writer.writeEndElement(); // classpath + writer.writeEndDocument(); + classPathFile.close(); + } +} + +void JLSClient::updateProjectFiles() +{ + using namespace ProjectExplorer; + if (!m_currentTarget) + return; + if (Target *target = m_currentTarget) { + Kit *kit = m_currentTarget->kit(); + if (DeviceTypeKitAspect::deviceTypeId(kit) != Android::Constants::ANDROID_DEVICE_TYPE) + return; + if (ProjectNode *node = project()->findNodeForBuildKey(target->activeBuildKey())) { + const FilePath &projectDir = project()->rootProjectDirectory(); + if (!projectDir.exists()) + return; + FilePath sourceDir = FilePath::fromVariant( + node->data(Constants::AndroidPackageSourceDir)); + sourceDir = sourceDir.pathAppended("src"); + if (!sourceDir.exists()) + return; + sourceDir = sourceDir.relativeChildPath(projectDir); + const FilePath &sdkLocation = AndroidConfigurations::currentConfig().sdkLocation(); + const QString &targetSDK = AndroidManager::buildTargetSDK(m_currentTarget); + const QString androidJar = QString("%1/platforms/%2/android.jar") + .arg(sdkLocation.toString(), targetSDK); + const QStringList libs(androidJar); + generateClassPathFile(projectDir, sourceDir.toString(), libs); + generateProjectFile(projectDir, project()->displayName()); + } + } +} + +void JLSClient::updateTarget(ProjectExplorer::Target *target) +{ + if (m_currentTarget) { + disconnect(m_currentTarget, &ProjectExplorer::Target::parsingFinished, + this, &JLSClient::updateProjectFiles); + } + m_currentTarget = target; + if (m_currentTarget) { + connect(m_currentTarget, &ProjectExplorer::Target::parsingFinished, + this, &JLSClient::updateProjectFiles); + } + updateProjectFiles(); +} + LanguageClient::Client *JLSSettings::createClient(LanguageClient::BaseClientInterface *interface) const { return new JLSClient(interface); diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 0065779e3f3..420f33a45cd 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -134,10 +134,10 @@ public: bool documentUpdatePostponed(const Utils::FilePath &fileName) const; // workspace control - void setCurrentProject(ProjectExplorer::Project *project); + virtual void setCurrentProject(ProjectExplorer::Project *project); const ProjectExplorer::Project *project() const; - void projectOpened(ProjectExplorer::Project *project); - void projectClosed(ProjectExplorer::Project *project); + virtual void projectOpened(ProjectExplorer::Project *project); + virtual void projectClosed(ProjectExplorer::Project *project); // commands void requestCodeActions(const LanguageServerProtocol::DocumentUri &uri, From 9cc234fbdfb33b3fa0056b865d9381ea72f47f8c Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 23 Feb 2021 09:22:11 +0100 Subject: [PATCH 06/16] LanguageClient: Add the project display name to the client name If the client was opened for a specific project. Change-Id: Iafc9f5d46d06e2e656702260f297d6b2b998a431 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 7 +++++++ src/plugins/languageclient/client.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 7d1c657ca86..74384691ada 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -100,6 +100,13 @@ Client::Client(BaseClientInterface *clientInterface) &Client::rehighlight); } +QString Client::name() const +{ + if (m_project && !m_project->displayName().isEmpty()) + return tr("%1 for %2").arg(m_displayName, m_project->displayName()); + return m_displayName; +} + static void updateEditorToolBar(QList documents) { for (TextEditor::TextDocument *document : documents) { diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 420f33a45cd..e3edbf88b52 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -87,7 +87,7 @@ public: // basic properties Utils::Id id() const { return m_id; } void setName(const QString &name) { m_displayName = name; } - QString name() const { return m_displayName; } + QString name() const; void sendContent(const LanguageServerProtocol::IContent &content); void cancelRequest(const LanguageServerProtocol::MessageId &id); From 01caf29221157aedce6ef5818ac4db156c3f8628 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 23 Feb 2021 08:38:39 +0100 Subject: [PATCH 07/16] LanguageClient: assign document to correct client If a server is setup to start per project we want to open files of a project in the matching server by default. Change-Id: Ie266fd858420acd75b7a1fd45be7bee2b06460aa Reviewed-by: Christian Stenger --- .../languageclient/languageclientmanager.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index d09edb78771..2f69bada526 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -472,13 +472,17 @@ void LanguageClientManager::documentOpened(Core::IDocument *document) continue; // check whether we already have a client running for this project - if (Utils::findOrDefault(clients, - [project](const QPointer &client) { - return client->project() == project; - })) { - continue; + Client *clientForProject = Utils::findOrDefault(clients, + [project](Client *client) { + return client->project() + == project; + }); + if (!clientForProject) { + clientForProject = startClient(setting, project); + clients << clientForProject; } - clients << startClient(setting, project); + QTC_ASSERT(clientForProject, continue); + openDocumentWithClient(textDocument, clientForProject); } } else if (setting->m_startBehavior == BaseSettings::RequiresFile && clients.isEmpty()) { clients << startClient(setting); From 80dfaf3be37ba5041ac2ebe86a3a76f24dc3b02c Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Thu, 18 Feb 2021 21:14:23 +0200 Subject: [PATCH 08/16] QmlDesigner: Expand collapsed component categories when searching - Expand collapsed categories in the following 2 cases: - When searching. - When choosing "Expand all" from the context menu. - Update only changed data when expand state changes rather than resetting the whole model. - Update search after adding a new QML import and switching to the components view. Task-number: QDS-3781 Task-number: QDS-3784 Task-number: QDS-3789 Change-Id: I09e6f1f97171cd9172cadf4202dd8d02cbb78513 Reviewed-by: Miikka Heikkinen --- .../itemLibraryQmlSources/ItemsView.qml | 5 ++- .../itemlibrarycategoriesmodel.cpp | 12 +++++++ .../itemlibrary/itemlibrarycategoriesmodel.h | 1 + .../itemlibrary/itemlibrarycategory.cpp | 4 +++ .../itemlibrary/itemlibraryimport.cpp | 19 ++++++----- .../itemlibrary/itemlibraryimport.h | 1 + .../itemlibrary/itemlibrarymodel.cpp | 33 ++++++++++--------- .../itemlibrary/itemlibrarywidget.cpp | 1 + 8 files changed, 52 insertions(+), 24 deletions(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml index 1f4ad7ddfd0..2f792372331 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml @@ -139,7 +139,10 @@ ScrollView { bottomPadding: 0 expanded: importExpanded expandOnClick: false - onToggleExpand: importExpanded = !importExpanded + onToggleExpand: { + if (categoryModel.rowCount() > 0) + importExpanded = !importExpanded + } onShowContextMenu: { importToRemove = importUsed ? "" : importUrl contextMenu.popup() diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp index fbb2eee9f35..1845c025400 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp @@ -96,6 +96,18 @@ QHash ItemLibraryCategoriesModel::roleNames() const return m_roleNames; } +void ItemLibraryCategoriesModel::expandCategories(bool expand) +{ + int i = 0; + for (const auto &category : std::as_const(m_categoryList)) { + if (category->categoryExpanded() != expand) { + category->setExpanded(expand); + emit dataChanged(index(i), index(i), {m_roleNames.key("categoryExpanded")}); + } + ++i; + } +} + void ItemLibraryCategoriesModel::addCategory(ItemLibraryCategory *category) { m_categoryList.append(category); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.h index fb1a7e0e050..982083569d0 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.h @@ -48,6 +48,7 @@ public: QHash roleNames() const override; void addCategory(ItemLibraryCategory *category); + void expandCategories(bool expand = true); const QList> &categorySections() const; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp index cb244839bd0..1662b0ce966 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp @@ -78,6 +78,10 @@ bool ItemLibraryCategory::updateItemVisibility(const QString &searchText, bool * hasVisibleItems = true; } + // expand category if it has an item matching search criteria + if (hasVisibleItems && !categoryExpanded()) + setExpanded(true); + return hasVisibleItems; } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp index ef1d0e7da72..da508e7a6a7 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp @@ -77,25 +77,28 @@ QObject *ItemLibraryImport::categoryModel() return &m_categoryModel; } +void ItemLibraryImport::expandCategories(bool expand) +{ + m_categoryModel.expandCategories(expand); +} + bool ItemLibraryImport::updateCategoryVisibility(const QString &searchText, bool *changed) { - bool hasVisibleItems = false; - + bool hasVisibleCategories = false; *changed = false; for (const auto &category : m_categoryModel.categorySections()) { bool categoryChanged = false; - hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged); + bool hasVisibleItems = category->updateItemVisibility(searchText, &categoryChanged); categoryChanged |= category->setVisible(hasVisibleItems); *changed |= categoryChanged; - *changed |= hasVisibleItems; + + if (hasVisibleItems) + hasVisibleCategories = true; } - if (*changed) - m_categoryModel.resetModel(); - - return hasVisibleItems; + return hasVisibleCategories; } Import ItemLibraryImport::importEntry() const diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h index 8db549c3ae5..c922e984084 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.h @@ -63,6 +63,7 @@ public: void setImportUsed(bool importUsed); void sortCategorySections(); void setImportExpanded(bool expanded = true); + void expandCategories(bool expand = true); static QString userComponentsTitle(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 761c450b317..317a5ed9834 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -60,34 +60,28 @@ bool ItemLibraryModel::loadExpandedState(const QString §ionName) void ItemLibraryModel::expandAll() { - bool changed = false; + int i = 0; for (const QPointer &import : std::as_const(m_importList)) { - if (import->hasCategories() && !import->importExpanded()) { - changed = true; + if (!import->importExpanded()) { import->setImportExpanded(); + emit dataChanged(index(i), index(i), {m_roleNames.key("importExpanded")}); saveExpandedState(true, import->importUrl()); } - } - - if (changed) { - beginResetModel(); - endResetModel(); + import->expandCategories(true); + ++i; } } void ItemLibraryModel::collapseAll() { - bool changed = false; + int i = 0; for (const QPointer &import : std::as_const(m_importList)) { if (import->hasCategories() && import->importExpanded()) { - changed = true; import->setImportExpanded(false); + emit dataChanged(index(i), index(i), {m_roleNames.key("importExpanded")}); saveExpandedState(false, import->importUrl()); } - } - if (changed) { - beginResetModel(); - endResetModel(); + ++i; } } @@ -324,9 +318,18 @@ void ItemLibraryModel::updateVisibility(bool *changed) { for (ItemLibraryImport *import : std::as_const(m_importList)) { bool categoryChanged = false; - import->updateCategoryVisibility(m_searchText, &categoryChanged); + bool hasVisibleItems = import->updateCategoryVisibility(m_searchText, &categoryChanged); *changed |= categoryChanged; + + // expand import if it has an item matching search criteria + if (hasVisibleItems && !import->importExpanded()) + import->setImportExpanded(); + } + + if (changed) { + beginResetModel(); + endResetModel(); } } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index dc31d169459..37ce58ab493 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -268,6 +268,7 @@ void ItemLibraryWidget::handleAddImport(int index) m_model->changeImports({import}, {}); QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager(); m_stackedWidget->setCurrentIndex(0); // switch to the Components view after import is added + updateSearch(); } void ItemLibraryWidget::delayedUpdateModel() From 670616c6f92500ae8d17539a74f088e06264dd7f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 16 Feb 2021 20:40:12 +0100 Subject: [PATCH 09/16] Android: Use qAsConst with non-const Qt containers in range-loops Change-Id: I1242a5c62a27b7b8f30bb7b43ff406eceb4135f7 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidavdmanager.cpp | 2 +- src/plugins/android/androidconfigurations.cpp | 2 +- src/plugins/android/androidrunnerworker.cpp | 4 ++-- src/plugins/android/androidsdkmanager.cpp | 4 ++-- src/plugins/android/androidsdkmodel.cpp | 2 +- src/plugins/android/androidsdkpackage.cpp | 2 +- src/plugins/android/avddialog.cpp | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index c000a623544..7fb12a49d64 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -403,7 +403,7 @@ AndroidDeviceInfoList AvdManagerOutputParser::listVirtualDevices(const AndroidCo avdList = parseAvdList(output); } while (output.contains(avdManufacturerError)); - for (const QString &avdPathStr : avdErrorPaths) + for (const QString &avdPathStr : qAsConst(avdErrorPaths)) AvdConfigEditManufacturerTag(avdPathStr, true); return avdList; diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index a57e9e851a0..34593bb340f 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -1494,7 +1494,7 @@ FilePath AndroidConfig::getJdkPath() #endif // Q_OS_WIN } - for (const QString &version : allVersions) { + for (const QString &version : qAsConst(allVersions)) { settings->beginGroup(version); jdkHome = FilePath::fromUserInput(settings->value("JavaHome").toString()); settings->endGroup(); diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index ac27b3b14c6..b07e6210599 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -538,7 +538,7 @@ void AndroidRunnerWorker::asyncStartHelper() forceStop(); asyncStartLogcat(); - for (const QString &entry : m_beforeStartAdbCommands) + for (const QString &entry : qAsConst(m_beforeStartAdbCommands)) runAdb(entry.split(' ', Qt::SkipEmptyParts)); QStringList args({"shell", "am", "start"}); @@ -825,7 +825,7 @@ void AndroidRunnerWorker::onProcessIdChanged(qint64 pid) m_debugServerProcess.reset(); // Run adb commands after application quit. - for (const QString &entry: m_afterFinishAdbCommands) + for (const QString &entry: qAsConst(m_afterFinishAdbCommands)) runAdb(entry.split(' ', Qt::SkipEmptyParts)); } else { // In debugging cases this will be funneled to the engine to actually start diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index b84b6fea84f..ca66e26576f 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -566,7 +566,7 @@ void SdkManagerOutputParser::compilePackageAssociations() deleteAlreadyInstalled(images); // Associate the system images with sdk platforms. - for (AndroidSdkPackage *image : images) { + for (AndroidSdkPackage *image : qAsConst(images)) { int imageApi = m_systemImages[image]; auto itr = std::find_if(m_packages.begin(), m_packages.end(), [imageApi](const AndroidSdkPackage *p) { @@ -1151,7 +1151,7 @@ void AndroidSdkManagerPrivate::parseCommonArguments(QFutureInterface &f void AndroidSdkManagerPrivate::clearPackages() { - for (AndroidSdkPackage *p : m_allPackages) + for (AndroidSdkPackage *p : qAsConst(m_allPackages)) delete p; m_allPackages.clear(); } diff --git a/src/plugins/android/androidsdkmodel.cpp b/src/plugins/android/androidsdkmodel.cpp index 50205e735f2..2f83e86156c 100644 --- a/src/plugins/android/androidsdkmodel.cpp +++ b/src/plugins/android/androidsdkmodel.cpp @@ -298,7 +298,7 @@ void AndroidSdkModel::selectMissingEssentials() } // Select SDK platform - for (const SdkPlatform *platform : m_sdkPlatforms) { + for (const SdkPlatform *platform : qAsConst(m_sdkPlatforms)) { if (!platform->installedLocation().isEmpty()) { pendingPkgs.removeOne(platform->sdkStylePath()); } else if (pendingPkgs.contains(platform->sdkStylePath()) && diff --git a/src/plugins/android/androidsdkpackage.cpp b/src/plugins/android/androidsdkpackage.cpp index e9b019782bb..5b218c448c4 100644 --- a/src/plugins/android/androidsdkpackage.cpp +++ b/src/plugins/android/androidsdkpackage.cpp @@ -154,7 +154,7 @@ SdkPlatform::SdkPlatform(QVersionNumber version, QString sdkStylePathStr, int ap SdkPlatform::~SdkPlatform() { - for (SystemImage *image : m_systemImages) + for (SystemImage *image : qAsConst(m_systemImages)) delete image; m_systemImages.clear(); } diff --git a/src/plugins/android/avddialog.cpp b/src/plugins/android/avddialog.cpp index a9ea27f6bc1..9353f148bb4 100644 --- a/src/plugins/android/avddialog.cpp +++ b/src/plugins/android/avddialog.cpp @@ -177,7 +177,7 @@ void AvdDialog::updateDeviceDefinitionComboBox() m_avdDialog.deviceDefinitionTypeComboBox->currentText()); m_avdDialog.deviceDefinitionComboBox->clear(); - for (const DeviceDefinitionStruct &item : m_deviceDefinitionsList) { + for (const DeviceDefinitionStruct &item : qAsConst(m_deviceDefinitionsList)) { if (item.deviceType == curDeviceType) m_avdDialog.deviceDefinitionComboBox->addItem(item.name_id); } @@ -231,7 +231,7 @@ void AvdDialog::updateApiLevelComboBox() }); m_avdDialog.targetApiComboBox->clear(); - for (SystemImage *image : filteredList) { + for (SystemImage *image : qAsConst(filteredList)) { QString imageString = "android-" % QString::number(image->apiLevel()); const QStringList imageSplits = image->sdkStylePath().split(';'); if (imageSplits.size() == 4) From c0f9f290970f3a562411d808594e557014c10f4e Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 23 Feb 2021 08:59:37 +0100 Subject: [PATCH 10/16] qmljs: correctly reformat js spread operator (...) Fixes: QTCREATORBUG-23402 Change-Id: I6b4bd0846dac67116711b7ed046bd52d137b7674 Reviewed-by: Fabian Kosmale --- src/libs/qmljs/qmljsreformatter.cpp | 17 +++++++++++++++++ tests/auto/qml/reformatter/jssyntax.js | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/libs/qmljs/qmljsreformatter.cpp b/src/libs/qmljs/qmljsreformatter.cpp index de69df50438..60e32288c97 100644 --- a/src/libs/qmljs/qmljsreformatter.cpp +++ b/src/libs/qmljs/qmljsreformatter.cpp @@ -989,6 +989,21 @@ protected: out("const "); } } + switch (ast->type) { + case PatternElement::Literal: + case PatternElement::Method: + case PatternElement::Binding: + break; + case PatternElement::Getter: + out("get "); + break; + case PatternElement::Setter: + out("set "); + break; + case PatternElement::SpreadElement: + out("..."); + break; + } out(ast->identifierToken); if (ast->initializer) { if (ast->isVariableDeclaration()) @@ -1312,6 +1327,8 @@ protected: bool visit(ArgumentList *ast) override { for (ArgumentList *it = ast; it; it = it->next) { + if (it->isSpreadElement) + out("..."); accept(it->expression); if (it->next) { out(", ", it->commaToken); diff --git a/tests/auto/qml/reformatter/jssyntax.js b/tests/auto/qml/reformatter/jssyntax.js index edba1a406cf..b6c2a9e9054 100644 --- a/tests/auto/qml/reformatter/jssyntax.js +++ b/tests/auto/qml/reformatter/jssyntax.js @@ -12,6 +12,17 @@ function foo(a, b) { var foo = function (a, b) {} +function spread() { + iterableObj = [1, 2] + obj = { + "a": 42 + } + foo(...iterableObj) + let arr = [...iterableObj, '4', 'five', 6] + foo(-1, ...args, 2, ...[3]) + console.log(Math.max(...[1, 2, 3, 4])) +} + const func1 = x => x * 2 const func2 = x => { return x * 7 From 692993511141e2d5bb05adcfa3022a390e43a596 Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed Date: Tue, 23 Feb 2021 12:36:59 +0100 Subject: [PATCH 11/16] designercore/imagecache: avoid missing override warning Change-Id: Ic9bfdb9041dd82f78e56886793fd43d91955d2b7 Reviewed-by: Fabian Kosmale --- .../qmldesigner/designercore/imagecache/imagecachestorage.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h b/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h index 2d5d87ab48b..f34dd2fca4b 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachestorage.h @@ -134,7 +134,7 @@ public: } } - void storeIcon(Utils::SmallStringView name, Sqlite::TimeStamp newTimeStamp, const QIcon &icon) + void storeIcon(Utils::SmallStringView name, Sqlite::TimeStamp newTimeStamp, const QIcon &icon) override { try { Sqlite::ImmediateTransaction transaction{database}; From d46d53de1f12c36973ae2e90b01ef4c800238ed9 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 23 Feb 2021 13:38:30 +0100 Subject: [PATCH 12/16] LanguageClient: reset project pointer when project is closed Change-Id: I9a2787404bd47bf338125df1066d88e9061b5768 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 74384691ada..ce2184d303a 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -813,6 +813,7 @@ void Client::projectClosed(ProjectExplorer::Project *project) m_state = Shutdown; // otherwise the manager would try to restart this server emit finished(); } + m_project = nullptr; } } From 3c80f1bd9dc6310fa7afa92ccb23fc77523e6bb3 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 23 Feb 2021 10:30:38 +0100 Subject: [PATCH 13/16] Android: Add 3rdparty jars to classpaths Change-Id: Ibc645e2377d4cb6d5eddd86d77cbb7f8ca294f1f Reviewed-by: Christian Stenger --- src/plugins/android/javalanguageserver.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index a329057ab32..8c5abcca3e5 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -299,9 +299,9 @@ void JLSClient::updateProjectFiles() const FilePath &projectDir = project()->rootProjectDirectory(); if (!projectDir.exists()) return; - FilePath sourceDir = FilePath::fromVariant( + const FilePath packageSourceDir = FilePath::fromVariant( node->data(Constants::AndroidPackageSourceDir)); - sourceDir = sourceDir.pathAppended("src"); + FilePath sourceDir = packageSourceDir.pathAppended("src"); if (!sourceDir.exists()) return; sourceDir = sourceDir.relativeChildPath(projectDir); @@ -309,7 +309,10 @@ void JLSClient::updateProjectFiles() const QString &targetSDK = AndroidManager::buildTargetSDK(m_currentTarget); const QString androidJar = QString("%1/platforms/%2/android.jar") .arg(sdkLocation.toString(), targetSDK); - const QStringList libs(androidJar); + QStringList libs(androidJar); + QDir libDir(packageSourceDir.pathAppended("libs").toString()); + libs << Utils::transform(libDir.entryInfoList({"*.jar"}, QDir::Files), + &QFileInfo::absoluteFilePath); generateClassPathFile(projectDir, sourceDir.toString(), libs); generateProjectFile(projectDir, project()->displayName()); } From 925c4a3198f3b903575af6c9aabf280c1087c9ff Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 23 Feb 2021 14:50:01 +0100 Subject: [PATCH 14/16] Android: Add path to Qt java bindings to project files Change-Id: Ia3ee35732bece5870659cac338f26f815e3ce566 Reviewed-by: Christian Stenger --- src/plugins/android/javalanguageserver.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index 8c5abcca3e5..42ee4529067 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -238,7 +239,9 @@ void JLSClient::setCurrentProject(ProjectExplorer::Project *project) this, &JLSClient::updateTarget); } -static void generateProjectFile(const FilePath &projectDir, const QString &projectName) +static void generateProjectFile(const FilePath &projectDir, + const QString &qtSrc, + const QString &projectName) { const FilePath projectFilePath = projectDir.pathAppended(".project"); QFile projectFile(projectFilePath.toString()); @@ -253,6 +256,13 @@ static void generateProjectFile(const FilePath &projectDir, const QString &proje writer.writeStartElement("natures"); writer.writeTextElement("nature", "org.eclipse.jdt.core.javanature"); writer.writeEndElement(); // natures + writer.writeStartElement("linkedResources"); + writer.writeStartElement("link"); + writer.writeTextElement("name", "qtSrc"); + writer.writeTextElement("type", "2"); + writer.writeTextElement("location", qtSrc); + writer.writeEndElement(); // link + writer.writeEndElement(); // linkedResources writer.writeEndElement(); // projectDescription writer.writeEndDocument(); projectFile.close(); @@ -275,6 +285,9 @@ static void generateClassPathFile(const FilePath &projectDir, writer.writeEmptyElement("classpathentry"); writer.writeAttribute("kind", "src"); writer.writeAttribute("path", sourceDir); + writer.writeEmptyElement("classpathentry"); + writer.writeAttribute("kind", "src"); + writer.writeAttribute("path", "qtSrc"); for (const QString &lib : libs) { writer.writeEmptyElement("classpathentry"); writer.writeAttribute("kind", "lib"); @@ -296,6 +309,10 @@ void JLSClient::updateProjectFiles() if (DeviceTypeKitAspect::deviceTypeId(kit) != Android::Constants::ANDROID_DEVICE_TYPE) return; if (ProjectNode *node = project()->findNodeForBuildKey(target->activeBuildKey())) { + QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(kit); + if (!version) + return; + const QString qtSrc = version->prefix().toString() + "/src/android/java/src"; const FilePath &projectDir = project()->rootProjectDirectory(); if (!projectDir.exists()) return; @@ -313,8 +330,8 @@ void JLSClient::updateProjectFiles() QDir libDir(packageSourceDir.pathAppended("libs").toString()); libs << Utils::transform(libDir.entryInfoList({"*.jar"}, QDir::Files), &QFileInfo::absoluteFilePath); + generateProjectFile(projectDir, qtSrc, project()->displayName()); generateClassPathFile(projectDir, sourceDir.toString(), libs); - generateProjectFile(projectDir, project()->displayName()); } } } From b2b6c64e6ae0fbaa6de8a6756c80a1287c762e84 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 15 Feb 2021 00:49:15 +0100 Subject: [PATCH 15/16] Don't detach temporary containers Change-Id: I736cfc61c81995a81b056b3e3e5703ded5912525 Reviewed-by: Jarek Kobus --- src/plugins/clangtools/clangtoolsunittests.cpp | 2 +- src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp | 2 +- src/plugins/projectexplorer/outputparser_test.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangtools/clangtoolsunittests.cpp b/src/plugins/clangtools/clangtoolsunittests.cpp index 512e6e71355..9d416f07cc1 100644 --- a/src/plugins/clangtools/clangtoolsunittests.cpp +++ b/src/plugins/clangtools/clangtoolsunittests.cpp @@ -128,7 +128,7 @@ void ClangToolsUnitTests::testProject() QVERIFY(waitForFinishedTool.wait(m_timeout)); // Check for errors - const QString errorText = waitForFinishedTool.takeFirst().first().toString(); + const QString errorText = waitForFinishedTool.takeFirst().constFirst().toString(); const bool finishedSuccessfully = errorText.isEmpty(); if (!finishedSuccessfully) qWarning("Error: %s", qPrintable(errorText)); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index 03f5ecb51b1..4e31bad6b36 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -245,7 +245,7 @@ static FilePath qmakeFromCMakeCache(const CMakeConfig &config) if (!qmakeLocationTxt.open(QIODevice::ReadOnly)) { return FilePath(); } - FilePath qmakeLocation = FilePath::fromUtf8(qmakeLocationTxt.readLine().data()); + FilePath qmakeLocation = FilePath::fromUtf8(qmakeLocationTxt.readLine().constData()); qCDebug(cmInputLog) << "qmake location: " << qmakeLocation.toUserOutput(); return qmakeLocation; diff --git a/src/plugins/projectexplorer/outputparser_test.cpp b/src/plugins/projectexplorer/outputparser_test.cpp index d1d25a3c67b..a70a33a8d88 100644 --- a/src/plugins/projectexplorer/outputparser_test.cpp +++ b/src/plugins/projectexplorer/outputparser_test.cpp @@ -62,7 +62,7 @@ void OutputParserTester::testParsing(const QString &lines, { const auto terminator = new TestTerminator(this); if (!lineParsers().isEmpty()) - terminator->setRedirectionDetector(lineParsers().last()); + terminator->setRedirectionDetector(lineParsers().constLast()); addLineParser(terminator); reset(); @@ -113,7 +113,7 @@ TestTerminator::TestTerminator(OutputParserTester *t) : m_tester(t) { if (!t->lineParsers().isEmpty()) { - for (const Utils::FilePath &searchDir : t->lineParsers().first()->searchDirectories()) + for (const Utils::FilePath &searchDir : t->lineParsers().constFirst()->searchDirectories()) addSearchDir(searchDir); } } From fbf509dd0b4a1ae9de87a9b7079f6d350ee50c2f Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Wed, 24 Feb 2021 14:28:33 +0100 Subject: [PATCH 16/16] QmlDesigner: Fix designer's unit tests Change-Id: I8da4b6d62beef6e4101fbc331d9877ac7bb0398c Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../qmldesigner/designercore/metainfo/subcomponentmanager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index 0c759c59ced..876bf27074b 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -337,7 +337,9 @@ void SubComponentManager::registerQmlFile(const QFileInfo &fileInfo, const QStri ItemLibraryEntry itemLibraryEntry; itemLibraryEntry.setType(componentName.toUtf8()); itemLibraryEntry.setName(baseComponentName); +#ifndef QMLDESIGNER_TEST itemLibraryEntry.setCategory(ItemLibraryImport::userComponentsTitle()); +#endif itemLibraryEntry.setCustomComponentSource(fileInfo.absoluteFilePath()); if (!qualifier.isEmpty()) { itemLibraryEntry.setRequiredImport(fixedQualifier);