From 4d8205de85a4d988f16a3412aad69a3f73f28000 Mon Sep 17 00:00:00 2001 From: yinxiaolog <15121849303@163.com> Date: Fri, 24 May 2024 16:00:43 +0800 Subject: [PATCH] [DS-15953][feat] add dolphindb datasource --- docs/configs/docsdev.js | 8 + docs/docs/en/guide/datasource/dolphindb.md | 20 +++ docs/docs/zh/guide/datasource/dolphindb.md | 18 +++ .../new_ui/dev/datasource/dolphindb-en.png | Bin 0 -> 93195 bytes .../new_ui/dev/datasource/dolphindb-zh.png | Bin 0 -> 94852 bytes dolphinscheduler-bom/pom.xml | 12 ++ dolphinscheduler-common/pom.xml | 6 + .../common/constants/DataSourceConstants.java | 3 + .../common/utils/JSONUtils.java | 2 + .../dolphinscheduler-datasource-all/pom.xml | 5 + .../pom.xml | 51 ++++++ .../DolphinDBAdHocDataSourceClient.java | 29 ++++ .../dolphindb/DolphinDBDataSourceChannel.java | 37 +++++ .../DolphinDBDataSourceChannelFactory.java | 38 +++++ .../DolphinDBPooledDataSourceClient.java | 29 ++++ .../param/DolphinDBConnectionParam.java | 37 +++++ .../param/DolphinDBDataSourceParamDTO.java | 42 +++++ .../param/DolphinDBDataSourceProcessor.java | 148 ++++++++++++++++++ ...DolphinDBDataSourceChannelFactoryTest.java | 33 ++++ .../DolphinDBDataSourceChannelTest.java | 41 +++++ .../DolphinDBDataSourceProcessorTest.java | 107 +++++++++++++ .../provider/JDBCDataSourceProviderTest.java | 51 ++++++ .../dolphindb/utils/DataSourceUtilsTest.java | 145 +++++++++++++++++ dolphinscheduler-datasource-plugin/pom.xml | 1 + dolphinscheduler-dist/release-docs/LICENSE | 5 + dolphinscheduler-dist/release-docs/NOTICE | 22 +++ .../licenses/LICENSE-dolphindb-jdbc.txt | 13 ++ .../dolphinscheduler/spi/enums/DbType.java | 3 +- .../src/service/modules/data-source/types.ts | 2 + .../src/views/datasource/list/use-form.ts | 19 ++- .../components/node/fields/use-datasource.ts | 5 + tools/dependencies/known-dependencies.txt | 2 +- 32 files changed, 927 insertions(+), 7 deletions(-) create mode 100644 docs/docs/en/guide/datasource/dolphindb.md create mode 100644 docs/docs/zh/guide/datasource/dolphindb.md create mode 100644 docs/img/new_ui/dev/datasource/dolphindb-en.png create mode 100644 docs/img/new_ui/dev/datasource/dolphindb-zh.png create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/pom.xml create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBAdHocDataSourceClient.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannel.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactory.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBPooledDataSourceClient.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBConnectionParam.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceParamDTO.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactoryTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessorTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/provider/JDBCDataSourceProviderTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/utils/DataSourceUtilsTest.java create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-dolphindb-jdbc.txt diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index 08155a006b23..57682f02483c 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -270,6 +270,10 @@ export default { title: 'Remote Shell', link: '/en-us/docs/dev/user_doc/guide/task/remoteshell.html', }, + { + title: 'DolphinDB', + link: '/en-us/docs/dev/user_doc/guide/datasource/dolphindb.html', + }, ], }, { @@ -965,6 +969,10 @@ export default { title: 'Remote Shell', link: '/zh-cn/docs/dev/user_doc/guide/task/remoteshell.html', }, + { + title: 'DolphinDB', + link: '/zh-cn/docs/dev/user_doc/guide/datasource/dolphindb.html', + }, ], }, { diff --git a/docs/docs/en/guide/datasource/dolphindb.md b/docs/docs/en/guide/datasource/dolphindb.md new file mode 100644 index 000000000000..64b885c01b2e --- /dev/null +++ b/docs/docs/en/guide/datasource/dolphindb.md @@ -0,0 +1,20 @@ +# DolphinDB + +![dolphindb](../../../../img/new_ui/dev/datasource/dolphindb-en.png) + +## Datasource Parameters + +| **Parameter** | **Description** | +|----------------------------|--------------------------------------------------------------| +| Datasource | Select DOLPHINDB. | +| Datasource Name | Enter the name of the DataSource. | +| Description | Enter a description of the DataSource. | +| IP/Host Name | Enter the DolphinDB service IP. | +| Port | Enter the DolphinDB service port. | +| Username | Set the username for DolphinDB connection. | +| Password | Set the password for DolphinDB connection. | +| Jdbc connection parameters | Parameter settings for DolphinDB connection, in JSON format. | + +## Native Supported + +Yes, could use this datasource by default. diff --git a/docs/docs/zh/guide/datasource/dolphindb.md b/docs/docs/zh/guide/datasource/dolphindb.md new file mode 100644 index 000000000000..04fcf8dcddb8 --- /dev/null +++ b/docs/docs/zh/guide/datasource/dolphindb.md @@ -0,0 +1,18 @@ +# DOLPHINDB 数据源 + +![dolphindb](../../../../img/new_ui/dev/datasource/dolphindb-zh.png) + +| **参数名称** | **参数描述** | +|-----------|----------------------------------| +| 数据源 | 选择 DOLPHINDB | +| 数据源名称 | 输入数据源的名称 | +| 描述 | 输入数据源的描述 | +| IP 主机名 | 输入连接 DOLPHINDB 的 IP | +| 端口 | 输入连接 DOLPHINDB 的端口 | +| 用户名 | 设置连接 DOLPHINDB 的用户名 | +| 密码 | 设置连接 DOLPHINDB 的密码 | +| JDBC 连接参数 | 用于 DOLPHINDB 连接的参数设置,以 JSON 形式填写 | + +## 是否原生支持 + +是,数据源不需要任务附加操作即可使用。 diff --git a/docs/img/new_ui/dev/datasource/dolphindb-en.png b/docs/img/new_ui/dev/datasource/dolphindb-en.png new file mode 100644 index 0000000000000000000000000000000000000000..0a59a0342762a2d7ff083118fa526895f54d5364 GIT binary patch literal 93195 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

-4ioj;!G&da>}3XMz`q()n+9@pgs zbe{BnFr|u0MBx)xjrDej^0+xb_+05x!12y#18}M5JS?p_F=rz6($k5L0?Ho)0J^^cTs;!N9?2tnAAN4t8M5K z1QXI6cD}`uF5;OvHE&}j_WLQ1{zg9W@_%{scxFYamElN$!$OHuv?0EkUsT7O=Og}} znV*mC@zI`<2Nx>tVn_~|;h(Om0XJXNX{5Sgjk~IJ`yL~uS)cj?zS9#7NqBnBKsc({ zZEe1Dz(M?Qp||ZSHr%8b2#c^&t5J+GmYfu=FgH(r}c;FS4DL~J@TP9i3A>zQ^jG*agYGsFPlwHwd^hP891umn?_2;;EqSk7h{FSfDt9Ry!=0bIu^jk)ARv?XBO5#gaB8M#Ywi z&o4#2KMam5TT{xE<-z1Is3dyANW8+jy1Qc5IVCtAZ+ykv+TG_Rk|9T}9-J0of4g#q zHmf2Q4pfw0<*+3-?Kxh;Y@F}toE}qAlj|(Fj>(LW_jnB+`m{2U-~Xc$QTjr?wq%=)^h{Cqz;eT%H*Eyo~xO3P9`E9D*v^6AR~IK ziu3Vv9;A6)b4>l<%r#wyV~AaIx+>1D9CXIDolvX(?n()m4wrS3@f9wC$j3rxT_;(CV`q0^DSIdP zlx7`%L!F^3Xi}Ms*houf!27fHA-pQv3x^awa86^u93k`}yWg|_sj^t-s1$*!Qrg(p z{IWS}M<4>LQ3~&%@`RG6O;*t06QnfOqs1bV#aIfh>v!C|g~*0y6oO~?OmrsL!|^Eh z*Wjws6Y|37uc}j6-A2s%%z<)>ijt0wb5R?GG4hu(Y7>b8SF3$4groAhqof@#oBd=0 z1dF)bqHSS19&6|Z9)uSxGn$KK$O8{6k9!hm6qZ(FOf7B9(ZLqOu|KR<8zXXaNmNCv z2MqLwA_>$gzSOnF#>OsH>kDVuy8QYD0}c^}cPI0E2M4Vq{6RrMwO((}Lw*su-fwIJ z0|S*^v$M16U0!@!w3F#+X`{B@FPadI)~m3B8XCAS4{0bLy`3w^s)5CrRMh(zY8zCT1V}GZ3$Ct12%pGBQ%9Ad|;E zGV-(-oJqBDR-}x?VqtEZmJtg)@H94c^z+adGE!21u_!HGkTu*Ly=rb!Rs=l4p{NA2 zI857{JPSE(>)SsNlI|o;GA(O^7tyMdb4GAyrhyj4s%U3V=-xYz;xS_&K>9MZ@$T;K zY&~gQGL7B-Fw*!;lJ7yhXM7yFpw3@Lxgf7HwpN3oc7dK^LAXE~D!b)Ct=HX zNm{suhqV@YI8pba+~NF`YjE}b^qv{}cHDA~k1n!DHp_8&*o;RxbsbP}*$Wuer)4bB zo$(Qpo@TA~@lfvfTNt<8>R$W!>kdJK{R!>&9$!}yUzR*Few5EWlK|iLDW&5M>VRHf zBUgXnKfOz)I@#8IA8@~vsaxsKD8s1#RjFraLA(Nl-SJ==#{1 zdQJMedrEAp)B!TLjdTwMwf}yhtIH{OaR(s4-`(MJgi8#SaLRy?p~*#=W%5oz_7N}B zv-+PazMhCQC(c~qsceG|Md>oTcw_0TPg&`~2{m62Zb(6DP!0xLYE0;?Kl8uU6IPRb z^H|F%fCTFLgFN*W1sAC^tAEVn@GhLB_h<`vs~tk|YgDUkwV{6I_}Pkyq7@XR=fVL~ zZ#`uJfb}GxyHsalh3%!OnVSB*TridIyC^L@%3s+I2lRHCMQTO4Wb5|FeXNG=&E1yv zKC1U`g4^=(Kg^zj(n*GW#x$LBO@iEDmTbJqo>NKHY)C$2=zr_~E~A|y{fI7$K0nbg zduSG_`xkXxKeB!)-8Dt{L{mkfLUw;3X@}8~)t>I-GhF9Y|LulB@5}Rq%WZ15ygB`_ z$(Mw?oz#gROcV@a9I^ zgSc2jK9&)Q0_B@Jw5afDX1V#hzaR`Np_faOnBfU!c4=$eo*7*+dnw(WOF&@M@Cz7Z zMpJiGA_F_0!|t5Ea;?tr+S;=8E`YC-Wfqj)!-nVM(^E_|V+vF-%B-F>F*mjSE1pRc zpibq7+dTDw>F`1!#K7C278Gqrwt!$pG?LpaqS<)QEpJMqz=ZTu0eYUVK&lqQQ! z#TU8na|pO$vj-CGN>n7kRb)^SzKh6ej->`(Jp$M9RnyA;3cNxEE?T-w<@EJ&KscPB zE=-dBc|k!!=N$!wqF7Pg>3K5du&4HRlh6n$?c7EK|}>k#!>E^ z4V{R;f0za{^^%-*POxsp69(62CpGlEm;U|7Vi671;K;z+@?OH`z>3jO&Yj0zbJUm% z!KfWUKg;qYGDpPEC;v#M6cERnq-5C62&6fDXEXmj#pzAS~s6h);hVN&2Doqz{;+2sAwRA~$b z%otOoDy4;7V^`p=f@UdBZ$Dl5qu7^3b@7k9U}h2-VGJv}|;7ZkKC{Q2`I2fSIb zUTus?PnS|qh^1M2G23zk{|y)kSH+W%lpG!(|G~;S$5sW>J1;LT-b%CW>@i}l@p^Mx z1cGsjtD74K7~Li?8UfxqsjI8^_xH2%~N9yRUvnc^fZVr3sgif6d2R#HyfB3xYjJm8pGgV4^8pp=X^t$e_ z&J8Z2?V_jU1s3%c$p|3ut<)dIopfGRM$Tm@BU$-d^Y#|d4$@i5;b}h?-4s^iNWr4Y zOJ+F&)})|u#%j?3DeOD*9Ae-_j1!6tR>ppzGpvBS4Y>*3SG35SE7DG0Pv6!(E~Inz zCch@G$mZgU^0$}0tjY(4WQGO!_dN--^n*|DMxH_g5=D~9Yj+0*He(1 z{AWg(-36VYH#lnORy5QkpPL6`>>O*1^i}JeLbTQ{WTFoblxmsD$tH_}353CtLjD6; zCC22R@Y$g+cagz7c-iYZ2g8nEGFjnF6x@!Xn@*JqkqTzZo3{zRid54OD9U=2W0_J@ zo2O&>ed9^wal$6SMCqiPW~ksu_Hn1n#uZ``w0KxzB`PlQb%@wHLU_&fC1&`1Zuhyv z({8;u>^2~5UTz-Ad}C@3^4;s}=`2sP+YNhsTOZu;gp}c@?pfH?(k+|M+J`4w9-hS0 zOAXc-_O^ZoK^!}+%)xC-AfZkI_A#Fl?(WZ)xLdN$JtjfE6fxg8HO#GNx3@X|jNK}F zxZQtxP&7fC0>sQ3Ur4#refx+-tLLbng69lcYhq=gBF828y01ReAdsZ!<^65D$FqKW z+S1Q0tFEXjS8BOC>?VCv(JrR5-s&Y>F|cV^Z3E-cJ->@}IxuCtT)Qo(!~J0!1d3Y5 zAGtP`9I|@hFBw%ge2RqP5!ka(Bbl9@5tl{j(?l$OfIHhw^Bm>$%n58(wypNCn6!_j zb`oB0F(Bq-k35R5)Gms z2nJi@^q5nUxme;#OQ|6yw41wopKi3(H4qOc57z<_$;hM%8w-O{SXkUG+4;i$TMJ+e zh`{3@h1>wt+@d!8VPQNbda`C*B6f1|5KR6wPw7HlWpcx7y3g7H+MSQ!uE3-|eM^3M zMIc#UX;HOLCtY^GLiF@67ldi(OxEVHHw(!eI!Wriw4YPBeEXubu&jR#O(#&+jK<{7 z9*6h<$jOgXzwwhp>LHud>_gXuVpRrQcYnK258dhrB#-ZbHEdYhx?CJ`iM}PVHG2Ik zv`JqoJTT3toS&Obi7-+e1?tX=BbYB*dJ#s>8Re)Zmx@|n3D{80;rU&16-jO>L?UX< zvUp<;OE|?Ta=O4j1cs_)9F^i}!fI=4Ls?8G?$h`D~k95Opc?>AbS z=+d=9kPU&c=~ffYCYNgmBH^rdU8K=s0=3;fhw*i*g$k;`1oy$=a^#up=|@AQk!Jg2 z_SplmsYAL?6*0p%bs-PF&#}As7k0F8yuqs%4yT0?Q$H9kwW={S@3`!vE=;_;-P?J` z@e1;Sc6HD8;z?tEP12ExY>Fy-u~XR2&*t!_>r9f;M*NtSIX*69AFs6O<2J3=k@g!aulYhpn%CV(t+?t-t=FGNxmWQ z_NchH_z1&ez1BF4hOxzD95*y9?1gq9-taLhm})P`|au)Xo*L4g%797yf^k3&l zr0lw2r*sh&MLpyEb;mc<_Z&%&ptF%l*{Gt?#!#85<3bIz0%CBV7FV3^*_;=>X1xYm za^Z7-N~L&z)dG|6l`Z^3RdaO`eJPVqo2ISrb8e`y)zJ|&ikAxA3yZi;Y;&A`$rx9c zqG>yL;`zEfs+K2qWYG5;Ugz3p_wF7KRUbr~P6B6u>>&2(9kYVMd&rCJZvj$|+=8-k z?DXfaV)RaL1=xP#I`uILCH#~YEDg>?Q+6!D-XBBwi@2qIzMKA-Q$uknUa1+&S(oCj zxGXHQznR=~q%sYp9KoPKIP#SjwcHp+^T(A6P@`yT{Hn(naSHbJla%ZdE7sayuy>0o`C=Co(88; zgf;NwG^ZvW#6(u!*5AW)Zng-gs&e9K!!7>Km5p_*yT>c$Tvj16vPXyO6XXjzW;7+|G@kRE zu@L+rDd_J3$=OJ59j9KDJ`FjLeJ&<8cVc)G?T3f*O^1}L?{BMUbE1$|kE)6x>YPW7V}pBi_I4u zONc|7^C-q*Y>&iEJOfB#Ui2A^=@KW8`vZe`P-hC_-|##>mf$#x+R+6&WYw4X z!r{x{7kp6ThaE;QuB9)4UfxuxROaSJQd!|8Ltj`1=#n4zTny^JqE!Nl%3svna**6m zPT@mCe~^nn$&;_xzQb)MZRQwid{RP}129ClfXYowvS9&&DR{06nGC;sIGF$Rs}Z4- zTzLchKX?^o8b~wE#s&S?hPJ95aXxkhm|^{Wli02ICbMiQs7G-6%S%gl? Qblo(L z1=Bl5UhVuxEXH8-aM3oY2-032Vw zd;zEY+EsV}n7%frq(#D#&`^XkAP-n{69p6f_Vz|Z zNBo$^O|8V=Nt-2r7D-MQNL0d5nv&HRObg3%^T?6vn~H_ z?w1J7Kuc|p+&z3`SS==`A9KnrC$RIB1-G;1b*H_u{t5ol_c_oc)$Ino^Z8haX~IBMnnMFKSMS0!~=Lv)8l-Bz%GN*z3vqV z#S{9X1uS;_CQjyZu{SbLKGRFxvWzLJGS`oMj!#SU*4~jfzYNVL7z#&;vg8g~`PB1# zyj9hGJPK&AT<+xWiG;gcHf9{`O%vMMfZXJL)gaSnepN-=Q|?)WiN=BheX;8$MZR?> zIFa=ZE2E}#b74d7b!-3nYu6(KEn+}nJXlkJ(4)s|fh{dK1=+kwe~7@D17?8dPs%XG zBRPn8L4)T{nc}4)I{t-?UX!7zk*6dpE^BdRDYb!~ZRZuY^M%@=ZRoeI--UD`WNf4{ z9a&zZ4?}1nx=g=`J|Z3TWOaws^C+{qpW8q9Z&mJo3IA3g@ht-9R1Am@Y07H;6`Q&qE+BLh-w#RBg;MuFKI$it3FFsCd1_ZS(-NVg48SbuI~tH zp02`Y@p3}{SJd>8@2*amL$rl79dHvn_bu2BmBt0{ZE8is%n2gZ7q%s;;)?g3RQW%Z z53#A-^LL)xhliu8JkB*2PYso{TiaIN_-$JG?bE> z+U@L0EK1kg_qk~O}NOGHZU%VQ8&G;ZqeZsryRX zbQ?#2NC4>N=6LH}@botSk&%ijos`Rz%ah{Ik8Qq@Urmel_qWL0(l@`6lwkR)RxaiZ zoT3cXRs8DuEyUJIeT`t08bE>>X($}?k#EyG^sS!@3mz|*_ea;Nm8Z-yWzL{w=Eqoh zK9C30!)`W{?YoEV&2D`h1?0}<)=^62qt6hFzwW&=UY5;%BIqcSsb>?;Kv@tKl2T3T zd596-IYlfh?485AY}1s(fXUg=>jI5kL>zIuQlARl1x!_Tb*yizgwg3nmFs#l04)98U}gpZ==X8aF)>2=`rqFITR>{*6cXN0(_;s6%*@O|4YCa#5$tOK z2Pgn3Hz@}A*#fM4W7-ZJLt_;w!aTy^Mq( zl=QvdKHo3d1KEn$PTkB`YJ(-7n2UC7*hroer|#f9u}r&d3h(yu<%>p~w_Ko(N=)w~b!rvyo*bqnLd={i-S>Aq1k!a2oF*n@AtBqweT)BC49YoyfP`l(rT zZR(-2dwSnERq4Nw1YjSzKwW0D0|o+9d8Uk*uLcvx!EiOC4@aZbpxG@{y2Do$Wo3DF zCx^@KDwVKAAomK#3yi_y zpl)hU4Y9iMMHa059A=!<|CM*#`Z1+Uu9b(QgD;yWl*cWZ88t-w;2S=9MU?U%+QQ{g zFqhUUf$3aUUcOV7(dM#yH%^K#$ohN6Z|7B;D?Mty`;VpYa(CY@Kjz@IS|sP?%Wwku z2<}RXCG(|6JsgnpyxMF_G~TRTWQm+TOKAk%hF0wTYUo^7 z;{V(BaFolV4a29tdpqjtWJ2P60s(A3QO4o-tW&%-6%`ep{QNq;lQ!!&>+knXU7lwx z$;sHN@CUvtGZ`&B>DkU;?Q507sG&I}jsl6RNB+`&d{0K1 z`DZLObtp*;c;nBU#wko%Kp_L5AdcYJS>KMavwePaoC){d?r(aT8cXq8M$|aLn;McK zT~L)2(SXf4l)XH+;lPwa97m-js>MvcHT?{sZGs^ zLbo&0D2&gU(W`m$Gek<3;O1GkUPHiIw z65-MG*Vs(){-?aN;d_ItdSY%{tQd!!IB`n_cqND*$&Z{wG8hEpi?*0{qI7f(+J*(Z2q-y`jOu zT90J~D|Wnpbl3cA&rCSl>Rn)wHTEs6j+Z$acrO6fiEAzQkmk)ys|hP7K&@yNS9SJ0 z^^UIHNto{La3Uc*!og%8WbF3;u#NTO&92ojS+Hpv& zWfo_5&tqK#6l|d%UIbTf%_EsUT?$RmJopHDoF`FnDhFwnfAciutFU;`Dn+m%gk_~` zqU-=>MGtpO{)(6usa`dwKgc3wo&T-r52a{<4;dOXHK+7*BGcI06HotUC;6|q_B(9I zgEOpS5w!mh1X0|nVYE~w@Mi)BVe!<`rzG1x7@qRq{*=g+7hlT*!#KXPe|lw=+uY@d zjN))<>ZwWFx(s@jNxpy|MB!A2xq#G@Ym=aW;>>)|JqY zz~RQ#&w`1KBT96YLGa0I`o0Q#73JtQAYU+fACe18 z5D)R&#njA>l|wI>(ivLQo0W1@O~RRV9XC_yl4-4m7n1KY^d+Xsgaq`T_w=@jXnWYB97);C2a4eiSI< z@7SIP@W5ld=U$x*x^?zF8#zlnj`5c?Nvtsb%R5r4IXN#r=1H)V4|=;)j|+$P{#c3` zK6yeAJE9)c??qU?)>tUTU!Y`ZSiF zG7RR}v`5qV9TE+PqT(32d|@r2zzSNFR_y^&9|-@9(h*$lo!-`qt729q6@?;b#=fqs zvr(_(&!H$oFJ|y}5scQ+zJrmSumM!uYmNxk_l+@F42rz)jJVaB7jlOoKla3p>m%9b zC(d6zDxHFA8L2-1swlkI;rVW^o3TM-u%!qp3V4ZudAt=xu>~em{ZUX;Pq8W!hkSCY+8n_G7w2MSQ~i4v)Dy zs0W|V+~ZH=b+7~tGRpJkR}@2UsF^Liqo~Ghltgljo4mZlV7*JB3qwn-$dAtiypG9W zoIwEd7A7Pz(xAuh37^l)FNwn%zh?nXM&n4vrL@?>AhByQ;0zSCUxR;xel z9o@O|&lVm$r+l1#VGKMxNwC5f3|~eiD8n9}o}s8YH|>M-k+ZWi{f2on)_WY{k2jEa zR9BZk8iy_L{ASwoE}`JXjQm>A0m9k#VH$}#ZG2GRwNIeh?e2ts6OIXqo8?AVC(8a3 z&g-!dJ8k0k+}z=EJ7wkMHG#h(ql~-n_{o>O^e5jc+12iKEX5Ohg;=R@{RZH4TrP#p z@@V@OFgY*S*}imLQ11+hoi0mQO?MO4CWhA4iS!~k%Fg6NmDg->8{_N1TD6ja{1o)$ z&b}%u{sf)T$HcDVQ9F}y`41}c&=N^Z`IZOhmrhF2Q#6@{=RJ6w$MIpVpE46M`c+tX zcr4^Es;>&_nNFEeH<9*sE98Z6lLrN=^?R>!e|@zn%x907g2wgE>xZG2@LF7t;ph)| zv!(5Z7FqukSTe&;`=Cbm1SJvRb9x=L7Prh+rBej2oIdeI32K)K_?B;qj1S2Abb59F74|9fXZpo9Qf~N<*vU1op zb?nvjq?taI^lE~G5-OVlfB!(~+Lt0by2*O{Eadh!qvZGW;y*;LpD-N%tbadRwd=4$ z=^6;vyf!COG=b-^=BVRggEA~+Q+bc#sAE2+&fB#I2`3BMy)iteTB8u^&;?00z)IdF%ri82po{A{zeKK_3ah|Ng;3p9LBrRZBkN`_A(c z_1rl2w3%b_5gCw%*WA#H6_`EklLRLM*ULciz4PUEzV`(E@fp`caKA{2!Zapx`eybR8HTy<6XgVLcVWs{oF|9_K|p z_nJDSn_CezyyxmI1uOjaDHO4htzxL#i?7?0J}EHo`j`CGZ3yp5Fd7`cWdlSQ)Z$>D zEdlN5xI8_pXo-(IscGgUZFYHUY#dGF2V=qQ(}rIqw5-O88>q-5K{i5pNt^yTH{CavoU zL-%5B0IVgUWMDW1SE=2V^8d3f2V+jZCw~)dM_^J6WDfzaXyIfyrdD$FE?K^%HTVuV zq$d!-UhKLvyUv%jyWBDkMS*gvF_7M`XyMaDioK~V7w793II=*U)j20fkI*8q299|3 z((Co#)XT@(M}6ZqYx8CW6vf@4#-sm4g7q8A;QKaFEFn=*Ml2bxA=NPxw*U@; zhstR0Yjzz)_UJt>z?N!*_F=F;26iqf{QZ31(n&M${?lEM8Hqpotql}1tI9LMS4=B} z?7Hk|v>$G{>#1gU;S}a-b(&^>(laHx2Ut8FIw-=5ptqWx11*u!%4KsJ!O}|dglCzv zFBkI43Q~5icub?ZKUm}-=aU4z>0pv%?D#n`;);H1@8%UGKIdgerB4PKH@sfSu~XzV zRx?^1ZSEWXY~a$>jZ##ecKL=+$oSW`uO|`&uH2Y!Ekj?MHbA)kX<0QmQ=a=}CaUrI zG&;fw9@vl*KH7vVm6{f?JjVjZ95OfTg`SiMFwOkdkRM>8i{=HU)Hy)2g)Vwivph{A zIRC_n#b$-mzCGid%7?OD75*1`u8?q)flXoIw1&`LmU**2h0g@EKOCapkVT0EBG4x@ zUN5!jS6r_iS1g<5=KW51>hItP_xSlU_tHE0l$F=_3Lw2Kr6e;(a)g7$nw`dd#1TVH zNz_Y<9wjFh&p>}kxcUW6r3o70fqw|g47ql?L9N)bp{FZm=kjU1a#i1RPJ`7ggC(p_ zcZD{wi3q@Dd+{7V2!s;fi@8Ri!S$5=@2OQ)j}HCe#ji)?07$isE8o4vxh;XG=>OFo6cv`!7`Kg4}qyxKh^EwCo)m zw4*d>F~PK(xP-(B29lSOogI@&T}pmF87(H_KdMLLwaB82nTeK`7O*~JF}-_!etvI% zA6!AD-r>f!g`_pq-w&qb#-Hy_nbO9=zsPH7j96B6uU5<3BRU!9*aSxx3vlua z?qqImu3F#UA^s;Am9u=ff$DOkg-+cg{BKsSGq8o4S z)gQy2K~7BGMp~alaZB&M%?B5eq(>6(tfgJZH*}qM2ENAPBY0`e;l%ocJU4h*a3LlF z$`=+v&Ykiuuc$OjNTiaq$Cu7R$SIiU_FLoFr2B?Ue|C2YjfY@eWZX?oOsgYMGmVSr zgwc8$3z7Fo{MARD^X9glQtG&G7jf=*?st z99>_D;lBr<5(|C`fXI0u3&6y3V`{YPX$+lLow0Zs14ShmEvq#AkgVODym?f&1Wu%| z)RCIAg3=v0?_x8N(YU5)xlSnAZC2`r*@nU|Tp4Wpcp~;Um+ypGhSR+HH?42<;esaj z_ik3W4koVf-M3vLt-FA)eFwE?y}*%%@@*=EiQz+*qIHg7z})^~qiRSm&Jf@te7!3w zLS`bPx5d=nbx0a#u3d+LBE#k9rjm^j-idb2La|4*Gn~!J@p3!}0zYvqt+ior|GBQ3|y|qj|8*HOBLH4u$@_i(+{iI%m_Bv^LK7IEdYHRI9pss zSC5lT8RMY7`My;K`xAW5hPS5AMm=2TS-d6VT>9HeYD+yY6u`^1&FJrdr|9)0o_4^k z5WsOL4L_dUX03nSd(E?Rvn|d2{ZqQj&J})Zbsp(5+t3o)<3baU?hw~8I3k)4E%J3V zvbN8vy`K|wQ4Beqn);=IXUKjd{N9TPXy3v5JHz$aJRFBF)il#Hv9{KJf`@|*ch=wA zD=n5Z{!li%pj_<(+qLKJs5 ziaYq~T>Fr_?(gU|v&XfO{e6@!G6_kCL2tlS#SNWI7JtO%+xr)f+v%aD{M=<*E!SVC z?(2uyfNdOF=l8J14fl*9)d5B**KlqZ95Dj+#?#>TSo(Go45F?pc(w?6tD>y*?`T{X zW2C9VyAwnTpd;VvX*h=M>KQEcr?I@(p@iXP(oi?-S3d`E(S?^nY|@5XT9-HeK!&Q% zCM3Nf;MJaK-Rm_HL5267kp>Aav)&3JSa$E|=77=j_YEtOs85MxRMF0W_f6CgKbZj+ z;AQ4-R`kaBcRA@=Q~Xi+tj#3c#D~{F^n0_jxelX*nw^?pwP|3AGqtIX6A8hq_)KZp zWK&&m99oY3Li-b86)fq}1S^6l!`_~-*w)c8Iysb|G`KQ1-es^Fa8yZ@DgOVcd&{u6 znk9Y^cM0y0;O?$TNPq-OAh^4GfWa+52<{FcxWnKsgKL1`?!gDQ0saGdbMJe1pWRRU zW$VM7dCuvsu2WrAZNKg_cIA*$t~r=bH^I1YCSG1zP9Mh!HpMhJsg&lS0r}R_C^@?; z%py#e8+ptD5~_!G0_4Y6yOkec?OLk+d+c#165k%r&2a3-6Ja%PTDQBoi^d_e}6sdlb4m{$5K}BKb$Jy1l@+u?X)$N4mYSX_?egX z)OlKGTG;xyY_EDK%j3A4$Wta@6kARR62smC#cc+%7#-Viooi(Lf zLm3&2h)!5NHJR@6x`^luPf_$0FR4xG_SJgiG84eYgH>xvqZz=((F}fVb;ss}SeI_+ zb`QC326v)sdmeX(k@9`3v6?{tSR`Ywsx3=soNJtNo4-VMDM_1Dl<1cb`0|d0vg1l9R6|(EBl7{H zGS!k1TZ5Kmd3#gsJ#igG6l*!(mDqinYAJ9|#N0I?L>*R|&s>Ndloj_dNCj92}dmDpp%-!b{M5{629k$4cF3O0Ezxgr9M-j1Egr z9xK$jnO6p5Oh;(B$)lz^J3E+eVTMV&&Lg#XiDj05{STe76@Nzb@jBEQ@PF~6HZ`o1 zYe=&?>6!)}E#LwkDlK2?%5HFjk%{;qht@zJ?0EcCgzZ*MTT7=j!K>E}cy=y0cv#{w z*`@@pVxL<2U@E6Oj>G1|KNofo1F+TJueZErP5oE4NkL*J>7VUnad{ z(~#sw9Jp9HUwWf`e%bLak)X2e%X*}L$5M2P+2bmV$lKcRvhv8$dS$029^4VH%u^6K zANJm^O}1^+B5KcJ#R&`2%M3--37+)Ph)}3%y!kif)SbPbo<&V&Un={0=x_~HYs!_Hy*Ze=l_rVscG5iv9%gMCLH>>#GUNsLM=5bowaFZ`f&+r?y09(HM za#?KD(%^>kZ;FPGsj6d1i`q1Noe+8}Ze^{r-0#UIi?pZL?OG^2`&^WVqbgC zcQt4RP!kW}`Q56tpVIT($5@;CM_fBk^(NQETG@nq^h^ zFi*D>&)!j|?m2@`C4v3t7rXeKkEM=};$M7&X4n_8DR04lDoRG}hW6@QBs@LHg%J9Z z(H)9ek0v7XP-&yJ`eZDh-|INOg$j@(i{|xsy~!-=e-tQ(C&lwo$Tz|@3gGFuCi&-#kjErA7FjD#Z{QByl#vea z_c^fjQA-~EoEVs$!VR(E06&n@+4$&#=?hRm@?2D(XC?>d#pOKAyD=x z|6~^X>FD%PfaFno?wMsZk2*0{6iiJqyjw(iEQRE`aBD;T>9F)55JrYR_V$OyBXi`q zygWv%V0f4bx$}AR*LVldC2S4bB2 zn7L(m)6p=6KFDC75aNOlW`5Ek4(2)Q<3q6@FOVOFxuDSTc$8DdmFbU;6`Uv0pR5xq zX2)YeIr)EH5anl8>et3qMrh{o%g<9;>n}5?dkG=7J#qQZPe9rq^Lo_T6GgvL_`gKJzUTRWY~Vk9 z{-34#%LQ5i8~=B4Mp{c2fY!Jn#(K7|ADOv_*vwP3Ox#Ee0yXt)<_~ki9tGbo1c>?> z5EBRaS>)Z=R5#}lA0+UET_pZ-`?b%)oWo0PE_+og(?IL?o^7X{AIeZ(#?O8;cG)y( zKM60he0sf*j?_l6Xf+`w2o);YZ?x8C?U**gcXb$KU>sIsZ#veu3QC z6SEbi}|5J^`GIQkk$2(skGaz-C*V zpZD=iIn)Ps%rd*uUc0u{V6*h~Dnk60#m>-*rxI|(MEV)YyW<+9Pjb;YwyG^OD2DhS z?dFMY{r}V;2`{cmIe22Qbr3$2->^nQx5@_7&RT1*H>5C)_Y$Ce%k3wZ0KCbacFVV* zb;9$|4PX4wvvuPBL-kZS(5xdyS@D0?LMM-GqlDn+5yvuNjE*E#s}6M+=TG zwwLdj;2^xqnOqDR_nfaz9|z@G!x7)ob5rqUN~DRYe?a zi^rgkW;0Wh4 zA$+dh_(;7nBiDn?*!2XqVQ00ZhWiqBgPF>?f>_8p)zaXmSw_46>;#E` z0h;m_B}ikrHCCXG!PU;tk;g~ShC91QLI2lGKlyd&rTLD2YKeBYm_+l}?CoLw&bWYN zpEb4XOlgU%rKJ{9PKP8ItmavoB)0{%hRsz8`(pr67e9Dgi*hq`OKR@i&S5Y&zY5UN zA(zIPd^~}@`5WDP2>u9pwsaS3ZaQ5!#w2x?w5Ef6U~D^W=vClOjtLQu=?(Qrc6V4L!CBLKcGojdTO zQU38HgXFM?Mz06RK%j^4==XeT5$625_`~= zt%+7>)aVVWquR_T(&-8>PSxDwTH7qS*2m*Z$lRC1uACb#@m!;4Z&|YypXa;fBS&yV zXJVGS8+8qZa7; z)jd~g(QDc?+xu-)=CHI;QSgDD+~itWZ7$7{gwr&RH#Tka9a z7KP};N1=B<^kqK@m)uUKJvSHj+;a1J*>L}88HXeasq4cizx^p1quu^dLf=c3IHc(z z$iA90p7JvZcH6N$8oH;TjMCi{htSdZt@>$y ztmx^iS`zPMrIFT_{YcxMTdPF&Fn0=Iy-s3%Y#4PMyWyLM-2*AIS@+Di=T=kXJtFrVxBbH<%W+=}=3;6Wfab!v>O!SJL1+X;S=hiGZE$XCQ4b=?&9;5AM3vM5E5O_#k<```M zid<-JzfRLRu&mSTmHE~lLnw&qZcBJ1IXyDF(0^EkT`EQ2=8k3h!IbWm5kmg5C-#HK z35qr!%he=Z;&E_f=86EePS;v_Wbc?W`k&UOkq-acvyeBpO(fI-3DbKoo`GFj*4S@E z?8s3xrhHMLZO?nP0W#(7{+iR9COT-GALl5cCw)!0Ld(OGeM|H+h^&o+U`J>Itq&ge zNDQRBhxbf5keisg@#Hw*@6u`b}hB$(mp}Zl{BQ{n!;- zAjjHxIs;202Lod|AD`B+oa9kpaqB>b23C7-5{FJ_e_h*9`n>AtMLudo`t-R;LvqHe zMpW8Vl)zMvLQ+_?;De;2X|c~t+vGfP42SGl)>=Y@l1-Fr`Opn*JFHjt0ivS20+5pk z2KA38Sdn)(6qIcTQl=aaSP~CQg>q+F)?UX#OPKS540`S7Y9rb0u=Ut$3wv!np%1MY z0{miw%2W^{o~`}<%$G=%nF2KuWpZdvzB8$iyV+9OaNdZ!3&jR|7bit~AJ}y%7~1Q# zzA7u|DyQ zq-0LM^*lX38XnqPck=rS*CoMcz!F#-2=iI|;ZHZH+8tqdS`a+x5o~t%_9~g?){CgM z_?0dF7O&uzp$IR#{l?eTDFaC85c-ejDPYYHN|C4l4og^6+z=P$j{AUG(i|Ca}nO>ZQughl#(5+lyCLR)8T;MM9rSPb`5*8lb*VoZv&!V zMHJ(p%g{EBwP*Y?Fy+}BoId?|Vl{I$bt-z&PUQxsN_E@rICAnXO*QlO;??4}c@gre zXTu`QVxC0!=y@I{pPP{+Vrnaj!RWg^-T6jg`gk(v3MO1Hv8lY>ksnMb2fuAcCw=7_ z5@AG}K^mP4SC3Bb z(DxC&4_JJ4cJRJvzO=d}oUhHml*?`Gbq|t@*Ya@5+97QOzY2>QP#iVLiZ!-ZxE<@{ zB$8w0Tkl|nr(}{t-&mMj=*OFm)K9;htGvVtvjb@YxPm#hk%Kwbf6a4jouw}2p5(TH zwXbn|YHMp3bzm^a^Fm;WO^Y~y=`u0ZA{Itw*2RM=N&;FK+90g0Bof3Xn;tG>@|{L1 zny21Wi%eE|-_qFS&y0UM-td_k?LWGe?Mpo~!CIG&w*%`}$IWMA188EPVCCPwr5Nj7 zR7*obfd|+@Y3g@yqqg6Sj444JnJw|kju;j18!i{JuQOF_RC%@Qb&#HAF#(-6EVi)B z0PV&qE&W}a5}VV#pM{d`n)Xwsug)p#aB49jPLXEs{7@@ZL~jj+-Z?Sq-QV#*AYhoN zjrG(-hg}=8rpZ>@=`nVy^+@%;uUbo+JjLG*ROn@UBD!7?WGRZToNh$RS&USde#5^0 z{tHeTCtLa&Cid)%SFU|dcfbW5c=^4zG+DrZ6*e}$BfR<2K_+ak&4u%jjf~m3?FNh7?}Mx@VS{~rt&II97>>eg#9;P zKGer%%;2nXd-48roK)|&$kt}X;lC5mqc#PV5;6txvq7tVDN zGais*X#vLv7OILuU`Cz{9-o%#DVRd>xB)T93I!CJh9R~^yLE$!yGONgqqY2l)iSo= zI_kFk0iK0=h1`prfpP-@14yrES^yujm$^|!RQs$JR^;7}J%wfwz_#PUnzme1w3^)w z*JUYlc0Zhmu3~>9M?nomn6@LY@*+}*;?b5!8vu$Y;K?ii2E9SwQustKLW=?WL?WerR;uh~8J|&Ugp2!lLd*4hD9e2g zyr)`^wb+HWRON!7NZKtd)=vcZd^EqahtDoQU#*9dlMeF3FfA=v62 z{$1j3E(W>HDMfMp^#DDCrEKxEe$J`pht+V2^x+sQpFZH^@@ju6ha)IaZ!I4S51Ft( z=hf1z&qnEk7{1#4#aq3tT?@Q=_wAP6XueokZ)X-YdAp3|9xu*b%J|+`Mb(oHl~6aU zUovRTgwAxSE?8|MR?A+!&czXZMQu)(dQ?C5vzq3v^_%4cx49KY1USQa8V={n?MFtJ z3^z-OD#84CpxR1nGLS^zpj~~~&alXy=xmYZ@AeRuwm}{`j$;Y4wjoR`ya`}Mvuyq5!LrkCJ$n7>-opxHxw+Tl(ld7bh|fV7 zqr@0@P$+Rv*UL9Fc-Kw+Z=VT5&X55ZKll3Rz-_VW=zJ73JeYd(0}&`8Y%1qd_wvn~ zjds)d3x#qR9@C+oJ!j`nIYcD&q1*PmOs7oTG+#(b&BNY&)nXqa~75 zVB9`-ZBxs+jIZW*H3(3@hnc9{Z;5aw4rR0p?YbnKy?p0~3 z-nDlcN$ItAq*d5^jabs|;)t-RZ)o308sUv0)K8p{hGQ5ci#OJr&3>|0QeeD3wi50LWpTHLK zUyqRZW^s*G!2&oPjRY1=_2y#}lT@ctJUIB^BfUd)ZJLP>`fCQG(6sx*BaPL53&tfdezvF&DS=p_?Jh;Z!R;~;6rU} zc6oA=&*9L`$o9C;l8D$xQ))d2p#uwD{6=0$^*!-EbEaX5HTF|!s5eR(hX6> zk%kysW2y-sU$=dehpWA5xWyEvA8%6HY#Z{ReS4oM}cm$NibLBe$0zvSF~? zM9BPlPeY`8|7@l3z#xrr_}RLxYbt+85ZVAK1cU6bgX>vjGKM*kd@yDWc)W*Vu*Wn% zVHt>P*@(A-$r-?Ym`BnstPd5u=a%*Q{j^Exh(hdNc{{y|4XR*ydOO$P`dnYS@rl+D z@(Toimz3_jrg<@l8qHa9Po7bp;|%Z(%L0dH6+ZZ!aV@k_kn5@oQ<`qSOhMeM>sU|C zY7KyCS*`sF1tr8;(MYQSaT2-!nlA+OU(?M(_|1v1SqkvOX%rWoG~7(l1Kr zoCdRS#6ZNu1+)k`K_~Js`2b&3XA}EDvuAv(-^c7fbK%#2uf(DB!k(gg&PJ9H?uWYb z5`SqHW>lqOo)hC=Hhn7s+U(wwAC}xZy*-}Mnjy7*9- zZvYrOJ$Z(M~Xw%Dk0Quw%!xx%69=J9IFM3I z!e}TxhC|UxbO#ct+7`>wisvxqg zviYMk&?^h@Tz=t)>C`WRoCcz4S}1mQzGk2mS4k7xA(%7?ihW$bic?=-uyX!OFBILq zo{RrZ8^5_Q3ra?NJHMxwU_PT@q2m8i_eFzks=Yj7{3iV&jvD}za{(53>Lo})-!DTE zKRI7`5%HtlZcJU}RZIH2j-R~Rv|lxBFx^GZ5)FJc}n{2cLJF#8mR z2?rC8kB5= z)G-p70Ye&h58~A6Y0#8<`Ek*Vu1}ao?EMfG@?VLnD`?2W=_$ZM0UdAZGg8b4M`%UF z8L*z^V%mT3zCFTx7aSAhHJ`D>UEr@b0qK1~lM z19&(*ADS*)83xzK_1wJU=0Idg!L-waWCd9>Z^Opi|D-m{mBGZ{1Pnk*-oUk*d2PfSaUh@sdf()A)j}yJ3P@3_ zO7Ta)^F9eS$?trZ8Qg47W0J+GD&;=iB9TrB=j~I}3#5@M$O*|y3ZJgJz4dNG_mD+( z?qDQw%TQpp8Ejv@SlMA6<|eOS$l&i~jh7>4r`qw`s!blFuyN{b5>IHVG%sS$=HAV= zH)q$4WtWK6_JJwakyq}bAGXt%rg>wHoh*(Qd;l^+MwPaK(@ixO^k3!t`XzhDLj3EO z5Mo`lW+YW*3TG~CAsVz4cqa*6nh_!bXWp%=e*0>2O9^j1S;ZYjz77;qDXzD(g+{)k z&y|+n{BZLT7G}W0&kg6KW#ij$n$KtxCn6UoKfJAYn5z{)QURk^-^R(R4Z+~2aM~h~ zj{|?o45Oy4!mu*3`r}Erb5bRt+7mz9-xv$pul_Z&yiJZ|R`*B(j{msP##471lDpcD*Oy!W zoPvQD`7@j08zaKX-~9Yj2aI-F^krL=R;sizD$Y@P=9cCr)?~pZ@V4W?aTHq)BU#q; zp%OXn3DKmPuI!H`#$gAk{6D#sb8NI$-bGb+>~{=%fHr&H()35TyOHR6>c;BxzIUYR z4HKy=-7{)nX(~){oToK1hxMB>E)8{WhK0+3_NNW3+cJ%5hg;5_mJ5&Q2h@*5X~Isu!Urbx!!0Ln8}N)aRsQK;QVxS!kuc<|(cv~sjeSINDb@5vzj)WP9!RX~`4?H7_;K|j@E z=t9iw`x^U`>XG-4TS!#w7qeD#O5n_wT1nU5*cFGo&ZPujU>+*2ZC~x`omg5XKN}I& zpnr|k_YN7vxm>!6B6+02C%Q+%axg zBa^b8?jrmghsJi|zPT~TFC^S#wwlV5lsE`BVG>kG+a#E9 z;BeK?@gBs;l;6BC3|_;~UM%QMPVj4M{1y~NBw~%*XL((MDQW>r-tnv>i1wWxyKX*N zTYgNBKD_FXr2A?8B6}oqHoqJ#?9x_4bnGf8*Fp{y-#D}YSokoF-}4^(bA9ANI-XEd zI8UojF)B!w%vE=4e8QD8s4aly3Q>Fprpgr5fDF>oGH@c6Bf>X(JxhO8ozAU_ur!CY z9Uh=8e?=RY63Wkpb~Kgi-i1U_VNcst^ujP_tIsAmzpfdF9AxnBg=fZ>m*nCl{_zHa zyU#25LAAtJUe8MXoTFVxVRLdjW)K8*IBCfUG5j`M0FEN+grE33I;oQ;Q0N>O&kh+= zF(fr`O~ZX{OjeFxS!isVd<*JWrBtW-5`{>TTtSP>%rDs&R@(hvT_PmpiB(_Yqz}sEitUo_37L)G-Vcz!147s_L|zR!#wH(j*w;Id zpuTo~<*89f*>*g|`-@s>`DN!$$ENQa!H7Wk2?PB`?tc3OC1q9E*&RT7R2T#29m$o) zi&sFJ^H0c_5cU9dNxm8f0inRc)nH6LQgPgej*s<$@FiX3aTZLPs4H zoOA2C8@&q#*weoLHF;er7FCg+gS?O~Fz|a#-R08|$@4bG;F(%xW`FS@W9Mv2Y2UDy z1e@`b#HPM${HS$M$m_7iYn`9ZTlzx%LL^r5ii)tB-AYgSQt#!sb?AP@sTpqNt;+F# z)SCQ~tSi?Td(m`GYCB#9_sgdI`%v`!LM=+jlryy3Lz_#tF9!8r_1}>!w{>ERe9*C* zG0LGHW@t})N47yUdI>@ta#nLJSBQizI(F}B!AH(f%wtB+YS<_7Tn&EXEyJe(uVBETt(p5=7p9Y8Q^5QoHL=<`5<%O?Km zw1ikni^MbrWP;kd<0q&6pW&|hC^WxlXh>E7!z|IsZ6#(iK10MP_ZnK#D?$)iPLN>izyUSgPu69~*Oo=5{SA4%pZ-y>R70f=T^(As?r89mb@v3?i|-#Op^I zXe|Koe4c?72s>Gti9O2oixF@U7__wfw(4?eJ6E=^`!D~0lQTU-`-6)$=8I)f$jvF^ zhuzW=UsXss_9_M+G>OW7>6AB^S|JTIMik@MC)^nVlWyhZZs+<-I`yXW3--(qSx<8;oBt9?fg9hlD9$_wYHpQ6pX<6@YR`_J- z+ABU9OFizaWUUPzTHvv}m>9drGsm2JTaa(k`elmSzn9PxgcbkwibzE-+hrN?v-0v< z+fu2y&D~lk;b83|2habrj7ZvEgLeL}9L7=T2+bb&njw8lAD0AQ2Dv}t3I9vcV*g(O zt-MGfbG3_!lmDI|`}!4w*(*NlLIb?_S@>&jEZP$U@xRhRQI^L5-292LJ!cV*mLAhQ z3w@1e(B0COc#ql|4;A*-x9fHMgVdUm^nSeQ^_)DyfEX#rKtH9>n~bfTNvdfRBl~Xi z@fml8U^i}e%N_d1(sB|%GeW7!v#^IaWB&v%@z6~L6rsf>$>`FkUBQ0>BsBLrmL-F z*(4!nv~{eM-X9!Z;d=K~aK*?q{~5}i#nG=kK_@%bW06;n1<5n9x+wwcuK-MF5)Jsx zHd9sW2v($hf)@-6?yGP1q0>s9XLk4QqXL3Eg-#83iW2%C6^=&z%xrwpj&vN*txR=0 zUG0*4?OkcKB-}G)+#56MAE$~RDOx=DR`E%b0OPQLtZ?uQOU1n&*adSa1xD4wNSq9S z#=vDZLQcpkoUp0)phtN&4327kOm>^AUsS|)gAJDT75 zjobY$Nf@b!-^bXIZABB+e3KZfrPY?cPwdTyTAtTQAR$QK`t^y5#7c}%>(-6+?vjVE zU1m*^g>oK`)lMK}qq62p%Cda(tq(a@jhhHe7vOqsR_><9=?zTNp^dl4<}5j%58*n4 zg4spCK$S3TSMABTyqY7#KUpqGI59APxsPl(p8owq_pn;V$ZAzSkIDTz?TdMV!Vi~5 zf8HC4SdI9n8byOfgL$xm)se_kut`pp^lqD`J*I`uXv@Ss$m2)FM)u@=lLy0i%2yLS z?uYb_uDN>YGqFS!!bA45lP}>Xda>0#8Lh!*}>elynFysbkccQ*#?hWX@TW}s`tzEp6_r7w)6njFq zLhBLOHum8uW^sS*TB&S$afwmS3-jPi)GUB$dfTM2)R9ye3zil)bJD==K}@RttxgZi z8CxiC2mZ}RRY8wMg8>sz{lX|&uwyzeLSZ1RDM}Aw&ZhQo;z=kbmT6*^Iecx#X5yFt zF9Yt7ysTt?fTO(gA>siclJlnyjpJPnP*It!qpEQhi8SdObM92osB_N3`s$n$Uy7;@ z;s}TiMYhGs&ZCH)-M~X~_fc%GPB+ODE!r2}d0sB6HJo(USqL8Bb2qvD`s;1RD|-`< z5KJh>p;7qJLHc}+<_|CvF)EDyX?@trPQk@ue;y;e+QU0 zKLqHtC(B!@O*W@d5-I?X*ZFwedbx{cRzf9wB8#cy91j(3*UVz8LYke?^%^RNcctcM z$l7-sG4%5yx4t^H4dM)rZkFpwq*Lj-V)u%BES1F{{B$J8M5cGZ4WZmua+xI1Q%v%otcUD6I>I)la?k_u08*ZdAU>C3s#*b2~^FkY#$Nd<_8n2hbM+GP$O zr^?VeG>|v0JO+_ySenWM3-3EH(n+L9JP7iRzf>dG8SGdlZbGTdAg6zmLoLddSRO=F zK285=d4|6H;Kxu|TKABIF@BtF7Hu-9s~?fKwJnA3IDsGq;M&cgZbZ-10dHzcDdd8h zTH7O1VDGy18#Rni+^k!qrfFjUD=7To0r~-DPXd*t-s91Qm?cSfKm6B>FXCP@zJ}?@ z)%;mg@_TODS!dczjY{oucCDz%_T#k5=Y!&}n3dnpB4q5wUt>eRwfx$BbU5AZUdH$P zmmf;h%a?nIejeMF&I|dl?xNRL80Ml|%Jwf-e_@K1Fp-`KZ@$tegbjLkyMa*hAh&vL z5gn$0)itN{1{A$wMNz&qQf}2!g#oz$NPN0 zDTC{^Hr4;^P$`bmMaoL>&XPW8m<$qaC4Hed`yFZLt{(;|aG;^jQ1YLa;-$tb$;8NtH7ev|xR!aiGRcgt`0$KcsXQm0qT;RnrsTum$%9vhw5<=3 z*(Z*}`%820F-y`=q{x?^rxGiH60JiWCrD|pj&m^Ge5a|JGX%+^IQ>G(>)rOt%N-ur zx@Ty{Nlts!+%~>_&C3GpGc8>IS|^8q+OBUo@;}&IJ;R-d_LI!kDz7K&2)jBZgX|@@ zffw3*Ksib%`Y|XM%1l7ZV3Y3t^&ckqA2qFy<$7-B>2v@-UNSY7z)a= zCB|cD1*p=STA7=7_4ck?muNn!W5nN1r1uEAC;Qchs8ON*ryUL0IvN_7b}i>cTTgKO zYro<`3+SO#w+Gq9$BTb;_~$w&i1@S{rTo z0or4^@&ARyYky}43wg6yvJ4bBXaEqUamesq zRjAR>-PTn)PBqD;T~V^2>zGwED)En`_BWf%;`61oX#a1gG)|iAp5S@Hh3;Z@dhLP!wRu~*+BM@y^nVLZqq3m|&&T-j)YE`$>tjx~>8tY0*<`Db z@s=0Kvbhoi?R$xh2@DgC(k<8b@0qkHrs3 z-TAsCT_7?y_2T2g%5%m%^u#a-j+ar(&-SUm-tcslkR!VKFj~sf9J8~?hXN`xTFwxa zgGqhs?8Y||MT|QaysDzsSDQ<9GV%kGcNAH1{VaJQL?K;xjEOD*rU^C(&sBx%T-Tt> z^($SMZnvL2y4!Yu3Vy1uN>35?veD93Kt0^rP7=OsK?_pia1+z_IrYBrcjY|igB17; zcOe+3dE!3k=*wQ=*i(rH=^d@f!BrX!1`NmpFP>8eC4ImKpLO)wJLr#THJ|i5y5RGz z5mCM>aD_KHcWK7_e*9cd&OJR+bw6)`Ck88e>C=JMV6}jRzVlA<1{8GjFPe+tpIN^| z35cqAW*zrI>*Ko?MDbdH)WeBSC0}sW-lgZrsa?s&&kG8C%uxC@86_>+WVPj)U+Wi) z4C%cOL1n`srMtt;4-3fF3vJM4@*Hf z0&yaC6t7DdJ{>{Q9-3=XN>3Aj`Sa?5QsH%fu>djqX0^c)3P$ypLAK;1-E+)Z{Uvm6 z^`dz7`xj*W-!8gf=P$n%<2$~O97Yyu<06(ZuV!LX*?SX*AA0h>+l3k29W!}3-NOw!#8HhT>DM{eRY ztS&!J>GS9E!GPen%iLX&_8=%zg;oLjrmIl=rNl-J=vslL8Ouo~9h z2v=k;<(0u#B9#S&MLpFi7nfw|!KFw=R@(Y}K(nb(QL(+NavSHGUm7d-KW1kcHBPM+%E33iXJhANeH>E$EqjH zwG!V15qLQCoNWNZ-uS22?5lIfo(D&=nPBhq%!nxW3s=O)hZ0s8&ohgsk-iy9zXP8; z_^T+seJe&NF5jV7_3Z==9o#WJ53?^wj--zHi%-2h`HcZ)b4yDl38Bhne0_*;Yg6rN z*Zd%C&?`tgOFix3m0sy8-n*Cchs%G53V&R?)I1>TW$2BhR`T6QzNZRoM4udz^9fvW z%#Ss9RxQDnAhYP%Dv=$r7*wlSzA0#-y)eZ|kO0i#;;IVP*zq5R3km60LsZd|4C!ZQ zhqMT_qN29i?0EJoRP*Vp(^w3XsE0pZW2L&R3Dd8Hhc2?H#i%XEjqWZEYG~;jUNJ;Dyk5Bd$Ajz6ii4z&deoY#r@qj)7LYQ zj_ue%UQ=IKc+bSlNJMh^anA@b90fZXb}h;<|KZj|em;4#U6& zez^?Pr&$v`>p^rfK9Twr!(Q33B2LqDN7VCKhyskF@WsBr&jpgBX=|Uvbnv<&W_Pfn z9kIDq6GqUb?qJTON7D70ga!%Dw>k~UhEg(t2Tz2`9T0J~JJqS{sKMH@>N6b5uOJ=S zx5*rd5C}gz>X_i)sj6}Q{Y7jin>6>EGG#`lAZK=B!dZHcmrs75R*NnQwpt-0m-_CC zLy(KOLE<9X3_&@Fl5tF2Ivf2h^Lxy;BqJxR*^g_;r29g&*1HCqJmU)K?Rb_KzBkOw zS8@QKTD;GQ|L`r-P;rL=q3~s-8`49s*$E)wR9y-B z)wp_y&#ccaaV7M%m(FTZaLEylm48x`Bcv)iguzN@JcpQXb<65#a#|nwce7K?z z7QcnXKKuN${!pmwb{PL+y0POhM9&<9NeqeeW^RvUp6$v!+jTuCv3}E)3YedRM1<80 z5BhqP*1uV|(9gH?%95N2C;DjrCoJGI2`i(&<#S>Dvc50DxFb5xTrQNZQYA`M|Mcj+ zSJ+Z6kR8DdO<^nxHUnIcU2E_v z!+fh6eoN1STsaqmR$pvEn8QLeSJ~v-{eCrYpV4xkKAslLyMUfp-h%ka+cy(t`v^B- zV(%y)TUvHz%uflbs}g6^kj+Npk`$#AVB+bHNF=Ah6yW~i==L|&0{%}v?BQ)iiCZ3Y zYp<(g`G>*LA7X_wRcVpSZvG+(M{7Gohc7@6pExEoe#Iv$5%DER`v@cuR|P>o4C;BZ zoL_%i%&qHnZ7S>?++rch87uK19$jx{_q-v#L3AjE`@Ig6+*L0J$^QJyw;!?gw!Maw zT}KVa${)I8*YUtGLq(DsYP6iIJGaCe6E981Y!l?YLi4@TBaKd!!y-SO)_?u#>0wF$ z*>aj8g>554b#Uop`y#A}sQfpyI6+@{1>Rv3cbO#8f{R5m*6r+|C$exfj=yg{2Z(?C ze7F>jK=!kk<1TxEY=M`CSuc=pjg4)jyG&KxpJb@S)%cxCc&-q{}$c|MUOh~;^nnI6oKA==U4gKWfO5Ymp@kEW?#FT%nf z&Fml0{O(S`llUoy``#2OnEd}x_m^RD1x>&p3V|TOf&{mqNpN=v!95T(xZB|F4#9&v zB)Ge~J4|pN++}c^0q!L4_wIeZ{c-R9*!^~Qp7YF^KIcrI?yBmluIlP4eFaz7=FAKh z46~Qa7Jwzxb;ZfuV>>_KG1QpjU3&BlCnsn9{dTWUL^yi%&j7*m{o`uCYeFR^CV?jp zEDVZPrPOXpDejs5vjOPfD>{r_$o*vZ=H6U9> z;$aHO&prpKo#WCAa^lXnD7ANn$ZZ7p*gvtRvcKWS>&?>tOzThb%!NUh+zpiM&R4dV z!cmxUg8xlsc!sFS3;(>jd2;ek^%;IBB>(3a;22js)%lGbbmKK5WMb6n#J6#oXKgi$ z3W~X=EO2_&NCa8Zx0#xGah|s`)dp#02b&R_N>DhiS+mvZz?t^U}x|?1{E`~eLedz$&YXI@pE(a^1cRl+h z!n?~^G`cS+BKi&lN-s{#hj%$zpqOLlUHSd9eF{q0NUzyrZA($w6~P5>V|Oh)>@P}V zVAH@lB(rc~mH1h|w|Hrb%RlSwBotjx-GQC#`vy$< z@aI(udDMLZO=RV%8j&@X(NE)i{Z41qokLOm@tet3lcINjztj>lb!)&a zfl}sGznsUDq{4<_*0hI4KsIZ=0QxBsSTQUNzxUv{yZ)D*$i3I)#TW#VWk8Fs$=z&B z3f-~pS+iFf7LXAw&XxbiQ1Lwj{skCdmW_VxHHw% zi=?vvvTWz8N?gQFnL2gW&$@m?UE)Nq62BD=z`lMGUNWlO_}zx1_4KIPm}PZlSe720 zKz9*R#*r6FU;j*LFsH0*W5k=~DF?F)b?S2yzC}>&g(t~J>N`_G!3y2M_oMpWj%&(= z?0hQv6VM&=N&0d55+12PBv6C4ycD`;)^>|ZQ{%b?$lq<<%BEhw6^1ZM_o z{5-Qs4wPPeISN@5XMZlBrvy(IJaDfFFC!sD4tK`Tvlx}i4nvv_m>3w=nv_ZqF_)Tc z5WJaTb|-C`v?>2SXJ4*jgGNe`GK?-oi?2A54)WKV9(FfdRHN>(SfYK;Swu zgqNkb#Gi-9-<-y|PV75>d+Xb?%aE0=o+fOV1AZaiIb2}-Z(j;;Pr|{bpcVdJUHxA0 zDl0qQD%aN&G!3aBeMn(;w~_*K9+vY>Xzure9Q3T-Uxo;RZMaDMzh+4WB}?h6|1wAD z`G@~V4iS6udt``8%f0?;-EjBeJ8AJR1nhR+@lsXfpW7E|Xl=0jJg(+t0Pmv=<$}Jw0q+(_8vgx?*(4b>H0S4~@5(lRXXZ z;fnt>rcdyL$kD9`o})#-FW7%e?taKW=!zk{yt1%IAgS7IL?>d8WoI-r!;-idBh>sH zF4f|pSsaQC+u#7s2Vwdqor6QZennQalLo`tVFbG)9J~Q*pD*$^dy#39|D1naDI4(i zmy#P{0 z>3ReFm$==mimUo94Zyz=e5d!@w;BJip}Q3+4VH`l*_2f8@aA9WkiXda&*%SnS7Pc~ zF4NOP>smbj4zLGut>n379;p}8^u4K^WYa8~i95UX&OoO|CfMD$tCGe>_&!!vbcBqG zlJ&v39EB*{LXIe0KjyzMCkU$}zQ4J+;LRu_`1>?i*;;fpIVY#8+wQOV&qUzgL$B=Y zViS;jwb9N${UhIL*UV_ldg7!1U2LN0Z~u`Pe-ZKTlmCC=6{k!vI_aiki$lxmz5vO; zW-`GRmLYowUGg)6k2AI93Hg7)6K7ZU{|f--IWv|+hxIuNf;w*l^i#&74GG;n_1-T1 z{cFpI2K;`Thn83W<*a1rkm`hTOD`2U19Gk>Bp^_s6XdG@@7p^b%#>e5GfL*u(eek*T| z(8IgbeSyCdYxCanf^y0fgo4VeEZl!cj7$wFyJSVa#aFS(s!&i(cslHQ7~`O*D>!1b z5!=b#*y}z@8`o_Nil0G&rr*57J6i{CF4v_{Uu~%9JwetzJVrztlp-^oDiSv_ywa|E z6QDkq-({T*8&PAfvI4;44M8PJT~d03WUF45G_SApHg>t#R?joaq+PPX<5>dH0_Nw? zq2rGgu7<=gmHG)a`t0-mwePiDWd90pR?^8v9RbMP>yit48_FpN^sEH3lo`FV6XXaA zx=3+=C?Ndcb>vDN@V;0U-@|t^?+wz3Hxj8@!s9z0KYA+Hg}yGUbNX0n+kZ%*2w^5N z!8npB2Oh2pig%(VAfV}QXPLfM*y{H+jmj=sbq>I3?kWTp6nN(XUVk-urr20@dxQp0St=9GkO{U_%Sp;A--6V> zhmhQSPoOAl4Xo0vHF>9fOP<@_6KZEcTGGM%zRV8!)#Sd+x-5|`m%56Mo>W6yA~EHT zpqa9wQU(?@Jp{6-zc1mfL&#kgfdG-K89=9OoB%JS)f_Q=tg`Co=@iJKCgW61sutO2 zz&}~;eB#Jo(xe0AfBgMzfKD}RY+Leq+D(3|6>Rx`|h9_Nz3uGbMX!HfX6acFlou10< zE>_0zqr1-l+2meiXoJ4}MP1U8n|3fZ$lcFq`h;wEF5~*z9SH|JL)yP0IX4jCnu1Py z?7d(0&X-O1a4L@&t(d<$M3)wmir(pkJ;!G)j$*aU~$GNFI>3s9_%c`x>%?gVWsmZgTaB)xO4#6sMsEA(YPUE#6Qi zVvQH7cv-0rzX>!!JN?T50jsA$H;>Cc8&2+*uKUv=Ex+p(rHB2DXy{{+4{CGqkss3O zbSOt-OG>O-U5*5}bE0=*CJn?EkdqHFOsX_LYKvS{`!3P3DjeR8T1wW^fB{z3DWKAS~HXx5^h6jlSVf>P8{KcEu+9{%>>ESKm zTuPZ8xqK$sc!VxvHeW1PTSRfq>$fv4BGfF$a^+YCYSot$eq?t@GJl)wcx0C{XS}v{b1I(irsqt;=FyP>8We-tGPTg= zYdN||XLurD4Ix~kC$7THMnfW`qqP>^oVgchsr1@FU8gCV%%05G(&p1qi(DZR*I8g3 zjFG2bMOByJ<`B{9jS<^botroG2#L#_%4jYH%maizr;SCPCq74!@%Z2GaU0ip(?^;y zoAiOGN~7SmW@-sJas>$Fv^#Vt%dHwG(|ZOTkx#=w{lVpng~$EnW_Rr}^3RTBITK0+ zeeW(#9ycsOz!-zsDqGXfKLfn(%mukD>2+;ea%#u`sbR_IIRpeMGy6rWeli$N!dktz zy(*uqh`Tv{q|U-ekZ29W7c`}0PyWVz|HT-zfpyVgv~ybh;p;aEeV>_>DvOg zziKhr7KwbMw%eue2%OxXim#i@nJu3}j|8-$Ef7>1jb?Bx3g2<4)2)woe_fFQ4=Ajj zWL%*8rNZ;_vp)x*<}c*ruht!n=yN0hyN2nyru%0^5@)eRHb?8>&>2hbDh%dV-vJnk zdoRN&3xFt+y7B&97^{3U9;K#O#vC~Ov3J`>b9Au9vbT=jdSRJ<~kG#0@tc3M6e+q!j%mcz^3F2wbeQpT~)#^-;sKdXQ1Bt0(OY1BfNMb3qv5uB7+4V^=6YgRuXIEd_q<+Kl zYbI;|&S>89fu)3IL&|TXCC9b5^dp_y434n-lir|WTO7f~0b|UL6A9eiw5b*Z-4PD;=#Y~Y4EG*i$-=fnIxM07kfW}P!(xq17Je4G=FF6PMb?u^RR(#>ezGdIso$nZlL!A!VdLf7u<$bX>ESn< z)a*@emt}mB4xC8dZfsRtMp~^;6JvY^<}o4x9H^VYw{j?4ow4Ri)MfhP`2+-0tmlen zB;*Qx*%A}LDmB#w?k();06m`sHn$2>V@1>(^7k}m&>sw;blY}tn&yk#jEIk;)B5}ZYfht1}T@&|LOD;i{($wvLq5-omkZXnYe72LXU2r5lKE9vtxQO zt=dRv)HlzZB&wxlfF$6D(*K0r2+_;#7$-54TIwM)k01raG)FsO-Jfpn&|k zp4ZmyOl4o9KIH3)soaLG^?rVU6Rvc`TTm6AGKl!1ktf<0-v_)N6Tm9MYYt$KVk( z$Eoo|M`kUq6|JT`Bx;(VxFDn0H4d9j8VoYgRuNUeQ^eX$cD+(mk0HL}ukP2Wcof5V z%jHxoRp_|I48z;iyE2eq3jkNh$r3E_<2vT`!AzJfHXZUjaHHcjBwcU5#%f8}80T9u z!G`>S%uDtZ=bm>Dgu+|qH>#%T4ge&orwd2sb@x6`&dW$__VnIpn<%cQIG|=x*8{Mu z5;Zac<8uH+I`jCXB#HT7oK#u#EO+BU`s^-`ND=JZti;E#>K|m_fMC+ zT^1vQ&kkuINp+^rCUi`bB9GHcG7XO8+5-$8cN0L^DjapIHC8Kq81@!8k}NW!N_eXR z$n$k8DTh(B>gcKE^ChR|ThMHleM_Ly@K~arJ3;V?7|)J}5M|eq*uQ*c@e>EvSJJqh z^=*(mchBm&FwH9i$05^)KNG)%&1SgQbqjhBmu0$CJz;GlUFREHVR`C%B3Ic6up6pl ztP~25M)yJDmkW4Op!ZGfHJ$A(F|WAil2p~50}H>HC}=W=HTdP%k*}ity%IkzVmlTt`6eX z-8MaYIXma-_j;21Y+y8U)z^-X+^%JfNyW+=>}+&8%bdy&k&Ct5#@ewz970;Gq;m>= zI?t5kS5~NyUA*p3!Uc%9s(DJ*kevozpeZiq&XX|H!!Rn7rJmA%eF3y~0ZY|k{Ms~6 zk{Gg7d&B(u=*mejIN$k*ogh)Hl_ozWE|0K4QGJOiT}NUC-4A2#ZssA6uCnP`rug>{`SyqRc-8XqWufQG=BcifDM4mf(2SYI-qtvm!wV;<z!Tk1G_;!JKHs=qzJ~0I)Yn@SQVT?whpz%|&-WqKe=d9aTc2)Y5 zNA2j6gV|?_{qcOR=$7OPFAbm6uLd4*NXaA}Axe-2LcQ*Zvm}OLmmzlOkj50xu)nb3 zYzJ%fNi-j4zAN8m`#`8UX=Q%R34YdLG~ET6nhusZcaAcQ??wBSSHA& zCE;RBA%F_`w^km>F%4^z*e0PUs=RSepE;D zSlfd^>fyac`|#>S1|KU`Heyz*V~l3OKq6-#2Y<|PmD`D(f)GA!4s)@cO@9DXs%8QejZQ1G@X}Ai zD_8qdNEpsfeVGOqF+bhm~Hrms_JeWS$@}M%8p4|r1YSVS@C5$Q+vTe9Ca}S`|^M$ z4=~9$MvW)ss%o9*WL+`ZBVvl$2!^tTY#q%Qsf&bvM4`H|GA|u#3Qv5Q_ihPV{^P52 zx6PP)vJuhbe$f#PSXPz*3qKdFU3KH9$=ANHtAm#m;)tZ&*Wew|6xs#ov5mt#;rb$j zpYsT_OomFqllv@+MmM8LCx<-Ai)0Mxqa_Xt?3HC$p-W_45ihKESNNFdu|-dod)wvV z$H)urJ$VqrU$~iR_6mEJN~e22h{k*tx&{{)M7AQ=G0f_fJ{*cXa{*UL1N4oVIdVLr zULZa=K6EdM?r?&H*DG!hU5r?)-ak;90xE7er!w?+d;DzQpWfkmw1-j5wMg7cEx|?R z9>&^Vz4%BxcKGe=I@1e?JQBP#pQaE}bo4Nx7LB$@Je`@2kJt|B`n?FHAabdkCIvRB zjZAl~4tC6}ux&0VU9`Ci6iDdNxCeOwX?&mS7T9dvQwhjpHvXLWT?`>p&@h^^yU}L< zlByC)F3a)u$83T|KynU8X2U$UAvdOqwcrbN)D;ceZel1ei$1x+cD9noWlh)R!j853 zdDF|5C{Rb(^O8mI(w*nA!x3Xswfg=-;NkQrTk!mzA%BJYYB1-eN61gX0FJl1=aKgeZ6K(Z9Y!h1n z_`5G=0!y>=Xa^X8y)I__Lnys7Pby(gSqgc9qrHnM;&~fp0q@Rb-JsRetk3B{Uc0^) zf_BVxNHFu>T0BM(E2JZH-s<*`v9K83)SjY8DD^FOCNm{*Z?UwcX(NRi^$qOZ zN#U$~w?l|Q1LzH=1Pk}Y+;sDxY1ubc(Zi?&-k31MB#){*qR4zFj&9TS@TnfY3PWH#x3%c64T(?32NKkAv+X`mao-#b(LS}|9-|Gs4&fwxPvZ($;H1dh zl=vbmIO(#4M_N9}zt#<2NJYNlJ!r&U`WW&v8TeYA4;ihrns_V?(wi`DbCJ|h8pw|( zs7-XXM4mkIuFvgaIx57wRq);#<&f0>3p5favjw4dt~sWY$@@>-Wv&KxW)|{{?JKt8C&K8 z46dD>r61vF+Xf&#%;w(ViHbq|EcslliGX!{(w=%W?rO}1uf_pdsY<_B^3D3ZpvGcj z(f8k!O-0+BnvETM1k^*bpn9vzDE;&dcP9>(&S;?iqmZieRnXb>smM>^kMG?z-;oMx zB7i=t-MO)bkapQUG-azZ^SwF5M~qTL0sFZ6kbG(f7^6$Lgb& zpKt8C{=4NZK}(Z~HoKadF&549Zr)tL=ViN*Y>@!I$jcULwzFWdm&HKjt2RIRjU#RH zJv)S=bBmWMCWFi!_a%5hu=CN7e`nm{qjRqN^S&THXC{dxW`7WTKHlVRonIw=+XZp& zsM*zHk?mj?l(*^j?v-b}JJ=EF*#*;@q;^;(OB%L5B)}H)>_R7xnNzwJ7*w8pK@{19 z|5eX!)1EN(ew%;foVCasGm3Y{J39)w=lAnsxm9Ty6G}BU9!~Itpu9~M1XAG@snbo0 z{m~g+Yn&kD0Z&`^_W>(2b!u?%1}+wYXD#=}Jh!7_6+OcG&$oinI#y-YHRs*rcwc@R zD(h&6-Bhf=I6;HDVt+zbPAJ94lA6V)liXj`V=wuSJj`7XCbzns3sii12 ziFc1GbNeoX_{wR-4$(_mAn>E{M7@$$+(HZ}&+eBt%8AxFyc{OEHi)-}b|JOSA8XG{ zZ0Nm?lZ2q2>2WHzkDOD09d-G7^eS#=w&|EgjqM@5iC;q`#k$Ko(afWV-p~owbWhu? z9$_s_O{Tmhsjlku`R%y=f(5KXpGa5=h&Kaw`Dr!S>1@f^EBae?v~|VTg6df{R*mf2 zeY7W+r-P;ow=~mfz!ZuJb2saf#jhw(Ot_7Qlga1@&HX!MMde4VEjoXtW-C zjhS#8@6IUi0qCHVH$O5a)F+VU;I<~QRl3WlT^FF0z*A#+z_c3Ya>Rp$(btWXddBgg zCngzfosoiR<`o*CCdIz*N6e5=lqX_?K;N61tozCm#7aGd+s3|r^_{QV2cNBSc_bNP zk3$Vf$MRk$Zz?q@YfLq@WY#jGMeR8rwa1Qb!}ACs%>``Ob+0G z*}A^jA+_yZ8OmKwk_pO~w;rXJ**GCDr}_gp)5PrkM#v`w}vwb zMva6cbQx@{K=hs+_Sq|6p1z^yc&;5%R8_6_Vo>z<`IHE#$}(*Phcpv(fg5i(+}LC1F^I}M zXYCA*k@$$jpPD8AJLl}2@n*lF-Dx=&EBdd)L_6Uog>iLqVwPd**M5y$_4jU8HK`Xm+Cy#NfHHwy~!X@tYFP4cIS#s@3fWl=(N&H*QL!=omNv$~%D!gf z^ia>qrMSp36iW79fy@W2uxew;4qF!5HqTRos~4)I=a^9-)hV z9pyc?A#Vj4UXnogWYo-CYDW-ZXV$^gREF-#Jgd1Sfh{TCnyP4%)vy+4Y;+R-^WmDz zEnGEr!g8GdyWka+$r3*DMV zeeu-o_vtl(tuu^i5AKh>VeP;fk z=2~}g7Iv_vxn$Jxak`@@$94W}O38wd94z)A=)68z{05&*_Tx=sz-DBup^E1LD@Jf8 zsACoXvq>}0&Z+52rzbxhnVhM62sXKiv6Kup*YA{g;`6o8R;T`=1d#1JeQ&N<)5W&!{A@(y>+83@1xywW zGK6C)BSGjy`hD!$S}w4ZF5LGGj*^A?$X+aJnlE4pGp}|my<4v$N9u^U_Yq)TjvsBk zy>Oa3pxjt@f~~FUO8{L!S zBa%ooKVOpl?z8ZidDZWkSO|_oe#nyJ)SrX??O?S@*nFF_wy79zCR-ZZBP4whIEtem zMZG;rs3=HkFsGrShQ+xcs`NnWj_I@RVi#98QKri)+L*OtGf_yBNAcUW+RAaUzK(b- zPTr(A8keguwZLomV}m_iFs{`iD^=e`wQIFdoB!_`wsk_j;~krBB*h|RqybgcmfsIt z(`ZL9&u5!HD)Tgs-vVo|xNALU1o87F9JF#-xVuYPHpciEKGq7#9D-0^?CQnf)XBWu z_P4oTpI9-zIw4`SI1SJ6nkF_kA zA#`!SeCQP-aaf@~n59lq9WvvdB@U)>&iht$uI|YS{i8(+;!Lp&!6YulOvtFqsYOCQ z^^7%EC7?k65{}}wHL2B8pN2t$OteE`<$zorf=#e%;xoxE3@y&oH0PRBG$z8w4;S$o z$$mk74w-USKPwo`wFGgMMKw_P4cb@sGYw6mM?=7*7d+?RnVaZM15|-eVd0_Pju& zkna?i3U}DD>aa1EUk-RM`70TWWA)E;9c5`bqV8+h?w#rTg)3b%|1RKHbX{i-d{?zY zyKmwxmb;!s*%x75Y3Os;q;-`5Jl`BjwZ$=%hLI7 z2*%#o2S zNypOyzdP?>IBc@U`hew32vmQrH-x)*A(ZCSq=z{C5P9Zz5y)9>NDWa#twrb%PwomN zsPG((sCsQ~HRSeips`%ivd7XQn6=$=lQFD+?$*97LGbOB{4MZ3(Fxxl-VeFOA54H7 ztnb5^iFXb%ZAttsUdvVapuIdpNi-i?tsfRxUP48>EU?G4#X9X@#G=}Fx>bSlHhZ8j zq>@e(wz)WzytyRAw#Hf?#L16YOAq4dD;B7oV?tOb+k+lq3OA&xe_D$pF4`K|+3(bJ z>~r1HX_GIK@79K6^*qq@>7}mZflr9y_>4w|J6%idWlavZ?ZLN$rSjO~y))z6d_e}>ZbQ=;B zAXu;tdZV+(5c;ke{Q-8^S(5;PSZ~? zu`s6>2z&L3r8Ti2ER5q@#=|B-m!y|XROf{CQZmEt>YSW3@>|B1sJXd}`?;#l;R>(h znqQ=@ZXym4U#nK@Zp1|H`ETQ{^WHCI;!UcoNfmpw1bXhoPr?IQ_u6_S$%-W=Xuy`u zSNvU`B3+NY695aV+{O=bFEKVJ#Hb%F+XAeCOuHMOeJD+UKI>bzPYQ|hCkAVSqFd3x zUFaZ+=()3=2DK8H3mQRvhm%;bRh!hc_afws+~i}3Tw&VhTyA47SQllUsV%Y7E!dGR z@!H!*Xy^>o5p25uO&jq+*K08$Qdz?-itEj!y=ZMz#1^5?3dQy_nKDiZPHFn&cHkAu z_B702v}ozWF7#NxKO4L@LX8EIfv5(Hw?;iaxZp|o|B7;|YDu<%<-T#T1{-UXrqe1I zi{tALjOFl*-+@8>EPm}sMl$Sb(c=}eIKkUHbYX|f=hpKk2spG2j9&9s9=E+85U<=p z*7`DA5RuK!XsjtRCeyQ)1&4_%maRV4(SejLsuk zgw{pwLIT6{`!3D4v@p+C5wiPV*|2dk++J7tDntqRUczN?3--I>B+k}XTMY8q1TRNc z?bb>Oj{%Xfgw^U(%k({ImnejW^SbV_6GQ`5WiS*lOqIX{AC|_ss{CjV1ErmObzCc5_5GWk*oP^*`MTZTSvy8VrRhiEf)!rTRI1rt*fwr9=0cIYO{XI~ z_yf}PgG-IK%Ar9j=`1aw1cF}V4qv3Xoo>~PptEG^mlH@+$QHXeyyZ8PJ1cBr_d`%W9+>yQ_du7AAl9YNPtgShXt zv2UFrvNm@ZjqHB)R+@&xO%fVKmm!5er2@>u=~3!7VT{wh2V=qMbSsFbhA!Rx`S`^@ zmjapyS)thMyd^A==TeAFFaGfb@XWd3AFv2z@VI#Q1O@tJ3A(Sl$`Z5eL3M&3XAbT@ zs=uuKWq1|xD>vEoJH{2jY+Q$G}Ct-AWW%LqRLXi9EXfa+N;J3|Sq= z^>0@l$LJMDaykI65zhP$(9rG!i)52&xu+IP%KGF*0d z;Qqt;-JK)I`X!T~fi&$oWJuF`_eV)K7Bfl`a38hrCo8(gHp#lY$AewXv%-K zxEt!`8|v#hw&zg)#(*cQwIl6v0lU^#rnG4;k}TnR)MN(Dudl|<}o>bgTr1(l7b$-*SPV33JdZ8r1juM+$GpGW?FmvqCb{`>sDLnVOYKIy-O z`21Jq=deHhxBPnYZ(IIbev{erxBCBayyN}bk^h!I*&}uRZ-sc(4Rl}H|LtZ;_kdX& z9IR+b_Xt5IA|_5dWv7vu)+)`X5i>PC1f;x&-6Ko*SGl6s(^JsSl}CE|-dn^TKnk@? z{3N>};q*dN&hxWq-`_W8HD(@Z!QNHW@%uM+Y3V4s53S5}IZB{^X(_uoMI5YV%ZY!@ ze%nnUORxo2nfTH9_$Mplh-KWSw6%R&s@%l$l{FP9HcSY8W4#ky!% z&$26Fqn8o|R<-m_cXPB@EHbIjbxmG8tZS3DMGEH`iu7h}h%ju{E!TWm?aSf$3rYSP zm6HDY9&pVoy?>Zq;^I%wn%fqbtNSmk;%WX5z|L8H6vMU7(uswd`I~p(m%+!zsRl2^ zHpPEHKD;*ki>CZK72EtAA%wggv$mfJv^+guU*PhJput}P2CUWo>kAO-W>;ixV1(3T zH@q_p_awITO*iphOQyA0xL01oKqEuHj@V&Mk?XTg^YAv%BGaTaIAXbllPfU}#jLF} zfra$Ytnbl~SR*ANX3~`_Onz#;CAl(pS4TB|1O3GHADZ)LLjR#}QqVBFWQ4S)6hE00 zU(7fDqDSatu{CsvPTl^jw|1%W>%Zp9@R$6f59h%Mn#hk#Otf&LqYNWE6g!)sHFWNj zI1kz5kD*=yhbL#|7J^Fc`RRqpA+x5K=s6Qu&KJXl!>+-6#ohc)K?f_1tPdd1X6h8YaN&gO4$5=&?$y zX+ajs9~%@ZI2Q`DHM?k6l^`8%Q<#Wpbdv&h!f6JrSLp_J`}mDuG9!S|n=R9E{g%MN z>rG=PF}la5DbQSB=M?FbGf{~*Naz)s6 z0{`P{$Bs&}x_Qx(SwznnQ$6^=+yuu+qF`LRHFHoNZijGbPGaa*2wgFlCZfy&peHS6 ziH<_Fa)E+%R=KfywU>bEZ~rp}LSdZmz{Nlk&&t=`$fUg_#M^ssBF(rqTziH8l{jVw zCdn$=kO(v0{4n49(^#8!`9c0{T@Ch!IbMuXN@{B2C zvBoa(;so!(B7Qm@$!bgNWVs_Yj*%w9TJz8R7losZxU0OA!y^+2NOZ6;*QAtKYjIk- zBbDhpfH(r0 z-&}!a^8lh;6Fsys*;kTob_Ld_p1f|aF-o@mUiwN5A0hP8K>aV)GKs7d)bHfk{?vqG zcx}xB^~ZZvyG^*ie0sB~$#cAL>d%L!)ygX43RYj{v7yP<8d#l;dvaa{1M8nSM~0u@ z7wh!brqgUL+VZam9LNI=MXzwC;~ZSwU=7L(uHAK^Nj1_R`pykzF%>;_j0iGxZFH;c zq#ihGlvT_~>-@)tr@@K;8J;?Z(uASGEsS{(x2XoFR81`e+Bo_q5>pK~k&93#%d~{| zaI)VA5B+|nbZ)**Oho+2SitX5?c zCFp5lF67{LO#Ji@mA`TsN4|xi-`=vPTkWh$L?cU1sYvoxCosh}g~yi^3-boH25&)y zJ$caC;=^)-o=E#6hE3SRqT_{bxkpME6KFnEe#p!J;GWCT$L8vGCwj_`&!hJC^{3Iu zRPO`qR(?Cq(d!e$GfzW*k1yy@zTF@s7%ylqERi42 z%FZX_J{z8A?x;7!F>-J~GZn8gt(3iTf3X%l(^ZjRN9We`3F3nL_xM(uHmohI0atrsf-*LzB#I+i>%a!>4Ves zcjq+J)LNGif#w&DETwv27@lceu%JupKDFQ>1Xq4RNoh$rQJhLvSU`sS2V9MKrnGHD z$=luPuM98RG6D!Pkf*UP2DOulIaDeDys!B>{bKslgHfg2^qX4x9dO@w?ug7z`DL z9f0OWOHEynUE|6NY#wyj!^rr5(2-N@dWa9q)K8G@LIdG?`#Oa;uhL7-yB%U&gD%=Mu5<9 zOmKHzgj!>@mFSY;5XO)GgrTZ!ne`mp(;{h_OZP4WL{a;V)XkokK=kObl=<*{Y68?Ba){2-DS zlM-g>3dJ^-5=Sfue%1iPU5!nfO#i9#`=N6hP?C)*MMye|%`*0rk}~B-Uq9hC--onK z`Yg&Ux&hl;EX8R}=lkMy-b3fi)lLUTi5n@tJ6yIPCt-NePYMybQD(;Z3^8oW+W!;I z)guPC5tp8>Z(`$0M!&9n?U`gcEmxAC){LWy&oSUkF;i4vi*rv`bq?%2BOfJ}m65EC zQX*TP!3%1;{i%Te4G%4ikd#^~Q8>o+zn7iKREdux-8TNpUlf5mu~!5x!c7#^blUe^ zzKT{Y*bZJ&rc2@Iq|&cbWu@YX2c`zV$%)CS?GJ*58FgLJ z0q1?LAm2AC7>v5uf9B>ChFVYMvEOHpf7Q#Rp`=t>mmOQgZ)~b65Fo$_AC$pcz{Y}m z#g2hyNxb~!u8`~G2fi{}S8BlwAOVP3=eDBAPhW^aEyMoq%EI~+JseJhP5H3fbf*u8 zbyG+`hZ-l7w)FPz*FO?m7{3b+?p2-wbOc_<5r(T0ag`i!niCe4y3j^8xmNqENP5z} zPcF@GsgK_p7ffcsIygA`?eoO#C>oU;kF1_ zU-JFyzlr!?ZHBRVH(5#Wlw_hPVL~xZ5eQhWnVLF@TKUWNXHoj{x|jr^58lEr_r@>@ zY&d+Z=Z3qxd-(19%6x^;c#giGY%EL-au)20yrcQ6b8e#L@Ktwuy(QJWBO~_2|7bds#D2asKvv{EiAnWc+LY zUVT`vp%VYQ%C3t*=bu{E_p`I}DKXK+tPKyw&ks|L>U918Qlel|Qo;2dR;`UT7?45* zQ>avEX^B2D$eFjH|9kEq-&cJLyV9`;Q+)pl1G1oRLUR9p{Vo45QC$C5LGy3-V8{Or zs`>x_9t!E^b?vPII}2>SM{D0Wp;=&+lcco~3MkpNx8^ zgd2r!(K=mMR$4X%s`hYmUbHLAGi4CH;%Snv3bnh=wa;k2oL;@et>pNreELsi(^{k0 zf2|dtSm8%nY0LFG(&eh!(>2;ppS*8KC^kwvSuQI5+9H3S8`NE3c0!(c98Niy4Ms{C zJf?D9=&{a3?qiKJ?vK_x;>UoxJ-P1)93I9*Mmv^*R!sjt?7atAQ(Lz-ifyAJ;NFOc zRHaK(dPhYBq^XEVjY^61-b<{orAmO%0w`6aNtc$WC=dccYUrUR)C33+LJ4;T_IKL< zoqNtb=R5!X@AKUC_&mh5=2~mcG3Olf9q$-(tXl6@HJIE2t z@2}!TNRwm9(ob&abCqCepn=(&n~+6GiMl2A-JrF*%p+Uhkd1GOq%|UbikD4r)*b3adcCX zxV93tMMas6+tgE z#;)O8pL_fX3Y)k+PHS?qA#?0waEjVPwFQ6TAGF=tDXX&$m3OBlLnhYN#BN6p>z0#0 zU%6Q^!Z(wg!Q8k3+JC_mb$fnm-Zf+_$Z-_1*=| zUAym>!l*CO16nBrkLd>5D>T|~?UkiQN4k63j5uz~1fz$avnD$aBsRkLzieE&Q!%!? zG{Cw_)GT>AMA=Ux!=)?^+CE=wcfg&tAH=3tBZ#`VqVXMe+N6+aM9BzO z1s{KZhfr7j>nN5tMJB3&k=azM^$v8M1WVVK-KS2BWz#%ad+zn6VQgfEmvYrimgZJ` zfg!jEM&uJ5&*)}nSZNSxf7)8QP?$l=IsI|3JRiXu8NkLDI{u<|C0uI_qdf+ zKgt;7%i-^fS1OYXTB|ob?9dal@1n2ChbT-Jemy~31sAZ@Aa>OsJhMS;;w41)rHeW?RUQ2;7qnb98~~3cQdQ$ zeCArS)AF}2O3h@~*}6PxNGi;6Vaph~W&1gc7HYI9aWLV1YP=43M+}3q%0Mx=>f@Ue z8}|meZdS!`x$j*qd#1Kz)2f>`41NBHDo$PJ;UJUULo$uS7F?~!Sy*y+S;%w38^)Kt z34d(!s@QpKog8I2nMJc`Y#qLOQQ&s0)w91C$-lkk^mtz^X|21g%EY@fs!okL{zTNH z3qu&ZwY`Lkxi0#{ej4Gf*VTxabBg3*#m0!T5W*`p@JjF~EkWZYUcus} z`y^V2&&K%6`xuzg-NbBBZii=EgTZl9R(C9Ym?-L3R|1%+8LS>4|KDBFX^q|{hl19b z^#wRdLH3k)Z!@b$L%Rf{mu*LEkrRuxkaR@LbMBHYm zQSEKZ%kRsGDmE4Mug4n@-?~K3f3DK_8L-p5)ONo60Zh;$7`TP@kT$pHPH4)3w0T>~ zL~q1iB`9}keAXZtd>WyM)5x$g*^nFRL%yJC98#e}Xn*CVMb24Ai}tBL@YZGl0@I${ zX`idwRlxzeG5chMvER(QH%b!~!?(>ulMG-pgOO%-6mcB_Og2BwO4}KR5^#Bkt-2C$ zK;K^Bz5%ajf4YfV4YMIPKM(lyGJL?)iWb2~Xf6vB?kv<=z7j~=rzmS|cSG>DeEZIb zM*qkM)?8*t@*SJT`V?BH|H{1aXzRcWiMQ=@-P$RBJ=NJ{VSMnQe51gN8uwlv*HVfSV=s5aSkq3!a4+Oi;XS#|TO zcbk?>cNhD0enTG5vs#5{pmlmk(>bIa0S$SZn~Sq$(+T@qt#C`9KX&dPHVK?K0khQb zymS62+Mz(VfKAp(6(C|gErHIU#f{Mt45o-$k^q59zzxHv^D|<*;l<%mHQp@7;E=s{VEHKfxgXRr3EHQ*fj& z9|a2Lrp}T0?4CWdt3d;FIJgiBJp{oy)pG=kwyBsEqgy z8!A3~dwWRs>K!*A*v{OG?aT)2)u47`QM&+&U(j#DVL;A%rN)>DV%WRVZ=AdvANQ`I zGMOn}UE5=J#@g|Ron9&WU!m3uuFL7EBnT@v8(-BS#hqMzkY=DkPx?{Jw#T9!(cpLg80Y(tJ~<7f3uWy-4I zx75D(O&AR~DD;?mU5dKmwKPB2QTjPkTf9i@GWwB*;W>WI9|P4~gBkGF@Ai^ET7u^1 z2EW2)PDm65-(L@g*HBk4{niqdf*rWyDAzieS>oe1u3NFijpse>^y&|M$)j6_+%I)s zW=|*)v|%3*N7n2mB}(*vpW%;J^Wt6lI~2KWX>cQ$X?gD&UfM=G@N(CW01y5L_K`0z z@-BmH1!1(O=kt#WSN?wgURxZ?FGc8MH%q43@^@B(T8Z5P4bCC&UX%-xhb=^7W-cs} z92Q$zQ%+)R^?avN_O5yUFbW?+`0MdTe^^yf zC46dV&&S`d{DW*KKxt!sa8@5s+V>}A=-#%TRPi%(*LbqM&%RW>9}Anf^ZOYTQ)76} z(gIOr+(SyzTjuz6J+#su>w1r3<8vsK0h;$fgtbOGR<@pSWAjWL+rwKa@D4V^ytBTWfe9wrYf2j?&ZX=H5FF3^o$c8o6Fx-k1Es-ctd%o85`~zZR zX+#q>y8hv;^3BUhm%Kk>rZceLZnFJke~>5?`03rZahuyFG4O_u@dgZc4=8QfPYvOy zCBYwPQEBN9N=JW2sECZ{P)hZ#SadykvK-$GE?~GU)_w&orkbJ^VXGr14b85qn7R&m zkeHAX^qg7MPxhgFa(2!JBUM15i+Rb8@a&o)q4s{(QPBdy3)3{ou_f0}k1^jW{z&z@ z(w=Z#xp0Yrb!oKK;}JE$^-wnz96Qj#86R%8_-nM6`SI?`{FzW_@wI2b;*aZ_f9B^z zN6&JO(XJxLSAT3i(YVuXck;La^9DfIG$Z0q<^TD|jMfx;Aitrnt-LxHc6H*BBr`K} zM%zi&3gcvP1)gE&l!z&bgiAkOip2Uh))=RnD~VoCdL56_`<`ROt)4(u z$<({8Bk~rO2-R?E3v8@E7P)v)3^#_!VP!GF{?gU5K2a$8+O|3Rwc|y7;{iD88jvL5 zgL_K+yI0>xJ~vw;B2Yr&qUyz-jm6OhUtUdipN*|J=X2Tg)>V1bH$J9=74@Iol6Q~1 zO?wFIlobBsZM^86KjOGm3z?dq_fU(Tm8iHJ#qsmQ{=6Q>XT7L;LDc#>dJSOvlo}LV zALG6`pca0@K~}BAOrE8|^|NCQ7UtE(#II7&>MF^sV2`S$Z)3Mv4ODj%BMThURokg2 zj=YWt4gF4#H<^4f&0R#vFH+UTR)+X0?=_7r4VK3;HaI^DG2$|nMP(S@^|uN;kZ7~Om%!gc9R zY~kpW--S!jDEELRXAw-{9Ws$f1+&{8&yx+yI|(sd~aCm1}Ji#}m1^H&m6sWX1Cvc6LW79Wpc-HHV7t|3nfu z$idfmY0(~}p)JgLNmHdQK;!0>^Dl16GXwb?aOJU^qgJ1K?ya#Y|6yt>o03nxi)H=n zZ7E&XBS?+6soBJfT0RQq-%@via4Y+JS7pE0?#po*`DNr2CXYgeF3l~8JgkgPJ1%>& zqC{|QxSi(hoSf@_N{wQ;(VE|yxE!tT>OH1>0wCl(Dv70k@8Ld2ZtXVeIPP+e-bI>1un zKBC(t_~U+(T=GMV+7|QC{7us1-dNA?kHXuj=x2q}Y5AI&RnOdWU+2%F-{&NhEC#1U z=86`%+WvfbT2u6JkiTR*jF1Xl8d^Fx@ALGwtBy{ktQ$S5!9+lIODB)M#jHOy@cc z(SHlSN^40*_^8Ij#2lJra*_v2I8bE%0%ARH#L?At7OF3mxqP2KTpj8;+Zpn4)s%PCU$#gCD&lORb zd-j1eS{E}KLhh`zP6J-|&vkig8-d88c7W?vTNE*Vf&curfA$q{E(Lrb{kY{7O;$XMdy?ak<^y!l^R_rg! zs@25Y{0?NFf23vu<0l5(d8R68BagvlY`9q*M73ZDj}Qrc6ZM;9DpxmdKz7qXDM@I~4kl@h^Po72aZQ_Be?Y96le>Egr6P_(5-CELst#NN)+`!@#tl=}e## z#jYyAg#J=+SKX$6O&|Goua@a$j;1v5DidkmxQn~IUMfC-_1-hI^ym_CvWsi?&i4LL z11X@6xQ*E-$<|Wx$J1wp6<@qM^*HPahr;^tHaCT{M};p{2_{OM`tbS>-J3^`|H1h5 zt6afu*zTDjJMsu~`scvcykCV|YV6F%7Ai`Io6Kr4)V)h}Pf*Y|vqb{xS^H;Xz40A{ z=&k831U`iExolZU3HA48(%YkDD@+U?VXES=px+n{j*0bC$irU@>>|5I4}U&@1H}%G zyPn^r4}V?%`Tugk2VE0sGexx`vp%c`)dVw6axgq!7$PsvFzu%qWK2*CJE=dSq|qi2 z(oU)Yv>Al53|m{10C_%v*?8zlS?sOvu1nMWO7|DkIfJ=d=>m8zo99{22>dniYc)hA z3qyhJ#NL+BGF)Pay+k0k2s*%qEQVifpLlWEIE+kK!;2`|uYZjlrNw2THp)UB6?W%w zc&)Al66pgM7S1K5O8Q-PNSXx9_J_8Zz8JUyhNbzla@N2xefolB-PpNfByR*E5R`@d%X3+3T~hU?Grf z{IzLPdiQh7gY_~u(GVyF8KQR)Gx39d=Ssj?`b%Lgh+M)TkQWQGP$oXSwq6^mfTYgU zRQWO6jqj$;-winelvUC>35+nfh||1vh@(_PRbV|M{q*xzIBx4eW(*7;m4L21INnc5 zY@A{ET37Hy&&Hd~N>1A$QV^n9b!6>c<=^Qg;P*=Z-d%L5(~m=G9Q?du^bacN3?~8= zo_KJEg|~gOxw%*UHwKT)g@pxO2!!Gj2V4^Ix!vq;4ik% zCF?Uxc$&fNHl(b@6%)gpnv$Yo`|22j2Tds?KEaN$O~Z<-i+ z%dm?S9L%2jB@AV}eu5#tcREnYYo;wAGF$iFxx)Tfn_5rYa=BydjtW7afuaA`;NUxp z<#J7b)f|0wtdn+H`d;)^hU@Hb(J76s)%i0(j}fBs^ILSzAVp3$0y^L;bvarR=$eD$ z>$KMY6WLBQ%K1JE9vEv9Z=UrrKA60k8uZCa?&({3yvch3)#t;y_9*otdh**bPGvC5 zNqSG}6s zFc0Sem(hd|-Q@-bLd+#&snyT4VHl_235sR=tDzNl5IS5?yEWU&w|~m#T%3=UZJmGb z_NX^$lAAN#AT6k3tHLxD7X}R)`IUwt6011$g0_3GGV!GGa*^N&j@%p*Dt+#zupEdk z#zIT${(y-zA8m9iv%$MHzx#}Yb*j+v2KN_m=s=mP!OlY7{1vE$CFFeRoT0agWI}|W zT{FI+qHb})>X%|t6Bh|X^m3E>;&R(UHdA0@Q%+EC&!c9vTp`%vyu*+Xx;MbiOu@}6 zeM8c?O{fwgxR+@+vOPD+eZjT!dy;t1*wrL~;99%hG5@?ga-_r;>Av&U=3f?GcDUS$ zwD7iwO5iqY@eaVf=nIAsriNU_@}YQ`4xd|8czEA^<0jfi&}pD8Uu|yzgL-1r6efn2 zne7X>%|gWBd9)mtQj<%ENtls#`df2t@Ghq<3O=d|wGqd5b2e*tG9N z97~0(FJ2Ov78y~{yYFo14{;BQ%B^i^n+$cX*q^v{z6!??@9gNdsM{Lqow@WSmU(z| zC>fCngV)<;Ifu&F3NTi9_Y$M!yL7XBGwFIYKL%L4zbb#~n2Q}*i{WV{o;RGo@CX`Z z)^W!hx*Fl40-Y4th#n=s3h^E}Rwlj3?3f{%a4uD?Q8rzX)IpmpH^{%F-DF?_Qr8Q1 z=*WuC@E=RHjO}P|3?$2dZ|ht%aqtOHN=Oi>TU5oh)$eRt3?yJy4HETiSHA{lxQyiU zsW)cJyGo)~e%xxGmf{Y*(&`)3{z0;Cmdi4BtSGO}*#QQskPBrlXae*Q14Ed>!3g?z zxl`6`26`f+u>WH3=rA;Y_-&c4B>M7Llyq0*3&wtQwyv$WWFe^wFVE%uK3ES18cv5j zm21G3bkc0ot2@42Em8%8yD+XpHN*iIT+`)bkj&1Ul!b%+Y#!6vMAVb0@Er72O_wR1 zLB9p1RsIJo^%B&mscW2iNFaKR&P3Bdd54Jtg|eM zqw!4wm9oet_3F3r(fz|RmCNz@qCG+FBbjrLogLdA2p7cKe1MxMm-aTz)eb;6F_

