From 88f1442c418d2ee7dbab57dd8e3355664227b39b Mon Sep 17 00:00:00 2001 From: VolcanicArts Date: Mon, 14 Mar 2022 03:57:02 +0000 Subject: [PATCH] Create project from template --- .editorconfig | 202 ++++++++ .gitignore | 7 + Directory.Build.props | 6 + VRCOSC.Desktop.slnf | 11 + VRCOSC.Desktop/Program.cs | 15 + VRCOSC.Desktop/VRCOSC.Desktop.csproj | 17 + VRCOSC.Desktop/app.manifest | 23 + VRCOSC.Desktop/game.ico | Bin 0 -> 47576 bytes VRCOSC.Game.Tests/Program.cs | 14 + VRCOSC.Game.Tests/VRCOSC.Game.Tests.csproj | 14 + VRCOSC.Game.Tests/VRCOSCTestBrowser.cs | 26 + VRCOSC.Game.Tests/Visual/VRCOSCTestScene.cs | 27 + VRCOSC.Game/MainScreen.cs | 32 ++ VRCOSC.Game/VRCOSC.Game.csproj | 11 + VRCOSC.Game/VRCOSCGame.cs | 22 + VRCOSC.Game/VRCOSCGameBase.cs | 27 + VRCOSC.Resources/VRCOSC.Resources.csproj | 11 + VRCOSC.Resources/VRCOSCResources.cs | 9 + VRCOSC.sln | 47 ++ VRCOSC.sln.DotSettings | 538 ++++++++++++++++++++ app.manifest | 46 ++ 21 files changed, 1105 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 Directory.Build.props create mode 100644 VRCOSC.Desktop.slnf create mode 100644 VRCOSC.Desktop/Program.cs create mode 100644 VRCOSC.Desktop/VRCOSC.Desktop.csproj create mode 100644 VRCOSC.Desktop/app.manifest create mode 100644 VRCOSC.Desktop/game.ico create mode 100644 VRCOSC.Game.Tests/Program.cs create mode 100644 VRCOSC.Game.Tests/VRCOSC.Game.Tests.csproj create mode 100644 VRCOSC.Game.Tests/VRCOSCTestBrowser.cs create mode 100644 VRCOSC.Game.Tests/Visual/VRCOSCTestScene.cs create mode 100644 VRCOSC.Game/MainScreen.cs create mode 100644 VRCOSC.Game/VRCOSC.Game.csproj create mode 100644 VRCOSC.Game/VRCOSCGame.cs create mode 100644 VRCOSC.Game/VRCOSCGameBase.cs create mode 100644 VRCOSC.Resources/VRCOSC.Resources.csproj create mode 100644 VRCOSC.Resources/VRCOSCResources.cs create mode 100644 VRCOSC.sln create mode 100644 VRCOSC.sln.DotSettings create mode 100644 app.manifest diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..94759365 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,202 @@ +# EditorConfig is awesome: http://editorconfig.org +root = true + +[*.{csproj,props,targets}] +charset = utf-8-bom +end_of_line = crlf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[*.cs] +end_of_line = crlf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +#Roslyn naming styles + +#PascalCase for public and protected members +dotnet_naming_style.pascalcase.capitalization = pascal_case +dotnet_naming_symbols.public_members.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.public_members.applicable_kinds = property, method, field, event +dotnet_naming_rule.public_members_pascalcase.severity = error +dotnet_naming_rule.public_members_pascalcase.symbols = public_members +dotnet_naming_rule.public_members_pascalcase.style = pascalcase + +#camelCase for private members +dotnet_naming_style.camelcase.capitalization = camel_case + +dotnet_naming_symbols.private_members.applicable_accessibilities = private +dotnet_naming_symbols.private_members.applicable_kinds = property, method, field, event +dotnet_naming_rule.private_members_camelcase.severity = warning +dotnet_naming_rule.private_members_camelcase.symbols = private_members +dotnet_naming_rule.private_members_camelcase.style = camelcase + +dotnet_naming_symbols.local_function.applicable_kinds = local_function +dotnet_naming_rule.local_function_camelcase.severity = warning +dotnet_naming_rule.local_function_camelcase.symbols = local_function +dotnet_naming_rule.local_function_camelcase.style = camelcase + +#all_lower for private and local constants/static readonlys +dotnet_naming_style.all_lower.capitalization = all_lower +dotnet_naming_style.all_lower.word_separator = _ + +dotnet_naming_symbols.private_constants.applicable_accessibilities = private +dotnet_naming_symbols.private_constants.required_modifiers = const +dotnet_naming_symbols.private_constants.applicable_kinds = field +dotnet_naming_rule.private_const_all_lower.severity = warning +dotnet_naming_rule.private_const_all_lower.symbols = private_constants +dotnet_naming_rule.private_const_all_lower.style = all_lower + +dotnet_naming_symbols.private_static_readonly.applicable_accessibilities = private +dotnet_naming_symbols.private_static_readonly.required_modifiers = static, readonly +dotnet_naming_symbols.private_static_readonly.applicable_kinds = field +dotnet_naming_rule.private_static_readonly_all_lower.severity = warning +dotnet_naming_rule.private_static_readonly_all_lower.symbols = private_static_readonly +dotnet_naming_rule.private_static_readonly_all_lower.style = all_lower + +dotnet_naming_symbols.local_constants.applicable_kinds = local +dotnet_naming_symbols.local_constants.required_modifiers = const +dotnet_naming_rule.local_const_all_lower.severity = warning +dotnet_naming_rule.local_const_all_lower.symbols = local_constants +dotnet_naming_rule.local_const_all_lower.style = all_lower + +#ALL_UPPER for non private constants/static readonlys +dotnet_naming_style.all_upper.capitalization = all_upper +dotnet_naming_style.all_upper.word_separator = _ + +dotnet_naming_symbols.public_constants.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.public_constants.required_modifiers = const +dotnet_naming_symbols.public_constants.applicable_kinds = field +dotnet_naming_rule.public_const_all_upper.severity = warning +dotnet_naming_rule.public_const_all_upper.symbols = public_constants +dotnet_naming_rule.public_const_all_upper.style = all_upper + +dotnet_naming_symbols.public_static_readonly.applicable_accessibilities = public, internal, protected, protected_internal, private_protected +dotnet_naming_symbols.public_static_readonly.required_modifiers = static, readonly +dotnet_naming_symbols.public_static_readonly.applicable_kinds = field +dotnet_naming_rule.public_static_readonly_all_upper.severity = warning +dotnet_naming_rule.public_static_readonly_all_upper.symbols = public_static_readonly +dotnet_naming_rule.public_static_readonly_all_upper.style = all_upper + +#Roslyn formating options + +#Formatting - indentation options +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = false +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +#Formatting - new line options +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_open_brace = all +#csharp_new_line_before_members_in_anonymous_types = true +#csharp_new_line_before_members_in_object_initializers = true # Currently no effect in VS/dotnet format (16.4), and makes Rider confusing +csharp_new_line_between_query_expression_clauses = true + +#Formatting - organize using options +dotnet_sort_system_directives_first = true + +#Formatting - spacing options +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false + +#Formatting - wrapping options +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#Roslyn language styles + +#Style - this. qualification +dotnet_style_qualification_for_field = false:warning +dotnet_style_qualification_for_property = false:warning +dotnet_style_qualification_for_method = false:warning +dotnet_style_qualification_for_event = false:warning + +#Style - type names +dotnet_style_predefined_type_for_locals_parameters_members = true:warning +dotnet_style_predefined_type_for_member_access = true:warning +csharp_style_var_when_type_is_apparent = true:none +csharp_style_var_for_built_in_types = true:none +csharp_style_var_elsewhere = true:silent + +#Style - modifiers +dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning +csharp_preferred_modifier_order = public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:warning + +#Style - parentheses +# Skipped because roslyn cannot separate +-*/ with << >> + +#Style - expression bodies +csharp_style_expression_bodied_accessors = true:warning +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_indexers = true:warning +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_operators = true:warning +csharp_style_expression_bodied_properties = true:warning +csharp_style_expression_bodied_local_functions = true:silent + +#Style - expression preferences +dotnet_style_object_initializer = true:warning +dotnet_style_collection_initializer = true:warning +dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning +dotnet_style_prefer_auto_properties = true:warning +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_prefer_compound_assignment = true:warning + +#Style - null/type checks +dotnet_style_coalesce_expression = true:warning +dotnet_style_null_propagation = true:warning +csharp_style_pattern_matching_over_is_with_cast_check = true:warning +csharp_style_pattern_matching_over_as_with_null_check = true:warning +csharp_style_throw_expression = true:silent +csharp_style_conditional_delegate_call = true:warning + +#Style - unused +dotnet_style_readonly_field = true:silent +dotnet_code_quality_unused_parameters = non_public:silent +csharp_style_unused_value_expression_statement_preference = discard_variable:silent +csharp_style_unused_value_assignment_preference = discard_variable:warning + +#Style - variable declaration +csharp_style_inlined_variable_declaration = true:warning +csharp_style_deconstructed_variable_declaration = true:warning + +#Style - other C# 7.x features +dotnet_style_prefer_inferred_tuple_names = true:warning +csharp_prefer_simple_default_expression = true:warning +csharp_style_pattern_local_over_anonymous_function = true:warning +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent + +#Style - C# 8 features +csharp_prefer_static_local_function = true:warning +csharp_prefer_simple_using_statement = true:silent +csharp_style_prefer_index_operator = true:warning +csharp_style_prefer_range_operator = true:warning +csharp_style_prefer_switch_expression = false:none + +#Supressing roslyn built-in analyzers +# Suppress: EC112 + +#Private method is unused +dotnet_diagnostic.IDE0051.severity = silent +#Private member is unused +dotnet_diagnostic.IDE0052.severity = silent + +#Rules for disposable +dotnet_diagnostic.IDE0067.severity = none +dotnet_diagnostic.IDE0068.severity = none +dotnet_diagnostic.IDE0069.severity = none \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..165677d4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ +/.idea +*.user \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 00000000..8824b1f4 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,6 @@ + + + + $(MSBuildThisFileDirectory)app.manifest + + diff --git a/VRCOSC.Desktop.slnf b/VRCOSC.Desktop.slnf new file mode 100644 index 00000000..db188999 --- /dev/null +++ b/VRCOSC.Desktop.slnf @@ -0,0 +1,11 @@ +{ + "solution": { + "path": "VRCOSC.sln", + "projects": [ + "VRCOSC.Desktop\\VRCOSC.Desktop.csproj", + "VRCOSC.Game\\VRCOSC.Game.csproj", + "VRCOSC.Game.Tests\\VRCOSC.Game.Tests.csproj", + "VRCOSC.Resources\\VRCOSC.Resources.csproj" + ] + } +} \ No newline at end of file diff --git a/VRCOSC.Desktop/Program.cs b/VRCOSC.Desktop/Program.cs new file mode 100644 index 00000000..4b7691bc --- /dev/null +++ b/VRCOSC.Desktop/Program.cs @@ -0,0 +1,15 @@ +using osu.Framework; +using osu.Framework.Platform; +using VRCOSC.Game; + +namespace VRCOSC.Desktop; + +public static class Program +{ + public static void Main() + { + using GameHost host = Host.GetSuitableDesktopHost(@"VRCOSC"); + using osu.Framework.Game game = new VRCOSCGame(); + host.Run(game); + } +} diff --git a/VRCOSC.Desktop/VRCOSC.Desktop.csproj b/VRCOSC.Desktop/VRCOSC.Desktop.csproj new file mode 100644 index 00000000..38517025 --- /dev/null +++ b/VRCOSC.Desktop/VRCOSC.Desktop.csproj @@ -0,0 +1,17 @@ + + + net6.0 + WinExe + VRCOSC + game.ico + app.manifest + 0.0.0 + 0.0.0 + + + + + + + + diff --git a/VRCOSC.Desktop/app.manifest b/VRCOSC.Desktop/app.manifest new file mode 100644 index 00000000..0b34a847 --- /dev/null +++ b/VRCOSC.Desktop/app.manifest @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + true + + + \ No newline at end of file diff --git a/VRCOSC.Desktop/game.ico b/VRCOSC.Desktop/game.ico new file mode 100644 index 0000000000000000000000000000000000000000..bd276d67937d3fa406189963d2faf14287a9eb6a GIT binary patch literal 47576 zcmeFa1z1#D+c&-`1q?tb6H&1h3=|7cu`s|u6a(x4Ns(sgnjvOjhVEwQ?k#!%R z7MFzvRz-#y@ zyfc3vb{Gc7DTME$_TT*{69KT};eh2-^sI<-eC=6}DDs1FA6uK4AX~e`x^bP}#s-}RfL3&6Y>)Zlov~m~$~E#!r&+=iV?frm z0_Z*G=cd3}-IV?=x|ix71^g{sfCHQtFEg|8Xo8I-)xic!%<#ri^8MHQ+1s|Fc|wh% zXG5ot<^j=7_Kg6MF5bZ5i7vpay#OIL7M&UHgbk@=JeJp+g8=}rumC4xXHA1S#uyA7 zXdb;x9Dx1P7r^d`HgJ1k0P_8b(bFw43)}Pj={n@?V2k;Y9QnycCI!wK`T+kFHi*Mj z#{!VF&ER`F!1ghGSJwa(hq!*}uZ}#?SrCkY>2mt};f_9-I}V5WTG{V%H^qg!>KlG` z)-j+FG+qLNrY;~E8iHsyTUt|=U+Y9u+zkLKm_c9KFYBN*wg#hEm}A}+_ys<$gq^{` zu4<8?1n1;vJf*78+ikFkst!J-iU3f?1ctJHdH4V30*Vgn;KH!{g&1bW0vprsTR!|Q zA3oCo+Yo#ny^Ho4xK&|rJEHGDbS!Ys`cLgM^zr|Ve~^x#)&oAUzMall)G(R6q#I)-}q!BXH4azzcoLj=1!Y?xdI1MW4b<}ebG_<1#s2X z1Hn!>kQV3Cm!Fg1lo{17RB8d33cTj`#=j!=V{HDjQPa^1k)LS>K9K-#X#pJ6U((lz z{gW5K;h8RQc={6VU9f-r5)d`aL8wLcT#{p7bC&Cj6WqJD6*|x`wEzA5hsKrsvl8H@3HK%q65Ov%;Q0D*&oKe10aW^4i}nok z8SPz&E?Uo|=guGu_Znmn#{tA%3diS1G#GzReP*yHeqfu8P4gF5EpI^5qyU%aPV?_- znS)?kv`5;|$FqN=2ZC%|K~-)E-0LA9@EV;l6fHjxWAh&JFgpd$7da%Oq9A}}!`|1r z3yW~*SERg*nc|P6Xb1@gUV{ z803<{3p74D$54;-JIdy*mmB>op}=Qdfs48&2((7$iXDAybQYj}746SXYQ}V45RKB5 z9C!~0&p#)K%L7DO)uZuWW|OArXKl6{4XX_Y3xiBE(_G9hhYi69W&e_{29?ETE0L2gts@G!VGI;>Y4FYUl`e8|K zS`^@_K?Z@AUho{l({UrrL68p;oCmiTmLQfAM5oJ`ThwQU#(|=^BFKXq@Y3_1De#Sz zOLvQ*PcOBs0LuaISv<_VsAO#lJV%MZ$J7}hTxe{BA7MuGi{>H5EnxmTbaukA(KE$K zSs*1Q!I!_k@UXXXUy z66iDntx5E=*#(}Hh+ZrO+8^p>z)8y%_*h!dVjXR7p)(TwrOh;B0hTx{Je2a>)5ry` z7fXQF4FTfww{)RnrJwWg9z!Nb_Yuva#7vMMlS=2&;R!sG;29WXYcU;-x07Rxk7%Ui z`(deNL3@IU4t9z>{KBR-zTTwzLD2&elPS1^jJv^W7pXvbO zO9K#vx9&?M+V6r54Nd>c?#aO_K|5Pw3MJ50&j{k5A0Lf}XdwFl*&m1}B=1lMcaR;C z2*);pW9!hzM&o-K8iNc^$I`YOU#`YfPsZ?AAk_b~@?b3eZOk4oJBxP0vzLGHfM}pG zeWCpQp?)GA^~E{DeNOL}u?cFrAkNtiv}OkwxoP3Bxvtnh#z!AwT8c4kXs>%(S?Rdx z8_qeZAsX}h3xf~DgQt-_AgJm8ff?Bl4yrFel!G@vw$as#Ztq1K{Jvto+NDIv&+NY6B=(Y*8Yh2(n8QzZIOGQNYTzi7-ctbn} zI)BB^7(dM=0z)(cZCrT0Ep4^kai(QtW5ZG6OQ=tpaNmdLi-S6}wY1^hZ)yahz3jmI zeE-?+&2iMCo$(w2JLo{Q!-}d2z04$$ein&|Zar=4^WkMo6oFgJgxzXYH>O`u2 zZEgmszOgc(W~3!1j@FU%h}NDc2zoNGnU;S%_MeHq2eVik08EwOJxA?C2G5tTq08p_ z68S)H<}%QgwE*@Q=*s)^YyZ!#>Gnqvz$P&qHiQXb9T*pE3$c8R<(Fm#uNm#n-=XJ+ z=#2}G!-df>DGZp+@B7FOTL+soY{(C!|3L@vf0`XO5A6RN|2Bb-SUdQ}Tscw1UD_SL zzPLGDtn7Wr-s<+C%{3oGmgRiOWiIVW{%>JM7TQj-5fjk%o8~_oId|q9b=2^7e2pVM zEzmbAp7<)#&$cs^V%Z<*Wi^-_W!GC&=u-9iotH;>YuK5*&zXzL+afV_F#0cJIUV|) zZf`>R%OPz|*jHbT>H4k_n+mLgpv`HG19&aCCqTao`Cg8&Icw+w4-*3r<7)}>vYp3D zs(j;$>SGRsi~^?2wvvAu1G1ri*rOX^pL8y2Vpch(8kh%B0Nw!y93Wl$XK_-?a^chY z2BdG$mWqZp9kfZI&FiFU^~c!Amhge+WJ_&5-9}093}MMJoVATQ@Rn{4pqllSmi-{D&jWVis=Tpo@9K zu&b6Qoo~cD@wp46J#T*?+F^K)zxgRYWR7h8XjgyG^Wh`J5c~s!KHdIDHn-QyXpo5S zMLqzMfhnT@vkcI+oo*EtOBgnyKwJKAyu-Oyg?0m-Zvx%^Vc6{qIWv01H^R`}+5z<; zh>n5qblyK8sZ&6pX$h3UcSPSSoAj%%hUmWz1dF2Wnse#C0^}Rn^CWdQNZX8Vb0gb} zK^xIxG!&0;8z>p?QG1f#rFC z)gfjDt*+44M{-B+pxBnDp#$AELoqN0ujn(f*AO0L`=if@Hu@g*;f`J)(JPGZd$_0( z=Es7%9A;Jla$IMvG98D0p`YS1jHSAaZ16RV>vq$c_rnlw z(MGYba7RzNAHtxIFxWqQNw+D{`ivvT(ES@C)MH=$7+N-|>uwsM4f|O7HywAL`&u_YD|)qaM*lJ`b|xk} z5%S|>;0Y=s!XBoOLVr>J5NZMz92GC%VeHj_=(^G8-x2zt(4T{{Me#rS*l=${dVu7Q z?jhO7!x&%$ls6grdVkP|bAV!f$QQ24DF;O8TM?l?`NH*65a9A6)Y=A{Nmu>@LsVHJ zMtvR2<84E!qSJ?Sg?wi>81F>u4aF_d8bC5e@y`e+Z~7j9dS9Fqh;;U*$L8iS&g%h^ z)4Q@N`o4tLkc*BJ@UyZ6i7s|}p;p$|Y`x|m^y5DuU-0dMK#E%u@?l*eUbJ@5c!&=q z2jmMf{9`A`JHmnV9^pcMKk|p@&qE)mG&u*P1xC}qN0srJ@b zORe`G^iu|_F;~eG7&XS-$_vVf_}uXiS)%umoRQrBm|=`b6pT@X%14{@b$HE z6v65k@*i{=AE@6yV1*T4SYB(qLYTMRI00h+nZ`T@1G-Kk`sfTqdVq8Q=^)yBJq+z2 z?Z44w(09><=L6mbRL6Sw0?^Dn(GbBP`%9npr4)MwK5>Lax%-lI(Rugx7!a>${iAh( z;y6h6&}XEle?=Sln7+oQpd!kBY~(Ff_Ur2i3=I5r-0>Xrmp!blF>hCw&CmyIA-#aH z0o7mqS%yqdE&}NzYA7a7_dn5G|JaDgi^M~}oI(4K{wdVIKl$r)`Y1L4Y5SU*g6cR=Fy0VbPis%u zHP@Di%`^rxNd2}Cw06cqY)G8GR(MlSbBh6ru^~OSI*$X{eo(ic{D_Y-`2FE~+rew+ z7kVJk-2rr!go5eTgr>Q+_~W1}9h+(XYq|dwkPsUp7H;dt>SyIBcw}&U!BjwL5JelN@?Pqx$sjgGd&bj-CU zQfEITD9p6PE}dyjz^3Z`|BA(b>E1Zh&DgmbtPp%&kUji*b-|~Mz2$8YM;e;FkA7(l zk(p|bJqg;AkI>qZglAgg7R-G}!lqjPdY%1Cg#Um3FpNXY{|#|L3A4bc2?i!HOlk)=METI4}!-On$8@B%mf9E16v2)=7J0CH}aylF= zJ`@3#n%2HqmerN9uc$rtPGNnhS?+5;&)hQah=Nz1)Uq0{px59gOn7 zFn$v`wFu(A0$UQq{p~z;n07m^2Iwb-1G^Yli$b;r_WICAgl9H7yHN~{fbzGnIl&w* zilvd^86WOu26EHzpuB=aD}UqFQqme~kozTxzoeOpC4>LId_NM%Sr~h{0Bdd__H7V% z1Z)%VGq@Vl0kjihfqj$_uxG>$|AhM&dllMlD3(Zo`EJ5fnD2o0H{qEc@X#fLD9c)q==c#N5qo>nNfWU! zW^y04l_`!em+SWL@$myU!oCx>H}lxX!Tso0z|NNpoGk2sqdxSjwP4N>=B`k)huG{P zHisV#+5C2o=9@jt&Clna{uYO0_${vLBoJm?1LCYdgCxQ?kV%@Hf%t1+dkSM>OJVz$ z*9OFkup@nsLi%zcViKtNw*eO$D)h(a<99CV&@ZO@(tnFzGVFKc%P{i5*%1l!yePWI z`2Np5^2w zm%O@O}cUb-*#J04J70vYDgLm>|d zcAsHfw4V_ZL~*$&*p|cgPt60u4)+@th&=#d#}UVXr$H7y*2BP#Vorporhg|-RI7mG zKJ;|}biHq**D;`Y$(PO^@D=ia{CD)spXHCP=VPjVAl$SDBszQnY0kqCI}PEVgUz@$ z3D%o<|6?AI{9*luAdLIIdr6)G9!BL5JFFx4A$QahVf+upUVp&><1MHj4EdeKiCOgc z7{ZDgsy#sW(03?4_gC|Pn;sfQ+zxMpl zrJrKz^UoQ=aZyau4S2&CeY|}qto;}OIrH&##DfOfkKlUv9d!ErXI`+j#b-{^!C`Ea ztou{UnIV4|FGRH{3~Z=J*u!A_1?h^r9*oES#acx?pn3QVb*cYz-w!^2)g`p1=Ht7t zro%V~#>T&ZOyUH>j#?Dli&$a*Tm0xdTih%b<_Of>P2SN+Kdo1~{-C^tI;=B-v1>*y z9$`nZBZU2Ty20QT%?pb6eg4=3zJ2;ak2Rur7UO%Ak3i!i9^5p&L72r`kmfYRn1k04 zKhJ-)pCbIFUVtmXc|0H1{`^UA5O!2Ag6fRs_e?r=7;FBk+yevCpL>Lt!Nb>2pMT-u zZ+QVk%MEzEj0LgwpFp`k)h?4MMq5Nr85c{&<;)k-2c4))Wh@&`|uK=znU-8qL zo!1=#Jtm3b)+lF%V)H*^LbXRoH=<#U5vpmXuLp<|@rv>rKR=7+0$ro~sNN0L(V@C4 z$7irk4eBYq!S#l6W>l*Nkn1*^lIH~${%#LNx?``7$Kvr_c+Z!?fSzypv0pOALv>zA z*Qs!yMDf+1@t|5DR6iXD>%CAdFRI;14W!b~GgO<6YK?z>{%2isQOALfh8DP{Kf`@2 zfS#9O;3q;o2sX|F*)F4w(V9hA{%>j~5q`@@I#`5tjg|WgUwWPf)u*9cDe*Z>ZW;Q( ze2C8`P`=3ip&osGqZ&EXQlR`%P94>QA)ZiPhw&bxM|y?g>~+Nz(01yF`N8?x#rZrr z83dRSKxvq32!J&r)AhfPGke*&Vu7K-kK7IBWlx6sgYcu@8X(L__YqFi5H<#Vbl#%8 zQ+iM|-A2Phj3^g_@?bG!nCB+>({pi=&OUIQA2~ZHbH@8<-J@FDsmV!@ADc?gv7!AR z$)2d|1n1QfWVqv_z<4;z=R(qN|@d5jD){^MjtH>pRTry~-#6)00zlyY$!h;Mw;a=0c1NftQsj zfO$m#^NZd|74VF5cKI#-l)hJ35%|6!HpL5;3|Yf9jO?BHdgNcmhggv=q2Jq}wSf4b z>-B%d!w;Dw?1%>>^QrHXFejTm&;Jiz>3LD;>!TP90p@oCZOs|@O{uo#Sd5$3Z}BI5 zt;8}D@mP9Iq*|D}HO)gG|4WU`&paR;h=)+TI|zoqy$OM~&_Ckgud&b9W}~s^b5B2V zZ7`lef^nG$s5?;pu!h&>Dr~>S&iEp$GZV}ClD9cImE7)U4QmP1|5o4oGk!Wf1`kmF zsP+cU1)T?m-u$UYbqRl#JK~9+H+zcW7eD0*A%1T&n74wu6X#_2Ip5E5XP%!U1Lkl0 zq_0(25RA9xG*C$~0XD!z>rZ>epD-c%NVkzLp*4Zdus@$~h*z}tWQQmGqBC^tj9m85 z*x_eJZW-av^K&j8stxAuE%pB`ZpIg$yGm*6!#{XXW{ctZ>ZYVH0@+&_Pr(p!dQPS^7VM|!5a!MLjv zs&oDa^MH7u?@Q>MhU)><03n@1zpX=i6kYC5e$+nv20MzIBH4$+-`b%3_~^Unc+eHI zXs+d-&k-X&Vy8c1Bpn0Hn@l=HF~fZ!8|cwv$n&)WzmKIcbP35Hoeij=IwFLfQMb>K z^WXJQZ%{5g5N8GoVNK}p+vp*f<32mvmW0i`^ZQx6|I}xg?cCw-<^b6c z?wK&hjpDEj|NZB6@bhP67oam0)kNT7J-|Q24(G!WVK*}aC82JxE+GcYwj~g!8^hTC zmHhnAj78YGVgc5U7_1xETW+@b{N!-=OC${sQYC@<;U?2sgA3 zT#R6CvzIMsEeL>h74cAC5@%;VBqTzaZ=UVQz$U9*{|x2dzD^=|W5L!gSf~wgL4dW> zLAWMtDQ4!cC}t+3u>J#3j9~qb9^?b&Rvcii2<2lCMkHT)L)Y-PA9z^rwg>kpI!{NrC}+* zUfzLW9<9LvF4MstwjhXP4gy_pur~uC9u^?P&l-e9*n!woCy-x42JhblfZ-M@m}yI# zp8b&63~Nc8W?JIJrr$>~L;QcD_Mg4XqqAn@ z-}q!!)sfTc-+JV=H~5!*Z4N7+XpJp|m{VYLfpS)aH7P>V@2Sjit^Q|${u86$hdEt9 zYrwp~95Z#gcVTLO6-P}gb>a8ccuvrfxdeR7S_<0J7SFaOE`&PH1hM}UqyFzB|0{w2 zoCM|zhR|=!(cjPgtQ7s428)-_eOPpaLw!ChI6}P{EI>j%gvJ8@fi+0<3s{c?AH*#Ji0iDS*Aoes$l?SlkmmYHvqW?rYgH0%0~mk9^uoYqj=bU?&_ zpQrCTSC$!Jfkl-s6!odq1~mp3Eml5@2(qeDWD?GiQf;yDiM_ z>9!^=@4Ly~nwxt(Bu{W(hSR=xr$5Nt zE>4fRcA-_}vc(nA(#Yk-c28DEBpr%fz^%gm0F%G82GeFgh@Vi}e$=TJ|HiuZ;YlZl zXZ{+m(kYc^3qa_awtJ%eTzt_}1aFM6fCMkIt%dHE1*cfVS4OyPR3g}Q*s0zcF6L3Z zwVbC$Myt4lM_|Ln9u4f|=B(Kf(dS>Z=QVNtnk4hQ9&jZYcV^OzY}*yp?u-Rv+1`-%uh&aZdqWH z4M{IGuO84^WTATGmVJjH7o>T?%Fe#ib4!wmFYmO%lyrxDU7t~a26gD-ksImPD-Tac zzFvl(yMApoWSXO+-l>d9Mqbh3n6Iu+3#A?!ZxxU+1UEQL>x-< zYt~}^4U75KcgtpFDp)FPJz6!)cE=VcKC=0|dX6GqUPN&5`UQ$df-d@4-L&m3)@1*{ z<~zk!s5PLr)vwKvzgn`PfX^s(-h);DzSR_!T&7N z7wlf3wYc-pnJ*UvO+1G0aINW8-Yk(Ocx1WoBT{iIFVFHKapD`T$I%ASg#j7{N*#5y zAd^>zN;U{&c3R^M&RyU+F92s2lQ(f!bXpU1^5|RNmwFpUcDvm)ziGCBcWXCuqNU^% zLBu;@@zTQlb&DS^nX(9C6I!yPZ(&5rlYqbumOi;4?8riH8FuU3jYFm4fyc!bEZ5Qu z+SR$jCqm^GUTfz?nKFYDtOS-$v*CP4i(&4~vM2EbmJK#`_RDo#i+y-6ZQi|IAkgY~ zT_00p`DjMa+M?f& zc>5ayY4;w)XO+v#5i6yM-&{oeE${I-u!UZ~s;07?>&!MF$gyI)aSP!p`?J%tbrtOn z*NiP|S8^Bg5iS*9FJ?Qi;Ns%e^p0Y-<$T3f4lMWc)7OROeURwfw2pLqeWd&)mBRMr zexe(fZIJP0Ab7rLrPd)ga>ZKsI0&4Esp>cs+ zRwu!cm%*#V^@OMOMotvydYb0lji;*E7&=Uz#0yC$Y~f|$=t&%tC>5C477)trtrTAn zU+c_07U`_@3U}_T={cM?yFQ1etA#h~=1qbJ+;HcoiZ&&42R+?*d10Mlv7=>|wUp>6 z?>##&i7#iC@7`>`A!*Un*6VJP?IY(^rrz%L?3hx{_%v$r-Sq3}skXAd-hKno$M1Oa zSAR^yjmyQCvISv51m_hfX8kl@ySt{RmAHiub#2*wD53U_ocyA^Xqo|Q%T2E z#`mqqxsLb9)o>kJsI;7Qji)f}i*Do%AtRB1Ff7a*jA+mnMmQMWxk}t`MOB!zQZS0q zz^gJl?7XHR$TO6yB$=$-&MeL*&qkY*qMg_mf9Ia=+)ADa2W@vwp_FF_So_M1cS>Bd ztmsuZvAo@Xc|oJ5ZJO!i>HY|1h5aw6eBW_|cu{^gm%}c#i!|?9xZ9k`>Da`6_N1a1 z&%)($>myURRTs~3=G&bpyx=z&W<@j@=G@i9jQBvyi&|~kHi>zeY&J;8fk0?LYODmGP zxr>`=Se8?m?T(UWS4Z(0pG?EnQiU@?TQ@G3ztu&Y@H&$|9_rS0V;5CBQ*h|9`+!RAtu~$alErkLN!OP!Etid6R#Z6dA`I;TgQf zU%tt5{dJ*~{rh@OFPq-Wr|+BN=W@{Wez944hfHC)#d5aIUpmCaxo;$`4bMHe`0zcu zOpZ5q_Hv}DHymV*>Nf7lY7UyqF<&pmT}*4AF`aC+@M7NbQBU&w$>?=Xp*$b=cl4Th zn?1s){K|_aQ{`V-`x^-<3lG%=aBrGry(&87&iVbg603Xm$-S4CJv<=1OnYG|+j7T_ z{rk9Yr*XzbuHC%0z)|L`fn!L{rdyuA`P;a!OIA)#&t#ZM0V73ylNK;z;51wKp6yn4 z$;k^$Sl+0&|H6O#INPp{JlcEQ=~=VmdzvkXc?)Mv zRJIFO5rQUD?cxm7>~*=ekJxz5c^+2~j(@Uyi|15p-+`^%p1mA?20=-nm_Vm4?X$%aE4iX<@7+~(ff1$tvQKT>~WuY z^9PLw@LTjxjYBR)GzH`nHWb~?lMX0xh*OTu@ptr(YX~wuJ7jtJlV8e)kzrNoO=*j_ zIjnoeExIgBV3mN@YLa7B^!rrH%m#(@VZl-l`Q~bjvzKpfd@qZ&Xj}SzPoP-i*VE#E zJFkhlSM+*wU;nb%w%%MjbBUq*cC(v19t9L`oJu`&Oov?Sw{5Z^Q0(n(lU+V5Kk5 zhOI8AdiWK6TJ>t0ScdhZhDrrY?vvd#_kU)J5dXJw#tXiU3o!2|wd z2gfBosdQ=;<1gLGv0J|3!#mlcuqE%}lm)g~tXL;MZR0SV6>h|d`z-i{)_Wi(`<6Lh z97Y@MrMV>yE{uNPr#5kk-0~SW7odoHd^-3AsQ+koS}H+%J?nNQrrGLVNjZ!CdtQ9wtHfbz z&F*GO$on66p;~>9mJJPWOAc`0XHkoMy6~lijFEy&!MaiPYTIY0imqjEKe?j3m_J9N zV^gq)%${%hRvlz7_d~Jgf9+%4f zup!TTk>I3d%e7NW3Mwu=bkFB^lSz1(rb64GiJR(mxSVX@u-}%l_|rX=Ev#>sn~t+s zs4*SBDm_||o|U^rA}Ul0pVoBziLS&piDzPm7FMP6FS_#J)cafJ_i8YjG{5S(0pBGb zveqdF%rt3L=MM9KD7&bFH?0pBKfZpTLh3_fe$C*;NtlegsGgvB?_#`KyXC7PBmWs@ zcIwq0J+r(ETi*vh+uGC`pQpTM3jbDYN<2O=Qh8{z*!b4|F{SrY?wbmOj+N}v>6G7O z_+q`sb>0JO%7(KqQOu$`Pp#jmmv7Adacb(KA$O==>=icbBCH&eo|)de|Mx$l|Sq_0TW_K0H< z&0~g{`NfS<);+@T_$@BFP^#H^X}$X5?kR~?QW$Im5J@}>h|w3^6?jSH|1H3 zo9t7R84bOSTYa_CgyK9@6mPUnq}Q-{n|X!Qu44zkUgld}AhGL_RdYx0q6e9o!=nc4 zU&$y4pV;s&>(tAE=Y;Iho1&kp7ay5u!JEwNEv@LpZYj5>8#&v}E?dr-7pXKU9?zO# z{JB@a;;f#@Y26#5VN9#}S|3($MO;ia*uIjL^~6C=6U*+=6RaD&(lAzQ=A&g!Is;W{ zE7S%f`iyyOO&l-Ls^Z%D+oz?trt@odO)RTqe?5G|8Q(rrC5lBWcH;t$uya2lT2v{F zOyNVBJg;19coxZp%jIqG?pPEg;)+YqFm>XYSW)-T`<$4hC^uz=L+`Q+;dUZ#gLjw@ zm6FeFJ2{%VbDw(KzK7}ZSxxb{1S4HOrrHE0FVSwKuz2 zNwHfipQD*76bi96ooDjiN?D*zm?Lm==4LTl=NaQJZhaQNdQjs*V=|8vTgsEV&Fu%I z)dPf7MW+JTtqYFrT5Ig@#I^K_V8wYa*&P-Fx;=yYOI!UVDCBaXY**!PH~sfhx<=Pn zw@>y+J!m;$#3TNlS!zk~_QO(vL+)kw$V7DJNHtDznm{(Zc4vCS`QyN_PIUo%;vnWJd}{?oakE z;}^MZv#TJThk5IT?aPF{&Mb?g7NvK|ZI(?j)4sERT8dD}6)4_8A=y!u zmtI)8a`&d4Qv0A=#C0q|V&J>&p+gcg(>KR_5ANM6)UiTcgYe$pC~y0aX;)~E>&E14 zJ~O^O2h-Rl4XFEh66cQT7D~P87QJ|C%z7~xG3*bwp+qgywHWKsYP7hku5vJ@EM5EN zmqgBzTa@#1T&96y1K&qkSbT8bF_ZAk*O*V)ZMr@6Wr^-5nsQt3=oPtLTsNQI*p4;s z4j3_0FuH&6Rrtz}imC}2>-XPW{lVtzGPf)G?r&d9@?GUC+a1zJ+9%%l_T3xlBYca> zY!%HPQdvulDmUD-Eiv{}(-10PmCdjDl&;yaF2{8%Q<2RJ8Crqz8oWlf>g{~(d~HLU z;31>DaW=Ekb+viBnp$&?ZOuuOUq8FaVgVDRwyVt(yZEYIc|cx)aR14(*vDNBy3y^) zUSSl&pak|(L00zY&^$dCd~c?N;pdILHOXBwObzeP@>w#QKM7?uIH;m#CttX)LtE7R zIziv$XtjQ5QIx(tD|O;qm}$|pR^usQ|DAn#M;ioY)pc6CakPr&n%y39m4>@U?+LRr z^Tv*+qzCVqb)}3@_DrkAveUW~=Ey1|)NQ4LO7B-T8}%=Z%~s#+*GsDE{;W3mu`}c1 zNCxxz$wZNg^6Om`Uj=QFJI2v zXYk7E3LZaoWNh3qj#XyMqdm7IhSuh%%Sx~7TWOjp{_%)bnbPP)o{>mdUheMHrnIBN zlpZ763~m-|Za5y&Yho(JZlTP+eRk8?kxM1~#%j5Osoh>;!J-eQ-Ft!vnYTs!?6i7P z4rhF+rb=7gx0TcC?%=q%=J07rccJIA>~`!spF663NFY|VG$cJbv8v43=VQ;~_Rd02 zr>$Rm-LJT*yeY>%x?C1r>D#mnYt<*z8^wB*FN?pS48FY!m@2z%uy?E_ZO3gnqvo8i zqRRRf-q)mx1#(BMZAI6vnl3uNDZNth#9ii(iVFJ_i!WZzSr|BUc+tLVMv{S1A#ctO zqyr?V&9)OlJ&pogniKEX)B@~?XY*8JNV1!obbGF;XO2GO)}OX_KR7l}#}~^QvTP+U zE05(W$MaFF+4?@IN3)&^p60k7NKZuQ!)?F9t=xin=}FF)JK??`&`BwxQv z|8-QlJ*(OAU3--@69uTd{%z8N9wvgwd!$qJ*Ud~im zGLHAL@N6OHGE-{ESJIKm$iwNzjhp;v6WgQbZcON=9b>j+JKF-rra-cJtCf#alYzNq`ngmNgwP=OL*S6DHjyK&YpV1q$Xxj zqA2DRZ#ug28r($w(>iW2kqEB3w8)pCnr6-y4G}^_{Zxai=O=g|l@2Czx48;5n1HK?9+uajy+4J_-Dnv+44{)>LR)73%DL=__ za~UlmPNlhBnWr#LHdFEyn#|XF8cVG~2}>~N?W<&)utP`@2aG%5DgVJiKr3PY#zkpr z?d7p1H*e$_ESXX>AE?f)&^u`rSg@m4E)A^{#oKAFZ3E^}Zqm)1*ZW>scC8ZM6Li`r zf|bzQdERBut;$DRA0>8eHBX8CSmpo0`{1|s@7_ngPvNqf(hhT;yTf!uX9Qmyykv5J z+PPxmrQ{F2PLB@i-BYV8+450w6CX{4cJZ2ZVhxaP{)X#(*k-IHbu57Ft`w7KXtJHl z9d8m9SrdBaCEa$lHzZ#z^tGiY2+J0KO1lwCNEOIUo>#+Sz7-3B8MFzkvVx^cL`q3XP<)LY8gwj2Rc_m zQ}fw5s2+p<6MpZnKGsp52@ZY8w&N+=(5&Ymw=r z&^%N!{lR%t=}4}O%a@rO)-TUs7U5m6kf%(ztx4WXi8c1FrG~+H_}WpYp$ApW5i6yD zC~c`=jl@0ETQa7hPcDpI)g$T5WEHj(|ASG>}MColZsJ zRQ0rnjW-`%W1>K`Ja?OeV6=!Vf9#cS0{?+!1rl9&Cnb@_cDa3?8?PxVN~*tOuTyPk z(l8!$zzGcXhX%7!l2`5EFYeO~$P1BgB%ZBp-g$SwGDonLP-%aa^2MPWTjid}8hvXPv)5Q@uA{%XG`hTq)&d z;=V2Q!*as2+e>;yi=y7VdoR7QPirz?%NS=R{(xNnRZ0KzTfH|;w`$UIXLIBysaAq_ zpNJJ*an8+0in~TA!*A7KlWmvRrMrc(PIsJy4qmvgvnKLIP@mR@yB?bM6h7yhhmOpi z*r~|%D2cV8yF@ahO%mFAr8T{;!%8x3w&1?H$Jxh!kE8mZ7HhvwO2KM;r*z0n`ma}y$Eza-qiB&yqHC^E$J*l{obqFuH{`iiyJD0qczj}8(v$j{RakIf# zTwYDxiSRI-G0&b8H~eNB7DW_37s^;`=I(Fe9gy7SbpK4F$X0%12kXu;C%NmF>=L^_ zEhF6AEansv$#OF_&pwRyyFBO8qeSx*}XHTj}vN5bMb9{OzIgkD>i#QLa;euz=DbGYI4U|`g@+&=C7>bJ|N zQu^MN^09r|ofX4O0vzF?q6uRkcgsreBo|nPD)ZaGGvT`R=T%${-@hExBFUWFYhQY5 zb+DpF%wD}{r?24YT)S+UvuG|~@}#0B$DN~K%k|9`_rZ!Fkb6L=>xssR(BibO87Ce% z-Cn%vB}I$lYu;r&8j*X$x12`{zaKH)drak3FXu+m?r5d8GZlMRAKjNyqrBwZwpTAK z4hyB5n;iHSl$ONBw$iIl!gz>P&UEzPf@zzu80^%&SM}V4!&Wb3yu=oCNo>67MfH+s zP43xqZ7_$qEAxQ~O&@o92qbTOFytP0WA^e#k#OuPS#g)-%cKpngBId9oyYgrx;mSi zRq=h9h3>&)qf=6WJdwHEFHFXykk>rjc%MsUby1Xf)wedigI}h3b3T}4=YcH(H7~2b zh(~OzyKWT&x6q!EC3ZX)P4y{UT)rFkx~jks*30HMSLvCBXK9iD?K(kTR3c8ecpsa@0?Or8-8@)>fBc&xVytgi|Hv75&({u2$ zwKcA}Rk?9k{QQ=kFPFF+e8097oZgkbbWz@oV}<@v=d|ChQA|*6-~UGU?8p>z8JGX3 z5@oL?SKbnQx_>e&xl7`f!H1=>dE>HPN?$Ko@7*jq)Tc8z@^NN!)aCOFj_upn zLOGtB-)$98GA(I7*rk7Ekycn1K6mfqr){bAx{f)$&XNkVvX$h5lH4+pVC>Eju;rw( zt6z~E>o)59B#y+~Rh&3wn}Q+%_C4;!^5=?`Z%n$Yo!5b>(=iICQJcvei__XeucCB! zw(6HDY<$a+JDrz%VSiHcp_+lFBx_{xjV~$Mq-Ap7OF{Lf{_OS|&CmJoLW{*Ht8ZO( zBQc!@=Zj?bY>bYMzRbjW(m(ggV<5Ge1IWH^N` zjSZL|w{kkqjCp@wambh{Pqawz8g=Y=Oh{C&?AgJAsv~p#iu!$Z0#M5(YNW;w)f}B# z`E`Hny)H@$-Xt=(L&D~(MwYhQkbB*mhVl*mIo@lG!gh)53XW!_9Pg?dcD0l>VA{WK zXfEm&#v}ap?FrDFB+=9`ovt&goa2A*8xeKGWVh=^`C}&M zKItDWi8W79-queG8+)8_|H0Y82H#cNMRLrAtR#~QJ(mlVFMjm&M!m%L29sDG`;!qG z=Pyjod}>%AIlVzI>Hc8D)7xoRyv`?g8!mDqSzZ;tiq%gmH@wmNw0f$b;CkiW@2pOb zJN=bg-Sz7D^0}%3TUs=2aqRM(D!Wm6xm~Al!VcTIMaM{o-#RYnIUmilLFL?SBSq#e z}r z`-R)(8;4^G24A}zY+E}qvR%qx4K1s+_I}2Ov8m;)z`o@~Qr^}21G1CPJz8)rIgKA@ zBsWVQNosOG%2{%pXgO#s@$i(&>!?#}X_dZe?Mb2Ak_+GqMaeTz2)^XqR>4W1@ zZ*UWPJZgdEwRQMOmagTugEH3(;!>am zTEgO=9enxC%&EwbG-DkysZA)u`^5=TS?l$jH9Y-(QIX9yLSd&aL9l^#TZq;_(3+KeBd}TqR4JFvsNPmrYBuJgzx; z^hG1CMVT<``dC0TC@Dg_JCnaGK~Je?BKOu+n_2b(Y09_A>S24n8!JNmqo5;@-etaO z)Bc&q*WYAa7rY@mJ3TtHm4CB<9VNANg%&e;boV`(X6AIZ<-3fwE)tJ_8_#_8)%XPI z%jc$vG(DLEY8uy%+n7H;if_0Wu-J0P`Et#B zOQf52<}Yj77K8E3-f}vx*l6QMUA5fF`X+yG&YgX10i|WPqFWXjYUu5HlxTh~LC37H zBv-4&Aj6zgapP8&F`pUauOwq8&^x^|s{hE0ucAR$3CqWPC!R+j>hh|%Oq+LvbA|$o z$lD4}pAeBRmm65RFHL-?uBNT3dW9x4S!bCNORQIXrGBp1E4Pn{+vRsg4_^7)f7@ME zquua+<6Q=;i=xB5WNKXYs~GqZz6YacY#}-Ib88; zX~e9igD3O?wC@ypvc^_q%PiXDupnaR(&DBW;?EI%&OJe~j&p3GKsH zS8Jtf)=!ICdZjrCFBW}zvr@3=!Xi7RcQ)DNdW>4%xR>A7=H>XBLrpG6O*q?>CKu** za7r(>6Xh|NTgsQ+01trHjI|b(O_Jag`9-Ro;xpP^!GXPbtL1mk2<@1eeVC-YT~xoh z7x#Iu9@&@{?oO_e;ybRlPVwmG+LhYOI(IqpXB+vhI<4T9-g#~3HL9M1xPObs*ELU` zevvFFyCb!qOHtw=e;XV3Nyk*B?!aU1u9ec#G-El5)R|?)Ba|n1llR}=H4OHA)GM1i zpjmRpAGbOQK%t&BIbkUAF0D}hBkNjG9p)<`OVaj3ckEFO2cbBdXw_3HywYq5`DTFW z_=U?XQa${MS$^l+RbmAt_M|mlW8=T$*NPpB+r|1w2PZ5$U@S^gQC~dVyFhmRAXoSd zg{J-B%T0_d-~K=nw>9T`fn58s`#MLRY2$BSlZL4L!3WLt!auQI6CbI4eEgzHm~i3l zM(H!lsw-9s*06CO-y^mKlMOf)YN;vi-qTztt~fF195QEJGjvOyZK!M^STm@bt-(F_ zq~K5_jTT?Gu;6paG6hoedSa&tK0<{e!67(3t2JOcxhdA8vRApi@PvPct4(QbuRnFI z>A4kTN>}?f$Z+@)xiq)*l@g&ZI#(#JaMHhcc~ck`&9#5sRc3{x>3g+bgO|w&6lLD7 z)ftFwDM}riNHHgWUC4RKwZG!>w<<#2P+gFSpOCVpVW^+lIi4a(;CRcR|DvB!Uy7Cq zZ6rE3bDG!L0F!O2wdB~cE49}}Jjcr-#} zgNESlZXvkK;7)MnJKVZe@B=7ndgk=$UVE))_o*)oe5=sRmA;mk18;i2vYS0@kaWDLGQJc|zTpGgttnkzuy4uz6v045 zzx;T1Pr!F<4PQ1@4wLfzpwM*XFDo<1jGqwnGjTAR{+^4@bzM$M;j2RvLem&y)f|#} zj+hY=s+BSh+(4hp4vNzRosP{RBIpOaeQ?Eoqjlh$9#F;aHG0njBGua5_s9L_tJ|7` zFdwS54b#(qIC!3aKJ|6xq*v*ReS_3ABQ zqHP+G&ON5QwS3W~t^GrXF;s||F89(egHqSfWnW;{S`X#-DT3-GEaSjy5C3CtAG&;& zH~bdZg#APmY3y$p2U>W}#XUZPXx~L4R{OyDupMn@UGrKrtVfrV!GfP7dx5ikth3pzMliVgJ z{g=E0Gxl!gWW^zN(%ZqewRs0yA}oui271*^a6utv?#UjOXQ^pDMSx{?(e3X!A;c~R zh|zPuE%{?&?HgO?L|qs>7`HwhhYaFsI%>CL$2gmJ37ylb$Y*ZQ{STUokWD%frC90(H|&4P0_O=PsWntL*=C z&TnoHCbr8YADfhiLqv>jQ1^-d7>5wkYXzcTc9oMQ9i|1J^)d8xut4oT#AFy^j_hZ? zNnRU~Otl%%eXN_`cx54AM_5FBvk+?IJzL|yC06f*;Mjyq|pdCGeWP?+%|}` z|Fhe0MzZ8_w_n}ugvRzWQSkiG$B^B4>$D<%ufepjW|fg8l%eY%YW`{4^)=V-EK8nT z%y7{SIaORdl?&P{w&t(T*-U-=@F;y>@29jBihJ z%BHQK>5{L*38CQ(igpu4jk1vHJO2BTJ^RRFy;QGyy)N#iY!x~x@QrU$^l85ghz9zZ zCKvW&+&B82@6E>VnoX6sb9y)s0JC)tR1oh(Z-5o?)+NOq?m;kJ;|60Mh>vBtn6^5E zcU@4xDz^Swe%!$X4NX1tMe_p=V&~AXfyg#{@iC3=BJBVudqm=uA+NOA`%6^RpVYiO zl!rRz-(pucTU#B-ezaAx4D?C z1)G1(vbu~lS#pr?r>xg2n*@LI)=UzY&1f{%4;#W0fLD}`VkdGL7@RtXqP*6Vjeicz z{n_y%^B`iqrLJf0j*-iglV@nxZuc)W|8jjzKPVJqhsISFY_b#tU28 z=Bs`gC=H=lTFT<+J_|fC=1{l(yL8HVf!qV4ChY&0Z*QI1J7eZuja~csJ`XOJtEGVx zSrTq4#|4~a?iWXLzBG*Heah0ADi&}u{vKG3;<3C8ahZ6`le@H>DZ@x?JzjM7#%~6P zJJA#Tct9C2jz#QTe+@XP?HWdFzOWw7WgEcJ;+7FgA{Fg@FQfu$I9=O=GySh+nf2`^ zh<_coPnDIoWQYei=W&XCrB>wF@bu2+s62myo5#v$LmEG4RKb;{1C|_~!c4FYaCzv+w1bN|DA@ zAuP=6EGRW3Y8HymEEX~Q6fVrAoj56|#llgj7I{mB0D_nJSxhW@UG&e1$Y10_>A@Kyapc_3al4-=R zy@uqIHgvOr!FZoP0>v@%MT~KjHjP40ejk9G1{XzK3iG4Me5bzNK5(ZQ0ygvcl$lx3 zzcV?!w`(ytsh-Hj5-fM>46JD>Jknve<$q|WYmJdlL%enxrZ$i)ikbCUk=+|%>H+$t z-d(v5c!%*1hjbjxA1P+*gx%(vKASxEsyP$i%%lANep3nccO@qq-03;+R{-@ESBrAT zv1I(hgpwLTK~-^J0`pVY$mRdcM7~_+|J~ zdRR0-5Z!3o&&=;^G+yd_V(;MC=ar+iX!DaUkHziHQ$ztUswPHnJk3r^yS?j{F^U(7%sM=R%>@gUBv}z z-#+mzF0ZZhoL8~ifj53Stu){ddudkLa0~ghJuw17uLZ~?+K^hAImhBTm+f?^J#xb0 zJC4G110)gSVXLQpCOB`$3<$S|c&q;Y+Iog&NXj<5#sa*5$G^?);8%f}8QzX>!Zk7{ z$Mo+BA|{r2Id%V~_CP|W=cFu^k=v!*s2`0Wds9g^RI@Bxk{6t8gd*=wkO_#tS@AL) z{$s7L9uzUXGcVjDWiA==>sw5%hwz$ANI8fQ^~Hh0Ls#j-Yyay;^CgO<{nbpnf>E~v zpYdm>;u>)||KI*vD=9)X{r}dpTK97umw$PY)$Gp9uMbCG!X0{rk7Jmy%!mlkaW`EUC{4C$Kc_H9Tt1YZ3BCH@yUR zzz+Mq4!$~dIH3t_fbg=Ke}Y%CYApH>_yWKr(`x^r$4gR^F<{5ffR3qK*ZRDxGudU~ zhO<)tV`(C2N7364haIj|ny1r_6I6>x8I`QTn}biM{5Zf7{bAul-*L~CC=?e0PU4SV zXw@}yK^8|dJjvKwd*%b@F@!kqNdgaqKAcAS7cN?PO^%M?oc|)MK*L3wsVJm#ahUDM z*=S*;rqkF#Vsmgy(pJhlSdR`r*?nAW(QP$0 zi4{aok)?KGXbH(MC+I;&jI|n)FA+rf7mPe7iBtrQh1F1rbFNjX+`(Joz3C;wvhJ_& zxtI+F0-M*8gO;@j#QC`g11UV;@CzoyB7h;dkFPIcCd&B$E|TcuPlCe>vW#LBH7`v) zARC(m-w{iDfI*})d2n^Qxh|cGNI{va8`{*z2(h+)U(^SUXEULO`a}6|}uD{@FL#h_sa0C;=xz@bQ^f2wZ&5gl*91k4jIqEj8mmz0Jq<7B!sy z2{iEn3z@4OFrP*LEyjP_Se?l@_}*SiWtzA55N-F)avWV`c3v9j>qN{CPv7LYiVoWa z?MVGTUmIy^KHYy#?$+IrEEOMO^ERJEYc`MEMP-qS2w3AT;}M@-mIl9*ksO|#gO@Klq`mDnvymW*0X~PcwPFzTu)2$?6K zUGJgD2-<+_Qt@)sGNWeaf1gUzjsG7RP(3Vo;(u%g;Wcl1!_F=phKVZJ+P)>rR_`Gz zR>&>+u&^dkeT^|r?~%u^yLj#R2t|z$+JfJcDYXu{46S_5V8FzaIruupqF2(zHTm=2 zMCLiNW^Rf?_j6m^GGuhssM!(^kjfw8_2;q_2bTl)`4hN0AXCw#5&==5vvHvi^IPBh zJB+2y3wQmW&XyMotF1o2t^bhr$6o$rxd83G;Uue<+oMk*2z*K96i_~^Ubl)c~uHCkA(B{kb8 zR%(RiUY!|Aou=fi+Oe&!FV$ae2&8cosM#s8+hEQtE7`1gPlVs^fW)jt{S_ZJ`M&td z24^t+%3uC(L}Tu!BbmNx?RZ$i?4CCpBHM8t2(3O?L?S^S2#RV z#@Wpp{>a`NveSwG3U)6cPn2u4;VlW^pP=o6pr!PZ+BG z(r4iQ#zH{gBD?g$0)<6e>yiG*!yZL+7&F3{_>)+CX`J0$!_`~DPTi!u*s79w);?lY z+?|Z1xq838mNkf^R?T=3D_%h;xHKGC_$(86p2O9{tY*OzS117K<=|9f4cr2H!3MH@ zA7id5Qs{)5K|q=OtV0X=RpVj>{H^@I(U-h-k~sWG`xGwczCo#Isnfnz zO+Xn9gc%N^HbZ9vSz5 zugX!e-eFZ3u0r^i30p!`xND9DF9zih=FcivLhW@IBEyz#N?D>h?Q4 zGCzDgOpE>6!F0XD-mwnzeg#wzy_g&9Jy*Y{_7kmm4rFzcA4t;_f5j-JjoCq&o)Igp&#?nnF$ZB}&!w0%d+Qk*o;* z>#dMOGmdO7ES^KcjujjX(*O@{IGnv%MHq@Ii*mi@`T(Ic>OPd>B15cfC!R=`>Vo_6 zk`Q}#X3JhpeQQ$b6YqHkqXk_qi-o)s|Ewo6PAnX>O|Vi%kv7`XBq zIlk*4i7O28NexKRbOUI7#UaNSu0f`C=E5tdZpZTtA^&aQq!(Jvm!Os~fa@T98K0XJW1>dnRhiRAz3DM|EzZ z+CP&V@Yl+;ygEOds0_5|s`dU>JAS(P?FCRIV}Hp=%GO`y`Dp($wG)H{mr&<%e9bGa zs~~;OOE)OwMdJN2Z5>8=%Acc7Gh~Bzq;I-J0NTI}dE1zOSQamop(oelDT5`gqC5Ud z2M)Z4r!TMfElBkCl~Q{z>XsaJ`G24D%S~Yi)3`}y z5D9zxo&&Ij9+TAe+|cs}Jq!Dd z8q9J#qn18`!t3Y>Fi}`zY#O?brVvn6V5hvfG^J&ai;{SranjTv4(tt%sF_LPQ+X{t zQ=P`KgN11_70f`bvE5@F-FlT2XySchM(SPQyENw<%gLL;CPxc+Ckw@MqrPDJYP870 zijvTPnx3OwFv0#C0nA;Z!};qWQ0%n1^i8AQqPqPX$z+O;wvDc%<~(StKAHYXIANvt zVdHdeV^P>34j$8;4AfiP&)jK5I-bOqUrr2z8=y`mD#e|%1r)B#aG5bc{q1`I;G;nB z?k(nnv$)1hnYzBk^ZlXIlT)=&u%^x&A z??Qk{-8YM&J_`tAUDGfCP^2eLo>=uN*ZXK7P!Ilb21P35ll{Vbjqx3JjC~4-ki%JO zSGg?tC?(my?Y0q~6)fhX|df^G?`7wuhzaQMWJCZT|h zl#Iq|VB#gT>TS;Nn$ST2YCZqk`7U(Y8`EE11L}69L-4k{KMxn1=IEwjY>17GhBFZC zwOI`n@DXEt`-{LmD64RB^TwI6466HSqMR|Yc@3_#3%LY$Hs~|<4zR&}pXhht9cm{q22AX^D zdq}7mMmAy{_+LJOvtEv;j<=m4Kr~F7A37EkSXyd)0_W`rk&6UG5#;&hn9vJA(o2;m zKn}43eN&Tio99nk121_#q!ZSJm|rd*l0Y#+^OJBHOSgGPQHM+&S3A%fL3fk@BPi1{ z-tMx`tBpLE#unO6-WKbqlHDUM1&8p&{a!&Goe)_7NQda{k%-dbBpQ{W_`rU zy0R$Ne!mQZFL>de3IBCaJvsxYTslz4bQHYF^+{s*osiiR$Sd150f+5L5Jr4gOlaBt z{$^ZMg}i+BwAt0X<=8~IniXC!ds7+QOuzbS7aGF_*9tQ&b|?Jq+^r|CO#tG#muyy{ zYhp;kNE^m`BN%q|v-1x-eIH)gt;1&q-}BMM(N8z;Mva2FKStHxrYU8la^@k#_S%)9 z_p0anZ~3V_2k;St8Tx9{&yc-5w&-h60406s^)}x< z{J>Dp!)U5rykp{hW9HJ~L7~Qm1{kZCe~LJO?Yk9^>IIWI1la$V{LlU=AxVS)AL;)Q z(hn)~mQQyuKc(jG>~9OxAp9X*)kQ_FB9}wbHH!f(Q1EU81zgzr25OHh`lCM??T)FrH7lFZ2uTkO$?;ye+LYwG0S{i8U*LIIwCm%sAK1Sb)j%rcV@ zT9;%Lueq)dR}!C)*Gk)AkZCA&^t0q@hP(AkT}Y~WL!M1OBO#(R)fc4KuPhaH5-7LwvYKGdK2jR3%@`b8u{ zD0wjSG+=WP9SgNgh}4q=U|`sK*hRzN8eOR&N4qEuW;bO}W3kU+@KjbN+BGWljGR>S zyz3bd)Kp19ImHn}=Er-D^tI4-iq=d+>apJD`Lx8a`DDbQPHEzrbvUOm?>-yx*H7&ktIDLOj~Q z<0i$umP9CzCypM9QF$(orAPVZvm4usQ=s|7Q)EeEU|ypm!Th%Mv8HMn=v)AHV!(S6 z^gpI{?Rp^(;xfdA*NlppSzjJ*-1G(D?SP(@#45m{!UIJ4+}dA7)4;g4DBYGg{ZU)@ zY!R=Nsej}Ey$znIK*<*K4K?}AS>oD}ZJDsWvy7e_c&&FHxc6Oa_8Z_@T%FZILU1T@ ziHcrGfyWn=Lw}?pN3t_Kg^OymNi@>XxM1cL?9@Er3r42wsDRGLF(mU4{Xy@@%LRL2 zZe!aEV*sat3QtB}XQU4U;7{WR&L=UlVjDqcf#RY*VO=Wn?upsq0^eY=i8vf8PFyq$ zDAvh31L`1*S2o#(Ku;HlC7~H6ltOca09aiB3mIn9DxsQi8^fHym?)Fdido#J{_y5N zU!S369!7$PdiXeA{qpnb>99-;-f{OEM^s~<(I{4@>y z%@@BEc2Onjl>nA|Xjd<1s4X;-G$?`+m=I{(Ga_aczY;2a4G$wqA0sNUWBquWcmb1T z#16&N`%ZfVkL7IiHEcQ-W7_R$z*n_mTpRN+V$840Kp}*Fk#1j@l4iIfQ4>m;CDhqu zq$yhh-U2TbRsLyA<%_%6u}Qja2eyv=<4_GPItl&oNnL6p{(+=CJ?hN!;{`%yp}+GNMC8sV=6?(2G4ig~O5 zM!E;Nk|Zqis|CxM!Ms_7@btD-((J{t6H1V+G{W~Naop0`0n4)}{&UE{*}Fsr^3M2O z!kUgC28_Tb_OGLYz{(J;WgHLT%&!5-`nito$1+&|s{XG}FzQ0=3FgrR^l|%Re;wu2 zEn6y6(Bfg+FCX?89_s6!61@g?X`UR()xHjen{p_)k5A7>N;w=HGJkw{6{xd$edCIL zpDm{Z^8~tqtVfpeEBR@Xz;0)3{zSwhm+vz<9xRL*Q3UiU0Sm7OppUc}pE_=ipW#AH zvDM_kF#E3#^%r)YdYe;RCQ%^N_a+h`R2j&`0cR%h(RxThsk=idM4-*ukNk_5S>DF9 zbjs{F_9J#iHODXJw|K+t!Q3i^Qpb{qEetDQ!lpVvgbyBw*<1b!=@-MVxgk=zrb!E6EiR9@J%}c~_%i91BGNVqW>R#^S+SOr#3;NeZ{8 z14MBRVR_`}6Ut}k@CAlLC)Chli+=ptKR|>&)@vW+AzEd} z>G3hca3=7@4B(IL{V>0thxy)^iU$>yv0Kkf+?&~W)*Yec0b8l?M^TR{Uv3kevxwf{ zFfLrvbrc6uiOqXCxXBiDk4g@>)vswexc)@p&SId@bu|aA9^hlE^`lh1toR5=)rHkXrYV{wtdO-iWAECX)+;$^M1^^!1H!099?pY#8#K5GH%zEN$h7hMts!WWI z-ohjwyYsG|n$pERd0yNI%cj#v(4O zy6CRd6#^Yjp~`sMbt0FdQ1^kS{BYYnSLeVDX}3XatVcODmnes%Q$Y07X80n109eXT%q-6$Ls^f>1Rk((8Tx>6M zVz~5-X!jF(?Q(rGVS&aTF^tU#K7k7|p24zeIN&q*>QBMs0mH(8W!E)3Lx>F7aIA7T z&|*Fk6K$*<0!f2BU<@LfW)Zzym@dpoWu+nJ%H0$M^3*;_mZ5Dr(-0%+%@@7CUt4aV zgz;m;)Wd-47t|K0+Eikbg>5V{vSTgDl{lFMcRh zqw6((>329VhmNr9f*H~2aSov&#I70skuf}4!2BaZm4IgiB_>t454V!`bPVS07KZ~` z7@px0hB9EUsF|`SQ~)EIEbu>JC_<{2yq3T*O$t?$IT0LH#i7YtGsMO>eFf@%l9Vgy zAN4k$gl&(0ndJl%^nBz@Nh>BiYEIG<~IpsVz*- zdqeQMQD_Q?ANE>QmbIZ>0cz=$|qdcNrBGA@yvsG4!^Y$)^mskVeRJhUu zq44Z)I>yc^5S}|Zq02j-$6vlA@pM7ph2onq;c{9w=6e*NWP7zNW&XG^*P>2^%ZaWl zOD!rcRP+{2^L)k81QZCqq|a{2Ynl{Ef1YowJ#SxlUK>t|d(35YGERn8xogtI8#kP7 zPO|n}8}{GtPKm>cx}SqNenFLcj$lkeMm3CVpqnG%>t*%{E?}o`u*_hl($iJ{%pDNv z``#Sls8unmDo)Jsa-cl$Xmm^ft!-Pm(XKlyS@#LZSaFE2f#IT8cNA_w9e@7(;C$L@ zyI+iE5I=bPs9^OMSyCQyQmGiBKh1*FjdT8%`iw?QTJYo0OrikW5R>2mVE2& z%om0VAUTv*F*1~lceKypK*I6usB zxy5j?7gsgz(0}tAH69&s{4HhuE>guIkwW*63Vk>{?U=wWfL$kqUsRucC(w6`5lj&U zRfQR(ISGZrpARbduo>Dk9nxXYW<-i-MeP)ud5mvQ|K+#{#&U7%=v!!!x8!*tkvA=YE&Y&f7vM?ca@RzI z#jr0}E=V^Y{7|mlz-?lue9aMIEgY+WENdXmx8>7vM;mkF^`}ecw>Md2Di*(-47){F zs$>(!DpM0m*4-nsL%*Io48xQMgu%rel-=X0><69)139pbK9XdKenNGky#0-+E^5oH z_HdqMM162?mD$|X_K!8`PqAzrFq$aNi%q+B5*QyNEZHrr|5&Qo1TlO!c%GnX^n_(D zV>N==1;Ln%Apx07ws?^E9-O`;)0OJ~zlKJ{@{$p9F!nE+uE`GFrq}n zX*X6cm)->!dW0!kIG%Mv#@x;BW;5s+a_K1XH{qwqGWGGB^C6H%;6ol zmZefxi;b3g@8@71jUFvE?lnA6i!h|bdF+xIq>SUW`qWsr%qK~T8*EKn-2g_=4&WVH z)CI>(#jlS~VKbrt`%_uX@d=ZhY*Ghs$X|qcNb&B}(j-o(*DT}eHzpGf{uh#VA(gtTEmz=oI}L0ryE~E z9wVuj6ISXywXMAabZLx;C9jFPFo9e(7%_pYW-C-AP)KC6s&PXj?r-i-4^nS&_C-oAKaka!sMhxZ=X;y#P>YT*|K2!mN)r!T3jx(%FMUrySS`}4(Z?vsLj`d z8^9F{^Ox{rSzH4OrBJ3|+YFqRKtb6SIIkWzKUc527ctX@&xeyZVmP3r|lI;hF5 zb_7EbjXHLtB6m2)XMzUrwL-XT$by}BNQSVicSeL!gYT!wy^HuGe+hufz%lM>(R8O;1A<>$vfU;W0~aVNO5H*h~CA=lygruh*+JK2%;OEIeHU zg~I}EXIbM3F~<)YA>&xB6)h=e9Zz2 zf^JdogLgjHbbMyursnu4dw6udy8zxCyd!0A59sfx9rgsM3cyy4+Estc2HpTbg6_hW z8iB;@Vy5y*lCkt?t#j{$@`_i@Dix# zR4Ri*2(Ds=ioOMvmbK@(LMA;(eXK15ffmlbQjYn@sF(saY-<&2Jo*>aCx>trx`SZ9 z^zXeMx#0AR#%m3H`WJ(t9Yd&~sGV&Fp7JEZ9eVph9JM?IBxd~(256F^zBYTCp|UFc z-IOp(dv|E7c{=Z{QCG3|0^5Ca*wy+XCQis2m87|bE>qoY+iCb~9KzlWe4B_r!%Lv6 zhQua&<7>Rn`UdY(FjLxHDOoz%6>de0L6W`(Vj1lVkNu-plFyz}(ETb(7d?s&$PFpX ziJ@K$qv|OVCAE|Xn(}-8wv8g3vd*PzeAJ^s;0rbpKD6BIIxj}?=XA%<6ejqR{=NazkcU#| z<&Az6fR8Mq$o@DZ2=T$pAH3_M%E1Y=jX+}T`Rx<89?P2qrrg*&=w`v%sgVh2TkTfF zzjdAOxXbb+mwMX{MCoFW4|_=`hhB=mwCiaq3aUVuZ$vBe7b)*0D4~>=x9$+p-Rf8U zd~O_@47myd8h(|jWy`i+ zO#xFPX^+GWuNv-;ka+ty5Q4L0cQ=%6E2OFzO6Z|DfHc@sJJn~JN) z2g)roAhM4Jd{>uc7o@XhP6uEjqq%l~iW#u7q?MNiBFN8Xt!a)fT~_t!*2=PSF@!Ri zTO_XFXw6yIL^>lprbynz2qhyN$uHV}H-E)SV2-B5i4Sge-v~itTp860q4~^&GQ?UjtjLH}$n( zcm_wlZd|!PlMUAe&Htx;H1HK!B`HEGhU5cJ?3T>ofpcQn5-y7z7o1I8lg9wv!IayV z+Dr0^CCE03D;^zDPA~Mqe*m$KK+r3cFtUs!L5pu33&#g~N@L2EI&8L^K2^>Laa z_Etr3MbHU9Kts+2@A%;oK!(dds*GBD3{943 z{y+p+ALf<^+JxzUvSEp{haDGFHJC|0A1B~hq+}0INQy78Va~OA`4?|4%M^Z-=J}=P zx+uAN8&HIYXVQW1Wh$&;YPp z=&LJfr7CqUB5*cE|0`VS7F?A+wl>K2gZv0oGpsTFTXBd^guTR&h81!J z=NlWo0(G%zawsLGHJIrmhjj0XvcshnGc;E3ec(G8q{;yB%b(`R1ao5=T&zhV15%Q1 zO#9hJ*rkA`0*rv`f0Zjfcc1U0Ur{$C>SI{AMv0*vhUxyJ&wbUo@H`GunBjmA||i$0x%$T>LIZ!^d81Hc{?- z+`cA@ydN>imygnY2|c z+nTLE{MEvg2}P7koICl@AttD306GV=;8&LvX_5-uwivo=@~>XJ*VgSW;8eQSN@W1L z0^$;&Ss@n;a9bLpSY!*|ov3d;?{3bziL~b04_#*r5x38CKM!qa_{LqF+mMkI#m=U? z!r_1zIv5N{=gi<->3?^RSXymx(1=n=1U_4F%$7HO^xT6SOKE0FcR&zdq!-LlsWWna z!UbkAVHf0U1&I0uBQB~x)}OuY{;^#V(a@ZGL%q)c3dJN zPNoJfD5UQ&kdT8>XFFaV)PNT+syozzf_gkm2bmHm>=DW4=5CO|+3#wpu8IiGx`>Wi z*YUQo8SEF4k=yx-K<)bBrTPN^w0Bny+FLma z3hu2dW`%+Zd>v*YKk3p*>xTNP{`|~nS~G*gi+Qo4UU<(-RZH=26%j(IqT2AXV?D5fLnL3VJqV*zfR)`x?j>>bo>(^M$e;9pJW?l z?N-^21;YH8q{Bx8u4n65&~Rrw7VS>LDi%NOtLVHlzPz#d|(ODZk5|Hfy)vZQH_d$DBLZjwLP_@Qtex`t zU!FqHSy6nas7}rL*S;Re8||z;mPHwJFv3I(KO0MEW3G(%Hn)|Sh~au(srboE+Lh23 zqCyEo+YTt?Tike?$}O0o=W}TpJuIvQ>nN7p;+J-}kKdZ`jkOcTr7p)~NTTVdS?-(= zcVB>s#V?P8^Z8ru#6@yDx{?6*I(1`XJ_JqTL8kiO)i?%gJfF!|gN)bl53xTtXSl!Z8isz>5ZWc0I;2OqNuT9TwOFvgEgN>Ll+f@m;Is~%Fjg_B7i43}Pbg6< zW20!H=Jih*t4lUy8nx>e1if+hIZ4>9HA@^2YMcG?+r}8}^{#s|#^nhPPaheV=Ehv2bZjNozbf-?AuC%%(*erWD&4+<9rUj1!Ur%V8{ ziSgzS%AV}m=MhTMvS&fI=oLXiU|&gm*rCd``WsRaJ~2o==;8*`+Za|KR%A(3r&}r= z5mtr${c{Cli-pHW>>Z`PaPHVJMuD{)T`X187~QU^S+dKa=c&0vXHK1gM42%VNX`%^ zv5_XX(6XT*$AjVJwdY$;@ZboF;y`-oU3@1g&(PQ45ANoEa8)fy+pe(PXw_Lq^-=54 z={IdjD4%)6`!mCcC2Mp>KQl_P2c(U`N~ta}73u~G{#y!)8uPY|ti6xx19L_oSgEiypU9VoxrkKf9M`z0|>eW4iA{y%f`h5T{%~osEw!<{_%wAeo2t znTv%nV)4DiF?S=-+WA#CU<-nYgdO%h-Gt!f?ZzL8MzWi6pMD)vegCg_n(?>hI=D>S z!po)CWLKMxigOI_qf^ON+{~8WFCVSngE~$LQGrxt?Kkm^Sg=YQ!kL#WoNyfx$9XUk zJ)r4vj0_@N^^2B* zV#~Ml7coXx$|ql^OVeycjQ`G*m+lmP4qBP_cz%IYMQb%VQy&OO24QFDi7c2I2oY$p zD~o~8KHWOrWK2P%(A`bHo1|Oa=+tJgg-Pgk?rY+G&!;9ts(5jYc+U5LxHtJ~eWsmr zN-mQJ=zo7T`99oDP=tg&c95Ouwg7j?f}K`Z9DcWwWnGpb4U5|4xZxb_RtaJl)b!0t zIOW4)!2*NCBr9tuLN{-e=$y(Qp@B>bmi0EjRBSh^FD8zcbIM&ROt(y*zmjeE0MCw) zDDq&a$(ft8Z>YC1MlC4(knJQBSjnn=55>n-#-P6H$Dafb@((dqF6R>=x7i- z0vrOZLg|=mHxuuNp_%ONDxa?&Kiw4 zUqMgtSV*++m4s`b4Vx$G>LNS{ zX`u|uBkZSfv|teFV`MvlD~JGdTpcbt3JzXXp(sm?PY1g-{|sDtXUn11|`SK z_6FkWBnBJ$D8qg-g*dC;X^k4aQvinDv5`2lanUH%)5W^+wv?pIi>zweQLc||+ zP|3w`lX>|ejF(kC2g{_>$eyiZa?^8k4pXaaw+<+u!*bNwaG%oxrXOlT{~Mu#Ykky% z*&aQ}W5_tKkvQ8;PYXq?(ou3r7O3k@Oj6GvzVKIH8o8NU^Y_A2I@Fv?U$i0?vEjVf z%~))$-VRK-9eGtL<6E?{1kSHTjFrNQUFiuz-8PV$=vrP&hY3$|rz-Rm))GD=UO9W> zD(FL2u8}Ix81-g}gqBmVLEtFICIsPlRG}WYEaqLS=E^vE!K(ed`?d3xmHA3i=>Zch zwH&_L(|pLIk3Ki4_dcS~dc;3Udcfis_W0QSELQq5&w%2l>&HatRM^2j!Fl$*zoEL} zKV&G%n?Zj~M^l`{bMB;@EJ|;lcoXQ54x}4+Vbg*v`l;1PRC{ZO(V_HecR0$$KqQ5H z3lu5_&a&Ci|2Q2#S>Tses=+Z3(fzJTQS?Ao4mVGX3N}G&g_T)q-uxNAy}-~{NG^Rc z8MoE)y;N4+cy2koKH^2clW)(4!;6f?yi<}L ze4A;>y3Uhos>eTWKPMJ=E7c*Hs>q#?uP53sRCFUa%%SeNJ)})1S?tWkmU?3rp`Ty1 zCB$pFl$_LPT$uT{ndpvpXsvzFkW~Mm8NFdW37$VytD_&RU_V~SCqA!6_9^_YxBGr) zL;oHC9^;w`No*}DX;f&e61$WT617*U6|?rLy8T{6sM@2dW{uc;TuSV{K78#_)G94X z(duoK^2z-tKEJ&Gfb)LNdCv2k=bV>)Jf>%80VU#)`ok{S+JqL0i%b!n09edr80;H9 zmU1J@!hKqlSw#)s3J;z$cxi|2K^u*NUKgPg1-UP@`9w!wjNckXhI}32HDJf>1$`M6 z0k9*eG*71wV+X5!LazN$WSqjl6%a5hyVkB`IB|n({T^9<@u1D~f`^!m!B0jG_JP0k&&2ykzl+k9wvlKISAxQqcnEeK?{pqJW z3ip3x;?;-+CV}d>BCAtoJcNXZ!n1Urx68w~cI=imO9+_NgHu6hvHNL;Zcwf@qoUA2 z99C=BQP;|h6&#dMgL5MdTYqiII*n)*o&B}E`qs!T+-0>Ml@N0?A&I9$>-?JKkSbep z%rK(6QpY>v05})_8_4IDGz&3l7jn{sK5od}YpJDTvdlek@tRRG*uv?07isHn>Ips| zmeJ*s?D5(}19VoUDHzEbu1{5Gu1D%O*9zY`(0an%s>Br6rWD6Q+hh+p3Yg$u(TR+0 zlpneGZ(semNoR^@Qch8FkVB~ce76gJ24>ft+;nm z^SeQc0LvK#msx$L5_8|DrtJ?pDbvyt4*-S3^(5Fjw7GCheK&PII7DCQvqms!>h(zF z4KoNKK&Uf@aps*$XPG(DXu}c4A$H)j4M|izRX`R|97K@Q(5aoA?H5)_%hzIP>T_ax zPo)@jZaCfw;OcU*ZA}zd&!JTfla6#JE38m%F%f zt}LFKMwVEWAo7clZ`2_{M+GWkSEbdt$I8z|m8xmyv~1IRvZzHS0N3D%D@(!F$Jo=$ zEi?}WlvW^m^I^VYP7oA_(jC3A_wBB_)EPd}-lu4w4qmO#{Svw1OPBl7yWi;5H1LEvJoEU zoJ*jrn@9VxUx`o&>%6xkwDC!MxuEbpZcTv~(&~xTdL|yG%kX~pNahEN^r!nb@kGF= z60Y2RKPWm8vo~vTw!Gk?5SL|`DU2`gB1Jr&BkA_ zQf>XcR#myqgiOgd<^x&bFs)z<^)XcSi6GR`U_r2EEgEsaNXw;Wgxm*N#n6?ZtDhBd z-B7%bz{F>%z5L--w+JJR9cqyUz!i9P9#uhdr)S>vJcWtS`TkMo%=B@rrk7ZJ);3$gH)z(Nj~|0kWqrfH)ibS#(HH;mN+ zm+c3cBcYzZSY=!Fg4C*?rV%3S1|uv_db}-Yn#sZ9KhLJZ3T&6cLOAjRL2w#R$EA6F zp$$~CehMacTn)sWw{bNIKFYdIq$N=y!Y7JbCk2U{h` z*mp@Gug9$3vygWHMe#MZrl{$M9&T*x4_Gt$Xx~T~FN{oV1LETEul5tsv_?iJiOfPm zWp4=c^T`T(ZZo3w>+s@dE~giNGg4rJ%TDQGbtYefYf2M4Lm3qX5VMxpW`!i%Onya6 zjrUuOu}XBTt$Jp6mzKbj1^!84;|l+n+-azH@1zk%G6R4i_U!DKfo4F(M z9V6?b>%s|BB?|TG_Wz1{8jW*Ws~|z4F;N^q0oT!>!_;&c?Xn~~chI9by%-fXL2M^~ z8;wPY;wrivo#zw}<}^JNCNF39iHvS>ewrq{H%iS`|B#lUJseG65WihU2nFePmT~*q z0cGd#RX~9-#1@Y}mMtfld#VI}E5yt-Ia0sg9ls@?W+e!N&-2~mGv_@=S ze9CH#=OXDH9g4IlIveXrnCBa;XgdW8x-bhdP3gLNGz1Lj&NZA{CMkTdm#K_VL#DHm z<&01GC7$mvxO<<~G=E$r8KsVKxv(*6|9RPW_ezr^SDFxX|D8;pr_!v7$P<~^8#!l& zuz0TT{&N9&wDU5bwr<0eP9dLu%a0DFPX1KjK`yuJ6)ArDC4HxBJKdz%Pp51CLUV*C z=^5%D_+=5zE}DRodcpx(l8()Y&EaX)aMkIuw~=@HznmA-@TbYQUS~m{ttg(p;DwIb zz*4_Sn~favb(O|G(j9G`l*D6*b(BS)gg8@%=`;J53ctp1z+#NkKreX+U<;gvI8PW1 z3UTZz8zO}GMjY2^;u^21@zFT z%3>ddrYUT3Tk5~1-V1LmliRE2Rg-S*31wZND$EQZp7ob-E>XuL$mH zIp6)fgjJ1-J%2xBzb&X+SO$1Qw|;(7t)%SGR9h*=gRTyw6nYUK!fKi%P(!^nQZ{p@ z&1E#4u~G8{S%JC;_NV|}zFGi#Q1780f#DfLqkR2o4gVJh8G?YW(eZFWC307MK6I-_ z@>8DkPKkTq%avEz1FZ4o=zO)gjrGO;O8&(5tvy_P3tq`mtgod+bqbn!VkoY4Xc z%8wN^$!l=I3iaM9o=d~Xg9q8FVt*x9NP};~P6_gI<{p8DydX=Rt8>DJCrDx5So?qV d49N9gGY{`3c5BIsZP9F0fWD3)rcTR|^k2|w_}Tyf literal 0 HcmV?d00001 diff --git a/VRCOSC.Game.Tests/Program.cs b/VRCOSC.Game.Tests/Program.cs new file mode 100644 index 00000000..f792563c --- /dev/null +++ b/VRCOSC.Game.Tests/Program.cs @@ -0,0 +1,14 @@ +using osu.Framework; +using osu.Framework.Platform; + +namespace VRCOSC.Game.Tests; + +public static class Program +{ + public static void Main() + { + using GameHost host = Host.GetSuitableDesktopHost("visual-tests"); + using var game = new VRCOSCTestBrowser(); + host.Run(game); + } +} diff --git a/VRCOSC.Game.Tests/VRCOSC.Game.Tests.csproj b/VRCOSC.Game.Tests/VRCOSC.Game.Tests.csproj new file mode 100644 index 00000000..aef6bde3 --- /dev/null +++ b/VRCOSC.Game.Tests/VRCOSC.Game.Tests.csproj @@ -0,0 +1,14 @@ + + + WinExe + net6.0 + false + + + + + + + + + diff --git a/VRCOSC.Game.Tests/VRCOSCTestBrowser.cs b/VRCOSC.Game.Tests/VRCOSCTestBrowser.cs new file mode 100644 index 00000000..a1bd99a1 --- /dev/null +++ b/VRCOSC.Game.Tests/VRCOSCTestBrowser.cs @@ -0,0 +1,26 @@ +using osu.Framework.Graphics; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Platform; +using osu.Framework.Testing; + +namespace VRCOSC.Game.Tests; + +public class VRCOSCTestBrowser : VRCOSCGameBase +{ + protected override void LoadComplete() + { + base.LoadComplete(); + + AddRange(new Drawable[] + { + new TestBrowser("VRCOSC"), + new CursorContainer() + }); + } + + public override void SetHost(GameHost host) + { + base.SetHost(host); + host.Window.CursorState |= CursorState.Hidden; + } +} diff --git a/VRCOSC.Game.Tests/Visual/VRCOSCTestScene.cs b/VRCOSC.Game.Tests/Visual/VRCOSCTestScene.cs new file mode 100644 index 00000000..4cc1187c --- /dev/null +++ b/VRCOSC.Game.Tests/Visual/VRCOSCTestScene.cs @@ -0,0 +1,27 @@ +using osu.Framework.Testing; + +namespace VRCOSC.Game.Tests.Visual; + +public class VRCOSCTestScene : TestScene +{ + protected override ITestSceneTestRunner CreateRunner() + { + return new VRCOSCTestSceneTestRunner(); + } + + private class VRCOSCTestSceneTestRunner : VRCOSCGameBase, ITestSceneTestRunner + { + private TestSceneTestRunner.TestRunner runner; + + public void RunTestBlocking(TestScene test) + { + runner.RunTestBlocking(test); + } + + protected override void LoadAsyncComplete() + { + base.LoadAsyncComplete(); + Add(runner = new TestSceneTestRunner.TestRunner()); + } + } +} diff --git a/VRCOSC.Game/MainScreen.cs b/VRCOSC.Game/MainScreen.cs new file mode 100644 index 00000000..316e5511 --- /dev/null +++ b/VRCOSC.Game/MainScreen.cs @@ -0,0 +1,32 @@ +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Screens; +using osuTK.Graphics; + +namespace VRCOSC.Game; + +public class MainScreen : Screen +{ + [BackgroundDependencyLoader] + private void load() + { + InternalChildren = new Drawable[] + { + new Box + { + Colour = Color4.Violet, + RelativeSizeAxes = Axes.Both + }, + new SpriteText + { + Y = 20, + Text = "Main Screen", + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + Font = FontUsage.Default.With(size: 40) + } + }; + } +} diff --git a/VRCOSC.Game/VRCOSC.Game.csproj b/VRCOSC.Game/VRCOSC.Game.csproj new file mode 100644 index 00000000..ebde918f --- /dev/null +++ b/VRCOSC.Game/VRCOSC.Game.csproj @@ -0,0 +1,11 @@ + + + net6.0 + + + + + + + + diff --git a/VRCOSC.Game/VRCOSCGame.cs b/VRCOSC.Game/VRCOSCGame.cs new file mode 100644 index 00000000..9a578d89 --- /dev/null +++ b/VRCOSC.Game/VRCOSCGame.cs @@ -0,0 +1,22 @@ +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Screens; + +namespace VRCOSC.Game; + +public class VRCOSCGame : VRCOSCGameBase +{ + private ScreenStack screenStack; + + [BackgroundDependencyLoader] + private void load() + { + Child = screenStack = new ScreenStack { RelativeSizeAxes = Axes.Both }; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + screenStack.Push(new MainScreen()); + } +} diff --git a/VRCOSC.Game/VRCOSCGameBase.cs b/VRCOSC.Game/VRCOSCGameBase.cs new file mode 100644 index 00000000..574eae6c --- /dev/null +++ b/VRCOSC.Game/VRCOSCGameBase.cs @@ -0,0 +1,27 @@ +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.IO.Stores; +using osuTK; +using VRCOSC.Resources; + +namespace VRCOSC.Game; + +public class VRCOSCGameBase : osu.Framework.Game +{ + protected VRCOSCGameBase() + { + base.Content.Add(Content = new DrawSizePreservingFillContainer + { + TargetDrawSize = new Vector2(1366, 768) + }); + } + + protected override Container Content { get; } + + [BackgroundDependencyLoader] + private void load() + { + Resources.AddStore(new DllResourceStore(typeof(VRCOSCResources).Assembly)); + } +} diff --git a/VRCOSC.Resources/VRCOSC.Resources.csproj b/VRCOSC.Resources/VRCOSC.Resources.csproj new file mode 100644 index 00000000..c0ac5c7e --- /dev/null +++ b/VRCOSC.Resources/VRCOSC.Resources.csproj @@ -0,0 +1,11 @@ + + + netstandard2.1 + + + + + + + + diff --git a/VRCOSC.Resources/VRCOSCResources.cs b/VRCOSC.Resources/VRCOSCResources.cs new file mode 100644 index 00000000..7d5b2624 --- /dev/null +++ b/VRCOSC.Resources/VRCOSCResources.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace VRCOSC.Resources +{ + public static class VRCOSCResources + { + public static Assembly ResourceAssembly => typeof(VRCOSCResources).Assembly; + } +} diff --git a/VRCOSC.sln b/VRCOSC.sln new file mode 100644 index 00000000..d10501ba --- /dev/null +++ b/VRCOSC.sln @@ -0,0 +1,47 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29409.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRCOSC.Desktop", "VRCOSC.Desktop\VRCOSC.Desktop.csproj", "{AEB3FC89-DC3E-4BC9-9EC7-03B72FC5D849}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRCOSC.Game", "VRCOSC.Game\VRCOSC.Game.csproj", "{1ADACD09-7BE3-46A1-AEAB-C41E78E8700F}" +EndProject +Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "VRCOSC.Game.Tests", "VRCOSC.Game.Tests\VRCOSC.Game.Tests.csproj", "{0A9CA1A5-5147-4AA8-9B9D-87178DE5A78D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRCOSC.Resources", "VRCOSC.Resources\VRCOSC.Resources.csproj", "{31D3872C-3A4F-437E-9655-3EF58DD62F46}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9AF9C164-2A9E-4958-BB12-0FEDC40F58EC}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + Directory.Build.props = Directory.Build.props + VRCOSC.sln.DotSettings = VRCOSC.sln.DotSettings + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AEB3FC89-DC3E-4BC9-9EC7-03B72FC5D849}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AEB3FC89-DC3E-4BC9-9EC7-03B72FC5D849}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AEB3FC89-DC3E-4BC9-9EC7-03B72FC5D849}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AEB3FC89-DC3E-4BC9-9EC7-03B72FC5D849}.Release|Any CPU.Build.0 = Release|Any CPU + {1ADACD09-7BE3-46A1-AEAB-C41E78E8700F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1ADACD09-7BE3-46A1-AEAB-C41E78E8700F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1ADACD09-7BE3-46A1-AEAB-C41E78E8700F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1ADACD09-7BE3-46A1-AEAB-C41E78E8700F}.Release|Any CPU.Build.0 = Release|Any CPU + {0A9CA1A5-5147-4AA8-9B9D-87178DE5A78D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A9CA1A5-5147-4AA8-9B9D-87178DE5A78D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A9CA1A5-5147-4AA8-9B9D-87178DE5A78D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A9CA1A5-5147-4AA8-9B9D-87178DE5A78D}.Release|Any CPU.Build.0 = Release|Any CPU + {31D3872C-3A4F-437E-9655-3EF58DD62F46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31D3872C-3A4F-437E-9655-3EF58DD62F46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31D3872C-3A4F-437E-9655-3EF58DD62F46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31D3872C-3A4F-437E-9655-3EF58DD62F46}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/VRCOSC.sln.DotSettings b/VRCOSC.sln.DotSettings new file mode 100644 index 00000000..34039593 --- /dev/null +++ b/VRCOSC.sln.DotSettings @@ -0,0 +1,538 @@ + + True + True + True + True + ExplicitlyExcluded + ExplicitlyExcluded + SOLUTION + WARNING + WARNING + WARNING + HINT + HINT + WARNING + WARNING + True + WARNING + WARNING + HINT + DO_NOT_SHOW + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + HINT + SUGGESTION + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + HINT + WARNING + DO_NOT_SHOW + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + DO_NOT_SHOW + WARNING + HINT + DO_NOT_SHOW + HINT + HINT + ERROR + WARNING + HINT + HINT + HINT + WARNING + WARNING + HINT + DO_NOT_SHOW + HINT + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + HINT + HINT + HINT + DO_NOT_SHOW + HINT + HINT + WARNING + WARNING + HINT + WARNING + WARNING + WARNING + WARNING + HINT + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + WARNING + + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + ERROR + WARNING + WARNING + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + DO_NOT_SHOW + DO_NOT_SHOW + HINT + DO_NOT_SHOW + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + HINT + HINT + HINT + HINT + HINT + HINT + HINT + + HINT + HINT + HINT + DO_NOT_SHOW + WARNING + WARNING + WARNING + WARNING + WARNING + + True + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + HINT + WARNING + WARNING + <?xml version="1.0" encoding="utf-16"?><Profile name="Code Cleanup (peppy)"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>ALWAYS_EXPLICIT</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSUpdateFileHeader>True</CSUpdateFileHeader><CSCodeStyleAttributes ArrangeTypeAccessModifier="False" ArrangeTypeMemberAccessModifier="False" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="False" ArrangeBraces="False" ArrangeAttributes="False" ArrangeArgumentsStyle="False" /><XAMLCollapseEmptyTags>False</XAMLCollapseEmptyTags><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CSArrangeQualifiers>True</CSArrangeQualifiers></Profile> + Code Cleanup (peppy) + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + RequiredForMultiline + Explicit + ExpressionBody + BlockBody + True + NEXT_LINE + True + True + True + True + True + True + True + True + NEXT_LINE + 1 + 1 + NEXT_LINE + MULTILINE + True + True + True + True + NEXT_LINE + 1 + 1 + True + NEXT_LINE + NEVER + NEVER + True + False + True + NEVER + False + False + True + False + False + True + True + False + False + CHOP_IF_LONG + True + 200 + CHOP_IF_LONG + False + False + AABB + API + BPM + GC + GL + GLSL + 2D + 3D + HID + HUD + ID + IL + IOS + IP + IPC + JIT + LTRB + MD5 + NS + OS + PM + RGB + RNG + SDL + SHA + RGB + SRGB + TK + SS + PP + GMT + QAT + BNG + UI + False + HINT + + <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> + <Policy Inspect="False" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb"><ExtraRule Prefix="_" Suffix="" Style="aaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="private methods"><ElementKinds><Kind Name="ASYNC_METHOD" /><Kind Name="METHOD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public" Description="internal/protected/public methods"><ElementKinds><Kind Name="ASYNC_METHOD" /><Kind Name="METHOD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="private properties"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public" Description="internal/protected/public properties"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + + True + True + True + True + True + True + True + o!f – Object Initializer: Anchor&Origin + True + constant("Centre") + 0 + True + True + 2.0 + InCSharpFile + ofao + True + Anchor = Anchor.$anchor$, +Origin = Anchor.$anchor$, + True + True + o!f – InternalChildren = [] + True + True + 2.0 + InCSharpFile + ofic + True + InternalChildren = new Drawable[] +{ + $END$ +}; + True + True + o!f – new GridContainer { .. } + True + True + 2.0 + InCSharpFile + ofgc + True + new GridContainer +{ + RelativeSizeAxes = Axes.Both, + Content = new[] + { + new Drawable[] { $END$ }, + new Drawable[] { } + } +}; + True + True + o!f – new FillFlowContainer { .. } + True + True + 2.0 + InCSharpFile + offf + True + new FillFlowContainer +{ + RelativeSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Children = new Drawable[] + { + $END$ + } +}, + True + True + o!f – new Container { .. } + True + True + 2.0 + InCSharpFile + ofcont + True + new Container +{ + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + $END$ + } +}, + True + True + o!f – BackgroundDependencyLoader load() + True + True + 2.0 + InCSharpFile + ofbdl + True + [BackgroundDependencyLoader] +private void load() +{ + $END$ +} + True + True + o!f – new Box { .. } + True + True + 2.0 + InCSharpFile + ofbox + True + new Box +{ + Colour = Color4.Black, + RelativeSizeAxes = Axes.Both, +}, + True + True + o!f – Children = [] + True + True + 2.0 + InCSharpFile + ofc + True + Children = new Drawable[] +{ + $END$ +}; + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True diff --git a/app.manifest b/app.manifest new file mode 100644 index 00000000..1c1e5f54 --- /dev/null +++ b/app.manifest @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + +