From fbbe003d0d1f355d7fa8771de47fdf5f78f5a0ac Mon Sep 17 00:00:00 2001 From: Anja Kleebaum Date: Wed, 9 Oct 2019 17:47:10 +0200 Subject: [PATCH] BITCONDEC-5: Create JUnit tests (#5) * Mock CommitService and test method getCommitsOfPullRequest() * Mock ApplicationLinkService * Rename ApiLinkService to JiraClient and add test class for JiraClient * Add version to bitbucket dependencies in pom.xml * Test method getDecisionKnowledgeFromJira() * Enable parsing of single project * Test CompletenessMergeCheck * Add test class for KnowledgeRest class * Add model class and interface for pull requests * Add screenshots to README --- CHANGELOG.md | 2 +- README.md | 64 +++-- doc/merge_check_detail.png | Bin 0 -> 101269 bytes doc/merge_check_tooltip.png | Bin 0 -> 84671 bytes doc/merge_check_tooltip_focused.png | Bin 0 -> 25459 bytes pom.xml | 75 +++--- .../checks/CompletenessCheckHandler.java | 22 -- .../merge/checks/CompletenessMergeCheck.java | 5 +- .../impl/CompletenessCheckHandlerImpl.java | 108 +------- .../bitbucket/model/PullRequest.java | 42 +++ .../bitbucket/model/impl/PullRequestImpl.java | 90 +++++++ .../bitbucket/oauth/ApiLinkService.java | 31 --- .../bitbucket/oauth/JiraClient.java | 109 ++++++++ ...nkServiceImpl.java => JiraClientImpl.java} | 38 ++- .../bitbucket/rest/KnowledgeRest.java | 9 +- .../check/TestCompletenessCheckHandler.java | 31 ++- .../check/TestCompletenessMergeCheck.java | 40 +++ .../bitbucket/mocks/MockApplicationLink.java | 245 ++++++++++++++++++ .../mocks/MockApplicationLinkService.java | 44 ++++ .../bitbucket/mocks/MockCommit.java | 61 +++++ .../bitbucket/mocks/MockCommitService.java | 130 ++++++++++ .../management/bitbucket/mocks/MockPage.java | 68 +++++ .../bitbucket/mocks/MockPullRequest.java | 2 +- .../MockPullRequestMergeHookRequest.java | 94 +++++++ .../bitbucket/mocks/MockPullRequestRef.java | 6 +- .../bitbucket/mocks/MockRepository.java | 103 ++++++++ .../bitbucket/model/TestPullRequest.java | 52 ++++ .../bitbucket/oauth/TestJiraClient.java | 92 +++++++ .../bitbucket/rest/TestKnowledgeRest.java | 40 +++ 29 files changed, 1351 insertions(+), 252 deletions(-) create mode 100644 doc/merge_check_detail.png create mode 100644 doc/merge_check_tooltip.png create mode 100644 doc/merge_check_tooltip_focused.png create mode 100644 src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/PullRequest.java create mode 100644 src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/impl/PullRequestImpl.java delete mode 100644 src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/ApiLinkService.java create mode 100644 src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/JiraClient.java rename src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/{ApiLinkServiceImpl.java => JiraClientImpl.java} (74%) create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessMergeCheck.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLink.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLinkService.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommit.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommitService.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPage.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestMergeHookRequest.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockRepository.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/model/TestPullRequest.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/TestJiraClient.java create mode 100644 src/test/java/de/uhd/ifi/se/decision/management/bitbucket/rest/TestKnowledgeRest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index ed7f9a5..781170f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. -## 1.1.0 (2019-05-13) +## 0.1.0 (2019-05-13) ### Bug Fixes diff --git a/README.md b/README.md index 1538ec9..d228f92 100644 --- a/README.md +++ b/README.md @@ -17,33 +17,11 @@ For example, the developers responsible for implementing a task must have at lea ## Installation -to support the release and commit standards install commitizen: -``` -npm install commitizen -g -``` -Install all npm modules: -``` -npm install -``` - -## Commits and releases - -after staging the files run: -``` -git cz -``` - - -to make a standard release: -``` -npm run release -``` - ### Prerequisites The following prerequisites are necessary to compile the plug-in from source code: -- Java 8 JDK +- Java 11 JDK - [Atlassian SDK](https://developer.atlassian.com/docs/getting-started/set-up-the-atlassian-plugin-sdk-and-build-a-project) ### Compilation via Terminal @@ -66,3 +44,43 @@ atlas-run ### Download of Precompiled .jar-File The precompiled .jar-File for the latest release can be found here: https://github.com/cures-hub/cures-condec-bitbucket/releases/latest + +## User Interface + +The ConDec Bitbucket plugin integrates in the pull request page. +The branch can only be merged if at least one decision problem and one decision is documented for every associated Jira issue. + +![Bitbucket ConDec plug-in](https://github.com/cures-hub/cures-condec-bitbucket/raw/master/doc/merge_check_tooltip.png) +*Pull request view with disabled merge possibility* + +![Bitbucket ConDec plug-in](https://github.com/cures-hub/cures-condec-bitbucket/raw/master/doc/merge_check_detail.png) +*Pull request view with detailed documentation hint* + +## Contribution + +### Commits and Releases + +to support the release and commit standards install commitizen: + +``` +npm install commitizen -g +``` + +Install all npm modules: + +``` +npm install +``` + +after staging the files run: + +``` +git cz +``` + + +to make a standard release: + +``` +npm run release +``` \ No newline at end of file diff --git a/doc/merge_check_detail.png b/doc/merge_check_detail.png new file mode 100644 index 0000000000000000000000000000000000000000..2721c1d9cc7ed6b67b85ae65eeec2ff343f70b48 GIT binary patch literal 101269 zcmZs@19YX`vMwCkNvG3s$F|wAZQHh!j&0kvZQHhO`>t>A`|tnUb52Gw-to>g*F?># znuVtlDl07l4}%E<1Ox;xCMqZo1O%Y~1Oy@g1p#QumfpJsJRtNXL<9j(z|X5dyAR+2 zZ7Ztg00ab!`p+LQP+A5Cpb^qhOiBoH9|i&unB|JV1P#!HW2UI;C}3k{Wn}FLcm)Cy zus70kG&00@F>^G<7ZH<^HKZ|u1Ombb5)C>8*v<*yzM}P8l)>0#gU02Okp?@aM@Z z)o^JWFFtibk^~Ey$k*XE6)`o{g#DQ3*zJh@*yHLwsRX_IR1hBt3Jk>e&;R>CLMo;E z?`{9;!M6=XFZBQR{r6iAUO)=L|2EVNBEKZ^|1t&s3FPmh|E(SA!5>NCe=Z3y%^P0` z`TtnzKhuBW51{>T%k}e)fkpk#9DcyHPWbf8e=9*R(De}i-TxRO73DxZBTY2MB9I#l zq&MZiPLbooQ5NH<2+jHLA=sW*sCAq1PtE&EBSEYZYC`|uW1xo6>HKF&IX0F!{G$Kf zEFFa?N13K}E#N~s2qgWm{}A{DHMCV2gYVx|b43UA{>lAcDda_{><{zr?N1Z@GqnBx zPbEKZq|qbrf6W(Sf(#fL$h|S4fsEKK)I5*hFvaiiWKmwSmtl6FkbW6{I@?ZDm(DR>D$d3S=pkM9q0TFZa zG$IMD9L`JICAw^ev`MypSo)qh>~w`iPK&#xN1j%LUe}#`B-lBcB{_C0k+P7FhIpPB zWX~OG^IdOK80?&LHkSwcy*(kYtNA5gmb%BE4Ztz|x3k^>5vfkP`y3QTKR$imoTAPW zC5rP7MEl!7_M^HY>?k}BAxlj~Mx)q3a_KVxh7TV_uU*Zf#s_;cDOn_uQp?IaKtP+=O zj&0jscjo-`lXY&xdiODs^qpHLPwW_3zUMHPftJ-?kX!M8Ed39Di)>0p!O`d;@`)mM z7RhHQ5ojp&)_YrXqA1acB8s;9uR)n_wc(#aNAyOZucXu3-cvGnJrW*j_u8}UoZf)( zp{t$F^U$=nRr?ey5apFOIqjqz+7pXdV1K(89y4Bd|L4g6%Qjn7Gm4KrR03QB&}?q| zHJEOn1nt%H)ZWu1Wrz%m2gsNKnEdit%yR zTF8Fdn}n_{I?nAl!Tr0)LY6F8Kop5E`LiLTh6E%eK_@4s`~m`U<%?{Y(v~dg#~4=z z;zTIZwHx2Ob_Q&vB!elngKnd#b=@s?E5k3k8sHYZ+`n$xH_!+}NvNA?#BV*5Oy_P# z!o+~%^Q+yeOE{@goCL>6{)c|Tb%dxRKm#KkiW9)mNpPA~UhgS&)=RSsm6tGghf9`% z<7ce^RU_wi47(goE2)k6G(TUI_kM!kp3zn=|4}F(+P~XlT%WsWUaLyQhK=yx&Yhc^ z8xR<%M~C5#Q{CB_859I@c7ASVX2wU6m?ukSYGWf(D4#1!R-;Naa%dktb9cU;-*SH_ zUY2H=ZyjwH|F^56jXMVtdgt|H@HzS)zH;a3_E2;GLl2I`F8|-y$M5e5R45z)8<(G1 zFU|#xMR9&@ta^QoWcNv5>(dZd7bkZ_fo|&bz_}L?8$D}ty~Q%J_Qx?af+ksC7)_9p z%Ym&_6Y{G{ddu0NdNnPf>s{-3iVP}e6W&3o%k&JxR9SHrOE_zHx@eL%0|TUHoPT9y zpigI87OC_4u;XTT_eu!4>d{%}=3bB_Nx!vAqDG;-UZZ-gdS!|v$===`9R?gOEoyK- z@D8%RBL@ygW>icJ5(NcCNqKp{er=9?Y0au7fCz>RsWNl!l_`fg zKK9<~^Sq?BHaxuNbUo|>=}Cko7OXBPwR$k>Lh780UoR}3iSOUszAv@KtH`Af2hikULuk;;(*BXa3MahKzWEoK%6QPG{D^G|`Ra?YqZ;d zufNNzSqHw!PasuXWx#YJt)Kk zwZ89dg3?rQ$))*72NedVbq@&_?r<7c7mbKS$=L$Y$~BB zD+nZ~e$KsTt^a#&w$@NG2VP=lIrxxwPf`L)#o$-= zA}#x@SaI{;0_dYAJgs4;N){@6c0J7PgiZ1A#Jwdu#olrK(dCSM0}KAv3kFw*{*{Wi z%X@#{tb)6((1SyJ6`Sj`vp!wAn1qA_=+DC~WrA4UMs;pnQWzl_5j&1dz_FsBqMBJ* z73Syn6Lz$8YHx_0Zfa8_(!lR0F`Ec4k{oMF{<_Q{@^Vvd35-PQB-lCjvf@QMIuyQp zGH`g`a5=qT1H9C|h@`(YD9Erw`glJ#^|p0Ak4iA#-F1R{g^_I;QBj#;)}`#B%O_1m z-FrR(t`84r^55>nh}&`fXXgxWT*`T3!w%(lqf*d%0C9uZWHFgH{=c`Zp99x661MbJ zfGk0SJ(@i^3Q#bpgv!sxVu}^5S>lKT|FDbF&;m?%5`qm-313}D*%)T#Na$X9j`H!> z1KD!AQE-1>vwGAJC3aIP&fX-H^O9sTbA5<;DH!a@#t#!2W}Lj(Dfm02s%|e_SV{kE zk_1R0`+b)x{L}61+h)S2@D*3SjmP-Fjl`q6%);8N?v4)~Z-*Wqo;v@%IfO6?O0{Pf zs5GX;?TyqSs(ds9drY5?&_FEQZJAeBCcgN@t=a7Y3^=ceakYwwa^l|{?CR6$!rsmL z+&1U1XZ}DkGdckXY)tk^kOaihJ4K zC8cB*U-cLTbp!S7s*WhlkthBGKzdGZA7b!r9iOcL(&k|a{8~L9JHp9JWto!7`omof zd(VIb=Ih5ND(G2CxA)pso-E24R7@IH;(_7_!1eZ_`xLa1~W2@9w13TD@AM?jKk6oP!Ejf_*Vugkr?CRFz#4}pY~+m9_X&})6X z6a~H277D>g-JFd?j1lh=`S}zU_7|)T0#yNiF6`C%7oC=B;}b!)=V z+4M`!?q0*D-y-abb{e+roNGmh4fp4dVJhzJVx73jFhA2hv;A-!5!H3>?s{h z?5)>sdd<%v028-(9vK(+3i(e5II0cpkDTO`y{#=%CVe^#F6e)x@`_Gp>s>Q07e|YJ zkh^#LryOg?yvzB8omR|WB_ciYZPs3>Y=U`;k zjFwxeFu?k(I&SX`c(?;7Xa%TQ%2l0>k?C!=k)%G%XdF;C11?XAshmF7$biU?zy#_* zX0Dq#?Xj|TkH*KjRXc&H^t!h;xa_t{x9Sm8@yYb|WTO`-@@gBZUEk!cJNE4E9e^SF zk9F43Ra>BvPMqfGd3SMWvT1C95SVdtB5K`!4s b==0ApfiJdolKoQUS`dq6qa(?8)MWRP!vqpASpRkuN+o5vKl;x5GcO2W%xO{u3^P(I2X2_< zpGv}ujHQ>J)_}@0xlDi8vzl7ChQ z!x$-{zS?<-)DFtij};0p*XQOeSjM3^5F9Kxo-tn@$H#16h7%1PrFMBj(PCsJe1J$UW|4cr7#o{H?!Yr z^lC;&Z(>4bCyKI@-(3y!bu%8TmZvMlWA1-1gX&ynAX_2?y(?pC4;R> zT)EW)AyGu;ZoT=bwra(LMsBp=HU4!MesqFC92j0l!;8AMopME+kd#wqvg(-i*1WR? zcNnF#s3%Kki$7G8Mx=QDcl;<%)&wX%A2t!a6F{;5bpS}L+g z0~$u|YaitruRE73-?o=3M(o^Hfnezj8D%Y0m}_JR@)daU!z+n#w!lEUDzrVh&_mD< z;93CuAKQ^*JCC{-4=cFE{z2*js;}81?I#QKde;H)=93ynXY5dtP4?%4Ru8oxnN3_* zGn;NVC6Ghb)9A%zqnnK~&*^vO>mRrGtOyVd(akrDD(q=%RGPOtCLNzEn$gAMo8xob z`rJr> zQY~O329~mQri;s-dG(&&_k2YGR)BE$02?($PUjs_dbE4+oxQHLMgD^+R$-rHXH1*Q z-7eD5KURD%6zWu%nO;eUPvW|{o5|(U-&Wa*MWc_yL~#Tfosmj2^XQzsFmZjiH$80* zXZls?@lMtuBv@VRokQlW-))9eoyRCwqRx}uY7^+{c83V`B*nMs9+;{R<$G6wiPRr< zlXAv9nf-8)L6lYLk_%Vd1}pWnslior^z=|9N3LF$*L(NPyhev2)WA=*wz~JyS1X)v%SkabEUMih52@}uWl1n*CV+FrW{E$85=<1~jN@etCCGmg5fyq-QEEjC(lxx^F& zB8E;JnOR^DUsXU@^1cw0mNBgug>sbakj8lY^np@~n zR_IM=OSXgl*^zICZ=kf7mntFl9{w$EhC)-VI6Z)C2}C$&Mx);@U!&PEiTH7NY;Ky!MkPvr7)fp`#J6Q6Nq}T%Gt|Y z=VuOqi?APESdT!T-)hJ02FjPc2FPb+qpXSaZsBp#%~0lP2rdy4)DSF3pv7R?B!PY2 zzXB|DB%;|p0r=I=Q_=_(+Z=!7-C*0dw)&dfuf^n<&F151Y1XAuCh`QA3v5rTI=!`j zta^IIN#t>Kns7R(boFN>Uf*_mXr>DFkrvkWdECE&cGQeFuE=I#3_p`Z?7GuR8%f7} z2RlD`EhNY6Nx@cs?kQ-KpLWW!agipb59_gpgdpk}3$OgG7Q0=uQ=+x`4ep6L)2?G} zCsgS?sqIQy^1Lz0}5^yzS zW7E)f=`iIDI|s9Xs=QEt$7p@6d#vl`$m(BlQCK4zonEvc|L_~4ab~fy-g$UX)t5q^ zI1GUbb@XjGha|?~VpJ1Kn1$MB9L&%iNFA8AmLbxC5S%vFq66;lDJ`Dd!z+)|%(czC ze^r~LxBiLC3gWAaJu_nj>W}S}0xcl+7(*~f)}NOei|Z#xEkFTWycyNn7+d|MBzJsW zlRFcaV6M;Kg4x*D$c+G*iBp-uW}mjFyp2;=d`#D?n_qTArZc*qnvNTwP18H8IT`HX zK9@fRCrlz0g0EivXEpO-P_KSYS*1U!KN2{OKmuAu!caT{y;2iI8gePhISe8DOeyHE z|H_6WOrHltUD=Ibl@`zr#d%a));*Yr2qXFEpAhjVNtm4h>)JU*m2qE#NG47Yy!O@y zd<_f2)I==l5^dnV$sREWn~{XKN>nAK9d{g+uD{O zgV6Z+@c2((_>;vd26jv3wX^dTuad3nER(%CaAYu-^`hTYX{o=2{Wjm#sF{>i>h4u3 zlaR}J<>5=!Y6}9%LlnSrVe6d4KX>Y?KvPyoc6fRAl=G#3qH7;4rV~hkS-<_OyPV`(P3A}XqLZfX}RM)|=R8M{F4Tbj*5(5Qm zl!7OpmmF8IM9W-96F&{;)p^TJxm;yVKi4yvp6uvMSMAHWNU9aamfK7n`xFJm=_cd{ z0HdyNKfXw9#2X*=>vT^0e-SEa!F{*8Q!E#rhbW5oSQi%+Wx0H9`@C+>_WT}MfF}RA z0a$C|izt<`Akq_;#!(j>BVN_ccGot?bwm@LjX}iE+XE;-p5r;vBRizqqlR)FK`~bj ztc%SxU!T-mwMHM@Pi5_-dYEf#Al`UPW)#z#Nh1%UKQL1*e%PGW#&do3sZ_0$;qJLU zH9M%GER9?%R~*wq|KfV(MODK%Uz^sy+S#ef=ek`cs3vmdk)fJs^Coeb4keMcj)$3 z^56yCFU92hOn~!J{Oq(3UFyQZ;-aOo{h_C3l+rC*k^)o^&I=G`e=6me<=0Rpa~A+}C=y$3?~XeI&Ri)RFf5M6 zD|~1Z@e?Ewz(Se2NTqQ0Q5*VI4SjbpN-jzFf+rlNjwd;VMm&}|hz-r8R~~NQEl#H% z>XDp^85$OY4TVCmGV$H6@L*)_Vv5c zk*p+s^_U3@UTB8Kw1EmHMX#f%U+zA?7}lVUj?$qXHIT?-M`h0+1y4_r!QNKTOVJ92 zMf8YHfg^o@_C zC5gMs%1}!DpwO?Mi&+aJW0lfv8>K|_Qw&qLF&uOJwPZyYE2+Kq-gYwXY%&Ys-)P~p z{PvewR8-%(ZfTxGKDA)Gizbm0ib04`htlM}s)wMCi6M5J1XI@Il1zyVI$Yu)Y-erj zJyYtluorD2f>fM)#bafa$%gKgQ9pF~ZMFV=3n?*SByUE&>EcR263@OJZuaQ7A7Ve| z0cqRNsL@0m!_hOf`mD5*!4J#@^u$T>Z@92zD(XBpuhRU;_v`T+o8kx-C!A&}*>Q8b z$5k&Z4Lu6DE~~?YPgmg=QLy=3DjK{PeQnPQAbaq!*lqT{1cIAt((~Ek8cU?a8Gbx(=F*K}S$kOxo;OPCQ zy-$+~Si~6jC?<2P3U1~=hHkgqw;D;)vl{$0b53|f)In8n5>oS#0PcfCT$1f0zqSUh zuh(WWXflQbY2(dqdulpL;Qe_k|-;u{vj3}YQJ-^;YC^=t67B<`pIfwk3MNIon zyUOiDAvYokkbPlTLx$wnTZAv(hbe42h?c&bTgRIzi$dp`Xz6SmFKxCvft|Z(IlakGK=$0jd^WZXK*J zxg!o^{$8rB`hF)LvS4lgu=pVZk(bf-f93f01ELr|o?{Zm83bm)1L+;4p{(HHvAHxi zi%SS3MD3*_IIWm6tMsQwN!BXlnTBLZOj1J>u~N9m0~p^svpR8D)Xy;4wbw+Y!ogv4 z;1EpK2FM5&F!$t{u-PrIJ~gqh0xBA_Xg`IrZorIPV9A@Fl%sGs1;p}yv@7!23bMI{ z0z){AA=y99Xv$4Zp;D*FA!VUWKL}EbyKNiY6akE}^OIX3s0Ip7D$ZHv*pr5Nbp@&2 zP?EDY>>OE?pLi0^eh85qAs?f=ir1Cr%(WE}Z~|s#hdV0%_esDZX$c4HCIDymJsh*- z+#X+{G*mi5&rkp55O!SJ5t^Lm5@Bpd)}B#vAb?W1sv8a(l#!&Jq&BmOrc7d5R&_RN z^|w$yqCUSc8~6P>$KAbq6Su=2TyWVMJ?EcN_}|p?g61J0Qi4?VsOqcgS2jMxwe&M~ zMH!dF>U84`k|SY+gqooo3j>Af%;pkU!HAiAuJx#q^nPZjgiuNpbi@GyT0qP~IFfM# z;;X*$2n*`5;K7Wp8wZI!-(zW+H@n&%>y*O9RtTX#i~=y)^PsV z{IV5#nYfJ0Gwd&S1vEy62n;x6Nf{g6dHQZtaYf0A1OuBAqv=}?3XY2rMGkoe{ZS|t z0>%J(;@Tu?qbR*a9nRlzWXx<6mDt>xy|>1kqCWyegyL{m|C-9lPqd-9b1AyJ<+o(b zlS)=dfR6lsSb!^Zd2Hpg@$yxdF{jNjMUK6B{S=H+eq6NPi3=7MTx&e%cDTi({<>c9 z2<2T37mH)rp`}QsX3)3rS$nwxOs#!B4GSz053lV$3k#m3#;e=Q}Mka!&(p(`mCEu>NqDdaqK3+$-~T@_3YB7P7x z^~d{CTun}%W2u}vudEIm}Rtb7<9mI6qp{yK2(l7a5!7-UCP@N?p}($r>T&?f)-y$8rG4F5fRzP7k( z;#hCfTmiG2?z83ho!cjM|Neu8(!xA45$yBsH_YPhkt%pI|E|d&R#_SPytURJzHU)c z>qz?N`^m5?IiJ|f8Q3CBrry3ED86=#YN4oZ@NG_rW=Cb;|RNJj|Ak)p9cdUS8My3`j2_oG*X>*Tfy z>Hs<4=<%_ZXyhVe#VIDc!#xG`GKU2awqF~iQi&{nNSFCiQDCXqLQNTws&R7@+dx0v}f^bq|c@_5&dl!0}q({ z430{jBR#kpZV(N59CSNOcYeGvt8T;7r#VLdQg=M~-PK&+SMf$uryT`v8xfd+J9_u` z)vu(Ewa)DhvkK980SQ9d&bC0_%gY>8;#=_4jc%%rZzak1rW#vtZd{7a4mr&OFPAO} z(OQj_??LaZ&ttJCmNh;T-Pyfg8|_4KL<(Fo+u4I1I@qVg5J5i*P?v1eNWH(oeQ5Di zO)<(Q^SkIniIGt_D5h`Dd96&WYQYoK?@SJDpFsv|+(lp8v0g~RJHdXCi`ARlYMYW2 z1U;h2dj`?~Qr8&oD;5+l4YjEoV)O%$lrzCXbPm#FR*%dVPw5$8@NTv0hHR!ZoTEo5 zE>%AukA^s!t`+Rv_{iRNkWkF>D&E)oJ)-Pad^WZS3R>qBXs zRrcCj6#1;hk<6i0(6-V|&H2+v zG(PH7u1e{0$r-`hEe>VcKN{3Q12xd2Lof{twHC9-_-NotAHl_ST7cQk)dp6o^;8lu z*&u=;m%92v;|Fd3to%?>{w7FTzW;up(TTA%zFawp>ZaIjm3)-TwV`!|@j5wIB? zl0|61*6tdbG$u@ReYJ*3E$eb^zU*LMs<5Lw{8|&oS9^7p2XS{|Tbz7YWU3*!#4NNTmP^RrrUVp%@v ziroHHz4Ka`Oubr>u3ZtXKRpPwiRXB}B0(kRU~wR~Hqld+bJWkQoX&RK-z2DObyw~g zMxXwQRnQw#N0`YWGhT@0oDON!Cc^qFm;&-4Xc@|72zbwRzU4fH!BGm^i9?0Z<_&tt z1M^d*dX3{VR^C%qbke6a96jTta=A-=IbMztVCOW-=G5jFU`+Ul3{Axx9BisKzD)2tIrmiFxM}Sh%awtQ#QV#%ROaRg+oD*m zQFV_4a$g-L9}D%}8RR>6*s-IARU?YVjFXd-0YO1;u0^gM8_q?u0N z9;?_@;8?JgYNYM9#tx`MA`>un@q{lAJz#?r5%_e-LTN`1o4Yj!#?XGHV7VS=0@-;= ziBo(%(j!_wz%DnkMHkMZ(6QbH5Az4*i-fbd%uBlyfs+k(XT=u-^;bDLc%}~NwlT3-X*0+|2pz@0v z2km;LABXo-Kju}3KXe8-WwmpPxS(aa^Qt=Ac3k3zK^w6F?2*0UrPOBip`|xdG%-Cx z83L~1AngZfpTO&E9~9imO8u3Bwa+-Q_2102y#9}!RuqKw-(1|Og`L6ADQnU8>+zgw z$4yQilvvwqJyv+kv%o}BQ@a$;M`DaElW%^yUms-(oGg1Od|g3wwN}ki ze)uL7OweV|XjhU3!~mdhL-b3^Fwf|<-Wu$r=~iqpxroumTN7aV9m7KAgu?JMi&L|4 zKw{^d=B4LA2NaUI-rM92M1_Kk)U=7O;J-AvX~T(2*SrN(8(9^fvj*aWP|83vjK!Z9 z8Bd61v@Wp`YY4s+D}SY1D4w7OomGU)q7s2}Xs{!V@civOf=j&oD;P*$^!(hEBpikK z`yi1@I9wZKY6+rAWo26GmB8tw{h3n}x5QQpy8_m>WA`DM4d;PFG)xM0kHyZi{zl!|*|h<_?)|lLPA!ET6tSJI zt<_#JpWwtOboF-4L$k87JJ{}noV>|1#$0+T%r&!S;57WA!yr_5bb;O7^~PumFWD8d zlC#U*!>jYDCKBi6hpYN0#!04Cpvoc_w+v%x95}S7iE>=?AISX`K34JIoH_8(#rS;V zqO?*A!WJ_iQAt66S!}txmlSM3(J1l+f>&uw^zI$3{BOrGHtkNZ5!!|vKN}AM$ho_t&+2caVU)$V z?{(L=*or^p2qQ$n#*PEobkxFb9)cEV&J7;tqU7L4q z3pv%U?(nJE z^=|CA1t;N&;ZN9{GlrcZv*1owX;a)#clQN)e2t|wEr_TI!@D;ZhCr_~?x36q`#MbP z68}7!WqGjLPM>achQl8&+l%lcxj6uLADqJrk-9n57;(U+Uvn%8TlfYw_^onzyh&ue zwOFTkas9pA)|!Ub9PO@R)jwfI;+}wyhW!lywnq3|Xi=kGneE2>j_?zk6)f=|$u`eh z#M$5K4BO<4b^1dj>K@016rVYU77z0pbL4H+zzUIqgQ(PghtZHujw7B0FJZD16OB&l z{HMxRDhh!TGEhATyT+;EkrCLeaLtlXj8vpb_HQ<#nTW=HjP$Qum%}zw3o{HhjpfxO znd`CPrEhOww(>6qG)IgCAT1^Yg3~bR-7&MJrIl&6;`+pHJh>UbOeT+~Wl&rWd2n)}idTPD}{-J~m~C*uQGPYL5Q@bzC$ck|dRB=q!>Vv6c8 zDkSTsR+a}hv1h-7IA9~z&-3#uOS5@aMB~|$p#0HV-D942fUjr;YF}HMdR+@Y3^{Sw zIb`_lgd|Z|Nzrbbfg!QnyVwb_ugP|f+RnmBbYK+aHckSdpzZy$B%zSb%AdI;2XnuM zrgH}{+XRA{S)wPAbb!RECAu5`+7!1Y2bzjz76f_;+_udyFs^NS7)o}U1IsK~@BP%^ zJQ1WrFR^ZVbuE4g$6`pG5IHHSt_A?@Vq;==72Az(=g z&Th%_I8T3ZbkG@{9Y!y9u{7FEgZVRBP;Pv;@K`IU<_cZiWT_kYec;s*qjrTBM+8b)74 z`EkuF3@mAw^ldTg^Nrjq)WOxslc!lp#TBWqmW-!TXKpi=yPMnT&a?|U%k@T0ya|c+ zkijcN(neiKxiyo*i;~#)^4Th!B?uJ7zd|WL37(eRo4m;Nt}@8@;f3q^%U9)GoQLO% zh~n`I`HviD7Pt7c{8QWB(90zB3MA@iQioYI21O+^hF%UGGK0=Tj7{#tAP9A$$fRd8n z>9upmFef!V{COs8;nKXr{Ek>BdU{e+TP_cY#y7e zwbE)K#tL_#Lx{YmDX?ow*lEC#sIR)TWP=6~GuC>PRXt3c(ra9&Uv~$I)O&qe)RW4P zTt8a*%kcB+F~Fj9Y+1l>D(5FAXH+VB`N`|UBXyJl8pE2Rsg zLe=g(?|^5TeSzo}G;^MJ^^=g2L}BfD<7z;2gPG5m~Zg%_Nk9cl}yJCgam*~_X;jTf6pgnqu06bw$$ zz3E(qTGxCt1$+KN_B#-7iz~LA@!{a7zbN9Q%o;Tgz4XV$q^@@!ODb4OD% z1dP^gUcEXQ4fxz{xY?bS45kE(ecc>9!}3kw5&8g&oTBL3+O@yh;43(e>@-E^o06}y z@diw%w5RnP{RDXv$4C*KN;j zY^)5ow}hX>eh3zm(lZMSnTiuAU`F36jkk8OVnENf4524Y&DOuR*7d#=Mm4sdkE$UZ zorcSMp*2^j|Je)9zNh^zK}sXDZZV^{&r{^t1#2%8cirz9G-}OHKPT^0l!>EC5z>j? z2~2)hoiJzbEBpSnVnTX-ZYLQB?0Bqx@V7d(XM4E+vfD?FIqsN=M9RLhDAT8gj8Kp^6oDXnzhocRe*F!@?`Eq4l z1CVX5QJ%lx0TEhGXE=bM$d^83^lKCV5SUq9R9g|oDYWEtWYs{Wf`0rYLY20M0&a4XS8tl+LX`=6wUJx%JN?ZsZBB?v2|(_|a(L!(j?JpGcz|MpS15eiu4_s% z*Kp9^?uUPkFit#;7B4+(DoMKs0GOKhiC_no3QuoH08s0;!v&VY7f{a7n}rvlm`^IX zVrv_W$hpqa9%I_H0?d3G{~kJufi7i^p<64zTphB-*AAW&+0A>0u15Lh-O5Gxm!zDs z&|DK^Ia;;y0{dN`v>ewp*l#iWUOg4w%@z#tqvr2~-2zKyd-qOir*X_FAZ|4;c5^zg z>0C~A*!JUd_00?S;xLdv0FUL5#`+|hOE5$^bG!G<-2B`-xfKO!zGgfm^_M}y6Jtk% zF?aZtYx1FuqJnjDytf%}w-%cuXyf_`P~M*YyO~O}L``PXksb_be~p`o8+5nlo4`?p z`tY~snq;};V8-FSE0LMuyX0$;mFK%JVyh4opnhk^PdHHi=&kcvvaYdV))<`0oq-S% zHF@+;3`~#j;Kd2^MJiIE5YK{sBh&mG_((&+0R$rN^r)!(tav@n3>ZB-@r`2z6+;ji zweEF+JJ{R=^P=M{xTt?W8AgfJRFkL4L<8uF-w3=Tf*D=wE^rjq-%>l)>s!Y&KSndRMxHMzQw$pmx@S6GS5h2#Tlw#)M zw}8YyCENcs-dIpj3bKXju&4PZpbj)ySUfSDhP4x zYFV-vQ6kk!V!X2jgtUt* z#})u=vb9!1U(~kFC;(>6^$vjZb6H%2U4H^Vw&tpn5)+zM& zp^b*k?mwuf4tt&6zs^q0kAS8QnN8CQ_6>{$AlVR zM)WB4P}_fKjzV1h?>{I~c&9d!kU>h2RrMjiAGL;{O<^2go1dq%laC1?YY}i+m;0K~ z%QCt_xFuD`pL1PP7P~#e>8{2$r1+%F7AXWrJ`}4qzd`jPV(DxLlzDgwt@z5Mt2Q{C=GuX zCrTN!iuIxvHEaon6H1!v_k!2Q4F&5;;YauA53&2Q87fW0fx& zU7*=Zon_Vi5=iA@jx^gut$V6dFXIGm4QlvMBpGfw-#v?8bu&8%ri@{$R7_sf@0O)` zfJoj65*M(K=u`PCDYiRST1ym2!9Ch-M1e!jN0T~l{%gg+U2?6lK22c~A*NJpRL00Y zqU#u!R0+wFL5_|v-i;hM7~*6iMH^|+N#V}L-otH?-ZC#GZ@gP-uAsRQ z&$G75fzJC50cOK$4Uj4P0mM5uE31;-n3v5-*Vo3Q-6ocNYW&F^wq;ovraDgna^35W zRStoNI=TeywpL}| zAL(&o_a-;T$JIMumWdX2;ho{1oMEr?!A6$k)kiiy?Ja!+kxpG?XD5ubfTE|H00XCR z!rk3nLu2E(jEsn0-9Lbe6{4(XAF)DtKR-WFX=xHh#`uvD(deIH&u$>0CN0W)eYAEAh#1bCuN~Z__yw2>? z$C}Q$bx>{eDJ;NWKeS#0+^QBQIhg6nF_XbQLjbB#R&`F$S{w>cCFtQ6@ZwR};f(sPF|t|fOb@=KP0rvX5)Lhcx_OdLv|5{!D(iX0XoQ%ydt-v zEwb(m0gxa^k>UXS!bo7My?#XTtzU*g^6tl*&^|-`Dz6^TY293-ELZ`h^*U6D`lqG^ zka^FxXKL0E4RM4v>*W9kfPi>bly?ak-0lH5+keV5K%3M;v_s#Fs#c&rp zNeJV0D?c3C?Va*#`w7#W3h7^PS(4jKPk8(GR39Hl)1DehJRjB3=es!3bnPDAEBM{P zW|^ACzC;YF5wuAo6(a`|;h!?R59}JiB|CxNOtz=+xkP9ad*6P9FNZqOEl+ahquGi5 zo3Lmfhs8RMHacQLj7UYlzv~nU5Py0Q8>J7FcSjbzY=Ty7YK@jU|0yN@zLO;YQg0)} zv4J-vKl*YSwQObf8&%QndAk-m+S!4ox%5(8#4 zE5QrkyxUba_g$%x?cz}xr@1C_ND}xkdIl?+UZQ(k3;duiiP^5=9NiM;JOSjxxFXxD z!wC3}3Ot9AwXvK%Z*$i_+IiK6E*K%*Uia<0Dw=>82pAbg5Fk$Sy5#?@WP9uaH2Fg4 zBVulNlB_u@6wwnM#?JHK`i(MX3K@EHh#1JDMhbwYxf{9t%MA`Ii6ohFmatMe=0_Bt ze@as(8X5D)!wEb|pOUeUYHxxS36se}1k*bO>AX&>bu9Rna>$N_nvoZPk3xrr?#890 zXs@rRo3A?S7L1u5j%>|i7!M&=CK&)=*Ye%J)m1ia$4w4za@`4vgpdeSP!f|Q71gJk zr6o8;$_fpK&E0Vv(eYzKee^eqIl96U$KhB%{;06x_PP2TBUKjv)AcUE9(GI zb2gyqkv1(+k*|N>yN(|)g8vJ}Fkl!Xr|SI+4OhHH9mF(5Owr**^cjleH&i}0ktzLP zPwefPu`%c5wzk>vLS(&aTE(vgo5IS@#Q976JObttxT*|8*zQK4ueMM`%oetlXYlTo z+JJ3zQ#wG6$n$W4=lN+h+Yz@kcSHOzul$Wv*vsMX?$1QwtJhl)<)Tqw(nHRtyPK<8 z+G>@~?ocduZz;8Jf8r1CHi#IM%+#@YnS#55RepB}ya@KFhXdR|d{3|bgB;{2qG^9u?F_EYz~UymhLb(YxQ zpig=af5j%74;Z^RhZBQdkj3N2ifZkJE@Xyukpg?QyE&qsw*(|q2PLk2JVp`&3+M%& zBzAJSeZ1PfoB26a&1hO*r+$sCCbP{XzaXEmxpdX|14>KaRI3xGuXAb&N|T2}BtA|q zH|<&2O#lF+MEGf{n}v6P;shu@Py2kPMm4gRFLyx6U(Ya)SE2zO!1eJ1)Vu(%U+m@i z1!uAIPwcBrKp`A9B_=zpi+_^}!*VWL?d5v;vu)g7dirS5eYb6ix_=3JC*$d|3tf_D z4^${!`;0{!RP8R;Hwu~*-M1Hi_K7WKAJK9L>N&V!Q7SwPNN4sQ@lFFxc)pZByV+)= zIjLeaS9UbG;MCL}&vScnA!w91^h+;k+Y`GK2Gs0LiFJG)0GIv!thPQvvh+U=X9ck^yfq5A;{Cj14x zPE#g0zb@>e^N(==kE~{-Nm2CYg#S?_>9NV)KQ?%4oV0-_E zy|;{NLy7)HsZwZx3Q(Mu;_j}+U4u(;cXw%l7K#*i4=%;s3oWimAZYR679d_pD zx2}6rv(R51J#wY1>I3^jWa3*abYgNjku5dd%KK2;!OP)YxeufjS~&^wPE?47J1qA^ z*dqMbDEkZYJPFXk0Vy|eCh1-RZf0Q<{JnhA@;y4pvj1}3*4AW7kG%GsI|T!?A|;0!Y1ga1FQ9p;BQ5lcp};aLoV1>NPa0Df z8W73Do$+ts}*iF8Pp?i)<^jl+-@q&`;jZsbu zLg0ewz`JsN4t747u~sZFz}3X(rJ*gkicP{P;bnPEnwCe5R<;7&WAPw9DRKT=AL`Gy z=lc$e&~6g3W9PY6o?XZD&vc7q6#KV8HM&>S3U3%0hu;-6J$imFeABFS z9kcGE;F_aB&z7oicNjU#&702qDeYol)e=w3Wwj8KuJ(%VBX)wfeNhVAO2P-}DIHrH zPb(~TiZy;w31_UK4*WjG6?`m?I=5JhX!#nHTl(1KGG5Qy0T7U#+cAG%#^`-SddH6# z(Vv80Q|?!OI=Wj6Vh{$$h@3Xq+0=eV9dPw~n1})dO--NO&bA(06mBD9RuAf|r`l;k z@oCKmHN`S$v489Vs%ZD!4X&qmnzrDj5bt)Ms;zcI=OK3^8q5_m=kI3kYVobC<KYPPv(_D{7HZwlCjtVRtG&am08t&A}323a=(CbZgK=J0v zJq@b0s~8UG!BLQ}lb6yGv{chZQnK8U06xA@pQ{l(AC@BIt=GEWbz-4eG-OJvz{XBr zrMC)`q_n(_-t|PO{Sf-N!tN4hyR&m#a_8qx<%!xEi@Gf&tNrS9q=**kuQ_b4f4>HhBXdT?_x&*D*(sN!d3AnGQ zf8_K#R6)W|M_K}mGYc@=FUBo(Jz+;_T-LX~niU3Az(ifd)MFup^Nt89!_@_`fuVOf znFx!lI0e$Yyi8q3Hnc$cb)RLiR3_;_ggP)FO<0MizP6*&?<9Sr54dv?&>exv zIeqW|2!hr*w`O^n>YW%Z*Oh4Fh}5dGd18TN2ZAx}W?~`?Y))3*oz(4zd})CVF7J_53@3-a2kmBcNb2DH;apVknS_tI2(p~V?`i$-B}~44#G~_@;sSU68%yZ zKa!tcO=9XHc+ZbKokyd=l-w5jv3_OK2*-I2Z~ICzlyv@JzSB^z-eWF$+k{CEEcZj( zpwQiR5URx!1F3J%hKm<}8``9>opK!HFF0r-)op6uSqwBc&I+L4^~>CjIIeG^T@qiy z+M8$I7d{{@_P(-J$sZ|esGBU5tI%zcEz=dYW17Yh!7b%sv$UU-*GZ=|{jT=Xgv(Fj zD+MKBZ4bOLkGT$L(w8p&HH`@ANQ=WA=ZqQr{km9VtM6wgpv#|T2hkmj`8668b)HqV zv_}V;1PPoT9k)Zj85L55(zYuXM5mb(m!Z*HIsTo+mvWp zG$_|=c)H524c7OR_7nT6IdhQX zBW^4?C^;F|<2O<9!!$HB5XZf+0hqyq*O0D)b$iH9qFZtTg5tF`GaW|!_03J5rzS+% zjly%#d~rY7xNbLufFd&E)(!T=evtX#P%dK>!L#lphaIlYCuw0X{0Uy?)>Hh+15Qg@ zR#P&sU$*<+we^0&1Z+al)z$2E+MJM>|7si4Z0Lrj(NKMRrE7fwRhUhG$%Disg1lej zqUNvD>W!sSH<*U@RF+@i;TPA&z{=`=s6-JFfVO?0Hoe{3g8V|dB^bF8m`|;2Oq-iE zPmp+UmEB9@pv3H`i~K zQQvGjQ~3&cHv2JE5X{q!4hYY-0Ce(;rhwW_V$_^zd0w7Id^)! z^%V82T|=R$Im{#S<~qPR2GUE5W|c6Z)tgTR(Ad!mxx3WsRFhADlO>!TEyz*>b^^hd zR}79&Pny?f5+so~W&kBS`W3M(#o`iG8Xw(@P>`Q^0WHg}wbcN$DYuTaANr@Cz$Z^G zeM&$g_&eRLi;$1P*JtHrNw5&CokZcL80whMDpo~c%`$^@58K%@cDzf`l(T6|Dxb|W z+|aab-+0u$1Pp?L`t|kom`|P*lUJ1HTFMR$tSmV1^{HuT(F6wGBDSZ&^o)!O&d$z* zV`Irvu!QFR5}pp0^9Y~kg=pdR-+WeLxZ8z&(=icPkX4?d($0c5rc`0R5&=}}(9pIp z0Ep}QOT=3)9T@#Y7)hiJ&Usu4Lwz5kHAI-n68*@(!NwekNUsSH8Wx__4Bz*vRk>|u z7Nd@rrK6*(ncIuo_Dz<7yB0ru_^_^3E25wQ8dC2I%Wx-8g64 zAOWc%Gj^`@)gLf7`ZqZNJsHubO3s;n9nRje>_ky6{F&^j3K5Z!Q?=Q*rP+<%W7i%5 zyVza7%isITZJQ+*=(g50IzX^+u5%>0=^xy&G00b0VnG11*^DsJx}+J0>b6HA9^9dC zm~LG&X*-1UdsDy(fZ5X+??(u?M9-+mpAS#(ia~{qKiv00LmTh)v$*e*lT6ITD)%&- zUq{tA7@n<|oJC8T${`6A!SEjZqe?N#!ilKlEPvn8#8~a6Cd~4QhS$*atPzg2<%CaJ#NDSn0)F_cL;C zWQ|b`Cf!e+JiYYbhp+aVv>(E_NA!|57dE9n(cSTY3L3vrxQB)&^p*9|q2VUUlvZ*! zzo@0+?o=)-uzau(OJI=GQKxbvpjLf-L-#<0hvF_b+V}>>17p<9cw5Gw=z<)1uTpR` zQ9My*k%693#rjKb#4{`vllgeTbGs zBRTtr$Or+2rOZor)VB+xgmDt6&RcY~k-)gi--H)OY5C#Pvm}ZE!x0jCG_;(Z3v}>p z$~)fRH;;m}-u`V#G)MSzzTPYKJEmyiRAHC*?>^imr;n_6o%<(sVfFkc7Brr}y#M?# z|EK%@X8OM?z=}HjPhER9V&jRf8=d66_)rE=Xh3 z=@-mx5LQ4f)IIhgHalDF-aRS8XOA&gR-Y-+kW>95&@HUpGky?s?;))rHS0KSey2$2 zq4Beme-)`cXbMItbEL+dZh(zW+@Jhcvr%P5Sw56e$sAeKdk9D#qDIv})VCdF5?#c!?IFp^tfl z@L!Ukc9nPukvoA5`%b)OjgXS!8jZKzVi8}WbDYow2bbL@o1a)!wS}0h@6DDatno^Q zh131QrOltn?m^qawT)7w06jtJUrYgR}WJB?DPkWQ@rT_;OqxFekDI z$cNaFualq6=;$*1@9xYzqzv!PjTp3%lnmqY9UdF2S{ULHZp@o3k6q5`-9RYT1H(vv z4TU~Trwxh8v&0-%0$4;IpY4JUyOHV0m-o^58GhjwClq*5_4iq=LzytKFwO=KQWIy@ zRPpBIOUXCEY77;F-{L3=-d(ApF6%_=dR01%pO~mc&&XMzLp!K z4~;*RPd&(EaFj_y&V}Um@ctINRDS2=)w!yNLoTGAsVd_Qkm(T~9R9~RdcW1-20-*5mC_^-l69}d_Bw=?&&-Gvqi+M zSAnXAEWBM#P>3>lhrf(Tlez@m$!duz0nLisHY&=94Q#e3J?-4Ifl#@`S%hnOk3 zW9vj~*Px5H$Fv8AFw#P$bMEK#-r1=xF}}>{E_;94KY3*A>OCYsg?r3>-$sd0?sKF? zo(CFf|6iYlBH|;VJgi8Ji(8!YMvDC2INRwTBZ>N9yrPr|Oy>9z73GQWKs&_xPeWUx zdVi01Ok!50G!_&$X?O_4OWfz>{m)u16z0|F8t1;neD-W>!sFudl8&BT-+VpM4i^o* zFN5x|ZRr?(z#?~g4t=uMBv7Ge)Z(_s+0Ch(r;bbfqwtT%zUV0a#mYy54ZYu0^t`a^q#m_YZjp6Sc`Fds3O`qu&1f90~6se!Y{-r@Vaxz_-6dm?B;JPZ8hWc$AX)nwJ*1`}`io(QwMM?P8PQ z5rjAOk9w=c9FUeNTV(D}hG6a)HpsACZ}P3{v#B>KJ+WyR#wuHyz#2=2edTcgKSFQY z41*l2Fk$x<;=JBL$AV;@D?@&Sy$f1?N4+x|9&&oxZnPapPF9xBEO!`fVCEXl4S+1w zy)K_xBEt(Fyhlb}!2t?NGXHTIW=>(WZ5op)~MbGC-_0+4vtLq;(yv*B@Px=MLPPJDs(Z z%(V0Vgdlaza=0{T<8He#V*2i8rjvh-q)3e02-YRZTRI-%`p}b5_y#C@$i^Sw^|`^a z5}uX0R?NmvH_!=l@Xt984k%eUc|iWH-k?#WsU`7^WZbUL>IjJcs(Eh^)t zN3YqQXr8qrN3}C2eb%nNlwHf$e6DmDq#&_`uO1YlQ6a>)*Ic+ZzQ6kt@XJUlpg+bi z%z!BCWSyGOuy((*)1vCx>-~yOA!en~D}$<>xjJ|);{y9qUiLXZ;N3@x)%$LHI{v2@ zv(@bN+U|-Tm4>OU%F1@t3}f2~UmpWc*Eqs|L^9pCn;6*NB(dksZkspwJto=O-)=FBSlvU}fC6vpuv{YE4g=M{|CcT9d zDAMzwp4V-2@%-~#Zcm8#`!-7+45E@9i=?t$SSZ5V2zk%I^He3(^`IQ_8)_o8wY@r= z#uJ!)#(#g>^SY$vD($&Hayl8|lPnqCML-&OiI?X6{=|Potxj`^Wu{m%-GkoKF{(T| z?CqQqzc>dA!JL4on5G&EmGAv8HXI-zM$aq69_b&mXY(v|z)4T=qKUTT?5vmpY;YNb+9K(gl zLsE_l34ivT)3CEjaGGBvNiGKeYDBu*!b9qYSr)yqmQz;i#e7P=G2tdH)X9?qwZ`EQ za2sL8a5WxrW#9;jey5_oZ+U{o_Q6SHI$Y%&|4cfiYgLv(mej$WQ_UgPv9-g*I2%1F zj9q>M&?}F4f@3aD>QycA!hM~d9-6-geu(AKh*2>M1$>C_$-~>E1q5dv=bpb&5IZlU zo0Jb6m{LrwjQ8aObU+F%mwth9B;64(=%+$apv9gC>A4wDvpL`rnmIUBz1_zIXmM8i zegOK==Loe^oDTij;;qzwzWle#C<))nMZ=vOl9ZJ))jq^p3?*b-G zl>^JJZnt8cm#cle&c0w?Y~Ud;Gg&yVKiRt3Oij*lo~J6G)&>S<3hv!s5cViQNNQLO z^{{Ym#^ao7ERXnXm1~Bn&K-*^T*VlziyTQHVYkr}zdpUuiSV%Ai!p+&uUkA)uya1; zfnx+Jci#3q8TW_~=ZpWhWz) zTA;N^Nq7}+Qu}6~mq+__Xln^0KRJ*tT!Q)}q*-71>)BEFQ9dlC?bL79Stk;ts2M5R zAEHw}Y_yNu46{3$?k(I^V7dpUtoVMIo(_R|wn5 zP@WP$h|y_kC(TWBjm;6m(>mirzBJd~6pOtb&tdD9law!rV_4vJCQhUE3Z8?H-kx@4 zCz!0Hl}toBpNQDEhpOcrue$ZM{P-I^5zBp%=_VUB+eF!^YC_+7-rAd`FrFlfou1SE z;v7{iMb7Q0bxkhpbC6Bd-4q_ppeLQi*OCI!AX(H;PZ1bHA90+>L!m}jAyiT+DiBdh zWm=~;i3G&1J4DsfkIok=Hm{d{2M@gc_*Lw!+*Wes(Z{^B7$vnfz*0GV93QvhW>gFS zj2MBcnI#&$CGwj7Mua!lH0Td)aV~N>)6p>4iM{@c86!76?hIqELW-r!7kuibu~PG) zfrj)F8Dq9UMh$%2O2jd-Ca-X?Abs)?!FFclmBhEu6Qrug2C|ECeK#aQ_AtHSNNJ{GI)@HtL+#M?|qEuH3L z94}Ta*QzvNv*P)cPX}2xQg1Ub&Nr3@4*D}^ambD@V==lmvVBxJV+a ze&ExT_~8-G)xp15fI}5V$QW_2+ltZ8x})2ecZm z8ylvqgJV%CeFm{F2D5DWa8Xm1*I`$8OXQX)kd3;EN)Du<3Tgs}8vpXqcPm9mye`gj z%l0^Mp#|OscgIuN#vE6uIb};=oi-NdRJeooK>h1;iGbfINDy5ssQh|3s&6x(WmBLxbD9$}KgV;qZba_HTqVyWwRzciif_Q|dLF^>Px^3rl zBzdJ{%2mNlbx_U+$%oUj1NQm=@>^e|>4u-s`TkYQIVg-z{k=j&v@(QHOFzd|u-YGt zM+?y`2Az*i-p&hGS9!?Whts_^W(vV2$!Th^uEgzoOxqk)1neiEYQ7XidFv!}t;S=W zh#j{JHe;y_YMy5tVBUExc0FvAM7Pu)Nm8L!hMF>;&mZA?_+~~#$b&=@IX;3@6DC+R zXMw%|jaVl6+j~rvLWvBu-_@|iKO+jLWd@srU6KviUq{{3hdd;RqMJY6oMA{#(jqkMV;K7Av! z*B<5`FgX>&JY8Cf@CD75!N)~9$1gfFf&I}UsRtbumYNAXc9AYj-s|=wq$i&%ZAq>= z*PaU9#DE5Eu1D6Yp2B}_#=#eae!|n}Uliu(ttW$&^Y-|~{C1YgM#F||r851jLvG@< zio-b=xYo0b@KQ}C%S*nrnA>FddB}aQBcRd*SUXB55ylsE1g8!n#NyI(J1_$oG@Xyp zqFfs*kJR0yZUbSp%{!cXVd8SX=!j`ml&v@`hLh3oUFnA;5U9_!tED}J1xrJ-Rtv;mjWZ~EX6XR?PIkhte0&3{ zZ+?OQ3}y|r_vQB=w4b;XOl(yZeA4EQBfg=dlUuCT5|DdZ?>!b|aZlXf%wb(qw*P_> zE5@TXE`k&aFiXBq!F9T&N;L1~JhoIYQ)kQ%wE^XkCekxA#>T~`vFMqrZykOinycy? zi>mcxXq}{c^uuZmL)uDIeeh+@R>CvV*LXSENgGyG3m@%a_TYo*u+j}2ki%>VAdU## zb}0koVwdJ;KS#}_SkUHE1ggJDO%YzU!N?BXNw4u~ED{(wu*fc>eU zP7#h4uI(XP@*uK)<)MMojg0^8yqdp0FYNi!CqQIPL?ZjzbOTLx@-|IO_MXdaq&WozvfWBvhF`@mU=O zm*WoI7)UN|dX>SQUx<(duW4_e;x%)Flf@z;As8mUw=65m6lFtwdsSX z&h58I)$)ghfHia~NHs(Y>C2&-BDM9n_o$1iaai;}0VU~eq=9FE1ly{(w6SX22(|3G z2S4rUXnBU1=_s1Bxc5`Nj`1FY0e*KI z^i6{j*W!j^?M}B+{7lr{dqzk@E}@qNZn5t9hTaaj0gH`+PrV&uDP+y*%P>`!ZYqYq zna-9sLh$OV=h=n)cjA4F-H8LaFB!gYWpGsGjx0|%%Z7*~A5 z&G}sX3%fm8sU8U7Q}PsXYKi{JF2_z!Y2QYM=tQDI?`r+PWLPD}H%!!REd@$#`|Kl5 z$WZrPoiz8KUO;q6)w_+)Q}FZDpYT$8RM2UmbSXy^I8@jt|Fr&hk4zN*CydVu)fg=Z z)KnqEFz=kBLib%sHV&A=tH*7G-d{4%|4gJb<3=FUS0f{YN++VhYPL~idqJ|9JxWON z{CaVnXBIg+{Sl(MwV!MR*-L%p20vZpDlz&r*vJSf%4Pz$8NA@XO?t{zZE(W((0aRX zwQlQol(xDdw>eoBAg88ERKZ)_=L~BxT6W-&Ra+$dE&5FWDW@ z(S-`rmQyHkJC~|3Y*t-D)&WwF;!m@6 zEIF|xlYP3qTeuJGg|2=E+N{8SZs)~E+obF+miCk@R9x;0wAZq!X^8~ZD{U~es#7aq zLV|_|5k}GG`=GrOan7sZ{w~zQn|oM`LiPdm*+eKz2&4x2-ElXub_3QN)6edC^z})( z+jUQHoOVMv(nPoqbV%WT)s=n-jD_vs><%pruyW}OJi`7km!Be%gaf{HG(~Ecs3jFY zg}#6%ZrS@Axvlu^0NRUDc7pj+pQCtktrmek&V7pZi*8AWELMrm+Z_%>d%8PiHUhof z)8?S!MJs_|m2!~OuTn+5(o>Hl#pGrsfdt3m!II9HBPSgQ7hTX8i_k)c}Ab>Cn8DJGTmm(fm}FA2O-F~aW7 z{$tqzMX=!sVlH3zAy#1GdfJUWri#Y)bL7ovD#}FazpEUQ`7@WdZ$C<*jhW8t1^btx zRy!q5uy<)oVAsbuhgqa%UZql>>?Q`c_p#JA<^{^E1%v}YulO&ML|_eJvon#&0XZkN z4F^l%8o38q*}w`K!;;sPWO*e#MkP>)@C5qpMf%1JNgSI>HAYFA%Yp&Ie>BkjhDP4) z1|VWPOck@mqE2kYCdc;T8$axN6*s$CibeRi{!A0KW1S!JD$Z^4pmO>voj>Xjeh72> z>PtdH{hYv2T^*6%?RO;oIW3MQTQ)PkF&(FOq`Ax~z;8XW3~zlp_AgIgp>$SWUTBtK2IG(K=s?LP_Pf>a)3i+>4s$)0qb^8R&va>BK zJ?-}T3FlK^ZP`!3oXKTFshzMj^uhWW^Ma%a%R-xl`piz1^WI}PzwwGy151k*;F||N zgr0&=vRdK9dFF8Kd;}Fe+s;m#hoQz2Y&>}+wbQVX(UI?yCUN|LMDxCQ zY(Hxs+`9suam07X&5r%b$1>`}(p{hr+rr2?)Fe;nxvtlD%ZT3JDmvbYmQYY{DHB(g zp3dLR_>I_yq^>I}$(P=w&}y4hZd`fi>bFoW)blsf6a3y1X0@*6z^65U0vW7qexF;v zR^JAz-z_FO?^n2vnvCU+4@3n_rrZ`MtkJKV{Z8naMk|w`+Li{t@tJhh8EgMr_O9GR zg`zs1_~8nvFMAhu_#m*;<&0RS!o8J11XzQgU1mXu0$4?0_;$J0+159%dZ=0D*vWfw zB$tcR=Y5gR&QYSpi#2WJQXgng&jb|lK72S%K`eks;EjZ*KELSe7%Mh5?fy6IzDRDx zz@>7@s|>ZAY<7wi!DqsZjA9SAjGvJw`)pW^2-IdOE0LGa#?%Eayt4QT5sVRJQS=m! zD-@X3ztfuJD#D8y zJjb?2-Kl0DQ~<4XeCor~gX@MdH4~gBplOeDf{R}idCQ{on%qs%n83R7*(pgF|Ya*`i`XUxdC53r1J6gEb{!`>wn6f0rH)o9YEU>VK9Ibc%#n5;0ib4{ayR$7Bb4PKOlz@W&+~IvO*p3?>{;Ow@Q6zP#IjmviF!3oY<9R~rst%cAOG@ie+4ri1W`%k|?z@T6E?x!u15JamZ>K8u@@C7lP|1wKWuP_gE7FJe>=x8;#;$zkK! z(QABDSCdJ3Nm2X+o75N;-xVtqz1vJ?f28&d&7fbe)AId&%G#*CDg1bmJD>;}wxlFb z2NfB8AM&wfkE;w7MWv8|amm#g&ob-0i<@TQQo{I6eL3`YsDonf*PteNkx2F?LS7a? z(f6JP1%BGYB_=J2n{)wE_Nm`7uxp^@{Bec76;35v<}xE}KOmEH_wZv^?h_1bHHUz2 zFIVzgsZ^?U?dch+H1wan8a=0W=dL|=tx3q9f=Zk`4yD1FP7!;Hi<#MzK_@Bzr2I+e z>zP~5b_laQEMg$kBe+3Kk^B|Puvwo!balF;v$c*o-{8xayjL#Ko-eg2hU z*NGqZ6=^OiAWH@l%Hwj=7J)}%YN~YI3@rrQ+{66xS+zflT@!0{&oN==AQXa%)QF+DJovbUpQ!|s_D^z zLKL6^(zp*riwKcOJi-@+bsb;6&fa;1`xi~t;_!tI!UxjRn=Nk5}5kFEC1_%RU0SP&`7JVs>_1~NO;jo21}z9{-5M$ zXc{|7ki!{9|B(Lh;eT=aAZ1r9HIuw|X=F4i!Kg6$f7vzl#N<}(@8fyh|4(3DH1&7| zoD~0izR~WG1gZanq_t!0>t>p)MwuzyCx7%Fq2y`$+MhA0z8%B%E(ik67J93-T-}KemgVEH=-1 zNd}$}1@4*Bdj`v{Rukk#II{6xHvche7j0mrJ)1p`)UpbfX}&clUVY_9bM=BK4vkMR zxak-f3*^BD06>L}{K#9DB_G8Ed7qc$rO9u5TK7VFS zz5jsrIm&Y4)au%oma`9yEh)39qGJQ3P{Zl^57-0kg1TtRTQqhB1!ApiprxIWh()nk zrV2r^#kGseAElFL5Ra($&__Rb|JNr77uUzz7fs!1qf!wr5sAb%l-S#3tejMOk8};v ze`BC3^LOY48Ri`QXdN{SG}+($2_r*w0gttyFbaZ1MVLm~+l}7v4`TO`z}ul4WP464fTYg~Oe2gB|4Lq+es_Kx&TKd+>kinx*g9R`O3 zua59tft*+7@9z5HguvmpI>UC%#HZ-aqM*J)JG_iP?vLN^f7@A%f*b}lk~Q*WUiHRr z{B$|A_^V~hy)>&M%EQEgvod#6i8lB}h511OIC^i{|DUQtlz)LtD14NDpz6?eGBaXs z1uo2O|8bPg@()xm+srD!WPg$&G~O9Sfn{CryJtkJsh}6mKXs^gJ>>3r2^rWz5m?Ur z={!P{>3CaB=7axtfL^dapjko{>@W#*G%1=h<@frxdAY9+P>>!zElh8e=?yw3o2t(U zT3pERyjJP={oA=gIN4u$EUhv)Lsw7~ybi?lr`AsPWA>I6|EWC9Shs<41L13wVs-IE z|JL=L9`9!(Ys2`<`n2$s8+A5HI)^u=-0xpyi~l3@-GYpGR}{emA;Z;_5uU%|5M|+G zOaAfsErIjSs;Od6%*SO;m75pg_)efgGTSr(RT`0SKU!p>xVX!Mg3VNq|G^v zCA`c9)pBs=Jvcb7{i(Ur#syDbE9v|S7RsL&D%!)*@k_{lY4X4g8v7>G-He=6fM2^% z+zV%K)*WiIdC!Is0pAq#zlfJ4H=nC78-D9bteojQ;?>SIBHpSLCE3Xgt=N36cWQ2E zFy+Dh=+b&O==p+^M_i%uXFE%OREy9K`dEliLi4-Q9{un}^vJ`Iq;Mv&)hzkuR4nvH zZ#nhV$FyC2A)X>_90&K}LimDapScHzQe5g^w`Z9?T>8+7~zr>?LNQuJD{z*aHUY03p>XnaJ_9rDppgX>- z1Xx5O>A%9c?mD)#&?M#kB>(NXEiIyAzC{k4v(1_u00}^{F-&=cH!sZ@gb+n z))V}e?=!-vLE%(fRCv(l3W;o%((!k;d+e{Z-A7)fpDu>dA^d#aqx-P(*4u~$8}f4- z@>sY@28W!&q~EzY4272s4-POx`s)+ZYA4G>y_HhWXHR$aX46{B6^w*fWmbEj)d-KX zL+4hET35~;M_;&|n5kndnt_{3lS39kS?)&)+y#~4v^Y#Wd=2Z>LVEv>QmFXq=(^R$ z)H-64nQpvzs7L}fYCS-dj!O&DPN?TMQf>oOYDH!a&Z(4|-ey%qofpx4JNN@NL-mZo z7qUL#p{t&Rw3o>9YLbzewOGnN%TGJKBG0D3SXXd@aLW_!b;}VxFESmC-M2PP3^j6? z`~@kePom84tZZ+~zH#^1z4!Yw9rt^28cC}yN?4MjPTG-1sxX_tDO|dlf0ml5WqUbT z&MTqwtGPRU{T%1X2r2);MDT*=H(^GNl6UVD`QN8`G#dbSYT@C5Njpf)q6m&5E^Dwy zg`dxNDR*aK_0RP^wSG$k55!`;=U9tLwTvSxC<4GUcl~mk_gUVpB zjK8l|OIR4!lI0`~a3}FdlE}}qa(~3N)N4dosDW3qmWKFJ>K~mzBk3BV&S|u|sbv-$ zY~r=|b8*@clk+vdDU@Hbd8YQ&XLtX%4>0i!5IFt*NU?MV4aSdR@DY^&(i!HN-f;YZsLWleJ;13gU0+!Ajqoy@xqVHxH)CaSX1Am zWL>tA=e2NEWy2yI`N{Gt6E|5WU4gv(uXZ_V~lR1Yy;s#?rjlan1v61;K&c~ z)X#Ps=QB}IfA21~`q|kV>|v+(Plt8={uSAia9`+LMBX3gB_aHmI~hT=jd>OsbdvS4 zflEqOHrc{&KnnHwRBi9JuZNX#;thPS+qWpCAA7n?ov3nBuN={vZZJ>0_5pDUSuH~6 zoG+Q$rD_FC;Z@bLOE>a-GM2-hB8GUFWu<04FYi9``-6nP<34|q#tPh+QyW>-3Y_C) zmgA6i56B$S(oFz4U1ba)IagxAFAJ?#9}vI4SG1_tT0|=LNj1Mx25dS2KabE#+}aOK zBC9y);^=i#>fM`!0}!*TRUaTc^21ngZma(3;Bf7O{k4RJ?&N=Uqf4j?Lp{LI(R!=h zc)ZV4O>jIvS0<7h!Zptg%Zm@e@m8Fm`LuN!HV4!j(Vfc*RlsOL&EF=eWU<>3XUt5c zuh);5?h9Gd^8=q;K{l0q69LrAeQ!u#fSg)~E0^S;jVacXZ$?t5RZLv#9lZFA zgp!LS=-*WvH?hywgQiZJ?25rSQJIeHA?_gqSDrVdCuOJJy?XtFdV!CnjC?{?r76QNr0 zqA5V>>#<`?rk>&cY~n#B2oaW!j0?ft+w%>$VII-d)(aHimElm1S)2Q>Ve|(CktGF6 zipggmk+}Q0?i-x#^5QhUq(5vvtT59ZJjdsHmGHyuUn~F|)SC?0YUjhp8>+lATF9-< zA}m)Gn#VH9?gO8ZLv|B?_q01CXa8|l_P0p2vRasjf>V&^0h~(`F&BSz+94VDjDPc* zGn05I8Ren=q#XCf368${*I$Y>1c)|1z`Q4laK?$Hxf6Vp6D$22n;?5Km*(!mljDL5 zfqzVf96Rm$FYS?L)~}AJ`N5wgn%b7K3EuE5((@d=`X&$8f#SiD7N}$ajMrYAci-dCZ^ZVMs)1|@I zDo(3=CVDgwo&31c{y8ZuLiZ;{JhXvGy zT}bhg3YOwClo2n~m%pji5x3-dNGBy?z%Hb?gQ4~>v%O{12@l-T7hn3YT;pcytt;I2 zXOt>kyuL?cRF2a}76@@yFnyCE*={4C0_dvFI0*ndUXSF;2ns0HYS}@)GAV(~09(;9 zrKdWLSZshCs?;bwAyMg=^TX|{M^*)lx>T~>T+lbx8bw+}RlbIwAwrotk^xy{2;W?? z(aP*8)Rq4QuWwUw%cLJ3!|wK4?owT(=c$5fc{JhflG9uz4%o{?=^JGx`|!BaTwzS$ zcaq~Yxxiv@PuLu+x0h=z7J^$ib}iYrkI; zkd;p55jnipJq3kjEtT2Sc)}vCFo{BNKdMPd+O7slJumpn8x4*B$Cw@w`_a}1AkVyE zr&$#~$ju{4DwFMPQ-C%TAABIjJDj&%vqV_iLfzl>+WoSrV3ezDOcc2~--UQv&8TT` zd(4dIfda{%{yxV~w`|$uoJT@c5e0anl}&&*Vi!X zLBx=#dCJB3zmA)~-?j&rG&3)p$Tu#f%zaZ&GP8rgG3{m1RUGlYnU)o}trWW|-|aUU zlCRA8bMcFBY2I#|OWR#Af4II6(wAvLrS$5xE-snbR?Q^-=n!~MZ+l7nw3v25xWrb< zlQ>XGLcEH&#LN0imX7T~Zf1!F3(__4j|=nnGcNz7`fqQ9_xSeUhQf{`d)>`?`!3){ z>o5dM8GrMr*GL8#bbPh1%+sM2 zZs_lu%>M4WwV*U~$zkHlZ9Vv04g+g)2XcPUA`7{CHodAIg_Rp>aDHo=EdtfZ(~zPn6r@F~U9EB(03&U`9Er}_8$k`3Anc=)Qt;Qo@z<#BS;M%s zi@>vefsT#Z+tmw(UOuVvAD@LNUijkI+f>b{$_*)(s79<*YAygWHT2q5E7YJi6Hq-2 zo5+{d?_+1)Ntu{s@yZ4SX2k#ErC@_DBmD#g*Zjsj4Od%*H(QtkGJPY!ong-}yB>|q z3*rtlOpO&?_G@>N4Dp-2dmS`8+!`OlW<0ltK3|vC+_XnYD$+S{`~!^TKgjwE=}cxz zxKUU0n2aKypqg&~s1OL_p4%YF9XwafV13a1Y?wqROGz@@4qtP7r=OgwqK}?EZ1jNC zxc_G6*{&m}^zD=7cC45VoK|cq4{M9%5&Y0;3P}l6qI^2TyJNfPGlp=ScPxJ@A9yp4 z)yYQTd~=RpbCfC*`li7_WU!h;Yo^hiyj6qou1FTqnT~xprf=e==n@HTZ3A?sY2_tz z6}iQ!HEN$5g+%Ov)d%>R?iRL?8{1}{JBuA=9L&>0vjTEoBM$!f(yZ0ayZ zOk4l2*tv)M!aqH41>Vngh;iz?9&&$^Y^wzJR|^*7BDoDFam$+u9IPp5Xy;PF9nyOh zqc)$mxG5g@NRxtsuk-f4$QVYBN9U@B4sP$d^gbbDg7{{+bt(%nXs|dg@-r%#@i}Yp zeMj2yb7YtgO_co*az!_ci!eX=hUM#$NGBzk`0&Mx7vGA)Of~0$E2Q)7WE;C|dMek$$_(}7eoLt$@@BRx_RSC&{ zl|qdP#`;@gOaGD5Dbd-qx>ny<_tz`VrIR7DRhsgA`PM8PB69;1Gk$FvEHra|EDt1M zyd^Xhabuovv`8&P?QIV!#X# zgIyVq>Vy0l?bnQ_R?gu`Tbj+zWezy_wHDKL=B|kAt1*5C3S;+BKzHH~ zo#*PD^aVh=^0co6EkcModTyD`5(o_R;Z-fe;8&X#2rYcN2DS<0adr7K&Q?BBe643# zL$OY@F1c$56wRbZ>M>*-w^$u(Rwc;=S2&Oj%i^PKQ+-Y3LH;y-(PwnmpUI|cH20uu zjoSD{vN4H^IAt>A%ghmLy$q)6S1_fK5D?mZ19G5Y5Vm_(#|b?=c#lu$UzZGn({wjG zJVxdh7N|F>AtcD(_znDd0#qwD=m>M@G)nh|#8|VcZsnOk{`g&1z(t6NLcVMf|A??; zUE1Z;8~jSoJqi;;p81P6fxt|eOODVjL1m@i6%jF?War>C^2t9Og`*ySWJ4A4-r1FEa^83_DPY;fp;vTuGxtm_Uq8(3 zx-+QJj797V2cv28glTpap@IwVrm@`jz~#?$4lQBWOao^T>_4IcmLoJGK#OwSL>#oT z1DYHFbnWt9{{XTk$DPhqe3|?35o_(HpR|hnIIFE6?8C!5=!|C$G%5*QrF%g(|)e0^UxF;c7-CZhmG=H}H?6`Z4Jj`*u`Ksl7%=k3~?U`YTaT(&Rkd@)5oEM@RED)k)7HUlyk#_)34bCmtW6z^jg(crmCtB2DK=j z2?uYc;WVmpPy+Bw^GEhYO4n@QbGcNlyL}%2RO6#Y;p^8-e3XS>3XEj`rIg)8+q%-V zXw>TzqN_bFcpdOOsmeR=NR9=UaQU>Ba#D0)B9+h+=3^MKMj&sy)L$ROcr_KZV$Dr} zXi}h6(2nFbxtQhDORaX?oC8JwCeAP(|IHgYKb?z|N#H(AG-Zl>r;tZ|NfE(@6mckK zuO;}!bi(y>O^#R{ckwf<62wo;^K!jGmWc(#W4XFikr0|E{l{J*1cQf^fC9Pz$7U6~ z(IY8ct(|OZTDwIL6PdaojrtR03Jm*V4NB@?PzI$_(an93r;arDUn$VZ;^$jt1y7C} z8)kG=EY`lmLZF$QA`>N_==~bh_z7#H-+N_v*;$*ACeiJ8tYVjpBMHg$wayqg4AHAc zVlQaG64MxVdpk7MHv%oHZp?%VS42^)gvmpO{6|u!zBa0^6fUzp#B}_hAAi4 zxhoTi&?-VYb@Pk#X>S~pjJj@A*VDu5+|xI!{P~vN++>w%Yj&Mzh4;;J7WlsCr|CP& zV>X$3@Yq-xNKzd1iHPd-B!NH3QrwQ(;H&W8D6EIp6PP( zskS_W?p%2)?J_XZ@!%UDwhM!S^;h^q4mUq6#@JSD+2PWdxh8zX4*_e@6&Kn@R{1T7 zM!rFL=ksn6WcfHx>RuBP!NZf8!qA^ohl3TxG{MtJNB<8OSBR??+i~~RA2o0}Y|}Na z?0)^q_6r(y;t|z?(2=(LGMEI_Ht%wI&$OL&yeQvn|BtA*=2rdzoskE%!tZx zc0>3lL!bj-+{^JTYGP4izM_yo1Ff zawDu0!?Qe`Zjte7%LC1N8!Fl7TU|G9P1+=+7A#wWNOC+F8La$uuWVAWOXz;={YNb} zL3-ZK$rQ8l3>1^TgP2kPwbY|J&+pRj!aIK_1^n+xb!4)Q(O{eH>8rzYyC=3WP(+AB z!K_$(-FlJP8H*$M;fF6~vD(3}O5}32K)+(TQb91(H2B9x+cAb0`vZKF^o)_@9YQ1{ z^-ojFX**)M9;k(?g$&(bkw))36mTZmXYF*7Cw=5hdpURH5~%@JxP{uDj5f-i_mPdm z^?f5ls+a7G+~$rcK*0JtQG?zxMO3|#OJ7|lyU}&mBeYMIk;p9(RjjfVe^xN1nonXfUI^}Wh$eqX~b#An$ z_jrs^2~ZH<0S|u`RP^<>&OzEm`Ej|vbq+G~fmiSN{jQmKJf=2x(mn5O`Dt(Oj45+Adu+vYE7EVN?0BlfT9GG}cJ zhSi~A&z$Ro^jt1(%v1d;`rZ$cW&|wtm&eLXfBjQY(HDY#9u>d{?03Myp{_mEk3B@t zv~F*nE&MPK#In&Ik<7d!$?a+a+TKFD8zG><)L@Bxh1xuX;zRXB@EVG^mO!Fym0cfC zz5Y*yIw9}F7VLh=^#^9}7a;0h47*hb*A*vXKBKuzK6+OqX4tb*Y1m+k6m+{e=dM5c z63At&%uc7rk0VM77?rCrs!&*6hVqWY+L&qJ_?aVP1uh&hEDC6V4 z^&p>Q|#$8NL3ELRb0+^Si!WxTsn;c<~|#ca?OwUTA&x&Ur?_=VTapI;$h^R^;1Po@$S7p@i2?c5D@yM~0apu=rb?G4G0t44#DdV8TDp8Cyy z126trkz(8-3}m%()3=pJB&v*PtE+U+`38;|U4W7O4@wT2Y#k{3?~BYURP8_7m3*{F%Y;Rh=^F0P!4Cr7HT z%yhPgvEHx~6h`mZ3aNKxmtD2K z?Oh2c;hPdo?E<%3GTC55VC9dUm0f}!^c`p9Hs>Rqg#q!5l@n;hB6W8Vr} zK)C+G`9ba)vH66rhF@=_^)uME1b@hD7~6N zNH7GV+lKBktpB3t1?uV)Ei@9^SYh=PntXgKkMXbO+KZiRBWznfq9*xkI{nzpLjMl+ zpD#(Ce+#}%aZ}6}-;`|7!Jrs^^My{TDI*){b(bO8lqZKi|

7)NUXYYNoM`Y$og0`}!7jWQXKeA8o>?)bX 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 V6uKqk!;mupQeyI=<)8F?{~HEV+1>yE literal 0 HcmV?d00001 diff --git a/doc/merge_check_tooltip.png b/doc/merge_check_tooltip.png new file mode 100644 index 0000000000000000000000000000000000000000..4feb54a0ab76bb0d585ccfc426df9b145fcf9e35 GIT binary patch literal 84671 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

vmocEi0Z_h}qL=`|d+2&1HdBbtqmjzHN z#IVA1-n>>;EAnRi+Cq%(jZ|%RG>WtXNUFTFczingvEyws%ht3u#s58kDg^BzeY4J* zhmQK9CkEpfQ~hk_oxz!RC7Hap-3z_1%uclIK9bi!am=C=$rW6fCp4csym5U<*vSZ> zA>Iusa*Nc@_NHvR%d*O@2a{MU))D)$-5sFXn?s}VvgYC{lbdOwEMwAy&K_=h-Ua1w zHt^vXocv^#^pTNpEAlkHNQ9`SHNS~Yco{wG+V`=3O^h7OO1t2#f7J_{e`?@p|z9$*{6|IuNy3?VxG z###oB8R-Z0#dI}Yb%`-|UkRt`@OS)vu=Cr=_rcXm2OX?0h1P_ zM=vRK>WE!RC!lw7$7^QDX6ROCZnCG%p;qF2g3;8z|#~KT*>Pe zRMq|RP)^idVX;+a;o5=V^Bh$|D(jYy+@pV9#-m>WqicB&NEgYF;?TQQhwIxD)9HY_i6Gh|X}X<&55(8XypKVV+aN9%E`rdn7X1 zv7wm*={j6725-)StY=Qp{-L--p)04RE4icaIz*w;lZ?bHtC~ER5tl+;yDm0#6es z%CGn^y~~mZWs2!R{+cb68C2jilZOoLiM31ehiCh=A9kp-aVg^1k-LClEG@v@hD@2~ zg=(iHHc=E8Z4;=c|2^ta2T{c-ChRw!tM*v$1a!Ia5M8xFr)T+}Cq>tbA(0CL9&Oh+ z&{ik5_ztN17KU5M?r9OtT-KCIW*=^grM zmr1!ILKoL0@qv&r0M~v{C1TQY8xTlTwJ{mD)}ctknU}px#(kJM7;`BDi&>*= zMX)yprgYcva!x7wFCrW6Ds7Fe-luxPt{$C8uZY&H1w`TTS?)O9L?kBF&hEln&&5jj z@sr4ilG1hUcRe3ypr+-R*I6?e0!g)lrt^AA%}nu0cV@Yrh#$tQfIHGhdJVDMfrjY2 zZB|NDd*ssy8rl=Y&(}+YXXg__SnKG+XzE2WZ*|_41k{K>_fFK-{v=yHf|gZ!Run`H z44*%?+#CPLh@oyWBh_I4(F(E+_QplY9ifA=eOWSRU$pKJX_m z6Evc$_T^2OA!~ruNK~kExfP?-fh92=8D@B4_K`yRs{rYHg4wB&=FRVz3LW?7mz$#Y zwLTVqyI3J1I@Jng*;`v4p9E5ck>#3k4@Y9uTa^S2lH~3AFxXg+sb{T)Mo%tRvKo^| zDm*V{&ab`CY=@imtl;Qw?ErI?D^tQh(!BMF9Nj)MuTrC8%d(VjnohY%lC-v$l_lZN zadr$h*p%cnrZ?B(DnJ(<7k~c5x=PLH*1#!ROnlmCF4pfb4U$13-9C_@Lzpp=up<^` zXOa_WT-F+QMMf^OH`v+Mcn%Ty!iPB88;vnDXah*ggj0;>@5fx=fU&bBWs9-h!syIh zbd#og^y^q~jaR)lv9j{KzF~AJU3`yxGc-!kWC8SCK;-Vhv`-h%vMnqE2|C&pWM{dR z;#DF4;IF-5Y#xz+bu>ST_;KA?{oUII?z{lpFdxk>#xc?Oqfu6rKNJ*wq07PaOK9_H zONZny1OJ?QI|Z1hWZ+4glIt}YV%hl9AhrfN;rvAEI0}ZeHEhN_#qM+v4bNBBZ84Tr zp^r$!P!x53RsbC_l$&r;` zn4hhNfH}57Tb)N5xqoIcha1kiiE$CIVhdF@HBsuh;c9}~PR2rujnggGD1PI2*TCx_S@^s5b0b=kRB34vt#lkI<9*jQx8u?&~Rp}wR zs_=OywKSBtPF#$tNNhZ*PHu5?DXdlzG0elusF9X(U!munVx{viIUzZgd?Aq}bx+A! z*BR@@CAc<|>(3knjL^ejC6wE}YWqNobfs6>{i3Y z+TLfZ+)h+%N%{5(PG?F+4KeE{YZC!M7=SfbQ&J0|x4^jXq{<+~6q`H>Wy`Y=l%4au4Z6C|`7;YY z+U(^8>lh zk4p+i{w0+mW3#voS7+H9ipaEQyz{_`_JAdwBu~vlMR#J<*`vY7iXXCG8%qPh!8Rp? z{8p8mS}CTd7zJ))Lq~c&rm)%3-OcU_UcR$!Q9m|(ei5|fO{#ua1iZr|@6>R9 ztjUy4ru7SOF<_$px!9K2mApdh^!oDx%{MD27g_T8Wf6aN2oaoX&B?tMnEQ{22*D2w zIkM~Q>SA|4H7wp?rBsfrwq5#;Oy=%aSI75sT??jvqnuMTRj!17V%f7_MQy9UW_lk1 zdgL7rrU#?`P}J1hhl@Hiv0iWt0m?<6y-R{EO!O6+OCsBnZ#zAniOIvqJ+m|xVa4NX zRS#Z+$hs|bL%glIWEqUd{FiQDb8pWrlw^sku(ry4wB%VS7HCJ6_MR2^nP>qzv+c{* zsRWky4_i1XmXn|=I%DRaTE`MU+>h=o2(>_HL9ld3kHVSkAUGR$_&_b`*@k1b5u0ib z6Gt|X9LY>&VPp_-_^r7I1#vk?fmLWioEuEQ`wAeKE~CIj@qG+t?VW*l0I#T(Xy3xR z*27hF(UL|84lxKBeG4eEJTs}V=<jR~~k1(v&atzEH?*~`Byv6o_cNQ}r7C4@5w()~bKS{i$`0C>hf2Z|K^~D$KQ@oVV z(3Ot(AG{jgU2YZ($7fZ41N~Z}G`&Ax6r=R6h-JCsL>>1+#aQHqmNr>uys?GXF7iuH z%IJkl4*kt?N>^dw;ouU|J8vRKX^+qpk+!1c4cYxct+c+hE}+@Kx2eYL<;B?{snK6> z+uedtt(G=4^AUq zStf0I)7FMxKYG!kELW(evNA#{w^F}zH(H1i>r2wTQH!|lUA)w_Oc4>~86l;D&qgH@ zeOY$}eRJ}Nw)&7~n)i{fAWjb{#l_XhY%^nefzp{gGhGR0G;!b36FAe|#Zo4?A@u{R z{8|UNsW%vA>DXu}+^sbffUUty=P-3%u_6mAOn|+Xw?g!fn+2yjK-2#5Vr^P9$o}-o zeDG*Xa_2s&5_7oOa+F~-HJQwM_!!gHP(Eb_(W;@m6jPX;FAaZwaap!EfB4X+0k#9q zYIN1PyWNuFM=1UVIrP_OUz4X3Q;9iCaQV`<<9KTA#=)Fkba(6`y|P)Hdex)7wRjzr zB_e!k8&}{P^g)eQe`JO}Nh660eD5M}Zk?Dh zcHEL@n|E00#J{_dgC_tuIl=9FffO3Fnon)U)0VN|Q||Z08j^&VF5fLf9_*#AEI*1Z zX&<{;Dd+i^G+aNBPM9~h?v5I0sWy9^4c7TwzOe7<-Iv5!X@GIwoeOXK8F^N$H=$RD zclDhs@5URG<06v6xzQXsYm)E(gDTnnTmk<_7Bl~!(D2{l@IM6lpjzJacQ3%dWcfd)r2GGt3ed^b4^bz3 z_ZxgqFIToxKfE&T#3&D-erx$?nIwynlcPRmTNq$apww6#mXxWMI&L`?hLy$ctNsgx z(%3X57C{CfG{UFrBwE5$X^dbC0uZ|Y+;Wrdb&O=3guYlIu|pNhR>zC@}%VEQKsVpT&iwA|$+2b)CK>bo4QntvuROjY{|WE4#o zU|H2u()}j)t^o8GrqcDLez_9#F0zC6=Igl3P&JL5cEFFUKkA^Q=&d~2du+K$Rh&2` z<^vvmbb5(jn`s@W-89|+OFGY$>3;<-=!2Y|3k@i&ZU+S%0vC~Zuf+e%y~O4Xdeks2 zcE=K9#!dTU0s$GzpHGFYQ7dt4!#%5*8j5OoPp<%v+-{Q=NAp9_C zR8Z*o3rax#=XQLCxR90viOZZN68jAkj!g6!y;~*bE0^x_a=5qesEyo z`EGNOJH9@sRs)zyujpPBd?@EGygi0dEe58#RJ7hT1JisIL5hDeWphuBuqSM~C^}?l z&7p6x;fk+6xpOb1s4WpqzBZ-$5{~q{YL%3*rgIV8dKk}q;EAkGyi_DK;Ik6n{LM{5Lc{Lv2svDx^7KG&bx;EzeFPr zRko>r^;qrg_lY-hMs)j0BM%{{$-(Q@FV{r#kTwjMKaNdmwHA@|v(;3`Ho~jhZs2%I z&L~4?!eX&KJ`{e!t{oAmw7kJ?iu1qos3eClnpNt{TEl?7n`5*VhH+lUBc!O*c`DpD zPXyi=6n{U)#8gC@N(q;45LX-~4p?du%-~SeaSfR85(bL8A*TjVhK6wGY}y#$)r!Cq zJbT_Zsoai`NECV)jat6Jnji;o*K|7ho(`gwsJRIhDLZZD5r_t8`9V5e30$zKko@w#Zz>BFBzrns19QjVXIri5bVXW>vI@_y zQN`AG4Hooa7Q;+DaVvP=IL}565IUET2H$EwB6>C?Z4=MDZ@`k2NLLQB$i%C$*?T-! zboT)Ad7KjL*k|fCEQJQ+kClUwgR#fSp%Ug`uo!$-Zu#t0ls*}U%`b9Bm~>6tZGVz2 zzYrfHLOi%$o^^^s+R=@vcblgI3bF&q=EZvPffCLJ?mbNrmJ0#=xqmC%UMi!b*)T=0 zrR4ib$@bC}J;SXLXz63i^twlr&&^!*hOZj}2xH9c(bC2d#GtX~K6283QYl|G5%iip zSE;)AAd7yyNXv4?FV(8}b#gJGfI_|&B0awuIL-+U-V^^;a}Gz;2~Wm=V>y$u|k zxHA!wo@bUgJj41;La`x96jOqk_yl>eUIq0GO6Jz{Q{%IH+7#CZJF~ZPx{C&nn^Ym-=Xd(zFy(4v*q4M9?E4%87P{GrexWk@KhX-*?$<_0UDDZ8<*Bv5Ur1(* z116hZsi)L=?sJeGl;&DJu$h<0tiJTvn=7Q|oPV7agSAe{Qa-Wq(#vTL7CITyLfM~D zeOrD{FYGDurAlu~CvFBR;1t5GP7=1hRNbXHF@_Cu!mXi&hm28;y1|~0#%+!MinwP@ z_-6zP&x9}o<@swb^Ynq_%4(TA3ZC@Ys^ZupCxa*prW6g^p7VN$Lknj@X9H#Ay`rhw z@=vY|yutpQ)Z5-_e1314pY~b$?%tC?hP|MC0vnLKlO_4bTc0k>WXPSj8=Rhgt@~|1 z2yM*}&5twVi#fWP zS&wa6Sig;q^oPt)Cm0&$y}71Omi9ejKN)B|EHwL^QJ&Y|qZxk5uGL{bPMGX3;VVUF z7`A$@!+L+`s)8Mg1g{dLYEm}$HhYR$Ro3Vv8ud>lh zCvwvtt*&X`nqsh?B!yB?b>KpNhQ$&e?6HIp#%3?kuqrEnyF@gO@MaakS7PfD;o~J) zI(wa?hIpC^a`U%u>HWnovGB4#GX4p*IIBbAvHbH6<_~sXjGmk)DGn)*so?VCMe2;7 z;3lN_a=lug`BEnGuDo+AWg~WGqbixS-2Gv3AO&MLFS?}kOe}2E8e~PDOc1{<{#a>8 zO^a;SXour+WDB@;Urq%CnJCo@`7S(Z3az(k4g^J4eDN~rfO9T~^~dImX(%@LaEe$o zUk=-N+{Vu^(q_lP@@NqD;*zdGZ&G5+@=WbNn$65zbb;5En@JQI!sX>Z+-9Ak0AQ#7}zB+2lIG%PHq@YQM_#s)DsUUjEKkWWb5a z<<;B%6A!n3pN}*`{qs{B@xW$2;m`c(u{}U;W3LpsSeKW>u7 zObS1I2AQ`4>}7OTt+c0X6ZWN1OcCs6Cb~gwp880y-L4phyEM$F^{!v4Uh)>``dm>w z6aF&oVqay|b|(jc0y$yIEj7Yjs0p1n7rcbKiE=B|YJ!#aR-93u#cL0N`qmg>-Ck3a z`dVP38AU11Mjf?F<$yn9g5HjDd)uDP0+z?}p;T|_;SFDY5wo5nYGb>{M95p*@P^9+ z?zE-V`tDH+=RqStIK@Z1)tc>$BG$fkv2MM;H&K6o5 zIFikPWYE5oNmS=d-A3CgVa4W+b7C3FEY=2g!NN%HE@m1{BP0rzIVoi5Vl*8ZE;l8t z%7(8^XiXOCCW#sXoEkHwbS#^vGwMsP=y*&8FKAiUbWW_?efEYmw#+$8Vx=nnik*bG z!pA3li#e|*N}Z3vVK*)O61UA54#$I&iq&F4U!RB2~^mTBd zUdq#0ZEYWpbbC)WyAoXKZQ?}-S|)ThX74``^@>r@A^Uhx!GzPGJd%;XzaHetNfak+ zai>dn$yj;whA#@H6)RtJ5GLgXp95&(b)%rkOEKfOsMn@W%~o2YllJk||BJe}ijH$< z+6B$bcFZv(#+aEQF~!UbZDvZ^%#Iy1Gc&}@%*^hXnVFesI{W+f-v2r?7c*;a&gqL@ z-K|$@NhOt3Pdz0CR#fqpvZs@nrf?p8sl|WBGl~T0U*}V_Ms|B!9^B$!x)Q!T;WeSJ z_5VU#;zq}@Ui1|_nA0j!NlAe)6G0q3dDk70xnoZ+jH-90#F#3i|BS%%vR`a-^7}_N zasl%LB{W9xz#Cc-*WVKf5?59G@?d&`9)Bj<*REAGeW3DoNU;Ov%cLjT0zrfrHDI** z0pz+74?oVuxJ}&S)jk9}Y7SV7U~N*EEzVb3J-azaGJPtF6I;g4%~@#woe9Thr^w4i zXncftD2KWsEKKYScS9jAR&(bdh0)u^c{4ONq0bv3&?laGq|YAJxGgh6@Q;*_zwBvgZ(=5+FzWEZZ6AZq0 z*M;#ht>*fMsDYgILAP(Bt9fP?s{qIt|oUrz_9bU@3xBfD;w&>X<#BujKV?+WE zVbGO7(S81sv1&OPz^QsX{SRb{4H8x|#W~*l8KEyOtil-u zwXH@IV_^7)-QrTd*VkPcVfquOAJqkH_(_vhC>F6v@eO-50k6l)nPH&u5tU`vhtnCx z_{>Z|MB!D!=vjiS1xvPC0QII@|T*tk|pq_ z%f^u?B#6K4)$yZ-AyfM9y&igjCx4V>I$q`F4@7Ir%dsCDjq!tN&8)g^Glk6d-!~{y z+B)KFATfIjOmL%P=7J&#j*@S5-VGNTyNr#5{)FUWJuS734CUw~DDb)!So)%LODzst zZTG67mu`=HwCrZoHI>L55#Ny=CwOb>*-4n zlO6q5+sszn8}D4B9er{fk%auU1;}dNet5a}?_Kkk{_|a}@QP3pYzT<)Yq}?~xJN0+k zrxUmHo_#cxjy>sjh{T%L1S8% zjhpLPJv1jg25E%vU`l-E{&@y6cK#+?c~S2z+0UGV2}KK)!m!z@d5fPw#fXt4&iEb# z#CO|^a>TA8IssO6{HS!VV@fS-R{HXf$vO94=bSS3uHSTde?F$JC#B>Y*cQz&dTYj{ z-<^e})m({ohPyVnY3@7D@aR}a@_`-qY~NiE5k&DSB6gZ}UK1TOQ%2ZJ)Y~ZGnYv$O zNEM-T+zYf@ny8M0-G#uXQ7E=wj4`KN4yZ9vGg~g!E=0rQRLD{hTTQ;FBocBMYI~SF ztlKHch~UO+Qbz0SPLX0{VzF)JbAR{unIx{phfSPWPJ(rRmNesQhlqc`D%TJS;)PEC zpYS}cTWZ5_;eQfbPj?jm!NZm_e**caJ$Z7u$#>VnJsiuS*L z|Nn@<{r?2;{*TW7FZwumb$t9_&jAMF2aQYt^}QYKX#XIWgTNC_m(D+jbwp+sAYlJz zYX9{bIlmGu!_Kf#lR~A~i0#3G97v6e@ zyuEB&x8NC3GLcch_A*WSr`*3@B>xX}aV@71*EJoGFSIB6p5!c$DMPUNrCX!voSOme zk?m!_W@U9Ekc;_b>&`+*JC}AF@ad4*%2Y1P+uH{ zk-7`|en`{Wl$b#+s9mbKVO!nCyK~uWX9z2PH~j)GWI8bU%7f=X;j$`&(_@Wy*PVo% zj6RwIMI)YGe(%)och>~3@~{RJXQ}b(nHgfs1s+uoG7haO<{THFX)GtvYl+KQs))bQ zxU^lQu?ySQ8gbO%tLqxGqc=TH$(YOCIJZCqoFsxt!+`1RF|uqCwQCiPioYAf(q*|7 zC4F@sy5UQXto3;)1?vSaoRL>CyS4ZmBPxyAx3j5UIG4*CV!O*`IYXJ$W304pqXS%i zU{b~3+o)6={ph{G11Bx}o#1yH35*)J?9@GdigAof;4;%Wds!MG{8tM|In@}2D&Z?XiZ*o}PB=fQ=HR_dZfa+f>)`Iv? z^Gm%}r~JFHc)5;+dSN!}K4k|eONkYx&qE49xq#N;(+#{X@fD^Xxg{=D9=*en#gcS77EC^nl@&>Bz6m;0i+p2Vas+!Z|klX z!H55zRW?{7tL*;=CuhLAtsdP%8LHD}ZjSv}kL%<3t{KHK|ED8+MoB$}1NF(m+JXaf z2Hs?TU8Q5*$Zye)Ph z2}ETML~f-^W|SiSKr$&iRs3N-%eXp}y?uF2xX8f(SbDUT*;j=Q^?9q(m#%&MuY?AH z;*hwmx2|ydvqN|_Vu%EsOxoM2)oscUN36$^o5vCQZfHDVvWe5|cJB-N&#~!mhjzzK z=D%_>qO9k)2UeXraJ9We8HHW7A_;eX5gO%vP%?_8UGb$7Opi+OvL}N?*UFrS;2cjA zPA#xgsuy=ZwyZ7uvIXgYe95WfUTwLB7SQB z_oJL%g>uu4f_OPk@`-sSSV;5)LUB|C<1diVduN*-&Ct(gXx-)F?pkBW(Cgc+Ec5vV zcD!s;ZuG%>^E}>AHiXV{vQx>2c5>^1Z$DRZA+fkSfV9wS$C5jX&Lhtc1weG3F9&di zcdx^P8PN8&=WhM1$D@)NUNS(dNZs(@QfMsDiQ!_WV3EmadpfI5$@EtBL8o`kTc#A? z6lUBmMSKLV!bp9~ad8}ZuwbP{k-VpFP2^tSyBvQ*D5>D z6l$$h*`2^hB65z`-5v;rj&Rm0?b{+ih`F9U0weI%Aq!WOPiev3$NsO4^>5T}AG{WoO zu@x{*qgAhgt2OoWPuu5%HiWoX*pW zridW9B$rxi{4cNvdMArX6{BZ}Bjo7_w)$h)1U2NPsK~&EFctiTRiRSpnHtJR;dvgn z@E~JNodS=T7#?TA=wOL*wyrvb(|2d*Acr@7Sa%~<+YSP3-@8wMh;ZjV@+p>$(EbTK zab`(c*pGrN3~amTX~Rh-X5a11zwO{HG!&Z``K?{ zs4AT;iIDd4zHBVvubOd6Gv%T4Q(}59CnBDucb|n;ByS~norJ!@JLzE*x0IY}u1UGAI5u#9OF?vQ52Mux|g6h3{$9j3^F=hd!%?&Y!u+QJ=B?@sSzC2Ztr;bh^6P^+pnXn;sB0sH7{iYjdUZZ(5=q5+H(!Y zV8~uOGRH9pAHWNI>q>bpytGJgBh|N&Fyl34lh>Gjggy>q*%RZEpywnVs}^$E`=oY; zwBaI3KZkAi`EZfN?)Fgpso0sXbuIEVYz+}i<_hZHOJpz|McI2XP@IL`p=Rv2o(9KAv&2ff3f1~W{OsB95s4Y(v$p+o${r*Pf^p4E>db5 zS5OkQe4B19Dp`6L)5BT-bHJtVvcP9mCW}fvk(mU zj7)c=CY~AI%Gk-;AY;FRnSM82VGEiG6+Pz_{hMtsW*?M5ZQgFumMJ3FyK9=BoRqp_ z=zAF7tOfL-m419wg_n_%?a0t2UDd?mi+bn*W5Yj>>bD9xLV29QHCVkmCq4~Jccmx6 zZZ{KaR`14c7|U5Yu37F)>4z3H1f8x0ao1-6Td1qn$38p@+DQzX`w_DgN{u+tYg{sT ztM%;?E60GR^3zI;Z6huV#z|e&Mu%8Iivl11)n_St%AUF# z-O)1uM~@c>4%dHMZwOpPDa7(5yshwWM#>dicEo@yOj7QYSe!;*NVZd_-Tj%44HEO5 ztQtC@GU=0%_AOkhfWNr_p$lw{Z+3bbRK#Ecde^G&;E3nxU&cJf8yyH45 zGLDK=2Ne6{A3(ib@urWxPFeH1K*q|drf{}=x!)hP`Y^DN*QDg`bwF1sQZQXOt+ygi4O2Z(pz=F1#L0B!d3gm!zpgo-j zLo$N>99N&sn9jdsZj8G1uyCBDpOhrmapGDZvRX~-x40766ipv`;-WeBrhQejS<7rE zPi{9L76FumdR{yiEnO;S&jg0qkHN!i9VPl5RolD=kg^!)HN79%yDc;^S&ExropqW% z;0Rf;!||o?p0#VcT7N~6PCOT{gU4u9b5(ox@Xlx7E8bT>q}& z#kI^9He}6$;wYq+cpYppc!h z1xixKbm)onq^@=@L!BN`_u@l2?dMRPPtH;ul?6SG!J}@uwug?jS@t`)VXyUc45J&* zxOS)4yP?sv%6F<(uSg8zAZulL8E zZbo_PH_RSU3H!9)UXlUOV-Fzhm4lR?5Dj)^{-d3*` z`ePD#x?WzjjTC$}&76-{8J)f>8%%}G9$S9~!zLFw1Gz4b1JwzZ(ecjBvX0tn|X4vtuBmQl_C!(~~mSokdj;$VfiOGV#C2p?!i2N$_Sar$A zn{jSkHLaHR)d1T*pGpO&%;r8q>;1_B9!(k4gdqm+NgeJs z2EhpGVhk5bGb$C@l6$!|@T-;qa~-l_0wDT|r#flj0~eOIlE#QXJFl(_@z|j_U7Z4- z%e0*fPbB$ApYIA;hMu$n9Jxtm<40)iHr&I!up=k#B+Z-SFW+Jl5g>mZ2(ReqbWmKJ zgRV)cQ_`agbcU-a(C%8r)wV(CI_<;x3WHtGvXQ<59EYYgJgihEnC=x#aV0EwUg?x| z6=|Exus)a5MNjx@U(nlz#lGtLd-c4GB)WwXX*-$8RUlvM5e7X)WqVlZ2B^2R^-Fl_ z-2XoHIVGI(Q|w9T(wGZQ`SiQV+r-@ruS^BT4_FQwk(tv zerKw$nBMM_#k;@iw9QG$mt(D+|Kp|tX~F@4JjsjfW2yIo&U z(=|OF&u&e(rO$x~aAuyylysi1d0pQ~eToRA`6R6;H`)1g97zsqO0O`NCt^g^RV z;;_6LbD62;x2?|AkEJ)>KfO3M*2^KrmHg*YdDosAVZ6OEssmK?PMmZ%eiymd#z7&dx$=zNd(?0#1$_Rm`0X2g1Jo?7K?$7Ec0ZV9_NX409 z#Y5}gz;tAorQdSL&D&&Ba8Pv%-0JVCwdJo;G#28e{DiQE(b-CYHp6ztZXo4P4|Jeh z-K?N?HPX;5D21QAFp`tCd=&=J1++q#@$5pU6PhGaoxa+*(sAn4#)7e6D zEz+&#wdXhCWeIhMAx73-F|sW0P_M9%C2mEpG}_a1Q~9AQScU&-F5jllofLa}qpz5a z>38j0pvN?gt}(-{K4YCMOvco1&9*sz|79HkZx)+ub*lF`RsQN+c{)5Rd;(MxG3@+8 zOiSV&g_%g#WEF+npEZh&i9F?MqiVUCFysxD&N6{PbQP+P*2+p{37pCwSPK`*-%wA? zBW>Pn0!K`jq)c-X8(dWrd6f!sEH5aK3~L_W81ub;=1+ovC_i7>gKVro-ZB=&QgiCF zSk1+1ao30uV#r+TU1qzr4~_R0#kdpBxA~fzh$759W#(df#pyC0SF$0j+3CJ=Ml9*! z1O3dH2NNDLuRt#ip$`w{2kmo2j)Ys?hwrf9Tg;zrQ>)ZRHryNv_o)FcAyP0ziZH)}wB{hZ!=+1>LVuayE zucf(Tsu9yCsa6dv?&`obG-`gG_u=)^ha3Ttvc7r3tuGlWMtB8E1VmpOdoA9qZF?$d zWCCJT%24&m>`2JSX`j}}C%*MUJdl{;EB2|IE03hz=f0L|o`EtEXIqz_cb>-0@m$EU zXr%hYlgIHAMLig6!`9@5sESvFtFS(tO*8Cp)mI9Jk|0tRSQa);zuX3^ZyvDn z1a+@?upDiN_W6)mGBtL|V-8tZ*osq}A57X8x1B|5g58R|4~i~|{1!}mM57idws~J5 zN3I)|Z9M9AdYfaJO#Psh{W$LoeYMZ#ep#SR=pnn-t$EbLismtnd-_QWrat7XHMj_x zYfoE=d7DA|yG+`w-&tSt$X};>!}p5Ydz@8-d04@)o$;GHeG-uct{>aBYaaIG&-3lw ztoxzWEX0GTmZnq~by0j`m+roiecIX@@3v*ww}hT^V#uDV1S}+~k$w&1jXdjrK(W44 z9j=4SBCl|!L0s;=x~lT1yp-c1<1{7(!g&u@esmoiQkvp;Kdg@iQ>NF4l{tMiAimym ziJTJ7?dw<-cxdilktB7Oyo4xK1~iN#C0Y^6UFv4eLhy92mu=AUL$1@kgyhl`v{35* zPXAtdPs~6=aOkPOo}o>*jQkcs8#>M4vXE^77hlZq@Y~XI;M5u&PwJ6&B%>~! zp&b62$2kGO`kI`*tYT$dsZ%f^>@BImbS*r^#p_m3B;j=HKA+Fo5^BQtiQ5A*3&CVk zsI>$88u7xU=aq)!Mkq0zP_?HE!|x6XgT?tmjRp6&D| zm0;^DK9SaJZbrvpK~dVUT5FAW+RFG=-W@(gwI9of_`z3i3@r~U?3?r7!C+lQYMTh@ zx#zOHD;XL%<0$O)^j77}iH^mbDvGrp#aTgK`yP{vQ@HR_z&mo$gX^7Oi?&%2!st+1 zQlW{78EvL`->w=)%n3f(AN?CQ{YA!+BGpRR_WAf4!CMjENAK%hoga&GU^1v{7H#+T z!$c{9(X5{SexG|;ol=l5DPRvYp-A8A#fK-C6sW!&G9|ErqGO_kmv@#xM<3=Mbe#5B z>7c`1A$RYGaE5xlALIJ@ta;RPee~0mw`9`I2VJ*ZzGPRcG}YTy;);`f}Z5>zD^p3e=X5`xnfhnHOVBsF&%5S zcC~l2V8+wtidmkDXJYB6$G+6;V^=+@r<$SHmdgCHB_IlKn>%o{H2GdFU?Y>m=tToW zKi6QGDWA0Sh6vpT1!nbpsHrXz8@oI8T1nnyJP&=s@%jczDYq|?yDmy>$5zkxt$_r6 zG#Dj5M`ME|UfifF7vdll1FC!cJe8HZ*pZWOudLfP`mfJmF7`xn=U}eMV6po=emQ08 zc3*0iDLqiE+seU4i{xmY&HBxe;R>D7Xswzj{ga?E&*ALW&ZLAUc1j}QO^U*ST@07K z(|V#0#w=(_@eO&g;v-0(L0yin^2WnIf}!5$b_=_E-k8I8DXGL8r}93|yE#Fe$Z|8cp$Z-{QgeM#msTSJFCNnie_n{={``g5T)1 z-sHhcg%uXBukw7kY`T?H2eDz|xU4bR^@^)%`so8^6%}(sXL-)YHaEu{u?SY6$vCci ziud2VX(e9|&Y!<@8d&_EoOkMKC%ACAy}45|>G!U7B43GvC83b5(zG2-`tNTk#@YsW zk>i`MdbUei`5f_9F=+?p@ff4(m-Z(!!>#D5%pWaxSBuc$kZ@?f+!TxvJjlTx7J@+g z-GR~_*}IdJGGM1M5cwEj-M6hMV1Zi`M#*CVor^5eLHc7SZY`T+KFtY=}xtbgn0gGsYXWT1;C|}mn`N; zG741wL3fp?)1?7JknqLd?mf70@8pOP@Lxah_-sWZQb7K3ldBK?Y(I0}EQ32huk3sf zaCTCC3TN_~|1o!=VQZKrOzX~zO5Az>R9jZH!(0zy9KS!Ce6KzfOfK?xW&2rv*34Z+ za=8GMKRNsm_BaukYi87hsBa)UgrvGZQNjkT*TP4u(q_BjLj4{7NKOJl z?fil$!kAb`Ir&w2ZENy8Q^SEfB^AtCSAj(0Z|?8kIYCcSG3F6+DbHGi!%iZi)gDUD zHd_It!x}g^e65eXwE4kXAY+Er~I4DLYGToycRyMc0i$sx4CwxQWJXeU{qj zkhNJVhR>vA*n0n_c3P z*-$hh&z>Qez#h7w!H#%MW8-ZbZEfv3|DZvk%>niXmd3zolhdlI#-h(8S!GhJ&wD&5 zGsEkDJQ$Zah-<8w1|1pX;PU}gQ{}~-cKaOcHhSTX&0^)53yrQ6v&Cf>+jS^cq z+BJCUjSnk#2~R$OvxZF){u9Onp~$DP9*w2LGCyP5n{?e3k8n$$B)(Qe^kA|l`Feka z(Lw(j-Ja`hBER@(H`{uD`xIubh7XN_cP_N+CeB~I2}gh3QyR-Oj$E<7_{Y--`H$y3 z2m*f24M+pYj8kB97dGYo6KpE)uEs^v!sSwOJ^(r)Xs3J`mSwcUU_Ub2HRPA+>X9J| zRp=6{O#Ru<#s2Fpmz*DA%+!FOx8hhYOF3|ctM22&!PeI-BLIN#dp0$5@0*o*=pmKu zA++W4iaf28g|^g+EmvV24hQ;qwQ@eZV&>=1qde@Mie|!BO?c>=?+R0(&7)f*sN4|=Bisn?!x=_l(IVzyw_n{Py_1Mzh`Z%<2&n1Ad7SVe199ar{c%Tn`-UT=^v zC}6O}A1Xq=HG%4jbEZk&0P6n|s8CdT6VWyd2|^HDO82o-VV#rlaU~(--rXz7xNX&8 z+%n2{1l&(vCXoOuwlF=3O5ntT->c#BLo;i~`TP|LVKuaBvUl$y{h=MP zfkkUOe#PA9w0ATEnLZhTfFADol z9EKE>O*rvTW`JX47lnj`{m^C|%0hfQmdnO*ZD8ieN^2 z6a5d#m^C}n?Z9iNb|Cs68|@6|5=*`q51t91IWH;Frp85xAwf;(OZ8v(TH%Mzadp)$ zd52!pb@%qY^vRQ8S_{~9dpk6td`@s=lbhO5D6ozJ$2@q17x?(hZ zxbQMPQN2&*Z(=H^tX?C$|Qe%$qUB#V@E#P>??JK z(FNwXINNyi`;DSrn``@v0Msd+!2X1Pf}8vrUD{W{EDK=Snu8znUU%9(%TCf#F57q} zt|xblvs_!}-CJ2y%vq%B!dzEcj<8NAhv_NEU}s!!FIE_c8(t>&#gd>Q5sI?aQ7O5&4L=TI8Qe1VFZOTqlt$Ev{q z_c$>9l!M*W=I2O>>H-VDkX&cHA4}<2LDJI)!1^3we2q+Iz0r%KQ_ASCrFxvBrv%B7 zIdGiASs2Z@H?oMKFmZ-rGoF~}tL#5I7Cd~6l5;emD0H^-Krc#*%0;b^qtXgRn=g~^ zH;lhxK_uiKXB3F316d8rKz%&;$0^Q+rNsi9A-g@gt$z(TJiwu*)O6Gdf4pg|0 znKv}z2`l|EwZLIyimDNbyBzSW2%i0iXIFIQbH!B19fdKn`r>||+`xjnKvgO{_YM2t zk!ykSn16H?9|D+WHSJpM*y0w73=#ODY9Gfn)4$p)Y9sc&O)7XGSb5-Hd%FVek-J0QX>`- zx^byh&-cD+o?Rx!UI>cc*{NrqB{9a6Wi%fy?Q$^xS%`7NEws2yroTKZ+Id}csCSE^ zRV0l`0BqOoy9Ht>?ysh1r+T61Rq`#^wmQmr%572eb`C`u4aL(fXFcAWFmL5c2b(HN zu=p5FQo!+u+b_<}KcV{J-ANZFpMTOXjb82Rnqo%p1$!O+9kB~>1HP=H9>j@8DOz)| zr^+392BumV(63rwAnml$rZKoLZcKin_K#n{2`kke@1KUt_p3COxB|VVs!OJKwr=* zM+jIEYE8{xAvATFgXXPcDM;Eo!^k=(W1LV)8;vF^e-QKzu-S=}p0a_h?x25zn~S7s z5Bj`Q-}OUK=<@qN4W4OKQpdH__!7|0^@iUyb7tu@PcR_vwQ4e3@SgI0l!QWYs(Uzt zAEUisR~i0`+`aL3yyC7ic1PNIftT(m)kJ|4Eltt-HuIa{eP{r*Lf)=`SOYUB(YjLlE7^x!3wdA4^ekbdQv z3EC5JgF9nr?Ju~x`#R`3ULi%j$Vc43^zzX8k?XUg_2@99Wx^R^4;Lr4PwhOnljr*& zEBmGorq0hJv`5U@HBgk13(Y%Jxz4MU^ekq|antM`=xd!fEjX<+JNCyqsEJq=&js?C z5sxZ+hn%fR(qrDmv?{_* ze&r+E4kHQC?Dy_ms*{rwiB7V zo;%Mox|qVLf`7k}hivRmz2|3l6D7A=`HgZiRCLFCKB8otI3Yx(M-$(m7gl zWRL%oD?AQT0_x1(UO4UBkS6_X55qhG_OS37J?C+VK~H(omlNYzO`Ds)xd6N7qg@*_ zbwsM~i8fs6f)WC!#kP^92133+A(HoYgu!V1kM*n3>bv-; zNGzlz!}?QD?PSgHvQq6WESc_s){5CGI7Y1{C&^Rk=UET+FNl0SSHhG7mRtY>T*I)l z8&Dceu60PFqp*^Clf@z~x4B8ss-GhVu*=}}ihk!=!83dRzP%^M$bz`>DGAD?vN{GBp{wsxk2+buQlzRx8-xV9I4EuV$@ao&pFi?RXdG3gU2>nNZ zqLRiGn3%CrYTt1nY2oHmh_aQ3V1P#Xwc+4LF1)`&(f=*#|8|nrCnj04e>?2Yr|kEL zmH!+DgQSq>V9v&0YjNcU8d0WxozhhARnj{ z-{W_|S)O#OCGT^+`<9+0)WBR0f*7^YVR1|vJ+uOm9=%t4l5(==s2Uhmf<}A7;4p>$hX361F34%t@j00@gDg7pdT9*evag=7I{A(mEC+ zx4FD}r6obcy+8qU4Od-RhyK`OCl1$ea$U>nN_7qty{<+C4KA>P&HXhEq^IsUl~Qd| zef55@%U+^!hC*GcHodcMCVFEF$-mSE{Vsw>7#wvaXNwK%AR97bNf+b;^@zVLGyrMp zC;k2%N^b;M`j~Gh#iC9XVTSW!j!p`cLO0ksTdbPS`y>Yij>xchoBS19)fU!%U(fddgoimSyEofk%*BBRm>kq{HQpRO$ufEH$0fnNVJjbt#qhH>iugt zn8SUV979pRB3`UHqu)8Zwxb~my5ADTzcY2DJZ zjwZXWvbZlX76RjC7ko2?$12(Q5|yeRtKmr>4=|j0ZsZ|8yQd$I_>@DBHsiwDU^`Uq z%$1g1b5_NH8s}EQ@@n(3zg;oBVE2&*Qgu_rcI~VF%c{dCbKT_cDx4*q{hwV=ilt<_ z_v}&5hzH3QsiVaT538%UM&5s@H&Xv@Rl58M%A7M!WL4zN;OFJ;<~s+$QI=U$G?tkyGtvgls_N){|&#U_xFY zgU#L~H<7WR+r2hBbUR(p^Wg(4_3d{EkSy=4 zM_(g&v(&EoCI-7l%pv(1yf~U2kbz&$V#k=|4-HW=Dj`i%cUG#4`z?c4DpdPjxolS9%=JEc>_b>dag{pvWB!~Uwu zl5W3p_e`>+h}OH z72heQ}TN_eIb3wBhbo7Vl4a?xRxh%84wWh)Kl6mhL&tUIkLs3 z=^T((zzLp5@U1T38|lU6G_7Z=@gVH_cWP4)*dx1Nz$4BYx4J?>{lsKED*B=S<*S=_ zdnVCOxO|}zx1HVS&%N0u4z??J%Bk%R+ISS+>;Fnw&j&_BwCclI|J4GQ&;>JP*&wjM zqxr{R%SHa603?V=UO3xWgNuPH{?4;^$e}X_sytjOslV|P_{6-!jz*9C{VAEpxT<;?EO)(I<$?QwD^EPsIlBhevYZU}VS*(up{-J*f?UmVygp_QaLHiN>QAz} zm0mM^i=y1!$Kt)!?1uu`$FP1ci3-UqfAnAmn-6LBQ`e0a6ds>Di_5|&#Y#9aaV=3t+}e)^}1dJrqBt8 zI_ucyT-#iOqI}o-Bh7j2Kc;$|?GWAFHSWJ+GoFrB`2Uq@Q!BgOlrd$Tg2rt^=c{E1zL(t zpcHUO^R?5)aQp@ykbB#TPbJpYKRJY(_Fh$_#M9E&_BlZ^kTj}D+s}Cy)bqCKWe9x- z1g;HutlpB3aNWoA*Yx_)YvM^37>Jm9G=!!4J_VyL_tmWlnS#Aw`vSmfG!7fS%KL$e zi&rDODsXCBb+A#5bx}x)55oXEh@#p32YP!@r|axM+K{C4RWH9tXi=DW7!+I8oc+GcpU%3~D<(=shFmvwNxyp7%1{&>E0 z#uC1AsJ?f<963v^js)lg4$!;HI4Uo+tiwC)k~#-V+?!9zjjskG-7HmqziLjqT@H8~ zryaG_EgA*e3(HNBeyHx3B@%K%$3%V%clH2JAD>aAS`v<*S3FxEo+IrR1WFjfZ$dyd zWk9-7-*xQ78nZh7E!F}4Gv9IskteO)R<#h$$zOazaHrIq_QY+F_Qp2)P76jIN986X zII-&M{BApG`IkC<>n7wB0zmYW&BZh2B;zt^(?Q7o^2XAG0D~5~YqgLl3uLiF!x~M7<9cgDwY+b^{YL8vj+R)MIvTW$Mb@ioi!sqp7QKiXp?u@pe&6@X;_SEK0Wq!8kfxU0tX4GaMWO`e8OhnQ7D=iA z6vro$hH+Q{me;38l}zq*#6szLGQ}ZLXm;x^h{OQn#4nM>2`BikjxA;&8_pPj zH$#-3McB&k2^l`lpP=XN^E>#xAD~n}Ll)g@hLX!NfSLK`pbsVTgkV63F#B1H6tE_!Uk+o|hN0 z(acq~cPv#-rjPRDCY(;?qI0H8!7L6QyR+d`j3imOD^J{0oy-lP^cGwWoF^HH7Sed) z8l)zlf5YAaNc?PGPr02j?^+a^%p}~165GRH32bXjt_Wh7^X{I1KJ@34s4}D{x9}%h ztu)wg4vLL~EG3tqEbO%9`kcSR$Ngo;1m*mi(abaZrC?@q!F^Q49)z(8$ZnN$#o^`M zKcZEnamf4Z?-GBP$?i)dw-W+K$y=dB={E_W5D48?q6%-USYgE9xX`2&oO@hJp=YNH zJbd&lApXj56nXM%1_G&+{X}3(A)LBJ8|U?|%_Mu_ljMPS+qR-Yy5`zmLRZ4QofR-E z6>F*yg^Cf~atdcV^wJ7qTRi%v>HtA-kGZ7I~fE3?rKqOCv!J^{r; zX0PXw+pfnmPn$bR&&Ex%huU%;L1=``??xU4hR3$0gcM;>^Io87M%vzSlSGyksQ23# zve2?xeP6!OyLC9cx?}{kT#h!5+AY@#2$HO7Pt$J>!l}`5jK(47%!&avda)55hHnQtq>TgZQ;C@eS4Qw4Y!O&D z9%rw`+r@?nA<@lua!>Er7_FSLw2{eP;a2C6NJ_gq%hM?u|1u^Om({0G-l3Be#3Vl? z!l?UWynTwSA&E_X!29!CMs^Gw=H|N?0{R>cn{;c92FJH65U_Sa5Xc7W2>F&IV+&DM zCux-@@}7*9(eEqG2CD&jkc<};O(m@)lnH7 zx~x)u+(dx2T;$3#&}7f9#-3_#mRrBhP19}oQJ*?zcol%GJb;oD=-6il3coNOpC?^# z;8Sj~V*mBiMsWb;rU<3C*9??bq-9Js)Y}W~!dCv1ZY!i|8L(&_JW-p`&nX|&f!?{= z1U=8!kaT^xtZ#%vZXg_9Q0oOtC(gs}^!vP+WSrEiGcW30>7`)jQyZFcks@1vp!A6mLDg;$}qU}>C|mQ_MG&J)w@_R>%P z+$_JT{1(??@z$+paMxBs2F-n+)kuILf10-J1kcvy_vpcl%OkCZIIxf?$1j1f+h(mB?vKBRny z!ftS+&%}y{$(*o7vGZOxRr zYRRDo+6V4N_P$+oes6u7@6$@eqxX*(U&Ai)k}b40`>3Lzv=NWf5`?O1S#Nea4rqLy z(idm1@aMfovaQ+seSJbn97;R%BnhtrQ14ukCgx29X1?c%bhq>!J9)FCRT#W}_s50| z`Y^=Q{uARegUX)K`R2sKQW;5T=&z~@g?b`d$Cu*J9I z9d8`oeW>iY?yosb{RE_v76*%aC8g3O*;5OA*CH{`cdRDeP7!CCV|f9%jp!xlbLIAA zqNuYkJoP|x-vze2``pI-KBXziFIUHLd0E;p(9O7Y=1SI(H$}z>zcXy`%r>86QWt(R z^U1I}JfJP}CQ^vWJ)ACg9-+<8(JeSuhiI^pAN@>F`rXrdL)LC95Cp=0d2l@C8WnU8 zm;fHyn_iKHpuec*I%lel^0`NxNXW5vq`!AZe~Nw>-M!7X$@LBze)kJXUnoktqg6up zuN||frlOgN)l?xlO%qAH3R{*6>Oq{mbUnQrTP*WMWMf$^85RTwM3yPv`87xkVcIdFX*f zwB=LW%stEW`NwRy1-gA#ENVMp0r(`ig-W)4SgAaT8B@P|i)MkW-BQ3f70&6_n!6E zxZ;m%f4eGA6%|RNMol1%&^rlQ{W@{WWw?A*u>@AtZvF|| z2d&V^e$nsba-*$2sw`!rA4>YP^sR} z!!~_d$_f&_#*98e@#h?`r-s%_s4=&lT13DKF^HrVo z=Mhf3uf@&Z=8%YbTA#n-`w)UvB}LeI=+w&ck(s+PgXbo4B5)ybC3jeSRrg5k(!q@X;reRrS?wz881~;-75!x1E=4U`ZvWJ?+F8$ zvUYOY@0+Qgw{uP?;P^$?d!ykg%$W8osqVuY)(+-4Rxx4t(q>$1LKVvWFSFA4f77#G zB6l%3aG7bng#u>S?sBU>;4Hj|JvwMC=^@iJeMRhUG+?DkYLZl7Hb4r72B7_HK|wKK zLh{fR+Eq`Xz^9f)TgU)Y0T0KeZRL1ayw*e@J0g~dQIe^wpI-BeF;pP9k*h{m^sY~) zso_dhFd(U~bxwosmA9|x!>7zu`zF(B6VIF+o+P)47CIJO6l=HD5TluF^>OR-LugpJ z$ghoIFNHdlk`dJ zr&j+f9x5Lofj64_?~HXDa!D{?vi0R%1g5x%=`&SQhbxE1D)-_a0KDamRH-YT*&?SU z_`T44>DP44g1Jg+&s+OdkPmf>;@xx5y`e@4N`{!iR%cCzd`gy3$WN4|T@PcQH8V}} zbm2ma%K-j^p^wDM{S=9j-yXc zqcZgt{x}ZoEg$#$P&&kGSJC0Im7@<}?}xPMfsiO4HO%?u;L9bgO$(ca#3OVglV4$< z^oWF_lE%+QCU9p$Z0=b>%u$FBSHys#ELvnTGXw<^#s#>5-NT~lJB zj4Ix!dtdT^0-M18B5+Ehh34DavO!(>qw~8asdMdv%3~w;e;PzPu((2`?`hH+L7O{p z^h_$_h>BLc8Mm`ok~cf!ZIRSumORFaSHX;gJa9|JdAJbyPVuKbrY)~FvS>tM(YHk( zXvOU9Wz;pwZxJsQ^v-8WAMKbF+6hSuj+A$V*}#}GJsPO3A66o=FhEr-G4v&(H1tdBjQfakm6c&U0wRQrVr5I^jXRpCQ>rTTN&*Kd%SO3 ziWwZekkio--DhCm+An`Rx7JISYn7gz`Q2zFB{TA4c!9k=Wg$X^kLq`i=u|qim94n- zAUarXM!{-1faC6RBzLt+qhZcq%>E%z_XZJaVY1kW)8RTYf&gCpP>&G!OEMN*10wHDhNj&T4Ws`O0e!ERR}- zbn)1oTkovh?<%CYRwr^Rz1HBWkh3_AfgQ~{J3lrYgl1DW{b)9xU9VX<%WJw<{V%(P zC)&_5!W9)+S6BD1_xO>Wj$ZV;48q@3@lZOVzN7>k!I7)91KhRqv8H$dK>`j$@QeLsK zdlz$#MVABl6HXT5X?}?g@SDQk)6O({PTd=j`0pnfivBkKK$Zq#jy87-l1eA}2<;e~ z6=(g&O?Hp*`Cp>RuQU+;nQ&l2%UnM0Z_Iz&)bOi33_16mpit)cF!42=5#>OKwM>@G zsZB{YdnaOi`9yyc#rB`=tg1}M82St3`E#;ih}ex~*?Uf|hC&M}c|AGqzibarnDv8* zi~ge^K9b0`&Q(6ts2+aqQlQp6W6jF z7d6h^hO_ICtUER*k!#AqUEM&u+vEz9CvRp1CEef%r2xp!;Zmo0Q2lPBmI0r)N_KO_ zkT0FAeX%5E1h{_ecbc}NgWj0umM(|Y5MK;v>DG$bVT#s=%-q#Di86v}^iCg-jT$)_ z^W&7rfv|~+>t#h6L)`bSoaLJMscaM^JGO&UaC$1s!$KMZuhFp944LsR2_;J{zhC(- zOqI9F7G6(6U~>7D?r$C-Xr5|LWF@K2(~T6{-w*RM$Aj{F_4dty&LU^|w{?gSesj(U zi366Q0(^nf))%0l#A*@t$yBLZk5J+B^bL*eybnoE#J-QFm2vQIeF_rsaZJoXtdpaE zzq1isrVm=!`*D=N!7z@7)bblo-B)6!u{P0NQ#;?z=3O~XW%X*4f>6b24N2@cNaOVr( ztPs~Nghp-eY&St}#W;KZHw*CjP5%(}EErXn3k8qE^2RE763aX}rT2oH`s*gT&Nn9b zNs|KPh2*!e%XZhq4kY<_4b+wzV4lx(gV%TI+YkXZ&;5Zt+vkZyv3XIlgSQ4*kAZuZ zcqgipX0v|Vr_bzMeCH*n#e>a`pK2u06EQ9UKy8g#ZnwDh-I%5Oa2!XLHuguIrdT@I zA*_izS1xMfS2hJ|Sjp)_W$Y{Sm+OGP{rV?>JS^bV+}`!=s$xD@t|V9%a=R$K_)qg2 zp*>iLjV(Sl;=gm`_O-0b^2_W*`pb|NU;A9T8JNHxrIy*xuU$B{0OF8FR5ptHP=~9J z@vpW<*Bbol{6(+!m-cniDGXFKnvIWlsypoFkZ9-%`!F2+uU>XN(WGSDff^=#DXBWE zQ45Oa^~ry;vt$O^tWNVBEp}-;BowOTepEEBrAn`+ID1B7n4D&OP~;a}NjtHa??_wetMbc=WtKWSm~UI!klv~zCR z(B*VX5KLrVd;ECRKKc+A;fIT&LPy|!q3r*-OP)%F+F-qfOv(zEMTzkzeCpNuiG(yHtlYFID$NHLmI%Ds^iuqlGPs#?A=r3c$Z$w?Q`So z@|N?&XkTm*jX}FW((h|EqXYilPKOwTFvraT?ay|e;!^8 zbY%Te(bKb<2}h8=PU5#-1i7| zeyCQl&&6*N$1#S4IR>jo-M;=Y5}GyV^f;c%gyJ%JahBI#T5+yN5T@PIwi9K9+am_k z((c28fO5^@UW05vGvpU{_~qB!nQ+o>wLE5{(}r8 zTbb+J)QoLI09+B<{Bi6}zDCh*vO@5c1*mFm>h^l0(E0r8a$LUB?i&9+1UX^Pw^>RoVjkeE>tvKETnq3OS05PN*r-bV_F$Bf zlsh2oQo>p9x4ci6f>Sj_A#I>El89O|7{O3!2Knh*gz$r-nlBkBLsOTyERaf`u}XYVJeWd}K5= z!|4T*OYzUY2-~u_v~Q)zM#f8%iKVSz`k?jtpsj0anQ55xAGc1uSrEI*RyQ?&pjRit zEAqHt!Np`hZvVt%E$xP`@W25OLb2xA>n|zDPz_pE#8*ugY^?P^1pFNnKsT<9^9*h}4+zZxh*hh_0JM%qT@-ibSZ_9s&DT z9m>PH$T*8xf6msi2elK^eRw)YDpFHYq*Zj#u|4`!0;0vK$UXga8=d({L9NI} z!|AA^z6q%T+h)ILG*}>n;7hVaVCK*Mg%3On3Cqn^%6kRdo9VRs42EV{Y<3N)HTYsQpL#%5pcj)>4R%SgKfuktl`QAh&DmUXZ`;}2fZHz^m#j9Vv z>F$a=zEoH3QXIxBYl<-!oK_BzxZhtphm#3zo#OgFe=`LN;I~e-u1WCL(c6)@b>m|b zRZ^)>flepZtP!K{=${-S*^J)(P7|1Fh@n1y@wAtxcjYCyE?Q+n=;6zqW81ChZNW_M zClt&drSDM=bXoE5bll(t*?iWN$Z~zMQlSOK;bbnJbyaPn^Y1SHh}8@%6kZq}LQdoV zRZaiG9V2J6!^v%s;Ux>%+TvKSOzClJ3b6<_79Im89iAeE+$;uf#uQk3>Zg^gjr^)V z?VO~MZ8Xp*YNRZH8L@)%`zouATob#xOyl@p)ye(tQ*PFh!%PyNQN>Qj7<;>8SzgjV z`j>k`fHEge=LF+3c~=?9=`&sE?z89%-ETiD(!9H-6pj^nTmLg6=Ir?|cQbU%z#uC$ ztxoMMO81#k`{$*Tk$4f7OYwIs=b8;JJ_7NKx|!rgC^1wh<#6Npq`ojak2jD!%q+R~ zc!R%DpLB;sS9(kkmGhbPtBSayQ~AmtRQ%x^6ghnhs?te)d8EqQv#bjjhhf~Vm!i$Z zL25_5{oQuG^Zex#(*{&@xpKaL4#+Sop&3eORm^7*Q+aVNi?d0{b}<}p6H$*o(?1*s zX5mkfoY}lKw49b8Yp4=CNHHlaOm_T%fDRg3PaLupxLYSb1#9O zUTU2t>fRS_{WE#Z+kvwFoQw+%2YVSN+9Ro^CAUq1FDQ$PUkhD!h$+j1$E)Q$5Hvg7 zPwkvF&0w>O{U*ocjg8Ues6-_7_w&yeu7E^{n6*Z?6{p>XL;?EJPll`{jMf_6iJ_h} zL&|uA3$2MIX-ts)DjCWpg}&+Z+t_X1C-b=reblu;-gs10hTtwUZ*db{8wm%O!=rMzQu#n1U!N-7Tn*V{R#G2?mTPSC|e%<`$tnAYJsCs_!#zq@&l9JQ? zVVNt_BwzmGcIL~}a6*;%ykpUl&6{J?BPq_xmfK+6ighRb%s;a{rS^6of655Yb^yY+ z1$zjQik#>w7xikVN5dlB7maesS=+aot5lV8cGQ+9f+?nOtk7w%iyf8hF<0Od$mpR-nm$nx`vVCeUH^`Tg_@owOz!kyF2h@5YGM={Kc))>w<<31@t?`Bk% zd(uM86ryf83Ub}S{rmX%g`hksdk}IOM`zvu#@!UKV#}AEUu+J`OOx7Q9J7# z<&1Yn7^}WUqa7$~3Uw9w@C7Q6`v52VEv8(!KlHq%eMN}N!|JC+c%CfrDv1AGPjl>cV#06CNaXX2vb3YSe03N3 z^6c|Lql7^r&E5*|;3J8ZQT(NRSIHj^+>av4bQThrLtL6U`ZWZ^Xb;M-S{ znJSF_cDtb5UiFW1O4pJ=Nq8RA@;><8&)Iuvp?)N0*yD)Dq4HuDw(YGyK8BQ1!!ZMa zf5v$Ij(OP7e)2oXcP*%m?CU%=OA9tO+B}u#rvqtubPXl5remj5sI3l`L5H8W+x5Qi zZ{$C3^?Usqj$*j<+9?G;4}^5iS($lcQ9|EXwf?&&SKre_`n>5&?T*A!roW4|9)3t- z(De-+cPZRZaw0Fi>EUcRYYBshLI+gJu+8oi&E)Jq?#cb``FMxxLV+u;svu(MXQ_2? z+u)-{=0){-U0lW=&hjl;*o7{@v1s*VEs;2x>*~J+>4+0y*)_Qr?a8|Zf#yfyhMB19{1)7Ae&Q+guBe>+hK(u?^@EqXiv@DOCYu|J~q541%0-p;N zH~R)oOyg!D<9{WOp{+oHKJE=6>QHy##syx%rkq9w8+!H<-+=m}rr+%mj}@^F?<|{f z;M$%JP5A%e;sf9W0K=w6FVs1joQh7!!S8@#7LK-KZxIL|m-$@79;_JsFH|j)YpKO_ z#hbQM916xwcDIAqv)!Ti9Jhh%hpoA@Egq35qd`u6(?FA#cbTu9AOWHjwg#M8+sNjQ z8&`;74dkiyAzr)YH%o>P=G`m;#GA?~7A@wsgpT^o84MdCb&#Yk_1_HFIZziPB13d` zYw8qf*ba@yzSnte&|Z=1v%Spo9@ClNp`6X3mRY$B{i|#0l_&fp#}r7dS<#`RRJBiP ziiAof);l2(1F(KBup|H0*cf2!#a@Cgup>2jq3@Z6*@Lg1Nq!nkT2%?pf16OTVswpB z_Ot$F4Ow!f0bWe~*@>{5!3NIvk-!b|Ne-U@NIns7;HnF;oPbL&@)Es}1W&t1=DX@> z??1UlWb}A0y*Qs+Nj|7JF=Q;QYT$qF9&4_W9wCYp?pu>DQ^}11&>Jpg`-(Q$_LceMJRm}KJ25q3i2ju!BE=><4yjrVd@*w&zzHnGCKfET`q`JY z`V$RTnWWOjtSFF&3NX5hu=H6YtgC%OM}$AUY64BcUTF#aZB=*j@jlP8`LhEh2W#zb z7wInkZ-K!{HUf86v^d&aAli!64SXOBt{^mkWRZx~IK}5QD=X%6guxdI{Elf3EX}Uw zCUtSeq_|@-3$hfDZS8(D__+@}m4$r7Vh&JM{y7!Pv71HLlGQ%&dtaf|Wh|>pivLxh zctyDX5b9ON$F0qq9e;s4NLMk~8W;b_OeB5AhqM!-GDSk;@!3O#$^wcUM03JQPyAb-h-1Q0ID*7o#uxP9+L z{efTwt^QbF5GB>Cr1ee4jY2?&I2>b)n90n(^Dk;q$=2E)3`}r^(Pt<@--mE5Z_Qg0 zc=?^X^WF4s$0R~*T3GXckH<)Z04eNyirViqClM!FQ8xws^?pe0f<@QHGzcMw?q^XM-AFX!*5LderD|9!_KvA!3YhD|C0_ z1NBrXv{T*DfX@V0&1=4lC$vO`X9(~WJmSu4_kjs6eW^iy>bFGs=FFlzM}F)yP`@t zKDk^arYfib<@qSS6^)(&RKs!u#yr*O2)3Kzyv|~sIy=Gu-K3o#=Cr((r&@hNH#_-D z6Cy94LSmpS>lquTj|ep&9-#(&BYflA{t;$)jAg$6Li>QL`$rInlw+z-ZfSwojxj&5OE%>)TFu9GfqTDrQj2rM52 zd}%|BIQp0r47D%ea}bSPvd%(#JQnp%(_?4H-Q#&b09p<3w#Q6_Qzmdw$W0#cXO?`xJA#%P&5TNhiyoD<(p%no@HgC_EOEP)qM>KU@(c?c4}tq;opl0 z>#YqaJl0co z0bH4Q#6kj$hN-jM?;Gs|*hZtNp`Oo|oRO|n?YzJ`D^GuSLLYZasd}Anr%jZ6$Y*_n zs~L~{$HTYTed(CPMtw6%y}|_(UyLZrhuoBnt5cyY;*<5%O3KGGT1_>weZ!_k4Gr}2 z$gu3zW;&>A5czYHyF_a;^ui8k^v2B`vYKJ=B$&4O9ov_e|EYgNXxbJUel-cXnJ6*- zb&K=ko{u_*eA73ASibvm^1GMY%IFhqg%yAZN8TI`?xDp1tX6=r?Varh8xaN~;;Y~e z9n!)zy>D=woriuG6nUAfFfMj?x}3u}x}9r(AQk&PiiX9q`$)!oSMP`Ndeg~UQKG^^ zE+?tyF#bw&>cn)I>FF~;(lrq$4%M^fV;j%cce4&a=&dB~C#kufk$sJp=C-Q6DOyZ#sMVQ@^r9}Wu%e51=ZP}WzG_oACzH!cpag;BkVLC8uTU-E z<6XHG4b1;T>dcKBz|o6r64i z57QE5kBg1q%#hUd`TH2w z-J9LFw`9-CJf07UU(C5sL2t|QzR^_p8~(YTLl`Psw{|$eG0;yl&(s#y{3B?Q$|u^D znVAZ<$JZcp&dVFeCrDgn;0UqSo`faa1>Z1QoL$iX>WUSo-rg4y2v~P)#8B+HrD24C zbNpGrRffd8lwKRFg;N}G;UJf%SQVUJ`6h`%LvUj+>u7VhQr9Vx_O$?5Z>X-u#}Wgf zKq^|nxxxVA2e-j!LW6B?{DZyUSI)Xkey6!B4`7BBH|}u8i0-wUq0xF}8rOu?y~_O3 zQw*>iFG%Mcf}9-p>GaP$Yw78WI$dG^+vO++u6H97;;H=RWU<@}9371fI_DS-dCGS>$ZOSTlR`gWP#I zCwy*0_(Hpoi4-Z)uWv-UsBEjej$Rjuj*?kksp4kHg!;2sn*-wZ<8_SPhtF(eQ+0D{ zeRmoxB(?F)T;$QCNd_i+VusA4;ft3R3)(1eCLx% zS=ho!@i_m_$~=k!OGO}%!RzVuI`lI&B7`8bS&5HM?{Rps+<%unAzPX&37$&+@~TOH zgh52Cq8Fyut)Cbwrt0haAf}F2SYJ?LLegAG+C(Z5lw5q%{|~Vm=`1Jrw3i$c-k8fF z<98RB6*t6fW$TyXTBcwnMl-v=f(Mht1iM^9XvW>l*ITwj&ouw0fM;!o{gEDxt}OAF z+^wSQdiHo4dcTpOk~JGULiIw$=9_9m4~XkkU^c(bjF3f;^l->N*8KP(R}=m)J|^HW z|0{BMt`*4@BZ)$9eEFDsi5;-!X$nB!9t(Uf+Ixu|=qKN{<)1Cz@ykm5XFd%9kDZuC z1In_V?OJarnI|BmS@Ef#A2})(XSY&&$D+jjavHKOtDx|1O~McLuN6U@fa@z^SO$7ip`cQla3M>*2snAJdRVjNUw%Dc*nyHP_&A*^LG(|q@_e;FN4 z^LIu5Xf+*BAl?8S=ZYT|h;2zaZ3&`dlVWiq$=~9QG0-`epCINv63?P}kcZ--Yq2TZ zO-gUzB(OE4Oory~O_}|2_5R{k#ZO{&K~EDUTxJz8d+=U`x(F>ROlQ1|)~WAY-nPmTUO)LN^G812vSpZtx1|TR-7P@-o1F{<3LhIV0_TmHa@5 zWd^ZuNqPLpejl-QqU*?qhfBY^2RC>|PiLYJ@m!I+MS_y-P`Jg&4jI=$aS7MPN~-g( z6EYc3mbL(+?V_Z$0vU4`&D2N6;RN%Oa~vv;&PeWMq5GSP`I05R9?gWpa=Y?Gkt_I* zj{4mu%k1G`S|7Y!sAtCZv6@}Bd_4@=ZxUw556}F7(oWZHl$om6O(qE!t z1FhzgwX@zcIyuHbLdwlWOMlWZOgKH?UCp`LEz38mnbPsmw+RgAA4LG|=j z(2;0*&=mY^CC{*aRrm;6=13>&Zliv})_umTrrT<0nedHO@`seTx1)D4bpvp@+v!K` zfb&2!or5mq@d%(Pz2u=tMM$WLjD!@Ja(SQCz%7dCilsCY%742|5qOwO69Ax8%g$Fmnwk~~gkHxJbPnAUL!s#)0a?vE+a{dx55HaH zo@l$X6ZLasPye9Y9QDb9mAhJ7{1OV=xF`}g0|`zY6JfUxzD`fu?J2l1%d{7JleQt| zi*|2j>K#{(PQz2$B$j3dGg*AbV3wT;x*Z-fs*>7Rv#v2?h7kXZ(?F($)= zH!hi)`96Aq6z(-FF8|yrWH-N$tA<7rRO`oAu<4}Ku=vnybqa5ai`8*I?Lzs?25c*P zGKrmglL&Q}A;ga-P|JIE()zh^wpMp@H@(ZNkPjrj5{zXTsfg989<|%&@P#YsXJjec z9{V9H^RKOSGoUN30RQAd?=PeJL<$i8-{A*Y=BmIkqXfY#u}tw|{r*^iFMEdP@C`BN$sWRoRSxCw(XqN!G#HO1 z7viB3pwvw*ql@Avb1#O^eYQp>kN?A!|_##=FWJhIfFvLj~fZ>vAFTR@8i$A(%;dbh& zVmbGYVX1WZqmNehUbTF?0bgY7xUsf!GdY@-hw4RAm9O>aN7FKjnE6AgYPN3}s79u- zyT3bWi_hX%Y9!)MYtZW^S`h;>%UrYz*<|5b<}0`a+}pQXR?V25LvdreIfwD}(_1iN zKe~1!W-R!P86ZsOh6gp#u5W}MORQy560MXACGK%eGG8D|AUi$lPIDgERLWjZi!&($!7EviJ9W8;ts`dT#>VT1*6ks zh3l>1)}tTH&QM;51>)iO_Dj1vOuGlODA4*eZT1)=J9Pb!UuWtwds5Y~b)w~@?Ybn{)bqZie$wdA1j52y1pqFfK9&4T&zdm0Xp z23?xv!b#4(9}c+v*1K-*b3N{|RN_&_xDlvEUao8F!>|4!-}encMv zihexA=ei4yGyhyuu3^viL9^|GEYpSk0cbDW5O9{M3?(>Aw8|M{4w=qdl5-OTGUq>)Hw%ebww` zxuTBdW-;8oS&N6Zi*L{F6~8POyUE!t7TQU-I-))PlM~VcM?#UGW|1Tk(o)}R6U5bs z4ejrLMI^9Z{Wmv_grxF45bf`ibKfFk|DBNd@Qmp1L}2jWH;G99|BU`eGCF@E#o@X` T;>*taOP;dQN*}8wjf4LeQ!^e) literal 0 HcmV?d00001 diff --git a/doc/merge_check_tooltip_focused.png b/doc/merge_check_tooltip_focused.png new file mode 100644 index 0000000000000000000000000000000000000000..facc0179533071e9452ca94bb00d73a9bd77e580 GIT binary patch literal 25459 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 z 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 6097c70..0f1df8d 100644 --- a/pom.xml +++ b/pom.xml @@ -42,17 +42,20 @@ com.atlassian.bitbucket.server - bitbucket-api + bitbucket-spi + ${bitbucket.version} provided com.atlassian.bitbucket.server - bitbucket-spi - provided + bitbucket-test-util + ${bitbucket.version} + test com.atlassian.bitbucket.server bitbucket-page-objects + ${bitbucket.version} provided @@ -190,39 +193,39 @@ - + - - - jacoco - - false - - - - - org.jacoco - jacoco-maven-plugin - ${jacoco-version} - - - - prepare-agent - - - - - report - test - - report - - - - - - - + + + jacoco + + false + + + + + org.jacoco + jacoco-maven-plugin + ${jacoco-version} + + + + prepare-agent + + + + + report + test + + report + + + + + + + @@ -233,7 +236,7 @@ 0.8.4 - ${project.groupId}.${project.artifactId} + ${project.groupId}.${project.artifactId} UTF-8 11 11 diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessCheckHandler.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessCheckHandler.java index 7e72bdd..48b807f 100644 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessCheckHandler.java +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessCheckHandler.java @@ -1,6 +1,5 @@ package de.uhd.ifi.se.decision.management.bitbucket.merge.checks; -import java.util.Locale; import java.util.Set; /** @@ -22,25 +21,4 @@ public interface CompletenessCheckHandler { * @return set of Jira issue keys. */ Set getJiraIssuesWithIncompleteDocumentation(); - - /** - * Looks for the first Jira issue key (e.g. CONDEC-1) in a String and returns the - * Jira project key (e.g. CONDEC). - * - * @param text - * that might contain a project key, e.g., a commit message, branch - * name oder pull request title. - * @return potential project key in upper case. - */ - static String retrieveProjectKey(String text) { - if (text.indexOf("-") == -1) { - // there is no Jira issue key (e.g. CONDEC-1) in the text - return ""; - } - String splitted = text.split("-")[0]; - String[] words = splitted.split(" "); - String projectKey = words[words.length - 1]; - return projectKey.toUpperCase(Locale.ENGLISH); - } - } \ No newline at end of file diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessMergeCheck.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessMergeCheck.java index f9b6922..e9b5238 100644 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessMergeCheck.java +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/CompletenessMergeCheck.java @@ -8,9 +8,10 @@ import com.atlassian.bitbucket.hook.repository.PullRequestMergeHookRequest; import com.atlassian.bitbucket.hook.repository.RepositoryHookResult; import com.atlassian.bitbucket.hook.repository.RepositoryMergeCheck; -import com.atlassian.bitbucket.pull.PullRequest; import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl.CompletenessCheckHandlerImpl; +import de.uhd.ifi.se.decision.management.bitbucket.model.PullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.impl.PullRequestImpl; /** * Enforces that pull requests can only be accepted, i.e., the respective branch @@ -26,7 +27,7 @@ public class CompletenessMergeCheck implements RepositoryMergeCheck { @Override public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext context, @Nonnull PullRequestMergeHookRequest request) { - PullRequest pullRequest = request.getPullRequest(); + PullRequest pullRequest = new PullRequestImpl(request); CompletenessCheckHandler completenessCheckHandler = new CompletenessCheckHandlerImpl(pullRequest); if (completenessCheckHandler.isDocumentationComplete()) { diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/impl/CompletenessCheckHandlerImpl.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/impl/CompletenessCheckHandlerImpl.java index 759cd12..f8dc19f 100644 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/impl/CompletenessCheckHandlerImpl.java +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/merge/checks/impl/CompletenessCheckHandlerImpl.java @@ -1,23 +1,14 @@ package de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl; -import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import org.json.JSONArray; import org.json.JSONObject; -import com.atlassian.bitbucket.commit.Commit; -import com.atlassian.bitbucket.commit.CommitService; -import com.atlassian.bitbucket.commit.CommitsBetweenRequest; -import com.atlassian.bitbucket.pull.PullRequest; -import com.atlassian.bitbucket.pull.PullRequestRef; -import com.atlassian.bitbucket.util.Page; -import com.atlassian.bitbucket.util.PageRequestImpl; -import com.atlassian.sal.api.component.ComponentLocator; - import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.CompletenessCheckHandler; -import de.uhd.ifi.se.decision.management.bitbucket.oauth.ApiLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.model.PullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.oauth.JiraClient; /** * Class to check the completeness of the documentation of decision knowledge @@ -25,9 +16,7 @@ */ public class CompletenessCheckHandlerImpl implements CompletenessCheckHandler { - public static String JIRA_QUERY; - public static String PROJECT_KEY; - private PullRequest pullRequest; + public PullRequest pullRequest; private Set jiraIssuesWithIncompleteDocumentation; public CompletenessCheckHandlerImpl(PullRequest pullRequest) { @@ -35,67 +24,9 @@ public CompletenessCheckHandlerImpl(PullRequest pullRequest) { this.jiraIssuesWithIncompleteDocumentation = new HashSet(); } - public Iterable getCommitsOfPullRequest() { - try { - CommitService commitService = ComponentLocator.getComponent(CommitService.class); - CommitsBetweenRequest.Builder builder = new CommitsBetweenRequest.Builder(pullRequest); - CommitsBetweenRequest commitsBetweenRequest = builder.build(); - Page pageWithCommits = commitService.getCommitsBetween(commitsBetweenRequest, - new PageRequestImpl(0, 1048476)); - return pageWithCommits.getValues(); - } catch (NullPointerException e) { - - } - return new ArrayList(); - } - - /** - * @param commits - * @param branchId - * @return String "(TEST-5, TEST-7,etc...)" - */ - public String getJiraCallQuery(Iterable commits, String branchId, String branchTitle) { - String query = "("; - ArrayList messageList = new ArrayList(); - - for (Commit commit : commits) { - String message = commit.getMessage(); - messageList.add(message); - } - for (String message : messageList) { - // Split message after first space - if (message.contains(" ")) { - String[] parts = message.split(" "); - query = query + parts[0] + ","; - } - } - - // add Branch ID - query += branchId + ","; - // add Branch Title - - query += branchTitle; - // add ) - query += ")"; - return query; - } - @Override public boolean isDocumentationComplete() { - // find correct query out of projects, commitMessages and BranchId - Iterable commits = getCommitsOfPullRequest(); - String pullRequestTitle = pullRequest.getTitle(); - PullRequestRef pullRequestRef = pullRequest.getFromRef(); - String branchName = pullRequestRef.getDisplayId(); - String queryWithJiraIssues = "?jql=key in " + getJiraCallQuery(commits, pullRequestTitle, branchName); - - JIRA_QUERY = queryWithJiraIssues; - PROJECT_KEY = getProjectKeyFromJiraAndCheckWhichOneCouldBe(commits, branchName, pullRequestTitle); - - // get decision knowledge out of Jira - String knowledgeElementsAsJsonString = ApiLinkService.instance.getDecisionKnowledgeFromJira(queryWithJiraIssues, - PROJECT_KEY); - + String knowledgeElementsAsJsonString = JiraClient.instance.getDecisionKnowledgeFromJira(pullRequest.getJiraIssueKeys()); return isDocumentationComplete(knowledgeElementsAsJsonString); } @@ -137,37 +68,6 @@ public boolean checkIfDecisionsExists(JSONArray decisions) { return hasIssue && hasDecision; } - public String getProjectKeyFromJiraAndCheckWhichOneCouldBe(Iterable commits, String branchId, - String branchTitle) { - Set projectKeys = ApiLinkService.instance.getCurrentActiveJiraProjects(); - - // check branch name, e.g. "CONDEC-1.create.a.great.plugin" - String projectKey = CompletenessCheckHandler.retrieveProjectKey(branchId); - if (isProjectKeyExisting(projectKey, projectKeys)) { - return projectKey; - } - - // check pull request title, e.g. "ConDec-1: Create a great plugin" - String projectKeyInBranchName = CompletenessCheckHandler.retrieveProjectKey(branchTitle); - if (isProjectKeyExisting(projectKeyInBranchName, projectKeys)) { - return branchTitle; - } - - // check commit messages - for (Commit commit : commits) { - String projectKeyInCommitMessage = CompletenessCheckHandler.retrieveProjectKey(commit.getMessage()); - if (isProjectKeyExisting(projectKeyInCommitMessage, projectKeys)) { - return projectKeyInCommitMessage; - } - } - - return ""; - } - - private boolean isProjectKeyExisting(String projectKey, Set projectKeys) { - return !projectKey.isEmpty() && projectKeys.contains(projectKey); - } - public Set getJiraIssuesWithIncompleteDocumentation() { return jiraIssuesWithIncompleteDocumentation; } diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/PullRequest.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/PullRequest.java new file mode 100644 index 0000000..1c1d271 --- /dev/null +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/PullRequest.java @@ -0,0 +1,42 @@ +package de.uhd.ifi.se.decision.management.bitbucket.model; + +import java.util.Set; + +import com.atlassian.bitbucket.commit.Commit; + +/** + * Interface for pull requests. Helps to get the associated commits, Jira + * project, and Jira issues. + */ +public interface PullRequest { + + /** + * Returns the commits associated with the pull request. + * + * @return commits as an iterable collection. + */ + Iterable getCommits(); + + /** + * Returns the Jira issue keys associated with the pull request, i.e., mentioned + * in a commit message, branch name, or pull request title. + * + * @return Jira issue keys as a set of strings. + */ + Set getJiraIssueKeys(); + + /** + * Returns the Jira project associated with the pull request. + * + * @return Jira project key as a string. + */ + String getProjectKey(); + + /** + * Returns the internal pull request. + * + * @return internal pull request. + * @see com.atlassian.bitbucket.pull.PullRequest + */ + com.atlassian.bitbucket.pull.PullRequest getInternalPullRequest(); +} \ No newline at end of file diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/impl/PullRequestImpl.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/impl/PullRequestImpl.java new file mode 100644 index 0000000..2a6e363 --- /dev/null +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/model/impl/PullRequestImpl.java @@ -0,0 +1,90 @@ +package de.uhd.ifi.se.decision.management.bitbucket.model.impl; + +import java.util.HashSet; +import java.util.Set; + +import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.bitbucket.commit.CommitService; +import com.atlassian.bitbucket.commit.CommitsBetweenRequest; +import com.atlassian.bitbucket.hook.repository.PullRequestMergeHookRequest; +import com.atlassian.bitbucket.pull.PullRequestRef; +import com.atlassian.bitbucket.util.Page; +import com.atlassian.bitbucket.util.PageRequestImpl; +import com.atlassian.sal.api.component.ComponentLocator; + +import de.uhd.ifi.se.decision.management.bitbucket.model.PullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.oauth.JiraClient; + +/** + * Class for pull requests. Helps to get the associated commits, Jira project, + * and Jira issues. + */ +public class PullRequestImpl implements PullRequest { + + private com.atlassian.bitbucket.pull.PullRequest internalPullRequest; + + public static Set JIRA_ISSUE_KEYS; + + public PullRequestImpl(com.atlassian.bitbucket.pull.PullRequest pullRequest) { + this.internalPullRequest = pullRequest; + JIRA_ISSUE_KEYS = retrieveJiraIssueKeys(); + } + + public PullRequestImpl(PullRequestMergeHookRequest request) { + this(request.getPullRequest()); + } + + private Set retrieveJiraIssueKeys() { + Set jiraIssueKeysLinkedToPullRequest = new HashSet(); + jiraIssueKeysLinkedToPullRequest.addAll(getJiraIssueKeysInCommitMessages()); + jiraIssueKeysLinkedToPullRequest.addAll(getJiraIssueKeysInTitle()); + jiraIssueKeysLinkedToPullRequest.addAll(getJiraIssueKeysInBranchName()); + return jiraIssueKeysLinkedToPullRequest; + } + + public Set getJiraIssueKeysInCommitMessages() { + Set jiraIssueKeysInCommitMessages = new HashSet(); + Iterable commits = getCommits(); + for (Commit commit : commits) { + String message = commit.getMessage(); + jiraIssueKeysInCommitMessages.addAll(JiraClient.getJiraIssueKeys(message)); + } + return jiraIssueKeysInCommitMessages; + } + + @Override + public Iterable getCommits() { + CommitService commitService = ComponentLocator.getComponent(CommitService.class); + CommitsBetweenRequest.Builder builder = new CommitsBetweenRequest.Builder(internalPullRequest); + CommitsBetweenRequest commitsBetweenRequest = builder.build(); + Page pageWithCommits = commitService.getCommitsBetween(commitsBetweenRequest, + new PageRequestImpl(0, 1048476)); + return pageWithCommits.getValues(); + } + + public Set getJiraIssueKeysInTitle() { + String title = internalPullRequest.getTitle(); + return JiraClient.getJiraIssueKeys(title); + } + + public Set getJiraIssueKeysInBranchName() { + PullRequestRef pullRequestRef = internalPullRequest.getFromRef(); + String branchName = pullRequestRef.getDisplayId(); + return JiraClient.getJiraIssueKeys(branchName); + } + + @Override + public com.atlassian.bitbucket.pull.PullRequest getInternalPullRequest() { + return internalPullRequest; + } + + @Override + public Set getJiraIssueKeys() { + return JIRA_ISSUE_KEYS; + } + + @Override + public String getProjectKey() { + return JiraClient.retrieveProjectKey(JIRA_ISSUE_KEYS); + } +} diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/ApiLinkService.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/ApiLinkService.java deleted file mode 100644 index 7576d5b..0000000 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/ApiLinkService.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.uhd.ifi.se.decision.management.bitbucket.oauth; - -import java.util.Set; - -import de.uhd.ifi.se.decision.management.bitbucket.oauth.impl.ApiLinkServiceImpl; - -/** - * Interface responsible for the communication between Bitbucket and Jira via - * application links. - */ -public interface ApiLinkService { - - /** - * The singleton instance of the ApiLinkService. Please use this instance. - */ - public ApiLinkService instance = new ApiLinkServiceImpl(); - - /** - * Returns all Jira projects that are currently active. - * @return all Jira projects as a set of project keys. - */ - Set getCurrentActiveJiraProjects(); - - /** - * Retrieves the decision knowledge elements from Jira that match a certain query and the project key. - * @param query JQL query. - * @param projectKey of the Jira project. - * @return JSON String. - */ - String getDecisionKnowledgeFromJira(String query, String projectKey); -} \ No newline at end of file diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/JiraClient.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/JiraClient.java new file mode 100644 index 0000000..1788fc1 --- /dev/null +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/JiraClient.java @@ -0,0 +1,109 @@ +package de.uhd.ifi.se.decision.management.bitbucket.oauth; + +import java.util.LinkedHashSet; +import java.util.Locale; +import java.util.Set; + +import de.uhd.ifi.se.decision.management.bitbucket.oauth.impl.JiraClientImpl; + +/** + * Interface responsible for the communication between Bitbucket and Jira via + * application links. + */ +public interface JiraClient { + + /** + * The singleton instance of the JiraClient. Please use this instance. + */ + public JiraClient instance = new JiraClientImpl(); + + /** + * Returns all Jira projects that they user is allowed to access. + * + * @return all Jira projects as a set of project keys. + */ + Set getJiraProjects(); + + /** + * Retrieves the decision knowledge elements from Jira that match a certain + * query and the project key. + * + * @param jiraIssueKeys + * as a set of strings. + * @return JSON string. + */ + String getDecisionKnowledgeFromJira(Set jiraIssueKeys); + + /** + * Retrieves the decision knowledge elements from Jira that match a certain + * query and the project key. + * + * @param query + * JQL query. + * @param projectKey + * of the Jira project. + * @return JSON String. + */ + String getDecisionKnowledgeFromJira(String query, String projectKey); + + /** + * Returns all Jira issue keys mentioned in a message. + * + * @param message + * that might contain a Jira issue key, e.g., a commit message, + * branch name, or pull request title. + * @return list of all mentioned Jira issue keys in upper case letters (is + * ordered by their appearance in the message). + */ + public static Set getJiraIssueKeys(String message) { + Set keys = new LinkedHashSet(); + String[] words = message.split("[\\s,:]+"); + String projectKey = null; + for (String word : words) { + word = word.toUpperCase(Locale.ENGLISH); + if (word.contains("-")) { + if (projectKey == null) { + projectKey = word.split("-")[0]; + } + if (word.startsWith(projectKey)) { + keys.add(word); + } + } + } + return keys; + } + + /** + * Returns the Jira project key (e.g. CONDEC). + * + * @param jiraIssueKeys + * as a set of strings. + * @return potential project key. + */ + public static String retrieveProjectKey(Set jiraIssueKeys) { + Set projectKeys = JiraClient.instance.getJiraProjects(); + if (jiraIssueKeys == null || jiraIssueKeys.isEmpty()) { + return ""; + } + for (String jiraIssueKey : jiraIssueKeys) { + String potentialProjectKey = jiraIssueKey.split("-")[0]; + if (isProjectKeyExisting(potentialProjectKey, projectKeys)) { + return potentialProjectKey; + } + } + return ""; + } + + private static boolean isProjectKeyExisting(String projectKey, Set projectKeys) { + return !projectKey.isEmpty() && projectKeys.contains(projectKey); + } + + public static String getJiraCallQuery(Set messageList) { + String query = "?jql=key in ("; + for (String message : messageList) { + query = query + message + ","; + } + query += ")"; + return query; + } +} \ No newline at end of file diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/ApiLinkServiceImpl.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/JiraClientImpl.java similarity index 74% rename from src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/ApiLinkServiceImpl.java rename to src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/JiraClientImpl.java index 3eb7efb..464c0fc 100644 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/ApiLinkServiceImpl.java +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/impl/JiraClientImpl.java @@ -20,17 +20,17 @@ import com.atlassian.sal.api.net.Response; import com.atlassian.sal.api.net.ResponseException; -import de.uhd.ifi.se.decision.management.bitbucket.oauth.ApiLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.oauth.JiraClient; /** * Class responsible for the communication between Bitbucket and Jira via * application links. */ -public class ApiLinkServiceImpl implements ApiLinkService { +public class JiraClientImpl implements JiraClient { private ApplicationLink jiraApplicationLink; - public ApiLinkServiceImpl() { + public JiraClientImpl() { ApplicationLinkService applicationLinkService = ComponentLocator.getComponent(ApplicationLinkService.class); // TODO // @issue There might be more than one application links to Jira. Currently, we @@ -38,20 +38,31 @@ public ApiLinkServiceImpl() { this.jiraApplicationLink = applicationLinkService.getPrimaryApplicationLink(JiraApplicationType.class); } - public Set getCurrentActiveJiraProjects() { + public Set getJiraProjects() { String projectsAsJsonString = getResponseFromJiraWithApplicationLink("rest/api/2/project"); + if (projectsAsJsonString.isEmpty()) { + return new HashSet(); + } + return parseJiraProjectsJson(projectsAsJsonString); + } + + public Set parseJiraProjectsJson(String projectsAsJsonString) { Set projectKeys = new HashSet(); - JSONArray projectArray = new JSONArray(projectsAsJsonString); - for (Object project : projectArray) { - JSONObject projectMap = (JSONObject) project; - String projectKey = (String) projectMap.get("key"); - projectKeys.add(projectKey.toUpperCase()); + try { + JSONArray projectArray = new JSONArray(projectsAsJsonString); + for (Object project : projectArray) { + JSONObject projectMap = (JSONObject) project; + String projectKey = (String) projectMap.get("key"); + projectKeys.add(projectKey.toUpperCase()); + } + } catch (Exception e) { + projectKeys.add(projectsAsJsonString); } return projectKeys; } private String getResponseFromJiraWithApplicationLink(String jiraUrl) { - String responseBody = "false"; + String responseBody = ""; if (jiraApplicationLink == null) { return responseBody; } @@ -74,6 +85,13 @@ public String handle(final Response response) throws ResponseException { } return responseBody; } + + @Override + public String getDecisionKnowledgeFromJira(Set jiraIssueKeys) { + String queryWithJiraIssues = JiraClient.getJiraCallQuery(jiraIssueKeys); + String projectKey = JiraClient.retrieveProjectKey(jiraIssueKeys); + return getDecisionKnowledgeFromJira(queryWithJiraIssues, projectKey); + } public String getDecisionKnowledgeFromJira(String query, String projectKey) { String encodedQuery = encodeUserInputQuery(query); diff --git a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/rest/KnowledgeRest.java b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/rest/KnowledgeRest.java index 9a8283c..165fd5e 100644 --- a/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/rest/KnowledgeRest.java +++ b/src/main/java/de/uhd/ifi/se/decision/management/bitbucket/rest/KnowledgeRest.java @@ -1,7 +1,6 @@ package de.uhd.ifi.se.decision.management.bitbucket.rest; -import static de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl.CompletenessCheckHandlerImpl.JIRA_QUERY; -import static de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl.CompletenessCheckHandlerImpl.PROJECT_KEY; +import static de.uhd.ifi.se.decision.management.bitbucket.model.impl.PullRequestImpl.JIRA_ISSUE_KEYS; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -9,7 +8,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import de.uhd.ifi.se.decision.management.bitbucket.oauth.ApiLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.oauth.JiraClient; /** * REST resource: Enables importing decision knowledge from Jira. @@ -21,10 +20,10 @@ public class KnowledgeRest { @GET @Produces({ MediaType.APPLICATION_JSON }) public Response getDecisionKnowledgeElement() { - if (JIRA_QUERY == null && PROJECT_KEY == null) { + if (JIRA_ISSUE_KEYS == null) { return Response.serverError().build(); } - String jsonString = ApiLinkService.instance.getDecisionKnowledgeFromJira(JIRA_QUERY, PROJECT_KEY); + String jsonString = JiraClient.instance.getDecisionKnowledgeFromJira(JIRA_ISSUE_KEYS); return Response.status(Response.Status.OK).entity(jsonString).build(); } } \ No newline at end of file diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessCheckHandler.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessCheckHandler.java index 7c55064..0eb54cc 100644 --- a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessCheckHandler.java +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessCheckHandler.java @@ -6,14 +6,18 @@ import static org.junit.Assert.assertTrue; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.sal.testresources.component.MockComponentLocator; import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.CompletenessCheckHandler; import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl.CompletenessCheckHandlerImpl; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockCommitService; import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockPullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.PullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.impl.PullRequestImpl; public class TestCompletenessCheckHandler { @@ -21,7 +25,9 @@ public class TestCompletenessCheckHandler { @BeforeClass public static void setUp() { - completenessCheckHandler = new CompletenessCheckHandlerImpl(new MockPullRequest()); + MockComponentLocator.create(new MockCommitService(), new MockApplicationLinkService()); + PullRequest pullRequest = new PullRequestImpl(new MockPullRequest()); + completenessCheckHandler = new CompletenessCheckHandlerImpl(pullRequest); } @Test @@ -35,18 +41,15 @@ public void testConstructorPullRequestValid() { } @Test - @Ignore public void testIsDocumentationCompleteInPullRequest() { - // TODO Mock ComponententLocator, CommitService, and ApplicationLinkService boolean isDocumentationComplete = completenessCheckHandler.isDocumentationComplete(); assertTrue(isDocumentationComplete); } @Test public void testGetCommitsOfPullRequest() { - // TODO Mock ComponententLocator, CommitService, and ApplicationLinkService - Iterable commits = ((CompletenessCheckHandlerImpl) completenessCheckHandler).getCommitsOfPullRequest(); - assertEquals(false, commits.iterator().hasNext()); + Iterable commits = ((CompletenessCheckHandlerImpl) completenessCheckHandler).pullRequest.getCommits(); + assertEquals(true, commits.iterator().hasNext()); } @Test @@ -56,6 +59,14 @@ public void testIsDocumentationCompleteTrue() { .isDocumentationComplete(jsonString_true); assertTrue(isDocumentationComplete); } + + @Test + public void testIsDocumentationCompleteNonJsonArray() { + String jsonString_true = "abc"; + boolean isDocumentationComplete = new CompletenessCheckHandlerImpl(null) + .isDocumentationComplete(jsonString_true); + assertFalse(isDocumentationComplete); + } @Test public void testIsDocumentationCompleteFalse() { @@ -65,10 +76,4 @@ public void testIsDocumentationCompleteFalse() { assertFalse(isDocumentationComplete); assertEquals("CONDEC-1", completenessCheckHandler.getJiraIssuesWithIncompleteDocumentation().iterator().next()); } - - @Test - public void parseProjectKey() { - assertEquals("", CompletenessCheckHandler.retrieveProjectKey("")); - assertEquals("CONDEC", CompletenessCheckHandler.retrieveProjectKey("Example message ConDec-1 ConDec-2")); - } } \ No newline at end of file diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessMergeCheck.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessMergeCheck.java new file mode 100644 index 0000000..b8c2553 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/merge/check/TestCompletenessMergeCheck.java @@ -0,0 +1,40 @@ +package de.uhd.ifi.se.decision.management.bitbucket.merge.check; + +import static org.junit.Assert.assertTrue; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.atlassian.bitbucket.hook.repository.RepositoryHookResult; +import com.atlassian.sal.testresources.component.MockComponentLocator; + +import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.CompletenessMergeCheck; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLink; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockCommitService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockPullRequestMergeHookRequest; + +public class TestCompletenessMergeCheck { + + private static CompletenessMergeCheck completenessMergeCheck; + + @BeforeClass + public static void setUp() { + MockComponentLocator.create(new MockCommitService(), new MockApplicationLinkService()); + completenessMergeCheck = new CompletenessMergeCheck(); + } + + @Test + public void testPreUpdateAccepted() { + RepositoryHookResult result = completenessMergeCheck.preUpdate(null, new MockPullRequestMergeHookRequest()); + assertTrue(result.isAccepted()); + } + + @Test + public void testPreUpdateRejected() { + MockApplicationLink.IS_DOCUMENTATION_COMPLETE = false; + RepositoryHookResult result = completenessMergeCheck.preUpdate(null, new MockPullRequestMergeHookRequest()); + assertTrue(result.isRejected()); + MockApplicationLink.IS_DOCUMENTATION_COMPLETE = true; + } +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLink.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLink.java new file mode 100644 index 0000000..7d58059 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLink.java @@ -0,0 +1,245 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.net.URI; +import java.util.List; +import java.util.Map; + +import com.atlassian.applinks.api.ApplicationId; +import com.atlassian.applinks.api.ApplicationLink; +import com.atlassian.applinks.api.ApplicationLinkRequest; +import com.atlassian.applinks.api.ApplicationLinkRequestFactory; +import com.atlassian.applinks.api.ApplicationLinkResponseHandler; +import com.atlassian.applinks.api.ApplicationType; +import com.atlassian.applinks.api.CredentialsRequiredException; +import com.atlassian.applinks.api.auth.AuthenticationProvider; +import com.atlassian.sal.api.net.Request.MethodType; +import com.atlassian.sal.api.net.RequestFilePart; +import com.atlassian.sal.api.net.Response; +import com.atlassian.sal.api.net.ResponseException; +import com.atlassian.sal.api.net.ResponseHandler; +import com.atlassian.sal.api.net.ReturningResponseHandler; + +/** + * Mock class the for an application link to a Jira server. + */ +public class MockApplicationLink implements ApplicationLink { + + public static boolean IS_DOCUMENTATION_COMPLETE = true; + + public String mockResponseByUrl(String url) { + if (url.endsWith("project")) { + return "[ { 'key' : 'CONDEC' } ]"; + } + if (IS_DOCUMENTATION_COMPLETE) { + return "[[{'type':'issue'}, {'type':'decision'}]]"; + } + return "[[{'key' : 'CONDEC-1', 'type':'issue'}]]"; + } + + @Override + public ApplicationId getId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationType getType() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public URI getDisplayUrl() { + // TODO Auto-generated method stub + return null; + } + + @Override + public URI getRpcUrl() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isPrimary() { + return true; + } + + @Override + public boolean isSystem() { + // TODO Auto-generated method stub + return false; + } + + @Override + public ApplicationLinkRequestFactory createAuthenticatedRequestFactory() { + return new ApplicationLinkRequestFactory() { + + @Override + public URI getAuthorisationURI(URI callback) { + // TODO Auto-generated method stub + return null; + } + + @Override + public URI getAuthorisationURI() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest createRequest(MethodType methodType, String url) + throws CredentialsRequiredException { + return new ApplicationLinkRequest() { + + @Override + public ApplicationLinkRequest setConnectionTimeout(int connectionTimeout) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setSoTimeout(int soTimeout) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setUrl(String url) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setRequestBody(String requestBody) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setRequestBody(String requestBody, String contentType) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setFiles(List files) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setEntity(Object entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest addRequestParameters(String... params) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest addBasicAuthentication(String hostname, String username, + String password) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest addHeader(String headerName, String headerValue) { + return this; + } + + @Override + public ApplicationLinkRequest setHeader(String headerName, String headerValue) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequest setFollowRedirects(boolean follow) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Map> getHeaders() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void execute(ResponseHandler responseHandler) throws ResponseException { + // TODO Auto-generated method stub + + } + + @Override + public String execute() throws ResponseException { + // TODO Auto-generated method stub + return null; + } + + @SuppressWarnings("unchecked") + @Override + public RET executeAndReturn(ReturningResponseHandler responseHandler) + throws ResponseException { + return (RET) mockResponseByUrl(url); + } + + @Override + public R execute(ApplicationLinkResponseHandler responseHandler) throws ResponseException { + // TODO Auto-generated method stub + return null; + } + + }; + } + }; + } + + @Override + public ApplicationLinkRequestFactory createAuthenticatedRequestFactory( + Class providerClass) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequestFactory createImpersonatingAuthenticatedRequestFactory() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ApplicationLinkRequestFactory createNonImpersonatingAuthenticatedRequestFactory() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object getProperty(String key) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object putProperty(String key, Object value) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object removeProperty(String key) { + // TODO Auto-generated method stub + return null; + } +} \ No newline at end of file diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLinkService.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLinkService.java new file mode 100644 index 0000000..46eb3cc --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockApplicationLinkService.java @@ -0,0 +1,44 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.util.ArrayList; +import java.util.List; + +import com.atlassian.applinks.api.ApplicationId; +import com.atlassian.applinks.api.ApplicationLink; +import com.atlassian.applinks.api.ApplicationLinkService; +import com.atlassian.applinks.api.ApplicationType; +import com.atlassian.applinks.api.TypeNotInstalledException; + +/** + * Mock class the ApplicationLinkService. + */ +public class MockApplicationLinkService implements ApplicationLinkService { + + private List applicationLinks; + + public MockApplicationLinkService() { + this.applicationLinks = new ArrayList(); + this.applicationLinks.add(new MockApplicationLink()); + } + + @Override + public ApplicationLink getApplicationLink(ApplicationId arg0) throws TypeNotInstalledException { + return applicationLinks.get(0); + } + + @Override + public Iterable getApplicationLinks() { + return applicationLinks; + } + + @Override + public Iterable getApplicationLinks(Class arg0) { + return applicationLinks; + } + + @Override + public ApplicationLink getPrimaryApplicationLink(Class arg0) { + return applicationLinks.get(0); + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommit.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommit.java new file mode 100644 index 0000000..d8d2407 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommit.java @@ -0,0 +1,61 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.util.Collection; +import java.util.Date; + +import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.bitbucket.commit.MinimalCommit; +import com.atlassian.bitbucket.property.PropertyMap; +import com.atlassian.bitbucket.repository.Repository; +import com.atlassian.bitbucket.user.Person; + +public class MockCommit implements Commit { + + @Override + public PropertyMap getProperties() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getDisplayId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Person getAuthor() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Date getAuthorTimestamp() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getMessage() { + return "ConDec-1: Initial commit"; + } + + @Override + public Collection getParents() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Repository getRepository() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommitService.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommitService.java new file mode 100644 index 0000000..fed03e6 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockCommitService.java @@ -0,0 +1,130 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.util.Optional; + +import com.atlassian.bitbucket.commit.BulkCommitsRequest; +import com.atlassian.bitbucket.commit.Changeset; +import com.atlassian.bitbucket.commit.ChangesetsRequest; +import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.bitbucket.commit.CommitCallback; +import com.atlassian.bitbucket.commit.CommitDiscussion; +import com.atlassian.bitbucket.commit.CommitDiscussionRequest; +import com.atlassian.bitbucket.commit.CommitRequest; +import com.atlassian.bitbucket.commit.CommitService; +import com.atlassian.bitbucket.commit.CommitsBetweenRequest; +import com.atlassian.bitbucket.commit.CommitsRequest; +import com.atlassian.bitbucket.commit.CommonAncestorRequest; +import com.atlassian.bitbucket.commit.LastModifiedCallback; +import com.atlassian.bitbucket.commit.LastModifiedRequest; +import com.atlassian.bitbucket.commit.MinimalCommit; +import com.atlassian.bitbucket.commit.graph.TraversalCallback; +import com.atlassian.bitbucket.commit.graph.TraversalRequest; +import com.atlassian.bitbucket.content.Change; +import com.atlassian.bitbucket.content.ChangeCallback; +import com.atlassian.bitbucket.content.ChangesRequest; +import com.atlassian.bitbucket.content.DiffContentCallback; +import com.atlassian.bitbucket.content.DiffRequest; +import com.atlassian.bitbucket.repository.Repository; +import com.atlassian.bitbucket.scm.bulk.BulkCommitCallback; +import com.atlassian.bitbucket.util.Page; +import com.atlassian.bitbucket.util.PageRequest; +import com.atlassian.bitbucket.watcher.Watcher; + +/** + * Mock class the CommitService. + */ +public class MockCommitService implements CommitService { + + @Override + public Page getCommitsBetween(CommitsBetweenRequest arg0, PageRequest arg1) { + return new MockPage(); + } + + @Override + public Page getChanges(ChangesRequest arg0, PageRequest arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Page getChangesets(ChangesetsRequest arg0, PageRequest arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Commit getCommit(CommitRequest arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Page getCommits(CommitsRequest arg0, PageRequest arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Optional getCommonAncestor(CommonAncestorRequest arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public CommitDiscussion getDiscussion(CommitDiscussionRequest arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void streamChanges(ChangesRequest arg0, ChangeCallback arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void streamCommits(CommitsRequest arg0, CommitCallback arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void streamCommitsBetween(CommitsBetweenRequest arg0, CommitCallback arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void streamDiff(DiffRequest arg0, DiffContentCallback arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void streamLastModified(LastModifiedRequest arg0, LastModifiedCallback arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void traverse(TraversalRequest arg0, TraversalCallback arg1) { + // TODO Auto-generated method stub + + } + + public boolean unwatch(Repository arg0, String arg1) { + // TODO Auto-generated method stub + return false; + } + + public Watcher watch(Repository arg0, String arg1) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void streamCommits(BulkCommitsRequest arg0, BulkCommitCallback arg1) { + // TODO Auto-generated method stub + + } +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPage.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPage.java new file mode 100644 index 0000000..10465ef --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPage.java @@ -0,0 +1,68 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.util.ArrayList; +import java.util.List; +import java.util.SortedMap; +import java.util.function.Function; + +import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.bitbucket.util.Page; +import com.atlassian.bitbucket.util.PageRequest; + +/** + * Mock class for pagination. + */ +public class MockPage implements Page { + + @Override + public Iterable getValues() { + List commits = new ArrayList(); + commits.add(new MockCommit()); + return commits; + } + + @Override + public boolean getIsLastPage() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getLimit() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public PageRequest getNextPageRequest() { + // TODO Auto-generated method stub + return null; + } + + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + public SortedMap getOrdinalIndexedValues() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getSize() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getStart() { + // TODO Auto-generated method stub + return 0; + } + + @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) + public Page transform(Function arg0) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequest.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequest.java index f37ed55..efee440 100644 --- a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequest.java +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequest.java @@ -85,7 +85,7 @@ public PullRequestState getState() { @Override public PullRequestRef getToRef() { - return null; + return new MockPullRequestRef(); } @Override diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestMergeHookRequest.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestMergeHookRequest.java new file mode 100644 index 0000000..a0a86b5 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestMergeHookRequest.java @@ -0,0 +1,94 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import java.util.Collection; +import java.util.Map; +import java.util.Optional; + +import com.atlassian.bitbucket.hook.ScmHookDetails; +import com.atlassian.bitbucket.hook.repository.PullRequestMergeHookRequest; +import com.atlassian.bitbucket.hook.repository.RepositoryHookTrigger; +import com.atlassian.bitbucket.pull.PullRequest; +import com.atlassian.bitbucket.pull.PullRequestRef; +import com.atlassian.bitbucket.repository.RefChange; +import com.atlassian.bitbucket.repository.Repository; + +public class MockPullRequestMergeHookRequest implements PullRequestMergeHookRequest { + + @Override + public PullRequest getPullRequest() { + return new MockPullRequest(); + } + + @Override + public Optional getMergeHash() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Optional getMessage() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Optional getStrategyId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isCrossRepository() { + // TODO Auto-generated method stub + return false; + } + + @Override + public Map getContext() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Collection getRefChanges() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Repository getRepository() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Optional getScmHookDetails() { + // TODO Auto-generated method stub + return null; + } + + @Override + public RepositoryHookTrigger getTrigger() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isDryRun() { + // TODO Auto-generated method stub + return false; + } + + @Override + public PullRequestRef getFromRef() { + // TODO Auto-generated method stub + return null; + } + + @Override + public PullRequestRef getToRef() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestRef.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestRef.java index dded7a6..baf0a6a 100644 --- a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestRef.java +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockPullRequestRef.java @@ -16,8 +16,7 @@ public String getDisplayId() { @Override public Repository getRepository() { - // TODO Auto-generated method stub - return null; + return new MockRepository(); } @Override @@ -34,8 +33,7 @@ public RefType getType() { @Override public String getLatestCommit() { - // TODO Auto-generated method stub - return null; + return "123"; } } diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockRepository.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockRepository.java new file mode 100644 index 0000000..4ebc76b --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/mocks/MockRepository.java @@ -0,0 +1,103 @@ +package de.uhd.ifi.se.decision.management.bitbucket.mocks; + +import com.atlassian.bitbucket.label.LabelableVisitor; +import com.atlassian.bitbucket.project.Project; +import com.atlassian.bitbucket.repository.Repository; +import com.atlassian.bitbucket.watcher.WatchableVisitor; + +/** + * Mock class for a git repository. + */ +public class MockRepository implements Repository { + + @Override + public String getHierarchyId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getId() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Repository getOrigin() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Project getProject() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getScmId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getSlug() { + // TODO Auto-generated method stub + return null; + } + + @Override + public State getState() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getStatusMessage() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isFork() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isForkable() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isPublic() { + // TODO Auto-generated method stub + return false; + } + + @Override + public T accept(LabelableVisitor arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public T accept(WatchableVisitor arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getDescription() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/model/TestPullRequest.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/model/TestPullRequest.java new file mode 100644 index 0000000..8caff8a --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/model/TestPullRequest.java @@ -0,0 +1,52 @@ +package de.uhd.ifi.se.decision.management.bitbucket.model; + +import static org.junit.Assert.assertEquals; + +import java.util.Set; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.atlassian.bitbucket.commit.Commit; +import com.atlassian.sal.testresources.component.MockComponentLocator; + +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockCommitService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockPullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockPullRequestMergeHookRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.impl.PullRequestImpl; + +public class TestPullRequest { + + private static PullRequest pullRequest; + + @BeforeClass + public static void setUp() { + MockComponentLocator.create(new MockCommitService(), new MockApplicationLinkService()); + pullRequest = new PullRequestImpl(new MockPullRequest()); + } + + @Test + public void testConstructor() { + PullRequest pullRequest = new PullRequestImpl(new MockPullRequestMergeHookRequest()); + assertEquals("CONDEC", pullRequest.getProjectKey()); + } + + @Test + public void testGetCommits() { + Iterable commits = pullRequest.getCommits(); + assertEquals("ConDec-1: Initial commit", commits.iterator().next().getMessage()); + } + + @Test + public void testJiraIssueKeysInCommitMessages() { + Set jiraIssueKeysInCommitMessages = pullRequest.getJiraIssueKeys(); + assertEquals("CONDEC-1", jiraIssueKeysInCommitMessages.iterator().next()); + } + + @Test + public void testGetProjectKey() { + String projectKey = pullRequest.getProjectKey(); + assertEquals("CONDEC", projectKey); + } +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/TestJiraClient.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/TestJiraClient.java new file mode 100644 index 0000000..7957838 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/oauth/TestJiraClient.java @@ -0,0 +1,92 @@ +package de.uhd.ifi.se.decision.management.bitbucket.oauth; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.atlassian.sal.testresources.component.MockComponentLocator; + +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.oauth.impl.JiraClientImpl; + +public class TestJiraClient { + + private static JiraClient jiraClient; + + @BeforeClass + public static void setUp() { + MockComponentLocator.create(new MockApplicationLinkService()); + jiraClient = new JiraClientImpl(); + } + + @Test + public void testConstructor() { + assertNotNull(new JiraClientImpl()); + } + + @Test + public void testGetCurrentActiveJiraProjects() { + Set projectKeys = jiraClient.getJiraProjects(); + assertEquals(1, projectKeys.size()); + } + + @Test + public void testGetDecisionKnowledgeFromJira() { + String decisionKnowledgeJsonString = jiraClient.getDecisionKnowledgeFromJira("", "CONDEC"); + assertEquals("[[{'type':'issue'}, {'type':'decision'}]]", decisionKnowledgeJsonString); + } + + @Test + public void testGetDecisionKnowledgeFromJiraByKeys() { + Set jiraIssueKeys = new HashSet<>(); + jiraIssueKeys.add("CONDEC-1"); + jiraIssueKeys.add("CONDEC-2"); + + String decisionKnowledgeJsonString = jiraClient.getDecisionKnowledgeFromJira(jiraIssueKeys); + assertEquals("[[{'type':'issue'}, {'type':'decision'}]]", decisionKnowledgeJsonString); + } + + @Test + public void testParseJiraProjectsJsonOneProject() { + Set projects = ((JiraClientImpl) jiraClient).parseJiraProjectsJson("CONDEC"); + assertEquals("CONDEC", projects.iterator().next()); + } + + @Test + public void testParseJiraProjectsJsonManyProjects() { + Set projects = ((JiraClientImpl) jiraClient) + .parseJiraProjectsJson("[ {'key' : 'TEST'}, {'key' : 'CONDEC'} ]"); + assertEquals(2, projects.size()); + } + + @Test + public void testParseJiraIssueKeys() { + Set jiraIssueKeys = JiraClient + .getJiraIssueKeys("ConDec-1: Initial commit ConDec-2 -hallo ConDec-3 -Great tool"); + Iterator iterator = jiraIssueKeys.iterator(); + assertEquals("CONDEC-1", iterator.next()); + assertEquals("CONDEC-2", iterator.next()); + assertEquals("CONDEC-3", iterator.next()); + assertFalse(iterator.hasNext()); + } + + @Test + public void testRetrieveProjectKeys() { + Set jiraIssueKeys = new HashSet<>(); + assertEquals("", JiraClient.retrieveProjectKey(jiraIssueKeys)); + jiraIssueKeys.add("UNKNOWNPROJECT-1"); + assertEquals("", JiraClient.retrieveProjectKey(jiraIssueKeys)); + + jiraIssueKeys.add("CONDEC-1"); + jiraIssueKeys.add("CONDEC-2"); + assertEquals("CONDEC", JiraClient.retrieveProjectKey(jiraIssueKeys)); + } + +} diff --git a/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/rest/TestKnowledgeRest.java b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/rest/TestKnowledgeRest.java new file mode 100644 index 0000000..a1ab696 --- /dev/null +++ b/src/test/java/de/uhd/ifi/se/decision/management/bitbucket/rest/TestKnowledgeRest.java @@ -0,0 +1,40 @@ +package de.uhd.ifi.se.decision.management.bitbucket.rest; + +import static org.junit.Assert.assertEquals; + +import javax.ws.rs.core.Response; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.atlassian.sal.testresources.component.MockComponentLocator; + +import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.CompletenessCheckHandler; +import de.uhd.ifi.se.decision.management.bitbucket.merge.checks.impl.CompletenessCheckHandlerImpl; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockApplicationLinkService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockCommitService; +import de.uhd.ifi.se.decision.management.bitbucket.mocks.MockPullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.PullRequest; +import de.uhd.ifi.se.decision.management.bitbucket.model.impl.PullRequestImpl; + +public class TestKnowledgeRest { + + private static KnowledgeRest knowledgeRest; + private static CompletenessCheckHandler completenessCheckHandler; + + @BeforeClass + public static void setUpBeforClass() { + MockComponentLocator.create(new MockCommitService(), new MockApplicationLinkService()); + PullRequest pullRequest = new PullRequestImpl(new MockPullRequest()); + completenessCheckHandler = new CompletenessCheckHandlerImpl(pullRequest); + knowledgeRest = new KnowledgeRest(); + } + + @Test + public void testGetDecisionKnowledgeFromJira() { + completenessCheckHandler.isDocumentationComplete(); + Response response = knowledgeRest.getDecisionKnowledgeElement(); + assertEquals(200, response.getStatus()); + } + +}