M@7T?_kLWn}s@m1R{;oSlp< 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 literal 0 HcmV?d00001 diff --git a/docs/img/new_ui/dev/datasource/dolphindb-zh.png b/docs/img/new_ui/dev/datasource/dolphindb-zh.png new file mode 100644 index 0000000000000000000000000000000000000000..83b344845336c5cb6a7540620b41f5d2a90f56ec GIT binary patch literal 94852 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 z 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 V9.1.6 2.2.220 8.0.33 + 3.00.0.1 12.0.4-0 21.5.0.0 8.1.2.79 @@ -360,6 +361,11 @@ jackson-core ${jackson.version} + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + @@ -405,6 +411,12 @@ ${dameng-jdbc.version} + + com.dolphindb + jdbc + ${dolphindb-jdbc.version} + + com.vertica.jdbc vertica-jdbc diff --git a/dolphinscheduler-common/pom.xml b/dolphinscheduler-common/pom.xml index 6c83c580ae25..cb4a2aea96e5 100644 --- a/dolphinscheduler-common/pom.xml +++ b/dolphinscheduler-common/pom.xml @@ -74,6 +74,12 @@ com.fasterxml.jackson.core jackson-databind + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + org.apache.commons commons-collections4 diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java index 11347942bde4..138ed3dac6bf 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java @@ -43,6 +43,7 @@ public class DataSourceConstants { public static final String NET_SNOWFLAKE_JDBC_DRIVER = "net.snowflake.client.jdbc.SnowflakeDriver"; public static final String COM_VERTICA_JDBC_DRIVER = "com.vertica.jdbc.Driver"; public static final String COM_HANA_DB_JDBC_DRIVER = "com.sap.db.jdbc.Driver"; + public static final String COM_DOLPHINDB_JDBC_DRIVER = "com.dolphindb.jdbc.Driver"; /** * validation Query @@ -66,6 +67,7 @@ public class DataSourceConstants { public static final String VERTICA_VALIDATION_QUERY = "select 1"; public static final String HANA_VALIDATION_QUERY = "select 1 from DUMMY"; + public static final String DOLPHINDB_VALIDATION_QUERY = "select 1"; /** * jdbc url @@ -91,6 +93,7 @@ public class DataSourceConstants { public static final String JDBC_SNOWFLAKE = "jdbc:snowflake://"; public static final String JDBC_VERTICA = "jdbc:vertica://"; public static final String JDBC_HANA = "jdbc:sap://"; + public static final String JDBC_DOLPHINDB = "jdbc:dolphindb://"; /** * database type diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java index bfc3af2c58ef..2191783b0cb8 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/JSONUtils.java @@ -60,6 +60,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.TextNode; import com.fasterxml.jackson.databind.type.CollectionType; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.base.Strings; /** @@ -81,6 +82,7 @@ public final class JSONUtils { .addModule(new SimpleModule() .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()) .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer())) + .addModule(new JavaTimeModule()) .defaultTimeZone(TimeZone.getDefault()) .defaultDateFormat(new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS)) .build(); diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml index effe3c9abb05..eed1a8ed45f8 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml @@ -158,5 +158,10 @@ dolphinscheduler-datasource-hana ${project.version} + + org.apache.dolphinscheduler + dolphinscheduler-datasource-dolphindb + ${project.version} + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/pom.xml new file mode 100644 index 000000000000..063e8166f8f5 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/pom.xml @@ -0,0 +1,51 @@ + + + + 4.0.0 + + org.apache.dolphinscheduler + dolphinscheduler-datasource-plugin + dev-SNAPSHOT + + + dolphinscheduler-datasource-dolphindb + jar + ${project.artifactId} + + + + org.apache.dolphinscheduler + dolphinscheduler-spi + provided + + + + org.apache.dolphinscheduler + dolphinscheduler-datasource-api + ${project.version} + + + + com.dolphindb + jdbc + + + + + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBAdHocDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBAdHocDataSourceClient.java new file mode 100644 index 000000000000..c3b57936f6d8 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBAdHocDataSourceClient.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.plugin.datasource.api.client.BaseAdHocDataSourceClient; +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class DolphinDBAdHocDataSourceClient extends BaseAdHocDataSourceClient { + + public DolphinDBAdHocDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + super(baseConnectionParam, dbType); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannel.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannel.java new file mode 100644 index 000000000000..900ffdbc459a --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannel.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.spi.datasource.AdHocDataSourceClient; +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; +import org.apache.dolphinscheduler.spi.datasource.PooledDataSourceClient; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class DolphinDBDataSourceChannel implements DataSourceChannel { + + @Override + public AdHocDataSourceClient createAdHocDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + return new DolphinDBAdHocDataSourceClient(baseConnectionParam, dbType); + } + + @Override + public PooledDataSourceClient createPooledDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + return new DolphinDBPooledDataSourceClient(baseConnectionParam, dbType); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactory.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactory.java new file mode 100644 index 000000000000..8c020890f7bb --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactory.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannelFactory; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import com.google.auto.service.AutoService; + +@AutoService(DataSourceChannelFactory.class) +public class DolphinDBDataSourceChannelFactory implements DataSourceChannelFactory { + + @Override + public String getName() { + return DbType.DOLPHINDB.getName(); + } + + @Override + public DataSourceChannel create() { + return new DolphinDBDataSourceChannel(); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBPooledDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBPooledDataSourceClient.java new file mode 100644 index 000000000000..10d0002972d0 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBPooledDataSourceClient.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.plugin.datasource.api.client.BasePooledDataSourceClient; +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class DolphinDBPooledDataSourceClient extends BasePooledDataSourceClient { + + public DolphinDBPooledDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + super(baseConnectionParam, dbType); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBConnectionParam.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBConnectionParam.java new file mode 100644 index 000000000000..888f62e57aeb --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBConnectionParam.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.param; + +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; + +public class DolphinDBConnectionParam extends BaseConnectionParam { + + @Override + public String toString() { + return "DolphinDBConnectionParam{" + + "user='" + user + '\'' + + ", password='" + password + '\'' + + ", address='" + address + '\'' + + ", jdbcUrl='" + jdbcUrl + '\'' + + ", driverLocation='" + driverLocation + '\'' + + ", driverClassName='" + driverClassName + '\'' + + ", validationQuery='" + validationQuery + '\'' + + ", other='" + other + '\'' + + '}'; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceParamDTO.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceParamDTO.java new file mode 100644 index 000000000000..359e23fc2525 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceParamDTO.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.param; + +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class DolphinDBDataSourceParamDTO extends BaseDataSourceParamDTO { + + @Override + public String toString() { + return "DolphinDBDataSourceParamDTO{" + + "name='" + name + '\'' + + ", note='" + note + '\'' + + ", host='" + host + '\'' + + ", port=" + port + + ", userName='" + userName + '\'' + + ", password='" + password + '\'' + + ", other='" + other + '\'' + + '}'; + } + + @Override + public DbType getType() { + return DbType.DOLPHINDB; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java new file mode 100644 index 000000000000..ba6582f5c84e --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/main/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessor.java @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.param; + +import org.apache.dolphinscheduler.common.constants.Constants; +import org.apache.dolphinscheduler.common.constants.DataSourceConstants; +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.spi.datasource.ConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.apache.commons.collections4.MapUtils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.google.auto.service.AutoService; + +@AutoService(DataSourceProcessor.class) +public class DolphinDBDataSourceProcessor extends AbstractDataSourceProcessor { + + @Override + public void checkDatasourceParam(BaseDataSourceParamDTO baseDataSourceParamDTO) { + if (!baseDataSourceParamDTO.getType().equals(DbType.REDSHIFT)) { + // due to redshift use not regular hosts + checkHost(baseDataSourceParamDTO.getHost()); + } + checkOther(baseDataSourceParamDTO.getOther()); + } + + @Override + public BaseDataSourceParamDTO castDatasourceParamDTO(String paramJson) { + return JSONUtils.parseObject(paramJson, DolphinDBDataSourceParamDTO.class); + } + + @Override + public BaseDataSourceParamDTO createDatasourceParamDTO(String connectionJson) { + DolphinDBConnectionParam connectionParams = (DolphinDBConnectionParam) createConnectionParams(connectionJson); + DolphinDBDataSourceParamDTO dataSourceParamDTO = new DolphinDBDataSourceParamDTO(); + + dataSourceParamDTO.setUserName(connectionParams.getUser()); + dataSourceParamDTO.setDatabase(connectionParams.getDatabase()); + dataSourceParamDTO.setOther(connectionParams.getOther()); + + String[] hostSeperator = connectionParams.getAddress().split(Constants.DOUBLE_SLASH); + String[] hostPortArray = hostSeperator[hostSeperator.length - 1].split(Constants.COMMA); + dataSourceParamDTO.setPort(Integer.parseInt(hostPortArray[0].split(Constants.COLON)[1])); + dataSourceParamDTO.setHost(hostPortArray[0].split(Constants.COLON)[0]); + + return dataSourceParamDTO; + } + + @Override + public ConnectionParam createConnectionParams(BaseDataSourceParamDTO datasourceParam) { + DolphinDBDataSourceParamDTO dolphinDBParam = (DolphinDBDataSourceParamDTO) datasourceParam; + String address = String.format("%s%s:%s", DataSourceConstants.JDBC_DOLPHINDB, dolphinDBParam.getHost(), + dolphinDBParam.getPort()); + String jdbcUrl = String.format("%s", address); + + DolphinDBConnectionParam dolphinDBConnectionParam = new DolphinDBConnectionParam(); + dolphinDBConnectionParam.setJdbcUrl(jdbcUrl); + dolphinDBConnectionParam.setDatabase(dolphinDBParam.getDatabase()); + dolphinDBConnectionParam.setAddress(address); + dolphinDBConnectionParam.setUser(dolphinDBParam.getUserName()); + dolphinDBConnectionParam.setPassword(PasswordUtils.encodePassword(dolphinDBParam.getPassword())); + dolphinDBConnectionParam.setDriverClassName(getDatasourceDriver()); + dolphinDBConnectionParam.setValidationQuery(getValidationQuery()); + dolphinDBConnectionParam.setOther(dolphinDBParam.getOther()); + + return dolphinDBConnectionParam; + } + + @Override + public ConnectionParam createConnectionParams(String connectionJson) { + return JSONUtils.parseObject(connectionJson, DolphinDBConnectionParam.class); + } + + @Override + public String getDatasourceDriver() { + return DataSourceConstants.COM_DOLPHINDB_JDBC_DRIVER; + } + + @Override + public String getValidationQuery() { + return DataSourceConstants.DOLPHINDB_VALIDATION_QUERY; + } + + @Override + public String getJdbcUrl(ConnectionParam connectionParam) { + DolphinDBConnectionParam dolphinDBConnectionParam = (DolphinDBConnectionParam) connectionParam; + if (MapUtils.isNotEmpty(dolphinDBConnectionParam.getOther())) { + return String.format("%s?%s", dolphinDBConnectionParam.getJdbcUrl(), + transformOther(dolphinDBConnectionParam.getOther())); + } + return dolphinDBConnectionParam.getJdbcUrl(); + } + + @Override + public Connection getConnection(ConnectionParam connectionParam) throws ClassNotFoundException, SQLException { + DolphinDBConnectionParam dolphinDBConnectionParam = (DolphinDBConnectionParam) connectionParam; + Class.forName(getDatasourceDriver()); + return DriverManager.getConnection(getJdbcUrl(connectionParam), + dolphinDBConnectionParam.getUser(), + PasswordUtils.decodePassword(dolphinDBConnectionParam.getPassword())); + } + + @Override + public DbType getDbType() { + return DbType.DOLPHINDB; + } + + @Override + public DataSourceProcessor create() { + return new DolphinDBDataSourceProcessor(); + } + + private String transformOther(Map otherMap) { + if (MapUtils.isEmpty(otherMap)) { + return null; + } + + List list = new ArrayList<>(otherMap.size()); + otherMap.forEach((key, value) -> list.add(String.format("%s=%s", key, value))); + return String.join("&", list); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactoryTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactoryTest.java new file mode 100644 index 000000000000..f1b012e0709b --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelFactoryTest.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class DolphinDBDataSourceChannelFactoryTest { + + @Test + public void testCreate() { + DolphinDBDataSourceChannelFactory factory = new DolphinDBDataSourceChannelFactory(); + DataSourceChannel channel = factory.create(); + Assertions.assertNotNull(channel); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelTest.java new file mode 100644 index 000000000000..ce8248521787 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/DolphinDBDataSourceChannelTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb; + +import org.apache.dolphinscheduler.plugin.datasource.dolphindb.param.DolphinDBConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DolphinDBDataSourceChannelTest { + + @Test + public void testCreateDataSourceClient() { + DolphinDBDataSourceChannel sourceChannel = Mockito.mock(DolphinDBDataSourceChannel.class); + DolphinDBPooledDataSourceClient dataSourceClient = Mockito.mock(DolphinDBPooledDataSourceClient.class); + Mockito.when(sourceChannel.createPooledDataSourceClient(Mockito.any(), Mockito.any())) + .thenReturn(dataSourceClient); + Assertions.assertNotNull( + sourceChannel.createPooledDataSourceClient(new DolphinDBConnectionParam(), DbType.DOLPHINDB)); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessorTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessorTest.java new file mode 100644 index 000000000000..b59cbaa5fe0f --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/param/DolphinDBDataSourceProcessorTest.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.param; + +import org.apache.dolphinscheduler.common.constants.DataSourceConstants; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DolphinDBDataSourceProcessorTest { + + private DolphinDBDataSourceProcessor processor = new DolphinDBDataSourceProcessor(); + + @Test + public void testCreateConnectionParams() { + Map props = new HashMap<>(); + props.put("serverTimezone", "utc"); + DolphinDBDataSourceParamDTO dolphinDBDataSourceParamDTO = new DolphinDBDataSourceParamDTO(); + dolphinDBDataSourceParamDTO.setUserName("admin"); + dolphinDBDataSourceParamDTO.setPassword("123456"); + dolphinDBDataSourceParamDTO.setHost("localhost"); + dolphinDBDataSourceParamDTO.setPort(8848); + dolphinDBDataSourceParamDTO.setOther(props); + try (MockedStatic mockedStaticPasswordUtils = Mockito.mockStatic(PasswordUtils.class)) { + mockedStaticPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())).thenReturn("test"); + DolphinDBConnectionParam connectionParams = (DolphinDBConnectionParam) processor + .createConnectionParams(dolphinDBDataSourceParamDTO); + Assertions.assertEquals("jdbc:dolphindb://localhost:8848", connectionParams.getAddress()); + Assertions.assertEquals("jdbc:dolphindb://localhost:8848", connectionParams.getJdbcUrl()); + } + } + + @Test + public void testCreateConnectionParams2() { + String connectionJson = + "{\"user\":\"admin\",\"password\":\"123456\",\"address\":\"jdbc:dolphindb://localhost:8848\"" + + ",\"jdbcUrl\":\"jdbc:dolphindb://localhost:8848/default\"}"; + DolphinDBConnectionParam connectionParams = (DolphinDBConnectionParam) processor + .createConnectionParams(connectionJson); + Assertions.assertNotNull(connectionJson); + Assertions.assertEquals("admin", connectionParams.getUser()); + } + + @Test + public void testGetDatasourceDriver() { + Assertions.assertEquals(DataSourceConstants.COM_DOLPHINDB_JDBC_DRIVER, + processor.getDatasourceDriver()); + } + + @Test + public void testGetJdbcUrl() { + DolphinDBConnectionParam param = new DolphinDBConnectionParam(); + param.setJdbcUrl("jdbc:dolphindb://localhost:8848"); + Assertions.assertEquals( + "jdbc:dolphindb://localhost:8848", + processor.getJdbcUrl(param)); + } + + @Test + public void testGetDbType() { + Assertions.assertEquals(DbType.DOLPHINDB, processor.getDbType()); + } + + @Test + public void testGetValidationQuery() { + Assertions.assertEquals(DataSourceConstants.DOLPHINDB_VALIDATION_QUERY, + processor.getValidationQuery()); + } + + @Test + public void testGetDatasourceUniqueId() { + DolphinDBConnectionParam param = new DolphinDBConnectionParam(); + param.setJdbcUrl("jdbc:dolphindb://localhost:8848/"); + param.setUser("admin"); + param.setPassword("123456"); + try (MockedStatic mockedPasswordUtils = Mockito.mockStatic(PasswordUtils.class)) { + mockedPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())).thenReturn("123456"); + Assertions.assertEquals("dolphindb@admin@123456@jdbc:dolphindb://localhost:8848/", + processor.getDatasourceUniqueId(param, DbType.DOLPHINDB)); + } + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/provider/JDBCDataSourceProviderTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/provider/JDBCDataSourceProviderTest.java new file mode 100644 index 000000000000..6f019a9770bd --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/provider/JDBCDataSourceProviderTest.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.provider; + +import org.apache.dolphinscheduler.plugin.datasource.api.provider.JDBCDataSourceProvider; +import org.apache.dolphinscheduler.plugin.datasource.dolphindb.param.DolphinDBConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.zaxxer.hikari.HikariDataSource; + +@ExtendWith(MockitoExtension.class) +public class JDBCDataSourceProviderTest { + + @Test + public void testCreateOneSessionJdbcDataSource() { + try ( + MockedStatic mockedJDBCDataSourceProvider = + Mockito.mockStatic(JDBCDataSourceProvider.class)) { + HikariDataSource dataSource = Mockito.mock(HikariDataSource.class); + mockedJDBCDataSourceProvider + .when(() -> JDBCDataSourceProvider.createOneSessionJdbcDataSource(Mockito.any(), Mockito.any())) + .thenReturn(dataSource); + Assertions.assertNotNull( + JDBCDataSourceProvider.createOneSessionJdbcDataSource(new DolphinDBConnectionParam(), + DbType.DOLPHINDB)); + } + } + +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/utils/DataSourceUtilsTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/utils/DataSourceUtilsTest.java new file mode 100644 index 000000000000..02b78f279ab0 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-dolphindb/src/test/java/org/apache/dolphinscheduler/plugin/datasource/dolphindb/utils/DataSourceUtilsTest.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.dolphindb.utils; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.PropertyUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.plugin.DataSourceClientProvider; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.CommonUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.DataSourceUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.plugin.datasource.dolphindb.param.DolphinDBConnectionParam; +import org.apache.dolphinscheduler.plugin.datasource.dolphindb.param.DolphinDBDataSourceParamDTO; +import org.apache.dolphinscheduler.spi.datasource.ConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class DataSourceUtilsTest { + + @Test + public void testCheckDatasourceParam() { + DolphinDBDataSourceParamDTO paramDTO = new DolphinDBDataSourceParamDTO(); + paramDTO.setHost("localhost"); + Map other = new HashMap<>(); + other.put("serverTimezone", "Asia/Shanghai"); + other.put("queryTimeout", "-1"); + other.put("characterEncoding", "utf8"); + paramDTO.setOther(other); + DataSourceUtils.checkDatasourceParam(paramDTO); + Assertions.assertTrue(true); + } + + @Test + public void testBuildConnectionParams() { + DolphinDBDataSourceParamDTO paramDTO = new DolphinDBDataSourceParamDTO(); + paramDTO.setHost("localhost"); + paramDTO.setUserName("admin"); + paramDTO.setPort(8848); + paramDTO.setPassword("123456"); + + try ( + MockedStatic mockedStaticPasswordUtils = Mockito.mockStatic(PasswordUtils.class); + MockedStatic mockedStaticCommonUtils = Mockito.mockStatic(CommonUtils.class)) { + mockedStaticPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())) + .thenReturn("123456"); + mockedStaticCommonUtils.when(CommonUtils::getKerberosStartupState).thenReturn(false); + ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(paramDTO); + Assertions.assertNotNull(connectionParam); + } + } + + @Test + public void testBuildConnectionParams2() { + DolphinDBDataSourceParamDTO paramDTO = new DolphinDBDataSourceParamDTO(); + paramDTO.setHost("localhost"); + paramDTO.setUserName("root"); + paramDTO.setPort(5433); + paramDTO.setPassword("123456"); + ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(DbType.DOLPHINDB, + JSONUtils.toJsonString(paramDTO)); + Assertions.assertNotNull(connectionParam); + } + + @Test + public void testGetConnection() throws ExecutionException, SQLException { + try ( + MockedStatic mockedStaticPropertyUtils = Mockito.mockStatic(PropertyUtils.class); + MockedStatic mockedStaticDataSourceClientProvider = + Mockito.mockStatic(DataSourceClientProvider.class)) { + mockedStaticPropertyUtils.when(() -> PropertyUtils.getLong("kerberos.expire.time", 24L)).thenReturn(24L); + + Connection connection = Mockito.mock(Connection.class); + Mockito.when(DataSourceClientProvider.getAdHocConnection(Mockito.any(), Mockito.any())) + .thenReturn(connection); + + DolphinDBConnectionParam connectionParam = new DolphinDBConnectionParam(); + connectionParam.setUser("admin"); + connectionParam.setPassword("123456"); + connection = DataSourceClientProvider.getAdHocConnection(DbType.DOLPHINDB, connectionParam); + + Assertions.assertNotNull(connection); + } + + } + + @Test + public void testGetJdbcUrl() { + DolphinDBConnectionParam connectionParam = new DolphinDBConnectionParam(); + connectionParam.setJdbcUrl("jdbc:dolphindb://localhost:8848"); + String jdbcUrl = DataSourceUtils.getJdbcUrl(DbType.DOLPHINDB, connectionParam); + Assertions.assertEquals("jdbc:dolphindb://localhost:8848", jdbcUrl); + } + + @Test + public void testBuildDatasourceParamDTO() { + DolphinDBConnectionParam connectionParam = new DolphinDBConnectionParam(); + connectionParam.setJdbcUrl("jdbc:dolphindb://localhost:8848"); + connectionParam.setAddress("jdbc:dolphindb://localhost:8848"); + connectionParam.setUser("admin"); + connectionParam.setPassword("123456"); + + Assertions.assertNotNull( + DataSourceUtils.buildDatasourceParamDTO(DbType.DOLPHINDB, JSONUtils.toJsonString(connectionParam))); + + } + + @Test + public void testGetDatasourceProcessor() { + Assertions.assertNotNull(DataSourceUtils.getDatasourceProcessor(DbType.DOLPHINDB)); + } + + @Test + public void testGetDatasourceProcessorError() { + Assertions.assertThrows(Exception.class, () -> { + DataSourceUtils.getDatasourceProcessor(null); + }); + } +} diff --git a/dolphinscheduler-datasource-plugin/pom.xml b/dolphinscheduler-datasource-plugin/pom.xml index c30a6b42586b..345143d33c4f 100644 --- a/dolphinscheduler-datasource-plugin/pom.xml +++ b/dolphinscheduler-datasource-plugin/pom.xml @@ -56,6 +56,7 @@ dolphinscheduler-datasource-sagemaker dolphinscheduler-datasource-k8s dolphinscheduler-datasource-hana + dolphinscheduler-datasource-dolphindb diff --git a/dolphinscheduler-dist/release-docs/LICENSE b/dolphinscheduler-dist/release-docs/LICENSE index 1fbd3e6e521b..ec04ffae1cf9 100644 --- a/dolphinscheduler-dist/release-docs/LICENSE +++ b/dolphinscheduler-dist/release-docs/LICENSE @@ -813,3 +813,8 @@ JDOM licenses Vertica Client Driver License ======================================== vertica-jdbc 12.0.4-0: https://mvnrepository.com/artifact/com.vertica.jdbc/vertica-jdbc/12.0.4-0, Vertica Client Driver License + +======================================== +DolphinDB Client Driver License +======================================== + dolphin-jdbc 3.00.0.1: https://mvnrepository.com/artifact/com.dolphindb/jdbc/3.00.0.1, DolphinDB Client Driver License diff --git a/dolphinscheduler-dist/release-docs/NOTICE b/dolphinscheduler-dist/release-docs/NOTICE index 3228e3ff2c2e..cfffedb68322 100644 --- a/dolphinscheduler-dist/release-docs/NOTICE +++ b/dolphinscheduler-dist/release-docs/NOTICE @@ -2113,3 +2113,25 @@ BY SELECTING “ACCEPT AND CONTINUE” BELOW, YOU ARE EXPRESSLY ACKNOWLEDGING AN [ ] I consent and accept the terms and conditions stated in this Agreement. ========================================================================= + +========================================================================= + +DolphinDB Client Driver License NOTICE + +========================================================================= + +Copyright 2016-2024 DolphinDB, Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +========================================================================= \ No newline at end of file diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-dolphindb-jdbc.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-dolphindb-jdbc.txt new file mode 100644 index 000000000000..3020791b5051 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-dolphindb-jdbc.txt @@ -0,0 +1,13 @@ +Copyright 2016-2024 DolphinDB, Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java index 882b170e1190..c356ce2afba8 100644 --- a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java +++ b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java @@ -55,7 +55,8 @@ public enum DbType { ZEPPELIN(24, "zeppelin", "zeppelin"), SAGEMAKER(25, "sagemaker", "sagemaker"), - K8S(26, "k8s", "k8s"); + K8S(26, "k8s", "k8s"), + DOLPHINDB(27, "dolphindb", "dolphindb"); private static final Map DB_TYPE_MAP = Arrays.stream(DbType.values()).collect(toMap(DbType::getCode, Functions.identity())); @EnumValue diff --git a/dolphinscheduler-ui/src/service/modules/data-source/types.ts b/dolphinscheduler-ui/src/service/modules/data-source/types.ts index 444f5293ddbb..cb1552b47348 100644 --- a/dolphinscheduler-ui/src/service/modules/data-source/types.ts +++ b/dolphinscheduler-ui/src/service/modules/data-source/types.ts @@ -42,6 +42,7 @@ type IDataBase = | 'ZEPPELIN' | 'SAGEMAKER' | 'K8S' + | 'DOLPHINDB' type IDataBaseLabel = | 'MYSQL' @@ -65,6 +66,7 @@ type IDataBaseLabel = | 'ZEPPELIN' | 'SAGEMAKER' | 'K8S' + | 'DOLPHINDB' interface IDataSource { id?: number diff --git a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts index 21916667d2f7..fdc48678809b 100644 --- a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts +++ b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts @@ -244,9 +244,7 @@ export function useForm(id?: number) { const changeType = async (type: IDataBase, options: IDataBaseOption) => { state.detailForm.port = options.previousPort || options.defaultPort state.detailForm.type = type - - state.requiredDataBase = type !== 'POSTGRESQL' && type !== 'ATHENA' - + state.requiredDataBase = type !== 'POSTGRESQL' && type !== 'ATHENA' && type !== 'DOLPHINDB' state.showHost = type !== 'ATHENA' state.showPort = type !== 'ATHENA' state.showAwsRegion = type === 'ATHENA' || type === 'SAGEMAKER' @@ -268,12 +266,18 @@ export function useForm(id?: number) { type === 'SSH' || type === 'ZEPPELIN' || type === 'SAGEMAKER' || - type === 'K8S' + type === 'K8S' || + type === 'DOLPHINDB' ) { + state.showDataBaseName = false state.requiredDataBase = false state.showJDBCConnectParameters = false state.showPublicKey = false + if(type === 'DOLPHINDB'){ + state.showJDBCConnectParameters = true + state.showPublicKey = false + } if (type === 'SSH') { state.showPublicKey = true } @@ -458,7 +462,12 @@ export const datasourceType: IDataBaseOptionKeys = { value: 'K8S', label: 'K8S', defaultPort: 6443 - } + }, + DOLPHINDB: { + value: 'DOLPHINDB', + label: 'DOLPHINDB', + defaultPort: 8848 + } } export const datasourceTypeList: IDataBaseOption[] = Object.values( diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts index 8b4ef0b897ec..ef26cc83e348 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts @@ -157,6 +157,11 @@ export function useDatasource( id: 25, code: 'SAGEMAKER', disabled: false + }, + { + id: 26, + code: 'DOLPHINDB', + disabled: false } ] diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt index 49b2f1367d3b..bf8c0ba7b434 100644 --- a/tools/dependencies/known-dependencies.txt +++ b/tools/dependencies/known-dependencies.txt @@ -520,4 +520,4 @@ semver-5.7.2.jar sigmund-1.0.1.jar wrappy-1.0.2.jar yallist-2.1.2.jar - +dolphindb-jdbc-3.00.0.1.jar