From 101de7f32bed47e25a508f47691106e07ffdfab6 Mon Sep 17 00:00:00 2001 From: RodZill4 Date: Fri, 27 Sep 2019 08:28:33 +0200 Subject: [PATCH] Removed useless print calls and started adding the "create subgraph" command --- addons/material_maker/engine/gen_graph.gd | 10 +- addons/material_maker/engine/gen_remote.gd | 2 + addons/material_maker/engine/loader.gd | 2 +- addons/material_maker/icons/icons.svg | 95 +++++------ addons/material_maker/main_window.gd | 42 +++-- addons/material_maker/nodes/edit_buttons.tscn | 40 +++-- addons/material_maker/nodes/normal_map.mmg | 2 +- addons/material_maker/nodes/remote.gd | 2 - .../material_maker/widgets/gradient_editor.gd | 1 - .../material_maker/widgets/line_dialog.tscn | 121 +------------ adjust_hsv.mmg | 1 + bricks.mmn | 1 + combine.mmg | 1 + export_presets.cfg | 6 +- noise.mmn | 1 + normal_map.ptex | 1 + remote_test.ptex | 1 + shape_tests.ptex | 1 + test.mmn | 1 + test.png | Bin 1096 -> 208340 bytes test.ptex | 159 +----------------- test2.ptex | 1 + test2.tres | 10 ++ test2_albedo.png | Bin 0 -> 302388 bytes test3.ptex | 1 + test4.ptex | 1 + test5.ptex | 1 + test_buffer.ptex | 1 + test_material.ptex | 1 + 29 files changed, 146 insertions(+), 360 deletions(-) create mode 100644 adjust_hsv.mmg create mode 100644 bricks.mmn create mode 100644 combine.mmg create mode 100644 noise.mmn create mode 100644 normal_map.ptex create mode 100644 remote_test.ptex create mode 100644 shape_tests.ptex create mode 100644 test.mmn create mode 100644 test2.ptex create mode 100644 test2.tres create mode 100644 test2_albedo.png create mode 100644 test3.ptex create mode 100644 test4.ptex create mode 100644 test5.ptex create mode 100644 test_buffer.ptex create mode 100644 test_material.ptex diff --git a/addons/material_maker/engine/gen_graph.gd b/addons/material_maker/engine/gen_graph.gd index ad0b7ba..c968217 100644 --- a/addons/material_maker/engine/gen_graph.gd +++ b/addons/material_maker/engine/gen_graph.gd @@ -12,8 +12,16 @@ func get_type_name(): return label func get_parameter_defs(): + var params = get_node("gen_parameters") + if params != null: + return params.get_parameter_defs() return [] +func set_parameter(p, v): + var params = get_node("gen_parameters") + if params != null: + return params.set_parameter(p, v) + func get_input_defs(): var inputs = get_node("gen_inputs") if inputs != null: @@ -98,10 +106,8 @@ func disconnect_children(from, from_port : int, to, to_port : int): return true func _get_shader_code(uv : String, output_index : int, context : MMGenContext): - print("Getting shader code from graph") var outputs = get_node("gen_outputs") if outputs != null: - print("found!") var rv = outputs._get_shader_code(uv, output_index, context) while rv is GDScriptFunctionState: rv = yield(rv, "completed") diff --git a/addons/material_maker/engine/gen_remote.gd b/addons/material_maker/engine/gen_remote.gd index 92e5fc7..1828cdc 100644 --- a/addons/material_maker/engine/gen_remote.gd +++ b/addons/material_maker/engine/gen_remote.gd @@ -76,6 +76,8 @@ func set_parameter(p, v): print("error: incorrect config control parameter value") return .set_parameter(p, v) + if name == "gen_parameters": + get_parent().parameters[p] = v func _serialize(data): data.type = "remote" diff --git a/addons/material_maker/engine/loader.gd b/addons/material_maker/engine/loader.gd index bcd576f..b428687 100644 --- a/addons/material_maker/engine/loader.gd +++ b/addons/material_maker/engine/loader.gd @@ -62,7 +62,7 @@ static func create_gen(data) -> MMGenBase: elif data.type == "ios": generator = MMGenIOs.new() if data.has("mask"): - generator.mask = data.mask + generator.mask = int(data.mask) generator.ports = data.ports elif data.type == "switch": generator = MMGenSwitch.new() diff --git a/addons/material_maker/icons/icons.svg b/addons/material_maker/icons/icons.svg index 61805a8..2a31081 100644 --- a/addons/material_maker/icons/icons.svg +++ b/addons/material_maker/icons/icons.svg @@ -10,9 +10,9 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="210mm" - height="297mm" - viewBox="0 0 210 297" + width="64" + height="64" + viewBox="0 0 64 64" version="1.1" id="svg8" inkscape:version="0.92.3 (2405546, 2018-03-11)" @@ -48,20 +48,27 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1.1274425" - inkscape:cx="116.41955" - inkscape:cy="914.64295" - inkscape:document-units="mm" + inkscape:zoom="14.304427" + inkscape:cx="46.907045" + inkscape:cy="41.347265" + inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1017" inkscape:window-x="-8" inkscape:window-y="-8" - inkscape:window-maximized="1"> + inkscape:window-maximized="1" + inkscape:pagecheckerboard="true" + units="px" + scale-x="2.1" + inkscape:snap-to-guides="false" + inkscape:snap-grids="false"> + id="grid815" + spacingx="4.2333332" + spacingy="4.2333332" /> @@ -71,25 +78,18 @@ image/svg+xml - + - + id="layer1" + transform="translate(0,-280.06665)"> @@ -109,7 +109,7 @@ inkscape:export-xdpi="16.531826" inkscape:export-filename="remove.png" id="g4564" - transform="matrix(0.82426401,0.81188676,-0.82426401,0.81188676,84.358228,-6.2929802)" + transform="matrix(0.43370177,0.42718925,-0.43370177,0.42718925,43.791013,273.09803)" style="fill:#ff0909;fill-opacity:1"> + transform="matrix(0.53954693,0,0,0.52735129,-2.0235322,258.7025)"> @@ -185,17 +185,20 @@ id="g879" inkscape:export-filename="save.png" inkscape:export-xdpi="14" - inkscape:export-ydpi="14"> + inkscape:export-ydpi="14" + transform="matrix(0.52616852,0,0,0.52616852,14.395212,275.18126)"> + d="m 130,152.51953 v 110 h 110 v -99.28906 l -10.71094,-10.71094 z" + style="opacity:1;fill:#14008d;fill-opacity:1;stroke:none;stroke-width:3.77952766;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" + inkscape:connector-curvature="0" /> + d="m 155,152.51953 v 40 h 60 v -40 z m 40,10 h 10 v 20 h -10 z" + style="opacity:1;fill:#afafaf;fill-opacity:1;stroke:none;stroke-width:4.04048538;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" + inkscape:connector-curvature="0" /> - - + inkscape:connector-curvature="0" /> + inkscape:export-ydpi="13.499794" + transform="matrix(0.51223521,0,0,0.51223521,5.2214853,275.80647)"> + d="m 330,152.51953 v 110 h 90 v -92.57422 l -17.42773,-17.42578 z" + style="opacity:1;fill:#ffed46;fill-opacity:1;stroke:#c7b115;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" + inkscape:connector-curvature="0" /> + d="m 403,152.94727 v 16.57226 h 16.57422 z" + style="opacity:1;fill:#ffed46;fill-opacity:1;stroke:#c7b115;stroke-width:3.77952766;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" + inkscape:connector-curvature="0" /> K6!u_1)`;J+h}u?q-<5%Ttx z^m~uA**SCqZTFXan`0*YU$|y5bJsUfll_l*e~Hy+hOaAMyDL2Heq3Cv-8u0SoBWS` z0UKLK0%wkO@wHzo!)@E~#f9kn!a}Eg9gTy7gDH}ii<`UCtC=2i(QFtsXD?)EXoxyI zJoNDJpi)*=Hm#eXn*+Zhs;jH_!Lz%&yD0GN+S=OE>Z-ZEzCLot?L|gL2I~6yTDw#e z^A7OE$>lZX`NlbWTfx-*g98}mvEJTZ4{vXpyLay{U0?f_Xckv4>~#X6W_H{#7c)DU z7nhfpFC8Ddre$VEDQ8MV9D9j(?jIfT(=#x1j*gBBzj#42IXQWV(9+Ucy1Md7OHYru z_LCG$?Vs9lTk4ErSlZaIYHDqb;zePELGmgoDWT5K&oLJ@x)F7Cbx!W?LTfI5eiF4a zI~ZxAqN0{|ckMCHfEQzi!pIK(0Or1Qe(pKYdksEe#5_Gc#jFF6!pYegHnDX~8+vIc zm|Ce@ikX>yV`pb4<_|Y#osyA2Y|JwL{{356T%2xiZx8dTtFwL6rluw&80VaB$sdeS zSXj7}XygZFW@cVmUN-9q?^6O}_4oG+i-7V_OGtQ=I7^8D=RBgd#7Oi`j6*r z1(!w(l})SBm~96meoq9;f{_oX5E%IoVT!Co+ZJ$?Y;A08P?;jZ3^BtG3=9-x3EEo$W7mdieR#UtarRv|un(G74-lMp!D- zZMR0&T%ddV*O#Z~o}w?;GBPte>l_wPJ3BkyWlk}VZ5?~f&d$Cw&?%opG=U3!1A~a$ zeaV~7DOFK=!nuGhhkW8mNA{?1I@KA1jOxi6C1<&&f4VCB~i#ST|i;M=E{R+;`6 zqnQQVKsQqT{_O8NfmcL==~_L)Xv$sxvkr{lHdkk79?J`0MG81D`|7%o&0Vtu_Mu3* z<#bK*))TA}W?tvl;5&>)Px=7e2cvHwfYxHR8_aFguny=8c-x7GmzO9#Jv}P(=BN;A zH1+iIJ3VGJu+2-`+qPhO@B9@Ad?FcU!QO)-hx&-3ZnZeXm_ABP%wSQ_Lo^JPjL_Y%I`Cn_Wft9jfZWDEONoVc56(> z`nc%cIQM|e!g3f0=i%c+3v_do1qg=`)D#JwVqvyWv#{Qd3&K*v&*Wt|J@E|pb8{1< zTLHQPCO`))*Zns<8KTP03wx*Pf+#J>t1@7C$`UPLgj=#`Vquo=YtA2~I?-q}=JwQn z^QPwJh;eIyva&LaZu5T%4-a?p^c2~%v%{4guxXqd2;k5L;_n0f0H=FZcQ_Q>@q}4f z3s*dH0ucba04Kxe!6!TySoYdY(i%AZV;ew4G4Jzh&9pfJ&z(2sOGNRmdh|^qgqtxY z16Ul?8Q~l3xGY2FCBN%BS6@%hb5cv@Oki=-B^`-*H0qR+PrN`*Y6){*F$%e@gE?(}Et9+sz`$;mw<`Hg+X|}t3-<#v#7g6r zU6ogkVhy0qb<#4zdw{jHvtu_9dK>d@_?~FLAzE{%z2QJy!O>y>m_NRAY{PTxi!GfR znbRjm-6LRA+5&cG=jR8`(=#$K#=x^RHa1qoZ;K-=>+TUDIb^plHp)?8A12{12^MrC zb5F0X-<;2treZ(T=uhkhcKw^rQ@9L+HyecM9-f}b0d_UIir$G2BKEQ7fhp{yVt_=Z zU#9I>%uGi*jXV>r!p-&Hxk!abQT}b`S}zUWHx5_gB~4p$F>0^x;j-+`gHD121+YXEkKK+d(1YLsR&k!y`=3|8EK$PUz_`;CDY6!%+CG0hg`4j0>zgjPeYem-A5V0dXz}64 ze?*YG&@;Nl{tP_TB|QBzI_HB%jKTng-1&-?80Ky-aOy! z4uLRZ5z!1u*>Rx8YlIA!w$IMuum>)1Pasc`yan_Jx#Prw<4$94TkaSBZ7HpWn~KsA z`!NP<>dn|nvzHcG@#R^!2BR0YEnTghRB|QXoa(t-wT7@3haPURe&Hi%`Fn8ST*fVO z?!RK_UyBrpA6`JvVL@1;R8^l!S87$;@RMu?2LQA2T>RDIS6hEfNCCW^%a7-$z-s{O zzKU&NV4#@m@SO0ibDSyi?Lw}h$Rd~*CKv#QMlvEaG}Nl(!42@&cXU-=nrc|F$VN1w z#Wj}?*9K!p=J!rxW8&I>bV29#=pUed%rbaARe(Jy20jluX4Vh~&MjOmM_{>%eWLGT z%yEmVysT`snzhmigd&l^Wiaqkk{a)N1JedhCe|-2d!Yk$q+}rnFShXG9HZ%v0}@TYCO^-xah= zI~vqBG%_l*1E!fi-e1D^!sRF}2=|%LGgjj@Fqxny((7R9Fo6*`iOE*!>FND3P@0GT z@Dv*G$hFzAUUtiAx&tp<{hTP|;C(PzE7oEP4qAY5{1$7L^!d@ZxGIvm0qU%c!L!#= zT`4+Iz-jAXml_$HF0U$MeTNK0mO#^Ah=?Q;#hZOa_EMM`bI;bj9S1+EFD;dhLJhp_ zb;d#XvAehDA6tWygo!k!0id zephF_z@6aQfcQiXQhq}&%qt|yhmw2y$<}&C{?Yhb(V@NY^xly}pb4*Ck2OOk`r_3h zc_T@(zk62)nB#q1JG6eyk~y+VoBtpD)28^tj~DlUmr%I36P7MzMdKR$vK?j%HD`t3 z-BE z4AVTnh^Mm|ANYnqN(6{=8CEsE)d~p64h2Y}ve$k!L^pdCQg2c%5kej;LoN8i&8Y=s z4{v}aR@KS%>KN8;T+xrH)S{E-d*fzlS9%Q_6|}$Dbf>Kd*jOXwI=cPy=YyD-*wyO% z#D8;cO-Cv!cqfp@C#pP(WG)UwX`-?h=A`Q%R?vIjXI~A}v`>!@-jGfaiQ#$fcHdxm zNmX6bUAyZD+DNv00`%h+V@kIlASy0w>b&hYnaYZ2aci-?x{6w{GS^sm50mRtANuG5u z-0%!zVi=4f==?iAJ{~sdre-C5HQhI1ft8(eD@bBjHEWWV7zmOE3!XrsB6D+dnE1TK=lp=?PC0&W7L`QXB()dm8Bod5B5t~vMg1P# z!x0d@jj>nNN>r_gqReaZpT6Ki#~$C;PmR#)0A>RC;O9%K|L%y@Waj9owhIyzvsTt@ zZrY~e(tJ8KL-$UXaM$b3G&VM3BEy9vfur-?nLUIv-e!t*_dDP5YYVuWS2zR6m=>_IcWyRSNv&e^MnRCR2?66@k)9voxxh9(%2SFXB16tGi=x`bvz^Mf9O{K{@xtUzU+vmo^dv51t8JEKRRB{;J=Rt;oaLI^%G} zaY!cktXls7cdUZu9kg{XRc2)llJ%-&BIW|Yk}Y^xXBix&GkwV6(A3j=P$rS=^#@f@>q8Y?y{~)8B2GyLhU3kJBX_` zOvUt&JlwRFV(iSXX37=x7WmQ7L;HZrIiYPE+zEND!YLznx7cWP^HM<;nZZ&%9zy)8 zzkgg{^;ZBQ(hp=iKnIExYF=dJ>)ZhSw7pZ(^v!{8X5^Nmv&tpK^($O`+H(AP+rTC8 z9O@woD)N%OBWLu@c(!-2H|{{sBG2Qlc}{wa@NMYF6B9&nY2DP>nx&&T5)jcUE;dHAbzoFhz9DGaM|HB)O&6zA=*6tc_NGao^Y0SM?SCC}O__OUc43c=Ig0 zX-v5a7Uef#k+3awDc?1g)cf)(<2Gwak1S)clj?rh%)FX~aR9#5&|yfCdrGvObkGwf zDPhv7-C?PB=xOcOyyK0m>bHB^k0VPH@4HJ4%UBEOxo3w)QnC2libN!SHsm_24{Q=H_q8}2(`P*Ns6C&et zb~U_=qy#K#7tfQJ#{Pmx(92{iK7%O09eveRvB67VW)D+7J-yuZ<1r$8^Zf2r?f$#& z+i(Wf-f}0Ei^@O%ZkZ(Ybb% zT2kvKAhB8FyZ2W=@He*KO&7>4(q?!xUqIfdPTO7Ke1+hg-t(b3;}vt+0OEZzIOv;b z5lZc!P0-G&0r6j1IIFKkDCIL%*3rTrQ<+MBR@bqRn5 zOxg{i`3;M6%@Z>*PQ=NrPi#GZwC*TAoHwSg()KD~Vc22+)qS=XU$VkpPo(&bdU}=1Cu1o>|AQobkm&r(>wBtixuxVO~W zI(UdP8!c$o=GOwYR+~rPD~aB5YDAN&a0dS!Qyr{*Skp9I&tI(#v+Hdki7Y$Oo_oB9 zABg|G3SUa8SEYuuw(Vw%4_OSy-g+!zi9(0)W#&IoIN7k+nqYMB;Z%-$Yt^4j$In|t zAL+CXWn0YF>W?9&D5bfydyCu|i_-3>V$U!_b^Pf1aZ^}ge!S4U{^9-|=`z8!3@V)l zHmGjUWR)yRuT`ry$IBp{JGXkaj2&_*K@ZVQfTtzwy%m8GFk6g36u`|B9rKN=)ATiYnwTkwzcP_`>-JO0m zUElE`9G;qkBI{R7jxz)D)#tM?6(p~@g$G{;IIHM%dlHro7>VnvWi6i5DE+Fop!ZmG z#s2{2!IuhqM0TP*p+T%Gz$p-3`+S170=;)CN6_8W?CVn9+SJr%Z?VFAy26MKkU_Ti zU5lcGxpq7R#RVh`ZdY4pb|T%R3G+xp@PzZLdifp8@Fpe6I93!V{7jZTGdv6ObVQ@cu>(?Ok@a!{X~?<) z7H_l#{jmy7we*G(^~ZfG(>#TW^ujD-S(%|ip+{-i*k|Y3TE%_%JVW_sD~P9+P(SxT z6dh^SQWBBqIv!_$O7W*qDb-3vc2ANql{n&fK(TLT21|?QtHGJ%yMS?B@UzKX$lm@o z5$(AR3s)Gr^iFIk0EuobZMBg~(&Jn6@GAbuHE=e`hB|yFgL0T{maU(qh*>|t#fyFb zhcX}i&iZUk6n_8D50#`U;?vk7r;Pp+-ExXJPQU8po&w8~@IMwTuhEq^cuEgU)t)%G zbD8Roh|wV;&4@aVndw z-^om!s4FJ7qMp;rN0#~e`)A7GAy_E&Djr_piUsO~3{=Wgrjhl0QghMI=$~?HoGV#L zEnHM+$HI+leHR3I^7V{9m{}-XpI=9Gv>~xd@KH^kk>B}>Q2YIdme)KK3WXz!{a^T1 z9G`RIc+QWgBrrzh290doi`zXHIP*XH`w>Nj2)8|sLgW;h(q3qmm6vyJZFRmiYFncq z=T3h@mmN;)t&IJEWXJmKV5K)si01%<-}zn&^6@G?Vk~%KN(&cF?Mlo4sbZzKPR843IePPYp06jaX|Ok9ja&dAx42! zgG7#0RDo3g*lpIC632x)GW*=67F*=|(RjC$51tjnpJ&+v+?<4L2al%}1o&D~Of!);8y zQ1<&`So0K%R-oOg9<_^yRnNSXFjqYgbPdvJTpDb#Ayi@cBtxU_SxV%Jh3IuP@mJe} z#_@mu$uEB2;*l>Rf85aXY-zDA#i@%+cdaP6HY?hgwApnufk8MzG)B}9Yfz)ZHR>i4 zQ9x_(bVkFcP)8a^YRhBwH*2bLBZ^a=?`3}&@+aR+>kx0W!ab*Z1)ix!!DRJnN@R@) zR>#A+vg~3V^EIwf+mkVKe#EqW-Dn_OR~qLs9RZ9e)jOD?Bs<>XHM`C)Qo_3bJFK!5$!@!2{wseh2@VwDy*Xz)BCveFqz5kSx^ z4LK4oep#r>urYwJEkem<3x!xtlXSLUUOOvi(=0hcRPUOM{L|~XIxV{}+M3z+O6C;8 zTB_?A;TM)C=jY*;*0;+S)ilC=gY#g5oWayBeuw5+d@Q z-vBa15qFvhd_s42%RdXPWN4eI-nWp7tk+n-!VGXH+w38RNVU+(fj)dnS#+Crut3{0 zycS^IH^=76cc7&XvkMD@zKxA@onac-wht32xL8N+ui2V^OTYA@jQn8oRvu3e0=2QJ zd(hP#M(JEHsN~4!c4vpraLUww4`AQsL*E6h$3azP6e|&HvjL=B{UsrPb(8~5YD8Tu zda1t+0kBm8W+_$qMx*VXO1C>Qs!z|TyHGiEwE??CsW13Up%8i~>D6rx#>sMqE=4~Z zRTX{1d<6hX56?cTrBBavfs+hYLF}AUCE<86jb^u2B>-!Fx?x&zq(lhuO?;`t4%r5U zjN~mIR8p-0^Q6}i#itQZve6WwPovCAsp4BZmcGfEe{fL3JfEmox3Uct28SC#f#d3+ zms<|4S4U9o5SY~$lc`e(qiK66&akB7_v%G)aU$uzcNc%W14=JHgyOPqcY%-egBlX^_gBRF1uvoncc-lSBOca{$r{fJI9|i-lYhleTI9+b%91PtQzadS%$MAR<6oCRfb92$IIzk$a9uGzZrNTxM`B>L?uO;&hX0D|E zFka&~qqoUj>T&6A7D%+DiVk8Ff?;yT+qAT=Sp)*iwUz6J8bXmg+3QQ$i5<3 z`Sa(GW$QK=Mb#hAI5ftb5cXeL#HHH+o(ahZP;dBLT4QA#$9D`$=tY`V<7?I+T4D4SAITmHG=ly2AyYXKxPW5e@ z!ssA+#_e~BOHkFgV|J@HR#`VKZ>?ihZps;@!zQSRdAhQh|7qM}Jzj$BHja<+-I1Rw zJkd6;Ke9sk1El=!eTu2Zl_)N+f|#gc-qGq_(FOwO2bu){GE%CsYLK?4r2Q`V3Q{A! zA4#;jK{EE5e+}o{$*w8&k1jO`W7+TQd9d8xo=e_ZOsr*hjer~LkW>w}@L5q2X7d;3+Y(zm^mRFR_1qE-Pv?eS1KLeg`IA9@+}M8C}!x!zQ3RV#|V z@#|$2LJ5nWS6%Ej!Wb@GLFEyY)66+(WU@Af-i3ILAY$dVaCP(R0<$;h1|Q1yDkxN>O7EJm)xG94@RogU;k5K>dwTD#;@8y$HE22uk7d!( zUULG8wC_Fu4)rsEpUI7V+5NgmL&~Hx=uxtXTF>&sG^pfiV9P!YLm;Ax&(!GP zfc>8}N;mIK;Ah;eGhuA}^;6f+0?waj7k3(6$*y%Wx7@2H1%uv~q4cFxC-RMPYS8bB z-p5>O?)n+Nn)AG@ySx;_(ZT*KG1DLreB9_)XQSeoAZm8xI#nk6afSLu&Jb20=*?Na z`DSCh>Mi{D(VIAp^`^_cOar{ofNFt?7I^b)^)tvLnwna?-`9{kJOncIq(dY{w}i+K!c?t)qI=Lw@)^eXzhj(4M!_G+H#( zjNQCsH3ElAB%=0=%OEg+EM$2MqEAuS1EwX4E(KOymD9B>kwtT4LrEvqA)MM*00u95 zJU*;D#U`!1{B1ZZ3}guAOGIXdrqP}`XDTWr38vq8+3#_9lM4&EvI~rvvp=9$lTFU) zq`Hb>VpE)GgYe(vCc3IV-mr&U9PxF|1{?9ve*FvF3g7;=zDTlJV`- z8pi^KMW$ZcL(?rMAt50-B;FX;KVI3$*bdqL@%o49BN5cbRsI7baIQaU@ zG@uDErdtw-qm!{Kb-)(YQrEwfbFRQ|CBd})y)}6eXj=4$_aUum-;QR62JFo5Dj|~{|t&d)=IUfRM+FMv*&_T7e6B!%zCoC$=1AkGdMUX=beLRctWb( zI7Jd5vw9TbE96}T*Jceib+CJ+0vGb-B~QMlf3Z@*sHKzJ>NY;fxz|5&edRE>#ZccP z@z$}c#n=qF6bng3>oy*H`HnTdr;)11aSi$dG{QE+RU^{U2iFbk95tN{v%_t=|5P^tgUTt_CK#nQhkLQD3`A5?x`oEsS#b#k{}!A=ch z2dl!&YedIlLlXGRyC7d%C`;dy}6%+ZybSCt7ziT%mC`EY%!k*vA=2ITdkRFz0Cxm(d(`Wr?zl z<*1DE=S*#FXh=cQoG1Qut=VQ$J%d8dqPlhsBypaAl5_0CZ^kWeyb3%sK<$?h+`hVag2>2qaGQ-^?Rn zmq|30>F(5G`5D=MK+9GXi_gH%JB&N> zlpI?e!cTRI>$MqW+n9)Yd^0XVO+`s00i9)ezxkOue@joZo{Xp_0?|6s|N8Ipdjrb~ zF2#5LUFypC-}H>1sLKxgIW=ZH$hx0j=v$CqIMCT}>DxYJRGfM8l&5|6H047KaX>rS z6p3g2`C~rm0e~jAc#Q*GvlJ@ItirEcxBg$-=yq{nARnWiam4PBmGhcZm$pcM>kQ9I zOR1Lid+Y9?vf7X1$2d|Ob~?c$m2+GQ&sWE`3#+uT5ewx58l55rN{wR|0I(X{ADLNI zSFwn=nfOnskU)}n+u(2$ecNjTy;9hjZ`bCk)iB@VDJ-F-3=->9;W@gdS z=ST^rnrd_Cw)VN*De@JZQOZ5F^i{3iFFVC+ov;R^4qT(P?%nsP7drnc=cENue@ZJ+ zBg;cIb|DZaJt?fdpMi~ z@M6a8SuqD8tH2w7a4zO>@xGA#w&JYZ1}KPRK?Y~A;-x0FR6_gsg%i0cGFc~QWrI@u z_*zuPA5stMt9+U8YIgIVC?K_*qe^%YBVP?!px=vu7EulHw6!vDtSSBj4RVU7^C z`NrVLg}4hUg}TtrTXt-2gQ$nWRGvGrt*QS%*ArlB zV3z)O@wl^%CrgtrB}8tu41?ZVIUfA}@wNZ-2>9w|D*3YIU-OOSh7QS#*1mV5&z><~ zJtV0(?kT_VYh8%iTWB486==jo^INk)F4JB_uVV`Eg(9iMBqAf(A42(VT|sFa{hgQ0 zmXd+s<7g)@*~*B+LQ4cMO6-6Rf_i+^6hJgp{9Qb#@{K-g+xg697^Pp>FPnhZ`uVbn zH9O`X;{vnmDs#n&Nz{jIf?xCf#-|G}HDmgElIB(;v-IrO$jfD{Zc3f*kKS3YQgc|$ z@4~(vaI-qHj2+@dgHn91v7W`hn;XBQ$UyVqiNXP8s~oJa`9!E8)cu8X!2cSapnDeI z;`32oUdyQ#JK>lqbLGc|dFro*jQpxn8s=$3>>6Qw+#!M9JR>um&jyeu#DQv3Z1-gb zNakr113$|Y1+QP}`rB_5pXe2|`%*iig9l9oyf!mhkInf1LFkSGM-LH9?o& zHV3+q`Bj&LEx7DjI!y`I*4(yD;<_j!MkD;}l~F-eleDJ}NA-pOo%kf5%mN0=xP=gz zzy}z&o5PhjSyO&xM&U@JQ@owq?KHld@x~-d*j|vs8=^9-$e3?>im3X1(72GW6x-j@ z+B!H{ba4xca$;fybae`a3ev*Nk*HsIJd%63m-x?uG{d*={r+h56dl0vqNw9l{Rt?f zh@g@#2U`8EyPSy_}_YyWwd z35PjTfKcn?>*C05M#r0mRwJE|KM$|5y^`n<_7jGi$s>Y8<0@3-WR8~6WUJ0;>~3@VAh047U)sjM+yI$8sS%LJc|dgHZvke>*fXTcY?3K^LjCA5z(epR*d479mHv3jc-uApftS=y_1Ju!7ORa$3 zYGow}!|2yHF4PE#-htQ3v_wyPv67AHoLGB#$sC@VF7}f%J&?T5BkxJU(a9VjL}RV4 zTL(Y-7i<2)nu9X&C)XF>jWlyjzj9YvoBZ)< zX0S^^^R1hx&x{yzV|GXBL)gvcjdS|?Z>r8_&TCsfipZ*DlF##da2-=xGU=)lx)-6( zK26*kx9=g*@jtD=kFQ@#5UC&=&xR|%^j7TQh>mdLV4ay(xF7YLXQ~jNjU+ne^Eo@O zF0<&n+jaW%_36V8KG`Yaj62mXLEAUC9uJQuCLgp#Ii-28j&1rHk~ynf)^m_ha5cR9mzOMb|API z;iRu_P^u{>_bZauPu*nkmFnNpFWBT?cd_q42`p4(U&*R;&Mdx1Lmu~vMxU#F%n|E{ znbOvdT9Mca+I+xz-p^)dV)M_gC|fZKknYrzr#bC70E;l=p~JgXYonrluL7^4GE2l^ zJs|u*al4}a#QSkc?O%=r`6k~Hck@5w^o^Q>DL0ISi~$An7NIiOcp=KR_?@Um?u{Oe z*P98_0Nc>m=rDf}*@#I>GK@dka`9SiaLvsnopv4R|99zD2`~JfIqXm7Rxgt`5KotE z3MDwy1@zX*pf!Z{+y!cXaWuP$EtLJ&k`$KT%Nkz!m?K|6G3weyET8l~9sdW3!+?B*ma1q1f|Znu&+6o*c3S@kG}1{w>J%}! z>lST38>Gc5MW#z>C>wwiRK^lMsJ1Ma9{)Ul3@-jn-_F=(XjN)F8dpH-O>Ab&f5pxx z=b{aQCU>k$7ib>gdHeW?ZH8HzziVd$XD)&{V`e)c%`D?uKVpuL%Kl4*O?{b5_OU<@ z$C*HqVD(>HF@kt)`5*5~3|LHQwQ1Y+rSQLgOQe-iz-}wHaIw?9TUP*Yx*8CUSXx9E;e2@k{SOi_fJMlxH``_7bycXC$eB0U0Chiv?lo)p+ z%*dn=4_^}J&Mj0++B=wK^=m`EEq>R@csHj*m9Nc*<_!{_NoV6FV#(nc@(`Mip%D@~ z+NHCd$QI^g*a;kF9XVe4oT>R2ti1&pRvhsSeiXN0_lQHdEQ(`BWpxBG#dKQ(|M7eb zNh>;R8~D;u(6hSBJOr1ktDB=!*bGk6Oc-6|*o6Ayw>#{6LP^F}9&E>G9Z;=8p8R^0 z9l{x(qe|=$d;h37M3J>I-_DA#c-&gBttK_|=NC`DdagXDx*|nHK|r2r83D`rynS8j zmJWW-djXM|P#XiA3aW=obGCwfkkUzpy$QFrAz+Km6anGvY$efX^+G@xL1tZQcyI`a z%TK)CIS_s%Mb{0-@OF2t-wRdrD_tw9|B&S3YwCqdTidP^*YIAC-)LLP%4w^EX^b^_ z5ctQwkLyhf81(zpDOz$d5QgW-OP3bXW?-GrQ6w=@M0w=G(B%1$@Qg$pu+CGHQ`*>G z><)g8_W1tV-+_ohXucJPT^Pd+aPY-&O}tdZ$k^j9Pp| zumu3pf>=vxQ}Tm1LPn1-{@vL;J&mf%nUHi#d>GwmJ8QR1W%|xKlflYUPko<)gPZ$e zB&KW6HK@0jvK-dKx0neY9sZr93N=d6)2)sg)D;0+;u{kEODx6n(?L z^J(Y@F65BYq_(0T#@b*!-pVv%{%xmLAd;7CZAwqQ$KZ4KnpuWG34V~9YN~~MAQd7t zr$oHN0#ZugT*4Jt-=G0`D_hDO6XDAK)%78HgPfJPBzyc`b^k0>lg{|KSHHVaDsj8} z7quz#G_eW2-`>A?z$~*`Bn@dx2|$HGCdMU|eiR}S3=3pd-zb}zP_ZvK=@>~PuZNi% z<`b`73L)OC_f=4#Mmc;n#1h#yoT)jf;{>P6_s<~k_=`^1UAT@|rno$LS6)6gBvD_F z+E@>+)YU$_e(L}5dLjI_Skm(L7ggwzb8o?oA%u3xBQ&^RZF-1`AR(^>eT%2MSR@rF z!HKraGDCLMGq!|(DAb6I%WX8A5#yWaYcT4#&^-5ZYqMZ!Zh=Y5-7{%Xwk1HFn zRU(V75)>CH*P*tia84UhzsA>(Sv?RM&~}eG^fZv=$aU0E%nBv$oSQ~ zWckcrlZWHuqYa3~3?B6bAvn!q1K>LW_dy>?vcZtqQa!vv-oiv_lM(KV7ihP6kMPbw zKs>+%o_uc6NhJB=iY1eot7JjPG3^KJ48N$ z8Rw$M!07{(YITP*L?(Q1BHWk#*+Fwp*=>ejlp*O2l^*ZMv<*K0N)H67?0Yk2Dk2J?j}L)0{h7tK>%o7 zQ2aJmy#VS6PaIv7(jW;dT$GS3HzoYub1We#_fEZfXk)-&yUr-g>Z^bLXLG6EcP-A3 zzCV+)gB# zVNQQKZ>R(I>o2-5W>MIpFB5v+NO@hq!8!zmDzFKNorc2J#UOvRs-I^N!dq1bEn9Tr z?wDM3;(mmaPlDW%nhvDl7O=rjIs~EUWEp*r&{vm45wXjPv5cF%`pOwOi(Zvo*Td z2MTbi7;jVYqEq>%#U1LmKIq_+f1i7_u8l7fFk}DuS(g2f>6L9|$>;hD1Dn;PXOR)} zM0wjL)#$$1v2`p0wwd2e=S{bdK1~GHn|)8BsJgv4-oj8U-At~0>mWKKOMVMp9I^Kp zwJKbPyQ`dbmtMqQgOX5`7c{}GEwX`Z7XkXp0EZT)5VAZA!}oOho8P7Pxl~-C4X|^b zx1A66-6TE|hxzv@UlTwT-ka@8A*&A)6Fr9S?>1bQ>hYXw^)14n2l}u$Vz?qhZY?<$VCB~s>5bupQeilwneIoE{+c`u0}giCS$o&N?4-kqMIQu^yr z?_}?LC7yB4@hhrQpEW~rj%gx?HF}i)t#NFw<1x0k$iitU0R`Wms?FJtG_HB?U_Sq> zl=t=HOBg+>`hA-@l5{L%W>Gz%AhYyf*DX|iT=$eazz&K!Rrr(AYOHbLd){d79=}2r z8cY9Tpr;yYj>A{)EI%G>?s9DpEj1T)rD}HfcOYe(DYI&~wDTgeO=;GOf?vX8zfE2n z^g{X>6X6jO#gH=RKXJWT=Ve*5UJkA?WruQ-IOKS*+vF}^Zg#K@uIx49!wZo0+bZZf zKUvmTl8wjyM^PjFw_mibt?gP`J7X#~HXq+MHzm9?j1_^E57gbYLCS~}+!T{UE<7@h z@7KS`!scwr=iqHVwL!;d z5$}6@H;k`mTgWn-KL3tsX<${YYmMN2zEb6q7hS7sfF+e`VSQ#w+t8V+(=EnB`SFKg z`I?~voaFFf0Inl!7%(<35yT^X7(<;Q$2k-)SXhx}4yBw!!LdQHrT|;RNuio%VQcG8 z$P2*)ZC644W{j;P>d??7)zGN7*3huMEPF#GH8q!_2mPN&B_8NqW^26 zah@+#@pyLUD$ppTlZW@;s`A|OYq$cQ&$7YL>ja68+LB&tSK-6fKt=LH?~*~#PvuKI zez$h)*RKV6$o3&1&s)Q0+j>dtev?hdUc#V|pRc4TEd|_ElkL(1O;u}0px^sZyaDtB(KZXVFt&tM3jDE2 zqi-Dlp!0EzqcHi5;-Sua;^EfBu3r{V?RzOi2?eH%X;0+~f(*=$Uw=t+PA~GTIZ+&f z1WhyK8k+mLqWa%a2e9Ow-}ZGi#+z+es+Q$H>bIy7RjEs3C|sgX_vceJH4sf^(+ehl z&EB>2iTKE;K&f2nL%m*yZ$hBbTjONa)5Gy$^GD;vvXy3R6>le07g@YjLjtRxKXTr? zB-DkCHY*a~z1SK}B&qjrcikGnLmuVY;#0eJ>&NTx$O-Ca9RQ}HO~O&yfDvfdDU_4z zA>=@Re704cw;ISX2|6>mH{Dq%B{6IwMMh!?6Yh(|6Q(?x#=pBng^WHL}vJS5ORr5 z6PP3p$#eFOoB;8=z&F-Q|2N0L^{;Gl3r+I(oYs(T4!lD(bf1bKT0L~vJIDkFuU>#q z#-cw`{u)|7_^t5r%BwkJZk(3F{52<0?_vgRrYt4mK*Ce0Y355wbz2qMHuB`QM@(Tx z@Q3>gl_CeIRw^F!F%D(4xVsKRt$FYCDJ-}q%Fwql*@IQutEGf{^JbE%$wxWFo9GTz z-ZNNhV`C~(!)kOot)6RRCxc!#(vBRPzc{t^=3;ABt4Y_li5(|ZjzO5j*$V%4ix){( z`&q=Wd&#po7MmsK1;NBk&Ob7`QFKc~pEeq)7;0q)j?in!YOK+eqT|%gD(-K{Bm)-A zyZVfYKkNE|o>NS_Gky`a=uN1pg{12Z-eZc~m2UT-ZGT({&u-9otD6q<+##I|n%_-6 zgmgraI-zjACaq_1L+>ZgCkC&=Go?m9FZ)+m=M-uGLMQICc{Lj^3mS4WT!+!`Hj0g#R~^{?RVGQ&=UZg}sgE<()r#`QK7G z&kdu{&oX;{yjd7DyKDE=+R@6K{m^Fg{fqg;MjZZrj`Uq;akD_w*z*E-bk0}o7H>D8 zCwis>(TM1KE>SMW3jaPp;EwvunVCYPUxz29C#@1;xlj7rFfGD>Xyjsy`U{;33bHxi zSsRGhE-ByR(m}%T;YGqKQpQMLX}9*K8my*uQu1!B3xm#zrcIv){8cq-1C@d(alCS< z*M{wBtt_4r-pKZdSDi>tb1!m8Z)<@9AJQ^sA2m>ub>F2<>er7r#&xA@XftPY4gIlD zjoo31!}G)osXiUL8%b~0M1e2o;^ad={w&CUMd`RjaaO7ezOTUQs&8FOTp8!r)g`8- z_&*n**;420H4N_%*4@+ixq2D8abPJ5C+{ap;l(iP^)o8 zU0(nBB~itSEf?#YHWk`JR2K4nTF33p`PP`Q8h&;!#+ar%`GSVtPPuubRzEtBD93)* z95pH>(}TVsfUSMh?O`m(4p^zJ;U&w;j+_efkl6a(u&ZwINh%G;tFJnsyQ#nP!sp`1 zDq|i#Q~2&%7Pcwqm=N%$-ge1;0qV_|IP!h~(n;96xjfXcTvCY#2SWX-cchzVBdLbV z`!^FSE9lmHXZ~|m;mf5Tx`Q{8bq@bW)g6~gvI9^CFyFOKl`ztLl_*4qB5^I0r}MfW znh-Tro%LL5JaV11XTmFy4tE{ItA+EFpAy==02fxA2DRrye&|m2N%un1i%3{XEd8vR z`0_u^HHG7pxIb)`bz5&m}%M}xQA>3PQGNr`=%L>K4Uh_SMNr-F7TQeWL z(!Ws#3cbbf|5{x?$ac9Rd3U0tR>IfmGoKHf8^&e?jdb@2O+E5;#-^Y5Dq0mJM#}%G zp!z{go~^b%V)fDV9+dO}K3p9)+{ndF|G`8}o;sfGdkt3Bf&Z#_UVe%u@fs9;smCi; zY#H~YAUcTBx_a!aYPh@xwpfxrXjzUgDz6$~Y@kx)w+59kI%!YZkYX(yIWk2O;rpx} z9XaMX@Hr>bNR2w3HNx}g*?y64yzb@CpGbA8SJwGB->aM8mEYTv+c#3@#w&_?!_Yk< zDyUF_Z|yh^KdcZRrYeQ^zS@4hA>GDmN+1@i0A+z~-6l3so_dZwPyYPpwPN^%AF4Dim%@B!_m= zDL5~68mkZrDlFZ zhu6Z3A|a%dk^0gsc>n3uNRD+Frs+R2u9>Wi^nWy+by$;c-1bLz3DRW|3Ian~N(7|4 zo6#esloo!1=m6;sh0!@m7%4hpjAnEw-AFgj&GWtw|M3SN9=q>d*Ei1dbDGlClKl~0 zHzL%mrmr z7u_))Xf%P3f5Cf5l$7ct(&|8qRZ5u#<}p4Ov%aJG2Y~9~7pbUtYKTA1Ro1&elj#>+ zjA&Z|YA8XA*faMIN28$oe&0zxOVl%!b(GxvZaLF}j$V!c%9uFey*q8h?N#or_my-i z!am{whk6dhYuCKIh=tWJR#vhDwd+%tb2NH{VWAHoH(^0xG_rcCdADxw3P-{AGC*~Q zgp_9{@T_9nu2VdX%Es^1Xje`3qN!ZW{3SJU2(9Pjt5!(Cj(YTkT=O;H)Su$(WnX7) zH@n?IUf-?RCc%>qidp&5B2WQDbq4{J;=uiTICMe`kExAmREH;YzvhfuPYI2A(fxkQ z$CE-BHj>Qx-npH$MqRmNFW3IB+d40N!hH=p@@>POa72jj{&zTwDn4)N^;eY==%JXQ zw}1gOc<3#h@G|O9f5xMstsl`GTcI<)sJ6xL+{v6-12V(JW_>MWA3{txz?KfLB|gC2&-JqTS$^0hXC#{) z+G}%4dGijHwoNGYkzSN94xW40u@-qjsR!ZvB4iAVV>2`kKFR4;}a zo0|LYOLsWX1@Q_0oQ~cjuI`8xF|$l~1d^*(WJ7mUXk6=DOGvqnX8tpNwB*A9d$VVt z{pZjviI940VfKp*wkWBU4brcqb)wsxn^UbO6gEIledgLYa9dyA);2fW9Maw>ite9# z35$*^X2V(Eo@wn*4dq3j0E~Ip0m?dF;&m05Ow8)1(j zb{WZ|Gc$iGBFRS@QtVHWzTh>$Xt~jEAGP!I7I-oAxs(P}PI4IWxE+~7@rwRs1F(yx zB-OIRhE?+Oot^xyvpX03+(_65Ln$rh*^Tl&BzJf3P-eCO+tD7=4)|*#jk0_y^qJl8 z7O+jsNiaDn>-@xKtM4*|k(_24{Ff#x2rNFt+~7Wi_0|ihMQ`k1z%hH`GsHA_UmX9j zz8|!-7?PKieZTr0rQi*)bji;MIXygmp`|{uHkccCbOV%X4o&>+o`pvPYnK`BGQV0L zzgc#EZX5})aWHOi6thZ8$n59OpBJ_lXZtteT#G*ckP~{b z#BnRWVrurZjMS;6og+Z7&u_fSY)c4b=T7Q*Yk1PWz~Sct9D7=knp{<5#$gMOGjF*B zqBW-u01ZLSK7bB!HJhlgrEdk{V2VF~-Flf(Lr=rFuZ5o$GO$tV`LI7+_ zsMgu6NF%LpI(7Ypo#`w=)njLfm671%=nEyG-d`mfVJ{Qb)Q- zVm+7Lr0m?2&Jwb|=DbwGO{Sz=*6q)WZ#Mext#}_{b~85o17iY^uDt=%9{n3>foN&W zY?uO^$K(e&aoC@_*Z^SOMbNyW6alx zv3GdY0!>p1goLExavt`2v?D9(BmtsL%m+ZLZPEQ-uQk()KTNfBGwId zf0*dn4<4w26ejioLzYfcw`5wC$erKy_;7{!U3KTTgo1= z03CF#$H61BQI;Rf=TWfdzpjk({<_Bq0W9S9n<>+eBRmYN3vO<)$HJ!7pnXS%)jQ;q zpN6-o<&qg`i%C&)t-4M6Km9%N4IxU6a^LT0gi$(3jvCYg^jRi*z-h4a*}i;|V}C6@ zC@Rd2;dN(IHvU3;Xf8z@u+7Rb;grKuy89Ku4(U&PX@>g@q9bv?rQw#S8uTgSKIEPt zfgP_nNaczpZ}?!+#TS@hfEWLf*=yiGJ6ZPD0QXf6Roqc703n^kT1X^6{d)0AE%!~w zv^Dv8aF_U0LlYMGFY?wOX%Zlz8hh2tbdX-Lur#O)pB|0*IT`0 zHKu_Jml@E=B{n^lYBzc%#6b~v^!LuJ``<L z?{!A*=%%BFH*Vtfl)RK86rbEeWYmeCuggqw(g94@%#=P&`Dp13pCGnn3Jn(K{Ycyi zcy9(*kt4r>p^q{XERZBAEAHIWZrLiJ)I?zFsLcn{oErWlA{N@T&}5?4Y08x4P*TY( zx3>3o@3tRG@_N#YEy%af&p;wQ*ViQcR4C+