diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 0000000000..03efa87b74 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "csharpier": { + "version": "0.29.2", + "commands": [ + "dotnet-csharpier" + ] + } + } +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index 3c09d9f6c0..ea74d31dad 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,90 +1,393 @@ +############################################################################### +# EditorConfig is awesome: http://EditorConfig.org +############################################################################### +############################################################################### +# Top-most EditorConfig file +############################################################################### +root = true + +############################################################################### +# Set default behavior to: +# a UTF-8 encoding, +# Unix-style line endings, +# a newline ending the file, +# 4 space indentation, and +# trimming of trailing whitespace +############################################################################### [*] charset = utf-8 end_of_line = lf -trim_trailing_whitespace = false insert_final_newline = true indent_style = space indent_size = 4 +trim_trailing_whitespace = true +file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license. + +############################################################################### +# Set file behavior to: +# 2 space indentation +############################################################################### +[*.{cmd,config,csproj,json,props,ps1,resx,sh,targets,yml}] +indent_size = 2 + +############################################################################### +# Set file behavior to: +# Windows-style line endings, and +# tabular indentation +############################################################################### +[*.sln] +end_of_line = crlf +indent_style = tab + +############################################################################### +# Set dotnet naming rules to: +# suggest async members be pascal case suffixed with Async +# suggest const declarations be pascal case +# suggest interfaces be pascal case prefixed with I +# suggest parameters be camel case +# suggest private and internal static fields be camel case and prefixed with s and underscore +# suggest private and internal fields be camel case and prefixed with underscore +# suggest public and protected declarations be pascal case +# suggest static readonly declarations be pascal case +# suggest type parameters be prefixed with T +############################################################################### +[*.cs] +dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.severity = suggestion +dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.style = pascal_case_suffixed_with_async +dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.symbols = async_members + +dotnet_naming_rule.const_declarations_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.const_declarations_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.const_declarations_should_be_pascal_case.symbols = const_declarations + +dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.severity = suggestion +dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.style = pascal_case_prefixed_with_i +dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.symbols = interfaces + +dotnet_naming_rule.parameters_should_be_camel_case.severity = suggestion +dotnet_naming_rule.parameters_should_be_camel_case.style = camel_case +dotnet_naming_rule.parameters_should_be_camel_case.symbols = parameters + +dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.severity = suggestion +dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.style = camel_case_prefixed_with_underscore +dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.symbols = private_fields + +dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.symbols = public_and_protected_declarations +dotnet_naming_symbols.public_and_protected_declarations.applicable_kinds = method, field, event, property + +dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.style = pascal_case +dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.symbols = static_readonly_declarations + +dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.severity = suggestion +dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.style = pascal_case_prefixed_with_t +dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.symbols = type_parameters + +############################################################################### +# Set dotnet naming styles to define: +# camel case +# camel case prefixed with _ +# camel case prefixed with s_ +# pascal case +# pascal case suffixed with Async +# pascal case prefixed with I +# pascal case prefixed with T +############################################################################### +dotnet_naming_style.camel_case.capitalization = camel_case + +dotnet_naming_style.camel_case_prefixed_with_s_and_underscore.capitalization = camel_case +dotnet_naming_style.camel_case_prefixed_with_s_and_underscore.required_prefix = s_ + +dotnet_naming_style.camel_case_prefixed_with_underscore.capitalization = camel_case +dotnet_naming_style.camel_case_prefixed_with_underscore.required_prefix = _ + +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case_suffixed_with_async.capitalization = pascal_case +dotnet_naming_style.pascal_case_suffixed_with_async.required_suffix = Async + +dotnet_naming_style.pascal_case_prefixed_with_i.capitalization = pascal_case +dotnet_naming_style.pascal_case_prefixed_with_i.required_prefix = I + +dotnet_naming_style.pascal_case_prefixed_with_t.capitalization = pascal_case +dotnet_naming_style.pascal_case_prefixed_with_t.required_prefix = T + +############################################################################### +# Set dotnet naming symbols to: +# async members +# const declarations +# interfaces +# private and internal fields +# private and internal static fields +# public and protected declarations +# static readonly declarations +# type parameters +############################################################################### +dotnet_naming_symbols.async_members.required_modifiers = async +dotnet_naming_symbols.async_members.applicable_kinds = method + +dotnet_naming_symbols.const_declarations.required_modifiers = const +dotnet_naming_symbols.const_declarations.applicable_kinds = method + +dotnet_naming_symbols.interfaces.applicable_kinds = interface + +dotnet_naming_symbols.parameters.applicable_kinds = parameter + +dotnet_naming_symbols.private_and_internal_fields.applicable_accessibilities = private, internal +dotnet_naming_symbols.private_and_internal_fields.applicable_kinds = field + +dotnet_naming_symbols.private_and_internal_static_fields.applicable_accessibilities = private, internal +dotnet_naming_symbols.private_and_internal_static_fields.applicable_kinds = field +dotnet_naming_symbols.private_and_internal_static_fields.required_modifiers = static + +dotnet_naming_symbols.private_fields.applicable_accessibilities = private +dotnet_naming_symbols.private_fields.applicable_kinds = field + +dotnet_naming_symbols.public_and_protected_declarations.applicable_accessibilities = public, protected + +dotnet_naming_symbols.static_readonly_declarations.required_modifiers = static, readonly +dotnet_naming_symbols.static_readonly_declarations.applicable_kinds = field +dotnet_naming_symbols.static_readonly_declarations.applicable_accessibilities = public, protected + +dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter + +############################################################################### +# Set dotnet sort options to: +# do not separate import directives into groups, and +# sort system directives first +############################################################################### +dotnet_separate_import_directive_groups = false +dotnet_sort_system_directives_first = true -# Microsoft .NET properties -csharp_new_line_before_members_in_object_initializers = false -csharp_new_line_before_open_brace = all +############################################################################### +# Set dotnet style options to: +# suggest null-coalescing expressions, +# suggest collection-initializers, +# suggest explicit tuple names, +# suggest null-propogation +# suggest object-initializers, +# suggest parentheses in arithmetic binary operators for clarity, +# suggest parentheses in other binary operators for clarity, +# don't suggest parentheses in other operators if unnecessary, +# suggest parentheses in relational binary operators for clarity, +# suggest predefined-types for locals, parameters, and members, +# suggest predefined-types of type names for member access, +# don't suggest auto properties, +# suggest compound assignment, +# suggest conditional expression over assignment, +# suggest conditional expression over return, +# suggest inferred anonymous types, +# suggest inferred tuple names, +# suggest 'is null' checks over '== null', +# don't suggest 'this.' and 'Me.' for events, +# don't suggest 'this.' and 'Me.' for fields, +# don't suggest 'this.' and 'Me.' for methods, +# don't suggest 'this.' and 'Me.' for properties, +# suggest readonly fields, and +# suggest specifying accessibility modifiers +############################################################################### +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_object_initializer = true:suggestion + +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion + +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +dotnet_style_prefer_auto_properties = false:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion + +dotnet_style_qualification_for_event = false:suggestion +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_property = false:suggestion + +dotnet_style_readonly_field = true:suggestion +dotnet_style_require_accessibility_modifiers = always:suggestion + +############################################################################### +# Set dotnet style options to: +# suggest removing all unused parameters +############################################################################### +dotnet_code_quality_unused_parameters = all:suggestion + +############################################################################### +# Set csharp indent options to: +# indent block contents, +# not indent braces, +# indent case contents, +# not indent case contents when block, +# indent labels one less than the current, and +# indent switch labels +############################################################################### +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = false +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +############################################################################### +# Set csharp new-line options to: +# insert a new-line before "catch", +# insert a new-line before "else", +# insert a new-line before "finally", +# insert a new-line before members in anonymous-types, +# insert a new-line before members in object-initializers, +# insert a new-line before all open braces except anonymous methods, anonymous types, lambdas, and object collections and +# insert a new-line within query expression clauses +############################################################################### csharp_new_line_before_catch = true csharp_new_line_before_else = true csharp_new_line_before_finally = true -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_cast = true + +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true + +csharp_new_line_before_open_brace = accessors, control_blocks, events, indexers, local_functions, methods, properties, types + +csharp_new_line_within_query_expression_clauses = true + +############################################################################### +# Set csharp preserve options to: +# preserve single-line blocks, and +# not preserve single-line statements +############################################################################### +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = false + +############################################################################### +# Set csharp space options to: +# remove any space after a cast, +# add a space after the colon in an inheritance clause, +# add a space after a comma, +# remove any space after a dot, +# add a space after keywords in control flow statements, +# add a space after a semicolon in a "for" statement, +# add a space before and after binary operators, +# remove space around declaration statements, +# add a space before the colon in an inheritance clause, +# remove any space before a comma, +# remove any space before a dot, +# remove any space before an open square-bracket, +# remove any space before a semicolon in a "for" statement, +# remove any space between empty square-brackets, +# remove any space between a method call's empty parameter list parenthesis, +# remove any space between a method call's name and its opening parenthesis, +# remove any space between a method call's parameter list parenthesis, +# remove any space between a method declaration's empty parameter list parenthesis, +# remove any space between a method declaration's name and its openening parenthesis, +# remove any space between a method declaration's parameter list parenthesis, +# remove any space between parentheses, and +# remove any space between square brackets +############################################################################### +csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true + +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false + csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false + +csharp_space_between_empty_square_brackets = false +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_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_prefer_simple_default_expression = true:hint -csharp_preferred_modifier_order = public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion -csharp_style_var_elsewhere = true:hint -csharp_style_var_for_built_in_types = true:hint -csharp_style_var_when_type_is_apparent = true:hint -dotnet_style_predefined_type_for_locals_parameters_members = true:hint -dotnet_style_predefined_type_for_member_access = true:hint -dotnet_style_qualification_for_event = false:warning -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_require_accessibility_modifiers = for_non_interface_members:hint -csharp_style_inlined_variable_declaration = true:hint -dotnet_sort_system_directives_first = true -dotnet_public_api_analyzer.require_api_files = true -dotnet_diagnostic.RS0016.severity = error -dotnet_diagnostic.RS0017.severity = error - -# we should care more about this one day -dotnet_diagnostic.RS0041.severity = warn - -# public api warnings silk.net doesn't care about -dotnet_diagnostic.RS0026.severity = none # Don't add multiple public overloads with optional parameters -dotnet_diagnostic.RS0027.severity = none # Overloads w/ optional parameters should have the most parameters of all overloads - -# ReSharper properties -resharper_autodetect_indent_settings = true -resharper_braces_for_for = required -resharper_braces_for_foreach = required -resharper_braces_for_ifelse = required -resharper_braces_for_while = required -resharper_csharp_insert_final_newline = true -resharper_csharp_wrap_before_declaration_lpar = true -resharper_csharp_wrap_before_invocation_lpar = true -resharper_csharp_wrap_extends_list_style = chop_if_long -resharper_csharp_wrap_parameters_style = chop_if_long -resharper_use_indent_from_vs = false -resharper_wrap_after_declaration_lpar = true -resharper_wrap_after_invocation_lpar = true -resharper_wrap_before_declaration_rpar = true -resharper_wrap_before_invocation_rpar = true -resharper_wrap_chained_method_calls = chop_if_long -resharper_xmldoc_indent_child_elements = DoNotTouch -resharper_xmldoc_indent_text = DoNotTouch - -# ReSharper inspection severities -resharper_invert_if_highlighting = none -resharper_web_config_module_not_resolved_highlighting = warning -resharper_web_config_type_not_resolved_highlighting = warning -resharper_web_config_wrong_module_highlighting = warning - -# Silk Touch options -silk_touch_vtable_generate = true -silk_touch_vtable_tree_emit_assert = true -silk_touch_sealed_vtable_creation = true -silk_touch_vtable_preload = false -silk_touch_telemetry = false -silk_touch_compact_file_format = true - -[*.{appxmanifest,asax,ascx,aspx,build,config,cs,cshtml,csproj,dbml,discomap,dtd,fs,fsi,fsscript,fsx,htm,html,jsproj,lsproj,master,ml,mli,njsproj,nuspec,proj,props,razor,resw,resx,skin,StyleCop,targets,tasks,vb,vbproj,xaml,xamlx,xml,xoml,xsd}] -indent_style = space -indent_size = 4 -tab_width = 4 +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +############################################################################### +# Set csharp style options to: +# suggest braces, +# suggest simple default expressions, +# suggest a preferred modifier order, +# suggest conditional delegate calls, +# suggest deconstructed variable declarations, +# don't suggest expression-bodied accessors, +# don't suggest expression-bodied indexers, +# don't suggest expression-bodied constructors, +# suggest expression-bodied lambdas, +# don't suggest expression-bodied methods, +# don't suggest expression-bodied operators, +# don't suggest expression-bodied properties, +# suggest inlined variable declarations, +# suggest local over anonymous functions, +# suggest pattern-matching over "as" with "null" check, +# suggest pattern-matching over "is" with "cast" check, +# suggest throw expressions, +# suggest a discard variable for unused value expression statements, +# suggest a discard variable for unused assignments, +# suggest var for built-in types, +# suggest var when the type is not apparent, and +# suggest var when the type is apparent +############################################################################### +csharp_prefer_braces = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion + +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion + +csharp_style_expression_bodied_accessors = true:suggestion +csharp_style_expression_bodied_constructors = true:suggestion +csharp_style_expression_bodied_indexers = true:suggestion +csharp_style_expression_bodied_lambdas = true:suggestion +csharp_style_expression_bodied_methods = true:suggestion +csharp_style_expression_bodied_operators = true:suggestion +csharp_style_expression_bodied_properties = true:suggestion -# License header + warning generated if missing -file_header_template=Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license. -dotnet_diagnostic.IDE0073.severity = warning +csharp_style_inlined_variable_declaration = true:suggestion + +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion + +csharp_style_throw_expression = true:suggestion + +csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion + +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_elsewhere = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion + +resharper_foreach_can_be_converted_to_query_using_another_get_enumerator_highlighting = none +resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting = none +resharper_loop_can_be_converted_to_query_highlighting = none +resharper_loop_can_be_partly_converted_to_query_highlighting = none +resharper_identifier_typo_highlighting = none +resharper_string_literal_typo_highlighting = none +resharper_comment_typo_highlighting = true + +# Verify settings +[*.{received,verified}.{txt,xml,json}] +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes index 15c2ee7738..a9bf48ad05 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,7 @@ # treat as text and # normalize to Unix-style line endings ############################################################################### -* text=auto +* text eol=lf ############################################################################### # Set explicit file behavior to: @@ -14,7 +14,6 @@ *.config text eol=lf *.cs text eol=lf *.csproj text eol=lf -*.hlsl text eol=lf *.json text eol=lf *.md text eol=lf *.props text eol=lf @@ -24,6 +23,7 @@ *.sln text eol=lf *.targets text eol=lf *.yml text eol=lf +*.hlsl text eof=lf ############################################################################### # Set explicit file behavior to: @@ -36,36 +36,55 @@ # Set explicit file behavior to: # treat as binary ############################################################################### -*.snk binary -*.gz binary -*.png binary -*.p7s binary -*.sample binary -*.nupkg binary -*.exe binary -*.idx binary -*.pack binary -*.spv binary -*.zip binary -*.lib binary -*.dylib binary -*.so binary -*.dll binary -*.xcscheme binary +*.snk binary + +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.mov binary +*.mp4 binary +*.mp3 binary +*.flv binary +*.fla binary +*.swf binary +*.gz binary +*.zip binary +*.7z binary +*.ttf binary +*.stout binary +*.p7s binary +*.sample binary +*.nupkg binary +*.exe binary +*.idx binary +*.pack binary +*.spv binary +*.lib binary +*.dylib binary +*.so binary +*.dll binary +*.xcscheme binary *.xcworkspacedata binary -*.pdf binary -*.pfx binary -*.metal binary -*.jar binary -*.apk binary -*.aar binary -*.aidl binary -*.flata binary -*.metallib binary -*.items binary -*.stamp binary -*.icns binary -*.mdb binary -*.pdb binary -*.bmp binary -*.dat binary +*.pdf binary +*.pfx binary +*.metal binary +*.jar binary +*.apk binary +*.aar binary +*.aidl binary +*.flata binary +*.metallib binary +*.items binary +*.stamp binary +*.icns binary +*.mdb binary +*.pdb binary +*.bmp binary +*.dat binary + +# Verify +*.verified.txt text eol=lf working-tree-encoding=UTF-8 +*.verified.xml text eol=lf working-tree-encoding=UTF-8 +*.verified.json text eol=lf working-tree-encoding=UTF-8 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index feba1654f5..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [HurricanKai] diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md deleted file mode 100644 index 9e9f41b27b..0000000000 --- a/.github/SUPPORT.md +++ /dev/null @@ -1,8 +0,0 @@ -# Getting Support -For support, please either use [GitHub Discussions](https://github.com/dotnet/Silk.NET/discussions) or chat to us on [Discord](https://discord.com/invite/DTHHXRt). - - -Banner image of the Silk.NET Discord server - - -Please do not use issues for support, issues are for bug reports only. diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index d0af823507..0000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -updates: -- package-ecosystem: nuget - target-branch: main - directory: "/" - schedule: - interval: weekly - day: thursday -- package-ecosystem: nuget - target-branch: develop/3.0 - directory: "/" - schedule: - interval: weekly - day: thursday diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index 66c2bd9570..0000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,40 +0,0 @@ -area-Assimp: -- any: ['src/Assimp/**/*'] - -area-BuildTools: -- any: ['src/Core/Silk.NET.BuildTools/**/*'] - -area-Input: -- any: ['src/Input/**/*'] - -area-Windowing: -- any: ['src/Windowing/**/*'] - -area-OpenAL: -- any: ['src/OpenAL/**/*'] - -area-OpenCL: -- any: ['src/OpenCL/**/*'] - -area-OpenGL: -- any: ['src/OpenGL/**/*'] - -area-OpenXR: -- any: ['src/OpenXR/**/*'] - -area-Vulkan: -- any: ['src/Vulkan/**/*'] - -area-DirectX/Windows: -- any: ['src/Microsoft/**/*'] - -area-Metal: -- any: ['src/Apple/Metal/**/*'] - -area-FEMFX: -- any: ['src/AMD/FEMFX/**/*'] - -platform-GLFW: -- any: ['src/Windowing/Silk.NET.GLFW/**/*', - 'src/Windowing/Silk.NET.Windowing.Desktop/**/*', - 'src/Windowing/Silk.NET.Windowing.Glfw/**/*'] diff --git a/.github/workflows/assimp.yml b/.github/workflows/assimp.yml deleted file mode 100644 index c1ba9d10e8..0000000000 --- a/.github/workflows/assimp.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Assimp -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/Assimp - - build/nuke/Native/Core.cs - - build/nuke/Native/Assimp.cs - - .github/workflows/assimp.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y xorg-dev - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: "" - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git. - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive --depth 0 build/submodules/Assimp - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build Assimp - run: ${{ matrix.env.nuke_invoke }} assimp - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/bindings-regeneration.yml b/.github/workflows/bindings-regeneration.yml deleted file mode 100644 index 97ba5c9877..0000000000 --- a/.github/workflows/bindings-regeneration.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Bindings Regeneration - -on: - schedule: - - cron: '0 0 * * Fri' - workflow_dispatch: - -jobs: - build: - - runs-on: windows-quick - - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git. - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Setup .NET Core - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 3.1.302 - - name: Setup Java JDK 11 - uses: actions/setup-java@v2.3.0 - with: - java-version: 11 - distribution: "temurin" - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.102 - - name: Setup .NET 6.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.201 - - name: Setup .NET 5.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 5.0.201 - - name: Setup .NET Core 3.1 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 3.1.404 - - name: Setup NUKE - run: dotnet tool install Nuke.GlobalTool --global - - name: Install Workloads - # TODO: This is slow. Maybe we can make a docker container with this already done? - run: dotnet workload install android ios maccatalyst maui - - uses: GuillaumeFalourd/setup-windows10-sdk-action@v1.9 - name: Setup Windows 11 SDK - with: - sdk-version: 22621 - - name: Run a full run of BuildTools - run: ./build.cmd regenerate-bindings --create-bindings-pr - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index a749157767..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: CI Build -on: - push: - branches: - - 'main' - - 'release/*' - paths-ignore: - - 'documentation/**' - tags: - - '*' - pull_request: - # all branches - paths-ignore: - - 'documentation/**' -permissions: - packages: write -jobs: - Build: - runs-on: macos-13-xlarge - steps: - - uses: actions/checkout@v3.5.2 - with: - submodules: 'false' - - name: Clone submodules non-recursively - run: git submodule update --init --depth 0 - - name: Setup Java JDK 11 - uses: actions/setup-java@v2.3.0 - with: - java-version: 11 - distribution: "temurin" - - name: Setup Android Environment - uses: android-actions/setup-android@v2 - env: - ANDROID_SDK_ROOT: /Users/runner/Library/Android/sdk - - name: Install Android Platforms - run: | - sdkmanager --install "build-tools;32.0.0" - sdkmanager --install "platform-tools" - sdkmanager --install "platforms;android-31" - sdkmanager --install "platforms;android-33" - sdkmanager --install "platforms;android-34" - - name: Setup .NET 6.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.414 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.102 - - name: Install Workloads - run: dotnet workload install android ios maccatalyst maui - - name: Test - if: ${{ github.repository != 'dotnet/Silk.NET' || !startsWith(github.ref, 'refs/tags/') }} - # skip Clean, Restore, and Compile as this will build the affect the whole solution. - # dotnet test will compile the necessary projects for testing only. - run: ./build.sh Test --skip Clean Restore Compile - - name: Validation Checks - if: ${{ github.repository != 'dotnet/Silk.NET' || !startsWith(github.ref, 'refs/tags/') }} - run: ./build.sh ValidateSolution - - name: Pack (CI) - if: ${{ github.repository != 'dotnet/Silk.NET' || !startsWith(github.ref, 'refs/tags/') }} - # TODO build native mixins such as BuildLibSilkDroid - # Use a release NUKE so it doesn't interfere with the debug build - run: dotnet run --project build/nuke/Silk.NET.NUKE.csproj -c Release -- Pack --configuration Debug --msbuild-properties VersionSuffix=build${{ github.run_number }}.0 ContinuousIntegrationBuild=true - env: - ANDROID_HOME: /Users/runner/Library/Android/sdk - - name: Pack (CD) - if: ${{ github.repository == 'dotnet/Silk.NET' && startsWith(github.ref, 'refs/tags/') }} - # TODO build native mixins such as BuildLibSilkDroid - run: ./build.sh Pack --configuration Release --msbuild-properties ContinuousIntegrationBuild=true - - name: Upload Unsigned Artifacts to Actions - uses: actions/upload-artifact@v2.2.4 - with: - name: unsigned_nupkgs - path: "build/output_packages/*.nupkg" - if-no-files-found: warn - retention-days: 1 - - name: Push to Experimental Feed - if: ${{ github.repository == 'dotnet/Silk.NET' && github.event_name != 'pull_request' }} - run: ./build.sh PushToNuGet --skip Clean Restore Compile Pack --nuget-feed https://dotnet.github.io/Silk.NET/nuget/experimental/index.json --nuget-username ${{ secrets.EXP_NUGET_USERNAME }} --nuget-password ${{ secrets.EXP_NUGET_PASSWORD }} --nuget-api-key ${{ secrets.EXP_NUGET_PASSWORD }} - - name: Push to GitHub Packages - if: ${{ github.repository == 'dotnet/Silk.NET' && github.event_name != 'pull_request' }} - run: ./build.sh PushToNuGet --skip Clean Restore Compile Pack --nuget-feed https://nuget.pkg.github.com/dotnet/index.json --nuget-api-key ${{ secrets.GITHUB_TOKEN }} - PushRelease: - name: Push Release to NuGet - runs-on: windows-latest - if: ${{ github.repository == 'dotnet/Silk.NET' && startsWith(github.ref, 'refs/tags/') }} - needs: [Build] - steps: - - uses: actions/checkout@v3.5.2 - with: - submodules: 'false' - - uses: actions/download-artifact@v3 - with: - name: unsigned_nupkgs - path: build/output_packages - - name: Sign Packages - run: .\build.cmd SignPackages --akv-certificate ${{ secrets.AKV_CERTIFICATE }} --akv-client-id ${{ secrets.AKV_CLIENT_ID }} --akv-client-secret ${{ secrets.AKV_CLIENT_SECRET }} --akv-tenant ${{ secrets.AKV_TENANT }} --akv-vault-url ${{ secrets.AKV_VAULT_URL }} - - name: Upload Signed Artifacts to Actions - uses: actions/upload-artifact@v2.2.4 - with: - name: signed_nupkgs - path: "build/output_packages/*.nupkg" - if-no-files-found: warn - - name: Push to NuGet - run: .\build.cmd PushToNuGet --skip Clean Restore Pack --nuget-api-key ${{ secrets.NUGET_TOKEN }} diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml deleted file mode 100644 index 3434cc375a..0000000000 --- a/.github/workflows/codeowners.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Codeowners -on: - push: - paths: - - "CODEOWNERS" - pull_request: - paths: - - "CODEOWNERS" -jobs: - Validate: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: mszostok/codeowners-validator@v0.6.0 - with: - checks: "files,duppatterns" - experimental_checks: "notowned" diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000000..b2306cecb8 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,165 @@ +name: .NET +on: + push: + pull_request: + merge_group: + workflow_dispatch: + inputs: + release: + description: "Release to NuGet" + required: false + type: boolean + default: false +permissions: + statuses: write + checks: write + contents: write + pull-requests: write + actions: write + packages: write +jobs: + Build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v5 + with: + dotnet-version: | + 9.0.x + 10.0.x + - name: Install Workloads + run: dotnet workload restore + - name: Pack + # TODO decide whether we want experimental builds to use Debug or Release - using Release for now... + run: >- + dotnet run --project eng/build/Silk.NET.NUKE.csproj -c Release -- + Pack + --configuration Release + --msbuild-properties + ${{ github.event_name == 'workflow_dispatch' && inputs.release && 'ContinuousIntegrationBuild=true' || github.event_name != 'pull_request' && format('ContinuousIntegrationBuild=true VersionSuffix=build{0}.0', github.run_number) || format('ContinuousIntegrationBuild=true VersionSuffix=pr{0}.{1}', github.event.number, github.run_number) }} + - name: Upload Unsigned Artifacts to Actions + uses: actions/upload-artifact@v4 + with: + name: unsigned_nupkgs + path: "artifacts/**/*nupkg" + if-no-files-found: warn + retention-days: 1 + - name: Determine whether we should push to experimental feed. + id: check_token + run: | + if [ -z "${{ secrets.EXP_NUGET_PASSWORD }}" ]; then + echo "push=false" >> $GITHUB_OUTPUT + else + echo "push=true" >> $GITHUB_OUTPUT + fi + - name: Push to Experimental Feed + if: ${{ steps.check_token.outputs.push == 'true' }} + run: ./build.sh PushToNuGet --skip Clean Compile Pack --nuget-feed https://dotnet.github.io/Silk.NET/nuget/experimental/index.json --nuget-username ${{ secrets.EXP_NUGET_USERNAME }} --nuget-password ${{ secrets.EXP_NUGET_PASSWORD }} --nuget-api-key ${{ secrets.EXP_NUGET_PASSWORD }} + - name: Push to GitHub Packages + if: ${{ steps.check_token.outputs.push == 'true' }} + run: ./build.sh PushToNuGet --skip Clean Compile Pack --nuget-feed https://nuget.pkg.github.com/dotnet/index.json --nuget-api-key ${{ secrets.GITHUB_TOKEN }} + Test: + strategy: + fail-fast: false + matrix: + include: + - rid: win-x64 + os: windows-latest + name: win-x64 + - rid: linux-x64 + os: ubuntu-22.04 + name: linux-x64 + - rid: osx-arm64 + os: macos-latest + name: osx-arm64 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 9.0.x + 10.0.x + - name: Install Workloads + run: dotnet workload restore + - name: Restore + run: dotnet restore --runtime ${{ matrix.rid }} + - name: Test + run: dotnet test --results-directory coverage --coverage --coverage-output-format cobertura --report-trx -c Release + # TODO: https://github.com/dorny/test-reporter?tab=readme-ov-file#recommended-setup-for-public-repositories + #- name: Test Report + # uses: dorny/test-reporter@v1 + # if: success() || failure() + # with: + # name: .NET Test Report (${{ matrix.rid }}) + # path: ./coverage/**/*.trx + # reporter: dotnet-trx + - name: Upload Coverage Results + uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.name }} + path: ./coverage/**/*.cobertura.xml + if-no-files-found: error + Report-Coverage: + name: "Report Coverage" + runs-on: ubuntu-latest + needs: Test + permissions: + pull-requests: write + checks: write + steps: + - uses: actions/download-artifact@v4 + with: + path: ./coverage + - name: Setup .NET Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.300 + - name: Generate Report + uses: danielpalme/ReportGenerator-GitHub-Action@5.1.9 + with: + reports: './coverage/**/*.cobertura.xml' + targetdir: './coveragereport' + reporttypes: 'Cobertura' + verbosity: 'Info' + tag: '${{ github.run_number }}_${{ github.run_id }}' + - uses: 5monkeys/cobertura-action@master + continue-on-error: true + with: + path: coveragereport/Cobertura.xml + minimum_coverage: 0 + Release: + runs-on: windows-latest + if: ${{ github.event_name == 'workflow_dispatch' && inputs.release }} + needs: [Build, Test] + environment: Release + steps: + - uses: actions/checkout@v3 + with: + ssh-key: ${{ secrets.SILK_ACTIONS_DEPLOY_KEY }} + - uses: actions/download-artifact@v4 + with: + name: unsigned_nupkgs + path: artifacts + - name: Push to NuGet + if: ${{ github.repository == 'dotnet/Silk.NET' }} + run: >- + .\build.cmd SignPackages PushToNuGet FinishRelease --skip Clean Compile Pack + --nuget-api-key ${{ secrets.NUGET_TOKEN }} + --akv-certificate ${{ secrets.AKV_CERTIFICATE }} + --akv-client-id ${{ secrets.AKV_CLIENT_ID }} + --akv-client-secret ${{ secrets.AKV_CLIENT_SECRET }} + --akv-tenant ${{ secrets.AKV_TENANT }} + --akv-vault-url ${{ secrets.AKV_VAULT_URL }} + --discord-webhook ${{ secrets.DISCORD_ANNOUNCEMENT_WEBHOOK }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload Signed Artifacts to Actions + uses: actions/upload-artifact@v4 + with: + name: signed_nupkgs + path: "artifacts/**/*nupkg" + if-no-files-found: warn + retention-days: 30 diff --git a/.github/workflows/dxvk.yml b/.github/workflows/dxvk.yml deleted file mode 100644 index a08af15d30..0000000000 --- a/.github/workflows/dxvk.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: DXVK -on: - push: - paths: - - build/submodules/dxvk - - build/nuke/Native/Core.cs - - build/nuke/Native/Dxvk.cs - - .github/workflows/dxvk.yml - branches-ignore: - - "ci/*" - - "develop/*" - - "main" -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y python3 python3-pip python3-setuptools python3-wheel ninja-build mingw-w64 glslang-dev glslang-tools - pip3 install meson - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git submodule update --init --recursive --depth 0 build/submodules/dxvk - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Cache .tmp, ~/.nuget/packages - uses: actions/cache@v2 - with: - path: | - .tmp - ~/.nuget/packages - key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Build DXVK - uses: Joshua-Ashton/arch-mingw-github-action@12cb3126180924c3be54025b08f42e4e14da080b - with: - command: | - pacman -Syu --needed --noconfirm dotnet-host dotnet-runtime dotnet-runtime-6.0 dotnet-sdk dotnet-sdk-6.0 dotnet-targeting-pack dotnet-targeting-pack-6.0 sdl2 lib32-sdl2 - - ${{ matrix.env.nuke_invoke }} Dxvk - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/glfw.yml b/.github/workflows/glfw.yml deleted file mode 100644 index fec3773d71..0000000000 --- a/.github/workflows/glfw.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: GLFW -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - "build/submodules/GLFW" - - "build/nuke/Native/Core.cs" - - "build/nuke/Native/GLFW.cs" - - .github/workflows/glfw.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y xorg-dev - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: "" - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive --depth 0 build/submodules/GLFW - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build GLFW - run: ${{ matrix.env.nuke_invoke }} glfw - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/moltenvk.yml b/.github/workflows/moltenvk.yml deleted file mode 100644 index 921da65b85..0000000000 --- a/.github/workflows/moltenvk.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: MoltenVK -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/MoltenVK - - build/nuke/Native/Core.cs - - build/nuke/Native/MoltenVK.cs - - .github/workflows/moltenvk.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive build/submodules/MoltenVK - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - # Install python - - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - # Install CMake and Ninja - - uses: lukka/get-cmake@latest - - - name: Build MoltenVK - run: ${{ matrix.env.nuke_invoke }} MoltenVK - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml new file mode 100644 index 0000000000..04a1cef8c5 --- /dev/null +++ b/.github/workflows/native.yml @@ -0,0 +1,104 @@ +name: Native Builds +on: + pull_request: + types: [opened, edited, synchronize] +permissions: + pull-requests: write + contents: write +env: + # A space-separated list of paths to native libraries to build. + NATIVE_LIBRARY_PATHS: "sources/SDL/Native sources/OpenAL/Soft.Native" + # A space-separated list of submodule paths for each native library path. Use _ if a submodule is not used - this must + # match the number of spaces in NATIVE_LIBRARY_PATHS. + NATIVE_LIBRARY_SUBMODULE_PATHS: "eng/submodules/sdl eng/submodules/openal-soft" + # A space-separated list of shorthands to the native library paths that will build the native library for each native + # library path. This must match the number of spaces in NATIVE_LIBRARY_PATHS. If a shorthand builds multiple native + # binary paths, these will be deduplicated. + NATIVE_LIBRARY_SHORTHANDS: "SDL OpenAL-Soft" +jobs: + prerequisites: + name: PR Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - id: parse + name: Determine which native libraries the user has asked to build, and where to look for changes. + run: ./workflow-stage1.sh + working-directory: eng/native/buildsystem + env: + PR_COMMENT: ${{ github.event.pull_request.body }} + - uses: dorny/paths-filter@v3 + id: filter + name: Determine which natives need to be rebuilt. + with: + filters: ${{ steps.parse.outputs.workflow_filters }} + - name: Find a warning message from a previous run, if applicable. + uses: peter-evans/find-comment@v3 + id: fc + with: + issue-number: ${{ github.event.number }} + comment-author: "github-actions[bot]" + body-includes: "Some of the native library builds modified in this PR were not referenced in the PR description." + - id: strat + name: Create the matrix strategy for the native builds. + run: ./workflow-stage2.sh + working-directory: eng/native/buildsystem + env: + NATIVE_LIBRARY_APPLICABLE_SHORTHANDS: ${{ join(fromJSON(steps.filter.outputs.changes), ' ') }} + NATIVE_LIBRARY_USER_REFERENCED_SHORTHANDS: ${{ steps.parse.outputs.targets_referenced }} + PR_EXISTING_NOTICE_ID: ${{ steps.fc.outputs.comment-id }} + - name: Write a comment if needed. + if: ${{ steps.strat.outputs.comment_to_write }} + uses: peter-evans/create-or-update-comment@v4 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ github.event.number }} + body: ${{ steps.strat.outputs.comment_to_write }} + edit-mode: replace + outputs: + matrix_strategy: ${{ steps.strat.outputs.matrix_strategy }} + targets_referenced: ${{ steps.parse.outputs.targets_referenced }} + build: + needs: [prerequisites] + strategy: + fail-fast: false + matrix: + flat: ${{ fromJSON(needs.prerequisites.outputs.matrix_strategy) }} + runs-on: ${{ (startsWith(matrix.flat.runtime, 'osx') || startsWith(matrix.flat.runtime, 'ios') || startsWith(matrix.flat.runtime, 'tvos')) && 'macos-latest' || startsWith(matrix.flat.runtime, 'win') && 'windows-latest' || 'ubuntu-latest' }} + name: ${{ matrix.flat.target }} / ${{ matrix.flat.runtime }} + steps: + - uses: actions/checkout@v3 + - name: Build + run: | + echo "https://github.com/actions/upload-artifact/issues/174" > .workaround-${{ matrix.flat.target }}-${{ matrix.flat.runtime }}.txt + ${{ format('.{0}{1}', startsWith(matrix.flat.runtime, 'win') && '\' || '/', matrix.flat.exec) }} + working-directory: ${{ matrix.flat.dir }} + - uses: actions/upload-artifact@v4 + with: + name: natives-${{ matrix.flat.target }}-${{ matrix.flat.runtime }} + path: | + ./.workaround-*.txt + ./${{ matrix.flat.dir }}/runtimes/${{ format('{0}{1}', matrix.flat.runtime, !contains(matrix.flat.runtime, '-') && '*' || '') }}/**/* + ./${{ matrix.flat.dir }}/lib/*${{ matrix.flat.runtime }}*/**/* + ./${{ matrix.flat.dir }}/*${{ matrix.flat.runtime }}*/**/* + commit: + name: Commit Binaries + needs: [prerequisites, build] + runs-on: ubuntu-latest + if: ${{ needs.prerequisites.outputs.targets_referenced }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + - name: Download All Artifacts + uses: actions/download-artifact@v4 + with: + pattern: natives-* + merge-multiple: true + - name: Commit Artifacts + run: | + git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" + git config --local user.name "The Silk.NET Automaton" + git add . + git commit -m "Update native binaries for $(git rev-parse HEAD)" + git push diff --git a/.github/workflows/public-api.yml b/.github/workflows/public-api.yml deleted file mode 100644 index ae2bcd3678..0000000000 --- a/.github/workflows/public-api.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Public API -on: - push: - branches: - - "*" - create: - tags: - - "*" - pull_request_target: -permissions: - issues: write - pull-requests: write -jobs: - Check: - runs-on: windows-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/checkout@v2 - name: Checkout PR - if: ${{ github.repository == 'dotnet/Silk.NET' && github.event_name == 'pull_request_target' }} - with: - repository: ${{ github.event.pull_request.head.repo.full_name }} - path: inbound_pr - ref: ${{ github.event.pull_request.head.ref }} - - uses: actions/checkout@v2 - name: Checkout branch - if: ${{ github.repository == 'dotnet/Silk.NET' && github.event_name != 'pull_request_target' }} - with: - path: inbound_pr - - name: Cache .tmp, ~/.nuget/packages - uses: actions/cache@v2 - with: - path: | - .tmp - ~/.nuget/packages - key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v3.0.3 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Install Workloads for Restore - # TODO: This is slow. Maybe we can make a docker container with this already done? - run: dotnet workload install android ios maccatalyst maui - - name: Ensure Public API Declared - run: ./build.sh EnsureApiDeclared - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - Ship: - if: ${{ github.repository == 'dotnet/Silk.NET' && github.event_name == 'create' }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Cache .tmp, ~/.nuget/packages - uses: actions/cache@v2 - with: - path: | - .tmp - ~/.nuget/packages - key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v3.0.3 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Ship Public API - run: ./build.sh ShipApi - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} diff --git a/.github/workflows/publish-site.yml b/.github/workflows/publish-site.yml index 5fc4b7a07c..7fc2ac4d3a 100644 --- a/.github/workflows/publish-site.yml +++ b/.github/workflows/publish-site.yml @@ -2,35 +2,42 @@ name: Website Build on: push: branches: - - 'main' + - 'develop/3.0' + pull_request: permissions: contents: read pages: write id-token: write + jobs: Build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Setup .NET 5.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 5.0.401 - - name: Setup .NET 6.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.201 - - name: Setup .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.102 - - name: Run Statiq - run: dotnet run -c Release --project src/Website/Silk.NET.Statiq/Silk.NET.Statiq.csproj -- -l debug --nocache - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - path: "docs" + - uses: actions/checkout@v3 + - name: Setup .NET 8 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + - name: Setup .NET 9 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.102' + - name: Build Website + run: | + git submodule update --init eng/submodules/silk.net-2.x + cd eng/submodules/silk.net-2.x + git fetch --all + cd ../../.. + ./build.sh website + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload artifact + if: ${{ github.repository == 'dotnet/Silk.NET' && github.ref == 'refs/heads/develop/3.0' }} + uses: actions/upload-pages-artifact@v3 + with: + path: "artifacts/docs/Silk.NET" Deploy: + if: ${{ github.repository == 'dotnet/Silk.NET' && github.ref == 'refs/heads/develop/3.0' }} environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} @@ -39,4 +46,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/sdl2.yml b/.github/workflows/sdl2.yml deleted file mode 100644 index 84399784d9..0000000000 --- a/.github/workflows/sdl2.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: SDL2 -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/SDL - - build/nuke/Native/Core.cs - - build/nuke/Native/SDL2.cs - - .github/workflows/sdl2.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: | - pwsh build\Install-WindowsSDK.ps1 - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive build/submodules/SDL - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - # Install CMake - - uses: lukka/get-cmake@latest - if: runner.os != 'Linux' - - - name: Build SDL2 - if: runner.os == 'Linux' - uses: Beyley/run-as-1804@239b211a2ca687388b6251d6dab22cb90ac0391d - with: - command: | - apt update - apt install -y python3 curl wget build-essential git make autoconf gcc-multilib g++-multilib automake libtool pkg-config ninja-build gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev - - wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh - chmod +x ./dotnet-install.sh - ./dotnet-install.sh --version 7.0.203 - ./dotnet-install.sh --version 6.0.408 - - export DOTNET_ROOT=$HOME/.dotnet - export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools - - # export the pushable token to the env of the docker container - export PUSHABLE_GITHUB_TOKEN=${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - # mark workspace as safe - git config --global --add safe.directory /github/workspace - - ${{ matrix.env.nuke_invoke }} SDL2 - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - - name: Build SDL2 - if: runner.os != 'Linux' - run: ${{ matrix.env.nuke_invoke }} SDL2 - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - diff --git a/.github/workflows/shaderc.yml b/.github/workflows/shaderc.yml deleted file mode 100644 index 66a84ac55a..0000000000 --- a/.github/workflows/shaderc.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Shaderc -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/shaderc - - build/nuke/Native/Core.cs - - build/nuke/Native/Shaderc.cs - - .github/workflows/shaderc.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y build-essential binutils-aarch64-linux-gnu - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git submodule update --init --recursive --depth 0 build/submodules/shaderc - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Install Zig - uses: goto-bus-stop/setup-zig@v2 - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build Shaderc - run: ${{ matrix.env.nuke_invoke }} Shaderc - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/spirv-cross.yml b/.github/workflows/spirv-cross.yml deleted file mode 100644 index 1cb5b95db1..0000000000 --- a/.github/workflows/spirv-cross.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: SPIRV-Cross -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/SPIRV-Cross - - build/nuke/Native/Core.cs - - build/nuke/Native/SPIRVCross.cs - - .github/workflows/spirv-cross.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y build-essential - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git submodule update --init --recursive --depth 0 build/submodules/SPIRV-Cross - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Install Zig - uses: goto-bus-stop/setup-zig@v2 - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build SPIRV-Cross - run: ${{ matrix.env.nuke_invoke }} SPIRVCross - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/spirv-reflect.yml b/.github/workflows/spirv-reflect.yml deleted file mode 100644 index 37bca2b97f..0000000000 --- a/.github/workflows/spirv-reflect.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: SPIRV-Reflect -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/SPIRV-Reflect - - build/nuke/Native/Core.cs - - build/nuke/Native/SPIRVReflect.cs - - .github/workflows/spirv-reflect.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y build-essential - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git submodule update --init --recursive --depth 0 build/submodules/SPIRV-Reflect - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Install Zig - uses: goto-bus-stop/setup-zig@v2 - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build SPIRV-Reflect - run: ${{ matrix.env.nuke_invoke }} SPIRVReflect - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/swiftshader.yml b/.github/workflows/swiftshader.yml deleted file mode 100644 index cc83fe4667..0000000000 --- a/.github/workflows/swiftshader.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: SwiftShader -on: - push: - paths: - - build/submodules/SwiftShader - - build/nuke/Native/Core.cs - - build/nuke/Native/SwiftShader.cs - - .github/workflows/swiftshader.yml - branches-ignore: - - "ci/*" - - "develop/*" - - "main" -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y libx11-xcb-dev - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: "" - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive --depth 0 build/submodules/SwiftShader - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Cache .tmp, ~/.nuget/packages - uses: actions/cache@v2 - with: - path: | - .tmp - ~/.nuget/packages - key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build SwiftShader - run: ${{ matrix.env.nuke_invoke }} SwiftShader - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} diff --git a/.github/workflows/vkd3d.yml b/.github/workflows/vkd3d.yml deleted file mode 100644 index 785499c489..0000000000 --- a/.github/workflows/vkd3d.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Vkd3d -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/vkd3d - - build/submodules/SPIRV-Tools - - build/submodules/vkd3d-no-ms-abi.patch - - build/nuke/Native/Core.cs - - build/nuke/Native/Vkd3d.cs - - .github/workflows/vkd3d.yml - - src/Microsoft/Vkd3dCompiler/* -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y xorg-dev libvulkan-dev spirv-headers wine64-development-tools cmake build-essential - - wget http://mirrors.kernel.org/ubuntu/pool/universe/s/spirv-tools/spirv-tools_2020.1-2_amd64.deb - sudo apt install ./spirv-tools_2020.1-2_amd64.deb - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git submodule update --init --recursive --depth 0 build/submodules/vkd3d - git submodule update --init --recursive --depth 0 build/submodules/SPIRV-Tools - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Install Zig - uses: goto-bus-stop/setup-zig@v2 - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build vkd3d - run: ${{ matrix.env.nuke_invoke }} Vkd3d - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.github/workflows/vulkan-loader.yml b/.github/workflows/vulkan-loader.yml deleted file mode 100644 index 66e312bf24..0000000000 --- a/.github/workflows/vulkan-loader.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Vulkan Loader -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/Vulkan-Loader - - build/nuke/Native/Core.cs - - build/nuke/Native/VulkanLoader.cs - - .github/workflows/vulkan-loader.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y build-essential libx11-xcb-dev libxkbcommon-dev libwayland-dev libxrandr-dev - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: "" - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive --depth 0 build/submodules/Vulkan-Loader - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Cache .tmp, ~/.nuget/packages - uses: actions/cache@v2 - with: - path: | - .tmp - ~/.nuget/packages - key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj') }} - - name: Setup .NET 6.0 and .NET 7.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: | - 6.0.201 - 7.0.* - - name: Build Vulkan Loader - run: ${{ matrix.env.nuke_invoke }} VulkanLoader - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} diff --git a/.github/workflows/wgpu.yml b/.github/workflows/wgpu.yml deleted file mode 100644 index 5f94024dd6..0000000000 --- a/.github/workflows/wgpu.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: WGPU -on: - push: - branches-ignore: - - "ci/*" - - "develop/*" - - "main" - paths: - - build/submodules/wgpu-native - - build/nuke/Native/Core.cs - - build/nuke/Native/Wgpu.cs - - .github/workflows/wgpu.yml -jobs: - Build: - strategy: - fail-fast: false - matrix: - env: - - os: ubuntu-latest - name: Linux - nuke_invoke: ./build.sh - extras: | - sudo apt-get update - sudo apt-get install -y gcc-multilib - - os: windows-latest - name: Windows - nuke_invoke: ./build.cmd - extras: "" - - os: macos-latest - name: Darwin - nuke_invoke: ./build.sh - extras: "" - name: ${{ matrix.env.name }} Build - runs-on: ${{ matrix.env.os }} - steps: - - uses: dtolnay/rust-toolchain@stable - if: runner.os == 'Windows' - with: - toolchain: stable-x86_64-pc-windows-msvc - - - uses: dtolnay/rust-toolchain@stable - if: runner.os == 'Linux' - with: - toolchain: stable-x86_64-unknown-linux-gnu - - - uses: dtolnay/rust-toolchain@stable - if: runner.os == 'macOS' - with: - toolchain: stable-x86_64-apple-darwin - - - name: Add targets - if: runner.os == 'Windows' - run: | - rustup target add i686-pc-windows-msvc - rustup target add aarch64-pc-windows-msvc - - - name: Add targets - if: runner.os == 'Linux' - run: | - rustup target add i686-unknown-linux-gnu - - - name: Add targets - if: runner.os == 'macOS' - run: | - rustup target add aarch64-apple-darwin - - - uses: actions/checkout@v2 - with: - token: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - - name: Checkout submodules, configure git - run: | - git -c submodule.third_party/git-hooks.update=none submodule update --init --recursive build/submodules/wgpu-native - git config --local user.email "9011267+dotnet-bot@users.noreply.github.com" - git config --local user.name "The Silk.NET Automaton" - - name: Extra prerequisites - run: | - echo running extras - ${{ matrix.env.extras }} - - name: Setup .NET 6.0 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 6.0.201 - - name: Setup .NET 7.0.102 - uses: actions/setup-dotnet@v1 - with: - dotnet-version: 7.0.102 - - name: Build WGPU - run: ${{ matrix.env.nuke_invoke }} Wgpu - env: - PUSHABLE_GITHUB_TOKEN: ${{ secrets.PUSHABLE_GITHUB_TOKEN }} - diff --git a/.gitignore b/.gitignore index 7cee03227e..5dc51027a7 100644 --- a/.gitignore +++ b/.gitignore @@ -222,7 +222,7 @@ ClientBin/ *.publishsettings orleans.codegen.cs -# Including strong name files can present a security risk +# Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk @@ -318,7 +318,7 @@ __pycache__/ # OpenCover UI analysis results OpenCover/ -# Azure Stream Analytics local run output +# Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log @@ -327,7 +327,7 @@ ASALocalRun/ # NVidia Nsight GPU debugger configuration file *.nvuser -# MFractors (Xamarin productivity tool) working folder +# MFractors (Xamarin productivity tool) working folder .mfractor/ @@ -473,8 +473,30 @@ src/**/build/ # Silk.NET Build System *.gen.sln *.gen.txt +excluded-platforms.txt # Silk.NET Website Generation Output -/docs/ +#/docs/ src/Website/Silk.NET.Statiq/temp -src/Website/Silk.NET.Statiq/cache \ No newline at end of file +src/Website/Silk.NET.Statiq/cache +.nuke/temp + +# SilkTouch configs +!eng/silktouch/**/*.rsp + +# SilkTouch caches +**/*.stdownload + +**/.DS_Store + +# Verify +*.received.* + +# Native Binaries +!**/runtimes/*/native/*.dylib +!**/runtimes/*/native/*.so +!**/runtimes/*/native/*.dll +!**/lib/**/*.aar +build/ +!eng/build/ +.workaround* diff --git a/.gitmodules b/.gitmodules index de5272891d..3b16b5edff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,54 +1,24 @@ -[submodule "build/submodules/SDL"] - path = build/submodules/SDL +[submodule "submodules/terrafx.interop.windows"] + path = eng/submodules/terrafx.interop.windows + url = https://github.com/terrafx/terrafx.interop.windows +[submodule "eng/submodules/opengl"] + path = eng/submodules/opengl + url = https://github.com/KhronosGroup/OpenGL-Registry.git +[submodule "eng/submodules/egl"] + path = eng/submodules/egl + url = https://github.com/KhronosGroup/EGL-Registry/ +[submodule "eng/submodules/sdl"] + path = eng/submodules/sdl url = https://github.com/libsdl-org/SDL -[submodule "build/submodules/Vulkan-Headers"] - path = build/submodules/Vulkan-Headers - url = https://github.com/KhronosGroup/Vulkan-Headers -[submodule "build/submodules/SwiftShader"] - path = build/submodules/SwiftShader - url = https://github.com/google/swiftshader -[submodule "build/submodules/ANGLE"] - path = build/submodules/ANGLE - url = https://chromium.googlesource.com/angle/angle -[submodule "build/submodules/Vulkan-Loader"] - path = build/submodules/Vulkan-Loader - url = https://github.com/KhronosGroup/Vulkan-Loader -[submodule "build/submodules/GLFW"] - path = build/submodules/GLFW - url = https://github.com/glfw/glfw.git -[submodule "build/submodules/Assimp"] - path = build/submodules/Assimp - url = https://github.com/assimp/assimp -[submodule "build/submodules/webgpu-headers"] - path = build/submodules/webgpu-headers - url = https://github.com/webgpu-native/webgpu-headers/ -[submodule "build/submodules/wgpu-native"] - path = build/submodules/wgpu-native - url = https://github.com/gfx-rs/wgpu-native -[submodule "build/submodules/dawn"] - path = build/submodules/dawn - url = https://github.com/Beyley/dawn -[submodule "build/submodules/dxvk"] - path = build/submodules/dxvk - url = https://github.com/doitsujin/dxvk/ -[submodule "build/submodules/vkd3d"] - path = build/submodules/vkd3d - url = https://github.com/Beyley/vkd3d -[submodule "build/submodules/SPIRV-Tools"] - path = build/submodules/SPIRV-Tools - url = https://github.com/KhronosGroup/SPIRV-Tools -[submodule "build/submodules/SPIRV-Reflect"] - path = build/submodules/SPIRV-Reflect - url = https://github.com/KhronosGroup/SPIRV-Reflect -[submodule "build/submodules/SPIRV-Headers"] - path = build/submodules/SPIRV-Headers - url = https://github.com/KhronosGroup/SPIRV-Headers -[submodule "build/submodules/SPIRV-Cross"] - path = build/submodules/SPIRV-Cross - url = https://github.com/KhronosGroup/SPIRV-Cross -[submodule "build/submodules/shaderc"] - path = build/submodules/shaderc - url = https://github.com/google/shaderc -[submodule "build/submodules/MoltenVK"] - path = build/submodules/MoltenVK - url = https://github.com/KhronosGroup/MoltenVK +[submodule "eng/submodules/silk.net-2.x"] + path = eng/submodules/silk.net-2.x + url = https://github.com/dotnet/Silk.NET +[submodule "eng/submodules/openal-soft"] + path = eng/submodules/openal-soft + url = https://github.com/kcat/openal-soft +[submodule "eng/submodules/vulkan"] + path = eng/submodules/vulkan + url = https://github.com/KhronosGroup/Vulkan-Docs.git +[submodule "eng/submodules/vulkan-headers"] + path = eng/submodules/vulkan-headers + url = https://github.com/KhronosGroup/Vulkan-Headers.git diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index e18f4e81b8..a0081d478f 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -1,10 +1,113 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Build Schema", - "$ref": "#/definitions/build", "definitions": { - "build": { - "type": "object", + "Host": { + "type": "string", + "enum": [ + "AppVeyor", + "AzurePipelines", + "Bamboo", + "Bitbucket", + "Bitrise", + "GitHubActions", + "GitLab", + "Jenkins", + "Rider", + "SpaceAutomation", + "TeamCity", + "Terminal", + "TravisCI", + "VisualStudio", + "VSCode" + ] + }, + "ExecutableTarget": { + "type": "string", + "enum": [ + "Clean", + "Compile", + "DeclareApi", + "DisablePlatforms", + "FinishRelease", + "Pack", + "Prerequisites", + "PushToNuGet", + "RegenerateBindings", + "ShipApi", + "SignPackages", + "Website" + ] + }, + "Verbosity": { + "type": "string", + "description": "", + "enum": [ + "Verbose", + "Normal", + "Minimal", + "Quiet" + ] + }, + "NukeBuild": { + "properties": { + "Continue": { + "type": "boolean", + "description": "Indicates to continue a previously failed build attempt" + }, + "Help": { + "type": "boolean", + "description": "Shows the help text for this build assembly" + }, + "Host": { + "description": "Host for execution. Default is 'automatic'", + "$ref": "#/definitions/Host" + }, + "NoLogo": { + "type": "boolean", + "description": "Disables displaying the NUKE logo" + }, + "Partition": { + "type": "string", + "description": "Partition to use on CI" + }, + "Plan": { + "type": "boolean", + "description": "Shows the execution plan (HTML)" + }, + "Profile": { + "type": "array", + "description": "Defines the profiles to load", + "items": { + "type": "string" + } + }, + "Root": { + "type": "string", + "description": "Root directory during build execution" + }, + "Skip": { + "type": "array", + "description": "List of targets to be skipped. Empty list skips all dependencies", + "items": { + "$ref": "#/definitions/ExecutableTarget" + } + }, + "Target": { + "type": "array", + "description": "List of targets to be invoked. Default is '{default_target}'", + "items": { + "$ref": "#/definitions/ExecutableTarget" + } + }, + "Verbosity": { + "description": "Logging verbosity during build execution. Default is 'Normal'", + "$ref": "#/definitions/Verbosity" + } + } + } + }, + "allOf": [ + { "properties": { "AkvCertificate": { "type": "string", @@ -26,47 +129,18 @@ "type": "string", "description": "Code-signing service Azure Key Vault URL" }, - "All": { - "type": "boolean", - "description": "If specified, ignores any generated solution present and builds the entire project" - }, "Configuration": { "type": "string", - "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)" - }, - "Continue": { - "type": "boolean", - "description": "Indicates to continue a previously failed build attempt" - }, - "CreateBindingsPr": { - "type": "boolean", - "description": "Create a PR after bindings regeneration completes" - }, - "Help": { - "type": "boolean", - "description": "Shows the help text for this build assembly" - }, - "Host": { - "type": "string", - "description": "Host for execution. Default is 'automatic'", + "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)", "enum": [ - "AppVeyor", - "AzurePipelines", - "Bamboo", - "Bitbucket", - "Bitrise", - "GitHubActions", - "GitLab", - "Jenkins", - "Rider", - "SpaceAutomation", - "TeamCity", - "Terminal", - "TravisCI", - "VisualStudio", - "VSCode" + "Debug", + "Release" ] }, + "DiscordWebhook": { + "type": "string", + "description": "Discord release announcement webhook" + }, "MsbuildProperties": { "type": "array", "description": "Extra properties passed to MSBuild commands", @@ -74,18 +148,6 @@ "type": "string" } }, - "Native": { - "type": "boolean", - "description": "Build native code" - }, - "NoLogo": { - "type": "boolean", - "description": "Disables displaying the NUKE logo" - }, - "NoParallelGeneration": { - "type": "boolean", - "description": "Don't let BuildTools parallelize" - }, "NugetApiKey": { "type": "string", "description": "The API key used to push packages and symbols packages to NuGet" @@ -106,133 +168,32 @@ "type": "string", "description": "NuGet username" }, - "OriginalSolution": { - "type": "string", - "description": "Path to a solution file that is automatically loaded" - }, - "Partition": { - "type": "string", - "description": "Partition to use on CI" - }, - "Plan": { - "type": "boolean", - "description": "Shows the execution plan (HTML)" - }, - "Profile": { + "Platforms": { "type": "array", - "description": "Defines the profiles to load", + "description": "A list of platforms that DisablePlatforms should exclude from MSBuild usages, both inside and outside of NUKE. This can be reset by running DisablePlatforms with no platforms, or by deleting the excluded-platforms.txt file", "items": { "type": "string" } }, - "Projects": { + "SilkTouchAdditionalArgs": { "type": "array", - "description": "If specified, generates a solution including only the specified projects or group of projects. You can provide individual project names or the name of the folder in which they're contained e.g. \"--projects opengl examples/csharp vulkan microsoft core.win32extras silk.net.opencl\". The Silk.NET prefix for individual projects is optional, but folder names will be preferred over project names so if you only want \"Silk.NET.Vulkan\" and not everything in \"src/Vulkan\", use \"--projects silk.net.vulkan\". The solution include project dependencies. The solution will be regenerated whenever you run a NUKE build with this specified, but if you don't want to run a build just use \"nuke sln --projects ...\" to run a dummy target", + "description": "Additional arguments to prepend to SilkTouch invocations", "items": { "type": "string" } }, - "Root": { - "type": "string", - "description": "Root directory during build execution" - }, - "Skip": { - "type": "array", - "description": "List of targets to be skipped. Empty list skips all dependencies", - "items": { - "type": "string", - "enum": [ - "Assimp", - "BuildLibSilkDroid", - "Clean", - "Compile", - "DeclareApi", - "Dxvk", - "EnsureApiDeclared", - "FullCompile", - "FullPack", - "FullPushToNuGet", - "GLFW", - "MoltenVK", - "Pack", - "Prerequisites", - "PushToNuGet", - "RegenerateBindings", - "Restore", - "SDL2", - "Shaderc", - "ShipApi", - "SignPackages", - "Sln", - "SPIRVCross", - "SPIRVReflect", - "SwiftShader", - "Test", - "ValidateSolution", - "Vkd3d", - "VulkanLoader", - "Wgpu" - ] - } - }, - "Sln": { + "SkipContributorsScrape": { "type": "boolean", - "description": "If specified, when using the clean target removes the generated solution and stops" - }, - "Target": { - "type": "array", - "description": "List of targets to be invoked. Default is '{default_target}'", - "items": { - "type": "string", - "enum": [ - "Assimp", - "BuildLibSilkDroid", - "Clean", - "Compile", - "DeclareApi", - "Dxvk", - "EnsureApiDeclared", - "FullCompile", - "FullPack", - "FullPushToNuGet", - "GLFW", - "MoltenVK", - "Pack", - "Prerequisites", - "PushToNuGet", - "RegenerateBindings", - "Restore", - "SDL2", - "Shaderc", - "ShipApi", - "SignPackages", - "Sln", - "SPIRVCross", - "SPIRVReflect", - "SwiftShader", - "Test", - "ValidateSolution", - "Vkd3d", - "VulkanLoader", - "Wgpu" - ] - } + "description": "If enabled, skips scraping the contributors for the authors.yml file of the blog" }, - "Verbosity": { + "Solution": { "type": "string", - "description": "Logging verbosity during build execution. Default is 'Normal'", - "enum": [ - "Minimal", - "Normal", - "Quiet", - "Verbose" - ] - }, - "Warnings": { - "type": "boolean", - "description": "Outputs build warnings instead of keeping the MSBuild logging quiet with just errors" + "description": "Path to a solution file that is automatically loaded" } } + }, + { + "$ref": "#/definitions/NukeBuild" } - } -} \ No newline at end of file + ] +} diff --git a/.nuke/parameters.json b/.nuke/parameters.json index fb0ca1ec38..4533bc3268 100644 --- a/.nuke/parameters.json +++ b/.nuke/parameters.json @@ -1,4 +1,4 @@ { - "$schema": "./build.schema.json", - "OriginalSolution": "Silk.NET.sln" -} \ No newline at end of file + "$schema": "build.schema.json", + "Solution": "Silk.NET.sln" +} diff --git a/.silktouch/openal-clangsharp.stout b/.silktouch/openal-clangsharp.stout new file mode 100644 index 0000000000..c00c2aa9e0 Binary files /dev/null and b/.silktouch/openal-clangsharp.stout differ diff --git a/.silktouch/opengl-clangsharp.stout b/.silktouch/opengl-clangsharp.stout new file mode 100644 index 0000000000..0696b43007 Binary files /dev/null and b/.silktouch/opengl-clangsharp.stout differ diff --git a/.silktouch/sdl-clangsharp.stout b/.silktouch/sdl-clangsharp.stout new file mode 100644 index 0000000000..693076b364 Binary files /dev/null and b/.silktouch/sdl-clangsharp.stout differ diff --git a/.silktouch/vulkan-clangsharp.stout b/.silktouch/vulkan-clangsharp.stout new file mode 100644 index 0000000000..d905b7ace2 Binary files /dev/null and b/.silktouch/vulkan-clangsharp.stout differ diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 3bca87766d..0000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Tutorial 1.1 - Hello Window", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 1.1 - Hello Window", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 1.1 - Hello Window/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.1 - Hello Window", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 1.2 - Hello quad", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 1.2 - Hello quad", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 1.2 - Hello quad/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.2 - Hello quad", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 1.3 - Abstractions", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 1.3 - Abstractions", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 1.3 - Abstractions/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.3 - Abstractions", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 1.4 - Textures", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 1.4 - Textures", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 1.4 - Textures/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.4 - Textures", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 1.5 - Transformations", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 1.5 - Transformations", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 1.5 - Transformations/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.5 - Transformations", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 2.1 - Co-ordinate Systems", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 2.1 - Co-ordinate Systems", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 2.1 - Co-ordinate Systems/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 2.1 - Co-ordinate Systems", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 2.2 - Camera", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 2.2 - Camera", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 2.2 - Camera/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 2.2 - Camera", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 3.1 - Ambient Lighting", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 3.1 - Ambient Lighting", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 3.1 - Ambient Lighting/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.1 - Ambient Lighting", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 3.2 - Diffuse Lighting", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 3.2 - Diffuse Lighting", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 3.2 - Diffuse Lighting/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.2 - Diffuse Lighting", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 3.3 - Specular Lighting", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 3.3 - Specular Lighting", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 3.3 - Specular Lighting/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.3 - Specular Lighting", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 3.4 - Materials", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 3.4 - Materials", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 3.4 - Materials/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.4 - Materials", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": "Tutorial 3.5 - Lighting Maps", - "type": "coreclr", - "request": "launch", - "preLaunchTask": "build Tutorial 3.5 - Lighting Maps", - "program": "${workspaceFolder}/examples/CSharp/Tutorial 3.5 - Lighting Maps/bin/Debug/netcoreapp3.0/Tutorial.dll", - "args": [], - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.5 - Lighting Maps", - "console": "internalConsole", - "stopAtEntry": false - }, - { - "name": ".NET Core Attach", - "type": "coreclr", - "request": "attach", - "processId": "${command:pickProcess}" - } - ] -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index c00c1488e1..0000000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,473 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "build Tutorial 1.1 - Hello Window", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 1.1 - Hello Window/Tutorial 1.1 - Hello Window.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 1.1 - Hello Window", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 1.1 - Hello Window/Tutorial 1.1 - Hello Window.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 1.1 - Hello Window", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.1 - Hello Window" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 1.2 - Hello quad", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 1.2 - Hello quad/Tutorial 1.2 - Hello quad.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 1.2 - Hello quad", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 1.2 - Hello quad/Tutorial 1.2 - Hello quad.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 1.2 - Hello quad", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.2 - Hello quad" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 1.3 - Abstractions", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 1.3 - Abstractions/Tutorial 1.3 - Abstraction.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 1.3 - Abstractions", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 1.3 - Abstractions/Tutorial 1.3 - Abstraction.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 1.3 - Abstractions", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.3 - Abstractions" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 1.4 - Textures", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 1.4 - Textures/Tutorial 1.4 - Textures.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 1.4 - Textures", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 1.4 - Textures/Tutorial 1.4 - Textures.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 1.4 - Textures", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.4 - Textures" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 1.5 - Transformations", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 1.5 - Transformations/Tutorial 1.5 - Transformations.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 1.5 - Transformations", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 1.5 - Transformations/Tutorial 1.5 - Transformations.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 1.5 - Transformations", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 1.5 - Transformations" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 2.1 - Co-ordinate Systems", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 2.1 - Co-ordinate Systems/Tutorial 2.1 - Co-ordinate Systems.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 2.1 - Co-ordinate Systems", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 2.1 - Co-ordinate Systems/Tutorial 2.1 - Co-ordinate Systems.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 2.1 - Co-ordinate Systems", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 2.1 - Co-ordinate Systems" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 2.2 - Camera", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 2.2 - Camera/Tutorial 2.2 - Camera.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 2.2 - Camera", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 2.2 - Camera/Tutorial 2.2 - Camera.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 2.2 - Camera", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 2.2 - Camera" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 3.1 - Ambient Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 3.1 - Ambient Lighting/Tutorial 3.1 - Ambient Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 3.1 - Ambient Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 3.1 - Ambient Lighting/Tutorial 3.1 - Ambient Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 3.1 - Ambient Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.1 - Ambient Lighting" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 3.2 - Diffuse Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 3.2 - Diffuse Lighting/Tutorial 3.2 - Diffuse Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 3.2 - Diffuse Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 3.2 - Diffuse Lighting/Tutorial 3.2 - Diffuse Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 3.2 - Diffuse Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.2 - Diffuse Lighting" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 3.3 - Specular Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 3.3 - Specular Lighting/Tutorial 3.3 - Specular Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 3.3 - Specular Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 3.3 - Specular Lighting/Tutorial 3.3 - Specular Lighting.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 3.3 - Specular Lighting", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.3 - Specular Lighting" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 3.4 - Materials", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 3.4 - Materials/Tutorial 3.4 - Materials.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 3.4 - Materials", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 3.4 - Materials/Tutorial 3.4 - Materials.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 3.4 - Materials", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.4 - Materials" - }, - "problemMatcher": "$msCompile" - }, - { - "label": "build Tutorial 3.5 - Lighting Maps", - "command": "dotnet", - "type": "process", - "args": [ - "build", - "${workspaceFolder}/examples/CSharp/Tutorial 3.5 - Lighting Maps/Tutorial 3.5 - Lighting Maps.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "publish Tutorial 3.5 - Lighting Maps", - "command": "dotnet", - "type": "process", - "args": [ - "publish", - "${workspaceFolder}/examples/CSharp/Tutorial 3.5 - Lighting Maps/Tutorial 3.5 - Lighting Maps.csproj", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "problemMatcher": "$msCompile" - }, - { - "label": "watch Tutorial 3.5 - Lighting Maps", - "command": "dotnet", - "type": "process", - "args": [ - "watch", - "run", - "/property:GenerateFullPaths=true", - "/consoleloggerparameters:NoSummary" - ], - "options": { - "cwd": "${workspaceFolder}/examples/CSharp/Tutorial 3.5 - Lighting Maps" - }, - "problemMatcher": "$msCompile" - } - ] -} diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 86847dec27..0000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,28 +0,0 @@ -# Everything -* @dotnet/silk-dotnet - -# Maths -/src/Maths/ @HurricanKai - -# SilkTouch -/src/Core/Silk.NET.SilkTouch @HurricanKai - -# Core -#/src/Core/Silk.NET.Core @Perksey -#/src/Core/Silk.NET.Core.Win32Extras @Perksey - -# Input -/src/Input/**/*.cs @ThomasMiz - -# Vulkan -/src/Vulkan/**/*.cs @HurricanKai - -# OpenGL -/src/OpenGL/**/*.cs @ThomasMiz @Beyley - -# WebGPU -/src/WebGPU/**/*.cs @Beyley - -# BuildTools -#/src/Core/Silk.NET.BuildTools @Perksey -#/**/*.gen.cs @Perksey diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index ad7c028a84..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,79 +0,0 @@ -# Contributing - -You can contribute to Silk.NET with issues and PRs. Simply filing issues for problems you encounter is a great way to contribute. Contributing code is also greatly appreciated. - -## Considerations -The Silk.NET team will merge changes that improve the library significantly. We will not merge changes that have narrowly-defined benefits, or are breaking in some way. All contributions must also follow all other guidelines outlined in this document. - -## DOs and DON'Ts -Please: -- **DO** talk to us in #team-talk in the Discord or open a discussion issue if your contribution is sizeable. -- **DO** keep the discussions around contributions focused. If you have another matter to discuss, rather than creating a massive tangent in the current discussion, open up a new one. -- **DO** follow the code of conduct if discussing on GitHub and/or the Discord #rules if discussing on Discord. -- **DON'T** make PRs that don't directly affect the end user, such as style changes. These are best done as part of a PR related to the area in question. Documentation is fine (and encouraged!), as this is useful to the end user. -- **DON'T** commit code you didn't write without following its license and following our guidelines for doing so in the Contributor License Agreement. If you are unable to license some code, don't commit it. -- **DON'T** surprise us with big pull requests or big API changes without talking to us first! -- **DON'T** make PRs for legal or administrative documents, such as the license, file headers, or code of conduct. If you see something off, let us know and we'll change it. - -## Breaking changes -Contributions must maintain API signature and behavioral compatibility. Contributions that include breaking changes will be rejected. There are exceptions to this, such as if the contribution is made against a major/breaking version branch (such as `2.0` instead of `master`), however this is subject to the team's approval. At risk of sounding like a broken record, talk to us about your idea first! - -### Generated bindings -Sometimes upstream specification changes happen while working on your contribution. Unfortunately, we are not in control of breaking changes created by the upstream spec sources, and if one happens while working on your contribution it is not a cause for concern. - -If your contribution affects binder output, let us know by commenting on the pull request. If the change isn't as a result of your modifications to the BuildTools (if any), it is recommended that you don't commit the .gen.cs files and instead do this in a separate PR. - -## Suggested workflow -Silk.NET uses and encourages [Early Pull Requests](https://medium.com/practical-blend/pull-request-first-f6bb667a9b6). Please don't wait until you're done to open a PR! - -1. Install [Git](https://git-scm.com/downloads) and the [.NET Core SDK](https://www.microsoft.com/net/download) -1. [Fork Silk.NET](https://github.com/dotnet/Silk.NET/fork) -1. Create a branch on your fork. -1. Add an empty commit to start your work off (and let you open a PR): `git commit --allow-empty -m "start of [thing you're working on]"` -1. Open a [**draft pull request**](https://github.blog/2019-02-14-introducing-draft-pull-requests/). Do this **before** you actually start working. -1. Make your commits in small, incremental steps with clear descriptions. -1. Tag a maintainer when you're done and ask for a review! - -## Working with our large solution - -The Silk.NET solution is **very large**. As such, to generate a solution that only has the projects you care about for your contribution, use the following command: -`nuke sln --projects project1 project2...`. `` can be substitued for: -- A name of an individual project. The Silk.NET prefix can be omitted provided there is no matching subfolder. -- A name of a subfolder in the repo root, `src/`, or `examples/CSharp` - -Example: `nuke sln --projects opengl silk.net.vulkan core.win32extras "opengl tutorials" build`. This: -- matches `opengl` to `src/OpenGL` -- matches `silk.net.vulkan` to `src/Vulkan/Silk.NET.Vulkan` -- matches `core.win32extras` to `src/Core/Silk.NET.Core.Win32Extras` -- matches `"opengl tutorials"` to `examples/CSharp/OpenGL Tutorials` -- matches `build` to `build/` - -The generated solution is: `Silk.NET.gen.sln` - -## "Help wanted" & "Good first issue" -If the core team are unable to champion an issue, they will mark it with a "help wanted" label. This indicates that any external contributor may pick up on this issue and implement it as part of a contribution. However, some "help wanted" issues may require intermediate knowledge of the codebase, area, and/or ecosystem; or may have uncertainty surrounding implementation details (if this is the case talk to us in the Discord or in a discussion issue). Because of this, we also mark some issues with the label "good first issue" which indicates that an issue is straightforward, and is a good place to start if you're interested in contributing but new to the codebase. - -## Contributor License Agreement -You must sign a Contributor License Agreement (CLA) before your PR will be merged. This is a one-time requirement for all .NET Foundation projects, and you'll only have to do this once. You can read more about [Contribution License Agreements (CLAs) on Wikipedia](https://en.wikipedia.org/wiki/Contributor_License_Agreement). - -You don't have to do this up-front. You can simply clone, fork, and submit your pull-request as usual. When your pull-request is created, you'll be notified by the CLA bot of further instructions if necessary. - -## File Headers -The following file header is used for Silk.NET. Please use it for new files. -```cs -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -``` - -## Pull requests -### Continuous Integration -Our GitHub Actions Continuous Integration (CI) system will automatically perform the required builds, tests, and in some cases changes for Pull Requests (PRs). - -If the CI build fails for any reason, you can view the logs to find out what the problem is. In some cases, GitHub Actions will highlight the errors inline on the "File Changes" tabs. - -### Feedback -Team and community members will provide feedback on your change. Community feedback is highly valued. You will often see the absence of team feedback if the community has already provided good review feedback. - -One or more team members will review every PR prior to merge. - -There are lots of thoughts and approaches for how to efficiently discuss changes. It is best to be clear and explicit with your feedback. Please be patient with people who might not understand the finer details about your approach to feedback. diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000000..2402e0f69e --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,92 @@ + + + + + + + + $(MSBuildThisFileDirectory)artifacts/ + $(ProjectCategory)/$(MSBuildProjectName) + https://github.com/dotnet/Silk.NET + + + + + true + $(BaseArtifactsPath)obj/$(BaseArtifactsPathSuffix)/ + embedded + false + enable + true + true + true + true + true + true + enable + + + + true + + + + + .NET Foundation and Contributors + $(BaseArtifactsPath)bin/$(BaseArtifactsPathSuffix)/ + .NET Foundation + $(BaseArtifactsPath)pkg/$(BaseArtifactsPathSuffix)/$(Configuration)/ + Silk.NET + + + + + Copyright © .NET Foundation and Contributors + Silk.NET is your one-stop-shop for high-speed .NET multimedia, graphics, and compute; providing bindings to popular low-level APIs such as OpenGL, OpenCL, OpenAL, OpenXR, SDL, Vulkan, Assimp, WebGPU, DirectX, and more! + strict + true + true + preview + en-US + true + MIT + $(RepositoryUrl) + true + git + true + false + true + SilkShippingControl;$(VersionDependsOn) + SilkShippingControl;$(PackageVersionDependsOn) + SilkNativePackaging;$(TargetsForTfmSpecificContentInPackage) + SilkShippingControl;$(GenerateNuspecDependsOn) + false + + + + + portable + true + true + true + snupkg + + + + + $([System.IO.File]::ReadAllText("$(MSBuildThisFileDirectory)excluded-platforms.txt")) + $(SilkExcludedPlatforms) ios tvos mac maccatalyst + true + true + true + true + true + + diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000000..ab0c6301de --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,276 @@ + + + + + + + + $(DefineConstants);$(OS) + + + + + + + + + silkdotnet_v3.png + + + + + + + $([System.IO.File]::ReadAllText("$(MSBuildThisFileDirectory)docs/README.md")) + $([System.String]::Copy($(SilkReadme)) + .Replace('<!-- Begin exclude from NuGet readme. -->','<!--') + .Replace('<!-- End exclude from NuGet readme. -->','-->') + .Replace('<!-- Begin include in NuGet readme.','') + .Replace('End include in NuGet readme. -->','') + .Replace('<h1 align="center">', '# ') + .Replace('<h2 align="center">', '# ') + .Replace('</h1>', '').Replace('</h2>', '') + .Replace('<br />', '%0a%0a').Replace('<br/>', '%0a%0a') + .Replace('<div>', '').Replace('</div>', '') + .Replace('<a>', '').Replace('</a>', '')) + + $(IntermediateOutputPath)$(TargetFramework)/README.md + + + $(SilkDescription) $(Description) + $(SilkDescription) $(SilkExtendedDescription)%0a%0a + $([System.String]::Copy($(SilkReadme)) + .Replace('<!-- Package description inserted here automatically. -->', + '# About This Package%0a%0a$(SilkExtendedDescription)')) + + + + + + + + + README.md + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + true + NU5128;1591;$(NoWarn) + false + + + + + false + + + + + + + + + + + + + + + + + + + + + $([System.IO.File]::ReadAllText("$(MSBuildThisFileDirectory)docs/CHANGELOG.md")) + + + + + + + + $(VersionSuffix) + $(SilkVersion) + $(SilkVersionSuffix) + $(SilkReleaseNotes) + $(SilkVersion) + $(SilkVersion)-$(VersionSuffix) + + + + + $(MSBuildProjectDirectory)/version.txt + $([System.IO.File]::ReadAllText("$(SilkVersionTxtPath)").Trim()) + $(PackageVersion)$(SilkOriginalVersionSuffix) + $(PackageVersion)-$(SilkOriginalVersionSuffix) + + + + + + + + + + + + + + + + + true + true + true + true + full + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000000..0c0cf4d13b --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LICENSE.md b/LICENSE.md index 675ab4d30e..65877bdb90 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,22 +1,20 @@ -MIT License +# The MIT License (MIT) -- Copyright (c) 2019-2020 Ultz Limited -- Copyright (c) 2021- .NET Foundation and Contributors +Copyright © .NET Foundation and Contributors -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index c6d8f9e670..0000000000 --- a/README.md +++ /dev/null @@ -1,135 +0,0 @@ - -

- -
-

-
- -[![NuGet Version](https://img.shields.io/nuget/v/Silk.NET)](https://nuget.org/packages/Silk.NET) -[![Preview Feed](https://img.shields.io/badge/nuget-experimental%20feed-yellow)](https://gitlab.com/silkdotnet/Silk.NET/-/packages) -[![CI Build](https://github.com/Ultz/Silk.NET/workflows/CI%20Build/badge.svg)](https://github.com/dotnet/Silk.NET/actions/workflows/build.yml) -[![Join our Discord](https://img.shields.io/badge/chat%20on-discord-7289DA)](https://discord.gg/DTHHXRt) - -
- -
- - - -Silk.NET is your one-stop-shop for high-speed .NET multimedia, graphics, and compute; providing bindings to popular low-level APIs such as OpenGL, OpenCL, OpenAL, OpenXR, GLFW, SDL, Vulkan, Assimp, WebGPU, and DirectX. - -Use Silk.NET to spruce up applications with cross-platform 3D graphics, audio, compute and haptics! - -Silk.NET works on any .NET Standard 2.0 compliant platform, including .NET 6.0, Xamarin, .NET Framework 4.6.1+, and .NET Core 2.0+. - -
-
-
- -.NET Foundation - - - -
- -Proud to be an official project under the benevolent [.NET Foundation](https://dotnetfoundation.org) umbrella. - -
- - - -

Features

- -### Performance - -Having poured lots of hours into examining generated C# code and its JIT assembly, you can count on us to deliver blazing fast bindings with negligible overhead induced by Silk.NET! - -### Up-to-date - -With an efficient bindings regeneration mechanism, we are committed to ensuring our bindings reflect the latest specifications with frequent updates generated straight from the upstream sources. - -### High-level utilities - -In addition to providing high-speed, direct, and transparent bindings, we provide high-level utilities and wrappers to maximise productivity in common workloads such as platform-agnostic abstractions around Windowing and Input, bringing your apps to a vast number of platforms without changing a single line! - -### Good-to-go - -Silk.NET caters for anything you could need in swift development of multimedia, graphics, compute applications. Silk.NET is an all-in-one solution, complete with Graphics, Compute, Audio, Input, and Windowing. - - - -

The team

- -We currently have the following maintainers: -- [Kai Jellinghaus](https://github.com/HurricanKai) [Follow Kai on Twitter](https://twitter.com/intent/follow?screen_name=KJellinghaus) -- [Thomas Mizrahi](https://github.com/ThomasMiz) -- [Beyley Thomas](https://github.com/Beyley) - -In addition, the Silk.NET working group help drive larger user-facing changes providing key consultation from the perspective of dedicated users and professionals. - -

Building from source

- -Prerequisites -- **Must**: .NET 6 SDK -- **Should**: [NUKE](https://nuke.build) (build system). Install using `dotnet tool install Nuke.GlobalTool --global` -- **Should**: Android, iOS, and MAUI .NET 6 workloads (use `dotnet workload install android ios maccatalyst maui` to install them) -- **Should**: Android SDK version 30 with NDK tools installed. On Windows, for best results this should be installed into `C:\ProgramData\Android\android-sdk`. -- **Could**: Java JDK (for gradle) -- **Could**: Visual Studio 2022 Community version 17.0 or later - -Instructions -- Clone the repository (recursively) -- Run build.sh, build.cmd, build.ps1, or `nuke compile`. -- Use the DLLs. To get nupkgs you can use with NuGet instead, use `nuke pack`. - -There are more advanced build actions you can do too, such as FullBuild, Pack, FullPack, among others which you can view by doing `nuke --plan`. - -Note: Some .NET 6 workloads are only supported on Windows and macOS today. - -

Contributing

- -Silk.NET uses and encourages [Early Pull Requests](https://medium.com/practical-blend/pull-request-first-f6bb667a9b6). Please don't wait until you're done to open a PR! - -1. [Fork Silk.NET](https://github.com/dotnet/Silk.NET/fork) -2. Add an empty commit to a new branch to start your work off: `git commit --allow-empty -m "start of [thing you're working on]"` -3. Once you've pushed a commit, open a [**draft pull request**](https://github.blog/2019-02-14-introducing-draft-pull-requests/). Do this **before** you actually start working. -4. Make your commits in small, incremental steps with clear descriptions. -5. Tag a maintainer when you're done and ask for a review! - -The Silk.NET solution is **very large**. Learn about how you can combat this using our build process in [CONTRIBUTING.md](CONTRIBUTING.md). - - - -

Funding

-Silk.NET requires significant effort to maintain, as such we greatly appreciate any financial support you are able to provide! - -This helps ensure Silk.NET's long term viability, and to help support the developers who maintain Silk.NET in their free time. [Kai](https://github.com/sponsors/HurricanKai) is accepting GitHub Sponsorships. - -

Further resources

- -- Several examples can be found in the [examples folder](https://github.com/dotnet/Silk.NET/tree/master/examples) -- Come chat with us on [Discord](https://discord.gg/DTHHXRt)! - -

Licensing and governance

- -Silk.NET is distributed under the very permissive MIT/X11 license and all dependencies are distributed under MIT-compatible licenses. - -Silk.NET is a [.NET Foundation](https://www.dotnetfoundation.org/projects) project, and has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](http://www.dotnetfoundation.org/code-of-conduct). - - - ---- - -
- JetBrains -
- -Special thanks to [JetBrains](https://www.jetbrains.com/?from=Silk.NET) for supporting us with open-source licenses for their IDEs.
-
- - - diff --git a/Silk.NET.sln b/Silk.NET.sln index 8c56022364..7c83ca6760 100644 --- a/Silk.NET.sln +++ b/Silk.NET.sln @@ -1,4004 +1,242 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31612.314 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.BuildTools", "src\Core\Silk.NET.BuildTools\Silk.NET.BuildTools.csproj", "{FD24E9FF-1097-4777-A418-F2D88C558665}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windowing", "Windowing", "{23324041-2076-477C-A4BF-B385B8066C6C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.GLFW", "src\Windowing\Silk.NET.GLFW\Silk.NET.GLFW.csproj", "{BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Core", "src\Core\Silk.NET.Core\Silk.NET.Core.csproj", "{136C6154-D300-4B82-80D3-17B637841A2B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing.Glfw", "src\Windowing\Silk.NET.Windowing.Glfw\Silk.NET.Windowing.Glfw.csproj", "{0A18FCAE-572E-47FF-B8E3-C97ED15132FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing.Common", "src\Windowing\Silk.NET.Windowing.Common\Silk.NET.Windowing.Common.csproj", "{956F722C-DFD3-435E-9D2E-A0549C4D8BC0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenAL", "OpenAL", "{081E7761-B200-4DBF-8950-941464DECACE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL", "src\OpenAL\Silk.NET.OpenAL\Silk.NET.OpenAL.csproj", "{5A41E9D5-67F5-447C-8AE2-78FED7A45206}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Extensions.Creative", "src\OpenAL\Extensions\Silk.NET.OpenAL.Extensions.Creative\Silk.NET.OpenAL.Extensions.Creative.csproj", "{FC015604-3326-4BCC-9212-C5CB0DFB0D12}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Extensions.Enumeration", "src\OpenAL\Extensions\Silk.NET.OpenAL.Extensions.Enumeration\Silk.NET.OpenAL.Extensions.Enumeration.csproj", "{66F172D3-4AE5-4C6E-A035-0E0AE962F555}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Extensions.EXT", "src\OpenAL\Extensions\Silk.NET.OpenAL.Extensions.EXT\Silk.NET.OpenAL.Extensions.EXT.csproj", "{352E06E3-9D5E-4C2B-836D-C5538F8AA48D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Extensions.Soft", "src\OpenAL\Extensions\Silk.NET.OpenAL.Extensions.Soft\Silk.NET.OpenAL.Extensions.Soft.csproj", "{94D7D3A3-3640-4791-BE19-CA50C59187C6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Properties", "Build Properties", "{21F1A5E2-9861-49A6-934D-DF5AAA03AFFE}" +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28922.388 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{60A10DB9-C4D6-48CD-8982-7F02345D7ADF}" ProjectSection(SolutionItems) = preProject - build\props\bindings.props = build\props\bindings.props - build\props\common.props = build\props\common.props - build\csharp_typemap.json = build\csharp_typemap.json - build\dx_typemap.json = build\dx_typemap.json + .editorconfig = .editorconfig + .gitattributes = .gitattributes + .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + LICENSE.md = LICENSE.md generator.json = generator.json - build\gl_typemap.json = build\gl_typemap.json + Silk.NET.sln.DotSettings = Silk.NET.sln.DotSettings + Directory.Packages.props = Directory.Packages.props EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Input.Common", "src\Input\Silk.NET.Input.Common\Silk.NET.Input.Common.csproj", "{8FFF49D6-B029-400B-8510-1A088868DFA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Input", "Input", "{FA9D1C95-5585-4DEC-B226-1447A486C376}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenGL", "OpenGL", "{0E9C83A8-A413-4921-8F39-59519BFF939B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL", "src\OpenGL\Silk.NET.OpenGL\Silk.NET.OpenGL.csproj", "{A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy", "src\OpenGL\Silk.NET.OpenGL.Legacy\Silk.NET.OpenGL.Legacy.csproj", "{446DD80A-CAF4-4E19-B87E-A43135E2D59D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES", "src\OpenGL\Silk.NET.OpenGLES\Silk.NET.OpenGLES.csproj", "{24CE7080-FF44-46BF-886F-456F30E54442}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.AMD", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.AMD\Silk.NET.OpenGL.Extensions.AMD.csproj", "{F49FCBFD-2041-4936-89CF-095C77555CEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.APPLE", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.APPLE\Silk.NET.OpenGL.Extensions.APPLE.csproj", "{21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.ARB", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.ARB\Silk.NET.OpenGL.Extensions.ARB.csproj", "{4C5A0F3B-2333-4ED8-998B-CB891D786DD1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.EXT", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.EXT\Silk.NET.OpenGL.Extensions.EXT.csproj", "{28155265-C538-4D63-A9A4-2A225115BCC3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.INTEL", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.INTEL\Silk.NET.OpenGL.Extensions.INTEL.csproj", "{C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.KHR", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.KHR\Silk.NET.OpenGL.Extensions.KHR.csproj", "{224CB2E1-3923-4BA6-A202-DA290E55725A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.NV", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.NV\Silk.NET.OpenGL.Extensions.NV.csproj", "{063B37FE-87A0-41BA-A61A-6870D4AEB76F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.OVR", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.OVR\Silk.NET.OpenGL.Extensions.OVR.csproj", "{7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.AMD", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.AMD\Silk.NET.OpenGL.Legacy.Extensions.AMD.csproj", "{67CE45B7-997F-4396-AB90-FC6C7FBA07C3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.APPLE", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.APPLE\Silk.NET.OpenGL.Legacy.Extensions.APPLE.csproj", "{B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.ARB", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.ARB\Silk.NET.OpenGL.Legacy.Extensions.ARB.csproj", "{ADFB4E80-301E-416F-B932-86FF242F5BBA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.ATI", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.ATI\Silk.NET.OpenGL.Legacy.Extensions.ATI.csproj", "{B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.EXT", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.EXT\Silk.NET.OpenGL.Legacy.Extensions.EXT.csproj", "{C02D75ED-33EE-46D5-9AF1-A54E01206161}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.GL3DFX", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.GL3DFX\Silk.NET.OpenGL.Legacy.Extensions.GL3DFX.csproj", "{B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.GREMEDY", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.GREMEDY\Silk.NET.OpenGL.Legacy.Extensions.GREMEDY.csproj", "{33C55873-FF79-4822-BDC5-CBFBCF78C12A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.HP", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.HP\Silk.NET.OpenGL.Legacy.Extensions.HP.csproj", "{C3931003-EC0A-41D6-A481-8D3CD28556F4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.IBM", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.IBM\Silk.NET.OpenGL.Legacy.Extensions.IBM.csproj", "{AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.INGR", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.INGR\Silk.NET.OpenGL.Legacy.Extensions.INGR.csproj", "{7FB49D81-CE37-47D8-B62D-5954F72DE052}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.INTEL", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.INTEL\Silk.NET.OpenGL.Legacy.Extensions.INTEL.csproj", "{6CCD4C39-C953-4281-8135-1316B1A68248}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.KHR", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.KHR\Silk.NET.OpenGL.Legacy.Extensions.KHR.csproj", "{E9754021-FBDD-460C-B966-B41019E3EF98}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.MESA", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.MESA\Silk.NET.OpenGL.Legacy.Extensions.MESA.csproj", "{7483030B-2CA2-4B60-9188-6BA5633EFBF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.MESAX", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.MESAX\Silk.NET.OpenGL.Legacy.Extensions.MESAX.csproj", "{7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.NV", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.NV\Silk.NET.OpenGL.Legacy.Extensions.NV.csproj", "{3AE416D7-C523-415B-A3AF-B790A1B5C05F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.NVX", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.NVX\Silk.NET.OpenGL.Legacy.Extensions.NVX.csproj", "{75DC2611-F3A9-4C17-A647-454097698434}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.OES", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.OES\Silk.NET.OpenGL.Legacy.Extensions.OES.csproj", "{2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.OML", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.OML\Silk.NET.OpenGL.Legacy.Extensions.OML.csproj", "{7BB402A0-274C-4476-A9F9-884045F30376}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.OVR", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.OVR\Silk.NET.OpenGL.Legacy.Extensions.OVR.csproj", "{2A3247AB-750D-48E6-9B99-A876397404D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.PGI", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.PGI\Silk.NET.OpenGL.Legacy.Extensions.PGI.csproj", "{BF9F8BA0-81F1-457D-89DF-9466FD4868C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.REND", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.REND\Silk.NET.OpenGL.Legacy.Extensions.REND.csproj", "{4451DE2E-B803-46E2-A911-C4FF5B183FD4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.S3", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.S3\Silk.NET.OpenGL.Legacy.Extensions.S3.csproj", "{3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.SGI", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.SGI\Silk.NET.OpenGL.Legacy.Extensions.SGI.csproj", "{63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.SGIS", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.SGIS\Silk.NET.OpenGL.Legacy.Extensions.SGIS.csproj", "{800B088D-2C80-4B72-84C3-3FF1F3DCB42A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.SGIX", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.SGIX\Silk.NET.OpenGL.Legacy.Extensions.SGIX.csproj", "{C0066476-7E6C-47B0-B6AD-87669FF643D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.SUN", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.SUN\Silk.NET.OpenGL.Legacy.Extensions.SUN.csproj", "{F1632267-F122-4F27-BDD9-501C8D087DF2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.SUNX", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.SUNX\Silk.NET.OpenGL.Legacy.Extensions.SUNX.csproj", "{318FBDE5-3045-4DE4-A489-F5A314D4D4B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.WIN", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.WIN\Silk.NET.OpenGL.Legacy.Extensions.WIN.csproj", "{B56BD145-5D19-4049-9700-CA1F024CE8A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.AMD", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.AMD\Silk.NET.OpenGLES.Extensions.AMD.csproj", "{F7181088-183E-4267-B13D-59A8EE90FAD1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.ANDROID", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.ANDROID\Silk.NET.OpenGLES.Extensions.ANDROID.csproj", "{3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.ANGLE", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.ANGLE\Silk.NET.OpenGLES.Extensions.ANGLE.csproj", "{5B084D8A-795F-4641-B89D-823A369AB84C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.APPLE", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.APPLE\Silk.NET.OpenGLES.Extensions.APPLE.csproj", "{DB5446E8-3884-4C77-8E17-F5C67584C514}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.ARM", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.ARM\Silk.NET.OpenGLES.Extensions.ARM.csproj", "{5AC8140B-D9C2-4317-948D-A447B846493A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.DMP", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.DMP\Silk.NET.OpenGLES.Extensions.DMP.csproj", "{83A352A0-F1EE-4091-8785-25BBA1C5F4B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.EXT", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.EXT\Silk.NET.OpenGLES.Extensions.EXT.csproj", "{D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.FJ", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.FJ\Silk.NET.OpenGLES.Extensions.FJ.csproj", "{E247B4A2-5EB3-451B-8D24-06DB83023B85}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.IMG", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.IMG\Silk.NET.OpenGLES.Extensions.IMG.csproj", "{107CE915-3387-4A0D-A8C7-0859A0D3DF80}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.INTEL", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.INTEL\Silk.NET.OpenGLES.Extensions.INTEL.csproj", "{9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.KHR", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.KHR\Silk.NET.OpenGLES.Extensions.KHR.csproj", "{A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.MESA", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.MESA\Silk.NET.OpenGLES.Extensions.MESA.csproj", "{4F8FAA99-0491-4857-9252-685BF3B46AAB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.NV", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.NV\Silk.NET.OpenGLES.Extensions.NV.csproj", "{7E00824E-34C5-4162-AA26-86F84A4FBA42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.OES", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.OES\Silk.NET.OpenGLES.Extensions.OES.csproj", "{1D221A69-EE04-476A-B660-32DFDB2DC162}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.OVR", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.OVR\Silk.NET.OpenGLES.Extensions.OVR.csproj", "{3BC72F4A-8B32-490A-9EA7-B68320991E15}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.QCOM", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.QCOM\Silk.NET.OpenGLES.Extensions.QCOM.csproj", "{6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.VIV", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.VIV\Silk.NET.OpenGLES.Extensions.VIV.csproj", "{8D534FE1-6113-457A-97DD-FD42782580A5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{0651C5EF-50AA-4598-8D9C-8F210ADD8490}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Input.Glfw", "src\Input\Silk.NET.Input.Glfw\Silk.NET.Input.Glfw.csproj", "{3908DEF6-7403-49F5-B8EC-5B3B12C325D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Input", "src\Input\Silk.NET.Input\Silk.NET.Input.csproj", "{020A8E88-B607-4281-BA0D-5ED03484A201}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET", "src\Core\Silk.NET\Silk.NET.csproj", "{7BB1DE56-DA1C-4776-A961-B810574E1EF4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vulkan", "Vulkan", "{E2ABDF45-C329-47B2-8E09-B7298E2557F7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan", "src\Vulkan\Silk.NET.Vulkan\Silk.NET.Vulkan.csproj", "{7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{49BC383A-D7E6-4013-93C7-371479B984CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.NVX", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.NVX\Silk.NET.Vulkan.Extensions.NVX.csproj", "{043852EA-FBD4-4F42-9CDC-92078F9EF942}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.NV", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.NV\Silk.NET.Vulkan.Extensions.NV.csproj", "{D860135C-01A2-4597-B1B2-DA4882C09798}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.NN", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.NN\Silk.NET.Vulkan.Extensions.NN.csproj", "{A82D0553-7880-462E-B8B2-1DF334DF6FBA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.MVK", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.MVK\Silk.NET.Vulkan.Extensions.MVK.csproj", "{96F4E9BD-2B70-4E2E-BB4D-91158F60A613}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.KHR", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.KHR\Silk.NET.Vulkan.Extensions.KHR.csproj", "{C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.INTEL", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.INTEL\Silk.NET.Vulkan.Extensions.INTEL.csproj", "{D4514077-0917-49CC-A222-FE2988D6BECE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.GOOGLE", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.GOOGLE\Silk.NET.Vulkan.Extensions.GOOGLE.csproj", "{70379A09-9EDB-41F7-81CF-34ABE525693D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.GGP", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.GGP\Silk.NET.Vulkan.Extensions.GGP.csproj", "{8180C066-71E5-4D45-8DFE-EF254FE86A30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.FUCHSIA", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.FUCHSIA\Silk.NET.Vulkan.Extensions.FUCHSIA.csproj", "{085677FA-4B70-430F-8675-77091EBD9ED5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.EXT", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.EXT\Silk.NET.Vulkan.Extensions.EXT.csproj", "{899DB28C-722D-46A1-9A17-378DF19FA526}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.ANDROID", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.ANDROID\Silk.NET.Vulkan.Extensions.ANDROID.csproj", "{65E16908-BD7A-4FC2-BC23-FD8194039C5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.AMD", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.AMD\Silk.NET.Vulkan.Extensions.AMD.csproj", "{3D945DE0-1E2D-439E-991D-9C65C325F82F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.MESA", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.MESA\Silk.NET.OpenGL.Extensions.MESA.csproj", "{D27D10F0-F22B-49B5-9933-375BB120AD70}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Lab", "Lab", "{DFA0E841-33E5-4533-AF00-964E21A141B8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{3501BAD6-406A-49BC-BE0E-5A49A3AAAE6A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing.Extensions", "src\Windowing\Extensions\Silk.NET.Windowing.Extensions\Silk.NET.Windowing.Extensions.csproj", "{50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenCL", "OpenCL", "{D00DC827-E7DF-48A9-9BEB-E1ED2F73C990}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL", "src\OpenCL\Silk.NET.OpenCL\Silk.NET.OpenCL.csproj", "{93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{757F2B10-B69D-4C19-BFE0-D99070A00AD9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.AMD", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.AMD\Silk.NET.OpenCL.Extensions.AMD.csproj", "{13AAF660-1E37-4C63-B2B7-49140B9F5049}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.APPLE", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.APPLE\Silk.NET.OpenCL.Extensions.APPLE.csproj", "{734DF4E8-9F89-4D0B-AB0B-022FED9849EA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.ARM", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.ARM\Silk.NET.OpenCL.Extensions.ARM.csproj", "{184BB500-CFDB-4AA6-AF33-9CD22AFFB224}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.EXT", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.EXT\Silk.NET.OpenCL.Extensions.EXT.csproj", "{4965C44F-DAE6-4EDA-991F-4390595A20BA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.IMG", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.IMG\Silk.NET.OpenCL.Extensions.IMG.csproj", "{74140997-E9C8-4CCC-9235-C6E2DABAF8D3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.INTEL", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.INTEL\Silk.NET.OpenCL.Extensions.INTEL.csproj", "{4B50A1B4-AB5E-469B-A8AC-635E023EC77C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.KHR", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.KHR\Silk.NET.OpenCL.Extensions.KHR.csproj", "{BEF61E9E-2EC1-44B8-B677-321329DEF205}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.NV", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.NV\Silk.NET.OpenCL.Extensions.NV.csproj", "{8B8397F0-7A39-480F-8C19-0A96F121D57A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.QCOM", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.QCOM\Silk.NET.OpenCL.Extensions.QCOM.csproj", "{45407BC4-DF4C-49BD-ADEF-706683C90E14}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{8D84B804-168F-4EAA-BC09-F55A35A29887}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Input.Extensions", "src\Input\Extensions\Silk.NET.Input.Extensions\Silk.NET.Input.Extensions.csproj", "{8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenXR", "OpenXR", "{ABD1AF6D-D9D1-4157-A1FF-AC98A054DA92}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR", "src\OpenXR\Silk.NET.OpenXR\Silk.NET.OpenXR.csproj", "{B6017708-8E8C-4230-95AD-2D06237D68D4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{90471225-AC23-424E-B62E-F6EC4C6ECAC0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.EXT", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.EXT\Silk.NET.OpenXR.Extensions.EXT.csproj", "{59C98A03-427A-40A0-8467-C85C4807907F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.KHR", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.KHR\Silk.NET.OpenXR.Extensions.KHR.csproj", "{0030C8EE-8EBB-499F-A310-957BE176AEB1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.MSFT", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.MSFT\Silk.NET.OpenXR.Extensions.MSFT.csproj", "{E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assimp", "Assimp", "{6EADA376-E83F-40B7-9539-71DD17AEF7A4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Assimp", "src\Assimp\Silk.NET.Assimp\Silk.NET.Assimp.csproj", "{19586F56-E799-49EA-9B3C-910BF2D4976A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing", "src\Windowing\Silk.NET.Windowing\Silk.NET.Windowing.csproj", "{00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.SilkTouch", "src\Core\Silk.NET.SilkTouch\Silk.NET.SilkTouch.csproj", "{6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.SDL", "src\Windowing\Silk.NET.SDL\Silk.NET.SDL.csproj", "{F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing.Sdl", "src\Windowing\Silk.NET.Windowing.Sdl\Silk.NET.Windowing.Sdl.csproj", "{FF526329-094A-4B25-ABC5-750D62E48101}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Input.Sdl", "src\Input\Silk.NET.Input.Sdl\Silk.NET.Input.Sdl.csproj", "{377A7D9A-2691-4683-AB81-03B1642B3A78}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.NUKE", "build\nuke\Silk.NET.NUKE.csproj", "{B9A8D738-FE7D-4860-A446-4A03E3DDEB74}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft", "Microsoft", "{F2CF5D32-4B41-425E-B229-8FFC48F88063}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{9DB0EA3E-7216-4F9C-98F5-8A7483E9F083}" ProjectSection(SolutionItems) = preProject - src\Microsoft\dxva.h = src\Microsoft\dxva.h + docs\CODE_OF_CONDUCT.md = docs\CODE_OF_CONDUCT.md + docs\CODEOWNERS = docs\CODEOWNERS + docs\CONTRIBUTING.md = docs\CONTRIBUTING.md + docs\README.md = docs\README.md + docs\CHANGELOG.md = docs\CHANGELOG.md EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Direct3D11", "src\Microsoft\Silk.NET.Direct3D11\Silk.NET.Direct3D11.csproj", "{F3B7A9D6-5B15-45E8-925B-20B5BBD33428}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.DXGI", "src\Microsoft\Silk.NET.DXGI\Silk.NET.DXGI.csproj", "{A768A346-6388-4881-8FF6-15F0163B76E0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Direct3D12", "src\Microsoft\Silk.NET.Direct3D12\Silk.NET.Direct3D12.csproj", "{2C3099EA-C01C-4639-8300-153A9BD79292}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Direct3D9", "src\Microsoft\Silk.NET.Direct3D9\Silk.NET.Direct3D9.csproj", "{FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Direct3D.Compilers", "src\Microsoft\Silk.NET.Direct3D.Compilers\Silk.NET.Direct3D.Compilers.csproj", "{07DD7965-849F-4311-9DAD-07C1CCF8BEA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.XAudio", "src\Microsoft\Silk.NET.XAudio\Silk.NET.XAudio.csproj", "{4712BFE1-67DA-407F-8BDC-FAF529E5BF94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.XInput", "src\Microsoft\Silk.NET.XInput\Silk.NET.XInput.csproj", "{E8DE9BA0-8391-4278-926D-DD931C4172AF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maths", "Maths", "{41EEBDB3-75C4-4A60-B4D5-673FBCA791E7}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{CFFDBEEC-B112-4844-B65B-56A1029CC130}" ProjectSection(SolutionItems) = preProject - src\Maths\.editorconfig = src\Maths\.editorconfig + scripts\azure-pipelines.yml = scripts\azure-pipelines.yml + scripts\build.ps1 = scripts\build.ps1 + scripts\build.sh = scripts\build.sh + scripts\cibuild.cmd = scripts\cibuild.cmd + scripts\cibuild.sh = scripts\cibuild.sh EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Maths", "src\Maths\Silk.NET.Maths\Silk.NET.Maths.csproj", "{BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Maths.Benchmarks", "src\Maths\Silk.NET.Maths.Benchmarks\Silk.NET.Maths.Benchmarks.csproj", "{07915304-3B6B-400C-94F8-C49EF5F347E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Maths.Tests", "src\Maths\Silk.NET.Maths.Tests\Silk.NET.Maths.Tests.csproj", "{8C7A30EF-C257-421C-AABD-D42FF6D955A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Windowing.Extensions.Veldrid", "src\Windowing\Extensions\Silk.NET.Windowing.Extensions.Veldrid\Silk.NET.Windowing.Extensions.Veldrid.csproj", "{DE477265-8F7D-4D7F-B5DA-F3C5DE631788}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Native", "Native", "{72E7FA64-5B1E-477D-BD30-63B7F206B3C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.SDL.Native", "src\Native\Silk.NET.SDL.Native\Silk.NET.SDL.Native.csproj", "{F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.GLFW.Native", "src\Native\Silk.NET.GLFW.Native\Silk.NET.GLFW.Native.csproj", "{84F51960-D814-450D-80EB-D9E46A1D5187}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Assimp.Native", "src\Native\Silk.NET.Assimp.Native\Silk.NET.Assimp.Native.csproj", "{D3D9891B-88E6-46AD-919C-7EC4EABE5266}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Extensions.ImGui", "src\OpenGL\Extensions\Silk.NET.OpenGL.Extensions.ImGui\Silk.NET.OpenGL.Extensions.ImGui.csproj", "{462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experiments", "Experiments", "{39B598E9-44BA-4A61-A1BB-7C543734DBA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlankWindow", "src\Lab\Experiments\BlankWindow\BlankWindow.csproj", "{29792F05-EFB9-4323-94FC-01309B44BAF9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CLMultiplication", "src\Lab\Experiments\CLMultiplication\CLMultiplication.csproj", "{FAC2B206-8A11-4387-A7B4-645671641339}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreRTTest", "src\Lab\Experiments\CoreRTTest\CoreRTTest.csproj", "{2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "D3D12Triangle", "src\Lab\Experiments\D3D12Triangle\D3D12Triangle.csproj", "{1431D746-63CC-4498-BCD4-7A68E225ACF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FramebufferResized", "src\Lab\Experiments\FramebufferResized\FramebufferResized.csproj", "{C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGui", "examples\CSharp\OpenGL Demos\ImGui\ImGui.csproj", "{58E7EE89-B67C-482D-9605-04B3BCC5CFBB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InputTest", "src\Lab\Experiments\InputTest\InputTest.csproj", "{D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JITTesting", "src\Lab\Experiments\JITTesting\JITTesting.csproj", "{4001CDD7-6F73-4C18-966C-27E3BB1208F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonitorPlayground", "src\Lab\Experiments\MonitorPlayground\MonitorPlayground.csproj", "{1C687F7A-54A8-4BC8-82FB-0424AEA537FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleBase", "src\Lab\Experiments\SampleBase\SampleBase.csproj", "{6F7769EF-F89C-46AA-9EB1-2828CC2AA089}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SuperInvokeDiagnostics", "src\Lab\Experiments\SuperInvokeDiagnostics\SuperInvokeDiagnostics.csproj", "{A87F77B1-D38E-46E5-822A-097F0370D1D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestLib", "src\Lab\Experiments\TestLib\TestLib.csproj", "{0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Triangle", "src\Lab\Experiments\Triangle\Triangle.csproj", "{6E61C442-66B0-429E-BE5D-4ACD0045F0A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Utf8Test", "src\Lab\Experiments\Utf8Test\Utf8Test.csproj", "{70B06D00-CEA9-47CD-8781-10CA48376046}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VeldridTriangle", "src\Lab\Experiments\VeldridTriangle\VeldridTriangle.csproj", "{28760ABB-EB0F-4216-97B0-0DAC5FC27533}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VulkanTriangle", "src\Lab\Experiments\VulkanTriangle\VulkanTriangle.csproj", "{5E5433D4-0285-48AC-82EA-FA0F8C227707}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{BDADD4AA-80D5-439E-8CFE-2744395BD4F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InvokeBenchmarks", "src\Lab\Benchmarks\InvokeBenchmarks\InvokeBenchmarks.csproj", "{E7017145-BC11-408A-93F5-63D28F7DE79F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{4FD2509D-2D85-4ED3-9A64-1691E62B6900}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sources", "sources", "{DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6}" ProjectSection(SolutionItems) = preProject - examples\CSharp\Directory.Build.props = examples\CSharp\Directory.Build.props + sources\Directory.Build.props = sources\Directory.Build.props + sources\Directory.Build.targets = sources\Directory.Build.targets EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenGL Tutorials", "OpenGL Tutorials", "{20A4A2D1-D699-4D71-AA97-950154638576}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 1.1 - Hello Window", "examples\CSharp\OpenGL Tutorials\Tutorial 1.1 - Hello Window\Tutorial 1.1 - Hello Window.csproj", "{7803ADF5-D9C5-4262-9031-58AF9E050542}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 1.2 - Hello quad", "examples\CSharp\OpenGL Tutorials\Tutorial 1.2 - Hello quad\Tutorial 1.2 - Hello quad.csproj", "{FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 1.4 - Abstraction", "examples\CSharp\OpenGL Tutorials\Tutorial 1.4 - Abstractions\Tutorial 1.4 - Abstraction.csproj", "{69321DDA-65DF-412F-BDDA-9306B8EE98D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 1.5 - Transformations", "examples\CSharp\OpenGL Tutorials\Tutorial 1.5 - Transformations\Tutorial 1.5 - Transformations.csproj", "{4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 2.1 - Co-ordinate Systems", "examples\CSharp\OpenGL Tutorials\Tutorial 2.1 - Co-ordinate Systems\Tutorial 2.1 - Co-ordinate Systems.csproj", "{674A6DFE-22C7-482B-88B0-D065678D4A82}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 2.2 - Camera", "examples\CSharp\OpenGL Tutorials\Tutorial 2.2 - Camera\Tutorial 2.2 - Camera.csproj", "{88709BA6-3345-4ED5-A3C8-06CE98E163B9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 3.1 - Ambient Lighting", "examples\CSharp\OpenGL Tutorials\Tutorial 3.1 - Ambient Lighting\Tutorial 3.1 - Ambient Lighting.csproj", "{9DC25BF9-91C3-4F93-896B-FB97831E3AA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 3.2 - Diffuse Lighting", "examples\CSharp\OpenGL Tutorials\Tutorial 3.2 - Diffuse Lighting\Tutorial 3.2 - Diffuse Lighting.csproj", "{50810C05-6BB1-4E72-A97A-6124375A42E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 3.3 - Specular Lighting", "examples\CSharp\OpenGL Tutorials\Tutorial 3.3 - Specular Lighting\Tutorial 3.3 - Specular Lighting.csproj", "{59041F3C-5C88-45D3-BB93-0F1617DCA622}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 3.4 - Materials", "examples\CSharp\OpenGL Tutorials\Tutorial 3.4 - Materials\Tutorial 3.4 - Materials.csproj", "{37242743-E379-4DD4-B150-483E357A4F83}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 3.5 - Lighting Maps", "examples\CSharp\OpenGL Tutorials\Tutorial 3.5 - Lighting Maps\Tutorial 3.5 - Lighting Maps.csproj", "{50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenAL Demos", "OpenAL Demos", "{235C692C-AD31-443F-872F-BD57E75830C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WavePlayer", "examples\CSharp\OpenAL Demos\WavePlayer\WavePlayer.csproj", "{43896917-9904-4AE7-B634-32850471789F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiVulkan", "src\Lab\Experiments\ImGuiVulkan\ImGuiVulkan.csproj", "{89B03DDB-EBCA-4E6A-80AB-9FFD48110097}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Soft.Native", "src\Native\Silk.NET.OpenAL.Soft.Native\Silk.NET.OpenAL.Soft.Native.csproj", "{0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.EPIC", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.EPIC\Silk.NET.OpenXR.Extensions.EPIC.csproj", "{591836FE-0DAC-48A5-86AB-4C317A6B009A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.EXTX", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.EXTX\Silk.NET.OpenXR.Extensions.EXTX.csproj", "{960CCDC0-5327-4DD6-A4FE-90466B27F9C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.FB", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.FB\Silk.NET.OpenXR.Extensions.FB.csproj", "{749B0BAE-63F0-4B22-A883-CD521F725DAA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.HUAWEI", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.HUAWEI\Silk.NET.OpenXR.Extensions.HUAWEI.csproj", "{A1D90A8D-B1FE-463A-884E-AEC201FB75EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.HTC", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.HTC\Silk.NET.OpenXR.Extensions.HTC.csproj", "{60AFD661-4BE5-4040-896A-CE2EA95F98B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.LUNARG", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.LUNARG\Silk.NET.OpenXR.Extensions.LUNARG.csproj", "{71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.MAGICLEAP", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.MAGICLEAP\Silk.NET.OpenXR.Extensions.MAGICLEAP.csproj", "{AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.ML", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.ML\Silk.NET.OpenXR.Extensions.ML.csproj", "{4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.MND", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.MND\Silk.NET.OpenXR.Extensions.MND.csproj", "{3076E116-F160-4C5D-A3D9-B3B51845675C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.MNDX", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.MNDX\Silk.NET.OpenXR.Extensions.MNDX.csproj", "{A1890199-5E68-4AF3-A2AD-21A1D84AF22B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.OCULUS", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.OCULUS\Silk.NET.OpenXR.Extensions.OCULUS.csproj", "{358A6DC8-866C-4C8D-8F41-682F6683E683}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.ULTRALEAP", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.ULTRALEAP\Silk.NET.OpenXR.Extensions.ULTRALEAP.csproj", "{CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.VALVE", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.VALVE\Silk.NET.OpenXR.Extensions.VALVE.csproj", "{5C59C1E1-6392-41AA-AD73-6DA34B1B369B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.VARJO", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.VARJO\Silk.NET.OpenXR.Extensions.VARJO.csproj", "{51868FC9-C052-4C2D-98F9-10379AAD2671}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.LOADER", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.LOADER\Silk.NET.OpenCL.Extensions.LOADER.csproj", "{23172004-FF6B-45D8-9653-944CECE741E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.ARM", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.ARM\Silk.NET.Vulkan.Extensions.ARM.csproj", "{04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.BRCM", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.BRCM\Silk.NET.Vulkan.Extensions.BRCM.csproj", "{98C25360-F03A-4929-959B-C80A48D21FF2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.IMG", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.IMG\Silk.NET.Vulkan.Extensions.IMG.csproj", "{FD32964B-4144-43CD-B313-2A5DD6A05DEA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.MESA", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.MESA\Silk.NET.Vulkan.Extensions.MESA.csproj", "{859A77A8-73F0-447B-9076-B42D5CA3CA33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.QCOM", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.QCOM\Silk.NET.Vulkan.Extensions.QCOM.csproj", "{92FCD7CC-52BE-487F-B990-1B5CACF9D40F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.HUAWEI", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.HUAWEI\Silk.NET.Vulkan.Extensions.HUAWEI.csproj", "{64E177FC-38AA-45AE-B748-419E91F95EC7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.QNX", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.QNX\Silk.NET.Vulkan.Extensions.QNX.csproj", "{F16B4AE5-F68F-42A2-8AB5-029282032CE0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.VALVE", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.VALVE\Silk.NET.Vulkan.Extensions.VALVE.csproj", "{AB59F09A-9BD9-4CBB-8497-87B768C7C949}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.JUICE", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.JUICE\Silk.NET.Vulkan.Extensions.JUICE.csproj", "{86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.FB", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.FB\Silk.NET.Vulkan.Extensions.FB.csproj", "{D1DD841D-9F34-47A6-91EB-A8632D577BD7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{16AFCF73-8CC1-4B5D-8969-A90F468DC6D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.UNITY", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.UNITY\Silk.NET.OpenXR.Extensions.UNITY.csproj", "{AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.LIV", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.LIV\Silk.NET.OpenXR.Extensions.LIV.csproj", "{0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TriangleNET6", "src\Lab\Experiments\TriangleNET6\TriangleNET6.csproj", "{477046D2-AF81-4E2B-83BD-20176A971FDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenCL.Extensions.POCL", "src\OpenCL\Extensions\Silk.NET.OpenCL.Extensions.POCL\Silk.NET.OpenCL.Extensions.POCL.csproj", "{8881342D-6247-4826-9963-87D4B029ECB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenAL.Tests", "src\OpenAL\Silk.NET.OpenAL.Tests\Silk.NET.OpenAL.Tests.csproj", "{514DED00-4DA3-46D1-B2E8-10CE826CD52D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenGL Demos", "OpenGL Demos", "{2F547104-C74A-4A84-8980-D1B973CC40C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AndroidDemo", "examples\CSharp\OpenGL Demos\AndroidDemo\AndroidDemo.csproj", "{380468AD-B44D-456C-8DED-35467D11AC2F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Website", "Website", "{832251B9-B1A2-450A-8FB8-41F600CCA616}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Statiq", "src\Website\Silk.NET.Statiq\Silk.NET.Statiq.csproj", "{49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Statiq.TableOfContents", "src\Website\Silk.NET.Statiq.TableOfContents\Silk.NET.Statiq.TableOfContents.csproj", "{507ED409-A2FD-43BB-AC7C-778B92BD40CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.DXVA", "src\Microsoft\Silk.NET.DXVA\Silk.NET.DXVA.csproj", "{28D863B1-B60C-4C08-8661-EB820A5B78D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Core.Win32Extras", "src\Core\Silk.NET.Core.Win32Extras\Silk.NET.Core.Win32Extras.csproj", "{3E30D674-9282-4297-AD1F-9B233A166308}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AndroidInputDemo", "examples\CSharp\OpenGL Demos\AndroidInputDemo\AndroidInputDemo.csproj", "{C04680A3-C92A-4631-BD1E-8E4553A3F969}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.ALMALENCE", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.ALMALENCE\Silk.NET.OpenXR.Extensions.ALMALENCE.csproj", "{606214B8-07FC-436F-9523-02AF32E1AB1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.HTCX", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.HTCX\Silk.NET.OpenXR.Extensions.HTCX.csproj", "{782B6A7E-9F04-429A-9DCD-D7273AA3882E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SilkBackedSkiaRendering", "src\Lab\Experiments\SilkBackedSkiaRendering\SilkBackedSkiaRendering.csproj", "{DA49B8B8-40FF-4BDD-AC48-8B310404DB63}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PrototypeStructChaining", "PrototypeStructChaining", "{B15922CB-815C-4038-B635-EE2D8A8F700B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrototypeStructChaining", "src\Lab\Experiments\PrototypeStructChaining\PrototypeStructChaining\PrototypeStructChaining.csproj", "{EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrototypeStructChaining.Test", "src\Lab\Experiments\PrototypeStructChaining\PrototypeStructChaining.Test\PrototypeStructChaining.Test.csproj", "{BD19250B-E143-4F4E-9E1D-18829CCB3642}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Tests", "src\Vulkan\Silk.NET.Vulkan.Tests\Silk.NET.Vulkan.Tests.csproj", "{225BA79C-36FE-421A-85E4-D15F8B61869B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Templates", "Templates", "{278FE083-D2F7-4DD2-9D27-6AD883E3A4B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Templates", "src\Templates\Silk.NET.Templates\Silk.NET.Templates.csproj", "{4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.ANGLE.Native", "src\Native\Silk.NET.OpenGLES.ANGLE.Native\Silk.NET.OpenGLES.ANGLE.Native.csproj", "{8D02DFEB-121A-449B-BC39-09C3F9A88E07}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Loader.Native", "src\Native\Silk.NET.Vulkan.Loader.Native\Silk.NET.Vulkan.Loader.Native.csproj", "{36C38837-8250-42F9-ABDA-DEFC1AB129E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.SwiftShader.Native", "src\Native\Silk.NET.Vulkan.SwiftShader.Native\Silk.NET.Vulkan.SwiftShader.Native.csproj", "{54F439B6-36E4-4FB0-8731-F73D42AD921F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.COREAVI", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.COREAVI\Silk.NET.Vulkan.Extensions.COREAVI.csproj", "{88142694-C095-4F56-B11D-9C8FC5EFC529}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonAsciiWindow", "src\Lab\Experiments\NonAsciiWindow\NonAsciiWindow.csproj", "{2517B906-4B93-4B5F-8D18-AFB2BAB26121}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGLES.Extensions.ImGui", "src\OpenGL\Extensions\Silk.NET.OpenGLES.Extensions.ImGui\Silk.NET.OpenGLES.Extensions.ImGui.csproj", "{62513482-8713-4568-9086-247FE554B4E4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenGL.Legacy.Extensions.ImGui", "src\OpenGL\Extensions\Silk.NET.OpenGL.Legacy.Extensions.ImGui\Silk.NET.OpenGL.Legacy.Extensions.ImGui.csproj", "{6E79F43A-D9EE-401B-8CAE-0635382F975F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Vulkan.Extensions.SEC", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.SEC\Silk.NET.Vulkan.Extensions.SEC.csproj", "{22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.DirectStorage.Native", "src\Native\Silk.NET.DirectStorage.Native\Silk.NET.DirectStorage.Native.csproj", "{100C6D6A-F8B9-4E41-B82C-F665C3BD2160}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.DirectStorage", "src\Microsoft\Silk.NET.DirectStorage\Silk.NET.DirectStorage.csproj", "{950FCED7-5720-4855-ACA3-B0EAB246F669}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.OpenXR.Extensions.QCOM", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.QCOM\Silk.NET.OpenXR.Extensions.QCOM.csproj", "{1F9D7264-DA42-4351-AE08-6ABB7597B8E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.Direct2D", "src\Microsoft\Silk.NET.Direct2D\Silk.NET.Direct2D.csproj", "{322DAAC0-567A-43C9-BFE1-D3C92B5573DB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct3D11 Tutorials", "Direct3D11 Tutorials", "{5CED5BE9-5348-4AFD-AF34-147F81F8C9C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 1.2 - Hello quad", "examples\CSharp\Direct3D11 Tutorials\Tutorial 1.2 - Hello quad\Tutorial 1.2 - Hello quad.csproj", "{F86248D7-5012-4820-ADBE-BCE8B701581D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebGPUTest", "src\Lab\Experiments\WebGPUTest\WebGPUTest.csproj", "{534FCB74-0E82-42AF-AF94-48EE634F37A8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebGPU", "WebGPU", "{AA6EDF22-8128-476C-97E0-0CEA4689624E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.WebGPU", "src\WebGPU\Silk.NET.WebGPU\Silk.NET.WebGPU.csproj", "{3FA488D6-239F-4509-A7F9-5CFE6B2517CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{D218E3C8-44C7-472F-B147-3C9DA8B0C2EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.WebGPU.Extensions.WGPU", "src\WebGPU\Extensions\Silk.NET.WebGPU.Extensions.WGPU\Silk.NET.WebGPU.Extensions.WGPU.csproj", "{C66E285B-4DED-46FD-95A9-7B376C680412}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebGPUTriangle", "src\Lab\Experiments\WebGPUTriangle\WebGPUTriangle.csproj", "{1F16CA6E-9A7E-452E-BE37-1201E506B661}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.WebGPU.Extensions.Dawn", "src\WebGPU\Extensions\Silk.NET.WebGPU.Extensions.Dawn\Silk.NET.WebGPU.Extensions.Dawn.csproj", "{3DADBCD8-5C5E-487C-8616-55A56BC351EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.WebGPU.Extensions.Disposal", "src\WebGPU\Extensions\Silk.NET.WebGPU.Extensions.Disposal\Silk.NET.WebGPU.Extensions.Disposal.csproj", "{1314FEAF-71F7-42A8-881F-091384CE601B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebGPUTexturedQuad", "src\Lab\Experiments\WebGPUTexturedQuad\WebGPUTexturedQuad.csproj", "{5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tutorial 4.1 - Model Loading", "examples\CSharp\OpenGL Tutorials\Tutorial 4.1 - Model Loading\Tutorial 4.1 - Model Loading.csproj", "{7C91F372-8716-42F6-BB5A-6C94B7FC0513}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL", "src\OpenGL\Silk.NET.WGL\Silk.NET.WGL.csproj", "{456D740A-3612-4CFB-BB5B-AF7E88EFBA26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.AMD", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.AMD\Silk.NET.WGL.Extensions.AMD.csproj", "{B6A87FA1-0A71-434E-A808-C93072584E6D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.ARB", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.ARB\Silk.NET.WGL.Extensions.ARB.csproj", "{1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.ATI", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.ATI\Silk.NET.WGL.Extensions.ATI.csproj", "{33EA7CFE-836C-435B-B0D7-309F0759BDF0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.EXT", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.EXT\Silk.NET.WGL.Extensions.EXT.csproj", "{298B2915-B46F-4A29-AF9E-480C3B39012A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.I3D", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.I3D\Silk.NET.WGL.Extensions.I3D.csproj", "{A87647D1-A388-42EC-9545-3F46F3C4BAE5}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A5578D12-9E77-4647-8C22-0DBD17760BFF}" + ProjectSection(SolutionItems) = preProject + tests\Directory.Build.props = tests\Directory.Build.props + tests\Directory.Build.targets = tests\Directory.Build.targets + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.NV", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.NV\Silk.NET.WGL.Extensions.NV.csproj", "{4CAE308D-FB8B-432B-9399-B567DC2A5C73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SilkTouch", "sources\SilkTouch\SilkTouch\Silk.NET.SilkTouch.csproj", "{76F747A6-D971-4162-BF35-A226177FCA08}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.OML", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.OML\Silk.NET.WGL.Extensions.OML.csproj", "{C207E481-A5B4-4092-ADC2-14A93443152B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Silk.NET.SilkTouch.UnitTests", "tests\SilkTouch\SilkTouch\Silk.NET.SilkTouch.UnitTests.csproj", "{600D712C-4ABF-44C4-96C3-B1DEE1F38298}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.WGL3DFX", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.WGL3DFX\Silk.NET.WGL.Extensions.WGL3DFX.csproj", "{B97931ED-286D-4E5C-A75A-DF9B49F64C8F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{475AEF7B-0154-4989-AF82-97E3A95A96AF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WGL.Extensions.WGL3DL", "src\OpenGL\Extensions\Silk.NET.WGL.Extensions.WGL3DL\Silk.NET.WGL.Extensions.WGL3DL.csproj", "{3E87F04E-EE44-4348-B9BA-26AE2A5418D5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Core", "sources\Core\Core\Silk.NET.Core.csproj", "{131C09C1-BF4D-47C1-AF13-4A7E30866B1E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.META", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.META\Silk.NET.OpenXR.Extensions.META.csproj", "{73A4E694-E416-4BAC-9C17-87B7E5F602FA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Playground", "sources\Playground\Playground.csproj", "{48F43535-3AFC-45E7-A98D-C2609B3B9757}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.BYTEDANCE", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.BYTEDANCE\Silk.NET.OpenXR.Extensions.BYTEDANCE.csproj", "{A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Core.UnitTests", "tests\Core\Core\Silk.NET.Core.UnitTests.csproj", "{A87E1861-07E4-4B7A-9173-0853370A7D4E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.DANWILLM", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.DANWILLM\Silk.NET.OpenXR.Extensions.DANWILLM.csproj", "{CF943055-E40D-4AF2-8FD2-C2E5849D11EB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Maths", "sources\Maths\Maths\Silk.NET.Maths.csproj", "{1B21D783-71C3-48D3-91F5-0EEA90FB0DB2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Vulkan.Extensions.LUNARG", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.LUNARG\Silk.NET.Vulkan.Extensions.LUNARG.csproj", "{FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Maths.Tests", "tests\Maths\Maths\Silk.NET.Maths.Tests.csproj", "{01683C11-4721-43AB-B53C-15EBE935B48F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{58FECE86-7530-4E6F-BA61-512BE44DEA83}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{B681E21A-47A2-4635-96EE-60D8D63FBEA9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Direct3D11.Extensions.D3D11On12", "src\Microsoft\Extensions\Silk.NET.Direct3D11.Extensions.D3D11On12\Silk.NET.Direct3D11.Extensions.D3D11On12.csproj", "{82626916-C5F3-46E7-B0EC-1D38191450C7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Maths.Benchmarks", "eng\benchmarks\Silk.NET.Maths.Benchmarks\Silk.NET.Maths.Benchmarks.csproj", "{AF6C70ED-D6A8-4C57-8DB3-EAFF94396049}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.DirectComposition", "src\Microsoft\Silk.NET.DirectComposition\Silk.NET.DirectComposition.csproj", "{8773396C-5EDF-498C-97D7-1D2728CB969B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenGL", "sources\OpenGL\OpenGL\Silk.NET.OpenGL.csproj", "{9625C977-25BE-48F3-9B6F-BC94B8B799A6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.WebGPU.Native.WGPU", "src\Native\Silk.NET.WebGPU.Native.WGPU\Silk.NET.WebGPU.Native.WGPU.csproj", "{4031A5EB-820B-478D-A656-85C93210054E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SDL", "sources\SDL\SDL\Silk.NET.SDL.csproj", "{19B05730-F97E-43D4-B922-DF4697E5CE5F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.DXVK.Native", "src\Native\Silk.NET.DXVK.Native\Silk.NET.DXVK.Native.csproj", "{79680317-F985-4727-81D3-8BF2228AEC20}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SDL.UnitTests", "tests\SDL\SDL\Silk.NET.SDL.UnitTests.csproj", "{D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Vkd3d.Native", "src\Native\Silk.NET.Vkd3d.Native\Silk.NET.Vkd3d.Native.csproj", "{5DB2BB47-77D3-4EB7-8037-64D88FDE4785}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{5CD096DB-6C44-48F1-9093-AD4C84B6B7EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.ACER", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.ACER\Silk.NET.OpenXR.Extensions.ACER.csproj", "{02D462BA-B585-4B47-9FFC-65AFF0BF0F80}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maths", "Maths", "{2452CED9-5211-4A19-BA44-230EC28F409E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.BD", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.BD\Silk.NET.OpenXR.Extensions.BD.csproj", "{E1624E31-C702-42EC-AC47-20358B3CCF49}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenGL", "OpenGL", "{FA31E483-AD35-4E44-B10A-B33C4539DBCB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.LOGITECH", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.LOGITECH\Silk.NET.OpenXR.Extensions.LOGITECH.csproj", "{82D76E01-3166-4549-A433-4C2C4FD6788E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SilkTouch", "SilkTouch", "{24BD769C-7379-400C-A67F-00C34756DA32}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.OPPO", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.OPPO\Silk.NET.OpenXR.Extensions.OPPO.csproj", "{ABC4717F-2863-4B79-8812-7C1D851EE336}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDL", "SDL", "{EC4D7B06-D277-4411-BD7B-71A6D37683F0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV.Reflect.Native", "src\Native\Silk.NET.SPIRV.Reflect.Native\Silk.NET.SPIRV.Reflect.Native.csproj", "{F58B1280-668E-4B4A-ADA5-6F0F54B6295A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{D9ACA4E5-712F-4F15-B8B8-50C85D23D1D5}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPIRV", "SPIRV", "{15FC3D1A-25D7-446B-87A7-B45BA3C2225F}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maths", "Maths", "{FCD75AA5-1536-433E-BA9B-3D698C2255EB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV.Reflect", "src\SPIRV\Silk.NET.SPIRV.Reflect\Silk.NET.SPIRV.Reflect.csproj", "{535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDL", "SDL", "{49D426BF-A009-43D5-A9E2-EFAAAA7196FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV", "src\SPIRV\Silk.NET.SPIRV\Silk.NET.SPIRV.csproj", "{65E895B6-D0A6-4C5C-A090-07C7590F48B9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SilkTouch", "SilkTouch", "{AB25C482-DA9D-4335-8E26-2F29C3700152}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV.Reflect.Tests", "src\SPIRV\Silk.NET.SPIRV.Reflect.Tests\Silk.NET.SPIRV.Reflect.Tests.csproj", "{7DB60101-9D99-4FD6-89AD-29648F537333}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.NUKE", "eng\build\Silk.NET.NUKE.csproj", "{3CADD95A-179F-4ECF-A49D-4B753832C63C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Vulkan.Extensions.MSFT", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.MSFT\Silk.NET.Vulkan.Extensions.MSFT.csproj", "{22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET", "sources\Core\Silk.NET\Silk.NET.csproj", "{6FA628B8-9696-4847-89F9-E58F470AF4FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV.Cross", "src\SPIRV\Silk.NET.SPIRV.Cross\Silk.NET.SPIRV.Cross.csproj", "{AFF43F5B-46EC-4560-8E92-6D241C0D9F43}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Win32", "Win32", "{6E739132-EEAB-43A5-83C7-EB58C50D03A1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SPIRV.Cross.Native", "src\Native\Silk.NET.SPIRV.Cross.Native\Silk.NET.SPIRV.Cross.Native.csproj", "{EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.SDL.Native", "sources\SDL\Native\Silk.NET.SDL.Native.csproj", "{F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial 1.3 - Textures", "examples\CSharp\OpenGL Tutorials\Tutorial 1.3 - Textures\Tutorial 1.3 - Textures.csproj", "{1E7C6166-58B2-46B3-A9BA-18099BD83AF0}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windowing", "Windowing", "{FE4414F8-5370-445D-9F24-C3AD3223F299}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Shaderc", "src\SPIRV\Silk.NET.Shaderc\Silk.NET.Shaderc.csproj", "{E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Windowing", "sources\Windowing\Windowing\Silk.NET.Windowing.csproj", "{EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Shaderc.Native", "src\Native\Silk.NET.Shaderc.Native\Silk.NET.Shaderc.Native.csproj", "{D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vulkan", "Vulkan", "{5E20252F-E2A0-46C9-BBEF-4CE5C96D0E07}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.MoltenVK.Native", "src\Native\Silk.NET.MoltenVK.Native\Silk.NET.MoltenVK.Native.csproj", "{32BE0963-C372-4BCA-A7C2-3CA844FDBB78}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Vulkan", "sources\Vulkan\Vulkan\Silk.NET.Vulkan.csproj", "{E5E8FFBF-1319-4D33-B084-E732656E8A04}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.ANDROID", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.ANDROID\Silk.NET.OpenXR.Extensions.ANDROID.csproj", "{D35926CB-6F79-4B5A-A3D8-F60D660D55EB}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenAL", "OpenAL", "{AF13F7C9-4EE2-403E-B3D2-C4C2E45D9EF3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.YVR", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.YVR\Silk.NET.OpenXR.Extensions.YVR.csproj", "{91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenAL", "sources\OpenAL\OpenAL\Silk.NET.OpenAL.csproj", "{1FFFDD72-D023-441C-AF49-F1EA78FF7DE9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.Vulkan.Extensions.AMDX", "src\Vulkan\Extensions\Silk.NET.Vulkan.Extensions.AMDX\Silk.NET.Vulkan.Extensions.AMDX.csproj", "{A0E20061-FFF6-4444-86E0-4519A0CA6944}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{6077EDD4-F16F-4CA4-B72E-E4627D64B104}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenCL Demos", "OpenCL Demos", "{FD0C9C4B-3777-4755-A87B-60FE65D92750}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{12B4D1CB-8938-4EC4-8895-79C4E6ABD1E8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "examples\CSharp\OpenCL Demos\HelloWorld\HelloWorld.csproj", "{9CB90BB8-946F-4962-9365-A97BF5C6550A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenAL", "OpenAL", "{662A1AEC-91F2-48FA-AA29-6F27038D30F2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Silk.NET.OpenXR.Extensions.NV", "src\OpenXR\Extensions\Silk.NET.OpenXR.Extensions.NV\Silk.NET.OpenXR.Extensions.NV.csproj", "{34D35A41-E974-40C9-8888-3510A0F074AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial001.HelloSound", "examples\CSharp\OpenAL\Tutorial001.HelloSound\Tutorial001.HelloSound.csproj", "{946C912C-5BBB-446A-A566-0D1696D19F59}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|x64.ActiveCfg = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|x64.Build.0 = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|x86.ActiveCfg = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Debug|x86.Build.0 = Debug|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|Any CPU.Build.0 = Release|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|x64.ActiveCfg = Release|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|x64.Build.0 = Release|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|x86.ActiveCfg = Release|Any CPU - {FD24E9FF-1097-4777-A418-F2D88C558665}.Release|x86.Build.0 = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|x64.Build.0 = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Debug|x86.Build.0 = Debug|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|Any CPU.Build.0 = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|x64.ActiveCfg = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|x64.Build.0 = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|x86.ActiveCfg = Release|Any CPU - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7}.Release|x86.Build.0 = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|x64.ActiveCfg = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|x64.Build.0 = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|x86.ActiveCfg = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Debug|x86.Build.0 = Debug|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|Any CPU.Build.0 = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|x64.ActiveCfg = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|x64.Build.0 = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|x86.ActiveCfg = Release|Any CPU - {136C6154-D300-4B82-80D3-17B637841A2B}.Release|x86.Build.0 = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|x64.ActiveCfg = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|x64.Build.0 = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Debug|x86.Build.0 = Debug|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|Any CPU.Build.0 = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|x64.ActiveCfg = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|x64.Build.0 = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|x86.ActiveCfg = Release|Any CPU - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA}.Release|x86.Build.0 = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|x64.ActiveCfg = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|x64.Build.0 = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|x86.ActiveCfg = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Debug|x86.Build.0 = Debug|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|Any CPU.Build.0 = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|x64.ActiveCfg = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|x64.Build.0 = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|x86.ActiveCfg = Release|Any CPU - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0}.Release|x86.Build.0 = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|x64.ActiveCfg = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|x64.Build.0 = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|x86.ActiveCfg = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Debug|x86.Build.0 = Debug|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|Any CPU.Build.0 = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|x64.ActiveCfg = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|x64.Build.0 = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|x86.ActiveCfg = Release|Any CPU - {5A41E9D5-67F5-447C-8AE2-78FED7A45206}.Release|x86.Build.0 = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|x64.ActiveCfg = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|x64.Build.0 = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|x86.ActiveCfg = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Debug|x86.Build.0 = Debug|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|Any CPU.Build.0 = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|x64.ActiveCfg = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|x64.Build.0 = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|x86.ActiveCfg = Release|Any CPU - {FC015604-3326-4BCC-9212-C5CB0DFB0D12}.Release|x86.Build.0 = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|x64.ActiveCfg = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|x64.Build.0 = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|x86.ActiveCfg = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Debug|x86.Build.0 = Debug|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|Any CPU.Build.0 = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|x64.ActiveCfg = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|x64.Build.0 = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|x86.ActiveCfg = Release|Any CPU - {66F172D3-4AE5-4C6E-A035-0E0AE962F555}.Release|x86.Build.0 = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|x64.ActiveCfg = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|x64.Build.0 = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|x86.ActiveCfg = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Debug|x86.Build.0 = Debug|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|Any CPU.Build.0 = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|x64.ActiveCfg = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|x64.Build.0 = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|x86.ActiveCfg = Release|Any CPU - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D}.Release|x86.Build.0 = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|x64.ActiveCfg = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|x64.Build.0 = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|x86.ActiveCfg = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Debug|x86.Build.0 = Debug|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|Any CPU.Build.0 = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|x64.ActiveCfg = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|x64.Build.0 = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|x86.ActiveCfg = Release|Any CPU - {94D7D3A3-3640-4791-BE19-CA50C59187C6}.Release|x86.Build.0 = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|x64.Build.0 = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Debug|x86.Build.0 = Debug|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|Any CPU.Build.0 = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|x64.ActiveCfg = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|x64.Build.0 = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|x86.ActiveCfg = Release|Any CPU - {8FFF49D6-B029-400B-8510-1A088868DFA6}.Release|x86.Build.0 = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|x64.ActiveCfg = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|x64.Build.0 = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|x86.ActiveCfg = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Debug|x86.Build.0 = Debug|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|Any CPU.Build.0 = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|x64.ActiveCfg = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|x64.Build.0 = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|x86.ActiveCfg = Release|Any CPU - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7}.Release|x86.Build.0 = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|x64.ActiveCfg = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|x64.Build.0 = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|x86.ActiveCfg = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Debug|x86.Build.0 = Debug|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|Any CPU.Build.0 = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|x64.ActiveCfg = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|x64.Build.0 = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|x86.ActiveCfg = Release|Any CPU - {446DD80A-CAF4-4E19-B87E-A43135E2D59D}.Release|x86.Build.0 = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|x64.ActiveCfg = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|x64.Build.0 = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|x86.ActiveCfg = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Debug|x86.Build.0 = Debug|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|Any CPU.ActiveCfg = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|Any CPU.Build.0 = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|x64.ActiveCfg = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|x64.Build.0 = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|x86.ActiveCfg = Release|Any CPU - {24CE7080-FF44-46BF-886F-456F30E54442}.Release|x86.Build.0 = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|x64.Build.0 = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Debug|x86.Build.0 = Debug|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|Any CPU.Build.0 = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|x64.ActiveCfg = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|x64.Build.0 = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|x86.ActiveCfg = Release|Any CPU - {F49FCBFD-2041-4936-89CF-095C77555CEC}.Release|x86.Build.0 = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|x64.ActiveCfg = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|x64.Build.0 = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|x86.ActiveCfg = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Debug|x86.Build.0 = Debug|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|Any CPU.Build.0 = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|x64.ActiveCfg = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|x64.Build.0 = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|x86.ActiveCfg = Release|Any CPU - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83}.Release|x86.Build.0 = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|x64.ActiveCfg = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|x64.Build.0 = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|x86.ActiveCfg = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Debug|x86.Build.0 = Debug|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|Any CPU.Build.0 = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|x64.ActiveCfg = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|x64.Build.0 = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|x86.ActiveCfg = Release|Any CPU - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1}.Release|x86.Build.0 = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|x64.ActiveCfg = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|x64.Build.0 = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|x86.ActiveCfg = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Debug|x86.Build.0 = Debug|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|Any CPU.Build.0 = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|x64.ActiveCfg = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|x64.Build.0 = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|x86.ActiveCfg = Release|Any CPU - {28155265-C538-4D63-A9A4-2A225115BCC3}.Release|x86.Build.0 = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|x64.ActiveCfg = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|x64.Build.0 = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|x86.ActiveCfg = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Debug|x86.Build.0 = Debug|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|Any CPU.Build.0 = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|x64.ActiveCfg = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|x64.Build.0 = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|x86.ActiveCfg = Release|Any CPU - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41}.Release|x86.Build.0 = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|x64.ActiveCfg = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|x64.Build.0 = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|x86.ActiveCfg = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Debug|x86.Build.0 = Debug|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|Any CPU.Build.0 = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|x64.ActiveCfg = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|x64.Build.0 = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|x86.ActiveCfg = Release|Any CPU - {224CB2E1-3923-4BA6-A202-DA290E55725A}.Release|x86.Build.0 = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|x64.ActiveCfg = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|x64.Build.0 = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|x86.ActiveCfg = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Debug|x86.Build.0 = Debug|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|Any CPU.Build.0 = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|x64.ActiveCfg = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|x64.Build.0 = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|x86.ActiveCfg = Release|Any CPU - {063B37FE-87A0-41BA-A61A-6870D4AEB76F}.Release|x86.Build.0 = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|x64.ActiveCfg = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|x64.Build.0 = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|x86.ActiveCfg = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Debug|x86.Build.0 = Debug|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|Any CPU.Build.0 = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|x64.ActiveCfg = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|x64.Build.0 = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|x86.ActiveCfg = Release|Any CPU - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F}.Release|x86.Build.0 = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|x64.ActiveCfg = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|x64.Build.0 = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|x86.ActiveCfg = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Debug|x86.Build.0 = Debug|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|Any CPU.Build.0 = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|x64.ActiveCfg = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|x64.Build.0 = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|x86.ActiveCfg = Release|Any CPU - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3}.Release|x86.Build.0 = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|x64.ActiveCfg = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|x64.Build.0 = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Debug|x86.Build.0 = Debug|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|Any CPU.Build.0 = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|x64.ActiveCfg = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|x64.Build.0 = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|x86.ActiveCfg = Release|Any CPU - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34}.Release|x86.Build.0 = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|x64.ActiveCfg = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|x64.Build.0 = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|x86.ActiveCfg = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Debug|x86.Build.0 = Debug|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|Any CPU.Build.0 = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|x64.ActiveCfg = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|x64.Build.0 = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|x86.ActiveCfg = Release|Any CPU - {ADFB4E80-301E-416F-B932-86FF242F5BBA}.Release|x86.Build.0 = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|x64.Build.0 = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Debug|x86.Build.0 = Debug|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|Any CPU.Build.0 = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|x64.ActiveCfg = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|x64.Build.0 = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|x86.ActiveCfg = Release|Any CPU - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18}.Release|x86.Build.0 = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|x64.ActiveCfg = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|x64.Build.0 = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|x86.ActiveCfg = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Debug|x86.Build.0 = Debug|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|Any CPU.Build.0 = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|x64.ActiveCfg = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|x64.Build.0 = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|x86.ActiveCfg = Release|Any CPU - {C02D75ED-33EE-46D5-9AF1-A54E01206161}.Release|x86.Build.0 = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|x64.ActiveCfg = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|x64.Build.0 = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Debug|x86.Build.0 = Debug|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|Any CPU.Build.0 = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|x64.ActiveCfg = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|x64.Build.0 = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|x86.ActiveCfg = Release|Any CPU - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E}.Release|x86.Build.0 = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|x64.ActiveCfg = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|x64.Build.0 = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|x86.ActiveCfg = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Debug|x86.Build.0 = Debug|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|Any CPU.Build.0 = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|x64.ActiveCfg = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|x64.Build.0 = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|x86.ActiveCfg = Release|Any CPU - {33C55873-FF79-4822-BDC5-CBFBCF78C12A}.Release|x86.Build.0 = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|x64.ActiveCfg = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|x64.Build.0 = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|x86.ActiveCfg = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Debug|x86.Build.0 = Debug|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|Any CPU.Build.0 = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|x64.ActiveCfg = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|x64.Build.0 = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|x86.ActiveCfg = Release|Any CPU - {C3931003-EC0A-41D6-A481-8D3CD28556F4}.Release|x86.Build.0 = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|x64.ActiveCfg = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|x64.Build.0 = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|x86.ActiveCfg = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Debug|x86.Build.0 = Debug|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|Any CPU.Build.0 = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|x64.ActiveCfg = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|x64.Build.0 = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|x86.ActiveCfg = Release|Any CPU - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136}.Release|x86.Build.0 = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|x64.ActiveCfg = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|x64.Build.0 = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|x86.ActiveCfg = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Debug|x86.Build.0 = Debug|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|Any CPU.Build.0 = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|x64.ActiveCfg = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|x64.Build.0 = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|x86.ActiveCfg = Release|Any CPU - {7FB49D81-CE37-47D8-B62D-5954F72DE052}.Release|x86.Build.0 = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|x64.ActiveCfg = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|x64.Build.0 = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|x86.ActiveCfg = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Debug|x86.Build.0 = Debug|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|Any CPU.Build.0 = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|x64.ActiveCfg = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|x64.Build.0 = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|x86.ActiveCfg = Release|Any CPU - {6CCD4C39-C953-4281-8135-1316B1A68248}.Release|x86.Build.0 = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|x64.ActiveCfg = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|x64.Build.0 = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|x86.ActiveCfg = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Debug|x86.Build.0 = Debug|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|Any CPU.Build.0 = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|x64.ActiveCfg = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|x64.Build.0 = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|x86.ActiveCfg = Release|Any CPU - {E9754021-FBDD-460C-B966-B41019E3EF98}.Release|x86.Build.0 = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|x64.ActiveCfg = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|x64.Build.0 = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Debug|x86.Build.0 = Debug|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|Any CPU.Build.0 = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|x64.ActiveCfg = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|x64.Build.0 = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|x86.ActiveCfg = Release|Any CPU - {7483030B-2CA2-4B60-9188-6BA5633EFBF1}.Release|x86.Build.0 = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|x64.ActiveCfg = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|x64.Build.0 = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|x86.ActiveCfg = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Debug|x86.Build.0 = Debug|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|Any CPU.Build.0 = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|x64.ActiveCfg = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|x64.Build.0 = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|x86.ActiveCfg = Release|Any CPU - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890}.Release|x86.Build.0 = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|x64.ActiveCfg = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|x64.Build.0 = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|x86.ActiveCfg = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Debug|x86.Build.0 = Debug|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|Any CPU.Build.0 = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|x64.ActiveCfg = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|x64.Build.0 = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|x86.ActiveCfg = Release|Any CPU - {3AE416D7-C523-415B-A3AF-B790A1B5C05F}.Release|x86.Build.0 = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|x64.ActiveCfg = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|x64.Build.0 = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|x86.ActiveCfg = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Debug|x86.Build.0 = Debug|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|Any CPU.Build.0 = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|x64.ActiveCfg = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|x64.Build.0 = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|x86.ActiveCfg = Release|Any CPU - {75DC2611-F3A9-4C17-A647-454097698434}.Release|x86.Build.0 = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|x64.ActiveCfg = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|x64.Build.0 = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|x86.ActiveCfg = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Debug|x86.Build.0 = Debug|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|x64.ActiveCfg = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|x64.Build.0 = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|x86.ActiveCfg = Release|Any CPU - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8}.Release|x86.Build.0 = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|x64.ActiveCfg = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|x64.Build.0 = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|x86.ActiveCfg = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Debug|x86.Build.0 = Debug|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|Any CPU.Build.0 = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|x64.ActiveCfg = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|x64.Build.0 = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|x86.ActiveCfg = Release|Any CPU - {7BB402A0-274C-4476-A9F9-884045F30376}.Release|x86.Build.0 = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|x64.ActiveCfg = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|x64.Build.0 = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Debug|x86.Build.0 = Debug|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|Any CPU.Build.0 = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|x64.ActiveCfg = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|x64.Build.0 = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|x86.ActiveCfg = Release|Any CPU - {2A3247AB-750D-48E6-9B99-A876397404D6}.Release|x86.Build.0 = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|x64.ActiveCfg = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|x64.Build.0 = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|x86.ActiveCfg = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Debug|x86.Build.0 = Debug|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|Any CPU.Build.0 = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|x64.ActiveCfg = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|x64.Build.0 = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|x86.ActiveCfg = Release|Any CPU - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1}.Release|x86.Build.0 = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|x64.ActiveCfg = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|x64.Build.0 = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|x86.ActiveCfg = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Debug|x86.Build.0 = Debug|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|Any CPU.Build.0 = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|x64.ActiveCfg = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|x64.Build.0 = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|x86.ActiveCfg = Release|Any CPU - {4451DE2E-B803-46E2-A911-C4FF5B183FD4}.Release|x86.Build.0 = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|x64.Build.0 = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Debug|x86.Build.0 = Debug|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|Any CPU.Build.0 = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|x64.ActiveCfg = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|x64.Build.0 = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|x86.ActiveCfg = Release|Any CPU - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1}.Release|x86.Build.0 = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|x64.ActiveCfg = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|x64.Build.0 = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|x86.ActiveCfg = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Debug|x86.Build.0 = Debug|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|Any CPU.Build.0 = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|x64.ActiveCfg = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|x64.Build.0 = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|x86.ActiveCfg = Release|Any CPU - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74}.Release|x86.Build.0 = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|x64.ActiveCfg = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|x64.Build.0 = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|x86.ActiveCfg = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Debug|x86.Build.0 = Debug|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|Any CPU.Build.0 = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|x64.ActiveCfg = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|x64.Build.0 = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|x86.ActiveCfg = Release|Any CPU - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A}.Release|x86.Build.0 = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|x64.ActiveCfg = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|x64.Build.0 = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|x86.ActiveCfg = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Debug|x86.Build.0 = Debug|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|Any CPU.Build.0 = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|x64.ActiveCfg = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|x64.Build.0 = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|x86.ActiveCfg = Release|Any CPU - {C0066476-7E6C-47B0-B6AD-87669FF643D1}.Release|x86.Build.0 = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|x64.Build.0 = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Debug|x86.Build.0 = Debug|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|Any CPU.Build.0 = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|x64.ActiveCfg = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|x64.Build.0 = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|x86.ActiveCfg = Release|Any CPU - {F1632267-F122-4F27-BDD9-501C8D087DF2}.Release|x86.Build.0 = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|x64.ActiveCfg = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|x64.Build.0 = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|x86.ActiveCfg = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Debug|x86.Build.0 = Debug|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|Any CPU.Build.0 = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|x64.ActiveCfg = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|x64.Build.0 = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|x86.ActiveCfg = Release|Any CPU - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5}.Release|x86.Build.0 = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|x64.Build.0 = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Debug|x86.Build.0 = Debug|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|Any CPU.Build.0 = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|x64.ActiveCfg = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|x64.Build.0 = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|x86.ActiveCfg = Release|Any CPU - {B56BD145-5D19-4049-9700-CA1F024CE8A8}.Release|x86.Build.0 = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|x64.ActiveCfg = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|x64.Build.0 = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|x86.ActiveCfg = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Debug|x86.Build.0 = Debug|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|Any CPU.Build.0 = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|x64.ActiveCfg = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|x64.Build.0 = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|x86.ActiveCfg = Release|Any CPU - {F7181088-183E-4267-B13D-59A8EE90FAD1}.Release|x86.Build.0 = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|x64.ActiveCfg = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|x64.Build.0 = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|x86.ActiveCfg = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Debug|x86.Build.0 = Debug|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|Any CPU.Build.0 = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|x64.ActiveCfg = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|x64.Build.0 = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|x86.ActiveCfg = Release|Any CPU - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4}.Release|x86.Build.0 = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|x64.ActiveCfg = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|x64.Build.0 = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|x86.ActiveCfg = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Debug|x86.Build.0 = Debug|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|Any CPU.Build.0 = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|x64.ActiveCfg = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|x64.Build.0 = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|x86.ActiveCfg = Release|Any CPU - {5B084D8A-795F-4641-B89D-823A369AB84C}.Release|x86.Build.0 = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|x64.ActiveCfg = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|x64.Build.0 = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|x86.ActiveCfg = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Debug|x86.Build.0 = Debug|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|Any CPU.Build.0 = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|x64.ActiveCfg = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|x64.Build.0 = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|x86.ActiveCfg = Release|Any CPU - {DB5446E8-3884-4C77-8E17-F5C67584C514}.Release|x86.Build.0 = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|x64.Build.0 = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Debug|x86.Build.0 = Debug|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|Any CPU.Build.0 = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|x64.ActiveCfg = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|x64.Build.0 = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|x86.ActiveCfg = Release|Any CPU - {5AC8140B-D9C2-4317-948D-A447B846493A}.Release|x86.Build.0 = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|x64.ActiveCfg = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|x64.Build.0 = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|x86.ActiveCfg = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Debug|x86.Build.0 = Debug|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|Any CPU.Build.0 = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|x64.ActiveCfg = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|x64.Build.0 = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|x86.ActiveCfg = Release|Any CPU - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1}.Release|x86.Build.0 = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|x64.Build.0 = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Debug|x86.Build.0 = Debug|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|Any CPU.Build.0 = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|x64.ActiveCfg = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|x64.Build.0 = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|x86.ActiveCfg = Release|Any CPU - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70}.Release|x86.Build.0 = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|x64.ActiveCfg = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|x64.Build.0 = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|x86.ActiveCfg = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Debug|x86.Build.0 = Debug|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|Any CPU.Build.0 = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|x64.ActiveCfg = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|x64.Build.0 = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|x86.ActiveCfg = Release|Any CPU - {E247B4A2-5EB3-451B-8D24-06DB83023B85}.Release|x86.Build.0 = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|x64.ActiveCfg = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|x64.Build.0 = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|x86.ActiveCfg = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Debug|x86.Build.0 = Debug|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|Any CPU.Build.0 = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|x64.ActiveCfg = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|x64.Build.0 = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|x86.ActiveCfg = Release|Any CPU - {107CE915-3387-4A0D-A8C7-0859A0D3DF80}.Release|x86.Build.0 = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|x64.ActiveCfg = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|x64.Build.0 = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|x86.ActiveCfg = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Debug|x86.Build.0 = Debug|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|Any CPU.Build.0 = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|x64.ActiveCfg = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|x64.Build.0 = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|x86.ActiveCfg = Release|Any CPU - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7}.Release|x86.Build.0 = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|x64.ActiveCfg = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|x64.Build.0 = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|x86.ActiveCfg = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Debug|x86.Build.0 = Debug|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|Any CPU.Build.0 = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|x64.ActiveCfg = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|x64.Build.0 = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|x86.ActiveCfg = Release|Any CPU - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84}.Release|x86.Build.0 = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|x64.ActiveCfg = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|x64.Build.0 = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|x86.ActiveCfg = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Debug|x86.Build.0 = Debug|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|Any CPU.Build.0 = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|x64.ActiveCfg = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|x64.Build.0 = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|x86.ActiveCfg = Release|Any CPU - {4F8FAA99-0491-4857-9252-685BF3B46AAB}.Release|x86.Build.0 = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|x64.ActiveCfg = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|x64.Build.0 = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Debug|x86.Build.0 = Debug|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|Any CPU.Build.0 = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|x64.ActiveCfg = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|x64.Build.0 = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|x86.ActiveCfg = Release|Any CPU - {7E00824E-34C5-4162-AA26-86F84A4FBA42}.Release|x86.Build.0 = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|x64.ActiveCfg = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|x64.Build.0 = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|x86.ActiveCfg = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Debug|x86.Build.0 = Debug|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|Any CPU.Build.0 = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|x64.ActiveCfg = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|x64.Build.0 = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|x86.ActiveCfg = Release|Any CPU - {1D221A69-EE04-476A-B660-32DFDB2DC162}.Release|x86.Build.0 = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|x64.ActiveCfg = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|x64.Build.0 = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|x86.ActiveCfg = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Debug|x86.Build.0 = Debug|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|Any CPU.Build.0 = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|x64.ActiveCfg = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|x64.Build.0 = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|x86.ActiveCfg = Release|Any CPU - {3BC72F4A-8B32-490A-9EA7-B68320991E15}.Release|x86.Build.0 = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|x64.Build.0 = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Debug|x86.Build.0 = Debug|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|Any CPU.Build.0 = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|x64.ActiveCfg = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|x64.Build.0 = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|x86.ActiveCfg = Release|Any CPU - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034}.Release|x86.Build.0 = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|x64.Build.0 = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Debug|x86.Build.0 = Debug|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|Any CPU.Build.0 = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|x64.ActiveCfg = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|x64.Build.0 = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|x86.ActiveCfg = Release|Any CPU - {8D534FE1-6113-457A-97DD-FD42782580A5}.Release|x86.Build.0 = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|x64.ActiveCfg = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|x64.Build.0 = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|x86.ActiveCfg = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Debug|x86.Build.0 = Debug|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|Any CPU.Build.0 = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|x64.ActiveCfg = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|x64.Build.0 = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|x86.ActiveCfg = Release|Any CPU - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4}.Release|x86.Build.0 = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|Any CPU.Build.0 = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|x64.ActiveCfg = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|x64.Build.0 = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|x86.ActiveCfg = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Debug|x86.Build.0 = Debug|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|Any CPU.ActiveCfg = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|Any CPU.Build.0 = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|x64.ActiveCfg = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|x64.Build.0 = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|x86.ActiveCfg = Release|Any CPU - {020A8E88-B607-4281-BA0D-5ED03484A201}.Release|x86.Build.0 = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|x64.ActiveCfg = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|x64.Build.0 = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|x86.ActiveCfg = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Debug|x86.Build.0 = Debug|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|Any CPU.Build.0 = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|x64.ActiveCfg = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|x64.Build.0 = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|x86.ActiveCfg = Release|Any CPU - {7BB1DE56-DA1C-4776-A961-B810574E1EF4}.Release|x86.Build.0 = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|x64.Build.0 = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|x86.ActiveCfg = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Debug|x86.Build.0 = Debug|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|Any CPU.Build.0 = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|x64.ActiveCfg = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|x64.Build.0 = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|x86.ActiveCfg = Release|Any CPU - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642}.Release|x86.Build.0 = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|Any CPU.Build.0 = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|x64.ActiveCfg = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|x64.Build.0 = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|x86.ActiveCfg = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Debug|x86.Build.0 = Debug|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|Any CPU.ActiveCfg = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|Any CPU.Build.0 = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|x64.ActiveCfg = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|x64.Build.0 = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|x86.ActiveCfg = Release|Any CPU - {043852EA-FBD4-4F42-9CDC-92078F9EF942}.Release|x86.Build.0 = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|x64.ActiveCfg = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|x64.Build.0 = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|x86.ActiveCfg = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Debug|x86.Build.0 = Debug|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|Any CPU.Build.0 = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|x64.ActiveCfg = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|x64.Build.0 = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|x86.ActiveCfg = Release|Any CPU - {D860135C-01A2-4597-B1B2-DA4882C09798}.Release|x86.Build.0 = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|x64.ActiveCfg = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|x64.Build.0 = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|x86.ActiveCfg = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Debug|x86.Build.0 = Debug|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|Any CPU.Build.0 = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|x64.ActiveCfg = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|x64.Build.0 = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|x86.ActiveCfg = Release|Any CPU - {A82D0553-7880-462E-B8B2-1DF334DF6FBA}.Release|x86.Build.0 = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|x64.ActiveCfg = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|x64.Build.0 = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|x86.ActiveCfg = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Debug|x86.Build.0 = Debug|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|Any CPU.Build.0 = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|x64.ActiveCfg = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|x64.Build.0 = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|x86.ActiveCfg = Release|Any CPU - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613}.Release|x86.Build.0 = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|x64.ActiveCfg = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|x64.Build.0 = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|x86.ActiveCfg = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Debug|x86.Build.0 = Debug|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|Any CPU.Build.0 = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|x64.ActiveCfg = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|x64.Build.0 = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|x86.ActiveCfg = Release|Any CPU - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7}.Release|x86.Build.0 = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|x64.ActiveCfg = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|x64.Build.0 = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|x86.ActiveCfg = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Debug|x86.Build.0 = Debug|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|Any CPU.Build.0 = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|x64.ActiveCfg = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|x64.Build.0 = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|x86.ActiveCfg = Release|Any CPU - {D4514077-0917-49CC-A222-FE2988D6BECE}.Release|x86.Build.0 = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|x64.ActiveCfg = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|x64.Build.0 = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|x86.ActiveCfg = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Debug|x86.Build.0 = Debug|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|Any CPU.Build.0 = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|x64.ActiveCfg = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|x64.Build.0 = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|x86.ActiveCfg = Release|Any CPU - {70379A09-9EDB-41F7-81CF-34ABE525693D}.Release|x86.Build.0 = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|x64.ActiveCfg = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|x64.Build.0 = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|x86.ActiveCfg = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Debug|x86.Build.0 = Debug|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|Any CPU.Build.0 = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|x64.ActiveCfg = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|x64.Build.0 = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|x86.ActiveCfg = Release|Any CPU - {8180C066-71E5-4D45-8DFE-EF254FE86A30}.Release|x86.Build.0 = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|x64.ActiveCfg = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|x64.Build.0 = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|x86.ActiveCfg = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Debug|x86.Build.0 = Debug|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|Any CPU.Build.0 = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|x64.ActiveCfg = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|x64.Build.0 = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|x86.ActiveCfg = Release|Any CPU - {085677FA-4B70-430F-8675-77091EBD9ED5}.Release|x86.Build.0 = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|Any CPU.Build.0 = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|x64.ActiveCfg = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|x64.Build.0 = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|x86.ActiveCfg = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Debug|x86.Build.0 = Debug|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|Any CPU.ActiveCfg = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|Any CPU.Build.0 = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|x64.ActiveCfg = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|x64.Build.0 = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|x86.ActiveCfg = Release|Any CPU - {899DB28C-722D-46A1-9A17-378DF19FA526}.Release|x86.Build.0 = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|x64.ActiveCfg = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|x64.Build.0 = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|x86.ActiveCfg = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Debug|x86.Build.0 = Debug|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|Any CPU.Build.0 = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|x64.ActiveCfg = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|x64.Build.0 = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|x86.ActiveCfg = Release|Any CPU - {65E16908-BD7A-4FC2-BC23-FD8194039C5B}.Release|x86.Build.0 = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|x64.Build.0 = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Debug|x86.Build.0 = Debug|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|Any CPU.Build.0 = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|x64.ActiveCfg = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|x64.Build.0 = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|x86.ActiveCfg = Release|Any CPU - {3D945DE0-1E2D-439E-991D-9C65C325F82F}.Release|x86.Build.0 = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|x64.ActiveCfg = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|x64.Build.0 = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|x86.ActiveCfg = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Debug|x86.Build.0 = Debug|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|Any CPU.Build.0 = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|x64.ActiveCfg = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|x64.Build.0 = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|x86.ActiveCfg = Release|Any CPU - {D27D10F0-F22B-49B5-9933-375BB120AD70}.Release|x86.Build.0 = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|x64.ActiveCfg = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|x64.Build.0 = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|x86.ActiveCfg = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Debug|x86.Build.0 = Debug|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|Any CPU.Build.0 = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|x64.ActiveCfg = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|x64.Build.0 = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|x86.ActiveCfg = Release|Any CPU - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD}.Release|x86.Build.0 = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|x64.ActiveCfg = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|x64.Build.0 = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|x86.ActiveCfg = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Debug|x86.Build.0 = Debug|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|Any CPU.Build.0 = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|x64.ActiveCfg = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|x64.Build.0 = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|x86.ActiveCfg = Release|Any CPU - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31}.Release|x86.Build.0 = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|x64.ActiveCfg = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|x64.Build.0 = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|x86.ActiveCfg = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Debug|x86.Build.0 = Debug|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|Any CPU.Build.0 = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|x64.ActiveCfg = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|x64.Build.0 = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|x86.ActiveCfg = Release|Any CPU - {13AAF660-1E37-4C63-B2B7-49140B9F5049}.Release|x86.Build.0 = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|x64.ActiveCfg = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|x64.Build.0 = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|x86.ActiveCfg = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Debug|x86.Build.0 = Debug|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|Any CPU.Build.0 = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|x64.ActiveCfg = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|x64.Build.0 = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|x86.ActiveCfg = Release|Any CPU - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA}.Release|x86.Build.0 = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|Any CPU.Build.0 = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|x64.ActiveCfg = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|x64.Build.0 = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|x86.ActiveCfg = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Debug|x86.Build.0 = Debug|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|Any CPU.ActiveCfg = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|Any CPU.Build.0 = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|x64.ActiveCfg = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|x64.Build.0 = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|x86.ActiveCfg = Release|Any CPU - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224}.Release|x86.Build.0 = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|x64.ActiveCfg = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|x64.Build.0 = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|x86.ActiveCfg = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Debug|x86.Build.0 = Debug|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|Any CPU.Build.0 = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|x64.ActiveCfg = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|x64.Build.0 = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|x86.ActiveCfg = Release|Any CPU - {4965C44F-DAE6-4EDA-991F-4390595A20BA}.Release|x86.Build.0 = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|x64.ActiveCfg = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|x64.Build.0 = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|x86.ActiveCfg = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Debug|x86.Build.0 = Debug|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|Any CPU.Build.0 = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|x64.ActiveCfg = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|x64.Build.0 = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|x86.ActiveCfg = Release|Any CPU - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3}.Release|x86.Build.0 = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|x64.ActiveCfg = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|x64.Build.0 = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|x86.ActiveCfg = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Debug|x86.Build.0 = Debug|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|Any CPU.Build.0 = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|x64.ActiveCfg = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|x64.Build.0 = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|x86.ActiveCfg = Release|Any CPU - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C}.Release|x86.Build.0 = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|x64.ActiveCfg = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|x64.Build.0 = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|x86.ActiveCfg = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Debug|x86.Build.0 = Debug|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|Any CPU.Build.0 = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|x64.ActiveCfg = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|x64.Build.0 = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|x86.ActiveCfg = Release|Any CPU - {BEF61E9E-2EC1-44B8-B677-321329DEF205}.Release|x86.Build.0 = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|x64.Build.0 = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Debug|x86.Build.0 = Debug|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|Any CPU.Build.0 = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|x64.ActiveCfg = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|x64.Build.0 = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|x86.ActiveCfg = Release|Any CPU - {8B8397F0-7A39-480F-8C19-0A96F121D57A}.Release|x86.Build.0 = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|x64.ActiveCfg = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|x64.Build.0 = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|x86.ActiveCfg = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Debug|x86.Build.0 = Debug|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|Any CPU.Build.0 = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|x64.ActiveCfg = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|x64.Build.0 = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|x86.ActiveCfg = Release|Any CPU - {45407BC4-DF4C-49BD-ADEF-706683C90E14}.Release|x86.Build.0 = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|x64.Build.0 = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Debug|x86.Build.0 = Debug|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|Any CPU.Build.0 = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|x64.ActiveCfg = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|x64.Build.0 = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|x86.ActiveCfg = Release|Any CPU - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB}.Release|x86.Build.0 = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|x64.ActiveCfg = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|x64.Build.0 = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Debug|x86.Build.0 = Debug|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|Any CPU.Build.0 = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|x64.ActiveCfg = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|x64.Build.0 = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|x86.ActiveCfg = Release|Any CPU - {B6017708-8E8C-4230-95AD-2D06237D68D4}.Release|x86.Build.0 = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|x64.ActiveCfg = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|x64.Build.0 = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|x86.ActiveCfg = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Debug|x86.Build.0 = Debug|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|Any CPU.Build.0 = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|x64.ActiveCfg = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|x64.Build.0 = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|x86.ActiveCfg = Release|Any CPU - {59C98A03-427A-40A0-8467-C85C4807907F}.Release|x86.Build.0 = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|x64.ActiveCfg = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|x64.Build.0 = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|x86.ActiveCfg = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Debug|x86.Build.0 = Debug|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|Any CPU.Build.0 = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|x64.ActiveCfg = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|x64.Build.0 = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|x86.ActiveCfg = Release|Any CPU - {0030C8EE-8EBB-499F-A310-957BE176AEB1}.Release|x86.Build.0 = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|x64.Build.0 = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Debug|x86.Build.0 = Debug|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|Any CPU.Build.0 = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|x64.ActiveCfg = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|x64.Build.0 = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|x86.ActiveCfg = Release|Any CPU - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F}.Release|x86.Build.0 = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|x64.ActiveCfg = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|x64.Build.0 = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|x86.ActiveCfg = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Debug|x86.Build.0 = Debug|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|Any CPU.Build.0 = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|x64.ActiveCfg = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|x64.Build.0 = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|x86.ActiveCfg = Release|Any CPU - {19586F56-E799-49EA-9B3C-910BF2D4976A}.Release|x86.Build.0 = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|x64.ActiveCfg = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|x64.Build.0 = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|x86.ActiveCfg = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Debug|x86.Build.0 = Debug|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|Any CPU.Build.0 = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|x64.ActiveCfg = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|x64.Build.0 = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|x86.ActiveCfg = Release|Any CPU - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9}.Release|x86.Build.0 = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|x64.ActiveCfg = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|x64.Build.0 = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|x86.ActiveCfg = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Debug|x86.Build.0 = Debug|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|Any CPU.Build.0 = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|x64.ActiveCfg = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|x64.Build.0 = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|x86.ActiveCfg = Release|Any CPU - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C}.Release|x86.Build.0 = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|x64.ActiveCfg = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|x64.Build.0 = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|x86.ActiveCfg = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Debug|x86.Build.0 = Debug|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|Any CPU.Build.0 = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|x64.ActiveCfg = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|x64.Build.0 = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|x86.ActiveCfg = Release|Any CPU - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA}.Release|x86.Build.0 = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|x64.ActiveCfg = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|x64.Build.0 = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Debug|x86.Build.0 = Debug|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|Any CPU.Build.0 = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|x64.ActiveCfg = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|x64.Build.0 = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|x86.ActiveCfg = Release|Any CPU - {FF526329-094A-4B25-ABC5-750D62E48101}.Release|x86.Build.0 = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|x64.ActiveCfg = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|x64.Build.0 = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|x86.ActiveCfg = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Debug|x86.Build.0 = Debug|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|Any CPU.Build.0 = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|x64.ActiveCfg = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|x64.Build.0 = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|x86.ActiveCfg = Release|Any CPU - {377A7D9A-2691-4683-AB81-03B1642B3A78}.Release|x86.Build.0 = Release|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|x64.ActiveCfg = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|x64.Build.0 = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Debug|x86.Build.0 = Debug|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Release|x64.ActiveCfg = Release|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Release|x64.Build.0 = Release|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Release|x86.ActiveCfg = Release|Any CPU - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74}.Release|x86.Build.0 = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|x64.ActiveCfg = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|x64.Build.0 = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|x86.ActiveCfg = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Debug|x86.Build.0 = Debug|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|Any CPU.Build.0 = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|x64.ActiveCfg = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|x64.Build.0 = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|x86.ActiveCfg = Release|Any CPU - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428}.Release|x86.Build.0 = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|x64.ActiveCfg = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|x64.Build.0 = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|x86.ActiveCfg = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Debug|x86.Build.0 = Debug|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|Any CPU.Build.0 = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|x64.ActiveCfg = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|x64.Build.0 = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|x86.ActiveCfg = Release|Any CPU - {A768A346-6388-4881-8FF6-15F0163B76E0}.Release|x86.Build.0 = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|x64.ActiveCfg = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|x64.Build.0 = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|x86.ActiveCfg = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Debug|x86.Build.0 = Debug|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|Any CPU.Build.0 = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|x64.ActiveCfg = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|x64.Build.0 = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|x86.ActiveCfg = Release|Any CPU - {2C3099EA-C01C-4639-8300-153A9BD79292}.Release|x86.Build.0 = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|x64.Build.0 = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Debug|x86.Build.0 = Debug|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|Any CPU.Build.0 = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|x64.ActiveCfg = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|x64.Build.0 = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|x86.ActiveCfg = Release|Any CPU - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E}.Release|x86.Build.0 = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|x64.ActiveCfg = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|x64.Build.0 = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|x86.ActiveCfg = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Debug|x86.Build.0 = Debug|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|Any CPU.Build.0 = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|x64.ActiveCfg = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|x64.Build.0 = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|x86.ActiveCfg = Release|Any CPU - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4}.Release|x86.Build.0 = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|x64.ActiveCfg = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|x64.Build.0 = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|x86.ActiveCfg = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Debug|x86.Build.0 = Debug|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|Any CPU.Build.0 = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|x64.ActiveCfg = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|x64.Build.0 = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|x86.ActiveCfg = Release|Any CPU - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94}.Release|x86.Build.0 = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|x64.ActiveCfg = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|x64.Build.0 = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|x86.ActiveCfg = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Debug|x86.Build.0 = Debug|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|Any CPU.Build.0 = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|x64.ActiveCfg = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|x64.Build.0 = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|x86.ActiveCfg = Release|Any CPU - {E8DE9BA0-8391-4278-926D-DD931C4172AF}.Release|x86.Build.0 = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|x64.Build.0 = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Debug|x86.Build.0 = Debug|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|Any CPU.Build.0 = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|x64.ActiveCfg = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|x64.Build.0 = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|x86.ActiveCfg = Release|Any CPU - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A}.Release|x86.Build.0 = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|x64.ActiveCfg = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|x64.Build.0 = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|x86.ActiveCfg = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Debug|x86.Build.0 = Debug|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|Any CPU.Build.0 = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|x64.ActiveCfg = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|x64.Build.0 = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|x86.ActiveCfg = Release|Any CPU - {07915304-3B6B-400C-94F8-C49EF5F347E7}.Release|x86.Build.0 = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|x64.Build.0 = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Debug|x86.Build.0 = Debug|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|Any CPU.Build.0 = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|x64.ActiveCfg = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|x64.Build.0 = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|x86.ActiveCfg = Release|Any CPU - {8C7A30EF-C257-421C-AABD-D42FF6D955A5}.Release|x86.Build.0 = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|x64.Build.0 = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Debug|x86.Build.0 = Debug|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|Any CPU.Build.0 = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|x64.ActiveCfg = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|x64.Build.0 = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|x86.ActiveCfg = Release|Any CPU - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788}.Release|x86.Build.0 = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|x64.ActiveCfg = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|x64.Build.0 = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|x86.ActiveCfg = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Debug|x86.Build.0 = Debug|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|Any CPU.Build.0 = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|x64.ActiveCfg = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|x64.Build.0 = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|x86.ActiveCfg = Release|Any CPU - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC}.Release|x86.Build.0 = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|Any CPU.Build.0 = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|x64.ActiveCfg = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|x64.Build.0 = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|x86.ActiveCfg = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Debug|x86.Build.0 = Debug|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|Any CPU.ActiveCfg = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|Any CPU.Build.0 = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|x64.ActiveCfg = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|x64.Build.0 = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|x86.ActiveCfg = Release|Any CPU - {84F51960-D814-450D-80EB-D9E46A1D5187}.Release|x86.Build.0 = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|x64.ActiveCfg = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|x64.Build.0 = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|x86.ActiveCfg = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Debug|x86.Build.0 = Debug|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|Any CPU.Build.0 = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|x64.ActiveCfg = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|x64.Build.0 = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|x86.ActiveCfg = Release|Any CPU - {D3D9891B-88E6-46AD-919C-7EC4EABE5266}.Release|x86.Build.0 = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|x64.ActiveCfg = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|x64.Build.0 = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|x86.ActiveCfg = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Debug|x86.Build.0 = Debug|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|Any CPU.Build.0 = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|x64.ActiveCfg = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|x64.Build.0 = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|x86.ActiveCfg = Release|Any CPU - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85}.Release|x86.Build.0 = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|x64.ActiveCfg = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|x64.Build.0 = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|x86.ActiveCfg = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Debug|x86.Build.0 = Debug|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|Any CPU.Build.0 = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|x64.ActiveCfg = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|x64.Build.0 = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|x86.ActiveCfg = Release|Any CPU - {29792F05-EFB9-4323-94FC-01309B44BAF9}.Release|x86.Build.0 = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|x64.ActiveCfg = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|x64.Build.0 = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|x86.ActiveCfg = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Debug|x86.Build.0 = Debug|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|Any CPU.Build.0 = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|x64.ActiveCfg = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|x64.Build.0 = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|x86.ActiveCfg = Release|Any CPU - {FAC2B206-8A11-4387-A7B4-645671641339}.Release|x86.Build.0 = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|x64.ActiveCfg = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|x64.Build.0 = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|x86.ActiveCfg = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Debug|x86.Build.0 = Debug|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|Any CPU.Build.0 = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|x64.ActiveCfg = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|x64.Build.0 = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|x86.ActiveCfg = Release|Any CPU - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE}.Release|x86.Build.0 = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|x64.ActiveCfg = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|x64.Build.0 = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Debug|x86.Build.0 = Debug|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|Any CPU.Build.0 = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|x64.ActiveCfg = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|x64.Build.0 = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|x86.ActiveCfg = Release|Any CPU - {1431D746-63CC-4498-BCD4-7A68E225ACF1}.Release|x86.Build.0 = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|x64.ActiveCfg = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|x64.Build.0 = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|x86.ActiveCfg = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Debug|x86.Build.0 = Debug|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|Any CPU.Build.0 = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|x64.ActiveCfg = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|x64.Build.0 = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|x86.ActiveCfg = Release|Any CPU - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1}.Release|x86.Build.0 = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|x64.ActiveCfg = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|x64.Build.0 = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|x86.ActiveCfg = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Debug|x86.Build.0 = Debug|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|Any CPU.Build.0 = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|x64.ActiveCfg = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|x64.Build.0 = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|x86.ActiveCfg = Release|Any CPU - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB}.Release|x86.Build.0 = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|x64.ActiveCfg = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|x64.Build.0 = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|x86.ActiveCfg = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Debug|x86.Build.0 = Debug|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|Any CPU.Build.0 = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|x64.ActiveCfg = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|x64.Build.0 = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|x86.ActiveCfg = Release|Any CPU - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA}.Release|x86.Build.0 = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|x64.ActiveCfg = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|x64.Build.0 = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|x86.ActiveCfg = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Debug|x86.Build.0 = Debug|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|Any CPU.Build.0 = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|x64.ActiveCfg = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|x64.Build.0 = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|x86.ActiveCfg = Release|Any CPU - {4001CDD7-6F73-4C18-966C-27E3BB1208F2}.Release|x86.Build.0 = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|x64.ActiveCfg = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|x64.Build.0 = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|x86.ActiveCfg = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Debug|x86.Build.0 = Debug|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|Any CPU.Build.0 = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|x64.ActiveCfg = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|x64.Build.0 = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|x86.ActiveCfg = Release|Any CPU - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB}.Release|x86.Build.0 = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|x64.ActiveCfg = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|x64.Build.0 = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Debug|x86.Build.0 = Debug|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|Any CPU.Build.0 = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|x64.ActiveCfg = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|x64.Build.0 = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|x86.ActiveCfg = Release|Any CPU - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089}.Release|x86.Build.0 = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|x64.ActiveCfg = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|x64.Build.0 = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|x86.ActiveCfg = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Debug|x86.Build.0 = Debug|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|Any CPU.Build.0 = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|x64.ActiveCfg = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|x64.Build.0 = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|x86.ActiveCfg = Release|Any CPU - {A87F77B1-D38E-46E5-822A-097F0370D1D0}.Release|x86.Build.0 = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|x64.Build.0 = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Debug|x86.Build.0 = Debug|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|Any CPU.Build.0 = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|x64.ActiveCfg = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|x64.Build.0 = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|x86.ActiveCfg = Release|Any CPU - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518}.Release|x86.Build.0 = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|x64.Build.0 = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Debug|x86.Build.0 = Debug|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|Any CPU.Build.0 = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|x64.ActiveCfg = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|x64.Build.0 = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|x86.ActiveCfg = Release|Any CPU - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5}.Release|x86.Build.0 = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|x64.ActiveCfg = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|x64.Build.0 = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|x86.ActiveCfg = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Debug|x86.Build.0 = Debug|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|Any CPU.Build.0 = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|x64.ActiveCfg = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|x64.Build.0 = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|x86.ActiveCfg = Release|Any CPU - {70B06D00-CEA9-47CD-8781-10CA48376046}.Release|x86.Build.0 = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|x64.ActiveCfg = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|x64.Build.0 = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|x86.ActiveCfg = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Debug|x86.Build.0 = Debug|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|Any CPU.Build.0 = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|x64.ActiveCfg = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|x64.Build.0 = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|x86.ActiveCfg = Release|Any CPU - {28760ABB-EB0F-4216-97B0-0DAC5FC27533}.Release|x86.Build.0 = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|x64.ActiveCfg = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|x64.Build.0 = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|x86.ActiveCfg = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Debug|x86.Build.0 = Debug|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|Any CPU.Build.0 = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|x64.ActiveCfg = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|x64.Build.0 = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|x86.ActiveCfg = Release|Any CPU - {5E5433D4-0285-48AC-82EA-FA0F8C227707}.Release|x86.Build.0 = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|x64.Build.0 = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Debug|x86.Build.0 = Debug|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|Any CPU.Build.0 = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|x64.ActiveCfg = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|x64.Build.0 = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|x86.ActiveCfg = Release|Any CPU - {E7017145-BC11-408A-93F5-63D28F7DE79F}.Release|x86.Build.0 = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|x64.ActiveCfg = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|x64.Build.0 = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|x86.ActiveCfg = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Debug|x86.Build.0 = Debug|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|Any CPU.Build.0 = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|x64.ActiveCfg = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|x64.Build.0 = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|x86.ActiveCfg = Release|Any CPU - {7803ADF5-D9C5-4262-9031-58AF9E050542}.Release|x86.Build.0 = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|x64.ActiveCfg = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|x64.Build.0 = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|x86.ActiveCfg = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Debug|x86.Build.0 = Debug|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|Any CPU.Build.0 = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|x64.ActiveCfg = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|x64.Build.0 = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|x86.ActiveCfg = Release|Any CPU - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2}.Release|x86.Build.0 = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|x64.ActiveCfg = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|x64.Build.0 = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|x86.ActiveCfg = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Debug|x86.Build.0 = Debug|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|Any CPU.Build.0 = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|x64.ActiveCfg = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|x64.Build.0 = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|x86.ActiveCfg = Release|Any CPU - {69321DDA-65DF-412F-BDDA-9306B8EE98D0}.Release|x86.Build.0 = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|x64.ActiveCfg = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|x64.Build.0 = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|x86.ActiveCfg = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Debug|x86.Build.0 = Debug|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|Any CPU.Build.0 = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|x64.ActiveCfg = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|x64.Build.0 = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|x86.ActiveCfg = Release|Any CPU - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016}.Release|x86.Build.0 = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|x64.ActiveCfg = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|x64.Build.0 = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|x86.ActiveCfg = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Debug|x86.Build.0 = Debug|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|Any CPU.Build.0 = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|x64.ActiveCfg = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|x64.Build.0 = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|x86.ActiveCfg = Release|Any CPU - {674A6DFE-22C7-482B-88B0-D065678D4A82}.Release|x86.Build.0 = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|x64.ActiveCfg = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|x64.Build.0 = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|x86.ActiveCfg = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Debug|x86.Build.0 = Debug|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|Any CPU.Build.0 = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|x64.ActiveCfg = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|x64.Build.0 = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|x86.ActiveCfg = Release|Any CPU - {88709BA6-3345-4ED5-A3C8-06CE98E163B9}.Release|x86.Build.0 = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|x64.Build.0 = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Debug|x86.Build.0 = Debug|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|Any CPU.Build.0 = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|x64.ActiveCfg = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|x64.Build.0 = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|x86.ActiveCfg = Release|Any CPU - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6}.Release|x86.Build.0 = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|x64.Build.0 = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Debug|x86.Build.0 = Debug|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|Any CPU.Build.0 = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|x64.ActiveCfg = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|x64.Build.0 = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|x86.ActiveCfg = Release|Any CPU - {50810C05-6BB1-4E72-A97A-6124375A42E1}.Release|x86.Build.0 = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|x64.ActiveCfg = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|x64.Build.0 = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|x86.ActiveCfg = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Debug|x86.Build.0 = Debug|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|Any CPU.Build.0 = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|x64.ActiveCfg = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|x64.Build.0 = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|x86.ActiveCfg = Release|Any CPU - {59041F3C-5C88-45D3-BB93-0F1617DCA622}.Release|x86.Build.0 = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|x64.ActiveCfg = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|x64.Build.0 = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|x86.ActiveCfg = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Debug|x86.Build.0 = Debug|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|Any CPU.Build.0 = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|x64.ActiveCfg = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|x64.Build.0 = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|x86.ActiveCfg = Release|Any CPU - {37242743-E379-4DD4-B150-483E357A4F83}.Release|x86.Build.0 = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|x64.ActiveCfg = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|x64.Build.0 = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|x86.ActiveCfg = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Debug|x86.Build.0 = Debug|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|Any CPU.Build.0 = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|x64.ActiveCfg = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|x64.Build.0 = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|x86.ActiveCfg = Release|Any CPU - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF}.Release|x86.Build.0 = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|x64.ActiveCfg = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|x64.Build.0 = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|x86.ActiveCfg = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Debug|x86.Build.0 = Debug|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|Any CPU.Build.0 = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|x64.ActiveCfg = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|x64.Build.0 = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|x86.ActiveCfg = Release|Any CPU - {43896917-9904-4AE7-B634-32850471789F}.Release|x86.Build.0 = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|x64.ActiveCfg = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|x64.Build.0 = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|x86.ActiveCfg = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Debug|x86.Build.0 = Debug|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|Any CPU.Build.0 = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|x64.ActiveCfg = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|x64.Build.0 = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|x86.ActiveCfg = Release|Any CPU - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097}.Release|x86.Build.0 = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|x64.ActiveCfg = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|x64.Build.0 = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|x86.ActiveCfg = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Debug|x86.Build.0 = Debug|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|Any CPU.Build.0 = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|x64.ActiveCfg = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|x64.Build.0 = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|x86.ActiveCfg = Release|Any CPU - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B}.Release|x86.Build.0 = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|x64.ActiveCfg = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|x64.Build.0 = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|x86.ActiveCfg = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Debug|x86.Build.0 = Debug|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|Any CPU.Build.0 = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|x64.ActiveCfg = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|x64.Build.0 = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|x86.ActiveCfg = Release|Any CPU - {591836FE-0DAC-48A5-86AB-4C317A6B009A}.Release|x86.Build.0 = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|x64.ActiveCfg = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|x64.Build.0 = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|x86.ActiveCfg = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Debug|x86.Build.0 = Debug|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|Any CPU.Build.0 = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|x64.ActiveCfg = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|x64.Build.0 = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|x86.ActiveCfg = Release|Any CPU - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9}.Release|x86.Build.0 = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|x64.ActiveCfg = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|x64.Build.0 = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|x86.ActiveCfg = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Debug|x86.Build.0 = Debug|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|Any CPU.Build.0 = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|x64.ActiveCfg = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|x64.Build.0 = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|x86.ActiveCfg = Release|Any CPU - {749B0BAE-63F0-4B22-A883-CD521F725DAA}.Release|x86.Build.0 = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|x64.ActiveCfg = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|x64.Build.0 = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Debug|x86.Build.0 = Debug|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|Any CPU.Build.0 = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|x64.ActiveCfg = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|x64.Build.0 = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|x86.ActiveCfg = Release|Any CPU - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF}.Release|x86.Build.0 = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|x64.ActiveCfg = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|x64.Build.0 = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|x86.ActiveCfg = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Debug|x86.Build.0 = Debug|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|Any CPU.Build.0 = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|x64.ActiveCfg = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|x64.Build.0 = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|x86.ActiveCfg = Release|Any CPU - {60AFD661-4BE5-4040-896A-CE2EA95F98B7}.Release|x86.Build.0 = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|x64.ActiveCfg = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|x64.Build.0 = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|x86.ActiveCfg = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Debug|x86.Build.0 = Debug|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|Any CPU.Build.0 = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|x64.ActiveCfg = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|x64.Build.0 = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|x86.ActiveCfg = Release|Any CPU - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E}.Release|x86.Build.0 = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|x64.ActiveCfg = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|x64.Build.0 = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|x86.ActiveCfg = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Debug|x86.Build.0 = Debug|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|Any CPU.Build.0 = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|x64.ActiveCfg = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|x64.Build.0 = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|x86.ActiveCfg = Release|Any CPU - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73}.Release|x86.Build.0 = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|x64.Build.0 = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Debug|x86.Build.0 = Debug|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|Any CPU.Build.0 = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|x64.ActiveCfg = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|x64.Build.0 = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|x86.ActiveCfg = Release|Any CPU - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC}.Release|x86.Build.0 = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|x64.ActiveCfg = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|x64.Build.0 = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|x86.ActiveCfg = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Debug|x86.Build.0 = Debug|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|Any CPU.Build.0 = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|x64.ActiveCfg = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|x64.Build.0 = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|x86.ActiveCfg = Release|Any CPU - {3076E116-F160-4C5D-A3D9-B3B51845675C}.Release|x86.Build.0 = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|x64.ActiveCfg = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|x64.Build.0 = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Debug|x86.Build.0 = Debug|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|Any CPU.Build.0 = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|x64.ActiveCfg = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|x64.Build.0 = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|x86.ActiveCfg = Release|Any CPU - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B}.Release|x86.Build.0 = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|Any CPU.Build.0 = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|x64.ActiveCfg = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|x64.Build.0 = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|x86.ActiveCfg = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Debug|x86.Build.0 = Debug|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|Any CPU.ActiveCfg = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|Any CPU.Build.0 = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|x64.ActiveCfg = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|x64.Build.0 = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|x86.ActiveCfg = Release|Any CPU - {358A6DC8-866C-4C8D-8F41-682F6683E683}.Release|x86.Build.0 = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|x64.Build.0 = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Debug|x86.Build.0 = Debug|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|Any CPU.Build.0 = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|x64.ActiveCfg = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|x64.Build.0 = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|x86.ActiveCfg = Release|Any CPU - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9}.Release|x86.Build.0 = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|x64.ActiveCfg = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|x64.Build.0 = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|x86.ActiveCfg = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Debug|x86.Build.0 = Debug|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|Any CPU.Build.0 = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|x64.ActiveCfg = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|x64.Build.0 = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|x86.ActiveCfg = Release|Any CPU - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B}.Release|x86.Build.0 = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|x64.ActiveCfg = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|x64.Build.0 = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|x86.ActiveCfg = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Debug|x86.Build.0 = Debug|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|Any CPU.Build.0 = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|x64.ActiveCfg = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|x64.Build.0 = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|x86.ActiveCfg = Release|Any CPU - {51868FC9-C052-4C2D-98F9-10379AAD2671}.Release|x86.Build.0 = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|x64.Build.0 = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Debug|x86.Build.0 = Debug|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|Any CPU.Build.0 = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|x64.ActiveCfg = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|x64.Build.0 = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|x86.ActiveCfg = Release|Any CPU - {23172004-FF6B-45D8-9653-944CECE741E1}.Release|x86.Build.0 = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|x64.ActiveCfg = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|x64.Build.0 = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|x86.ActiveCfg = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Debug|x86.Build.0 = Debug|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|Any CPU.ActiveCfg = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|Any CPU.Build.0 = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|x64.ActiveCfg = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|x64.Build.0 = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|x86.ActiveCfg = Release|Any CPU - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130}.Release|x86.Build.0 = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|x64.Build.0 = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Debug|x86.Build.0 = Debug|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|Any CPU.Build.0 = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|x64.ActiveCfg = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|x64.Build.0 = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|x86.ActiveCfg = Release|Any CPU - {98C25360-F03A-4929-959B-C80A48D21FF2}.Release|x86.Build.0 = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|x64.ActiveCfg = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|x64.Build.0 = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|x86.ActiveCfg = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Debug|x86.Build.0 = Debug|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|Any CPU.Build.0 = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|x64.ActiveCfg = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|x64.Build.0 = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|x86.ActiveCfg = Release|Any CPU - {FD32964B-4144-43CD-B313-2A5DD6A05DEA}.Release|x86.Build.0 = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|x64.ActiveCfg = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|x64.Build.0 = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|x86.ActiveCfg = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Debug|x86.Build.0 = Debug|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|Any CPU.Build.0 = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|x64.ActiveCfg = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|x64.Build.0 = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|x86.ActiveCfg = Release|Any CPU - {859A77A8-73F0-447B-9076-B42D5CA3CA33}.Release|x86.Build.0 = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|x64.ActiveCfg = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|x64.Build.0 = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|x86.ActiveCfg = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Debug|x86.Build.0 = Debug|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|Any CPU.Build.0 = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|x64.ActiveCfg = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|x64.Build.0 = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|x86.ActiveCfg = Release|Any CPU - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F}.Release|x86.Build.0 = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|x64.Build.0 = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Debug|x86.Build.0 = Debug|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|Any CPU.Build.0 = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|x64.ActiveCfg = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|x64.Build.0 = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|x86.ActiveCfg = Release|Any CPU - {64E177FC-38AA-45AE-B748-419E91F95EC7}.Release|x86.Build.0 = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|x64.ActiveCfg = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|x64.Build.0 = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|x86.ActiveCfg = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Debug|x86.Build.0 = Debug|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|Any CPU.Build.0 = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|x64.ActiveCfg = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|x64.Build.0 = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|x86.ActiveCfg = Release|Any CPU - {F16B4AE5-F68F-42A2-8AB5-029282032CE0}.Release|x86.Build.0 = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|x64.ActiveCfg = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|x64.Build.0 = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Debug|x86.Build.0 = Debug|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|Any CPU.Build.0 = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|x64.ActiveCfg = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|x64.Build.0 = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|x86.ActiveCfg = Release|Any CPU - {AB59F09A-9BD9-4CBB-8497-87B768C7C949}.Release|x86.Build.0 = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|x64.ActiveCfg = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|x64.Build.0 = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|x86.ActiveCfg = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Debug|x86.Build.0 = Debug|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|Any CPU.Build.0 = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|x64.ActiveCfg = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|x64.Build.0 = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|x86.ActiveCfg = Release|Any CPU - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C}.Release|x86.Build.0 = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|x64.ActiveCfg = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|x64.Build.0 = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|x86.ActiveCfg = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Debug|x86.Build.0 = Debug|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|Any CPU.Build.0 = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|x64.ActiveCfg = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|x64.Build.0 = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|x86.ActiveCfg = Release|Any CPU - {D1DD841D-9F34-47A6-91EB-A8632D577BD7}.Release|x86.Build.0 = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|x64.Build.0 = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Debug|x86.Build.0 = Debug|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|Any CPU.Build.0 = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|x64.ActiveCfg = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|x64.Build.0 = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|x86.ActiveCfg = Release|Any CPU - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5}.Release|x86.Build.0 = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|x64.ActiveCfg = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|x64.Build.0 = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|x86.ActiveCfg = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Debug|x86.Build.0 = Debug|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|Any CPU.Build.0 = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|x64.ActiveCfg = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|x64.Build.0 = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|x86.ActiveCfg = Release|Any CPU - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038}.Release|x86.Build.0 = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|x64.ActiveCfg = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|x64.Build.0 = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|x86.ActiveCfg = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Debug|x86.Build.0 = Debug|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|Any CPU.Build.0 = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|x64.ActiveCfg = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|x64.Build.0 = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|x86.ActiveCfg = Release|Any CPU - {477046D2-AF81-4E2B-83BD-20176A971FDD}.Release|x86.Build.0 = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|x64.ActiveCfg = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|x64.Build.0 = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|x86.ActiveCfg = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Debug|x86.Build.0 = Debug|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|Any CPU.Build.0 = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|x64.ActiveCfg = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|x64.Build.0 = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|x86.ActiveCfg = Release|Any CPU - {8881342D-6247-4826-9963-87D4B029ECB6}.Release|x86.Build.0 = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|x64.ActiveCfg = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|x64.Build.0 = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|x86.ActiveCfg = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Debug|x86.Build.0 = Debug|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|Any CPU.Build.0 = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|x64.ActiveCfg = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|x64.Build.0 = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|x86.ActiveCfg = Release|Any CPU - {514DED00-4DA3-46D1-B2E8-10CE826CD52D}.Release|x86.Build.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x64.ActiveCfg = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x64.Build.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x64.Deploy.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x86.ActiveCfg = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x86.Build.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Debug|x86.Deploy.0 = Debug|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|Any CPU.Build.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x64.ActiveCfg = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x64.Build.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x64.Deploy.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.ActiveCfg = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.Build.0 = Release|Any CPU - {380468AD-B44D-456C-8DED-35467D11AC2F}.Release|x86.Deploy.0 = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x64.ActiveCfg = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x64.Build.0 = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x86.ActiveCfg = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Debug|x86.Build.0 = Debug|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|Any CPU.Build.0 = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x64.ActiveCfg = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x64.Build.0 = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x86.ActiveCfg = Release|Any CPU - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F}.Release|x86.Build.0 = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x64.ActiveCfg = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x64.Build.0 = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x86.ActiveCfg = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Debug|x86.Build.0 = Debug|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|Any CPU.Build.0 = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x64.ActiveCfg = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x64.Build.0 = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x86.ActiveCfg = Release|Any CPU - {507ED409-A2FD-43BB-AC7C-778B92BD40CF}.Release|x86.Build.0 = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|x64.ActiveCfg = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|x64.Build.0 = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|x86.ActiveCfg = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Debug|x86.Build.0 = Debug|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|Any CPU.Build.0 = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|x64.ActiveCfg = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|x64.Build.0 = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|x86.ActiveCfg = Release|Any CPU - {28D863B1-B60C-4C08-8661-EB820A5B78D2}.Release|x86.Build.0 = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|x64.ActiveCfg = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|x64.Build.0 = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|x86.ActiveCfg = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Debug|x86.Build.0 = Debug|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|Any CPU.Build.0 = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|x64.ActiveCfg = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|x64.Build.0 = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|x86.ActiveCfg = Release|Any CPU - {3E30D674-9282-4297-AD1F-9B233A166308}.Release|x86.Build.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x64.ActiveCfg = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x64.Build.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x64.Deploy.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x86.ActiveCfg = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x86.Build.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Debug|x86.Deploy.0 = Debug|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|Any CPU.Build.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|Any CPU.Deploy.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x64.ActiveCfg = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x64.Build.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x64.Deploy.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x86.ActiveCfg = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x86.Build.0 = Release|Any CPU - {C04680A3-C92A-4631-BD1E-8E4553A3F969}.Release|x86.Deploy.0 = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|x64.ActiveCfg = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|x64.Build.0 = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|x86.ActiveCfg = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Debug|x86.Build.0 = Debug|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|Any CPU.Build.0 = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|x64.ActiveCfg = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|x64.Build.0 = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|x86.ActiveCfg = Release|Any CPU - {606214B8-07FC-436F-9523-02AF32E1AB1E}.Release|x86.Build.0 = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|x64.ActiveCfg = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|x64.Build.0 = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|x86.ActiveCfg = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Debug|x86.Build.0 = Debug|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|Any CPU.Build.0 = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|x64.ActiveCfg = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|x64.Build.0 = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|x86.ActiveCfg = Release|Any CPU - {782B6A7E-9F04-429A-9DCD-D7273AA3882E}.Release|x86.Build.0 = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|x64.ActiveCfg = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|x64.Build.0 = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|x86.ActiveCfg = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Debug|x86.Build.0 = Debug|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|Any CPU.Build.0 = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|x64.ActiveCfg = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|x64.Build.0 = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|x86.ActiveCfg = Release|Any CPU - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63}.Release|x86.Build.0 = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|x64.ActiveCfg = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|x64.Build.0 = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|x86.ActiveCfg = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Debug|x86.Build.0 = Debug|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|Any CPU.Build.0 = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|x64.ActiveCfg = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|x64.Build.0 = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|x86.ActiveCfg = Release|Any CPU - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C}.Release|x86.Build.0 = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|x64.Build.0 = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Debug|x86.Build.0 = Debug|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|Any CPU.Build.0 = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|x64.ActiveCfg = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|x64.Build.0 = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|x86.ActiveCfg = Release|Any CPU - {BD19250B-E143-4F4E-9E1D-18829CCB3642}.Release|x86.Build.0 = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|x64.ActiveCfg = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|x64.Build.0 = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|x86.ActiveCfg = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Debug|x86.Build.0 = Debug|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|Any CPU.Build.0 = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|x64.ActiveCfg = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|x64.Build.0 = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|x86.ActiveCfg = Release|Any CPU - {225BA79C-36FE-421A-85E4-D15F8B61869B}.Release|x86.Build.0 = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|x64.ActiveCfg = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|x64.Build.0 = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Debug|x86.Build.0 = Debug|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|Any CPU.Build.0 = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|x64.ActiveCfg = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|x64.Build.0 = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|x86.ActiveCfg = Release|Any CPU - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2}.Release|x86.Build.0 = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|x64.ActiveCfg = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|x64.Build.0 = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|x86.ActiveCfg = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Debug|x86.Build.0 = Debug|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|Any CPU.Build.0 = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|x64.ActiveCfg = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|x64.Build.0 = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|x86.ActiveCfg = Release|Any CPU - {8D02DFEB-121A-449B-BC39-09C3F9A88E07}.Release|x86.Build.0 = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|x64.Build.0 = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Debug|x86.Build.0 = Debug|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|Any CPU.Build.0 = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|x64.ActiveCfg = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|x64.Build.0 = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|x86.ActiveCfg = Release|Any CPU - {36C38837-8250-42F9-ABDA-DEFC1AB129E1}.Release|x86.Build.0 = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|x64.ActiveCfg = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|x64.Build.0 = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|x86.ActiveCfg = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Debug|x86.Build.0 = Debug|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|Any CPU.Build.0 = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|x64.ActiveCfg = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|x64.Build.0 = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|x86.ActiveCfg = Release|Any CPU - {54F439B6-36E4-4FB0-8731-F73D42AD921F}.Release|x86.Build.0 = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|x64.ActiveCfg = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|x64.Build.0 = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|x86.ActiveCfg = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Debug|x86.Build.0 = Debug|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|Any CPU.Build.0 = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|x64.ActiveCfg = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|x64.Build.0 = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|x86.ActiveCfg = Release|Any CPU - {88142694-C095-4F56-B11D-9C8FC5EFC529}.Release|x86.Build.0 = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|x64.ActiveCfg = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|x64.Build.0 = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|x86.ActiveCfg = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Debug|x86.Build.0 = Debug|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|Any CPU.Build.0 = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|x64.ActiveCfg = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|x64.Build.0 = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|x86.ActiveCfg = Release|Any CPU - {2517B906-4B93-4B5F-8D18-AFB2BAB26121}.Release|x86.Build.0 = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|x64.ActiveCfg = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|x64.Build.0 = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|x86.ActiveCfg = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Debug|x86.Build.0 = Debug|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|Any CPU.Build.0 = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|x64.ActiveCfg = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|x64.Build.0 = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|x86.ActiveCfg = Release|Any CPU - {62513482-8713-4568-9086-247FE554B4E4}.Release|x86.Build.0 = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|x64.Build.0 = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Debug|x86.Build.0 = Debug|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|Any CPU.Build.0 = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|x64.ActiveCfg = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|x64.Build.0 = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|x86.ActiveCfg = Release|Any CPU - {6E79F43A-D9EE-401B-8CAE-0635382F975F}.Release|x86.Build.0 = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|x64.ActiveCfg = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|x64.Build.0 = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|x86.ActiveCfg = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Debug|x86.Build.0 = Debug|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|Any CPU.Build.0 = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|x64.ActiveCfg = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|x64.Build.0 = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|x86.ActiveCfg = Release|Any CPU - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951}.Release|x86.Build.0 = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|Any CPU.Build.0 = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|x64.ActiveCfg = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|x64.Build.0 = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|x86.ActiveCfg = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Debug|x86.Build.0 = Debug|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|Any CPU.ActiveCfg = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|Any CPU.Build.0 = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|x64.ActiveCfg = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|x64.Build.0 = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|x86.ActiveCfg = Release|Any CPU - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160}.Release|x86.Build.0 = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|Any CPU.Build.0 = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|x64.ActiveCfg = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|x64.Build.0 = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|x86.ActiveCfg = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Debug|x86.Build.0 = Debug|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|Any CPU.ActiveCfg = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|Any CPU.Build.0 = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|x64.ActiveCfg = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|x64.Build.0 = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|x86.ActiveCfg = Release|Any CPU - {950FCED7-5720-4855-ACA3-B0EAB246F669}.Release|x86.Build.0 = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|x64.Build.0 = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Debug|x86.Build.0 = Debug|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|Any CPU.Build.0 = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|x64.ActiveCfg = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|x64.Build.0 = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|x86.ActiveCfg = Release|Any CPU - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5}.Release|x86.Build.0 = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|x64.ActiveCfg = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|x64.Build.0 = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|x86.ActiveCfg = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Debug|x86.Build.0 = Debug|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|Any CPU.Build.0 = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|x64.ActiveCfg = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|x64.Build.0 = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|x86.ActiveCfg = Release|Any CPU - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB}.Release|x86.Build.0 = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|x64.ActiveCfg = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|x64.Build.0 = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|x86.ActiveCfg = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Debug|x86.Build.0 = Debug|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|Any CPU.Build.0 = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|x64.ActiveCfg = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|x64.Build.0 = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|x86.ActiveCfg = Release|Any CPU - {F86248D7-5012-4820-ADBE-BCE8B701581D}.Release|x86.Build.0 = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|x64.Build.0 = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Debug|x86.Build.0 = Debug|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|Any CPU.Build.0 = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|x64.ActiveCfg = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|x64.Build.0 = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|x86.ActiveCfg = Release|Any CPU - {534FCB74-0E82-42AF-AF94-48EE634F37A8}.Release|x86.Build.0 = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|x64.ActiveCfg = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|x64.Build.0 = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|x86.ActiveCfg = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Debug|x86.Build.0 = Debug|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|Any CPU.Build.0 = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|x64.ActiveCfg = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|x64.Build.0 = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|x86.ActiveCfg = Release|Any CPU - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD}.Release|x86.Build.0 = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|x64.ActiveCfg = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|x64.Build.0 = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|x86.ActiveCfg = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Debug|x86.Build.0 = Debug|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|Any CPU.Build.0 = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|x64.ActiveCfg = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|x64.Build.0 = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|x86.ActiveCfg = Release|Any CPU - {C66E285B-4DED-46FD-95A9-7B376C680412}.Release|x86.Build.0 = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|x64.Build.0 = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Debug|x86.Build.0 = Debug|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|Any CPU.Build.0 = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|x64.ActiveCfg = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|x64.Build.0 = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|x86.ActiveCfg = Release|Any CPU - {1F16CA6E-9A7E-452E-BE37-1201E506B661}.Release|x86.Build.0 = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|x64.ActiveCfg = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|x64.Build.0 = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Debug|x86.Build.0 = Debug|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|Any CPU.Build.0 = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|x64.ActiveCfg = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|x64.Build.0 = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|x86.ActiveCfg = Release|Any CPU - {3DADBCD8-5C5E-487C-8616-55A56BC351EF}.Release|x86.Build.0 = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|x64.ActiveCfg = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|x64.Build.0 = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|x86.ActiveCfg = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Debug|x86.Build.0 = Debug|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|Any CPU.Build.0 = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|x64.ActiveCfg = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|x64.Build.0 = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|x86.ActiveCfg = Release|Any CPU - {1314FEAF-71F7-42A8-881F-091384CE601B}.Release|x86.Build.0 = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|x64.ActiveCfg = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|x64.Build.0 = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|x86.ActiveCfg = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Debug|x86.Build.0 = Debug|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|Any CPU.Build.0 = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|x64.ActiveCfg = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|x64.Build.0 = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|x86.ActiveCfg = Release|Any CPU - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17}.Release|x86.Build.0 = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|x64.ActiveCfg = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|x64.Build.0 = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|x86.ActiveCfg = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Debug|x86.Build.0 = Debug|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|Any CPU.Build.0 = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|x64.ActiveCfg = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|x64.Build.0 = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|x86.ActiveCfg = Release|Any CPU - {7C91F372-8716-42F6-BB5A-6C94B7FC0513}.Release|x86.Build.0 = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|x64.ActiveCfg = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|x64.Build.0 = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|x86.ActiveCfg = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Debug|x86.Build.0 = Debug|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|Any CPU.Build.0 = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|x64.ActiveCfg = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|x64.Build.0 = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|x86.ActiveCfg = Release|Any CPU - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26}.Release|x86.Build.0 = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|x64.ActiveCfg = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|x64.Build.0 = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|x86.ActiveCfg = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Debug|x86.Build.0 = Debug|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|Any CPU.Build.0 = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|x64.ActiveCfg = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|x64.Build.0 = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|x86.ActiveCfg = Release|Any CPU - {B6A87FA1-0A71-434E-A808-C93072584E6D}.Release|x86.Build.0 = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|x64.ActiveCfg = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|x64.Build.0 = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|x86.ActiveCfg = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Debug|x86.Build.0 = Debug|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|Any CPU.Build.0 = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|x64.ActiveCfg = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|x64.Build.0 = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|x86.ActiveCfg = Release|Any CPU - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45}.Release|x86.Build.0 = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|x64.ActiveCfg = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|x64.Build.0 = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|x86.ActiveCfg = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Debug|x86.Build.0 = Debug|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|Any CPU.Build.0 = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|x64.ActiveCfg = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|x64.Build.0 = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|x86.ActiveCfg = Release|Any CPU - {33EA7CFE-836C-435B-B0D7-309F0759BDF0}.Release|x86.Build.0 = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|x64.ActiveCfg = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|x64.Build.0 = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|x86.ActiveCfg = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Debug|x86.Build.0 = Debug|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|Any CPU.Build.0 = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|x64.ActiveCfg = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|x64.Build.0 = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|x86.ActiveCfg = Release|Any CPU - {298B2915-B46F-4A29-AF9E-480C3B39012A}.Release|x86.Build.0 = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|x64.ActiveCfg = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|x64.Build.0 = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|x86.ActiveCfg = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Debug|x86.Build.0 = Debug|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|Any CPU.Build.0 = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|x64.ActiveCfg = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|x64.Build.0 = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|x86.ActiveCfg = Release|Any CPU - {A87647D1-A388-42EC-9545-3F46F3C4BAE5}.Release|x86.Build.0 = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|x64.ActiveCfg = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|x64.Build.0 = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|x86.ActiveCfg = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Debug|x86.Build.0 = Debug|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|Any CPU.Build.0 = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|x64.ActiveCfg = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|x64.Build.0 = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|x86.ActiveCfg = Release|Any CPU - {4CAE308D-FB8B-432B-9399-B567DC2A5C73}.Release|x86.Build.0 = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|x64.ActiveCfg = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|x64.Build.0 = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|x86.ActiveCfg = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Debug|x86.Build.0 = Debug|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|Any CPU.Build.0 = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|x64.ActiveCfg = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|x64.Build.0 = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|x86.ActiveCfg = Release|Any CPU - {C207E481-A5B4-4092-ADC2-14A93443152B}.Release|x86.Build.0 = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|x64.ActiveCfg = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|x64.Build.0 = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|x86.ActiveCfg = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Debug|x86.Build.0 = Debug|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|Any CPU.Build.0 = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|x64.ActiveCfg = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|x64.Build.0 = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|x86.ActiveCfg = Release|Any CPU - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F}.Release|x86.Build.0 = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|x64.ActiveCfg = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|x64.Build.0 = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|x86.ActiveCfg = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Debug|x86.Build.0 = Debug|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|Any CPU.Build.0 = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|x64.ActiveCfg = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|x64.Build.0 = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|x86.ActiveCfg = Release|Any CPU - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5}.Release|x86.Build.0 = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|x64.ActiveCfg = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|x64.Build.0 = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Debug|x86.Build.0 = Debug|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|Any CPU.Build.0 = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|x64.ActiveCfg = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|x64.Build.0 = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|x86.ActiveCfg = Release|Any CPU - {73A4E694-E416-4BAC-9C17-87B7E5F602FA}.Release|x86.Build.0 = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|x64.ActiveCfg = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|x64.Build.0 = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|x86.ActiveCfg = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Debug|x86.Build.0 = Debug|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|Any CPU.Build.0 = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|x64.ActiveCfg = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|x64.Build.0 = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|x86.ActiveCfg = Release|Any CPU - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A}.Release|x86.Build.0 = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|x64.ActiveCfg = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|x64.Build.0 = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|x86.ActiveCfg = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Debug|x86.Build.0 = Debug|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|Any CPU.Build.0 = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|x64.ActiveCfg = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|x64.Build.0 = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|x86.ActiveCfg = Release|Any CPU - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB}.Release|x86.Build.0 = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|x64.Build.0 = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Debug|x86.Build.0 = Debug|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|Any CPU.Build.0 = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|x64.ActiveCfg = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|x64.Build.0 = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|x86.ActiveCfg = Release|Any CPU - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7}.Release|x86.Build.0 = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|x64.ActiveCfg = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|x64.Build.0 = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|x86.ActiveCfg = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Debug|x86.Build.0 = Debug|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|Any CPU.Build.0 = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|x64.ActiveCfg = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|x64.Build.0 = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|x86.ActiveCfg = Release|Any CPU - {82626916-C5F3-46E7-B0EC-1D38191450C7}.Release|x86.Build.0 = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|x64.ActiveCfg = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|x64.Build.0 = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|x86.ActiveCfg = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Debug|x86.Build.0 = Debug|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|Any CPU.Build.0 = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|x64.ActiveCfg = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|x64.Build.0 = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|x86.ActiveCfg = Release|Any CPU - {8773396C-5EDF-498C-97D7-1D2728CB969B}.Release|x86.Build.0 = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|x64.ActiveCfg = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|x64.Build.0 = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|x86.ActiveCfg = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Debug|x86.Build.0 = Debug|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|Any CPU.Build.0 = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|x64.ActiveCfg = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|x64.Build.0 = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|x86.ActiveCfg = Release|Any CPU - {4031A5EB-820B-478D-A656-85C93210054E}.Release|x86.Build.0 = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|x64.ActiveCfg = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|x64.Build.0 = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|x86.ActiveCfg = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Debug|x86.Build.0 = Debug|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|Any CPU.Build.0 = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|x64.ActiveCfg = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|x64.Build.0 = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|x86.ActiveCfg = Release|Any CPU - {79680317-F985-4727-81D3-8BF2228AEC20}.Release|x86.Build.0 = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|x64.ActiveCfg = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|x64.Build.0 = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|x86.ActiveCfg = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Debug|x86.Build.0 = Debug|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|Any CPU.Build.0 = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|x64.ActiveCfg = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|x64.Build.0 = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|x86.ActiveCfg = Release|Any CPU - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785}.Release|x86.Build.0 = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|x64.ActiveCfg = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|x64.Build.0 = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|x86.ActiveCfg = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Debug|x86.Build.0 = Debug|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|Any CPU.Build.0 = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|x64.ActiveCfg = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|x64.Build.0 = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|x86.ActiveCfg = Release|Any CPU - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80}.Release|x86.Build.0 = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|x64.ActiveCfg = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|x64.Build.0 = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|x86.ActiveCfg = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Debug|x86.Build.0 = Debug|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|Any CPU.Build.0 = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|x64.ActiveCfg = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|x64.Build.0 = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|x86.ActiveCfg = Release|Any CPU - {E1624E31-C702-42EC-AC47-20358B3CCF49}.Release|x86.Build.0 = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|x64.ActiveCfg = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|x64.Build.0 = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|x86.ActiveCfg = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Debug|x86.Build.0 = Debug|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|Any CPU.Build.0 = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|x64.ActiveCfg = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|x64.Build.0 = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|x86.ActiveCfg = Release|Any CPU - {82D76E01-3166-4549-A433-4C2C4FD6788E}.Release|x86.Build.0 = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|x64.ActiveCfg = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|x64.Build.0 = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|x86.ActiveCfg = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Debug|x86.Build.0 = Debug|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|Any CPU.Build.0 = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|x64.ActiveCfg = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|x64.Build.0 = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|x86.ActiveCfg = Release|Any CPU - {ABC4717F-2863-4B79-8812-7C1D851EE336}.Release|x86.Build.0 = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|x64.Build.0 = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Debug|x86.Build.0 = Debug|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|Any CPU.Build.0 = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|x64.ActiveCfg = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|x64.Build.0 = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|x86.ActiveCfg = Release|Any CPU - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A}.Release|x86.Build.0 = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|x64.ActiveCfg = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|x64.Build.0 = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|x86.ActiveCfg = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Debug|x86.Build.0 = Debug|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|Any CPU.Build.0 = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|x64.ActiveCfg = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|x64.Build.0 = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|x86.ActiveCfg = Release|Any CPU - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A}.Release|x86.Build.0 = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|x64.ActiveCfg = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|x64.Build.0 = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|x86.ActiveCfg = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Debug|x86.Build.0 = Debug|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|Any CPU.Build.0 = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|x64.ActiveCfg = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|x64.Build.0 = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|x86.ActiveCfg = Release|Any CPU - {65E895B6-D0A6-4C5C-A090-07C7590F48B9}.Release|x86.Build.0 = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|x64.ActiveCfg = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|x64.Build.0 = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|x86.ActiveCfg = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Debug|x86.Build.0 = Debug|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|Any CPU.Build.0 = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|x64.ActiveCfg = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|x64.Build.0 = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|x86.ActiveCfg = Release|Any CPU - {7DB60101-9D99-4FD6-89AD-29648F537333}.Release|x86.Build.0 = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|x64.ActiveCfg = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|x64.Build.0 = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|x86.ActiveCfg = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Debug|x86.Build.0 = Debug|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|Any CPU.Build.0 = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|x64.ActiveCfg = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|x64.Build.0 = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|x86.ActiveCfg = Release|Any CPU - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4}.Release|x86.Build.0 = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|x64.ActiveCfg = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|x64.Build.0 = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|x86.ActiveCfg = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Debug|x86.Build.0 = Debug|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|Any CPU.Build.0 = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|x64.ActiveCfg = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|x64.Build.0 = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|x86.ActiveCfg = Release|Any CPU - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43}.Release|x86.Build.0 = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|x64.ActiveCfg = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|x64.Build.0 = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|x86.ActiveCfg = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Debug|x86.Build.0 = Debug|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|Any CPU.Build.0 = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|x64.ActiveCfg = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|x64.Build.0 = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|x86.ActiveCfg = Release|Any CPU - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893}.Release|x86.Build.0 = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|x64.ActiveCfg = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|x64.Build.0 = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|x86.ActiveCfg = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Debug|x86.Build.0 = Debug|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|Any CPU.Build.0 = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|x64.ActiveCfg = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|x64.Build.0 = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|x86.ActiveCfg = Release|Any CPU - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0}.Release|x86.Build.0 = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|x64.ActiveCfg = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|x64.Build.0 = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|x86.ActiveCfg = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Debug|x86.Build.0 = Debug|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|Any CPU.Build.0 = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|x64.ActiveCfg = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|x64.Build.0 = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|x86.ActiveCfg = Release|Any CPU - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB}.Release|x86.Build.0 = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|x64.ActiveCfg = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|x64.Build.0 = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|x86.ActiveCfg = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Debug|x86.Build.0 = Debug|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|Any CPU.Build.0 = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|x64.ActiveCfg = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|x64.Build.0 = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|x86.ActiveCfg = Release|Any CPU - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E}.Release|x86.Build.0 = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|x64.ActiveCfg = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|x64.Build.0 = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|x86.ActiveCfg = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Debug|x86.Build.0 = Debug|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|Any CPU.Build.0 = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|x64.ActiveCfg = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|x64.Build.0 = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|x86.ActiveCfg = Release|Any CPU - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78}.Release|x86.Build.0 = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|x64.ActiveCfg = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|x64.Build.0 = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|x86.ActiveCfg = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Debug|x86.Build.0 = Debug|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|Any CPU.Build.0 = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|x64.ActiveCfg = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|x64.Build.0 = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|x86.ActiveCfg = Release|Any CPU - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB}.Release|x86.Build.0 = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|x64.ActiveCfg = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|x64.Build.0 = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|x86.ActiveCfg = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Debug|x86.Build.0 = Debug|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|Any CPU.Build.0 = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|x64.ActiveCfg = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|x64.Build.0 = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|x86.ActiveCfg = Release|Any CPU - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75}.Release|x86.Build.0 = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|x64.ActiveCfg = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|x64.Build.0 = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|x86.ActiveCfg = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Debug|x86.Build.0 = Debug|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|Any CPU.Build.0 = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|x64.ActiveCfg = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|x64.Build.0 = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|x86.ActiveCfg = Release|Any CPU - {A0E20061-FFF6-4444-86E0-4519A0CA6944}.Release|x86.Build.0 = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|x64.ActiveCfg = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|x64.Build.0 = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|x86.ActiveCfg = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Debug|x86.Build.0 = Debug|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|Any CPU.Build.0 = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|x64.ActiveCfg = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|x64.Build.0 = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|x86.ActiveCfg = Release|Any CPU - {9CB90BB8-946F-4962-9365-A97BF5C6550A}.Release|x86.Build.0 = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|x64.ActiveCfg = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|x64.Build.0 = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Debug|x86.Build.0 = Debug|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|Any CPU.Build.0 = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|x64.ActiveCfg = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|x64.Build.0 = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|x86.ActiveCfg = Release|Any CPU - {34D35A41-E974-40C9-8888-3510A0F074AA}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection + {76F747A6-D971-4162-BF35-A226177FCA08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76F747A6-D971-4162-BF35-A226177FCA08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76F747A6-D971-4162-BF35-A226177FCA08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76F747A6-D971-4162-BF35-A226177FCA08}.Release|Any CPU.Build.0 = Release|Any CPU + {600D712C-4ABF-44C4-96C3-B1DEE1F38298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {600D712C-4ABF-44C4-96C3-B1DEE1F38298}.Debug|Any CPU.Build.0 = Debug|Any CPU + {600D712C-4ABF-44C4-96C3-B1DEE1F38298}.Release|Any CPU.ActiveCfg = Release|Any CPU + {600D712C-4ABF-44C4-96C3-B1DEE1F38298}.Release|Any CPU.Build.0 = Release|Any CPU + {131C09C1-BF4D-47C1-AF13-4A7E30866B1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {131C09C1-BF4D-47C1-AF13-4A7E30866B1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {131C09C1-BF4D-47C1-AF13-4A7E30866B1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {131C09C1-BF4D-47C1-AF13-4A7E30866B1E}.Release|Any CPU.Build.0 = Release|Any CPU + {48F43535-3AFC-45E7-A98D-C2609B3B9757}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48F43535-3AFC-45E7-A98D-C2609B3B9757}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48F43535-3AFC-45E7-A98D-C2609B3B9757}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48F43535-3AFC-45E7-A98D-C2609B3B9757}.Release|Any CPU.Build.0 = Release|Any CPU + {A87E1861-07E4-4B7A-9173-0853370A7D4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A87E1861-07E4-4B7A-9173-0853370A7D4E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A87E1861-07E4-4B7A-9173-0853370A7D4E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A87E1861-07E4-4B7A-9173-0853370A7D4E}.Release|Any CPU.Build.0 = Release|Any CPU + {1B21D783-71C3-48D3-91F5-0EEA90FB0DB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B21D783-71C3-48D3-91F5-0EEA90FB0DB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B21D783-71C3-48D3-91F5-0EEA90FB0DB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B21D783-71C3-48D3-91F5-0EEA90FB0DB2}.Release|Any CPU.Build.0 = Release|Any CPU + {01683C11-4721-43AB-B53C-15EBE935B48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01683C11-4721-43AB-B53C-15EBE935B48F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01683C11-4721-43AB-B53C-15EBE935B48F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01683C11-4721-43AB-B53C-15EBE935B48F}.Release|Any CPU.Build.0 = Release|Any CPU + {AF6C70ED-D6A8-4C57-8DB3-EAFF94396049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF6C70ED-D6A8-4C57-8DB3-EAFF94396049}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF6C70ED-D6A8-4C57-8DB3-EAFF94396049}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF6C70ED-D6A8-4C57-8DB3-EAFF94396049}.Release|Any CPU.Build.0 = Release|Any CPU + {9625C977-25BE-48F3-9B6F-BC94B8B799A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9625C977-25BE-48F3-9B6F-BC94B8B799A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9625C977-25BE-48F3-9B6F-BC94B8B799A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9625C977-25BE-48F3-9B6F-BC94B8B799A6}.Release|Any CPU.Build.0 = Release|Any CPU + {19B05730-F97E-43D4-B922-DF4697E5CE5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19B05730-F97E-43D4-B922-DF4697E5CE5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19B05730-F97E-43D4-B922-DF4697E5CE5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19B05730-F97E-43D4-B922-DF4697E5CE5F}.Release|Any CPU.Build.0 = Release|Any CPU + {D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807}.Release|Any CPU.Build.0 = Release|Any CPU + {3CADD95A-179F-4ECF-A49D-4B753832C63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CADD95A-179F-4ECF-A49D-4B753832C63C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CADD95A-179F-4ECF-A49D-4B753832C63C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3CADD95A-179F-4ECF-A49D-4B753832C63C}.Release|Any CPU.Build.0 = Release|Any CPU + {6FA628B8-9696-4847-89F9-E58F470AF4FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FA628B8-9696-4847-89F9-E58F470AF4FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FA628B8-9696-4847-89F9-E58F470AF4FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FA628B8-9696-4847-89F9-E58F470AF4FB}.Release|Any CPU.Build.0 = Release|Any CPU + {F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6}.Release|Any CPU.Build.0 = Release|Any CPU + {EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E}.Release|Any CPU.Build.0 = Release|Any CPU + {E5E8FFBF-1319-4D33-B084-E732656E8A04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5E8FFBF-1319-4D33-B084-E732656E8A04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5E8FFBF-1319-4D33-B084-E732656E8A04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5E8FFBF-1319-4D33-B084-E732656E8A04}.Release|Any CPU.Build.0 = Release|Any CPU + {1FFFDD72-D023-441C-AF49-F1EA78FF7DE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1FFFDD72-D023-441C-AF49-F1EA78FF7DE9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1FFFDD72-D023-441C-AF49-F1EA78FF7DE9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1FFFDD72-D023-441C-AF49-F1EA78FF7DE9}.Release|Any CPU.Build.0 = Release|Any CPU + {946C912C-5BBB-446A-A566-0D1696D19F59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {946C912C-5BBB-446A-A566-0D1696D19F59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {946C912C-5BBB-446A-A566-0D1696D19F59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {946C912C-5BBB-446A-A566-0D1696D19F59}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {FD24E9FF-1097-4777-A418-F2D88C558665} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {23324041-2076-477C-A4BF-B385B8066C6C} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {BFE429EB-4C2E-4BF3-A302-C9C5A2FDA6D7} = {23324041-2076-477C-A4BF-B385B8066C6C} - {136C6154-D300-4B82-80D3-17B637841A2B} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {0A18FCAE-572E-47FF-B8E3-C97ED15132FA} = {23324041-2076-477C-A4BF-B385B8066C6C} - {956F722C-DFD3-435E-9D2E-A0549C4D8BC0} = {23324041-2076-477C-A4BF-B385B8066C6C} - {081E7761-B200-4DBF-8950-941464DECACE} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {5A41E9D5-67F5-447C-8AE2-78FED7A45206} = {081E7761-B200-4DBF-8950-941464DECACE} - {896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC} = {081E7761-B200-4DBF-8950-941464DECACE} - {FC015604-3326-4BCC-9212-C5CB0DFB0D12} = {896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC} - {66F172D3-4AE5-4C6E-A035-0E0AE962F555} = {896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC} - {352E06E3-9D5E-4C2B-836D-C5538F8AA48D} = {896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC} - {94D7D3A3-3640-4791-BE19-CA50C59187C6} = {896B1A79-FEC8-4B7A-8A9C-0CC8EDA2CCFC} - {8FFF49D6-B029-400B-8510-1A088868DFA6} = {FA9D1C95-5585-4DEC-B226-1447A486C376} - {FA9D1C95-5585-4DEC-B226-1447A486C376} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {0E9C83A8-A413-4921-8F39-59519BFF939B} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {A01F43A5-B4ED-47C5-B426-D1AC3C94B5E7} = {0E9C83A8-A413-4921-8F39-59519BFF939B} - {446DD80A-CAF4-4E19-B87E-A43135E2D59D} = {0E9C83A8-A413-4921-8F39-59519BFF939B} - {24CE7080-FF44-46BF-886F-456F30E54442} = {0E9C83A8-A413-4921-8F39-59519BFF939B} - {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} = {0E9C83A8-A413-4921-8F39-59519BFF939B} - {F49FCBFD-2041-4936-89CF-095C77555CEC} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {21BFFC67-4844-440A-8AA4-D4E6AC2DFE83} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {4C5A0F3B-2333-4ED8-998B-CB891D786DD1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {28155265-C538-4D63-A9A4-2A225115BCC3} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {C1FE5A2C-7EF1-4112-B220-BB7EB60B6E41} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {224CB2E1-3923-4BA6-A202-DA290E55725A} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {063B37FE-87A0-41BA-A61A-6870D4AEB76F} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7C56DB2E-0254-4A05-AE81-F09CE9B28C6F} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {67CE45B7-997F-4396-AB90-FC6C7FBA07C3} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {B6DC6862-C2CB-43D7-AE0F-7A3A5EB41A34} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {ADFB4E80-301E-416F-B932-86FF242F5BBA} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {B2C295D9-70AC-4D6E-BEC0-ABDBA8C3FC18} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {C02D75ED-33EE-46D5-9AF1-A54E01206161} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {B81A79D9-6CEF-4FEB-9E40-CAB74F802E9E} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {33C55873-FF79-4822-BDC5-CBFBCF78C12A} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {C3931003-EC0A-41D6-A481-8D3CD28556F4} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {AFD7A0F4-6C58-4E9D-A40B-1F03C1AFA136} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7FB49D81-CE37-47D8-B62D-5954F72DE052} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {6CCD4C39-C953-4281-8135-1316B1A68248} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {E9754021-FBDD-460C-B966-B41019E3EF98} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7483030B-2CA2-4B60-9188-6BA5633EFBF1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7BAAFB8D-4FDE-4C77-9093-8ECAF93C1890} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {3AE416D7-C523-415B-A3AF-B790A1B5C05F} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {75DC2611-F3A9-4C17-A647-454097698434} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {2FBBB8C4-CCF3-4421-8514-9BC91A0933C8} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7BB402A0-274C-4476-A9F9-884045F30376} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {2A3247AB-750D-48E6-9B99-A876397404D6} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {BF9F8BA0-81F1-457D-89DF-9466FD4868C1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {4451DE2E-B803-46E2-A911-C4FF5B183FD4} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {3934B088-9BB7-4D48-BDC3-DA2E9D0545E1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {63F82AE3-05F1-4C5C-A4C9-18EBFA01DF74} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {800B088D-2C80-4B72-84C3-3FF1F3DCB42A} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {C0066476-7E6C-47B0-B6AD-87669FF643D1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {F1632267-F122-4F27-BDD9-501C8D087DF2} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {318FBDE5-3045-4DE4-A489-F5A314D4D4B5} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {B56BD145-5D19-4049-9700-CA1F024CE8A8} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {F7181088-183E-4267-B13D-59A8EE90FAD1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {3FCBE160-964B-4066-A9D1-ADFEAAFAF0D4} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {5B084D8A-795F-4641-B89D-823A369AB84C} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {DB5446E8-3884-4C77-8E17-F5C67584C514} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {5AC8140B-D9C2-4317-948D-A447B846493A} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {83A352A0-F1EE-4091-8785-25BBA1C5F4B1} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {D8E37A9A-E94F-4A6A-9913-7EFB5494CE70} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {E247B4A2-5EB3-451B-8D24-06DB83023B85} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {107CE915-3387-4A0D-A8C7-0859A0D3DF80} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {9EA0B2F1-9C74-4817-9458-A8AB20B4CED7} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {A48E9ECA-FA1A-4851-BF14-E434FCBBAB84} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {4F8FAA99-0491-4857-9252-685BF3B46AAB} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {7E00824E-34C5-4162-AA26-86F84A4FBA42} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {1D221A69-EE04-476A-B660-32DFDB2DC162} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {3BC72F4A-8B32-490A-9EA7-B68320991E15} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {6D2F52DB-2DB4-49EF-8DD1-212FA33CE034} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {8D534FE1-6113-457A-97DD-FD42782580A5} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {0651C5EF-50AA-4598-8D9C-8F210ADD8490} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {3908DEF6-7403-49F5-B8EC-5B3B12C325D4} = {FA9D1C95-5585-4DEC-B226-1447A486C376} - {020A8E88-B607-4281-BA0D-5ED03484A201} = {FA9D1C95-5585-4DEC-B226-1447A486C376} - {7BB1DE56-DA1C-4776-A961-B810574E1EF4} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {E2ABDF45-C329-47B2-8E09-B7298E2557F7} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {7F347EDA-EC20-4E3F-9C25-CF32ED7D9642} = {E2ABDF45-C329-47B2-8E09-B7298E2557F7} - {49BC383A-D7E6-4013-93C7-371479B984CC} = {E2ABDF45-C329-47B2-8E09-B7298E2557F7} - {043852EA-FBD4-4F42-9CDC-92078F9EF942} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {D860135C-01A2-4597-B1B2-DA4882C09798} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {A82D0553-7880-462E-B8B2-1DF334DF6FBA} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {96F4E9BD-2B70-4E2E-BB4D-91158F60A613} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {C052CB0F-8A58-40C0-8A26-BEACEB8CD9A7} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {D4514077-0917-49CC-A222-FE2988D6BECE} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {70379A09-9EDB-41F7-81CF-34ABE525693D} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {8180C066-71E5-4D45-8DFE-EF254FE86A30} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {085677FA-4B70-430F-8675-77091EBD9ED5} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {899DB28C-722D-46A1-9A17-378DF19FA526} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {65E16908-BD7A-4FC2-BC23-FD8194039C5B} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {3D945DE0-1E2D-439E-991D-9C65C325F82F} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {D27D10F0-F22B-49B5-9933-375BB120AD70} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {DFA0E841-33E5-4533-AF00-964E21A141B8} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {3501BAD6-406A-49BC-BE0E-5A49A3AAAE6A} = {23324041-2076-477C-A4BF-B385B8066C6C} - {50D5EAD9-78BB-4D1B-AF37-130BF3AF82FD} = {3501BAD6-406A-49BC-BE0E-5A49A3AAAE6A} - {D00DC827-E7DF-48A9-9BEB-E1ED2F73C990} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {93041A0D-9BA2-4BAB-B01E-3003AEAC0A31} = {D00DC827-E7DF-48A9-9BEB-E1ED2F73C990} - {757F2B10-B69D-4C19-BFE0-D99070A00AD9} = {D00DC827-E7DF-48A9-9BEB-E1ED2F73C990} - {13AAF660-1E37-4C63-B2B7-49140B9F5049} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {734DF4E8-9F89-4D0B-AB0B-022FED9849EA} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {184BB500-CFDB-4AA6-AF33-9CD22AFFB224} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {4965C44F-DAE6-4EDA-991F-4390595A20BA} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {74140997-E9C8-4CCC-9235-C6E2DABAF8D3} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {4B50A1B4-AB5E-469B-A8AC-635E023EC77C} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {BEF61E9E-2EC1-44B8-B677-321329DEF205} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {8B8397F0-7A39-480F-8C19-0A96F121D57A} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {45407BC4-DF4C-49BD-ADEF-706683C90E14} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {8D84B804-168F-4EAA-BC09-F55A35A29887} = {FA9D1C95-5585-4DEC-B226-1447A486C376} - {8DCB2EB4-D0DE-4EF9-ACB3-332055D594CB} = {8D84B804-168F-4EAA-BC09-F55A35A29887} - {ABD1AF6D-D9D1-4157-A1FF-AC98A054DA92} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {B6017708-8E8C-4230-95AD-2D06237D68D4} = {ABD1AF6D-D9D1-4157-A1FF-AC98A054DA92} - {90471225-AC23-424E-B62E-F6EC4C6ECAC0} = {ABD1AF6D-D9D1-4157-A1FF-AC98A054DA92} - {59C98A03-427A-40A0-8467-C85C4807907F} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {0030C8EE-8EBB-499F-A310-957BE176AEB1} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {E51CD67A-A6D9-4850-A8A6-348B23C5DA7F} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {6EADA376-E83F-40B7-9539-71DD17AEF7A4} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {19586F56-E799-49EA-9B3C-910BF2D4976A} = {6EADA376-E83F-40B7-9539-71DD17AEF7A4} - {00D8F04F-2063-4F4E-B793-0F9DCF2BCFA9} = {23324041-2076-477C-A4BF-B385B8066C6C} - {6B703607-0D63-4A25-BB6A-EC1FBBD77A8C} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {F16EDD0F-5ABE-4B25-98EE-8397E55B5CBA} = {23324041-2076-477C-A4BF-B385B8066C6C} - {FF526329-094A-4B25-ABC5-750D62E48101} = {23324041-2076-477C-A4BF-B385B8066C6C} - {377A7D9A-2691-4683-AB81-03B1642B3A78} = {FA9D1C95-5585-4DEC-B226-1447A486C376} - {B9A8D738-FE7D-4860-A446-4A03E3DDEB74} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {F2CF5D32-4B41-425E-B229-8FFC48F88063} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {F3B7A9D6-5B15-45E8-925B-20B5BBD33428} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {A768A346-6388-4881-8FF6-15F0163B76E0} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {2C3099EA-C01C-4639-8300-153A9BD79292} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {FFD95BCB-5209-48CC-8C2B-33189CCA0A6E} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {07DD7965-849F-4311-9DAD-07C1CCF8BEA4} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {4712BFE1-67DA-407F-8BDC-FAF529E5BF94} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {E8DE9BA0-8391-4278-926D-DD931C4172AF} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {41EEBDB3-75C4-4A60-B4D5-673FBCA791E7} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {BD86AB4D-74FD-429D-9AEE-79B0C429BB3A} = {41EEBDB3-75C4-4A60-B4D5-673FBCA791E7} - {07915304-3B6B-400C-94F8-C49EF5F347E7} = {41EEBDB3-75C4-4A60-B4D5-673FBCA791E7} - {8C7A30EF-C257-421C-AABD-D42FF6D955A5} = {41EEBDB3-75C4-4A60-B4D5-673FBCA791E7} - {DE477265-8F7D-4D7F-B5DA-F3C5DE631788} = {3501BAD6-406A-49BC-BE0E-5A49A3AAAE6A} - {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {F9AA41B4-1C36-472B-A1A5-4A10EE0A79FC} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {84F51960-D814-450D-80EB-D9E46A1D5187} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {D3D9891B-88E6-46AD-919C-7EC4EABE5266} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {462A4DDB-3B81-46C7-BFC8-3AD9269BCF85} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {39B598E9-44BA-4A61-A1BB-7C543734DBA6} = {DFA0E841-33E5-4533-AF00-964E21A141B8} - {29792F05-EFB9-4323-94FC-01309B44BAF9} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {FAC2B206-8A11-4387-A7B4-645671641339} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {2C22A70C-12B3-4BCF-A273-1B0A1BD432BE} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {1431D746-63CC-4498-BCD4-7A68E225ACF1} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {C7E1C064-DF0A-4809-A3E7-3A20E8995DE1} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {58E7EE89-B67C-482D-9605-04B3BCC5CFBB} = {2F547104-C74A-4A84-8980-D1B973CC40C1} - {D16B9145-C5CB-4E2A-A325-07E9FC89F3EA} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {4001CDD7-6F73-4C18-966C-27E3BB1208F2} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {1C687F7A-54A8-4BC8-82FB-0424AEA537FB} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {6F7769EF-F89C-46AA-9EB1-2828CC2AA089} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {A87F77B1-D38E-46E5-822A-097F0370D1D0} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {0BD1088B-D0DB-4080-B2BE-1CF5A97EB518} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {6E61C442-66B0-429E-BE5D-4ACD0045F0A5} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {70B06D00-CEA9-47CD-8781-10CA48376046} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {28760ABB-EB0F-4216-97B0-0DAC5FC27533} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {5E5433D4-0285-48AC-82EA-FA0F8C227707} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {BDADD4AA-80D5-439E-8CFE-2744395BD4F8} = {DFA0E841-33E5-4533-AF00-964E21A141B8} - {E7017145-BC11-408A-93F5-63D28F7DE79F} = {BDADD4AA-80D5-439E-8CFE-2744395BD4F8} - {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} = {4FD2509D-2D85-4ED3-9A64-1691E62B6900} - {20A4A2D1-D699-4D71-AA97-950154638576} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} - {7803ADF5-D9C5-4262-9031-58AF9E050542} = {20A4A2D1-D699-4D71-AA97-950154638576} - {FDC37D4C-0CA1-4D98-92B4-4DB5CADB1BD2} = {20A4A2D1-D699-4D71-AA97-950154638576} - {69321DDA-65DF-412F-BDDA-9306B8EE98D0} = {20A4A2D1-D699-4D71-AA97-950154638576} - {4270B2E3-5CA2-4DB8-B3D9-D99F161A0016} = {20A4A2D1-D699-4D71-AA97-950154638576} - {674A6DFE-22C7-482B-88B0-D065678D4A82} = {20A4A2D1-D699-4D71-AA97-950154638576} - {88709BA6-3345-4ED5-A3C8-06CE98E163B9} = {20A4A2D1-D699-4D71-AA97-950154638576} - {9DC25BF9-91C3-4F93-896B-FB97831E3AA6} = {20A4A2D1-D699-4D71-AA97-950154638576} - {50810C05-6BB1-4E72-A97A-6124375A42E1} = {20A4A2D1-D699-4D71-AA97-950154638576} - {59041F3C-5C88-45D3-BB93-0F1617DCA622} = {20A4A2D1-D699-4D71-AA97-950154638576} - {37242743-E379-4DD4-B150-483E357A4F83} = {20A4A2D1-D699-4D71-AA97-950154638576} - {50B13254-8B94-4F45-BD2F-F6DBE4B7A2BF} = {20A4A2D1-D699-4D71-AA97-950154638576} - {235C692C-AD31-443F-872F-BD57E75830C4} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} - {43896917-9904-4AE7-B634-32850471789F} = {235C692C-AD31-443F-872F-BD57E75830C4} - {89B03DDB-EBCA-4E6A-80AB-9FFD48110097} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {0DF430D1-39E6-46F5-AE58-B6DE0BD3F72B} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {591836FE-0DAC-48A5-86AB-4C317A6B009A} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {960CCDC0-5327-4DD6-A4FE-90466B27F9C9} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {749B0BAE-63F0-4B22-A883-CD521F725DAA} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {A1D90A8D-B1FE-463A-884E-AEC201FB75EF} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {60AFD661-4BE5-4040-896A-CE2EA95F98B7} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {71FF6EB5-2AA9-4B6B-8C7C-CE9AC889A50E} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {AF8E3CF5-EEAD-477C-80DF-E0CF576D5A73} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {4CFC3947-9763-4FD1-869B-EEDFA7EB53AC} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {3076E116-F160-4C5D-A3D9-B3B51845675C} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {A1890199-5E68-4AF3-A2AD-21A1D84AF22B} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {358A6DC8-866C-4C8D-8F41-682F6683E683} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {CBE8E2D0-B1DE-422D-BF66-7FF02AE81CB9} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {5C59C1E1-6392-41AA-AD73-6DA34B1B369B} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {51868FC9-C052-4C2D-98F9-10379AAD2671} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {23172004-FF6B-45D8-9653-944CECE741E1} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {04E05BC4-5769-4FC1-BBA0-06EC9D8E3130} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {98C25360-F03A-4929-959B-C80A48D21FF2} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {FD32964B-4144-43CD-B313-2A5DD6A05DEA} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {859A77A8-73F0-447B-9076-B42D5CA3CA33} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {92FCD7CC-52BE-487F-B990-1B5CACF9D40F} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {64E177FC-38AA-45AE-B748-419E91F95EC7} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {F16B4AE5-F68F-42A2-8AB5-029282032CE0} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {AB59F09A-9BD9-4CBB-8497-87B768C7C949} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {86B6B40E-EA8F-47F0-9D1F-FDBAFBE2842C} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {D1DD841D-9F34-47A6-91EB-A8632D577BD7} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {AE5A7BBD-E303-46C4-9DDC-29E80C9128F5} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {0D1E5AD9-E329-4B84-A5FE-FC1EE33BF038} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {477046D2-AF81-4E2B-83BD-20176A971FDD} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {8881342D-6247-4826-9963-87D4B029ECB6} = {757F2B10-B69D-4C19-BFE0-D99070A00AD9} - {514DED00-4DA3-46D1-B2E8-10CE826CD52D} = {081E7761-B200-4DBF-8950-941464DECACE} - {2F547104-C74A-4A84-8980-D1B973CC40C1} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} - {380468AD-B44D-456C-8DED-35467D11AC2F} = {2F547104-C74A-4A84-8980-D1B973CC40C1} - {832251B9-B1A2-450A-8FB8-41F600CCA616} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {49ABFB5A-A0AF-45C1-921B-DA30CBDD121F} = {832251B9-B1A2-450A-8FB8-41F600CCA616} - {507ED409-A2FD-43BB-AC7C-778B92BD40CF} = {832251B9-B1A2-450A-8FB8-41F600CCA616} - {28D863B1-B60C-4C08-8661-EB820A5B78D2} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {3E30D674-9282-4297-AD1F-9B233A166308} = {0651C5EF-50AA-4598-8D9C-8F210ADD8490} - {C04680A3-C92A-4631-BD1E-8E4553A3F969} = {2F547104-C74A-4A84-8980-D1B973CC40C1} - {606214B8-07FC-436F-9523-02AF32E1AB1E} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {782B6A7E-9F04-429A-9DCD-D7273AA3882E} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {DA49B8B8-40FF-4BDD-AC48-8B310404DB63} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {B15922CB-815C-4038-B635-EE2D8A8F700B} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {EEFF37DA-E4F2-406E-AF97-8615BB7BC34C} = {B15922CB-815C-4038-B635-EE2D8A8F700B} - {BD19250B-E143-4F4E-9E1D-18829CCB3642} = {B15922CB-815C-4038-B635-EE2D8A8F700B} - {225BA79C-36FE-421A-85E4-D15F8B61869B} = {E2ABDF45-C329-47B2-8E09-B7298E2557F7} - {278FE083-D2F7-4DD2-9D27-6AD883E3A4B8} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {4D65197C-79B2-40CF-846E-C1EAB4F6EEA2} = {278FE083-D2F7-4DD2-9D27-6AD883E3A4B8} - {8D02DFEB-121A-449B-BC39-09C3F9A88E07} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {36C38837-8250-42F9-ABDA-DEFC1AB129E1} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {54F439B6-36E4-4FB0-8731-F73D42AD921F} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {88142694-C095-4F56-B11D-9C8FC5EFC529} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {2517B906-4B93-4B5F-8D18-AFB2BAB26121} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {62513482-8713-4568-9086-247FE554B4E4} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {6E79F43A-D9EE-401B-8CAE-0635382F975F} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {22FDAB62-4DE6-4896-BB6E-CC19BBBE5951} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {100C6D6A-F8B9-4E41-B82C-F665C3BD2160} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {950FCED7-5720-4855-ACA3-B0EAB246F669} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {1F9D7264-DA42-4351-AE08-6ABB7597B8E5} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {322DAAC0-567A-43C9-BFE1-D3C92B5573DB} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {5CED5BE9-5348-4AFD-AF34-147F81F8C9C6} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} - {F86248D7-5012-4820-ADBE-BCE8B701581D} = {5CED5BE9-5348-4AFD-AF34-147F81F8C9C6} - {534FCB74-0E82-42AF-AF94-48EE634F37A8} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {AA6EDF22-8128-476C-97E0-0CEA4689624E} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {3FA488D6-239F-4509-A7F9-5CFE6B2517CD} = {AA6EDF22-8128-476C-97E0-0CEA4689624E} - {D218E3C8-44C7-472F-B147-3C9DA8B0C2EC} = {AA6EDF22-8128-476C-97E0-0CEA4689624E} - {C66E285B-4DED-46FD-95A9-7B376C680412} = {D218E3C8-44C7-472F-B147-3C9DA8B0C2EC} - {1F16CA6E-9A7E-452E-BE37-1201E506B661} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {3DADBCD8-5C5E-487C-8616-55A56BC351EF} = {D218E3C8-44C7-472F-B147-3C9DA8B0C2EC} - {1314FEAF-71F7-42A8-881F-091384CE601B} = {D218E3C8-44C7-472F-B147-3C9DA8B0C2EC} - {5DD2A122-34CB-45B9-8D89-42DB5CE9FD17} = {39B598E9-44BA-4A61-A1BB-7C543734DBA6} - {7C91F372-8716-42F6-BB5A-6C94B7FC0513} = {20A4A2D1-D699-4D71-AA97-950154638576} - {456D740A-3612-4CFB-BB5B-AF7E88EFBA26} = {0E9C83A8-A413-4921-8F39-59519BFF939B} - {B6A87FA1-0A71-434E-A808-C93072584E6D} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {1D073CF7-A0D9-49B0-8A2C-B01EAD1B5D45} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {33EA7CFE-836C-435B-B0D7-309F0759BDF0} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {298B2915-B46F-4A29-AF9E-480C3B39012A} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {A87647D1-A388-42EC-9545-3F46F3C4BAE5} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {4CAE308D-FB8B-432B-9399-B567DC2A5C73} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {C207E481-A5B4-4092-ADC2-14A93443152B} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {B97931ED-286D-4E5C-A75A-DF9B49F64C8F} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {3E87F04E-EE44-4348-B9BA-26AE2A5418D5} = {CF69D5C3-4ACE-4458-BA5A-0E9A3B294CDC} - {73A4E694-E416-4BAC-9C17-87B7E5F602FA} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {A84C539A-3CB7-474D-9673-F7CD1DFA4F1A} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {CF943055-E40D-4AF2-8FD2-C2E5849D11EB} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {FB16A3D6-8401-4421-AD6A-DFC85FD2DCC7} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {58FECE86-7530-4E6F-BA61-512BE44DEA83} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {82626916-C5F3-46E7-B0EC-1D38191450C7} = {58FECE86-7530-4E6F-BA61-512BE44DEA83} - {8773396C-5EDF-498C-97D7-1D2728CB969B} = {F2CF5D32-4B41-425E-B229-8FFC48F88063} - {4031A5EB-820B-478D-A656-85C93210054E} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {79680317-F985-4727-81D3-8BF2228AEC20} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {5DB2BB47-77D3-4EB7-8037-64D88FDE4785} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {02D462BA-B585-4B47-9FFC-65AFF0BF0F80} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {E1624E31-C702-42EC-AC47-20358B3CCF49} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {82D76E01-3166-4549-A433-4C2C4FD6788E} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {ABC4717F-2863-4B79-8812-7C1D851EE336} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {F58B1280-668E-4B4A-ADA5-6F0F54B6295A} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} = {16AFCF73-8CC1-4B5D-8969-A90F468DC6D5} - {535018A8-FFD8-4D3E-97FD-C6A3E23AF48A} = {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} - {65E895B6-D0A6-4C5C-A090-07C7590F48B9} = {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} - {7DB60101-9D99-4FD6-89AD-29648F537333} = {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} - {22DA5C34-2859-4599-97DA-9F9E3B7CEEA4} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {AFF43F5B-46EC-4560-8E92-6D241C0D9F43} = {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} - {EEFD27E0-F0F3-45EF-A2CB-D9C8135BC893} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {1E7C6166-58B2-46B3-A9BA-18099BD83AF0} = {20A4A2D1-D699-4D71-AA97-950154638576} - {E77BE8DB-3C74-42EB-9B65-67EAAA9AD7DB} = {15FC3D1A-25D7-446B-87A7-B45BA3C2225F} - {D1E4EDC7-0A06-498A-B0F9-275B7D508A0E} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {32BE0963-C372-4BCA-A7C2-3CA844FDBB78} = {72E7FA64-5B1E-477D-BD30-63B7F206B3C4} - {D35926CB-6F79-4B5A-A3D8-F60D660D55EB} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {91E22BDE-9DBA-4AB0-97C3-66DA3EF15B75} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} - {A0E20061-FFF6-4444-86E0-4519A0CA6944} = {49BC383A-D7E6-4013-93C7-371479B984CC} - {FD0C9C4B-3777-4755-A87B-60FE65D92750} = {6842A2C6-5C7B-42DD-9825-0EDE91BFEBF7} - {9CB90BB8-946F-4962-9365-A97BF5C6550A} = {FD0C9C4B-3777-4755-A87B-60FE65D92750} - {34D35A41-E974-40C9-8888-3510A0F074AA} = {90471225-AC23-424E-B62E-F6EC4C6ECAC0} + {48F43535-3AFC-45E7-A98D-C2609B3B9757} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {B681E21A-47A2-4635-96EE-60D8D63FBEA9} = {475AEF7B-0154-4989-AF82-97E3A95A96AF} + {AF6C70ED-D6A8-4C57-8DB3-EAFF94396049} = {B681E21A-47A2-4635-96EE-60D8D63FBEA9} + {5CD096DB-6C44-48F1-9093-AD4C84B6B7EC} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {131C09C1-BF4D-47C1-AF13-4A7E30866B1E} = {5CD096DB-6C44-48F1-9093-AD4C84B6B7EC} + {2452CED9-5211-4A19-BA44-230EC28F409E} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {FA31E483-AD35-4E44-B10A-B33C4539DBCB} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {24BD769C-7379-400C-A67F-00C34756DA32} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {EC4D7B06-D277-4411-BD7B-71A6D37683F0} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {19B05730-F97E-43D4-B922-DF4697E5CE5F} = {EC4D7B06-D277-4411-BD7B-71A6D37683F0} + {76F747A6-D971-4162-BF35-A226177FCA08} = {24BD769C-7379-400C-A67F-00C34756DA32} + {1B21D783-71C3-48D3-91F5-0EEA90FB0DB2} = {2452CED9-5211-4A19-BA44-230EC28F409E} + {9625C977-25BE-48F3-9B6F-BC94B8B799A6} = {FA31E483-AD35-4E44-B10A-B33C4539DBCB} + {D9ACA4E5-712F-4F15-B8B8-50C85D23D1D5} = {A5578D12-9E77-4647-8C22-0DBD17760BFF} + {FCD75AA5-1536-433E-BA9B-3D698C2255EB} = {A5578D12-9E77-4647-8C22-0DBD17760BFF} + {49D426BF-A009-43D5-A9E2-EFAAAA7196FC} = {A5578D12-9E77-4647-8C22-0DBD17760BFF} + {AB25C482-DA9D-4335-8E26-2F29C3700152} = {A5578D12-9E77-4647-8C22-0DBD17760BFF} + {A87E1861-07E4-4B7A-9173-0853370A7D4E} = {D9ACA4E5-712F-4F15-B8B8-50C85D23D1D5} + {01683C11-4721-43AB-B53C-15EBE935B48F} = {FCD75AA5-1536-433E-BA9B-3D698C2255EB} + {D2B9C43F-A80D-4C9A-9643-BC1AC1B4E807} = {49D426BF-A009-43D5-A9E2-EFAAAA7196FC} + {600D712C-4ABF-44C4-96C3-B1DEE1F38298} = {AB25C482-DA9D-4335-8E26-2F29C3700152} + {3CADD95A-179F-4ECF-A49D-4B753832C63C} = {475AEF7B-0154-4989-AF82-97E3A95A96AF} + {6FA628B8-9696-4847-89F9-E58F470AF4FB} = {5CD096DB-6C44-48F1-9093-AD4C84B6B7EC} + {6E739132-EEAB-43A5-83C7-EB58C50D03A1} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {F16C0AB9-DE7E-4C09-9EE9-DAA8B8E935A6} = {EC4D7B06-D277-4411-BD7B-71A6D37683F0} + {FE4414F8-5370-445D-9F24-C3AD3223F299} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {EF07CBB5-D253-4CA9-A5DA-8B3DF2B0DF8E} = {FE4414F8-5370-445D-9F24-C3AD3223F299} + {AF13F7C9-4EE2-403E-B3D2-C4C2E45D9EF3} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {1FFFDD72-D023-441C-AF49-F1EA78FF7DE9} = {AF13F7C9-4EE2-403E-B3D2-C4C2E45D9EF3} + {12B4D1CB-8938-4EC4-8895-79C4E6ABD1E8} = {6077EDD4-F16F-4CA4-B72E-E4627D64B104} + {662A1AEC-91F2-48FA-AA29-6F27038D30F2} = {12B4D1CB-8938-4EC4-8895-79C4E6ABD1E8} + {946C912C-5BBB-446A-A566-0D1696D19F59} = {662A1AEC-91F2-48FA-AA29-6F27038D30F2} + {5E20252F-E2A0-46C9-BBEF-4CE5C96D0E07} = {DD29EA8F-B1A6-45AA-8D2E-B38DA56D9EF6} + {E5E8FFBF-1319-4D33-B084-E732656E8A04} = {5E20252F-E2A0-46C9-BBEF-4CE5C96D0E07} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {F5273D7F-3334-48DF-94E3-41AE6816CD4D} + SolutionGuid = {78D2CF6A-60A1-43E3-837B-00B73C9DA384} EndGlobalSection EndGlobal diff --git a/Silk.NET.sln.DotSettings b/Silk.NET.sln.DotSettings index 8b2b19f6a6..4c074af525 100644 --- a/Silk.NET.sln.DotSettings +++ b/Silk.NET.sln.DotSettings @@ -1,68 +1,14 @@  - - True - <?xml version="1.0" encoding="utf-16"?><Profile name="Complete Cleanup"><CSReorderTypeMembers>True</CSReorderTypeMembers><XMLReformatCode>True</XMLReformatCode><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" /><RemoveCodeRedundanciesVB>True</RemoveCodeRedundanciesVB><HtmlReformatCode>True</HtmlReformatCode><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><VBOptimizeImports>True</VBOptimizeImports><VBShortenReferences>True</VBShortenReferences><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><VBReformatCode>True</VBReformatCode><VBFormatDocComments>True</VBFormatDocComments><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><CSUpdateFileHeader>True</CSUpdateFileHeader><IDEA_SETTINGS>&lt;profile version="1.0"&gt; - &lt;option name="myName" value="Complete Cleanup" /&gt; -&lt;/profile&gt;</IDEA_SETTINGS></Profile> - - Required - Required - Required - Required - DoNotTouch - DoNotTouch - API + False CL - EGL - GUID - IOS - XML - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - - True - True - - True - True - True - True - True - True - True + True + True + True + True + True + True + True True - True - 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/build.ps1 b/build.ps1 index e2e2a2f7da..74b5ff2cc8 100644 --- a/build.ps1 +++ b/build.ps1 @@ -13,16 +13,15 @@ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent # CONFIGURATION ########################################################################### -$BuildProjectFile = "$PSScriptRoot\build\nuke\Silk.NET.NUKE.csproj" +$BuildProjectFile = "$PSScriptRoot\eng\build\Silk.NET.NUKE.csproj" $TempDirectory = "$PSScriptRoot\\.nuke\temp" $DotNetGlobalFile = "$PSScriptRoot\\global.json" $DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" -$DotNetChannel = "Current" +$DotNetChannel = "STS" -$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1 $env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 -$env:DOTNET_MULTILEVEL_LOOKUP = 0 +$env:DOTNET_NOLOGO = 1 ########################################################################### # EXECUTION @@ -61,9 +60,15 @@ else { ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } } $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" + $env:PATH = "$DotNetDirectory;$env:PATH" } -Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)" +Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" + +if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { + & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null + & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null +} ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } diff --git a/build.sh b/build.sh index 493aeda787..1a870db0e4 100755 --- a/build.sh +++ b/build.sh @@ -9,16 +9,15 @@ SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) # CONFIGURATION ########################################################################### -BUILD_PROJECT_FILE="$SCRIPT_DIR/build/nuke/Silk.NET.NUKE.csproj" +BUILD_PROJECT_FILE="$SCRIPT_DIR/eng/build/Silk.NET.NUKE.csproj" TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp" DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json" DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh" -DOTNET_CHANNEL="Current" +DOTNET_CHANNEL="STS" export DOTNET_CLI_TELEMETRY_OPTOUT=1 -export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 -export DOTNET_MULTILEVEL_LOOKUP=0 +export DOTNET_NOLOGO=1 ########################################################################### # EXECUTION @@ -54,9 +53,15 @@ else "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path fi export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet" + export PATH="$DOTNET_DIRECTORY:$PATH" fi -echo "Microsoft (R) .NET Core SDK version $("$DOTNET_EXE" --version)" +echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)" + +if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then + "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true + "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true +fi "$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet "$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@" diff --git a/build/Install-WindowsSDK.ps1 b/build/Install-WindowsSDK.ps1 deleted file mode 100644 index 8c44dee083..0000000000 --- a/build/Install-WindowsSDK.ps1 +++ /dev/null @@ -1,10 +0,0 @@ - -$WinSdkTempDir = "C:\WinSdkTemp\" -$WinSdkSetupExe = "C:\WinSdkTemp\" + "WinSdkSetup.exe" - -mkdir $WinSdkTempDir - -$client = [System.Net.WebClient]::new() -$client.DownloadFile("https://go.microsoft.com/fwlink/p/?linkid=2120843", $WinSdkSetupExe) - -Start-Process -Wait $WinSdkSetupExe "/features+ /q" \ No newline at end of file diff --git a/build/cache/assimp.json.gz b/build/cache/assimp.json.gz deleted file mode 100644 index 0e34753d26..0000000000 Binary files a/build/cache/assimp.json.gz and /dev/null differ diff --git a/build/cache/cl.json.gz b/build/cache/cl.json.gz deleted file mode 100644 index 308956aef6..0000000000 Binary files a/build/cache/cl.json.gz and /dev/null differ diff --git a/build/cache/core.json.gz b/build/cache/core.json.gz deleted file mode 100644 index ec741834ac..0000000000 Binary files a/build/cache/core.json.gz and /dev/null differ diff --git a/build/cache/d2d.json.gz b/build/cache/d2d.json.gz deleted file mode 100644 index 6481ee2dd5..0000000000 Binary files a/build/cache/d2d.json.gz and /dev/null differ diff --git a/build/cache/d3d11.json.gz b/build/cache/d3d11.json.gz deleted file mode 100644 index 3f7161d644..0000000000 Binary files a/build/cache/d3d11.json.gz and /dev/null differ diff --git a/build/cache/d3d12.json.gz b/build/cache/d3d12.json.gz deleted file mode 100644 index d52efbdf3e..0000000000 Binary files a/build/cache/d3d12.json.gz and /dev/null differ diff --git a/build/cache/d3d9.json.gz b/build/cache/d3d9.json.gz deleted file mode 100644 index 41818ae1c8..0000000000 Binary files a/build/cache/d3d9.json.gz and /dev/null differ diff --git a/build/cache/d3dcompiler.json.gz b/build/cache/d3dcompiler.json.gz deleted file mode 100644 index eca4c53faf..0000000000 Binary files a/build/cache/d3dcompiler.json.gz and /dev/null differ diff --git a/build/cache/dcomp.json.gz b/build/cache/dcomp.json.gz deleted file mode 100644 index db5c77f059..0000000000 Binary files a/build/cache/dcomp.json.gz and /dev/null differ diff --git a/build/cache/dstorage.json.gz b/build/cache/dstorage.json.gz deleted file mode 100644 index 15fd0b2709..0000000000 Binary files a/build/cache/dstorage.json.gz and /dev/null differ diff --git a/build/cache/dwrite.json.gz b/build/cache/dwrite.json.gz deleted file mode 100644 index e2e6f76e8e..0000000000 Binary files a/build/cache/dwrite.json.gz and /dev/null differ diff --git a/build/cache/dxc.json.gz b/build/cache/dxc.json.gz deleted file mode 100644 index bd53c7467a..0000000000 Binary files a/build/cache/dxc.json.gz and /dev/null differ diff --git a/build/cache/dxgi.json.gz b/build/cache/dxgi.json.gz deleted file mode 100644 index 0e969442ff..0000000000 Binary files a/build/cache/dxgi.json.gz and /dev/null differ diff --git a/build/cache/dxva.json.gz b/build/cache/dxva.json.gz deleted file mode 100644 index 223d14cb2f..0000000000 Binary files a/build/cache/dxva.json.gz and /dev/null differ diff --git a/build/cache/gl.json.gz b/build/cache/gl.json.gz deleted file mode 100644 index 7c47c04cb9..0000000000 Binary files a/build/cache/gl.json.gz and /dev/null differ diff --git a/build/cache/glcore.json.gz b/build/cache/glcore.json.gz deleted file mode 100644 index c5afff0eab..0000000000 Binary files a/build/cache/glcore.json.gz and /dev/null differ diff --git a/build/cache/gles2.json.gz b/build/cache/gles2.json.gz deleted file mode 100644 index ff00cd172f..0000000000 Binary files a/build/cache/gles2.json.gz and /dev/null differ diff --git a/build/cache/openxr.json.gz b/build/cache/openxr.json.gz deleted file mode 100644 index c0403ed384..0000000000 Binary files a/build/cache/openxr.json.gz and /dev/null differ diff --git a/build/cache/sdl.json.gz b/build/cache/sdl.json.gz deleted file mode 100644 index 230917d0bd..0000000000 Binary files a/build/cache/sdl.json.gz and /dev/null differ diff --git a/build/cache/shaderc.json.gz b/build/cache/shaderc.json.gz deleted file mode 100644 index 51e7ddccb2..0000000000 Binary files a/build/cache/shaderc.json.gz and /dev/null differ diff --git a/build/cache/spirv-cross.json.gz b/build/cache/spirv-cross.json.gz deleted file mode 100644 index 4df53e75bf..0000000000 Binary files a/build/cache/spirv-cross.json.gz and /dev/null differ diff --git a/build/cache/spirv-reflect.json.gz b/build/cache/spirv-reflect.json.gz deleted file mode 100644 index 246a32a7e7..0000000000 Binary files a/build/cache/spirv-reflect.json.gz and /dev/null differ diff --git a/build/cache/spirv.json.gz b/build/cache/spirv.json.gz deleted file mode 100644 index b65b323e33..0000000000 Binary files a/build/cache/spirv.json.gz and /dev/null differ diff --git a/build/cache/vulkan.json.gz b/build/cache/vulkan.json.gz deleted file mode 100644 index 8f83513975..0000000000 Binary files a/build/cache/vulkan.json.gz and /dev/null differ diff --git a/build/cache/vulkan_video.json.gz b/build/cache/vulkan_video.json.gz deleted file mode 100644 index 63ea61dc5a..0000000000 Binary files a/build/cache/vulkan_video.json.gz and /dev/null differ diff --git a/build/cache/webgpu.json.gz b/build/cache/webgpu.json.gz deleted file mode 100644 index ddd4bc7d35..0000000000 Binary files a/build/cache/webgpu.json.gz and /dev/null differ diff --git a/build/cache/wgl.json.gz b/build/cache/wgl.json.gz deleted file mode 100644 index 3064bc2807..0000000000 Binary files a/build/cache/wgl.json.gz and /dev/null differ diff --git a/build/cache/wic.json.gz b/build/cache/wic.json.gz deleted file mode 100644 index 80f25c634b..0000000000 Binary files a/build/cache/wic.json.gz and /dev/null differ diff --git a/build/cache/win32extras.json.gz b/build/cache/win32extras.json.gz deleted file mode 100644 index 2da914163d..0000000000 Binary files a/build/cache/win32extras.json.gz and /dev/null differ diff --git a/build/cache/xaudio.json.gz b/build/cache/xaudio.json.gz deleted file mode 100644 index f911e86958..0000000000 Binary files a/build/cache/xaudio.json.gz and /dev/null differ diff --git a/build/cache/xinput.json.gz b/build/cache/xinput.json.gz deleted file mode 100644 index 9cbaae196f..0000000000 Binary files a/build/cache/xinput.json.gz and /dev/null differ diff --git a/build/codesigning/config.json b/build/codesigning/config.json deleted file mode 100644 index 1bf7b2b9ba..0000000000 --- a/build/codesigning/config.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "SignClient": { - "AzureAd": { - "AADInstance": "https://login.microsoftonline.com/", - "ClientId": "c248d68a-ba6f-4aa9-8a68-71fe872063f8", - "TenantId": "16076fdc-fcc1-4a15-b1ca-32c9a255900e" - }, - "Service": { - "Url": "https://codesign.dotnetfoundation.org/", - "ResourceId": "https://SignService/3c30251f-36f3-490b-a955-520addb85001" - } - } -} \ No newline at end of file diff --git a/build/comments/footer.md b/build/comments/footer.md deleted file mode 100644 index 9282592b6f..0000000000 --- a/build/comments/footer.md +++ /dev/null @@ -1,4 +0,0 @@ - ---- - -This is an automated comment from Silk.NET's NUKE DevOps solution, created from [a GitHub Actions run](https://github.com/dotnet/Silk.NET/actions/runs/{actionsRun}). If this was created by mistake, just let a maintainer know and they'll happily ignore this. Comment type: `{typeId}` \ No newline at end of file diff --git a/build/comments/public_api_declared.md b/build/comments/public_api_declared.md deleted file mode 100644 index a3fac497eb..0000000000 --- a/build/comments/public_api_declared.md +++ /dev/null @@ -1,3 +0,0 @@ -![Public API Declared](https://img.shields.io/badge/public%20api-declared-green) - -Public API issues have been fixed 🎉 \ No newline at end of file diff --git a/build/comments/public_api_not_declared.md b/build/comments/public_api_not_declared.md deleted file mode 100644 index 1bfb92555e..0000000000 --- a/build/comments/public_api_not_declared.md +++ /dev/null @@ -1,14 +0,0 @@ -![Public API Not Declared](https://img.shields.io/badge/public%20api-not%20declared-red) - -Thanks for your contribution adding to the Silk.NET API surface! Note that for manual projects we use the [Public API Analyzer](https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md) wherein the entirety of the public API (for manual projects) are tracked in text files, in hope that this analyzer will warn us about breaking changes before we make them. - -It looks like you either: -- haven't added all of your new APIs into this text file. Don't worry, it's a simple fix, you can do this automatically by running `nuke declareapi` and pushing the changed `PublicAPI.Unshipped.txt` files. -- have made a breaking change 😮 If this is intentional, make sure you talk to a maintainer! - -This comment will automatically update once you've fixed this issue! For more information see: -- [Public API Analyzers Help](https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md) -- [Public API Analyzers Diagnostic Descriptions](https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/Microsoft.CodeAnalysis.PublicApiAnalyzers.md) -- [The GitHub Actions Run That Flagged This](https://github.com/dotnet/Silk.NET/actions/runs/{actionsRun}) - -(Note to maintainers: this comment won't stop you from merging so if you're fine with this just merge anyway) \ No newline at end of file diff --git a/build/csharp_typemap.json b/build/csharp_typemap.json deleted file mode 100644 index f4018fd999..0000000000 --- a/build/csharp_typemap.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "int8_t": "sbyte", - "uint8_t": "byte", - "int16_t": "short", - "uint16_t": "ushort", - "int32_t": "int", - "uint32_t": "uint", - "int64_t": "long", - "uint64_t": "ulong", - "size_t": "nuint", - "wchar_t": "char", - "intptr_t": "nint", - "uintptr_t": "nuint", - "ptrdiff_t": "nint", - "unsigned int": "uint", - "GLsizei": "uint", - "GLsizeiptr": "nuint", - "GLintptr": "nint", - "GLboolean": "bool", - "GLbitfield": "uint", - "GLvoid": "void", - "GLchar": "byte", - "GLbyte": "sbyte", - "GLubyte": "byte", - "GLshort": "short", - "GLushort": "ushort", - "GLint": "int", - "GLuint": "uint", - "GLfloat": "float", - "GLclampf": "float", - "GLdouble": "double", - "GLclampd": "double", - "GLstring": "string", - "String": "string", - "GLsizeiptrARB": "nuint", - "GLintptrARB": "nint", - "GLhandleARB": "uint", - "GLhalfARB": "System.Half", - "GLhalfNV": "System.Half", - "GLcharARB": "byte", - "GLint64EXT": "long", - "GLuint64EXT": "ulong", - "GLint64": "long", - "GLuint64": "ulong", - "sync": "nint", - "GLsync": "nint", - "GLDEBUGPROC": "DebugProc", - "GLDEBUGPROCAMD": "DebugProcAmd", - "GLDEBUGPROCARB": "DebugProcArb", - "GLDEBUGPROCKHR": "DebugProcKhr", - "GLvdpauSurfaceNV": "nint", - "PROC": "nint", - "COLORREF": "uint", - "BOOL": "Silk.NET.Core.Bool32", - "DWORD": "uint", - "FLOAT": "float", - "HDC": "nint", - "HGLRC": "nint", - "HPBUFFERARB": "nint", - "HPBUFFEREXT": "nint", - "INT32": "int", - "INT64": "long", - "UINT": "uint", - "USHORT": "ushort", - "VOID": "void", - "Float64": "double", - "Float64Pointer": "double*", - "Float32": "float", - "Float32Pointer": "float*", - "Void": "void", - "Bool": "bool", - "Display": "nint", - "Pixmap": "nint", - "Colormap": "nint", - "GLXWindow": "nint", - "GLXContext": "nint", - "GLXDrawable": "nint", - "GLXPixmap": "nint", - "__GLXextFuncPtr": "nint", - "VLServer": "nint", - "VLPath": "nint", - "VLNode": "nint", - "GLclampx": "int", - "GLfixed": "int", - "GLeglImageOES": "nint", - "GLeglClientBufferEXT": "nint", - "GLVULKANPROCNV": "nint", - "ANativeWindow": "nint", - "MirConnection": "nint", - "MirSurface": "nint", - "wl_display": "nint", - "wl_surface": "nint", - "VisualID": "nint", - "RROutput": "nint", - "HINSTANCE": "nint", - "HSTRING": "WinString", - "HSTRING__*": "WinString", - "HSTRING__**": "WinString*", - "HWND": "nint", - "HWND__*": "nint", - "HDC__*": "nint", - "HINSTANCE__*": "nint", - "SECURITY_ATTRIBUTES": "nint", - "xcb_connection_t": "nint", - "xcb_window_t": "nint", - "xcb_visualid_t": "nint", - "_cl_context": "nint", - "_cl_event": "nint", - "HMONITOR": "nint", - "CAMetalLayer": "nint", - "AHardwareBuffer": "nint", - "zx_handle_t": "nint", - "GgpFrameToken": "nint", - "GgpStreamDescriptor": "nint", - "VkFlags": "uint", - "unsignedchar": "byte", - "IDirectFB*": "nint", - "IDirectFBSurface*": "nint", - "VASurfaceID*": "nint", - "EGLint": "int", - "khronos_utime_nanoseconds_t": "ulong", - "khronos_stime_nanoseconds_t": "long", - "khronos_uint64_t": "ulong", - "wl_resource": "nint", - "wl_buffer": "nint", - "jobject": "nint", - "timespec": "Timespec", - "LARGE_INTEGER": "long", - "ULARGE_INTEGER": "ulong", - "xcb_glx_fbconfig_t": "nint", - "xcb_glx_drawable_t": "nint", - "xcb_glx_context_t": "nint", - "_GUID": "Guid", - "HINSTANCE__**": "nint*", - "HWND__**": "nint*", - "HMONITOR__*": "nint", - "HDC__**": "nint*", - "HMONITOR__**": "nint*", - "HBITMAP__*": "nint*", - "HENHMETAFILE__*": "nint*", - "_LUID": "Luid", - "_LARGE_INTEGER": "long", - "_ULARGE_INTEGER": "ulong", - "IUnknown": "Silk.NET.Core.Native.IUnknown", - "IInspectable": "Silk.NET.Core.Native.IInspectable", - "tagRECT": "Silk.NET.Maths.Box2D", - "tagPOINT": "Silk.NET.Maths.Vector2D", - "tagSIZE": "Silk.NET.Maths.Vector2D", - "tagPALETTEENTRY": "Silk.NET.Maths.Vector4D", - "_SECURITY_ATTRIBUTES": "Silk.NET.Core.Native.SecurityAttributes", - "INT_PTR": "nint", - "POINTER_32": "int", - "POINTER_64": "long", - "POINTER_SIGNED": "nint", - "POINTER_UNSIGNED": "nuint", - "SIZE_T": "nuint", - "ULONG_PTR": "nuint", - "ULONGLONG": "ulong", - "LONG_PTR": "nint", - "_screen_window": "void", - "_screen_context": "void", - "cl_properties": "ulong", - "IStream": "Silk.NET.Core.Win32Extras.IStream", - "FILETIME": "Silk.NET.Core.Win32Extras.Filetime" -} diff --git a/build/dx_typemap.json b/build/dx_typemap.json deleted file mode 100644 index 038bc8906e..0000000000 --- a/build/dx_typemap.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "ID3D10Blob": "Silk.NET.Core.Native.ID3D10Blob", - "ID3D10DestructionNotifier": "Silk.NET.Core.Native.ID3DDestructionNotifier", - "ID3DInclude": "Silk.NET.Core.Native.ID3DInclude", - "_D3D_SHADER_MACRO": "Silk.NET.Core.Native.D3DShaderMacro", - "_D3D_CBUFFER_TYPE": "Silk.NET.Core.Native.D3DCBufferType", - "D3D_DRIVER_TYPE":"Silk.NET.Core.Native.D3DDriverType", - "D3D_FEATURE_LEVEL": "Silk.NET.Core.Native.D3DFeatureLevel", - "_D3D_INCLUDE_TYPE":"Silk.NET.Core.Native.D3DIncludeType", - "D3D_INTERPOLATION_MODE": "Silk.NET.Core.Native.D3DInterpolationMode", - "D3D_MIN_PRECISION":"Silk.NET.Core.Native.D3DMinPrecision", - "D3D_NAME": "Silk.NET.Core.Native.D3DName", - "_D3D_PARAMETER_FLAGS":"Silk.NET.Core.Native.D3DParameterFlags", - "D3D_PRIMITIVE": "Silk.NET.Core.Native.D3DPrimitive", - "D3D_PRIMITIVE_TOPOLOGY":"Silk.NET.Core.Native.D3DPrimitiveTopology", - "D3D_REGISTER_COMPONENT_TYPE": "Silk.NET.Core.Native.D3DRegisterComponentType", - "D3D_RESOURCE_RETURN_TYPE":"Silk.NET.Core.Native.D3DResourceReturnType", - "_D3D_SHADER_CBUFFER_FLAGS": "Silk.NET.Core.Native.D3DShaderCBufferFlags", - "_D3D_SHADER_INPUT_FLAGS":"Silk.NET.Core.Native.D3DShaderInputFlags", - "_D3D_SHADER_INPUT_TYPE": "Silk.NET.Core.Native.D3DShaderInputType", - "_D3D_SHADER_VARIABLE_CLASS":"Silk.NET.Core.Native.D3DShaderVariableClass", - "_D3D_SHADER_VARIABLE_FLAGS": "Silk.NET.Core.Native.D3DShaderVariableFlags", - "_D3D_SHADER_VARIABLE_TYPE":"Silk.NET.Core.Native.D3DShaderVariableType", - "D3D_SRV_DIMENSION": "Silk.NET.Core.Native.D3DSrvDimension", - "D3D_TESSELLATOR_DOMAIN":"Silk.NET.Core.Native.D3DTessellatorDomain", - "D3D_TESSELLATOR_OUTPUT_PRIMITIVE": "Silk.NET.Core.Native.D3DTessellatorOutputPrimitive", - "D3D_TESSELLATOR_PARTITIONING":"Silk.NET.Core.Native.D3DTessellatorPartitioning", - "D3DMATRIX": "Silk.NET.Maths.Matrix4X4", - "_D3DCOLORVALUE": "Silk.NET.DXGI.D3Dcolorvalue", - "DXGI_FORMAT": "Silk.NET.DXGI.Format", - "DXGI_COLOR_SPACE_TYPE": "Silk.NET.DXGI.ColorSpaceType", - "DXGI_SAMPLE_DESC": "Silk.NET.DXGI.SampleDesc", - "DXGI_SWAP_CHAIN_DESC": "Silk.NET.DXGI.SwapChainDesc", - "DXGI_RATIONAL": "Silk.NET.DXGI.Rational", - "DXGI_HDR_METADATA_TYPE": "Silk.NET.DXGI.HdrMetadataType", - "DXGI_ALPHA_MODE": "Silk.NET.DXGI.AlphaMode", - "IDXGIObject": "Silk.NET.DXGI.IDXGIObject", - "IDXGIAdapter": "Silk.NET.DXGI.IDXGIAdapter", - "IDXGISwapChain": "Silk.NET.DXGI.IDXGISwapChain", - "IDXGIDevice": "Silk.NET.DXGI.IDXGIDevice", - "IDXGIDeviceSubObject": "Silk.NET.DXGI.IDXGIDeviceSubObject", - "IDXGISurface": "Silk.NET.DXGI.IDXGISurface", - "D2D_VECTOR_2F": "Silk.NET.Maths.Vector2D", - "D2D_VECTOR_3F": "Silk.NET.Maths.Vector3D", - "D2D_VECTOR_4F": "Silk.NET.Maths.Vector4D", - "D2D_POINT_2U": "Silk.NET.Maths.Vector2D", - "D2D_POINT_2F": "Silk.NET.Maths.Vector2D", - "D2D_POINT_2L": "Silk.NET.Maths.Vector2D", - "D2D_RECT_F": "Silk.NET.Maths.Box2D", - "D2D_RECT_U": "Silk.NET.Maths.Box2D", - "D2D_RECT_L": "Silk.NET.Maths.Box2D", - "D2D_SIZE_F": "Silk.NET.Maths.Vector2D", - "D2D_SIZE_U": "Silk.NET.Maths.Vector2D", - "D2D_MATRIX_3X2_F": "Silk.NET.Maths.Matrix3X2", - "D2D_MATRIX_4X3_F": "Silk.NET.Maths.Matrix4X3", - "D2D_MATRIX_4X4_F": "Silk.NET.Maths.Matrix4X4", - "D2D_MATRIX_5X4_F": "Silk.NET.Maths.Matrix5X4", - "D2D1_POINT_2U": "Silk.NET.Maths.Vector2D", - "D2D1_POINT_2F": "Silk.NET.Maths.Vector2D", - "D2D1_POINT_2L": "Silk.NET.Maths.Vector2D", - "D2D1_RECT_F": "Silk.NET.Maths.Box2D", - "D2D1_RECT_U": "Silk.NET.Maths.Box2D", - "D2D1_RECT_L": "Silk.NET.Maths.Box2D", - "D2D1_SIZE_F": "Silk.NET.Maths.Vector2D", - "D2D1_SIZE_U": "Silk.NET.Maths.Vector2D", - "D3D12_RAYTRACING_AABB": "Silk.NET.Maths.Box3D", - "bool": "Silk.NET.Core.Bool32" -} \ No newline at end of file diff --git a/build/gl_typemap.json b/build/gl_typemap.json deleted file mode 100644 index c9074e96ab..0000000000 --- a/build/gl_typemap.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "BooleanPointer": "GLboolean*", - "Char": "GLchar", - "CharPointer": "GLchar*", - "ConstCharPointer": "GLchar* const", - "CheckedFloat32": "GLfloat", - "CheckedInt32": "GLint", - "ClampedFixed": "GLfixed", - "ClampedFloat32": "GLclampf", - "ClampedFloat64": "GLclampd", - "ClampedStencilValue": "GLint", - "ColorB": "GLbyte", - "ColorD": "GLdouble", - "ColorF": "GLfloat", - "ColorI": "GLint", - "ColorIndexValueD": "GLdouble", - "ColorIndexValueF": "GLfloat", - "ColorIndexValueI": "GLint", - "ColorIndexValueS": "GLshort", - "ColorIndexValueUB": "GLubyte", - "ColorS": "GLshort", - "ColorUB": "GLubyte", - "ColorUI": "GLuint", - "ColorUS": "GLushort", - "CompressedTextureARB": "GLvoid*", - "CoordD": "GLdouble", - "CoordF": "GLfloat", - "CoordI": "GLint", - "CoordS": "GLshort", - "DrawBufferName": "GLint", - "FeedbackElement": "GLfloat", - "FenceNV": "GLuint", - "Float32": "GLfloat", - "Float32Pointer": "GLfloat*", - "Float64": "GLdouble", - "Float64Pointer": "GLdouble*", - "Fixed": "GLfixed", - "ConstFixed": "GLfixed", - "FunctionPointer": "_GLfuncptr", - "IglooParameterSGIX": "GLvoid*", - "Int16": "GLshort", - "Int32": "GLint", - "Int8": "GLbyte", - "LineStipple": "GLushort", - "List": "GLuint", - "MaskedColorIndexValueF": "GLfloat", - "MaskedColorIndexValueI": "GLuint", - "MaskedStencilValue": "GLuint", - "ProgramCharacterNV": "GLubyte", - "ReplacementCodeSUN": "GLuint", - "SelectName": "GLuint", - "SizeI": "GLsizei", - "StencilValue": "GLint", - "Texture": "GLuint", - "UInt16": "GLushort", - "UInt32": "GLuint", - "UInt8": "GLubyte", - "Void": "GLvoid", - "VoidPointer": "GLvoid*", - "ConstVoidPointer": "GLvoid* const", - "WinCoord": "GLint", - "ConstByte": "GLbyte", - "ConstUByte": "GLubyte", - "ConstFloat32": "GLfloat", - "ConstInt32": "GLint", - "ConstUInt32": "GLuint", - "ConstVoid": "GLvoid", - "BufferOffset": "GLintptr", - "BufferSize": "GLsizeiptr", - "BufferOffsetARB": "GLintptrARB", - "BufferSizeARB": "GLsizeiptrARB", - "Half16NV": "GLhalfNV", - "TypeEnum": "GLenum", - "Int64": "GLint64", - "UInt64": "GLuint64", - "handleARB": "GLhandleARB", - "charARB": "GLcharARB", - "charPointerARB": "GLcharARB*", - "sync": "GLsync", - "Int64EXT": "GLint64EXT", - "UInt64EXT": "GLuint64EXT", - "Framebuffer": "GLuint", - "Intptr": "GLintptr", - "Renderbuffer": "GLuint", - "Sizeiptr": "GLsizeiptr", - "vdpauSurfaceNV": "GLvdpauSurfaceNV", - "Path": "GLuint", - "PathCommand": "GLubyte", - "PathElement": "GLvoid*", - "char": "byte" -} \ No newline at end of file diff --git a/build/include/cpuid.h b/build/include/cpuid.h deleted file mode 100644 index bca61d620d..0000000000 --- a/build/include/cpuid.h +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Copyright (C) 2007-2020 Free Software Foundation, Inc. - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 3, or (at your option) any - * later version. - * - * This file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * Under Section 7 of GPL version 3, you are granted additional - * permissions described in the GCC Runtime Library Exception, version - * 3.1, as published by the Free Software Foundation. - * - * You should have received a copy of the GNU General Public License and - * a copy of the GCC Runtime Library Exception along with this program; - * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - * . - */ - -#ifndef _CPUID_H_INCLUDED -#define _CPUID_H_INCLUDED - -/* %eax */ -#define bit_AVX512BF16 (1 << 5) - -/* %ecx */ -#define bit_SSE3 (1 << 0) -#define bit_PCLMUL (1 << 1) -#define bit_LZCNT (1 << 5) -#define bit_SSSE3 (1 << 9) -#define bit_FMA (1 << 12) -#define bit_CMPXCHG16B (1 << 13) -#define bit_SSE4_1 (1 << 19) -#define bit_SSE4_2 (1 << 20) -#define bit_MOVBE (1 << 22) -#define bit_POPCNT (1 << 23) -#define bit_AES (1 << 25) -#define bit_XSAVE (1 << 26) -#define bit_OSXSAVE (1 << 27) -#define bit_AVX (1 << 28) -#define bit_F16C (1 << 29) -#define bit_RDRND (1 << 30) - -/* %edx */ -#define bit_CMPXCHG8B (1 << 8) -#define bit_CMOV (1 << 15) -#define bit_MMX (1 << 23) -#define bit_FXSAVE (1 << 24) -#define bit_SSE (1 << 25) -#define bit_SSE2 (1 << 26) - -/* Extended Features (%eax == 0x80000001) */ -/* %ecx */ -#define bit_LAHF_LM (1 << 0) -#define bit_ABM (1 << 5) -#define bit_SSE4a (1 << 6) -#define bit_PRFCHW (1 << 8) -#define bit_XOP (1 << 11) -#define bit_LWP (1 << 15) -#define bit_FMA4 (1 << 16) -#define bit_TBM (1 << 21) -#define bit_MWAITX (1 << 29) - -/* %edx */ -#define bit_MMXEXT (1 << 22) -#define bit_LM (1 << 29) -#define bit_3DNOWP (1 << 30) -#define bit_3DNOW (1u << 31) - -/* %ebx */ -#define bit_CLZERO (1 << 0) -#define bit_WBNOINVD (1 << 9) - -/* Extended Features (%eax == 7) */ -/* %ebx */ -#define bit_FSGSBASE (1 << 0) -#define bit_SGX (1 << 2) -#define bit_BMI (1 << 3) -#define bit_HLE (1 << 4) -#define bit_AVX2 (1 << 5) -#define bit_BMI2 (1 << 8) -#define bit_RTM (1 << 11) -#define bit_MPX (1 << 14) -#define bit_AVX512F (1 << 16) -#define bit_AVX512DQ (1 << 17) -#define bit_RDSEED (1 << 18) -#define bit_ADX (1 << 19) -#define bit_AVX512IFMA (1 << 21) -#define bit_CLFLUSHOPT (1 << 23) -#define bit_CLWB (1 << 24) -#define bit_AVX512PF (1 << 26) -#define bit_AVX512ER (1 << 27) -#define bit_AVX512CD (1 << 28) -#define bit_SHA (1 << 29) -#define bit_AVX512BW (1 << 30) -#define bit_AVX512VL (1u << 31) - -/* %ecx */ -#define bit_PREFETCHWT1 (1 << 0) -#define bit_AVX512VBMI (1 << 1) -#define bit_PKU (1 << 3) -#define bit_OSPKE (1 << 4) -#define bit_WAITPKG (1 << 5) -#define bit_AVX512VBMI2 (1 << 6) -#define bit_SHSTK (1 << 7) -#define bit_GFNI (1 << 8) -#define bit_VAES (1 << 9) -#define bit_AVX512VNNI (1 << 11) -#define bit_VPCLMULQDQ (1 << 10) -#define bit_AVX512BITALG (1 << 12) -#define bit_AVX512VPOPCNTDQ (1 << 14) -#define bit_RDPID (1 << 22) -#define bit_MOVDIRI (1 << 27) -#define bit_MOVDIR64B (1 << 28) -#define bit_ENQCMD (1 << 29) -#define bit_CLDEMOTE (1 << 25) - -/* %edx */ -#define bit_AVX5124VNNIW (1 << 2) -#define bit_AVX5124FMAPS (1 << 3) -#define bit_AVX512VP2INTERSECT (1 << 8) -#define bit_IBT (1 << 20) -#define bit_PCONFIG (1 << 18) -#define bit_SERIALIZE (1 << 14) -#define bit_TSXLDTRK (1 << 16) - -/* XFEATURE_ENABLED_MASK register bits (%eax == 0xd, %ecx == 0) */ -#define bit_BNDREGS (1 << 3) -#define bit_BNDCSR (1 << 4) - -/* Extended State Enumeration Sub-leaf (%eax == 0xd, %ecx == 1) */ -#define bit_XSAVEOPT (1 << 0) -#define bit_XSAVEC (1 << 1) -#define bit_XSAVES (1 << 3) - -/* PT sub leaf (%eax == 0x14, %ecx == 0) */ -/* %ebx */ -#define bit_PTWRITE (1 << 4) - -/* Signatures for different CPU implementations as returned in uses - of cpuid with level 0. */ -#define signature_AMD_ebx 0x68747541 -#define signature_AMD_ecx 0x444d4163 -#define signature_AMD_edx 0x69746e65 - -#define signature_CENTAUR_ebx 0x746e6543 -#define signature_CENTAUR_ecx 0x736c7561 -#define signature_CENTAUR_edx 0x48727561 - -#define signature_CYRIX_ebx 0x69727943 -#define signature_CYRIX_ecx 0x64616574 -#define signature_CYRIX_edx 0x736e4978 - -#define signature_INTEL_ebx 0x756e6547 -#define signature_INTEL_ecx 0x6c65746e -#define signature_INTEL_edx 0x49656e69 - -#define signature_TM1_ebx 0x6e617254 -#define signature_TM1_ecx 0x55504361 -#define signature_TM1_edx 0x74656d73 - -#define signature_TM2_ebx 0x756e6547 -#define signature_TM2_ecx 0x3638784d -#define signature_TM2_edx 0x54656e69 - -#define signature_NSC_ebx 0x646f6547 -#define signature_NSC_ecx 0x43534e20 -#define signature_NSC_edx 0x79622065 - -#define signature_NEXGEN_ebx 0x4778654e -#define signature_NEXGEN_ecx 0x6e657669 -#define signature_NEXGEN_edx 0x72446e65 - -#define signature_RISE_ebx 0x65736952 -#define signature_RISE_ecx 0x65736952 -#define signature_RISE_edx 0x65736952 - -#define signature_SIS_ebx 0x20536953 -#define signature_SIS_ecx 0x20536953 -#define signature_SIS_edx 0x20536953 - -#define signature_UMC_ebx 0x20434d55 -#define signature_UMC_ecx 0x20434d55 -#define signature_UMC_edx 0x20434d55 - -#define signature_VIA_ebx 0x20414956 -#define signature_VIA_ecx 0x20414956 -#define signature_VIA_edx 0x20414956 - -#define signature_VORTEX_ebx 0x74726f56 -#define signature_VORTEX_ecx 0x436f5320 -#define signature_VORTEX_edx 0x36387865 - -#ifndef __x86_64__ -/* At least one cpu (Winchip 2) does not set %ebx and %ecx - for cpuid leaf 1. Forcibly zero the two registers before - calling cpuid as a precaution. */ -#define __cpuid(level, a, b, c, d) \ - do { \ - if (__builtin_constant_p (level) && (level) != 1) \ - __asm__ ("cpuid\n\t" \ - : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ - : "0" (level)); \ - else \ - __asm__ ("cpuid\n\t" \ - : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ - : "0" (level), "1" (0), "2" (0)); \ - } while (0) -#else -#define __cpuid(level, a, b, c, d) \ - __asm__ ("cpuid\n\t" \ - : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ - : "0" (level)) -#endif - -#define __cpuid_count(level, count, a, b, c, d) \ - __asm__ ("cpuid\n\t" \ - : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ - : "0" (level), "2" (count)) - - -/* Return highest supported input value for cpuid instruction. ext can - be either 0x0 or 0x80000000 to return highest supported value for - basic or extended cpuid information. Function returns 0 if cpuid - is not supported or whatever cpuid returns in eax register. If sig - pointer is non-null, then first four bytes of the signature - (as found in ebx register) are returned in location pointed by sig. */ - -static __inline unsigned int -__get_cpuid_max (unsigned int __ext, unsigned int *__sig) -{ - unsigned int __eax, __ebx, __ecx, __edx; - -#ifndef __x86_64__ - /* See if we can use cpuid. On AMD64 we always can. */ -#if __GNUC__ >= 3 - __asm__ ("pushf{l|d}\n\t" - "pushf{l|d}\n\t" - "pop{l}\t%0\n\t" - "mov{l}\t{%0, %1|%1, %0}\n\t" - "xor{l}\t{%2, %0|%0, %2}\n\t" - "push{l}\t%0\n\t" - "popf{l|d}\n\t" - "pushf{l|d}\n\t" - "pop{l}\t%0\n\t" - "popf{l|d}\n\t" - : "=&r" (__eax), "=&r" (__ebx) - : "i" (0x00200000)); -#else -/* Host GCCs older than 3.0 weren't supporting Intel asm syntax - nor alternatives in i386 code. */ - __asm__ ("pushfl\n\t" - "pushfl\n\t" - "popl\t%0\n\t" - "movl\t%0, %1\n\t" - "xorl\t%2, %0\n\t" - "pushl\t%0\n\t" - "popfl\n\t" - "pushfl\n\t" - "popl\t%0\n\t" - "popfl\n\t" - : "=&r" (__eax), "=&r" (__ebx) - : "i" (0x00200000)); -#endif - - if (!((__eax ^ __ebx) & 0x00200000)) - return 0; -#endif - - /* Host supports cpuid. Return highest supported cpuid input value. */ - __cpuid (__ext, __eax, __ebx, __ecx, __edx); - - if (__sig) - *__sig = __ebx; - - return __eax; -} - -/* Return cpuid data for requested cpuid leaf, as found in returned - eax, ebx, ecx and edx registers. The function checks if cpuid is - supported and returns 1 for valid cpuid information or 0 for - unsupported cpuid leaf. All pointers are required to be non-null. */ - -static __inline int -__get_cpuid (unsigned int __leaf, - unsigned int *__eax, unsigned int *__ebx, - unsigned int *__ecx, unsigned int *__edx) -{ - unsigned int __ext = __leaf & 0x80000000; - unsigned int __maxlevel = __get_cpuid_max (__ext, 0); - - if (__maxlevel == 0 || __maxlevel < __leaf) - return 0; - - __cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx); - return 1; -} - -/* Same as above, but sub-leaf can be specified. */ - -static __inline int -__get_cpuid_count (unsigned int __leaf, unsigned int __subleaf, - unsigned int *__eax, unsigned int *__ebx, - unsigned int *__ecx, unsigned int *__edx) -{ - unsigned int __ext = __leaf & 0x80000000; - unsigned int __maxlevel = __get_cpuid_max (__ext, 0); - - if (__maxlevel == 0 || __maxlevel < __leaf) - return 0; - - __cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx); - return 1; -} - -static __inline void -__cpuidex (int __cpuid_info[4], int __leaf, int __subleaf) -{ - __cpuid_count (__leaf, __subleaf, __cpuid_info[0], __cpuid_info[1], - __cpuid_info[2], __cpuid_info[3]); -} - -#endif /* _CPUID_H_INCLUDED */ diff --git a/build/include/silk.net.direct2d.d2d1effects.h b/build/include/silk.net.direct2d.d2d1effects.h deleted file mode 100644 index 810691d35b..0000000000 --- a/build/include/silk.net.direct2d.d2d1effects.h +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include -#include -#include diff --git a/build/include/silk.net.direct2d.dcommon.h b/build/include/silk.net.direct2d.dcommon.h deleted file mode 100644 index 4c5b7ddc78..0000000000 --- a/build/include/silk.net.direct2d.dcommon.h +++ /dev/null @@ -1,3 +0,0 @@ -#include -#include -#include diff --git a/build/include/silk.net.directcomposition.dcomp.h b/build/include/silk.net.directcomposition.dcomp.h deleted file mode 100644 index edff3defe2..0000000000 --- a/build/include/silk.net.directcomposition.dcomp.h +++ /dev/null @@ -1,10 +0,0 @@ -typedef unsigned int UINT; -typedef int BOOL; -typedef unsigned char BYTE; - -#include -#include - -#include -#include -#include diff --git a/build/include/silk.net.directwrite.dcommon.h b/build/include/silk.net.directwrite.dcommon.h deleted file mode 100644 index 4c5b7ddc78..0000000000 --- a/build/include/silk.net.directwrite.dcommon.h +++ /dev/null @@ -1,3 +0,0 @@ -#include -#include -#include diff --git a/build/include/silk.net.windowscodecs.h b/build/include/silk.net.windowscodecs.h deleted file mode 100644 index 0c2e5cf2ad..0000000000 --- a/build/include/silk.net.windowscodecs.h +++ /dev/null @@ -1,7 +0,0 @@ -typedef unsigned int UINT32; -typedef float FLOAT; - -#include -#include -#include -#include diff --git a/build/include/silk.net.xaudio.x3daudio.h b/build/include/silk.net.xaudio.x3daudio.h deleted file mode 100644 index d583ba8ac0..0000000000 --- a/build/include/silk.net.xaudio.x3daudio.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include \ No newline at end of file diff --git a/build/include/silk.net.xaudio.xaudio2.h b/build/include/silk.net.xaudio.xaudio2.h deleted file mode 100644 index 129d0b1317..0000000000 --- a/build/include/silk.net.xaudio.xaudio2.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include \ No newline at end of file diff --git a/build/include/silk.net.xaudio.xaudio2fx.h b/build/include/silk.net.xaudio.xaudio2fx.h deleted file mode 100644 index 279bea8c4c..0000000000 --- a/build/include/silk.net.xaudio.xaudio2fx.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include \ No newline at end of file diff --git a/build/include/silk.net.xinput.xinput.h b/build/include/silk.net.xinput.xinput.h deleted file mode 100644 index 385cf17ed4..0000000000 --- a/build/include/silk.net.xinput.xinput.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include \ No newline at end of file diff --git a/build/khronos_typemap.json b/build/khronos_typemap.json deleted file mode 100644 index ccc455f9e0..0000000000 --- a/build/khronos_typemap.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "VoidPointer": "nint", - "LPCSTR": "string", - "HANDLE": "nint", - "LPVOID": "nint", - "LPCWSTR": "nint", - "NvSciSyncAttrList": "nint", - "NvSciSyncObj": "nint", - "NvSciSyncFence": "nint", - "NvSciBufAttrList": "nint", - "NvSciBufObj": "nint" -} diff --git a/build/nuke/.editorconfig b/build/nuke/.editorconfig deleted file mode 100644 index b7741464b8..0000000000 --- a/build/nuke/.editorconfig +++ /dev/null @@ -1,7 +0,0 @@ -[*.cs] -dotnet_style_require_accessibility_modifiers = never:warning - -csharp_style_expression_bodied_methods = true:silent -csharp_style_expression_bodied_properties = true:warning -csharp_style_expression_bodied_indexers = true:warning -csharp_style_expression_bodied_accessors = true:warning diff --git a/build/nuke/Build.CodeSigning.cs b/build/nuke/Build.CodeSigning.cs deleted file mode 100644 index 008ea19a0a..0000000000 --- a/build/nuke/Build.CodeSigning.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.IO; -using System.Linq; -using Nuke.Common; -using Nuke.Common.CI; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.SignClient; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tooling.ProcessTasks; - -partial class Build -{ - [Parameter("Code-signing service Azure Key Vault certificate")] readonly string AkvCertificate; - [Parameter("Code-signing service Azure Key Vault client ID")] readonly string AkvClientId; - [Parameter("Code-signing service Azure Key Vault client secret")] readonly string AkvClientSecret; - [Parameter("Code-signing service Azure Key Vault tenant ID")] readonly string AkvTenant; - [Parameter("Code-signing service Azure Key Vault URL")] readonly string AkvVaultUrl; - - bool CanCodeSign => !string.IsNullOrWhiteSpace(AkvCertificate) && !string.IsNullOrWhiteSpace(AkvClientId) && - !string.IsNullOrWhiteSpace(AkvClientSecret) && !string.IsNullOrWhiteSpace(AkvTenant) && - !string.IsNullOrWhiteSpace(AkvVaultUrl); - - Target SignPackages => CommonTarget - ( - x => x.Before(PushToNuGet) - .After(Pack) - .Produces("build/output_packages/*.nupkg") - .Executes - ( - () => - { - if (!CanCodeSign) - { - ControlFlow.Fail("SignClient username and/or password not specified."); - } - - var outputs = Enumerable.Empty(); - var basePath = RootDirectory / "build" / "codesigning"; - var execPath = basePath / "tool" / (OperatingSystem.IsWindows() ? "sign.exe" : "sign"); - if (!File.Exists(execPath)) - { - outputs = outputs.Concat - ( - DotNetToolInstall - ( - s => s.SetToolInstallationPath(basePath / "tool") - .SetPackageName("sign") - .SetVersion("0.9.0-beta.23063.3") - ) - ); - } - - return Packages.Aggregate - ( - outputs, (current, pkg) => current.Concat - ( - StartProcess - ( - execPath, - $"sign code azure-key-vault \"{pkg}\" " + - "--timestamp-url http://timestamp.digicert.com " + - $"--base-directory \"{PackageDirectory}\" " + - $"--file-list \"{basePath / "filelist.txt"}\" " + - "--publisher-name \".NET Foundation\" " + - "--description \"Silk.NET\" " + - "--description-url \"https://github.com/dotnet/Silk.NET\" " + - $"--azure-key-vault-certificate \"{AkvCertificate}\" " + - $"--azure-key-vault-client-id \"{AkvClientId}\" " + - $"--azure-key-vault-client-secret \"{AkvClientSecret}\" " + - $"--azure-key-vault-tenant-id \"{AkvTenant}\" " + - $"--azure-key-vault-url \"{AkvVaultUrl}\" " - - ).AssertZeroExitCode().Output - ) - ); - } - ) - ); -} diff --git a/build/nuke/Build.Core.cs b/build/nuke/Build.Core.cs deleted file mode 100644 index 819bdd83a1..0000000000 --- a/build/nuke/Build.Core.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using Nuke.Common; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tooling.ProcessTasks; - -partial class Build -{ - [Parameter("If specified, when using the clean target removes the generated solution and stops.", Name = "Sln")] - readonly bool CleanSln; - - Target Clean => CommonTarget - ( - x => x.Before(Restore) - .Executes - ( - () => - { - if (CleanSln) - { - DeleteFile(RootDirectory / "Silk.NET.gen.sln"); - return Enumerable.Empty(); - } - - var outputs = Enumerable.Empty(); - outputs = outputs.Concat - ( - DotNetClean - ( - s => s.SetProject(Solution) - .SetProperties(ProcessedMsbuildProperties) - ) - ); - - if (Directory.Exists(RootDirectory / "build" / "output_packages")) - { - Directory.Delete(RootDirectory / "build" / "output_packages", true); - } - - Directory.CreateDirectory(RootDirectory / "build" / "output_packages"); - - if (Native) - { - outputs = outputs.Concat - ( - StartShell($".{Path.PathSeparator}gradlew clean", SourceDirectory / "Windowing" / "SilkDroid") - .AssertZeroExitCode() - .Output - ); - } - else - { - Logger.Warn("Skipping gradlew clean as the \"native\" feature-set has not been specified."); - } - - return outputs; - } - ) - ); - - Target Restore => CommonTarget - ( - x => x.After(Clean) - .Executes - ( - () => DotNetRestore - ( - s => s.SetProjectFile(Solution) - .SetProperties(ProcessedMsbuildProperties) - ) - ) - ); - - Target Compile => CommonTarget - ( - x => x.DependsOn(Restore) - .After(Clean) - .Executes - ( - () => ErrorsOnly - ( - s => s.SetProjectFile(Solution) - .SetConfiguration(Configuration) - .EnableNoRestore() - .SetProperties(ProcessedMsbuildProperties) - ) - ) - ); - - Target Test => CommonTarget - ( - x => x.After(Compile) - .Executes - ( - () => - { - foreach (var project in Solution.GetProjects("*")) - { - if (project.Name.EndsWith(".Tests")) - { - DotNetTest(s => s.SetProjectFile(project)); - } - } - } - ) - ); -} diff --git a/build/nuke/Build.Generation.cs b/build/nuke/Build.Generation.cs deleted file mode 100644 index 0837e2fbc8..0000000000 --- a/build/nuke/Build.Generation.cs +++ /dev/null @@ -1,121 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tooling.ProcessTasks; - -partial class Build -{ - [Nuke.Common.Parameter("Create a PR after bindings regeneration completes")] readonly bool CreateBindingsPr; - [Nuke.Common.Parameter("Don't let BuildTools parallelize")] readonly bool NoParallelGeneration; - - Target RegenerateBindings => CommonTarget - ( - x => x.After(Clean) - .DependsOn(Restore) - .Executes - ( - () => - { - var project = OriginalSolution.GetProject("Silk.NET.BuildTools"); - if (project == default) - { - Logger.Error("Couldn't find BuildTools in the solution file."); - return; - } - - DotNetRun - ( - s => s.SetProjectFile(project) - .SetConfiguration("Release") - .SetApplicationArguments - ( - Path.Combine(RootDirectory, "generator.json") + - (NoParallelGeneration ? " --no-parallel" : "") - ) - ); - - if (CreateBindingsPr) - { - foreach (var missedOut in GetNewProjects()) - { - DotNet($"sln \"{Path.GetFileName(OriginalSolution.FileName)}\" add \"{missedOut}\""); - } - - PrUpdatedBindings(); - } - } - ) - ); - - - void PrUpdatedBindings() - { - var pushableToken = EnvironmentInfo.GetVariable("PUSHABLE_GITHUB_TOKEN"); - var curBranch = GitCurrentBranch(RootDirectory); - if (!string.IsNullOrWhiteSpace(pushableToken) && - GitHubActions.Instance?.Repository == "dotnet/Silk.NET" && - curBranch != "HEAD" && - !string.IsNullOrWhiteSpace(curBranch)) - { - Git("fetch --all", RootDirectory); - Git("pull"); - Git("add src build/cache build/submodules Silk.NET.sln", RootDirectory); - var newBranch = $"ci/{curBranch}/bindings_regen"; - var curCommit = GitCurrentCommit(RootDirectory); - var commitCmd = InheritedShell - ( - $"git commit -m \"Regenerated bindings as of {DateTime.UtcNow:dd/MM/yyyy (HH:mm:ss)}\"" - ) - .AssertWaitForExit(); - if (!commitCmd.Output.Any(x => x.Text.Contains("nothing to commit", StringComparison.OrdinalIgnoreCase))) - { - commitCmd.AssertZeroExitCode(); - } - - // ensure there are no other changes - Git("checkout HEAD .nuke/", RootDirectory); - Git("reset --hard", RootDirectory); - if (GitCurrentCommit(RootDirectory) != curCommit) // might get "nothing to commit", you never know... - { - Logger.Info("Checking for existing branch..."); - var exists = StartProcess("git", $"checkout \"{newBranch}\"", RootDirectory) - .AssertWaitForExit() - .ExitCode == 0; - if (!exists) - { - Logger.Info("None found, creating a new one..."); - Git($"checkout -b \"{newBranch}\""); - } - - Git($"merge -X theirs \"{curBranch}\" --allow-unrelated-histories"); - Git($"push --set-upstream origin \"{newBranch}\""); - if (!exists) - { - var github = new GitHubClient - ( - new ProductHeaderValue("Silk.NET-CI"), - new InMemoryCredentialStore(new Credentials(pushableToken)) - ); - - var pr = github.PullRequest.Create - ("dotnet", "Silk.NET", new($"Regenerate bindings as of {DateTime.UtcNow:dd/MM/yyyy}", newBranch, curBranch)) - .GetAwaiter() - .GetResult(); - } - } - } - } - -} diff --git a/build/nuke/Build.NuGet.cs b/build/nuke/Build.NuGet.cs deleted file mode 100644 index cb325cd8e7..0000000000 --- a/build/nuke/Build.NuGet.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Nuke.Common; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using static Nuke.Common.Tools.DotNet.DotNetTasks; - -partial class Build -{ - [Parameter("The API key used to push packages and symbols packages to NuGet")] readonly string NugetApiKey; - [Parameter("NuGet -NoServiceEndpoint")] readonly bool NugetNoServiceEndpoint; - [Parameter("NuGet feed")] readonly string NugetFeed = "https://api.nuget.org/v3/index.json"; - [Parameter("NuGet username")] readonly string NugetUsername; - [Parameter("NuGet password")] readonly string NugetPassword; - static string PackageDirectory => RootDirectory / "build" / "output_packages"; - - static IEnumerable Packages => Directory.GetFiles(PackageDirectory, "*.nupkg") - .Where(x => Path.GetFileName(x).StartsWith("Silk.NET") || Path.GetFileName(x).StartsWith("Ultz.Native")); - - static IEnumerable SymbolPackages => Directory.GetFiles(PackageDirectory, "*.snupkg") - .Where(x => Path.GetFileName(x).StartsWith("Silk.NET") || Path.GetFileName(x).StartsWith("Ultz.Native")); - - Target PushToNuGet => CommonTarget - ( - x => x.DependsOn(Pack) - .After(SignPackages) - .Executes(PushPackages) - ); - - async Task> PushPackages() - { - var outputs = Enumerable.Empty(); - const int rateLimit = 300; - - var allFiles = Packages.Concat(SymbolPackages) - .Select((x, i) => new { Index = i, Value = x }) - .GroupBy(x => x.Index / rateLimit) - .Select(x => x.Select(v => v.Value).ToList()) - .ToList(); - var first = true; - Logger.Info($"Searching for packages in \"{RootDirectory / "build" / "output_packages"}\"..."); - foreach (var files in allFiles) - { - if (first) - { - first = false; - } - else - { - await Task.Delay(TimeSpan.FromHours(1)); - } - - if (!NugetFeed.Contains("nuget.org")) - { - var srcSettings = new DotNetNuGetAddSourceSettings().SetName("Silk-PushPackages").SetSource(NugetFeed); - - if (NugetUsername is not null || NugetPassword is not null) - { - if (NugetUsername is null || NugetPassword is null) - { - ControlFlow.Fail - ( - "Both \"NugetUsername\" and \"NugetPassword\" must be specified if either are used." - ); - } - - srcSettings = srcSettings.SetUsername(NugetUsername).SetPassword(NugetPassword).SetStorePasswordInClearText(true); - } - - outputs = outputs.Concat(DotNetNuGetAddSource(srcSettings)); - } - - foreach (var pushSettings in files.Select - ( - file => - { - var x = new DotNetNuGetPushSettings() - .SetNoServiceEndpoint(NugetNoServiceEndpoint) - .EnableSkipDuplicate() - .SetSource(NugetFeed.Contains("nuget.org") ? "nuget.org" : "Silk-PushPackages") - .SetTargetPath(file); - if (NugetApiKey is not null) - { - x = x.SetApiKey(NugetApiKey); - } - - return x; - } - )) - { - outputs = outputs.Concat(DotNetNuGetPush(pushSettings)); - } - - if (!NugetFeed.Contains("nuget.org")) - { - outputs = outputs.Concat(DotNet("dotnet nuget remove source \"Silk-PushPackages\"")); - } - } - - return outputs; - } -} diff --git a/build/nuke/Build.Packaging.cs b/build/nuke/Build.Packaging.cs deleted file mode 100644 index ead3c47437..0000000000 --- a/build/nuke/Build.Packaging.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using Nuke.Common; -using Nuke.Common.CI; -using Nuke.Common.Tools.DotNet; -using static Nuke.Common.Tools.DotNet.DotNetTasks; - -partial class Build -{ - Target Pack => CommonTarget - ( - x => x.DependsOn(Restore) - .After(Clean, RegenerateBindings, BuildLibSilkDroid) - .Produces("build/output_packages/*.nupkg", "build/output_packages/*.snupkg") - .Executes - ( - () => ErrorsOnly - ( - s => s.SetProject(Solution) - .SetConfiguration(Configuration) - .EnableNoRestore() - .SetProperties(ProcessedMsbuildProperties) - ) - ) - ); -} diff --git a/build/nuke/Build.PublicApi.cs b/build/nuke/Build.PublicApi.cs deleted file mode 100644 index 657e172f0a..0000000000 --- a/build/nuke/Build.PublicApi.cs +++ /dev/null @@ -1,215 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.IO; -using System.Linq; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; - -partial class Build -{ - const string DefaultFormatCmd = "dotnet format"; - string FormatCmd - { - get - { - // hack to use the dotnet-format NOT included with the SDK if it's available. this is useful if the one - // that's shipped with the SDK is bugged. - var process = OperatingSystem.IsWindows() - ? InheritedShell("cmd /c where dotnet-format") - : InheritedShell("whereis dotnet-format"); - process.AssertWaitForExit(); - if (process.ExitCode == 1) - { - return DefaultFormatCmd; - } - - var path = process.Output.FirstOrDefault(x => !string.IsNullOrWhiteSpace(x.Text)).Text; - if (path is null) - { - return DefaultFormatCmd; - } - - const string startsWith = "dotnet-format:"; - if (path.StartsWith(startsWith)) - { - path = path[startsWith.Length..].Trim(); - } - - var split = path.Split(' '); - for (var i = 1; i <= split.Length; i++) - { - var candidatePath = string.Join(' ', split[..i]).Trim(); - if (File.Exists(candidatePath)) - { - var preface = OperatingSystem.IsWindows() ? "& " : string.Empty; - return $"{preface}\"{candidatePath}\""; - } - } - - return DefaultFormatCmd; - } - } - string FormatDeclCmd => $"{FormatCmd} analyzers {{0}} --diagnostics=RS0016 --severity=error -v=diag --include-generated"; - - Target ShipApi => CommonTarget - ( - x => x.Executes - ( - () => - { - foreach (var unshippedFile in RootDirectory.GlobFiles("**/PublicAPI.Unshipped.txt")) - { - var shippedFile = unshippedFile.Parent / "PublicAPI.Shipped.txt"; - if (!File.Exists(shippedFile)) - { - // common.props should've made this file, so if it's not here then i'm guessing this isn't a - // public api after all. - continue; - } - - var shippedLines = File.ReadAllLines(shippedFile).ToList(); - var unshippedLines = File.ReadAllLines(unshippedFile).ToList(); - for (var i = 0; i < unshippedLines.Count; i++) - { - var unshippedLine = unshippedLines[i]; - if (unshippedLine.StartsWith("//") || unshippedLine.StartsWith("#")) - { - continue; - } - - if (!shippedLines.Contains(unshippedLine)) - { - shippedLines.Add(unshippedLine); - } - - unshippedLines.RemoveAt(i); - i--; // so we don't skip the next element - } - - File.WriteAllLines(unshippedFile, unshippedLines); - File.WriteAllLines(shippedFile, shippedLines); - } - - MakePr(); - } - ) - ); - - Target DeclareApi => CommonTarget - ( - x => x.Executes - ( - () => InheritedShell(string.Format(FormatDeclCmd, "Silk.NET.sln")) - .AssertZeroExitCode() - ) - ); - - Target EnsureApiDeclared => CommonTarget - ( - x => x.Executes - ( - async () => - { - try - { - var cmd = string.Format - ( - FormatDeclCmd, - GitHubActions.Instance.Ref?.Contains("/pull/") ?? false - ? "inbound_pr/Silk.NET.sln" - : "Silk.NET.sln" - ); - - // I have no trust of incoming code, so let's take the github token away from them before they think - // about adding dodgy MSBuild targets that could swipe it - var githubToken = EnvironmentInfo.GetVariable("GITHUB_TOKEN"); - EnvironmentInfo.SetVariable("GITHUB_TOKEN", string.Empty); - - // run the format command - InheritedShell($"{cmd} --verify-no-changes").AssertZeroExitCode(); - - // add our github token back - EnvironmentInfo.SetVariable("GITHUB_TOKEN", githubToken); - await AddOrUpdatePrComment("public_api", "public_api_declared", true); - } - catch (ProcessException) - { - await AddOrUpdatePrComment("public_api", "public_api_not_declared"); - throw; - } - } - ) - ); - - void MakePr() - { - var pushableToken = EnvironmentInfo.GetVariable("PUSHABLE_GITHUB_TOKEN"); - var curBranch = GitCurrentBranch(RootDirectory); - if (GitHubActions.Instance?.Repository == "dotnet/Silk.NET" && - !string.IsNullOrWhiteSpace(pushableToken)) - { - if (curBranch == "HEAD" || string.IsNullOrWhiteSpace(curBranch)) - { - curBranch = "main"; // not a good assumption to make, but fine for now for our purposes - // (tags are created from main usually) - } - - // it's assumed that the pushable token was used to checkout the repo - Git("fetch --all", RootDirectory); - Git("pull"); - Git("add **/PublicAPI.*.txt", RootDirectory); - var newBranch = $"ci/{curBranch}/ship_apis"; - var curCommit = GitCurrentCommit(RootDirectory); - var commitCmd = StartProcess - ( - $"git commit -m \"Move unshipped APIs to shipped\"" - ) - .AssertWaitForExit(); - if (!commitCmd.Output.Any(x => x.Text.Contains("nothing to commit", StringComparison.OrdinalIgnoreCase))) - { - commitCmd.AssertZeroExitCode(); - } - - // ensure there are no other changes - Git("checkout HEAD .nuke/", RootDirectory); - Git("reset --hard", RootDirectory); - if (GitCurrentCommit(RootDirectory) != curCommit) // might get "nothing to commit", you never know... - { - Logger.Info("Checking for existing branch..."); - var exists = StartProcess("git", $"checkout \"{newBranch}\"", RootDirectory) - .AssertWaitForExit() - .ExitCode == 0; - if (!exists) - { - Logger.Info("None found, creating a new one..."); - Git($"checkout -b \"{newBranch}\""); - } - - Git($"merge -X theirs \"{curBranch}\" --allow-unrelated-histories"); - Git($"push --set-upstream origin \"{newBranch}\""); - if (!exists) - { - var github = new GitHubClient - ( - new ProductHeaderValue("Silk.NET-CI"), - new InMemoryCredentialStore(new Credentials(pushableToken)) - ); - - var pr = github.PullRequest.Create - ("dotnet", "Silk.NET", new("Move unshipped APIs to shipped", newBranch, curBranch)) - .GetAwaiter() - .GetResult(); - } - } - } - } -} diff --git a/build/nuke/Build.ReviewHelpers.cs b/build/nuke/Build.ReviewHelpers.cs deleted file mode 100644 index 7f4c2c2fc0..0000000000 --- a/build/nuke/Build.ReviewHelpers.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Nuke.Common; -using Nuke.Common.IO; - -partial class Build -{ - // ReSharper disable once RedundantEmptyObjectOrCollectionInitializer - readonly HashSet AllowedExclusions = new() - { - "silkwindow", - "silkgl", - "silkgltriangle", - "DotZLib" - }; - - Target ValidateSolution => CommonTarget - ( - x => x.Executes - ( - () => - { - var missedOut = GetNewProjects(); - if (missedOut.Any()) - { - Logger.Warn("Commands to add these for your convenience:"); - foreach (var file in missedOut) - { - Logger.Warn($"dotnet sln \"{Path.GetFileName(OriginalSolution.FileName)}\" add \"{file}\""); - } - - ControlFlow.Fail("Action required."); - } - } - ) - ); - - List GetNewProjects() - { - var missedOut = new List(); - var files = RootDirectory.GlobFiles("**\\*.csproj") - .Concat(RootDirectory.GlobFiles("**/*.csproj")) - .Where(x => !x.ToString().Contains("submodules")) - .ToArray(); - Logger.Info($"Found {files.Length} csproj files in \"{RootDirectory}\""); - foreach (var file in files) - { - var found = false; - foreach (var project in OriginalSolution.GetProjects("*")) - { - if (new FileInfo(file).FullName.Equals(new FileInfo(project.Path).FullName)) - { - found = true; - break; - } - } - - if (!found && !AllowedExclusions.Contains(Path.GetFileNameWithoutExtension(file))) - { - Logger.Error - ( - "A project has not been included in the solution and will not be shipped! " + - $"\"{file}\" if this is acceptable please add the project name (excluding the path and " + - "extension) to the AllowedExclusions array in the NUKE Build.ReviewHelpers.cs file." - ); - - missedOut.Add(Path.GetRelativePath(RootDirectory, file).Replace('\\', '/')); - } - } - - return missedOut; - } -} diff --git a/build/nuke/Build.SolutionGenerator.cs b/build/nuke/Build.SolutionGenerator.cs deleted file mode 100644 index e1c3d08c96..0000000000 --- a/build/nuke/Build.SolutionGenerator.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using Microsoft.Build.Locator; -using NuGet.Packaging; -using Nuke.Common; -using Nuke.Common.IO; -using Nuke.Common.ProjectModel; -using Nuke.Common.Utilities; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.ProjectModel.ProjectModelTasks; - -partial class Build -{ - [Parameter - ( - "If specified, generates a solution including only the specified projects or group of projects. You can " + - "provide individual project names or the name of the folder in which they're contained e.g. \"--projects " + - "opengl examples/csharp vulkan microsoft core.win32extras silk.net.opencl\". The Silk.NET prefix for " + - "individual projects is optional, but folder names will be preferred over project names so if you only want " + - "\"Silk.NET.Vulkan\" and not everything in \"src/Vulkan\", use \"--projects silk.net.vulkan\". The solution " + - "include project dependencies. The solution will be regenerated whenever you run a NUKE build with this " + - "specified, but if you don't want to run a build just use \"nuke sln --projects ...\" to run a dummy target." - )] - readonly string[] Projects; - - [Parameter("If specified, ignores any generated solution present and builds the entire project.", Name = "All")] - readonly bool BuildAll; - - Solution GeneratedSolution; - - Solution Solution => GeneratedSolution ?? (File.Exists(RootDirectory / "Silk.NET.gen.sln") && !BuildAll - ? ParseSolution(RootDirectory / "Silk.NET.gen.sln") - : OriginalSolution); - - void GenerateSolution() - { - if (Projects is not { Length: > 0 }) - { - Logger.Trace("Nothing to do for GenerateSolution."); - return; - } - - if (File.Exists(RootDirectory / "Silk.NET.gen.sln")) - { - DeleteFile(RootDirectory / "Silk.NET.gen.sln"); - } - - AbsolutePath Concat(AbsolutePath path, string next) - { - if (!Directory.Exists(path)) - { - return path / next; - } - - foreach (var dir in Directory.EnumerateDirectories(path)) - { - if (string.Equals(Path.GetFileName(dir), next, StringComparison.OrdinalIgnoreCase)) - { - return (AbsolutePath) dir; - } - } - - return path / next; - } - - var include = OriginalSolution.GetProjects("*") - .Where - ( - project => Projects.Any - ( - x => string.Equals(project.Name, x, StringComparison.OrdinalIgnoreCase) || - Concat(RootDirectory / "src", x).Contains(project.Path) || - Concat(RootDirectory / "examples" / "CSharp", x).Contains(project.Path) || - Concat(RootDirectory, x).Contains(project.Path) || - string.Equals(project.Name, $"Silk.NET.{x}", StringComparison.OrdinalIgnoreCase) - ) - ) - .Select(x => (string) x.Path) - .ToList(); - - // because this is a for loop and not a foreach loop, we don't need multiple passes because we'll naturally - // carry on to go over the latest items added at the end! - for (var i = 0; i < include.Count; i++) - { - var projPath = include[i]; - include.AddRange - ( - OriginalSolution.GetProjects("*") - .First(x => x.Path == projPath) - .GetItems("ProjectReference") - .Select(x => Path.GetFullPath(x, ((AbsolutePath) projPath).Parent)) - .Where(x => !include.Contains(x)) - ); - } - - // make a new Solution object to prevent us mutating the OriginalSolution - var genSln = ParseSolution(OriginalSolution.Path); - - // remove irrelevant projects - foreach (var project in genSln.GetProjects("*")) - { - if (!include.Contains(project.Path)) - { - genSln.RemoveProject(project); - } - } - - genSln.SaveAs(RootDirectory / "Silk.NET.gen.sln"); - Logger.Info($"Generated solution containing {genSln.AllProjects.Count} projects"); - } - - Target Sln => CommonTarget(); -} diff --git a/build/nuke/Build.Support.cs b/build/nuke/Build.Support.cs deleted file mode 100644 index 2d13394232..0000000000 --- a/build/nuke/Build.Support.cs +++ /dev/null @@ -1,238 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Microsoft.Build.Locator; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.IO; -using Nuke.Common.ProjectModel; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Utilities; -using Octokit; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; - -partial class Build -{ - static readonly Regex PrRegex = new("refs\\/pull\\/([0-9]+).*", RegexOptions.Compiled); - - /// Support plugins are available for: - /// - JetBrains ReSharper https://nuke.build/resharper - /// - JetBrains Rider https://nuke.build/rider - /// - Microsoft VisualStudio https://nuke.build/visualstudio - /// - Microsoft VSCode https://nuke.build/vscode - public static int Main() => Execute(x => x.Compile); - - [Parameter("Outputs build warnings instead of keeping the MSBuild logging quiet with just errors.")] - bool Warnings; - - static int IndexOfOrThrow(string x, char y) - { - var idx = x.IndexOf(y); - if (idx == -1) - { - throw new ArgumentException(); - } - - return idx; - } - - Dictionary CreateEnvVarDictionary() - => Environment.GetEnvironmentVariables() - .Cast() - .ToDictionary(x => (string) x.Key, x => (string) x.Value); - - IProcess InheritedShell(string cmd, [CanBeNull] string workDir = null) - => OperatingSystem.IsWindows() - ? StartProcess("powershell", $"-Command {cmd.DoubleQuote()}", workDir, CreateEnvVarDictionary()) - : StartProcess("bash", $"-c {cmd.DoubleQuote()}", workDir, CreateEnvVarDictionary()); - - void AddToPath(string dir) - { - var pathVar = Environment.GetEnvironmentVariables() - .Cast() - .First(x => ((string) x.Key).Equals("PATH", StringComparison.OrdinalIgnoreCase)); - Environment.SetEnvironmentVariable - ( - (string) pathVar.Key, - (string) pathVar.Value + (OperatingSystem.IsWindows() ? $";{dir}" : $":{dir}") - ); - } - - static void CopyAll(IEnumerable paths, AbsolutePath dir) - { - foreach (var path in paths) - { - CopyFile(path, dir / Path.GetFileName(path), FileExistsPolicy.Overwrite); - } - } - - [Nuke.Common.Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] - readonly string Configuration = IsLocalBuild ? "Debug" : "Release"; - - [Nuke.Common.Parameter("Extra properties passed to MSBuild commands")] - readonly string[] MsbuildProperties = Array.Empty(); - - [Solution] readonly Solution OriginalSolution; - - bool HasProcessedProperties { get; set; } - - Dictionary ProcessedMsbuildPropertiesValue; - - Dictionary ProcessedMsbuildProperties - { - get - { - if (!HasProcessedProperties) - { - ProcessedMsbuildPropertiesValue = MsbuildProperties.ToDictionary - ( - x => x.Substring(0, IndexOfOrThrow(x, '=')), x => - { - var idx = IndexOfOrThrow(x, '='); - return (object) x.Substring(idx + 1, x.Length - idx - 1); - } - ); - } - - return ProcessedMsbuildPropertiesValue; - } - } - - Target Prerequisites => _ => _.Executes - ( - () => - { - try - { - if (DotNet("dotnet nuget list source").Any(x => x.Text.Contains("Silk-PushPackages"))) - { - DotNet("dotnet nuget remove source \"Silk-PushPackages\""); - } - } - catch - { - // probably hasn't existed yet, don't care. - } - GenerateSolution(); - } - ); - - AbsolutePath SourceDirectory => RootDirectory / "src"; - - ConcurrentDictionary Targets = new(); - static Target GetEmptyTarget() => _ => _.Executes(() => { }); - Target CommonTarget([CanBeNull] Target actualTarget = null) => Targets.GetOrAdd - ( - actualTarget ??= GetEmptyTarget(), def => - { - def = def.DependsOn(Prerequisites); - return actualTarget is null ? def : actualTarget(def); - } - ); - - async Task AddOrUpdatePrComment(string type, string file, bool editOnly = false, params KeyValuePair[] subs) - { - var githubToken = EnvironmentInfo.GetVariable("GITHUB_TOKEN"); - if (string.IsNullOrWhiteSpace(githubToken)) - { - Logger.Info("GitHub token not found, skipping writing a comment."); - return; - } - - var @ref = GitHubActions.Instance?.Ref; - if (string.IsNullOrWhiteSpace(@ref)) - { - Logger.Info("Not running in GitHub Actions, skipping writing a comment."); - return; - } - - var prMatch = PrRegex.Match(@ref); - if (!prMatch.Success || prMatch.Groups.Count < 2) - { - Logger.Info($"Couldn't match {@ref} to a PR, skipping writing a comment."); - return; - } - - if (!int.TryParse(prMatch.Groups[1].Value, out var pr)) - { - Logger.Info($"Couldn't parse {@prMatch.Groups[1].Value} as an int, skipping writing a comment."); - return; - } - - var github = new GitHubClient - ( - new ProductHeaderValue("Silk.NET-CI"), - new Octokit.Internal.InMemoryCredentialStore(new Credentials(githubToken)) - ); - - var existingComment = (await github.Issue.Comment.GetAllForIssue("dotnet", "Silk.NET", pr)) - .FirstOrDefault(x => x.Body.Contains($"`{type}`") && x.User.Name == "github-actions[bot]"); - if (existingComment is null && editOnly) - { - Logger.Info("Edit only mode is on and no existing comment found, skipping writing a comment."); - return; - } - - var commentDir = RootDirectory / "build" / "comments"; - var commentText = await File.ReadAllTextAsync(commentDir / $"{file}.md") + - await File.ReadAllTextAsync(commentDir / "footer.md"); - foreach (var (key, value) in subs) - { - commentText = commentText.Replace($"{{{key}}}", value); - } - - commentText = commentText.Replace("{actionsRun}", GitHubActions.Instance?.RunNumber.ToString()) - .Replace("{typeId}", type); - - if (existingComment is not null) - { - Logger.Info("Updated the comment on the PR."); - await github.Issue.Comment.Update("dotnet", "Silk.NET", existingComment.Id, commentText); - } - else - { - Logger.Info("Added a comment to the PR."); - await github.Issue.Comment.Create("dotnet", "Silk.NET", pr, commentText); - } - } - - IReadOnlyCollection ErrorsOnly(Configure settings) where T : ToolSettings, new() - { - var toolSettings = settings(new T()); - var arguments = toolSettings.GetProcessArguments(); - - var finalArgs = arguments.RenderForExecution(); - if (!Warnings) - { - finalArgs += " /clp:errorsonly"; - } - - using var proc = StartProcess - ( - toolSettings.ProcessToolPath, - finalArgs, - toolSettings.ProcessWorkingDirectory, - toolSettings.ProcessEnvironmentVariables, - toolSettings.ProcessExecutionTimeout, - toolSettings.ProcessLogOutput, - toolSettings.ProcessLogInvocation, - toolSettings.ProcessCustomLogger, - arguments.FilterSecrets - ); - - proc.AssertZeroExitCode(); - return proc.Output; - } -} diff --git a/build/nuke/Build.cs b/build/nuke/Build.cs deleted file mode 100644 index 9d307cbe42..0000000000 --- a/build/nuke/Build.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Nuke.Common; -using Nuke.Common.Execution; - -partial class Build : NukeBuild -{ - // Welcome to the Silk.NET Build Infrastructure, powered by NUKE! - // -------------------------------------------------------------- - // The build system has been split up into a number of files, with this file containing some shorthands for command - // line usage. - // -------- - // Building - // -------- - // - Build.Core.cs - core .NET build, uses the dotnet CLI to build the solution. - // - Build.Generation.cs - a target for running our bespoke code generator BuildTools to generate all the .gen.cs - // files. - // - Native/*.cs - builds the native (C/C++) components used by Silk.NET. - // --------- - // Packaging - // --------- - // - Build.Packaging.cs - targets for producing NuGet packages and other artifacts for Silk.NET. - // - Build.CodeSigning.cs - targets for signing those artifacts using Authenticode and the .NET Foundation code - // signing service. - // ---------- - // Deployment - // ---------- - // - Build.NuGet.cs - targets for pushing NuGet packages to the NuGet Gallery (or some other feed). - // ------------- - // Miscellaneous - // ------------- - // - Build.ReviewHelpers.cs - targets used by CI jobs to help us automatically validate whether a PR is up to our - // standards and hasn't missed anything out. - // - Build.Support.cs - support code used throughout the NUKE project. - - Target FullCompile => CommonTarget - ( - x => x.DependsOn(BuildLibSilkDroid, RegenerateBindings, Compile) - ); - - Target FullPack => CommonTarget - ( - x => x.DependsOn(BuildLibSilkDroid, RegenerateBindings, Pack) - ); - - Target FullPushToNuGet => CommonTarget - ( - x => x.DependsOn(FullPack, PushToNuGet) - ); -} diff --git a/build/nuke/Native/Angle.cs b/build/nuke/Native/Angle.cs deleted file mode 100644 index b112833804..0000000000 --- a/build/nuke/Native/Angle.cs +++ /dev/null @@ -1,113 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - // NOTE: Disabled until space issues are resolved! If you are a user who needs this please submit a PR! - - // AbsolutePath AnglePath => RootDirectory / "build" / "submodules" / "ANGLE"; - - // Target Angle => CommonTarget - // ( - // x => x.Before(Compile) - // .After(Clean) - // .Executes - // ( - // () => - // { - // var @out = AnglePath / "out" / "Release"; - // EnsureCleanDirectory(@out); - // var zip = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); - // var unzip = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); - // HttpDownloadFile("https://storage.googleapis.com/chrome-infra/depot_tools.zip", zip); - // UncompressZip(zip, unzip); - // if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS()) - // { - // InheritedShell($"chmod -R 777 \"{unzip}\""); - // } - - // AddToPath(unzip); - // if (OperatingSystem.IsWindows()) - // { - // Environment.SetEnvironmentVariable("DEPOT_TOOLS_WIN_TOOLCHAIN", "0"); - // } - - // InheritedShell("python scripts/bootstrap.py", AnglePath).AssertZeroExitCode(); - // InheritedShell("gclient sync", AnglePath).AssertZeroExitCode(); - // if (OperatingSystem.IsLinux()) - // { - // InheritedShell("sudo ./build/install-build-deps.sh", AnglePath).AssertZeroExitCode(); - // } - - // var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.OpenGLES.ANGLE.Native" / "runtimes"; - // if (OperatingSystem.IsWindows()) - // { - // InheritedShell - // ( - // "gn gen out/Release " + - // "--args='is_component_build=false target_cpu=\"\"x86\"\" is_debug=false'", - // AnglePath - // ) - // .AssertZeroExitCode(); - // InheritedShell($"autoninja -C \"{@out}\"", AnglePath).AssertZeroExitCode(); - // CopyAll - // ( - // // libANGLE might not exist, this is fine - // @out.GlobFiles("libGLESv2.dll", "libEGL.dll", "libANGLE.dll"), - // runtimes / "win-x64" / "native" - // ); - // CopyAll - // ( - // @out.GlobFiles("libGLESv2.dll", "libEGL.dll", "libANGLE.dll"), - // runtimes / "win-x86" / "native" - // ); - // } - // else - // { - // InheritedShell - // ( - // $"gn gen \"{@out}\" " + - // "--args=\"is_component_build=false is_debug=false\"", - // AnglePath - // ) - // .AssertZeroExitCode(); - // InheritedShell($"autoninja -C \"{@out}\"", AnglePath).AssertZeroExitCode(); - // CopyAll - // ( - // @out.GlobFiles - // ( - // "libGLESv2.so", "libEGL.so", "libANGLE.so", - // "libGLESv2.dylib", "libEGL.dylib", "libANGLE.dylib" - // ), - // runtimes / (OperatingSystem.IsMacOS() ? "osx-x64" : "linux-x64") / "native" - // ); - // } - - // PrUpdatedNativeBinary("ANGLE"); - // } - // ) - // ); -} \ No newline at end of file diff --git a/build/nuke/Native/Assimp.cs b/build/nuke/Native/Assimp.cs deleted file mode 100644 index 15d92957d2..0000000000 --- a/build/nuke/Native/Assimp.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath AssimpPath => RootDirectory / "build" / "submodules" / "Assimp"; - - Target Assimp => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var @out = AssimpPath / "build"; - var prepare = "cmake -S. -B build -D BUILD_SHARED_LIBS=ON -DASSIMP_WARNINGS_AS_ERRORS=OFF"; - var build = $"cmake --build build --config Release{JobsArg}"; - EnsureCleanDirectory(@out); - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Assimp.Native" / "runtimes"; - if (OperatingSystem.IsWindows()) - { - InheritedShell($"{prepare} -A X64", AssimpPath) - .AssertZeroExitCode(); - InheritedShell(build, AssimpPath) - .AssertZeroExitCode(); - - CopyAs(@out, "bin/Release/assimp-*-mt.dll", runtimes / "win-x64" / "native" / "Assimp64.dll"); - EnsureCleanDirectory(@out); - - InheritedShell($"{prepare} -A Win32", AssimpPath) - .AssertZeroExitCode(); - InheritedShell(build, AssimpPath) - .AssertZeroExitCode(); - - CopyAs(@out, "bin/Release/assimp-*-mt.dll", runtimes / "win-x86" / "native" / "Assimp32.dll"); - } - else if (OperatingSystem.IsLinux()) - { - InheritedShell($"{prepare} -DCMAKE_SYSTEM_PROCESSOR=x86_64", AssimpPath) - .AssertZeroExitCode(); - InheritedShell(build, AssimpPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("bin/libassimp.so.5"), runtimes / "linux-x64" / "native"); - } - else if (OperatingSystem.IsMacOS()) - { - InheritedShell($"{prepare} -DCMAKE_OSX_ARCHITECTURES=x86_64", AssimpPath) - .AssertZeroExitCode(); - InheritedShell(build, AssimpPath) - .AssertZeroExitCode(); - CopyAll(@out.GlobFiles("bin/libassimp.5.dylib"), runtimes / "osx-x64" / "native"); - - EnsureCleanDirectory(@out); - - InheritedShell($"{prepare} -DCMAKE_OSX_ARCHITECTURES=arm64", AssimpPath) - .AssertZeroExitCode(); - InheritedShell(build, AssimpPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("bin/libassimp.5.dylib"), runtimes / "osx-arm64" / "native"); - } - - PrUpdatedNativeBinary("Assimp"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/Core.cs b/build/nuke/Native/Core.cs deleted file mode 100644 index 2ab58cdbb3..0000000000 --- a/build/nuke/Native/Core.cs +++ /dev/null @@ -1,121 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - [Nuke.Common.Parameter("Build native code")] readonly bool Native; - - [CanBeNull] string AndroidHomeValue; - - static string JobsArg => string.IsNullOrWhiteSpace(GitHubActions.Instance?.Job) - ? $" -j{Jobs}" - : string.Empty; - - static int Jobs => string.IsNullOrWhiteSpace(GitHubActions.Instance?.Job) - ? Environment.ProcessorCount - 1 - : 1; - - public void CopyAs(AbsolutePath @out, string from, string to) - { - var file = @out.GlobFiles(from).First(); - CopyFile(file, to, FileExistsPolicy.Overwrite); - } - - public void PrUpdatedNativeBinary(string name, [CanBeNull] string glob = null) - { - var pushableToken = EnvironmentInfo.GetVariable("PUSHABLE_GITHUB_TOKEN"); - var curBranch = GitCurrentBranch(RootDirectory); - if (!string.IsNullOrWhiteSpace(pushableToken) && - GitHubActions.Instance?.Repository == "dotnet/Silk.NET" && - curBranch != "HEAD" && - !string.IsNullOrWhiteSpace(curBranch) && - !curBranch.StartsWith("ci/", StringComparison.OrdinalIgnoreCase) && // ignore other CI branches - !curBranch.StartsWith("main", StringComparison.OrdinalIgnoreCase) && // submodule updates are done in PRs... - !curBranch.StartsWith("develop/", StringComparison.OrdinalIgnoreCase)) - { - // it's assumed that the pushable token was used to checkout the repo - if (OperatingSystem.IsWindows()) - { - glob ??= "src/Native/**/*.dll"; - } - else if (OperatingSystem.IsMacOS()) - { - glob ??= "src/Native/**/libMoltenVK.a src/Native/**/*.dylib"; - } - else if (OperatingSystem.IsLinux()) - { - glob ??= "src/Native/**/*.so*"; - } - - Git("fetch --all", RootDirectory); - Git("pull"); - Git($"add -f {glob}", RootDirectory); - var newBranch = $"ci/{curBranch}/{name.ToLower().Replace(' ', '_')}_bins"; - var curCommit = GitCurrentCommit(RootDirectory); - var commitCmd = InheritedShell - ( - $"git commit -m \"New binaries for {name} on {RuntimeInformation.OSDescription}\"" - ) - .AssertWaitForExit(); - if (!commitCmd.Output.Any(x => x.Text.Contains("no changes added to commit", StringComparison.OrdinalIgnoreCase) || x.Text.Contains("nothing to commit", StringComparison.OrdinalIgnoreCase))) - { - commitCmd.AssertZeroExitCode(); - } - - // ensure there are no other changes - Git("checkout HEAD .nuke/", RootDirectory); - Git("reset --hard", RootDirectory); - if (GitCurrentCommit(RootDirectory) != curCommit) // might get "nothing to commit", you never know... - { - Logger.Info("Checking for existing branch..."); - var exists = StartProcess("git", $"checkout \"{newBranch}\"", RootDirectory) - .AssertWaitForExit() - .ExitCode == 0; - if (!exists) - { - Logger.Info("None found, creating a new one..."); - Git($"checkout -b \"{newBranch}\""); - } - - Git($"merge -X theirs \"{curBranch}\" --allow-unrelated-histories"); - Git($"push --set-upstream origin \"{newBranch}\""); - if (!exists) - { - var github = new GitHubClient - ( - new ProductHeaderValue("Silk.NET-CI"), - new InMemoryCredentialStore(new Credentials(pushableToken)) - ); - - var pr = github.PullRequest.Create - ("dotnet", "Silk.NET", new($"Update {name} binaries", newBranch, curBranch)) - .GetAwaiter() - .GetResult(); - } - } - } - } -} \ No newline at end of file diff --git a/build/nuke/Native/Dxvk.cs b/build/nuke/Native/Dxvk.cs deleted file mode 100644 index f546f4206f..0000000000 --- a/build/nuke/Native/Dxvk.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath DxvkPath => RootDirectory / "build" / "submodules" / "dxvk"; - - Target Dxvk => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - if (!OperatingSystem.IsLinux()) - { - throw new Exception("This task can only run under Linux!"); - } - - var @out = DxvkPath / "output"; - var glfwOut = DxvkPath / "glfw-output"; - EnsureCleanDirectory(@out); - EnsureCleanDirectory(glfwOut); - - InheritedShell - ( - $"./package-release.sh master output --no-package", - DxvkPath - ) - .AssertZeroExitCode(); - - var win32GlfwLibs = @out.GlobFiles("dxvk-master/x32/*"); - - foreach (var lib in win32GlfwLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "dxvk-" + fileName); - } - - var win64GlfwLibs = @out.GlobFiles("dxvk-master/x64/*"); - - foreach (var lib in win64GlfwLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "dxvk-" + fileName); - } - - InheritedShell - ( - $"./package-native.sh master output --no-package", - DxvkPath - ) - .AssertZeroExitCode(); - - var mesonOptionsPath = Path.Combine(DxvkPath, "meson_options.txt"); - - //Replace `sdl2` with `glfw` in the meson options file, to build with GLFW WSI instead of SDL2 WSI - File.WriteAllText(mesonOptionsPath, File.ReadAllText(mesonOptionsPath).Replace("sdl2", "glfw")); - InheritedShell - ( - $"./package-native.sh master glfw-output --no-package", - DxvkPath - ) - .AssertZeroExitCode(); - - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.DXVK.Native" / "runtimes"; - - //Copy the windows binaries - CopyAll(@out.GlobFiles("dxvk-master/x64/*"), runtimes / "win-x64" / "native"); - CopyAll(@out.GlobFiles("dxvk-master/x32/*"), runtimes / "win-x86" / "native"); - - var linux64SdlLibs = @out.GlobFiles("dxvk-native-master/usr/lib/*"); - - foreach (var lib in linux64SdlLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "sdl2-" + fileName); - } - - var linux64GlfwLibs = glfwOut.GlobFiles("dxvk-native-master/usr/lib/*"); - - foreach (var lib in linux64GlfwLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "glfw-" + fileName); - } - - var linux32SdlLibs = @out.GlobFiles("dxvk-native-master/usr/lib32/*"); - - foreach (var lib in linux32SdlLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "sdl2-" + fileName); - } - - var linux32GlfwLibs = glfwOut.GlobFiles("dxvk-native-master/usr/lib32/*"); - - foreach (var lib in linux32GlfwLibs) - { - var fileName = Path.GetFileName(lib); - RenameFile(lib.Parent / fileName, lib.Parent / "glfw-" + fileName); - } - - //Copy the linux SDL binaries - CopyAll(@out.GlobFiles("dxvk-native-master/usr/lib/*"), runtimes / "linux-x64" / "native"); - CopyAll(@out.GlobFiles("dxvk-native-master/usr/lib32/*"), runtimes / "linux-x86" / "native"); - - //Copy the linux GLFW binaries - CopyAll(glfwOut.GlobFiles("dxvk-native-master/usr/lib/*"), runtimes / "linux-x64" / "native"); - CopyAll(glfwOut.GlobFiles("dxvk-native-master/usr/lib32/*"), runtimes / "linux-x86" / "native"); - - var winx64 = runtimes / "win-x64" / "native"; - var winx86 = runtimes / "win-x86" / "native"; - - var linuxx64 = runtimes / "linux-x64" / "native"; - var linuxx86 = runtimes / "linux-x86" / "native"; - - var glob = string.Empty; - var files = winx64.GlobFiles("*.dll") - .Concat(winx86.GlobFiles("*.dll")) - .Concat(linuxx64.GlobFiles("*.so")) - .Concat(linuxx86.GlobFiles("*.so")); - - glob = files.Aggregate(glob, (current, path) => current + $"\"{path}\" "); - - PrUpdatedNativeBinary - ( - "DXVK", glob - ); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/GLFW.cs b/build/nuke/Native/GLFW.cs deleted file mode 100644 index 57b472de5e..0000000000 --- a/build/nuke/Native/GLFW.cs +++ /dev/null @@ -1,101 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath GLFWPath => RootDirectory / "build" / "submodules" / "GLFW"; - - Target GLFW => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var @out = GLFWPath / "build"; - var prepare = "cmake -S. -B build -D BUILD_SHARED_LIBS=ON"; - var build = $"cmake --build build --config Release{JobsArg}"; - EnsureCleanDirectory(@out); - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.GLFW.Native" / "runtimes"; - if (OperatingSystem.IsWindows()) - { - InheritedShell($"{prepare} -A X64", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("src/Release/glfw3.dll"), runtimes / "win-x64" / "native"); - - EnsureCleanDirectory(@out); - - InheritedShell($"{prepare} -A Win32", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("src/Release/glfw3.dll"), runtimes / "win-x86" / "native"); - - EnsureCleanDirectory(@out); - - InheritedShell($"{prepare} -A arm64", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("src/Release/glfw3.dll"), runtimes / "win-arm64" / "native"); - } - else if (OperatingSystem.IsLinux()) - { - InheritedShell($"{prepare} -DCMAKE_SYSTEM_PROCESSOR=x86_64", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - CopyAll(@out.GlobFiles("src/libglfw.so"), runtimes / "linux-x64" / "native"); - } - else if (OperatingSystem.IsMacOS()) - { - InheritedShell($"{prepare} -DCMAKE_OSX_ARCHITECTURES=x86_64", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - CopyAll(@out.GlobFiles("src/libglfw.3.dylib"), runtimes / "osx-x64" / "native"); - - EnsureCleanDirectory(@out); - - InheritedShell($"{prepare} -DCMAKE_OSX_ARCHITECTURES=arm64", GLFWPath) - .AssertZeroExitCode(); - InheritedShell(build, GLFWPath) - .AssertZeroExitCode(); - - CopyAll(@out.GlobFiles("src/libglfw.3.dylib"), runtimes / "osx-arm64" / "native"); - } - - PrUpdatedNativeBinary("GLFW"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/MoltenVK.cs b/build/nuke/Native/MoltenVK.cs deleted file mode 100644 index 5cbda80916..0000000000 --- a/build/nuke/Native/MoltenVK.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using Nuke.Common; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using static Nuke.Common.IO.FileSystemTasks; - -partial class Build { - AbsolutePath MoltenVKPath => RootDirectory / "build" / "submodules" / "MoltenVK"; - - Target MoltenVK => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - if (OperatingSystem.IsMacOS()) - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.MoltenVK.Native" / "runtimes"; - - InheritedShell($"./fetchDependencies --ios --iossim --maccat", MoltenVKPath).AssertZeroExitCode(); - InheritedShell($"make ios iossim maccat", MoltenVKPath).AssertZeroExitCode(); - - var xcFrameworkDir = MoltenVKPath / "Package" / "Release" / "MoltenVK" / "MoltenVK.xcframework"; - - CopyFile(xcFrameworkDir / "ios-arm64" / "libMoltenVK.a", runtimes / "ios" / "native" / "libMoltenVK.a", FileExistsPolicy.Overwrite); - CopyFile(xcFrameworkDir / "ios-arm64_x86_64-simulator" / "libMoltenVK.a", runtimes / "iossimulator" / "native" / "libMoltenVK.a", FileExistsPolicy.Overwrite); - CopyFile(xcFrameworkDir / "ios-arm64_x86_64-maccatalyst" / "libMoltenVK.a", runtimes / "maccatalyst" / "native" / "libMoltenVK.a", FileExistsPolicy.Overwrite); - } - - PrUpdatedNativeBinary("MoltenVK"); - } - ) - ); -} diff --git a/build/nuke/Native/SDL2.cs b/build/nuke/Native/SDL2.cs deleted file mode 100644 index 1f6b50b152..0000000000 --- a/build/nuke/Native/SDL2.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build -{ - AbsolutePath SDL2Path => RootDirectory / "build" / "submodules" / "SDL"; - - static readonly (string Sdk, string Arch, string Rid, string Args)[] iPhoneConfigs = new[] - { - // NB: Xcode has forced us to stop support for i386 archs - // NB: Xcode has forced us to stop support for iPhone 5 and below (armv7, armv7s) - ("iphonesimulator", "x86_64", "iossimulator", "-target \"Static Library-iOS\""), - ("iphonesimulator", "arm64", "iossimulator", "-target \"Static Library-iOS\""), - ("iphoneos", "arm64", "ios", "-target \"Static Library-iOS\""), - ("iphoneos", "arm64e", "ios", "-target \"Static Library-iOS\""), - ("appletvsimulator", "x86_64", "tvossimulator", "-target \"Static Library-tvOS\""), - ("appletvsimulator", "arm64", "tvossimulator", "-target \"Static Library-tvOS\""), - ("appletvos", "arm64", "tvos", "-target \"Static Library-tvOS\""), - ("appletvos", "arm64e", "tvos", "-target \"Static Library-tvOS\""), - ("macosx", "x86_64", "osx", "-target \"Shared Library\""), - ("macosx", "arm64", "osx", "-target \"Shared Library\""), - // TODO figure out how to compile for Mac Catalyst - //("macosx", "x86_64", "maccatalyst", "-target \"Shared Library-iOS\" -destination \"platform=macOS,variant=Mac Catalyst\""), - //("macosx", "arm64", "maccatalyst", "-target \"Shared Library-iOS\" -destination \"platform=macOS,variant=Mac Catalyst\""), - }; - - Target SDL2 => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.SDL.Native" / "runtimes"; - - var x86BuildDir = SDL2Path / "buildx86"; - var x64BuildDir = SDL2Path / "buildx64"; - var ARM64BuildDir = SDL2Path / "buildARM64"; - EnsureCleanDirectory(x86BuildDir); - EnsureCleanDirectory(x64BuildDir); - EnsureCleanDirectory(ARM64BuildDir); - - if (OperatingSystem.IsWindows()) - { - var prepare = "cmake .. -DBUILD_SHARED_LIBS=ON"; - var build = $"cmake --build . --config Release{JobsArg}"; - - InheritedShell($"{prepare} -A Win32", x86BuildDir).AssertZeroExitCode(); - InheritedShell(build, x86BuildDir).AssertZeroExitCode(); - - InheritedShell($"{prepare} -A X64", x64BuildDir).AssertZeroExitCode(); - InheritedShell(build, x64BuildDir).AssertZeroExitCode(); - - InheritedShell($"{prepare} -A arm64", ARM64BuildDir).AssertZeroExitCode(); - InheritedShell(build, ARM64BuildDir).AssertZeroExitCode(); - - CopyFile(x86BuildDir / "Release" / "SDL2.dll", runtimes / "win-x86" / "native" / "SDL2.dll", FileExistsPolicy.Overwrite); - CopyFile(x64BuildDir / "Release" / "SDL2.dll", runtimes / "win-x64" / "native" / "SDL2.dll", FileExistsPolicy.Overwrite); - CopyFile(ARM64BuildDir / "Release" / "SDL2.dll", runtimes / "win-arm64" / "native" / "SDL2.dll", FileExistsPolicy.Overwrite); - } - - if (OperatingSystem.IsLinux()) - { - if (RuntimeInformation.OSArchitecture == Architecture.Arm64) - { - InheritedShell("cmake ..", x86BuildDir).AssertZeroExitCode(); - InheritedShell("cmake --build .", x86BuildDir).AssertZeroExitCode(); - - CopyFile(ARM64BuildDir.GlobFiles("libSDL2-2.0.so*").First(), runtimes / "linux-arm64" / "native" / "libSDL2-2.0.so", FileExistsPolicy.Overwrite); - } - else if (RuntimeInformation.OSArchitecture == Architecture.X64) - { - var envVars32bit = "CFLAGS='-m32 -O2' CXXFLAGS='-m32 -O2' LDFLAGS=-m32"; - var envVars64bit = "CFLAGS=-O2 CXXFLAGS=-O2"; - - InheritedShell($"{envVars32bit} ./configure --prefix={x86BuildDir}", SDL2Path).AssertZeroExitCode(); - InheritedShell($"{envVars32bit} make {JobsArg}", SDL2Path).AssertZeroExitCode(); - InheritedShell($"make install", SDL2Path).AssertZeroExitCode(); - - InheritedShell($"{envVars64bit} ./configure --prefix={x64BuildDir}", SDL2Path).AssertZeroExitCode(); - InheritedShell($"{envVars64bit} make {JobsArg}", SDL2Path).AssertZeroExitCode(); - InheritedShell($"make install", SDL2Path).AssertZeroExitCode(); - - //Strip the libraries - InheritedShell($"strip {x86BuildDir / "lib" / "libSDL2-2.0.so*"}", SDL2Path).AssertZeroExitCode(); - InheritedShell($"strip {x64BuildDir / "lib" / "libSDL2-2.0.so*"}", SDL2Path).AssertZeroExitCode(); - - CopyFile((x86BuildDir / "lib").GlobFiles("libSDL2-2.0.so*").First(), runtimes / "linux-x86" / "native" / "libSDL2-2.0.so", FileExistsPolicy.Overwrite); - CopyFile((x64BuildDir / "lib").GlobFiles("libSDL2-2.0.so*").First(), runtimes / "linux-x64" / "native" / "libSDL2-2.0.so", FileExistsPolicy.Overwrite); - } - else - { - throw new Exception($"Unable to build SDL libs on your architecture ({RuntimeInformation.OSArchitecture})."); - } - } - - if (OperatingSystem.IsMacOS()) - { - // iOS build/hackery ported from https://github.com/Ultz/SDL-Xamarin.iOS - var mainH = File.ReadAllText(SDL2Path / "include" / "SDL_main.h"); - try - { - File.WriteAllText(SDL2Path / "include" / "SDL_main.h", $"#define SDL_MAIN_HANDLED\n{mainH}"); - EnsureCleanDirectory(SDL2Path / "allbuild"); - foreach (var (sdk, arch, rid, args) in iPhoneConfigs) - { - InheritedShell($"xcodebuild -project SDL.xcodeproj {args} -sdk {sdk} -arch {arch} -configuration Release clean build -jobs {Jobs}", SDL2Path / "XCode" / "SDL") - .AssertZeroExitCode(); - var ext = rid is "maccatalyst" or "osx" ? "dylib" : "a"; - var cfg = rid is "maccatalyst" or "osx" ? "Release" : $"Release-{sdk}"; - CopyFile(SDL2Path / "XCode" / "SDL" / "build" / cfg / $"libSDL2.{ext}", SDL2Path / "allbuild" / $"libSDL2.{sdk}.{arch}.{rid}.{ext}"); - } - foreach (var rid in iPhoneConfigs.GroupBy(x => x.Rid)) - { - var ext = rid.Key is "maccatalyst" or "osx" ? "dylib" : "a"; - var @in = string.Join("\" \"", rid.Select(x => SDL2Path / "allbuild" / $"libSDL2.{x.Sdk}.{x.Arch}.{rid.Key}.{ext}")); - var @out = runtimes / rid.Key / "native" / (ext is "dylib" ? "libSDL2-2.0.dylib" : "libSDL2.a"); - EnsureCleanDirectory(Path.GetDirectoryName(@out)); - InheritedShell($"lipo -create -output \"{@out}\" \"{@in}\"").AssertZeroExitCode(); - } - } - finally - { - File.WriteAllText(SDL2Path / "include" / "SDL_main.h", mainH); - } - } - - PrUpdatedNativeBinary("SDL2"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/SPIRVCross.cs b/build/nuke/Native/SPIRVCross.cs deleted file mode 100644 index 1800d99b23..0000000000 --- a/build/nuke/Native/SPIRVCross.cs +++ /dev/null @@ -1,165 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath SPIRVCrossPath => RootDirectory / "build" / "submodules" / "SPIRV-Cross"; - - //This is the build script for the SPIRV-Reflect shared library - const string SPIRVCrossBuildScript = @"const std = @import(""std""); -const fs = std.fs; - -pub fn build(b: *std.Build) void { - const target = b.standardTargetOptions(.{}); - const mode = b.standardOptimizeOption(.{}); - - const shared_lib_options: std.build.SharedLibraryOptions = .{ - .name = ""spirv-cross"", - .target = target, - .optimize = mode, - }; - - const lib: *std.build.LibExeObjStep = b.addSharedLibrary(shared_lib_options); - lib.linkLibC(); - lib.linkLibCpp(); - - var flags = &.{ ""-std=c++11"", ""-fPIC"" }; - - //Enable the GLSL, HLSL, MSL, CPP, and Reflect C APIs - lib.defineCMacro(""SPIRV_CROSS_C_API_GLSL"", ""1""); - lib.defineCMacro(""SPIRV_CROSS_C_API_HLSL"", ""1""); - lib.defineCMacro(""SPIRV_CROSS_C_API_MSL"", ""1""); - lib.defineCMacro(""SPIRV_CROSS_C_API_CPP"", ""1""); - lib.defineCMacro(""SPIRV_CROSS_C_API_REFLECT"", ""1""); - - //Export the C API symbols - lib.defineCMacro(""SPVC_EXPORT_SYMBOLS"", ""1""); - - //On windows, we need to specify `__declspec(dllexport)` ourselves - //else SPIRV-Cross knows this is a GNU toolchain and uses the wrong attribute in this case - if (target.isWindows()) { - lib.defineCMacro(""SPVC_PUBLIC_API"", ""__declspec(dllexport)""); - } - - //If we arent in debug, defined NDEBUG - if (mode != .Debug) - lib.defineCMacro(""NDEBUG"", ""1""); - - lib.addCSourceFiles(.{ - .files = &.{ - root_path ++ ""spirv_cross.cpp"", - root_path ++ ""spirv_cfg.cpp"", - root_path ++ ""spirv_cpp.cpp"", - root_path ++ ""spirv_cross_c.cpp"", - root_path ++ ""spirv_cross_parsed_ir.cpp"", - root_path ++ ""spirv_cross_util.cpp"", - root_path ++ ""spirv_glsl.cpp"", - root_path ++ ""spirv_hlsl.cpp"", - root_path ++ ""spirv_msl.cpp"", - root_path ++ ""spirv_parser.cpp"", - root_path ++ ""spirv_reflect.cpp"", - }, - .flags = flags - }); - - b.installArtifact(lib); -} - -fn root_dir() []const u8 { - return std.fs.path.dirname(@src().file) orelse "".""; -} - -const root_path = root_dir() ++ ""/""; -"; - - Target SPIRVCross => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.SPIRV.Cross.Native" / "runtimes"; - - //Write out the build script to the directory - File.WriteAllText(SPIRVCrossPath / "build.zig", SPIRVCrossBuildScript); - - { //Linux - //Build for Linux x86_64 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=x86_64-linux-gnu.2.16 --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "libspirv-cross.so", runtimes / "linux-x64" / "native" / "libspirv-cross.so", FileExistsPolicy.Overwrite); - - //Build for Linux x86 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=x86-linux-gnu.2.16 --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "libspirv-cross.so", runtimes / "linux-x86" / "native" / "libspirv-cross.so", FileExistsPolicy.Overwrite); - - //Build for Linux arm64 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=aarch64-linux-gnu.2.16 --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "libspirv-cross.so", runtimes / "linux-arm64" / "native" / "libspirv-cross.so", FileExistsPolicy.Overwrite); - } - - { //Windows - //Build for Windows x86_64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86_64-windows --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "spirv-cross.dll", runtimes / "win-x64" / "native" / "spirv-cross.dll", FileExistsPolicy.Overwrite); - - //Build for Windows x86 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86-windows --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "spirv-cross.dll", runtimes / "win-x86" / "native" / "spirv-cross.dll", FileExistsPolicy.Overwrite); - - //Build for Windows arm64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=aarch64-windows --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "spirv-cross.dll", runtimes / "win-arm64" / "native" / "spirv-cross.dll", FileExistsPolicy.Overwrite); - } - - { //MacOS - //Build for MacOS x86_64 - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=x86_64-macos --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "libspirv-cross.dylib", runtimes / "osx-x64" / "native" / "libspirv-cross.dylib", FileExistsPolicy.Overwrite); - - //Build for MacOS arm64 - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=aarch64-macos --verbose", SPIRVCrossPath).AssertZeroExitCode(); - CopyFile(SPIRVCrossPath / "zig-out" / "lib" / "libspirv-cross.dylib", runtimes / "osx-arm64" / "native" / "libspirv-cross.dylib", FileExistsPolicy.Overwrite); - } - - var files = (runtimes / "win-x64" / "native").GlobFiles("*.dll") - .Concat((runtimes / "win-x86" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "win-arm64" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "osx-x64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "osx-arm64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "linux-x64" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-x86" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-arm64" / "native").GlobFiles("*.so")); - - var glob = string.Empty; - glob = files.Aggregate(glob, (current, path) => current + $"\"{path}\" "); - - PrUpdatedNativeBinary("SPIRV-Cross", glob); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/SPIRVReflect.cs b/build/nuke/Native/SPIRVReflect.cs deleted file mode 100644 index acaf6a98de..0000000000 --- a/build/nuke/Native/SPIRVReflect.cs +++ /dev/null @@ -1,119 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath SPIRVReflectPath => RootDirectory / "build" / "submodules" / "SPIRV-Reflect"; - - //This is the build script for the SPIRV-Reflect shared library - const string SPIRVReflectBuildScript = @"const std = @import(""std""); -const fs = std.fs; - -pub fn build(b: *std.Build) void { - const target = b.standardTargetOptions(.{}); - const mode = b.standardOptimizeOption(.{}); - - const shared_lib_options: std.build.SharedLibraryOptions = .{ - .name = ""spirv-reflect"", - .target = target, - .optimize = mode, - }; - - const lib: *std.build.LibExeObjStep = b.addSharedLibrary(shared_lib_options); - lib.linkLibC(); - - lib.addCSourceFiles(.{ .files = &.{""spirv_reflect.c""}, .flags = &.{ ""-std=c99"", ""-fPIC"" } }); - b.installArtifact(lib); -}"; - - Target SPIRVReflect => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.SPIRV.Reflect.Native" / "runtimes"; - - //Write out the build script to the directory - File.WriteAllText(SPIRVReflectPath / "build.zig", SPIRVReflectBuildScript); - - { //Linux - //Build for Linux x86_64 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86_64-linux-gnu.2.16 --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "libspirv-reflect.so", runtimes / "linux-x64" / "native" / "libspirv-reflect.so", FileExistsPolicy.Overwrite); - - //Build for Linux x86 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86-linux-gnu.2.16 --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "libspirv-reflect.so", runtimes / "linux-x86" / "native" / "libspirv-reflect.so", FileExistsPolicy.Overwrite); - - //Build for Linux arm64 with glibc 2.26 (old version specified for compatibility) - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=aarch64-linux-gnu.2.16 --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "libspirv-reflect.so", runtimes / "linux-arm64" / "native" / "libspirv-reflect.so", FileExistsPolicy.Overwrite); - } - - { //Windows - //Build for Windows x86_64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86_64-windows --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "spirv-reflect.dll", runtimes / "win-x64" / "native" / "spirv-reflect.dll", FileExistsPolicy.Overwrite); - - //Build for Windows x86 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86-windows --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "spirv-reflect.dll", runtimes / "win-x86" / "native" / "spirv-reflect.dll", FileExistsPolicy.Overwrite); - - //Build for Windows arm64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=aarch64-windows --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "spirv-reflect.dll", runtimes / "win-arm64" / "native" / "spirv-reflect.dll", FileExistsPolicy.Overwrite); - } - - { //MacOS - //Build for MacOS x86_64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=x86_64-macos --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "libspirv-reflect.dylib", runtimes / "osx-x64" / "native" / "libspirv-reflect.dylib", FileExistsPolicy.Overwrite); - - //Build for MacOS arm64 - InheritedShell($"zig build -Doptimize=ReleaseFast -Dtarget=aarch64-macos --verbose", SPIRVReflectPath).AssertZeroExitCode(); - CopyFile(SPIRVReflectPath / "zig-out" / "lib" / "libspirv-reflect.dylib", runtimes / "osx-arm64" / "native" / "libspirv-reflect.dylib", FileExistsPolicy.Overwrite); - } - - var files = (runtimes / "win-x64" / "native").GlobFiles("*.dll") - .Concat((runtimes / "win-x86" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "win-arm64" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "osx-x64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "osx-arm64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "linux-x64" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-x86" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-arm64" / "native").GlobFiles("*.so")); - - var glob = string.Empty; - glob = files.Aggregate(glob, (current, path) => current + $"\"{path}\" "); - - PrUpdatedNativeBinary("SPIRV-Reflect", glob); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/Shaderc.cs b/build/nuke/Native/Shaderc.cs deleted file mode 100644 index ae2f0310c1..0000000000 --- a/build/nuke/Native/Shaderc.cs +++ /dev/null @@ -1,639 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - const string ShadercBuildScript = @" - const std = @import(""std""); -const fs = std.fs; - -const spirv_tools_root = root_path ++ ""third_party/spirv-tools/""; -const root_glslang_path = root_path ++ ""third_party/glslang/""; - -const grammar_processing_script = spirv_tools_root ++ ""utils/generate_grammar_tables.py""; - -const spirv_headers_include_dir = root_path ++ ""third_party/spirv-headers/include/""; -const debuginfo_grammar_json_file = spirv_headers_include_dir ++ ""spirv/unified1/extinst.debuginfo.grammar.json""; -const glsl_grammar_file = spirv_headers_include_dir ++ ""spirv/unified1/extinst.glsl.std.450.grammar.json""; -const opencl_grammar_file = spirv_headers_include_dir ++ ""spirv/unified1/extinst.opencl.std.100.grammar.json""; -const cldebuginfo100_grammar_json_file = spirv_headers_include_dir ++ ""spirv/unified1/extinst.opencl.debuginfo.100.grammar.json""; -const vkdebuginfo100_grammar_json_file = spirv_headers_include_dir ++ ""spirv/unified1/extinst.nonsemantic.shader.debuginfo.100.grammar.json""; - -var flags = &.{ ""-std=c++17"", ""-fPIC"" }; - -fn spvtoolsExtinstLangHeaders(b: *std.Build, comptime name: []const u8, comptime grammar_file: []const u8) *std.Build.Step.Run { - return b.addSystemCommand(&.{ - ""python3"", - spirv_tools_root ++ ""utils/generate_language_headers.py"", - ""--extinst-grammar="" ++ grammar_file, - ""--extinst-output-path="" ++ spirv_tools_root ++ ""source/"" ++ name ++ "".h"", - }); -} - -fn spvtoolsVendorTables( - b: *std.Build, - comptime vendor_table: []const u8, - comptime operand_kind_prefix: []const u8, -) *std.Build.Step.Run { - return b.addSystemCommand(&.{ - ""python3"", - grammar_processing_script, - ""--extinst-vendor-grammar="" ++ spirv_headers_include_dir ++ ""spirv/unified1/extinst."" ++ vendor_table ++ "".grammar.json"", - ""--vendor-insts-output="" ++ spirv_tools_root ++ ""source/"" ++ vendor_table ++ "".insts.inc"", - ""--vendor-operand-kind-prefix="" ++ operand_kind_prefix, - }); -} - -fn spvTools(b: *std.Build, target: std.zig.CrossTarget, optimize: std.builtin.OptimizeMode) *std.Build.Step.Compile { - const generate_grammar_files_step = b.addSystemCommand(&.{ - ""python3"", - grammar_processing_script, - ""--spirv-core-grammar="" ++ spirv_headers_include_dir ++ ""spirv/unified1/spirv.core.grammar.json"", - ""--extinst-debuginfo-grammar="" ++ debuginfo_grammar_json_file, - ""--extinst-cldebuginfo100-grammar="" ++ cldebuginfo100_grammar_json_file, - ""--extension-enum-output="" ++ spirv_tools_root ++ ""source/extension_enum.inc"", - ""--enum-string-mapping-output="" ++ spirv_tools_root ++ ""source/enum_string_mapping.inc"", - ""--output-language=c++"", - }); - - const generate_spirv_core_tables = b.addSystemCommand(&.{ - ""python3"", - grammar_processing_script, - ""--spirv-core-grammar="" ++ spirv_headers_include_dir ++ ""spirv/unified1/spirv.core.grammar.json"", - ""--extinst-debuginfo-grammar="" ++ debuginfo_grammar_json_file, - ""--extinst-cldebuginfo100-grammar="" ++ cldebuginfo100_grammar_json_file, - ""--core-insts-output="" ++ spirv_tools_root ++ ""source/core.insts-unified1.inc"", - ""--operand-kinds-output="" ++ spirv_tools_root ++ ""source/operand.kinds-unified1.inc"", - ""--output-language=c++"", - }); - - const generate_glsl_tables = b.addSystemCommand(&.{ - ""python3"", - grammar_processing_script, - ""--extinst-glsl-grammar="" ++ glsl_grammar_file, - ""--glsl-insts-output="" ++ spirv_tools_root ++ ""source/glsl.std.450.insts.inc"", - ""--output-language=c++"", - }); - - const generate_opencl_tables = b.addSystemCommand(&.{ - ""python3"", - grammar_processing_script, - ""--extinst-opencl-grammar="" ++ opencl_grammar_file, - ""--opencl-insts-output="" ++ spirv_tools_root ++ ""source/opencl.std.insts.inc"", - }); - - const process_spirv_xml = b.addSystemCommand(&.{ - ""python3"", - spirv_tools_root ++ ""utils/generate_registry_tables.py"", - ""--xml="" ++ spirv_headers_include_dir ++ ""spirv/spir-v.xml"", - ""--generator-output="" ++ spirv_tools_root ++ ""source/generators.inc"", - }); - - const generate_spirv_tools_build_version = b.addSystemCommand(&.{ - ""python3"", - spirv_tools_root ++ ""utils/update_build_version.py"", - spirv_tools_root ++ ""CHANGES"", - spirv_tools_root ++ ""source/build-version.inc"", - }); - - const debug_info_header = spvtoolsExtinstLangHeaders(b, ""DebugInfo"", debuginfo_grammar_json_file); - const cl_debug_info_header_100 = spvtoolsExtinstLangHeaders(b, ""OpenCLDebugInfo100"", cldebuginfo100_grammar_json_file); - const non_semantic_shader_debug_info_100 = spvtoolsExtinstLangHeaders(b, ""NonSemanticShaderDebugInfo100"", vkdebuginfo100_grammar_json_file); - - const spirv_tools: *std.build.Step.Compile = b.addStaticLibrary(.{ - .name = ""spirv_tools"", - .target = target, - .optimize = optimize, - }); - spirv_tools.linkLibC(); - spirv_tools.linkLibCpp(); - - spirv_tools.step.dependOn(&generate_glsl_tables.step); - spirv_tools.step.dependOn(&generate_opencl_tables.step); - spirv_tools.step.dependOn(&generate_spirv_core_tables.step); - spirv_tools.step.dependOn(&generate_grammar_files_step.step); - - spirv_tools.step.dependOn(&process_spirv_xml.step); - spirv_tools.step.dependOn(&generate_spirv_tools_build_version.step); - - //All the vendor tables - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""spv-amd-shader-explicit-vertex-parameter"", """").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""spv-amd-shader-trinary-minmax"", """").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""spv-amd-gcn-shader"", """").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""spv-amd-shader-ballot"", """").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""debuginfo"", """").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""opencl.debuginfo.100"", ""CLDEBUG100_"").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""nonsemantic.shader.debuginfo.100"", ""SHDEBUG100_"").step); - spirv_tools.step.dependOn(&spvtoolsVendorTables(b, ""nonsemantic.clspvreflection"", """").step); - - //them headers - spirv_tools.step.dependOn(&debug_info_header.step); - spirv_tools.step.dependOn(&cl_debug_info_header_100.step); - spirv_tools.step.dependOn(&non_semantic_shader_debug_info_100.step); - - spirv_tools.addIncludePath(.{.path = spirv_tools_root ++ ""include""}); - spirv_tools.addIncludePath(.{.path = spirv_tools_root ++ ""source""}); - spirv_tools.addIncludePath(.{.path = spirv_tools_root}); - - spirv_tools.addIncludePath(.{.path = root_path ++ ""third_party/spirv-headers/include/""}); - - spirv_tools.addCSourceFiles(.{ - .files = &.{ - spirv_tools_root ++ ""source/util/bit_vector.cpp"", - spirv_tools_root ++ ""source/util/parse_number.cpp"", - spirv_tools_root ++ ""source/util/string_utils.cpp"", - spirv_tools_root ++ ""source/assembly_grammar.cpp"", - spirv_tools_root ++ ""source/binary.cpp"", - spirv_tools_root ++ ""source/diagnostic.cpp"", - spirv_tools_root ++ ""source/disassemble.cpp"", - spirv_tools_root ++ ""source/enum_string_mapping.cpp"", - spirv_tools_root ++ ""source/ext_inst.cpp"", - spirv_tools_root ++ ""source/extensions.cpp"", - spirv_tools_root ++ ""source/libspirv.cpp"", - spirv_tools_root ++ ""source/name_mapper.cpp"", - spirv_tools_root ++ ""source/opcode.cpp"", - spirv_tools_root ++ ""source/operand.cpp"", - spirv_tools_root ++ ""source/parsed_operand.cpp"", - spirv_tools_root ++ ""source/print.cpp"", - spirv_tools_root ++ ""source/software_version.cpp"", - spirv_tools_root ++ ""source/spirv_endian.cpp"", - spirv_tools_root ++ ""source/spirv_fuzzer_options.cpp"", - spirv_tools_root ++ ""source/spirv_optimizer_options.cpp"", - spirv_tools_root ++ ""source/spirv_reducer_options.cpp"", - spirv_tools_root ++ ""source/spirv_target_env.cpp"", - spirv_tools_root ++ ""source/spirv_validator_options.cpp"", - spirv_tools_root ++ ""source/table.cpp"", - spirv_tools_root ++ ""source/text.cpp"", - spirv_tools_root ++ ""source/text_handler.cpp"", - spirv_tools_root ++ ""source/val/validate.cpp"", - spirv_tools_root ++ ""source/val/validate_adjacency.cpp"", - spirv_tools_root ++ ""source/val/validate_annotation.cpp"", - spirv_tools_root ++ ""source/val/validate_arithmetics.cpp"", - spirv_tools_root ++ ""source/val/validate_atomics.cpp"", - spirv_tools_root ++ ""source/val/validate_barriers.cpp"", - spirv_tools_root ++ ""source/val/validate_bitwise.cpp"", - spirv_tools_root ++ ""source/val/validate_builtins.cpp"", - spirv_tools_root ++ ""source/val/validate_capability.cpp"", - spirv_tools_root ++ ""source/val/validate_cfg.cpp"", - spirv_tools_root ++ ""source/val/validate_composites.cpp"", - spirv_tools_root ++ ""source/val/validate_constants.cpp"", - spirv_tools_root ++ ""source/val/validate_conversion.cpp"", - spirv_tools_root ++ ""source/val/validate_debug.cpp"", - spirv_tools_root ++ ""source/val/validate_decorations.cpp"", - spirv_tools_root ++ ""source/val/validate_derivatives.cpp"", - spirv_tools_root ++ ""source/val/validate_extensions.cpp"", - spirv_tools_root ++ ""source/val/validate_execution_limitations.cpp"", - spirv_tools_root ++ ""source/val/validate_function.cpp"", - spirv_tools_root ++ ""source/val/validate_id.cpp"", - spirv_tools_root ++ ""source/val/validate_image.cpp"", - spirv_tools_root ++ ""source/val/validate_interfaces.cpp"", - spirv_tools_root ++ ""source/val/validate_instruction.cpp"", - spirv_tools_root ++ ""source/val/validate_layout.cpp"", - spirv_tools_root ++ ""source/val/validate_literals.cpp"", - spirv_tools_root ++ ""source/val/validate_logicals.cpp"", - spirv_tools_root ++ ""source/val/validate_memory.cpp"", - spirv_tools_root ++ ""source/val/validate_memory_semantics.cpp"", - spirv_tools_root ++ ""source/val/validate_mesh_shading.cpp"", - spirv_tools_root ++ ""source/val/validate_misc.cpp"", - spirv_tools_root ++ ""source/val/validate_mode_setting.cpp"", - spirv_tools_root ++ ""source/val/validate_non_uniform.cpp"", - spirv_tools_root ++ ""source/val/validate_primitives.cpp"", - spirv_tools_root ++ ""source/val/validate_ray_query.cpp"", - spirv_tools_root ++ ""source/val/validate_ray_tracing.cpp"", - spirv_tools_root ++ ""source/val/validate_ray_tracing_reorder.cpp"", - spirv_tools_root ++ ""source/val/validate_scopes.cpp"", - spirv_tools_root ++ ""source/val/validate_small_type_uses.cpp"", - spirv_tools_root ++ ""source/val/validate_type.cpp"", - spirv_tools_root ++ ""source/val/basic_block.cpp"", - spirv_tools_root ++ ""source/val/construct.cpp"", - spirv_tools_root ++ ""source/val/function.cpp"", - spirv_tools_root ++ ""source/val/instruction.cpp"", - spirv_tools_root ++ ""source/val/validation_state.cpp"", - //opt folder - spirv_tools_root ++ ""source/opt/fix_func_call_arguments.cpp"", - spirv_tools_root ++ ""source/opt/aggressive_dead_code_elim_pass.cpp"", - spirv_tools_root ++ ""source/opt/amd_ext_to_khr.cpp"", - spirv_tools_root ++ ""source/opt/analyze_live_input_pass.cpp"", - spirv_tools_root ++ ""source/opt/basic_block.cpp"", - spirv_tools_root ++ ""source/opt/block_merge_pass.cpp"", - spirv_tools_root ++ ""source/opt/block_merge_util.cpp"", - spirv_tools_root ++ ""source/opt/build_module.cpp"", - spirv_tools_root ++ ""source/opt/ccp_pass.cpp"", - spirv_tools_root ++ ""source/opt/cfg_cleanup_pass.cpp"", - spirv_tools_root ++ ""source/opt/cfg.cpp"", - spirv_tools_root ++ ""source/opt/code_sink.cpp"", - spirv_tools_root ++ ""source/opt/combine_access_chains.cpp"", - spirv_tools_root ++ ""source/opt/compact_ids_pass.cpp"", - spirv_tools_root ++ ""source/opt/composite.cpp"", - spirv_tools_root ++ ""source/opt/const_folding_rules.cpp"", - spirv_tools_root ++ ""source/opt/constants.cpp"", - spirv_tools_root ++ ""source/opt/control_dependence.cpp"", - spirv_tools_root ++ ""source/opt/convert_to_sampled_image_pass.cpp"", - spirv_tools_root ++ ""source/opt/convert_to_half_pass.cpp"", - spirv_tools_root ++ ""source/opt/copy_prop_arrays.cpp"", - spirv_tools_root ++ ""source/opt/dataflow.cpp"", - spirv_tools_root ++ ""source/opt/dead_branch_elim_pass.cpp"", - spirv_tools_root ++ ""source/opt/dead_insert_elim_pass.cpp"", - spirv_tools_root ++ ""source/opt/dead_variable_elimination.cpp"", - spirv_tools_root ++ ""source/opt/decoration_manager.cpp"", - spirv_tools_root ++ ""source/opt/debug_info_manager.cpp"", - spirv_tools_root ++ ""source/opt/def_use_manager.cpp"", - spirv_tools_root ++ ""source/opt/desc_sroa.cpp"", - spirv_tools_root ++ ""source/opt/desc_sroa_util.cpp"", - spirv_tools_root ++ ""source/opt/dominator_analysis.cpp"", - spirv_tools_root ++ ""source/opt/dominator_tree.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_constant_pass.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_functions_pass.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_functions_util.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_io_components_pass.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_members_pass.cpp"", - spirv_tools_root ++ ""source/opt/eliminate_dead_output_stores_pass.cpp"", - spirv_tools_root ++ ""source/opt/feature_manager.cpp"", - spirv_tools_root ++ ""source/opt/fix_storage_class.cpp"", - spirv_tools_root ++ ""source/opt/flatten_decoration_pass.cpp"", - spirv_tools_root ++ ""source/opt/fold.cpp"", - spirv_tools_root ++ ""source/opt/folding_rules.cpp"", - spirv_tools_root ++ ""source/opt/fold_spec_constant_op_and_composite_pass.cpp"", - spirv_tools_root ++ ""source/opt/freeze_spec_constant_value_pass.cpp"", - spirv_tools_root ++ ""source/opt/function.cpp"", - spirv_tools_root ++ ""source/opt/graphics_robust_access_pass.cpp"", - spirv_tools_root ++ ""source/opt/if_conversion.cpp"", - spirv_tools_root ++ ""source/opt/inline_exhaustive_pass.cpp"", - spirv_tools_root ++ ""source/opt/inline_opaque_pass.cpp"", - spirv_tools_root ++ ""source/opt/inline_pass.cpp"", - spirv_tools_root ++ ""source/opt/inst_bindless_check_pass.cpp"", - spirv_tools_root ++ ""source/opt/inst_buff_addr_check_pass.cpp"", - spirv_tools_root ++ ""source/opt/inst_debug_printf_pass.cpp"", - spirv_tools_root ++ ""source/opt/instruction.cpp"", - spirv_tools_root ++ ""source/opt/instruction_list.cpp"", - spirv_tools_root ++ ""source/opt/instrument_pass.cpp"", - spirv_tools_root ++ ""source/opt/interface_var_sroa.cpp"", - spirv_tools_root ++ ""source/opt/interp_fixup_pass.cpp"", - spirv_tools_root ++ ""source/opt/ir_context.cpp"", - spirv_tools_root ++ ""source/opt/ir_loader.cpp"", - spirv_tools_root ++ ""source/opt/licm_pass.cpp"", - spirv_tools_root ++ ""source/opt/liveness.cpp"", - spirv_tools_root ++ ""source/opt/local_access_chain_convert_pass.cpp"", - spirv_tools_root ++ ""source/opt/local_redundancy_elimination.cpp"", - spirv_tools_root ++ ""source/opt/local_single_block_elim_pass.cpp"", - spirv_tools_root ++ ""source/opt/local_single_store_elim_pass.cpp"", - spirv_tools_root ++ ""source/opt/loop_dependence.cpp"", - spirv_tools_root ++ ""source/opt/loop_dependence_helpers.cpp"", - spirv_tools_root ++ ""source/opt/loop_descriptor.cpp"", - spirv_tools_root ++ ""source/opt/loop_fission.cpp"", - spirv_tools_root ++ ""source/opt/loop_fusion.cpp"", - spirv_tools_root ++ ""source/opt/loop_fusion_pass.cpp"", - spirv_tools_root ++ ""source/opt/loop_peeling.cpp"", - spirv_tools_root ++ ""source/opt/loop_utils.cpp"", - spirv_tools_root ++ ""source/opt/loop_unroller.cpp"", - spirv_tools_root ++ ""source/opt/loop_unswitch_pass.cpp"", - spirv_tools_root ++ ""source/opt/mem_pass.cpp"", - spirv_tools_root ++ ""source/opt/merge_return_pass.cpp"", - spirv_tools_root ++ ""source/opt/module.cpp"", - spirv_tools_root ++ ""source/opt/optimizer.cpp"", - spirv_tools_root ++ ""source/opt/pass.cpp"", - spirv_tools_root ++ ""source/opt/pass_manager.cpp"", - spirv_tools_root ++ ""source/opt/private_to_local_pass.cpp"", - spirv_tools_root ++ ""source/opt/propagator.cpp"", - spirv_tools_root ++ ""source/opt/reduce_load_size.cpp"", - spirv_tools_root ++ ""source/opt/redundancy_elimination.cpp"", - spirv_tools_root ++ ""source/opt/register_pressure.cpp"", - spirv_tools_root ++ ""source/opt/relax_float_ops_pass.cpp"", - spirv_tools_root ++ ""source/opt/remove_dontinline_pass.cpp"", - spirv_tools_root ++ ""source/opt/remove_duplicates_pass.cpp"", - spirv_tools_root ++ ""source/opt/remove_unused_interface_variables_pass.cpp"", - spirv_tools_root ++ ""source/opt/replace_desc_array_access_using_var_index.cpp"", - spirv_tools_root ++ ""source/opt/replace_invalid_opc.cpp"", - spirv_tools_root ++ ""source/opt/scalar_analysis.cpp"", - spirv_tools_root ++ ""source/opt/scalar_analysis_simplification.cpp"", - spirv_tools_root ++ ""source/opt/scalar_replacement_pass.cpp"", - spirv_tools_root ++ ""source/opt/set_spec_constant_default_value_pass.cpp"", - spirv_tools_root ++ ""source/opt/simplification_pass.cpp"", - spirv_tools_root ++ ""source/opt/spread_volatile_semantics.cpp"", - spirv_tools_root ++ ""source/opt/ssa_rewrite_pass.cpp"", - spirv_tools_root ++ ""source/opt/strength_reduction_pass.cpp"", - spirv_tools_root ++ ""source/opt/strip_debug_info_pass.cpp"", - spirv_tools_root ++ ""source/opt/strip_nonsemantic_info_pass.cpp"", - spirv_tools_root ++ ""source/opt/struct_cfg_analysis.cpp"", - spirv_tools_root ++ ""source/opt/type_manager.cpp"", - spirv_tools_root ++ ""source/opt/types.cpp"", - spirv_tools_root ++ ""source/opt/unify_const_pass.cpp"", - spirv_tools_root ++ ""source/opt/upgrade_memory_model.cpp"", - spirv_tools_root ++ ""source/opt/value_number_table.cpp"", - spirv_tools_root ++ ""source/opt/vector_dce.cpp"", - spirv_tools_root ++ ""source/opt/workaround1209.cpp"", - spirv_tools_root ++ ""source/opt/wrap_opkill.cpp"", - spirv_tools_root ++ ""source/opt/trim_capabilities_pass.cpp"", - //reduce - spirv_tools_root ++ ""source/reduce/change_operand_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/change_operand_to_undef_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/conditional_branch_to_simple_conditional_branch_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/conditional_branch_to_simple_conditional_branch_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/merge_blocks_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/merge_blocks_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/operand_to_const_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/operand_to_undef_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/operand_to_dominating_id_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/reducer.cpp"", - spirv_tools_root ++ ""source/reduce/reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/reduction_pass.cpp"", - spirv_tools_root ++ ""source/reduce/reduction_util.cpp"", - spirv_tools_root ++ ""source/reduce/remove_block_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/remove_block_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/remove_function_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/remove_function_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/remove_instruction_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/remove_selection_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/remove_selection_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/remove_struct_member_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/remove_unused_instruction_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/remove_unused_struct_member_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/simple_conditional_branch_to_branch_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/simple_conditional_branch_to_branch_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/structured_construct_to_block_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/structured_construct_to_block_reduction_opportunity_finder.cpp"", - spirv_tools_root ++ ""source/reduce/structured_loop_to_selection_reduction_opportunity.cpp"", - spirv_tools_root ++ ""source/reduce/structured_loop_to_selection_reduction_opportunity_finder.cpp"", - //link - spirv_tools_root ++ ""source/link/linker.cpp"", - //lint - spirv_tools_root ++ ""source/lint/linter.cpp"", - spirv_tools_root ++ ""source/lint/linter.cpp"", - spirv_tools_root ++ ""source/lint/lint_divergent_derivatives.cpp"", - spirv_tools_root ++ ""source/lint/divergence_analysis.cpp"", - //diff - spirv_tools_root ++ ""source/diff/diff.cpp"", - }, - .flags = flags - }); - - return spirv_tools; -} - -fn glslang_lib(b: *std.Build, target: std.zig.CrossTarget, optimize: std.builtin.OptimizeMode) *std.Build.Step.Compile { - const glslang: *std.build.Step.Compile = b.addStaticLibrary(.{ - .name = ""glslang"", - .target = target, - .optimize = optimize, - }); - glslang.linkLibC(); - glslang.linkLibCpp(); - - glslang.addIncludePath(.{.path = root_glslang_path ++ ""Include""}); - glslang.addIncludePath(.{.path = root_glslang_path}); - - glslang.defineCMacro(""ENABLE_HLSL"", ""1""); - - glslang.addCSourceFiles(.{ - .files = &.{ - root_glslang_path ++ ""glslang/MachineIndependent/glslang_tab.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/attribute.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/Constant.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/iomapper.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/InfoSink.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/Initialize.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/IntermTraverse.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/Intermediate.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/ParseContextBase.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/ParseHelper.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/PoolAlloc.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/RemoveTree.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/Scan.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/ShaderLang.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/SpirvIntrinsics.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/SymbolTable.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/Versions.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/intermOut.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/limits.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/linkValidate.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/parseConst.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/reflection.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/preprocessor/Pp.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/preprocessor/PpAtom.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/preprocessor/PpContext.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/preprocessor/PpScanner.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/preprocessor/PpTokens.cpp"", - root_glslang_path ++ ""glslang/MachineIndependent/propagateNoContraction.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslAttributes.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslParseHelper.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslScanContext.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslOpMap.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslTokenStream.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslGrammar.cpp"", - root_glslang_path ++ ""glslang/HLSL/hlslParseables.cpp"", - root_glslang_path ++ ""glslang/GenericCodeGen/CodeGen.cpp"", - root_glslang_path ++ ""glslang/GenericCodeGen/Link.cpp"", - }, - .flags = flags, - }); - - if (target.isWindows()) { - glslang.addCSourceFiles(.{.files = &.{root_glslang_path ++ ""glslang/OSDependent/Windows/ossource.cpp""}, .flags = flags}); - } - //This assumption is wrong, but anything that isnt windows is basically unix :^) - else { - glslang.addCSourceFiles(.{.files = &.{root_glslang_path ++ ""glslang/OSDependent/Unix/ossource.cpp""}, .flags = flags}); - } - - glslang.addCSourceFiles(.{.files = &.{root_glslang_path ++ ""OGLCompilersDLL/InitializeDll.cpp""}, .flags = flags}); - - glslang.addCSourceFiles(.{ - .files = &.{ - root_glslang_path ++ ""SPIRV/GlslangToSpv.cpp"", - root_glslang_path ++ ""SPIRV/InReadableOrder.cpp"", - root_glslang_path ++ ""SPIRV/Logger.cpp"", - root_glslang_path ++ ""SPIRV/SpvBuilder.cpp"", - root_glslang_path ++ ""SPIRV/SpvPostProcess.cpp"", - root_glslang_path ++ ""SPIRV/doc.cpp"", - root_glslang_path ++ ""SPIRV/SpvTools.cpp"", - root_glslang_path ++ ""SPIRV/disassemble.cpp"", - root_glslang_path ++ ""SPIRV/CInterface/spirv_c_interface.cpp"", - }, - .flags = flags, - }); - - const generate_build_info = b.addSystemCommand(&.{ - ""python3"", - root_glslang_path ++ ""build_info.py"", - root_glslang_path, - ""-i"", root_glslang_path ++ ""build_info.h.tmpl"", //input - ""-o"", root_glslang_path ++ ""Include/glslang/build_info.h"", //output - }); - - glslang.step.dependOn(&generate_build_info.step); - - return glslang; -} - -pub fn build(b: *std.Build) void { - const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); - - const glslang = glslang_lib(b, target, optimize); - - const spirv_tools = spvTools(b, target, optimize); - - const shaderc_util: *std.build.Step.Compile = b.addStaticLibrary(.{ - .name = ""shaderc_shared"", - .target = target, - .optimize = optimize, - }); - shaderc_util.linkLibC(); - shaderc_util.linkLibCpp(); - shaderc_util.addIncludePath(.{.path = root_path ++ ""libshaderc/include""}); - shaderc_util.addIncludePath(.{.path = root_path ++ ""libshaderc_util/include""}); - - shaderc_util.addIncludePath(.{.path = root_path ++ ""third_party/glslang""}); - shaderc_util.addIncludePath(.{.path = root_path ++ ""third_party/spirv-tools/include""}); - shaderc_util.addIncludePath(.{.path = root_path ++ ""third_party/spirv-headers/include/""}); - - shaderc_util.defineCMacro(""ENABLE_HLSL"", ""1""); - - shaderc_util.addCSourceFiles(.{ - .files = &.{ - root_path ++ ""libshaderc_util/src/args.cc"", - root_path ++ ""libshaderc_util/src/compiler.cc"", - root_path ++ ""libshaderc_util/src/file_finder.cc"", - root_path ++ ""libshaderc_util/src/io_shaderc.cc"", - root_path ++ ""libshaderc_util/src/message.cc"", - root_path ++ ""libshaderc_util/src/resources.cc"", - root_path ++ ""libshaderc_util/src/shader_stage.cc"", - root_path ++ ""libshaderc_util/src/spirv_tools_wrapper.cc"", - root_path ++ ""libshaderc_util/src/version_profile.cc"", - }, - .flags = flags, - }); - - const shaderc: *std.build.Step.Compile = b.addSharedLibrary(.{ - .name = ""shaderc_shared"", - .target = target, - .optimize = optimize, - }); - shaderc.defineCMacro(""SHADERC_SHAREDLIB"", ""1""); - shaderc.defineCMacro(""SHADERC_IMPLEMENTATION"", ""1""); - shaderc.linkLibC(); - shaderc.linkLibCpp(); - shaderc.linkLibrary(shaderc_util); - shaderc.linkLibrary(spirv_tools); - shaderc.linkLibrary(glslang); - - shaderc.strip = true; - - shaderc.addIncludePath(.{.path = root_path ++ ""libshaderc/include""}); - shaderc.addIncludePath(.{.path = root_path ++ ""libshaderc_util/include""}); - - shaderc.addIncludePath(.{.path = root_path ++ ""third_party/glslang""}); - shaderc.addIncludePath(.{.path = root_path ++ ""third_party/spirv-tools/include""}); - shaderc.addIncludePath(.{.path = root_path ++ ""third_party/spirv-headers/include/""}); - - shaderc.addCSourceFiles(.{ - .files = &.{ - root_path ++ ""libshaderc/src/shaderc.cc"", - }, - .flags = flags, - }); - - b.installArtifact(shaderc); -} - -fn root_dir() []const u8 { - return std.fs.path.dirname(@src().file) orelse "".""; -} - -const root_path = root_dir() ++ ""/""; -"; - - AbsolutePath ShadercPath => RootDirectory / "build" / "submodules" / "shaderc"; - - Target Shaderc => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Shaderc.Native" / "runtimes"; - - File.WriteAllText(ShadercPath / "build.zig", ShadercBuildScript); - - //Clone all the deps for shaderc - InheritedShell("./git-sync-deps", ShadercPath / "utils").AssertZeroExitCode(); - - const string libname = "shaderc_shared"; - - const string optimizeMode = "-Doptimize=ReleaseFast"; - - //Build shaderc for Linux x86 - InheritedShell($"zig build -Dtarget=x86-linux-gnu.2.16 {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"lib{libname}.so", runtimes / "linux-x86" / "native" / $"lib{libname}.so", FileExistsPolicy.Overwrite); - - //Build shaderc for Linux x86_64 - InheritedShell($"zig build -Dtarget=x86_64-linux-gnu.2.16 {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"lib{libname}.so", runtimes / "linux-x64" / "native" / $"lib{libname}.so", FileExistsPolicy.Overwrite); - - //Build shaderc for Linux ARM64 - InheritedShell($"zig build -Dtarget=aarch64-linux-gnu.2.16 {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"lib{libname}.so", runtimes / "linux-arm64" / "native" / $"lib{libname}.so", FileExistsPolicy.Overwrite); - - //Build shaderc for Windows x86 - InheritedShell($"zig build -Dtarget=x86-windows-gnu {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"{libname}.dll", runtimes / "win-x86" / "native" / $"{libname}.dll", FileExistsPolicy.Overwrite); - - //Build shaderc for Windows x86_64 - InheritedShell($"zig build -Dtarget=x86_64-windows-gnu {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"{libname}.dll", runtimes / "win-x64" / "native" / $"{libname}.dll", FileExistsPolicy.Overwrite); - - //Build shaderc for Windows ARM64 - InheritedShell($"zig build -Dtarget=aarch64-windows-gnu {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"{libname}.dll", runtimes / "win-arm64" / "native" / $"{libname}.dll", FileExistsPolicy.Overwrite); - - //Build shaderc for MacOS x86_64 - InheritedShell($"zig build -Dtarget=x86_64-macos {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"lib{libname}.dylib", runtimes / "osx-x64" / "native" / $"lib{libname}.dylib", FileExistsPolicy.Overwrite); - - //Build shaderc for MacOS ARM64 - InheritedShell($"zig build -Dtarget=aarch64-macos {optimizeMode}", ShadercPath).AssertZeroExitCode(); - CopyFile(ShadercPath / "zig-out" / "lib" / $"lib{libname}.dylib", runtimes / "osx-arm64" / "native" / $"lib{libname}.dylib", FileExistsPolicy.Overwrite); - - var files = (runtimes / "win-x64" / "native").GlobFiles("*.dll") - .Concat((runtimes / "win-x86" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "win-arm64" / "native").GlobFiles("*.dll")) - .Concat((runtimes / "osx-x64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "osx-arm64" / "native").GlobFiles("*.dylib")) - .Concat((runtimes / "linux-x64" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-x86" / "native").GlobFiles("*.so")) - .Concat((runtimes / "linux-arm64" / "native").GlobFiles("*.so")); - - var glob = string.Empty; - glob = files.Aggregate(glob, (current, path) => current + $"\"{path}\" "); - - PrUpdatedNativeBinary("Shaderc", glob); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/SilkDroid.cs b/build/nuke/Native/SilkDroid.cs deleted file mode 100644 index 7b9716d82d..0000000000 --- a/build/nuke/Native/SilkDroid.cs +++ /dev/null @@ -1,102 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - string AndroidHome - { - get - { - if (AndroidHomeValue is not null) - { - return AndroidHomeValue; - } - - var utils = RootDirectory / "build" / "utilities"; - DotNet($"build \"{utils / "android_probe.proj"}\" /t:GetAndroidJar"); - AndroidHomeValue = (AbsolutePath) File.ReadAllText(utils / "android.jar.gen.txt") / ".." / ".." / ".."; - Logger.Info($"Android Home: {AndroidHomeValue}"); - return AndroidHomeValue; - } - } - - Target BuildLibSilkDroid => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - if (!Native) - { - Logger.Warn("Skipping gradlew build as the --native parameter has not been specified."); - return Enumerable.Empty(); - } - - var sdl = RootDirectory / "build" / "submodules" / "SDL"; - var silkDroid = SourceDirectory / "Windowing" / "SilkDroid"; - var xcopy = new (string, string)[] - { - (sdl / "android-project" / "app" / "src" / "main" / "java", - silkDroid / "app" / "src" / "main" / "java"), - (sdl, silkDroid / "app" / "jni" / "SDL2") - }; - - foreach (var (from, to) in xcopy) - { - if (!Directory.Exists(from)) - { - ControlFlow.Fail - ($"\"{from}\" does not exist (did you forget to recursively clone the repo?)"); - } - - CopyDirectoryRecursively(from, to, DirectoryExistsPolicy.Merge, FileExistsPolicy.Overwrite); - } - - var envVars = CreateEnvVarDictionary(); - envVars["ANDROID_HOME"] = AndroidHome; - - foreach (var ndk in Directory.GetDirectories((AbsolutePath) AndroidHome / "ndk") - .OrderByDescending(x => Version.Parse(Path.GetFileName(x)))) - { - envVars["ANDROID_NDK_HOME"] = ndk; - } - - using var process = StartShell($".{Path.PathSeparator}gradlew build", silkDroid, envVars); - process.AssertZeroExitCode(); - var ret = process.Output; - CopyFile - ( - silkDroid / "app" / "build" / "outputs" / "aar" / "app-release.aar", - SourceDirectory / "Windowing" / "Silk.NET.Windowing.Sdl" / "Android" / "app-release.aar", - FileExistsPolicy.Overwrite - ); - return ret; - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/SwiftShader.cs b/build/nuke/Native/SwiftShader.cs deleted file mode 100644 index 2874904ce6..0000000000 --- a/build/nuke/Native/SwiftShader.cs +++ /dev/null @@ -1,113 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath SwiftShaderBuildPath => RootDirectory / "build" / "submodules" / "SwiftShader" / "build"; - - Target SwiftShader => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var sysName = OperatingSystem.IsLinux() ? "Linux" : - OperatingSystem.IsWindows() ? "Windows" : - OperatingSystem.IsMacOS() ? "Darwin" : throw new PlatformNotSupportedException(); - DeleteDirectory(SwiftShaderBuildPath); - Git("checkout HEAD build/", SwiftShaderBuildPath / ".."); - StartProcess("cmake", ".. -DCMAKE_BUILD_TYPE=Release", SwiftShaderBuildPath) - .AssertZeroExitCode(); - StartProcess("cmake", $"--build .{JobsArg} --config Release", SwiftShaderBuildPath) - .AssertWaitForExit(); // might fail... as long as the output exists we're happy - var fname = sysName switch - { - "Linux" => "libvk_swiftshader.so", - "Windows" => "vk_swiftshader.dll", - "Darwin" => "libvk_swiftshader.dylib", - _ => throw new("what") - }; - - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Vulkan.SwiftShader.Native" / "runtimes"; - var outputPath = SwiftShaderBuildPath / sysName; - const string icd = "vk_swiftshader_icd.json"; - if (OperatingSystem.IsWindows()) - { - CopyFile - ( - outputPath / fname, runtimes / "win-x64" / "native" / fname, - FileExistsPolicy.Overwrite - ); // we'll use WOW64 - CopyFile - ( - outputPath / fname, runtimes / "win-x86" / "native" / fname, - FileExistsPolicy.Overwrite - ); - CopyFile - ( - outputPath / icd, runtimes / "win-x64" / "native" / icd, - FileExistsPolicy.Overwrite - ); - CopyFile - ( - outputPath / icd, runtimes / "win-x86" / "native" / icd, - FileExistsPolicy.Overwrite - ); - } - else if (OperatingSystem.IsLinux()) - { - CopyFile - ( - outputPath / fname, runtimes / "linux-x64" / "native" / fname, - FileExistsPolicy.Overwrite - ); - CopyFile - ( - outputPath / icd, runtimes / "linux-x64" / "native" / icd, - FileExistsPolicy.Overwrite - ); - } - else if (OperatingSystem.IsMacOS()) - { - CopyFile - ( - outputPath / fname, runtimes / "osx-x64" / "native" / fname, - FileExistsPolicy.Overwrite - ); - CopyFile - ( - outputPath / icd, runtimes / "osx-x64" / "native" / icd, - FileExistsPolicy.Overwrite - ); - } - - PrUpdatedNativeBinary("SwiftShader"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/Vkd3d.cs b/build/nuke/Native/Vkd3d.cs deleted file mode 100644 index f280cc5f49..0000000000 --- a/build/nuke/Native/Vkd3d.cs +++ /dev/null @@ -1,103 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath Vkd3dPath => RootDirectory / "build" / "submodules" / "vkd3d"; - AbsolutePath SPIRVToolsPath => RootDirectory / "build" / "submodules" / "SPIRV-Tools"; - - Target Vkd3d => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - if(!RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - throw new PlatformNotSupportedException("This task only runs on Linux!"); - } - - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Vkd3d.Native" / "runtimes"; - - var vkd3dBuild = SPIRVToolsPath / "build"; - EnsureCleanDirectory(vkd3dBuild); - - { //SPIRV-Tools - //Sync the external deps - InheritedShell($"./git-sync-deps", SPIRVToolsPath / "utils").AssertZeroExitCode(); - - //Make the build scripts, with shared libs enabled, and tests disabled - InheritedShell($"cmake .. -DBUILD_SHARED_LIBS=1 -DSPIRV_SKIP_TESTS=ON", vkd3dBuild).AssertZeroExitCode(); - - //Compile SPIRV-Tools - InheritedShell($"cmake --build . --config Release {JobsArg}", vkd3dBuild).AssertZeroExitCode(); - - //Run `strip -g` on the shared library file to remove debug info and shrink it from ~30mb down to only ~5.5mb - InheritedShell($"strip -g libSPIRV-Tools-shared.so", vkd3dBuild / "source").AssertZeroExitCode(); - - //Copy the resulting SPIRV-Tools shared library to the runtimes folder - CopyFile(vkd3dBuild / "source" / "libSPIRV-Tools-shared.so", runtimes / "linux-x64" / "native" / "libSPIRV-Tools-shared.so", FileExistsPolicy.Overwrite); - } - - { //Vkd3d - var dest = Vkd3dPath / "dest"; - var @out = Vkd3dPath / "build"; - - EnsureCleanDirectory(@out); - EnsureCleanDirectory(dest); - - //Run autogen - InheritedShell($"./autogen.sh", Vkd3dPath).AssertZeroExitCode(); - //Run configure to make a non-debug build, with no trace messages, with a prefix of /usr and with spirv-tools - InheritedShell($"./configure CPPFLAGS=\"-DNDEBUG -DVKD3D_NO_TRACE_MESSAGES -fPIC\" --prefix=/usr --with-spirv-tools --disable-doxygen-pdf", Vkd3dPath).AssertZeroExitCode(); - //Build vkd3d - InheritedShell($"make {JobsArg}", Vkd3dPath).AssertZeroExitCode(); - //Install vkd3d to the dest folder - InheritedShell($"make DESTDIR=\"{Vkd3dPath.ToString().TrimEnd('/')}/dest\" install", Vkd3dPath).AssertZeroExitCode(); - - var vkd3dShaderCompiler = RootDirectory / "src" / "Microsoft" / "Vkd3dCompiler"; - - //Copy libvkd3d-shader.a - CopyFile(@dest / "usr" / "lib" / "libvkd3d-shader.a", vkd3dShaderCompiler / "libvkd3d-shader.a"); - //Copy libvkd3d-shader.la - CopyFile(@dest / "usr" / "lib" / "libvkd3d-shader.la", vkd3dShaderCompiler / "libvkd3d-shader.la"); - //Copy libSPIRV-Tools-shared.so - CopyFile(vkd3dBuild / "source" / "libSPIRV-Tools-shared.so", vkd3dShaderCompiler / "libSPIRV-Tools-shared.so"); - - //Build the shader compiler - InheritedShell($"zig build -Doptimize=ReleaseSmall -Dtarget=x86_64-linux-gnu --verbose", vkd3dShaderCompiler).AssertZeroExitCode(); - - //Copy the resulting shader compiler to the native output - CopyFile(vkd3dShaderCompiler / "zig-out" / "lib" / "libd3dcompile_vkd3d.so", runtimes / "linux-x64" / "native" / "libd3dcompile_vkd3d.so", FileExistsPolicy.Overwrite); - } - - PrUpdatedNativeBinary("Vkd3d"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/VulkanLoader.cs b/build/nuke/Native/VulkanLoader.cs deleted file mode 100644 index eb589de50d..0000000000 --- a/build/nuke/Native/VulkanLoader.cs +++ /dev/null @@ -1,69 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath VulkanLoaderPath => RootDirectory / "build" / "submodules" / "Vulkan-Loader"; - - Target VulkanLoader => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var @out = VulkanLoaderPath / "build"; - EnsureCleanDirectory(@out); - var abi = OperatingSystem.IsWindows() ? " -DCMAKE_GENERATOR_PLATFORM=Win32" : string.Empty; - InheritedShell - ( - $"cmake -S. -Bbuild -DUPDATE_DEPS=On -DCMAKE_BUILD_TYPE=Release{abi}", - VulkanLoaderPath - ) - .AssertZeroExitCode(); - InheritedShell($"cmake --build build --config Release{JobsArg}", VulkanLoaderPath) - .AssertZeroExitCode(); - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.Vulkan.Loader.Native" / "runtimes"; - if (OperatingSystem.IsWindows()) - { - CopyAll(@out.GlobFiles("loader/Release/vulkan-1.dll"), runtimes / "win-x64" / "native"); - CopyAll(@out.GlobFiles("loader/Release/vulkan-1.dll"), runtimes / "win-x86" / "native"); - } - else - { - CopyAll - ( - @out.GlobFiles("loader/libvulkan.so", "loader/libvulkan.dylib"), - runtimes / (OperatingSystem.IsMacOS() ? "osx-x64" : "linux-x64") / "native" - ); - } - - PrUpdatedNativeBinary("Vulkan Loader"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Native/Wgpu.cs b/build/nuke/Native/Wgpu.cs deleted file mode 100644 index 29f4e185bb..0000000000 --- a/build/nuke/Native/Wgpu.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using JetBrains.Annotations; -using Nuke.Common; -using Nuke.Common.CI.GitHubActions; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.Git; -using Octokit; -using Octokit.Internal; -using static Nuke.Common.IO.CompressionTasks; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.HttpTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.Git.GitTasks; -using static Nuke.Common.Tools.GitHub.GitHubTasks; - -partial class Build { - AbsolutePath WgpuPath => RootDirectory / "build" / "submodules" / "wgpu-native"; - - Target Wgpu => CommonTarget - ( - x => x.Before(Compile) - .After(Clean) - .Executes - ( - () => - { - var runtimes = RootDirectory / "src" / "Native" / "Silk.NET.WebGPU.Native.WGPU" / "runtimes"; - - var target = WgpuPath / "target"; - EnsureCleanDirectory(target); - - if(OperatingSystem.IsWindows()) - { - //Compile Windows libraries - InheritedShell("cargo build --release --target=i686-pc-windows-msvc", WgpuPath).AssertZeroExitCode(); - InheritedShell("cargo build --release --target=x86_64-pc-windows-msvc", WgpuPath).AssertZeroExitCode(); - InheritedShell("cargo build --release --target=aarch64-pc-windows-msvc", WgpuPath).AssertZeroExitCode(); - - CopyFile(target / "i686-pc-windows-msvc" / "release" / "wgpu_native.dll", runtimes / "win-x86" / "native" / "wgpu_native.dll", FileExistsPolicy.Overwrite); - CopyFile(target / "x86_64-pc-windows-msvc" / "release" / "wgpu_native.dll", runtimes / "win-x64" / "native" / "wgpu_native.dll", FileExistsPolicy.Overwrite); - CopyFile(target / "aarch64-pc-windows-msvc" / "release" / "wgpu_native.dll", runtimes / "win-arm64" / "native" / "wgpu_native.dll", FileExistsPolicy.Overwrite); - } - - if(OperatingSystem.IsLinux()) - { - //Compile Linux libraries - InheritedShell("cargo build --release --target=i686-unknown-linux-gnu", WgpuPath).AssertZeroExitCode(); - InheritedShell("cargo build --release --target=x86_64-unknown-linux-gnu", WgpuPath).AssertZeroExitCode(); - - CopyFile(target / "i686-unknown-linux-gnu" / "release" / "libwgpu_native.so", runtimes / "linux-x86" / "native" / "libwgpu_native.so", FileExistsPolicy.Overwrite); - CopyFile(target / "x86_64-unknown-linux-gnu" / "release" / "libwgpu_native.so", runtimes / "linux-x64" / "native" / "libwgpu_native.so", FileExistsPolicy.Overwrite); - } - - if(OperatingSystem.IsMacOS()) - { - //Compile MacOS libraries - InheritedShell("cargo build --release --target=aarch64-apple-darwin", WgpuPath).AssertZeroExitCode(); - InheritedShell("cargo build --release --target=x86_64-apple-darwin", WgpuPath).AssertZeroExitCode(); - - CopyFile(target / "x86_64-apple-darwin" / "release" / "libwgpu_native.dylib", runtimes / "osx-x64" / "native" / "libwgpu_native.dylib", FileExistsPolicy.Overwrite); - CopyFile(target / "aarch64-apple-darwin" / "release" / "libwgpu_native.dylib", runtimes / "osx-arm64" / "native" / "libwgpu_native.dylib", FileExistsPolicy.Overwrite); - } - - PrUpdatedNativeBinary("Wgpu"); - } - ) - ); -} \ No newline at end of file diff --git a/build/nuke/Silk.NET.NUKE.csproj b/build/nuke/Silk.NET.NUKE.csproj deleted file mode 100644 index f44a75e1a9..0000000000 --- a/build/nuke/Silk.NET.NUKE.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - Exe - net7.0 - - CS0649;CS0169 - ..\.. - ..\.. - preview - 1 - true - - - - - - - - diff --git a/build/props/bindings.props b/build/props/bindings.props deleted file mode 100644 index d35db6c7b1..0000000000 --- a/build/props/bindings.props +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - true - - - - $(TargetsForTfmSpecificContentInPackage);SilkGenerateILLinkTargets - - - - - - - $(IntermediateOutputPath)$(TargetFramework)/$(PackageId).targets - _$([System.String]::Copy('$(PackageId)').Replace('.', '_'))_ - - - - - - - - - - - - - - - - - - - - - - - - - $(IntermediateOutputPath)$(TargetFramework)/ILLink.Substitutions.xml - - - - - - - - - - - - - - - - - - - diff --git a/build/props/common.props b/build/props/common.props deleted file mode 100644 index 96279580a6..0000000000 --- a/build/props/common.props +++ /dev/null @@ -1,144 +0,0 @@ - - - - - false - true - true - - - - MIT - 10 - .NET Foundation and Contributors - - Silk.NET November 2023 Update - - - Updated to OpenXR 1.0.31 - - Updated to Vulkan 1.3.270 - - Updated to latest ImGui.NET, alleviating some incompatibilities introduced by the ImGui.NET team. - - Updated to latest OpenGL specifications - - Fixed OpenCL clCreateImage not functioning as expected with ImageDesc's ABI - - Fixed OpenAL throwing when loading an extension prefixed with ALC_ instead AL_ - - OpenCL;OpenGL;OpenAL;OpenGLES;GLES;Vulkan;Assimp;DirectX;GLFW;SDL;Windowing;Input;Gamepad;Joystick;Keyboard;Mouse;SilkTouch;Source;Generator;C#;F#;.NET;DotNet;Mono;Vector;Math;Maths;Numerics;Game;Graphics;Compute;Audio;Sound;Engine;Silk;Silk.NET;Slim.NET;ElgarTK;GPU;Sharp;Science;Scientific;Visualization;Visual;Audiovisual;Windows;macOS;Linux;Android;Bindings;OSX;Wrapper;Native - true - $(MSBuildThisFileDirectory)/../output_packages - https://github.com/dotnet/Silk.NET - Git - 2.19.0 - - - Silk.NET is a high-speed, advanced library, providing bindings to popular low-level APIs such as OpenGL, OpenCL, OpenAL, OpenXR, GLFW, SDL, Vulkan, Assimp, and DirectX. - - false - - - true - true - true - true - full - - - - - %25%25cI - - - %25cI - - - - - - $([System.DateTime]::Parse($(_SilkGitIdt)).ToUniversalTime().ToString(yyyy.MM.dd)) - - - - - portable - true - true - snupkg - - - - - - - - - - - - silkdotnet_v3.png - - - - - - $([System.IO.File]::ReadAllText("$(MSBuildThisFileDirectory)../../README.md")) - $([System.String]::Copy($(SilkReadme)) - .Replace('<!-- Begin exclude from NuGet readme. -->','<!--') - .Replace('<!-- End exclude from NuGet readme. -->','-->') - .Replace('<!-- Begin include in NuGet readme.','') - .Replace('End include in NuGet readme. -->','') - .Replace('<h1 align="center">', '# ') - .Replace('<h2 align="center">', '# ') - .Replace('</h1>', '').Replace('</h2>', '') - .Replace('<br />', '%0a%0a').Replace('<br/>', '%0a%0a') - .Replace('<div>', '').Replace('</div>', '') - .Replace('<a>', '').Replace('</a>', '')) - - $(IntermediateOutputPath)$(TargetFramework)/README.md - - - $(SilkDescription) $(Description) - $(SilkDescription) $(SilkExtendedDescription)%0a%0a - $([System.String]::Copy($(SilkReadme)) - .Replace('<!-- Package description inserted here automatically. -->', - '# About This Package%0a%0a$(SilkExtendedDescription)')) - - - - - - - - - README.md - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/submodules/ANGLE b/build/submodules/ANGLE deleted file mode 160000 index 24dabdbbee..0000000000 --- a/build/submodules/ANGLE +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 24dabdbbeee213d7a1fd01a70cddacc1949d3b26 diff --git a/build/submodules/Assimp b/build/submodules/Assimp deleted file mode 160000 index 6a08c39e3a..0000000000 --- a/build/submodules/Assimp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6a08c39e3a91ef385e76515cfad86aca4bfd57ff diff --git a/build/submodules/GLFW b/build/submodules/GLFW deleted file mode 160000 index 1ad5df8032..0000000000 --- a/build/submodules/GLFW +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1ad5df803239250c43e021f92fe87b738f231f8b diff --git a/build/submodules/MoltenVK b/build/submodules/MoltenVK deleted file mode 160000 index 02a8c011a8..0000000000 --- a/build/submodules/MoltenVK +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 02a8c011a8ca077dfaa09f3b7ebf68be869dc26f diff --git a/build/submodules/SDL b/build/submodules/SDL deleted file mode 160000 index 4761467b2e..0000000000 --- a/build/submodules/SDL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4761467b2e8cc7db3d6bc98747daca0051858f09 diff --git a/build/submodules/SPIRV-Cross b/build/submodules/SPIRV-Cross deleted file mode 160000 index bccaa94db8..0000000000 --- a/build/submodules/SPIRV-Cross +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bccaa94db814af33d8ef05c153e7c34d8bd4d685 diff --git a/build/submodules/SPIRV-Headers b/build/submodules/SPIRV-Headers deleted file mode 160000 index 124a9665e4..0000000000 --- a/build/submodules/SPIRV-Headers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 124a9665e464ef98b8b718d572d5f329311061eb diff --git a/build/submodules/SPIRV-Reflect b/build/submodules/SPIRV-Reflect deleted file mode 160000 index d7e316e7d5..0000000000 --- a/build/submodules/SPIRV-Reflect +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d7e316e7d592d16ac58f1fe39b1df7babfe65c0d diff --git a/build/submodules/SPIRV-Tools b/build/submodules/SPIRV-Tools deleted file mode 160000 index e553b884c7..0000000000 --- a/build/submodules/SPIRV-Tools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e553b884c7c9febaa4e52334f683641fb5f196a0 diff --git a/build/submodules/SwiftShader b/build/submodules/SwiftShader deleted file mode 160000 index 5f9ed9b169..0000000000 --- a/build/submodules/SwiftShader +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5f9ed9b16931c7155171d31f75004f73f0a3abc8 diff --git a/build/submodules/Vulkan-Headers b/build/submodules/Vulkan-Headers deleted file mode 160000 index 7e69138016..0000000000 --- a/build/submodules/Vulkan-Headers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7e691380166fb1cd9b193ac9db896bc23a4ea9ad diff --git a/build/submodules/Vulkan-Loader b/build/submodules/Vulkan-Loader deleted file mode 160000 index 6d4f07c995..0000000000 --- a/build/submodules/Vulkan-Loader +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d4f07c995975f12d0d8d7a8483cdcbf6c455108 diff --git a/build/submodules/dawn b/build/submodules/dawn deleted file mode 160000 index 130b662d20..0000000000 --- a/build/submodules/dawn +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 130b662d20558a0fe8056f81ea0e718c2e4f3867 diff --git a/build/submodules/dxvk b/build/submodules/dxvk deleted file mode 160000 index 80e075406b..0000000000 --- a/build/submodules/dxvk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 80e075406b1b7d9d2508c9dc05e9745b3d3cf7e2 diff --git a/build/submodules/shaderc b/build/submodules/shaderc deleted file mode 160000 index 39aa522785..0000000000 --- a/build/submodules/shaderc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 39aa522785f130130927cd4766a37e8813af6d66 diff --git a/build/submodules/vkd3d b/build/submodules/vkd3d deleted file mode 160000 index 771e442af1..0000000000 --- a/build/submodules/vkd3d +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 771e442af16228a977eebba82224f06f6d0202fe diff --git a/build/submodules/webgpu-headers b/build/submodules/webgpu-headers deleted file mode 160000 index fe60050d67..0000000000 --- a/build/submodules/webgpu-headers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fe60050d672eb5c9da75987d827a1ae7b35884a6 diff --git a/build/submodules/wgpu-native b/build/submodules/wgpu-native deleted file mode 160000 index 24e00f4711..0000000000 --- a/build/submodules/wgpu-native +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 24e00f4711888cc7a11c26853b1be3bc35c1e6bb diff --git a/build/utilities/AndroidManifest.xml b/build/utilities/AndroidManifest.xml deleted file mode 100644 index 74b7379f73..0000000000 --- a/build/utilities/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/utilities/android_probe.proj b/build/utilities/android_probe.proj deleted file mode 100644 index d80aab0f70..0000000000 --- a/build/utilities/android_probe.proj +++ /dev/null @@ -1,22 +0,0 @@ - - - net6.0-android - 21 - Exe - enable - enable - com.companyname.android_probe - 1 - 1.0 - - - - - - - - - \ No newline at end of file diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 0000000000..63425757a9 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,790 @@ +# Changelog/Version History + +The second-level headings define the version number, and the contents below that header up until the next header define +the release notes. The first heading encountered is treated as the latest version for build purposes. The headings +should be in SemVer order. + +Please read [the Contributions Guide](CONTRIBUTING.md) before writing release notes here! + +## 3.0.0-preview + +Silk.NET 3.0 Preview 1 + +- Added SDL3 bindings using the 3.0 bindings style. +- Added combined OpenGL bindings using the 3.0 bindings style. +- Improved the bindings style to be more accessible, IDE-friendly, and AOT-friendly. Learn more at **TODO ADD A LINK TO DOCUMENTATION HERE**. +- Removed SDL2 bindings. + +This is the first preview of the rewritten Silk.NET 3.0 - the latest and greatest Silk.NET, laser-focused on addressing +pain points and reimagining how C# bindings libraries can be done. Functionality not present but not listed as removed +in the changelog will likely be available in a future 3.0 preview and hasn't been rewritten yet. Further information +about 3.0, including current status of 3.0 development, can be tracked at https://github.com/dotnet/Silk.NET/issues/209 + +## 2.22.0 (04/11/2024) + +Silk.NET Mobile Update + +- Added production-ready iOS support - wrap your Program.cs/IView code with SilkMobile.RunApp and run as-is! +- Added the ability to programmatically focus a window using IWindow.Focus(). (thanks @mayatskiy/@Arugin) +- Added a helper for custom IO in Assimp. +- Added a ToString implementation for Vulkan handles to display the handle value. +- Added some missing Flags attributes to enums, reducing the number of bitwise operation warnings on enums. +- Updated to Vulkan 1.3.300. +- Updated to OpenXR 1.1.42. +- Updated to SDL 2.30.8. +- Updated to MoltenVK 1.2.11. +- Updated to DXVK 2.4.1. +- Updated to OpenAL Soft 1.23.1. +- Updated to shaderc 2024.3. +- Updated to Assimp 5.4.1. +- Updated to latest OpenGL specifications. +- Updated to latest OpenCL specifications. +- Updated to ImGui.NET 1.90.8.1. (thanks @matt-edmondson) +- Updated DirectX/Windows bindings to 10.0.26100.0. +- Updated WebGPU/wgpu/dawn bindings. +- Updated SPIR-V Reflect, Cross, Headers, and Tools to their latest Vulkan 1.3.296 version. +- Updated ANGLE binaries for macOS. (thanks @ramezgerges/Uno Platform) +- Improved native binary packaging. (thanks @joskuijpers, @alexrp) +- Fixed Android 14/API 34 RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED errors. +- Fixed WGPU binaries being out of sync with the bindings API surface and crashing as a result. +- Fixed MultiNativeContext reporting present symbols as missing, affecting WGL, OpenAL, and Vulkan in some cases. +- Fixed native packages not correctly applying when being referenced transitively on .NET Framework and .NET 6+ mobile. +- Fixed windows being stuck when minimising where a recursive call to DoEvents in callbacks is used. +- Fixed changes to the standard cursor type not being accurately reflected on the GLFW backend. +- Fixed Silk.NET.Core not checking its own directory for native binaries. +- Fixed an ImGui memory leak. (thanks @rbertels) +- Fixed being unable to obtain Wayland window pointers when GLFW is compiled with both X11 and Wayland. +- Miscellaneous bugfixes and improvements. + +Special thanks to Stride for sponsoring this 2.X update and our contributors for their contributions and continued interest in the project. +The Silk.NET team are hard at work on 3.0, with 2.X updates continuing with the support of contributors and sponsors. +Learn more at https://github.com/dotnet/Silk.NET + +## 2.21.0 (23/04/2024) + +Silk.NET April 2024 Update + +- Added nint overloads for the cases where OpenGL represents a native-sized integer as a void pointer. +- Added support for executing Windowing loops during repaint and drag events on GLFW in some cases. (thanks @otac0n) +- Added a distinction between "unset" (-1) and "default" (null) for Windowing depth/stencil buffer bits, defaulting to 24/8 on all platforms unless overridden. +- Added support for 64-bit Arm Linux for Assimp, GLFW (+ Windowing & Input), OpenAL Soft, SDL, Vkd3d, Vulkan Loader, SwiftShader, and WGPU. (thanks @alexrp) +- Added support for Apple Silicon Macs for OpenAL Soft, Vulkan Loader, and SwiftShader. (thanks @alexrp) +- Added support for 32-bit Arm Linux for Assimp, GLFW, OpenAL Soft, SDL, Shaderc, SPIR-V Cross, SPIR-V Reflect, Vkd3d, SwiftShader, and WGPU. (thanks @alexrp) +- Added support for 64-bit Windows on Arm for Assimp, OpenAL Soft, VulkanLoader, and SwiftShader. (thanks @alexrp) +- Added limited native library support (SPIR-V Tools and Shaderc) for glibc versions as old as 2.17 on Linux platforms. +- Added support for new standard cursor shapes in Input and GLFW. +- Updated to use `ref readonly` instead of `in`. +- Updated to OpenXR 1.1.36. +- Updated to DirectStorage 1.2.2. +- Updated to Vulkan 1.3.281. +- Updated to SDL 2.30.1. +- Updated to latest OpenCL specifications. +- Updated to latest SPIR-V Reflect. +- Updated to latest WebGPU/Dawn/WGPU headers. +- Updated Vkd3d native binaries. +- Fixed string marshalling occasionally resulting in memory access violations on newer .NET 8 versions. +- Fixed Windowing crashing on .NET Framework builds with prefer 32-bit set using GLFW. +- Fixed extension loading generic type usage issues with full IL trimming enabled. +- Fixed erroneous BreakneckLock acquisition logic slowing input events on mobile/SDL. (thanks @ZingBallyhoo) +- Fixed windowing losing events when using multiple windows on desktop with the mobile/SDL implementation. (thanks @ZingBallyhoo) +- Fixed some packages not referencing their native counterparts where appropriate. (thanks @alexrp) +- Fixed Input events for standalone joysticks not being tracked on GLFW. +- Fixed Input events no longer being tracked after 3-10 reopens of the same window on GLFW. +- Fixed V-Sync configuration not persisting over window state changes in Windowing. +- Fixed Circle.Contains erroneously comparing the squared vector distance from its center against its non-squared radius. (thanks @djoyahoy) + +After this update: +- Apple Silicon support is complete except for missing ANGLE binaries. +- Arm Linux support is complete except for missing DXVK, ANGLE, and Vulkan Loader (missing on 32-bit only) binaries. +- 64-bit Windows on Arm support is complete except for missing DXVK and ANGLE binaries. +- 32-bit Windows on Arm remains unsupported except for DirectStorage. + +## 2.20.0 (12/12/2023) + +Silk.NET December 2023 Update + +- Added support for UTF-8 file paths in GLFW and SDL windows (thanks @WinstonMao) +- Updated to OpenXR 1.0.32.1 +- Updated to Vulkan 1.3.273 +- Updated to latest OpenGL specifications +- Updated to latest OpenCL specifications +- Fixed Matrix2X2.GetDeterminant returning incorrect values +- Fixed ALC_SOFT_reopen_device being a non-context extension (thanks @okaniku, @doobah) + +## 2.19.0 (14/11/2023) + +Silk.NET November 2023 Update + +- Updated to OpenXR 1.0.31 +- Updated to Vulkan 1.3.270 +- Updated to latest ImGui.NET, alleviating some incompatibilities introduced by the ImGui.NET team. +- Updated to latest OpenGL specifications +- Fixed OpenCL clCreateImage not functioning as expected with ImageDesc's ABI +- Fixed OpenAL throwing when loading an extension prefixed with ALC_ instead AL_ + +## 2.18.0 (21/10/2023) + +Silk.NET October 2023 Update + +- Added SPIR-V Reflect bindings +- Added SPIR-V Cross bindings +- Added Shaderc bindings +- Added WIC/WindowsCodecs bindings (thanks @hez2010) +- Added multi-channel formats support for OpenAL (thanks @aleksrutins) +- Added EffectTarget support for OpenAL Soft (thanks @okaniku, @doobah) +- Added MoltenVK support for iOS (massive thank you to @zvasya for contributing and testing) +- Added macOS support for the CreateWebGPUSurface helper function (thanks @AsgardXIV) +- Added the ability to load MoltenVK directly as a fallback should the Vulkan Loader be unavailable on macOS +- Added trimming support with an option to enable/disable static-linking support at link time +- Added WinRT interoperability support for Direct3D 11. +- Added the ability to query extensions from specific Vulkan layers using the Silk.NET helpers +- Added extension methods on IGamepad to return Thumbstick state instead of requiring use of the indexers (thanks @jvyden) +- Added ref properties for Vulkan chain constituents (thanks @khitiara) +- Added Apple Silicon binaries for Assimp (thanks @jschieck) +- Added compatibility with Linux distributions using as early as glibc 2.16 +- Added equality operators and IEquatable to Bool32 (thanks @Syncaidius) +- Added ToSystem/ToGeneric as extension methods (rather than plain static functions) to convert to/from Silk.NET.Maths types (thanks @Wafer-EX) +- Added discriminant values to PinObjectMarshaller to tie pinned handles to state to which the pin pertains +- Updated to Vulkan 1.3.266 +- Updated to OpenXR 1.0.30 +- Updated to SDL 2.28.1 +- Updated to MoltenVK 1.2.5 +- Updated to latest WebGPU headers +- Updated to latest OpenCL specifications +- Updated to latest OpenGL specifications +- Improved allocations in the Silk.NET Loader (thanks @Youssef1313) +- Improved robustness of HLU on AOT compilations +- Fixed WGPU not loading with the correct filename on Windows +- Fixed COM V-Table indices not matching the Clang-reported V-Table index in some cases (DirectWrite/D2D1/DComp) +- Fixed OpenAL throwing when loading an extension prefixed with ALC_ instead AL_ +- Fixed WGL.GetApi throwing a NotImplementedException +- Fixed library loading failing on platforms that do not have a libdl.so symlink (we are now using libdl.so.2, thanks @CasualPokePlayer) +- Fixed a StackOverflowException when using SetWindowIcon in some cases with Silk.NET.Windowing +- Fixed GLFW crashing in some cases where multiple windows are used +- Fixed WebGPU using the incorrect size for booleans +- Fixed a memory leak with some string marshalling functions + +If you are using Silk.NET with an iOS or Android application, please enable trimming and set TrimMode to full. + +## 2.17.1 (09/04/2023) + +Fix a minor regression with some OpenGL Span overloads. Read more about the 2.17 update here: https://dotnet.github.io/Silk.NET/blog/apr-2023/silk2170.html + +## 2.17.0 (06/04/2023) + +Silk.NET Spring 2023 Update 1 + +- Added zero-cost extension methods for ComPtrs, making our DirectX bindings easier to use and higher quality than ever before. +- Added WebGPU bindings for Dawn and WGPU. +- Added Direct2D bindings. (massive thank you to @curin) +- Added DirectComposition bindings. (again, massive preesh to @curin) +- Added DirectWrite bindings. +- Added d3d11on12 bindings. +- Added WGL bindings. +- Added support for Android 12. +- Added support for OpenAL disconnect extension. (thanks @okaniku) +- Added GLFW API constants for ANGLE. (thanks @cyraid) +- Added extension functions for OpenAL BufferData to make use of AL_EXT_float32 enums. +- Added ReopenDevices extension for OpenAL Soft. (thanks @LeNitrous) +- Added BufferCallback extension for OpenAL Soft. +- Added Vulkan structure chain polymorphism. (thanks @Khitiara for the proposal) +- Added SDL/GLFW native libraries for Windows on ARM64. +- Added IsScancodePressed function in Silk.NET Input. +- Added TopMost in Silk.NET Windowing (thanks @MarioGK) +- Added EGL display and surface to INativeWindow. +- Added an explicit check against calling Reset on a window while within the render loop of said window. +- Added support for multiple native binary candidate paths for a single binding. +- Improved support for WASM and AOT in the Silk.NET loader. +- Improved support for Windows on ARM64. +- Improved Silk.NET.Maths generic specialization codegen. +- Improved support for DXVK, including a new DXHandle property in INativeWindow for getting Linux HWND equivalents. +- Improved support for Silk.NET.Windowing under reflection-free NativeAOT +- Updated to SDL 2.24. +- Updated to Vulkan 1.3.246. +- Updated to DirectStorage 1.1.1. +- Updated to OpenXR 1.0.27. +- Updated to Assimp 5.2.5. +- Updated to latest OpenCL specifications. +- Updated to latest OpenGL specifications. +- Updated to latest ImGui. +- Fixed XInput GetApi not being implemented. (thanks @skyebird189) +- Fixed TransparentBuffer not being applied correctly without specifying a PreferredBitDepth. (thanks @MarioGK) +- Fixed wide string marshalling. +- Fixed string array marshalling on systems where the max DBCS character size is insufficient for UTF8. +- Fixed Span overloads not calculating the correct length value for ommitted (implicit) length parameters. +- Fixed copying of native libraries under .NET Framework 4.6.1. (thanks @paralaxsd) +- Fixed SDL crashing on Android when the screen rotates in some cases. +- Fixed a memory leak when using GlobalMemory to marshal string arrays instead of StringArrayToPtr. (thanks @Khitiara) + +## 2.17.0-preview (19/03/2023) + +Silk.NET Spring 2023 Update 1 (EARLY PREVIEW) + +- Added zero-cost extension methods for ComPtrs, making our DirectX bindings easier to use and higher quality than ever before. +- Added WebGPU bindings for Dawn and WGPU. +- Added Direct2D bindings. (massive thank you to @curin) +- Added DirectComposition bindings. (again, massive preesh to @curin) +- Added d3d11on12 bindings. +- Added WGL bindings. +- Added support for OpenAL disconnect extension. (thanks @okaniku) +- Added extension functions for OpenAL BufferData to make use of AL_EXT_float32 enums. +- Added ReopenDevices extension for OpenAL Soft. (thanks @LeNitrous) +- Added BufferCallback extension for OpenAL Soft. +- Added Vulkan structure chain polymorphism. (thanks @Khitiara for the proposal) +- Added SDL/GLFW native libraries for Windows on ARM64. +- Added IsScancodePressed function in Silk.NET Input. +- Added TopMost in Silk.NET Windowing (thanks @MarioGK) +- Added EGL display and surface to INativeWindow. +- Added an explicit check against calling Reset on a window while within the render loop of said window. +- Improved support for WASM and AOT in the Silk.NET loader. +- Improved support for Windows on ARM64. +- Improved Silk.NET.Maths generic specialization codegen. +- Improved support for DXVK, including a new DXHandle property in INativeWindow for getting Linux HWND equivalents. +- Updated to SDL 2.24. +- Updated to Vulkan 1.3.242. +- Updated to DirectStorage 1.1.0. +- Updated to OpenXR 1.0.26. +- Updated to latest OpenCL specifications. +- Updated to latest OpenGL specifications. +- Updated to latest ImGui. +- Fixed XInput GetApi not being implemented. (thanks @ohtorobinson) +- Fixed TransparentBuffer not being applied correctly without specifying a PreferredBitDepth. (thanks @MarioGK) +- Fixed wide string marshalling. + +## 2.16.0 (02/08/2022) + +Silk.NET Summer 2022 Update 1 + +- Massive project-wide bindings overhaul, making our bindings easier to use and higher quality than before. +- Added grouped OpenCL enums. (thanks @Alexx999) +- Added support for creation of contexts with versions prior to OpenGL 3.2. (thanks @Beyley) +- Added support for multiple ImGuiControllers. (thanks @Beyley) +- Added support for single-file mode. (thanks @kant2002) +- Added shorter names in enums used in bindings. +- Added AspectRatioEstimate API to VideoMode. (thanks @ohtrobinson) +- Update to latest OpenGL specifications +- Update to OpenXR 1.0.24 +- Update to Vulkan 1.3.223 +- Improved ImGuiController disposal. (thanks @Beyley) +- Fixed incorrect OpenCL functions. This is breaking, but if you were using these functions your code didn't work anyway. (thanks @Alexx999) +- Fixed IsVisible not being respected in some cases. (thanks @paralaxsd) +- Fixed window close events not being respected on the SDL backend. (thanks @paralaxsd) + +This update may result in your projects having a lot of deprecation warnings. We believe this update contains much-needed improvements to both Silk.NET and code consuming it, but we appeciate migrating to this version may take time. + +## 2.15.0 (02/04/2022) + +Silk.NET April 2022 Update + +- Add DirectStorage bindings +- Add legacy OpenGL 2.0 support for the ImGui extension (thank you @Beyley) +- Add the ability to customize the functionality/priorities of DefaultPathResolver +- Add more auto-generated constants to Assimp, DirectX, and SDL +- Update to Vulkan 1.3.210 +- Update to latest OpenGL specifications +- Fix Assimp native package being out-of-sync with latest binding +- Fix SDL input backend producing different key mappings to the GLFW input backend +- Fix Android Activity restarts not being properly handled by Silk.NET Windowing + +## 2.14.0 (15/03/2022) + +Silk.NET March 2022 Update + +- Add a Version13 convenience property (thanks @Eeveelution) +- Add DXGI_CREATE_FACTORY_DEBUG Constant to DXGI (thanks @Eeveelution) +- Update to Vulkan 1.3.207 +- Update to latest OpenCL specifications +- Update to latest OpenGL specifications +- Fix SilkMarshal.StringToPtr throwing "buffer is too small to contain the encoded data" in some cases +- Fix Direct3D11 having its own ID3D10Blob type +- Fix Assimp using the wrong quaternion types +- Fix SDL windowing backend causing lots of allocations +- Fix GLFW windowing backend circular reference/memory leak + +This release may be breaking for users, but those users who experience breaking changes most likely had code that didn't work anyway. + +## 2.13.0 (06/02/2022) + +Silk.NET February 2022 Update + +- Add an OpenGLES version of the ImGui plugin (thanks @Beyley) +- Add an initial version of a Rider/ReSharper plugin to open Khronos specifications with one click (may not be available for install immediately) +- Update to OpenXR 1.0.22 +- Update to Vulkan 1.2.203 +- Update to latest OpenCL specifications +- Fix mouse scroll wheels state not always being up-to-date on the SDL backend (thanks @paralaxsd) + +In addition, thanks to @roeyskoe for contributing lots of behind-the-scenes changes to improve the Silk.NET native packaging experience. + +## 2.12.0 (07/01/2022) + +Silk.NET January 2022 Update + +- Add support for retrieving the clipboard text on IKeyboard (thanks @Beyley) +- Add a constructor for customizing the ImGui configuration before ImGuiController applies its configuration (thanks @sampletext32) +- Add Flags attributes to all bitmasks generated from C++ headers (i.e. DirectX), fixing warnings on usage +- Update to latest OpenCL specifications +- Update to Vulkan 1.2.203 (from 1.2.201, not 1.2.210 as the previous update indicated) +- Fix input information being one or two frames behind due to running in DoUpdate instead of DoEvents +- Fix BuildTools incorrectly defaulting to Cdecl instead of Winapi (fixes 32-bit issues) +- Fix string marshalling not allocating enough memory for multibyte UTF8 strings +- Fix a DivideByZeroException in PointToFramebuffer thrown in some circumstances +- Fix SymbolLoadingExceptions on usage of GetStringList functions in OpenAL + +## 2.11.0 (06/12/2021) + +Silk.NET December 2021 Update + +- Add a high-level C# wrapper over Vulkan Structure Chains (thanks @thargy). +- Add a WindowClass option in Windowing for setting the X11 class name (thanks @Pydacor) +- Add a IsContextControlDisabled option in Windowing to disable automatically making OpenGL contexts current +- Add support for cloning Vk objects to allow reuse of their function tables independently +- Update to latest OpenCL specifications +- Update to latest OpenGL and OpenGLES specifications +- Update to Vulkan 1.2.210 +- Fix string marshalling regression which resulted in multiple string-overloaded functions throwing +- Fix multiple input-related problems when using the SDL backend of our Windowing abstractions +- Discontinued support for Legacy Xamarin (exclusively supporting .NET 6 mobile from now on) + +## 2.10.1 (10/11/2021) + +Silk.NET .NET Conf 2021 Update + +- Fixes issues with 2.10 (compiled against .NET 6 RC1) not working correctly in projects using the .NET 6 Release SDK. + +## 2.10.0 (06/11/2021) + +Silk.NET November 2021 Update + +- Added support for BigInteger and Complex in the Silk.NET.Maths.Scalar APIs. (thanks @WhiteBlackGoose) +- Added helper constructors for maths types (Rectangle, Box2D, Box3D, etc). (thanks @nathan-alden-sr) +- Added bitwise APIs to Silk.NET.Maths.Scalar. (thanks @WhiteBlackGoose) +- Added support for configuring OpenGL multisamping. +- Updated to Vulkan 1.2.197. +- Updated to latest OpenCL specifications. +- Updated to latest OpenGL specifications. +- Updated DirectX and Win32 bindings to Windows 11 SDK. +- Removed redundant references with no DLLs (i.e. BCL/legacy packages not needed on newer platforms, thanks @nathan-alden-sr @WhiteBlackGoose) +- Removed problematic implicit-in OpenGL overloads (fixes the infamous VertexAttribPointer bug) +- Fixed incorrect character encoding of keyboard (text) input on the SDL backend. (thanks @roeyskoe) +- Fixed native libraries not being resolved despite being present in the "runtimes" folder. +- Miscellaneous documentation fixes and improvements. + +## 2.9.0 (05/10/2021) + +Silk.NET October 2021 Update + +- Add bindings for DirectX Video Acceleration (DXVA) +- Add bindings for D3D9Ex +- Add bindings for extra core Win32 APIs (as required by DXVA) +- Add a .NET 6 code path for GlobalMemory using NativeMemory +- Add more TFMs in addition to .NET Standard 2.0 for DirectX bindings +- Add enhanced anonymous struct support with ref-returning properties on .NET Standard 2.1 and up +- Update to Vulkan 1.2.194 +- Update to latest OpenCL specifications +- Fix MarshalDirectiveException when a struct containing a char passes across a native boundary +- Fix Vulkan out parameters not having their structure type set before passing across the native boundary +- Fix native libraries not being found in some cases for self-contained executables + +## 2.8.0 (04/09/2021) + +Silk.NET September 2021 Update + +- Add TryGetExtension methods to AL & ALContext +- Add support for .NET 6 Android +- Update to Vulkan 1.2.190 +- Update to OpenXR 1.0.19 +- Update to latest OpenGL specifications +- Update to latest OpenCL specifications +- Fix calling CreateInput on an uninitialized IView resulting in a AccessViolationException +- Fix calling Close on an uninitialized IView resulting in an AccessViolationException +- Fix Silk.NET (and by extension SDL) taking full control of orientation on Android +- Fix DoRender being called if Window.Close was called during DoUpdate +- Fix Scalar.Abs for double values +- Fix "Pfn" function pointer structures being marshalled with the incorrect calling convention +- Fix Scalar.IsNaN and Scalar.IsInfinity returning true for non floating point types +- Fix Box2D.Center returning bogus values +- Fix incorrect documentation in Thumbstick.Direction +- Fix incorrect documentation in WindowOptions + +## 2.7.0 (09/08/2021) + +Silk.NET August 2021 Update + +- Add code signing to all Silk.NET binaries +- Add support for platform-default calling conventions +- Update to latest OpenGL specifications +- Update to Vulkan 1.2.187 +- Update to OpenXR 1.0.18 +- Fix loading some OpenAL extensions + +## 2.6.0 (03/07/2021) + +Silk.NET July 2021 Update + +- Add support for OpenAL Soft native libraries for ALContext +- Update to Vulkan 1.2.183 +- Update to latest OpenCL specifications +- Fix struct layout issues in DirectX and OpenXR bindings +- Fix OpenCL library name resolution on Linux +- Fix NU5127, NU5128, and NU1701 native package NuGet errors on .NET Framework +- Improve FileNotFoundExceptions when native library loading fails +- Improve GlobalMemory call chains by removing unnecessary usage of Span<T> + +## 2.5.0 (08/06/2021) + +Silk.NET June 2021 Update + +- OpenXR bindings are now production-ready & no longer experimental! +- Add (optional) native binaries for OpenAL Soft +- Add support for reversed-z projection matrices in Silk.NET.Maths +- Add bindings for a number of missing Vulkan and OpenCL extensions +- Add OpenGL-OpenXR interoperability helper APIs +- Add more helper APIs in Silk.NET.Core and Silk.NET.Maths +- Update to latest OpenGL and OpenGLES specifications +- Update to OpenXR 1.0.16 +- Update to Vulkan 1.2.180 +- Fix SDL OpenGL context issues when not using OpenGL +- Fix GLFW native window issues on 32-bit Windows +- Fix OpenXR loading issues +- Fix incorrect bindings in OpenXR +- Miscellaneous windowing & input bugfixes & improvements + +## 2.4.0 (07/05/2021) + +Silk.NET May 2021 Update + +- Add As methods to all Maths types & other miscellaneous API additions +- Add support for provisional Vulkan Video encoding & decoding extensions +- Update to latest OpenGL specification +- Update to latest OpenCL specification +- Update to Vulkan 1.2.177 +- Update to OpenXR 1.0.15 +- Fix ImGui robustness +- Fix disposal and reset robustness +- Fix SDL input backend not respecting deadzones +- Fix GLFW input backend not respecting start-up state +- Fix Vulkan device function pointer loader bugs +- Fix BSTR GlobalMemory issues +- Fix Vulkan codegen issues +- Fix bitfield codegen for Vulkan & clang-generated bindings +- Miscellaneous windowing & input bugfixes + +## 2.3.0 (03/04/2021) + +Silk.NET April 2021 Update + +- Add a new Silk.NET.OpenGL.Extensions.ImGui package, a first-party ImGui integration for Silk.NET.OpenGL +- Add support for native method definitions across multiple partial classes +- Add improved SDL exception throwing, only throwing when a function indicates an error +- Updated metadata to reference .NET Foundation and dotnet following our .NET Foundation onboarding +- Update to SDL 2.0.14 +- Update to GLFW 3.3.3 +- Miscellaneous build system related fixes +- Miscellaneous SourceLink related fixes + +## 2.2.0 (06/03/2021) + +Silk.NET March 2021 Update + +- Add memory pooling for Input State Capture extensions +- Add Input State Capture stability and robustness improvements +- Update to Vulkan 1.2.171 +- Update to latest OpenGL as of 22nd February 2021 +- Update to latest OpenCL as of 2nd March 2021 +- Fix window disposal/reset bugs +- Fix a build toolchain issue where packages released in Debug mode (#416) +- Fix a string marshalling issue and OpenAL regression (#414) + +## 2.1.0 (16/02/2021) + +Silk.NET February 2021 Update + +- Add native handles for Windowing +- Add Veldrid support +- Add support for macro constants +- Add support for unnamed nested anonymous struct fields +- Add better name hinting for anonymous types +- Add support for OpenGL token reuse for tokens that had been previously deprecated and removed, fixing #400 +- Add nested anonymous struct "fusion" with their parent structs, allowing direct ref access on .NET Standard 2.1 platforms without going through the anonymous field +- Add static Guid members for structs with a COM interface ID +- Fix struct field size and type variation between 32-bit and 64-bit in generated C++ bindings +- Fix calling convention detection, and actually respect the calling convention we detect +- Fix being unable to specify calling convention using NativeApiAttribute +- Fix some type issues +- Fix accidental initialization of both platforms, resolving #407 +- Fix zero-length string allocation resulting in an IndexOutOfRangeException exception by clamping the allocation length to 1, resolving #396 +- Fix unreasonably small delta times when running a window with OpenGL V-Sync enabled +- Fix faulty addition in Silk.NET.Maths where (u)ints were produced by (s)byte and (u)short addition, resulting in an invalid cast +- Fix malformed XML in MSBuild targets included by Silk.NET.Windowing.Sdl.Android, resolving #405 + +This should be treated as an "emergency patch" and you should update as soon as reasonably practicable. Some of the bugs +in 2.0 are fatal in some workloads. + +## 2.0.0 (02/01/2021) + +Silk.NET January 2021 Update - 2.0, the largest Silk.NET update to date + +- Adds Assimp bindings +- Adds SDL bindings +- Adds a SDL windowing backend +- Adds a new, AOT-friendly interop system (SilkTouch) +- Adds Android support +- Adds a generic, flexible maths library to fill in the holes left by System.Numerics +- Adds an initial set of Microsoft DirectX bindings +- Adds improved function pointer support +- Adds more OpenGL framebuffer bit-depth options +- Adds shared OpenGL contexts +- (EXPERIMENTAL!) Adds OpenXR bindings +- (EXPERIMENTAL!) Adds iOS support +- Massive performance improvements +- GLFW fixes +- Windowing and Input fixes/refactorings +- OpenCL and OpenAL improvements +- Vulkan bug fixes +- Miscellaneous bug fixes and improvements + +This release may be breaking and will likely require some modification in updating existing code to it. Please contact +us in our Discord server if this is the case. We'll do our best to publish a migration guide shortly. + +## 2.0.0-preview5 (29/12/2020) + +Includes everything from the last previews, as well as: +- Maths packaging fixes +- Improved function pointer support +- Vulkan bug fixes +- OpenGL VSync fixes +- Miscellaneous Linux library loading improvements (#279) +- More OpenGL framebuffer bit-depth options (#286) +- Shared OpenGL contexts (#334) +- SDL windowing improvements (#350) +- Minor assembly size improvements (#374) +- Other miscellaneous fixes and improvements + +This is the last 2.0 preview before full release, and is a production-ready "go live" release. Feel free to use this in +new applications. + +## 2.0.0-preview4 (08/12/2020) + +Includes everything from the last previews, as well as: +- A generic, flexible maths library to fill in the holes left by System.Numerics +- An initial set of Microsoft DirectX bindings +- Miscellaenous fixes and improvements + +Silk.NET v1.9.0 was the last version of Silk.NET v1.X as this release (2.0 Preview 4) is a production-ready "go live" +release. Feel free to use this in new applications. + +## 2.0.0-preview3 (17/11/2020) + +Includes everything from the last previews, as well as: +- Experimental Android support +- Experimental iOS support +- Add static linking support to SilkTouch +- Surface API improvements +- SilkTouch improvements +- OpenCL and OpenAL improvements +- Other miscellaneous bug fixes and improvements + +## 2.0.0-preview2 (21/08/2020) + +Includes everything from the last previews, as well as: +- SDL bindings +- A SDL windowing backend +- A new, AOT-friendly interop system +- A new and improved overload system and bindings API surface +- Miscellaneous OpenXR and GLFW fixes +- Miscellaneous windowing and input fixes and refactorings + +## 2.0.0-preview (15/07/2020) + +Includes Assimp and experimental OpenXR bindings. + +## 1.9.0 (04/12/2020) + +Silk.NET December 2020 Update - The Final Silk.NET 1.x Update + +- Update to latest specifications. +- Miscellaneous bug fixes and improvements. + +## 1.8.0 (06/11/2020) + +Silk.NET November 2020 Update + +- Update to latest specifications. +- Miscellaneous bug fixes and improvements. + +## 1.7.0 (02/10/2020) + +Silk.NET October 2020 Update + +- Add a BorderSize property and GetFullSize extension method to IWindow for working with window borders. +- Add a Center extension method which will center the window to a monitor. +- Update to latest specifications. +- Miscellaneous bug fixes and improvements. + +## 1.6.0 (04/09/2020) + +Silk.NET September 2020 Update + +- Add a byte* overload to Glfw.GetError +- Make GlfwProvider throw if Glfw.Init fails +- Update to latest specifications +- Miscellaneous bug fixes and improvements + +## 1.5.0 (07/08/2020) + +Silk.NET August 2020 Update + +- Update to Vulkan 1.2.149 +- Update OpenCL +- Add a Time property to IView, tracking the seconds since window initialization +- Add a Run method to IView, which will invoke a delegate as fast as possible (required for 2.0 and mobile) +- Fix more first-chance exceptions + +## 1.4.0 (03/07/2020) + +Silk.NET July 2020 Update + +- Update to OpenCL v3.0.1 (Provisional Specification) +- Update to Vulkan v1.2.145 +- Update to SuperInvoke v1.1.0 +- Added an IGLContext implementation (GlfwContext) to Silk.NET.GLFW +- Added glfwSetFramebufferSizeCallback to Silk.NET.GLFW +- Fixed some cases of first-chance exceptions when loading native libraries +- Miscellaneous bug fixes and improvements + +## 1.3.0 (05/06/2020) + +Silk.NET June 2020 Update + +- FPS stabilization improvements +- Vulkan loader improvements +- Support EGL_NV_stream_consumer_eglimage + +## 1.2.1 (16/05/2020) + +Silk.NET 1.2.1 Patch Update + +- Updated to the latest OpenCL specification +- Updated to Vulkan 1.2.141 +- Added a ContinueEvents method to force an event-driven game loop to continue +- Added support for IGLContext in GL instances (this was slated for 1.2.0, but left out for some reason) +- Moved GlfwLoader out of Silk.NET.Windowing.Desktop and into Silk.NET.GLFW + +## 1.2.0 (01/05/2020) + +Silk.NET May 2020 Update + +- Update to Vulkan 1.2.139 +- Update to OpenCL 3.0 +- Add a new context abstraction +- Add extensions for using Silk.NET's Windowing API with Veldrid +- Add a new way of accessing OpenGL-specific and Vulkan-specific functions +- Add a helpful hint as to why your Vulkan functions are throwing EntryPointNotFoundExceptions. +- Add ExtensionName constants to all extension classes (useful for Vulkan) +- Add an option for waiting for events before proceeding to execute the render loop. +- Add a setter to the IsClosing property so you can cancel window closure +- Fix the incorrect DebugUtilsMessengerCallbackFunctionEXT signature +- Fix a bug where you couldn't catch GlfwExceptions on Linux and macOS +- Fix a bug where attempting to call Invoke on a window will result in a deadlock +- Fix a bug where VSync was always on regardless of the requested configuration +- Fix a bug where eventhough we fixed the previous VSync bug, we still weren't respecting initial vsync settings. +- Fix a bug where directly accessing scroll-wheel info would return bogus data +- Fix a bug where Render and Update are fired again after close +- Deprecated adaptive vsync +- Deprecated SilkManager +- Deprecated obsolete native methods that we weren't annotating as obsolete before +- Miscellaneous fixes and improvements + +## 1.1.1 (13/04/2020) + +Silk.NET 1.1.1 Hotfix + +- Fix OpenAL symbol loading bugs +- Fix a bug where gamepad button states weren't stored correctly +- Fix a bug where the Close method wouldn't trigger the Close event + +## 1.1.0 (05/04/2020) + +Silk.NET April 2020 Update + +- Add Input Capture Extensions +- Add transparent framebuffers +- Fix miscellaneous bugs in OpenAL +- Updated to Vulkan 1.2.136 +- Updated OpenCL to include 2.2's latest experimental features + +## 1.0.1 (17/03/2020) + +This is a small patch fixing some small Vulkan-specific bugs within Silk.NET. + +- Updated to Vulkan 1.2.135 (March 17, 2020) +- Fixed Vulkan extension loading +- Fixed Vulkan windowing +- Fixed some typos in autogenerated method names + +## 1.0.0 (08/03/2020) + +This is the first full release of Silk.NET. Changes since Preview 5: + +- Add window icons +- Add more in-depth OpenGL context-management methods. +- Add click events +- Add OpenGL direct state access overloads +- Add Vulkan boolean & version helpers + +## 1.0.0-preview5 (18/02/2020) + +Silk.NET 1.0 Preview 5 + +- Added cursor modes +- Added EGL bindings (no windowing backend yet) +- Rewrite the overload system, hopefully resulting in overloads that make sense. +- Miscellaenous Silk.NET.Core improvements +- Updated to SuperInvoke 1.0.3, encompassing a lot of bug fixes. +- Updated to GLFW 3.3.2, encompassing a lot of bug fixes. +- Fix an infinite loop in OpenAL's GetStringList methods +- Other bug fixes + +As a result of the new overload system, some work may be required to migrate to Preivew 5 from an earlier +preview. + +## 1.0.0-preview4 (08/02/2020) + +- Added OpenCL +- Added monitor support +- Added view/window separation (in preparation for mobile support in a later release) +- Added monitors and video modes +- Fixed vsync +- Removed AdvancedDLSupport in favour of SuperInvoke +- Removed dispatcher +- Removed other unused/unnecessary packages + +## 1.0.0-preview3 (15/11/2019) + +- Added Vulkan +- Added mouse movement +- Added gamepad rumble (though it hasn't been implemented in GLFW yet) +- Added macOS support +- Added more overloads, as well as fixed the existing ones. +- Added DoRender, DoUpdate, DoEvents, Open, Reset, and IsClosing members for custom game loops +- Added KeyChar for receiving text input (modifiers applied) +- Added strongly-typed enum groupings for OpenGL and OpenGLES +- Fixed extension loading +- Fixed a bug where strings weren't marshalled properly +- Fixed a bug where some shaders didn't compile correctly +- Fixed a bug where some programs didn't link correctly +- Fixed various OpenAL bugs +- Removed all built-in thread management, the user will have to take care of this themselves. +- Synchronised the enum of all available keys with that of GLFW + +## 1.0.0-preview2 (10/08/2019) + +- Fixed a bug where calling an unloaded OpenGL function will throw a GlfwException. +- Fixed a bug where GLFW wasn't swapping the buffers (no drawing will ever make it to the window!) +- Refactored Silk.NET.Core, unifying the platform loading logic. +- Renamed OnRender to Render + other windowing events + +## 1.0.0-preview (04/08/2019) + +- First preview release diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS new file mode 100644 index 0000000000..e64a379e16 --- /dev/null +++ b/docs/CODEOWNERS @@ -0,0 +1,4 @@ +############################################################################### +# Default owner for all files in the repository +############################################################################### +* @dotnet/silk-dotnet diff --git a/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to docs/CODE_OF_CONDUCT.md diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000000..f2e467a917 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1,112 @@ +# Contributing + +You can contribute to Silk.NET with issues and PRs. Simply filing issues for problems you encounter is a great way to contribute. Contributing code is also greatly appreciated. + +## Considerations +The Silk.NET team will merge changes that improve the library significantly. We will not merge changes that have narrowly-defined benefits, or are breaking in some way. All contributions must also follow all other guidelines outlined in this document. + +## DOs and DON'Ts +Please: +- **DO** talk to us in #team-talk in the Discord or open a discussion issue if your contribution is sizeable. +- **DO** keep the discussions around contributions focused. If you have another matter to discuss, rather than creating a massive tangent in the current discussion, open up a new one. +- **DO** follow the code of conduct if discussing on GitHub and/or the Discord #rules if discussing on Discord. +- **DO** update the release notes, unless your change only affects the repository experience, examples, internals (without user-facing behavioural changes), or otherwise isn't user-facing. +- **DON'T** make PRs that don't directly affect the end user, such as style changes. These are best done as part of a PR related to the area in question. Documentation is fine (and encouraged!), as this is useful to the end user. +- **DON'T** commit code you didn't write without following its license and following our guidelines for doing so in the Contributor License Agreement. If you are unable to license some code, don't commit it. +- **DON'T** surprise us with big pull requests or big API changes without talking to us first! +- **DON'T** make PRs for legal or administrative documents, such as the license, file headers, or code of conduct. If you see something off, let us know and we'll change it. + +## Updating Release Notes + +Silk.NET has excessive attention to detail when it comes to its most user-facing documentation, as these are seen as +promotional opportunities to shape user opinion of the library. For instance, a user is much more likely to favour a +library with a very clear README that clearly states what the project does, and why the user should use it. This is why +README changes are some of the most deliberated changes made to this project. We see release notes in this category too, +as release notes present an opportunity to show off and focus on all the great stuff we've been working on for our users +to paint the library in an even more positive light. This is also why we handwrite release notes rather than +autogenerate them as most libraries do these days. + +To this end, our release notes follow a very particular format. Namely: +- A headline/title. For example `Silk.NET April 2024 Update` or `Silk.NET 3.0 Preview 1`. +- A blank line. +- A bullet list of changes. + - Each list element must start with the word `Added`, `Updated`, `Improved`, `Removed`, `Deprecated` or + `Fixed` and list elements should be in that order. That is, all the `Added` elements should come first, followed by + all of the `Updated` items, etc. For example, `Added OpenGL bindings`, + `Fixed window not resizing correctly when -1 is passed`, etc. Note that beyond this first word rule, the ordering + is completely arbitrary. Maintainers will likely reorder the changelist to highlight the most impactful changes + first upon release, so don't worry about where you put your change in this list. + - The list element can be followed by `(thanks @name)` if you would like to thank an non-maintainer/external + contributor (or yourself, if you are an external contributor), where `name` is replaced with a GitHub username. + Maintainers or other contributors that have an ongoing association/relationship with the project team can also do + this but please be aware that this can seem like blowing your own trumpet. Feel free to comma-delimit multiple + names as well e.g. `(thanks @Perksey, @curin)`. +- A blank line. +- Additional information about the release if necessary, denoted by a blank line if provided. + +We encourage all contributors to add a change list element _as they're doing the change_. This is so maintainers don't +have to spend lots of time creating a conclusive changelog before releasing an update. This also means that the release +notes for next update _should_ already be started in `CHANGELOG.md` before the update is actually released. That is, a +second-level heading for the assumed next version should exist, ideally with a heading/title (or a placeholder). If this +isn't the case, please create one. This usually happens if you're working on the first thing after a release! For +example, if the latest release was `3.0.0`, you can likely assume that the next release is `3.1.0` (and we'll change +this later if it's not the case), resulting in a template like: + +``` +## 3.1.0 + +Silk.NET 3.1 Update + +- Added . + +``` + +Violations of these guidelines will be evaluated on a case-by-case basis, with maintainer approval. This is typically to +highlight overwhelmingly extravagant changes. + +## Breaking changes +Contributions must maintain API signature and behavioral compatibility. Contributions that include breaking changes will be rejected. There are exceptions to this, such as if the contribution is made against a major/breaking version branch (such as `2.0` instead of `master`), however this is subject to the team's approval. At risk of sounding like a broken record, talk to us about your idea first! + +### Generated bindings +Sometimes upstream specification changes happen while working on your contribution. Unfortunately, we are not in control of breaking changes created by the upstream spec sources, and if one happens while working on your contribution it is not a cause for concern. + +If your contribution affects binder output, let us know by commenting on the pull request. If the change isn't as a result of your modifications to the BuildTools (if any), it is recommended that you don't commit the .gen.cs files and instead do this in a separate PR. + +## Suggested workflow +Silk.NET uses and encourages [Early Pull Requests](https://medium.com/practical-blend/pull-request-first-f6bb667a9b6). Please don't wait until you're done to open a PR! + +1. Install [Git](https://git-scm.com/downloads) and the [.NET Core SDK](https://www.microsoft.com/net/download) +1. [Fork Silk.NET](https://github.com/dotnet/Silk.NET/fork) +1. Create a branch on your fork. +1. Add an empty commit to start your work off (and let you open a PR): `git commit --allow-empty -m "start of [thing you're working on]"` +1. Open a [**draft pull request**](https://github.blog/2019-02-14-introducing-draft-pull-requests/). Do this **before** you actually start working. +1. Make your commits in small, incremental steps with clear descriptions. +1. Tag a maintainer when you're done and ask for a review! + +## "Help wanted" & "Good first issue" +If the core team are unable to champion an issue, they will mark it with a "help wanted" label. This indicates that any external contributor may pick up on this issue and implement it as part of a contribution. However, some "help wanted" issues may require intermediate knowledge of the codebase, area, and/or ecosystem; or may have uncertainty surrounding implementation details (if this is the case talk to us in the Discord or in a discussion issue). Because of this, we also mark some issues with the label "good first issue" which indicates that an issue is straightforward, and is a good place to start if you're interested in contributing but new to the codebase. + +## Contributor License Agreement +You must sign a Contributor License Agreement (CLA) before your PR will be merged. This is a one-time requirement for all .NET Foundation projects, and you'll only have to do this once. You can read more about [Contribution License Agreements (CLAs) on Wikipedia](https://en.wikipedia.org/wiki/Contributor_License_Agreement). + +You don't have to do this up-front. You can simply clone, fork, and submit your pull-request as usual. When your pull-request is created, you'll be notified by the CLA bot of further instructions if necessary. + +## File Headers +The following file header is used for Silk.NET. Please use it for new files. +```cs +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +``` + +## Pull requests +### Continuous Integration +Our GitHub Actions Continuous Integration (CI) system will automatically perform the required builds, tests, and in some cases changes for Pull Requests (PRs). + +If the CI build fails for any reason, you can view the logs to find out what the problem is. In some cases, GitHub Actions will highlight the errors inline on the "File Changes" tabs. + +### Feedback +Team and community members will provide feedback on your change. Community feedback is highly valued. You will often see the absence of team feedback if the community has already provided good review feedback. + +One or more team members will review every PR prior to merge. + +There are lots of thoughts and approaches for how to efficiently discuss changes. It is best to be clear and explicit with your feedback. Please be patient with people who might not understand the finer details about your approach to feedback. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..fb55eea9c3 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,135 @@ + +

+ +
+

+
+ +[![NuGet Version](https://img.shields.io/nuget/v/Silk.NET)](https://nuget.org/packages/Silk.NET) +[![Preview Feed](https://img.shields.io/badge/nuget-experimental%20feed-yellow)](https://gitlab.com/silkdotnet/Silk.NET/-/packages) +[![CI Build](https://github.com/Ultz/Silk.NET/workflows/CI%20Build/badge.svg)](https://github.com/dotnet/Silk.NET/actions/workflows/build.yml) +[![Join our Discord](https://img.shields.io/badge/chat%20on-discord-7289DA)](https://discord.gg/DTHHXRt) + +
+ +
+ + + +Silk.NET is your one-stop-shop for high-speed .NET multimedia, graphics, and compute; providing bindings to popular low-level APIs such as OpenGL, OpenCL, OpenAL, OpenXR, GLFW, SDL, Vulkan, Assimp, WebGPU, and DirectX. + +Use Silk.NET to spruce up applications with cross-platform 3D graphics, audio, compute and haptics! + +Silk.NET works on any .NET Standard 2.0 compliant platform, including .NET 6.0, Xamarin, .NET Framework 4.6.1+, and .NET Core 2.0+. + +
+
+
+ +.NET Foundation + + + +
+ +Proud to be an official project under the benevolent [.NET Foundation](https://dotnetfoundation.org) umbrella. + +
+ + + +

Features

+ +### Performance + +Having poured lots of hours into examining generated C# code and its JIT assembly, you can count on us to deliver blazing fast bindings with negligible overhead induced by Silk.NET! + +### Up-to-date + +With an efficient bindings regeneration mechanism, we are committed to ensuring our bindings reflect the latest specifications with frequent updates generated straight from the upstream sources. + +### High-level utilities + +In addition to providing high-speed, direct, and transparent bindings, we provide high-level utilities and wrappers to maximise productivity in common workloads such as platform-agnostic abstractions around Windowing and Input, bringing your apps to a vast number of platforms without changing a single line! + +### Good-to-go + +Silk.NET caters for anything you could need in swift development of multimedia, graphics, compute applications. Silk.NET is an all-in-one solution, complete with Graphics, Compute, Audio, Input, and Windowing. + + + +

The team

+ +We currently have the following maintainers: +- [Kai Jellinghaus](https://github.com/HurricanKai) [Follow Kai on Twitter](https://twitter.com/intent/follow?screen_name=KJellinghaus) +- [Thomas Mizrahi](https://github.com/ThomasMiz) +- [Beyley Thomas](https://github.com/Beyley) + +In addition, the Silk.NET working group help drive larger user-facing changes providing key consultation from the perspective of dedicated users and professionals. + +

Building from source

+ +Prerequisites +- **Must**: .NET 6 SDK +- **Should**: [NUKE](https://nuke.build) (build system). Install using `dotnet tool install Nuke.GlobalTool --global` +- **Should**: Android, iOS, and MAUI .NET 6 workloads (use `dotnet workload install android ios maccatalyst maui` to install them) +- **Should**: Android SDK version 30 with NDK tools installed. On Windows, for best results this should be installed into `C:\ProgramData\Android\android-sdk`. +- **Could**: Java JDK (for gradle) +- **Could**: Visual Studio 2022 Community version 17.0 or later + +Instructions +- Clone the repository (recursively) +- Run build.sh, build.cmd, build.ps1, or `nuke compile`. +- Use the DLLs. To get nupkgs you can use with NuGet instead, use `nuke pack`. + +There are more advanced build actions you can do too, such as FullBuild, Pack, FullPack, among others which you can view by doing `nuke --plan`. + +Note: Some .NET 6 workloads are only supported on Windows and macOS today. + +

Contributing

+ +Silk.NET uses and encourages [Early Pull Requests](https://medium.com/practical-blend/pull-request-first-f6bb667a9b6). Please don't wait until you're done to open a PR! + +1. [Fork Silk.NET](https://github.com/dotnet/Silk.NET/fork) +2. Add an empty commit to a new branch to start your work off: `git commit --allow-empty -m "start of [thing you're working on]"` +3. Once you've pushed a commit, open a [**draft pull request**](https://github.blog/2019-02-14-introducing-draft-pull-requests/). Do this **before** you actually start working. +4. Make your commits in small, incremental steps with clear descriptions. +5. Tag a maintainer when you're done and ask for a review! + +The Silk.NET solution is **very large**. Learn about how you can combat this using our build process in [CONTRIBUTING.md](CONTRIBUTING.md). + + + +

Funding

+Silk.NET requires significant effort to maintain, as such we greatly appreciate any financial support you are able to provide! + +This helps ensure Silk.NET's long term viability, and to help support the developers who maintain Silk.NET in their free time. [Kai](https://github.com/sponsors/HurricanKai) is accepting GitHub Sponsorships. + +

Further resources

+ +- Several examples can be found in the [examples folder](https://github.com/dotnet/Silk.NET/tree/master/examples) +- Come chat with us on [Discord](https://discord.gg/DTHHXRt)! + +

Licensing and governance

+ +Silk.NET is distributed under the very permissive MIT/X11 license and all dependencies are distributed under MIT-compatible licenses. + +Silk.NET is a [.NET Foundation](https://www.dotnetfoundation.org/projects) project, and has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](http://www.dotnetfoundation.org/code-of-conduct). + + + +--- + + + + + diff --git a/docs/for-contributors/README.mdx b/docs/for-contributors/README.mdx new file mode 100644 index 0000000000..06da434d9d --- /dev/null +++ b/docs/for-contributors/README.mdx @@ -0,0 +1,65 @@ +--- +title: "Overview" +--- + +import DocCardList from '@theme/DocCardList'; +import { useCurrentSidebarCategory } from '@docusaurus/theme-common'; + +# The Silk.NET Contributors Guide + +Welcome to the Silk.NET project! We're so glad you want to help us create the best native interoperation experience that +.NET has ever seen. + +This contributors guide covers many topics about Silk.NET's internals in great detail to help anyone pick up any part of +the codebase and hit the ground running. + +## Table of Contents + +- [Getting Started (you are here!)](#getting-started) +- [Contribution Process](../CONTRIBUTING.md) +- [Build System](build-system.md) + +## Getting Started + +### Prerequisites + +To get started, first clone Silk.NET using `git clone https://github.com/dotnet/Silk.NET --depth 1`. Your development +environment will need the latest production-ready .NET SDK, so make sure you've installed that from +[get.dot.net](https://get.dot.net). We also recommend installing NUKE using `dotnet tool install -g NUKE.GlobalTool` to +enable our auxiliary build commands/utilities, but this is optional and in fact can be accessed using the +`./build.sh`/`.\build.cmd`/`.\build.ps1` scripts in place of `nuke` in usages in this guide without installing the tool. + +If you'd like to build and/or work with the mobile support in Silk.NET, you'll need to install the workloads using +`dotnet workload restore`. It is highly likely you need to prefix this with `sudo` on macOS and Linux. In addition, +you'll need to install the Android SDK with API 34 and API 35 support to ensure a successful build. Furthermore, on +macOS you will need Xcode installed with the iOS platform installed. Alternatively, if you don't want to work with our +mobile support, you can disable it for your local builds using `nuke disable-platforms --platforms android ios` for +example. The acceptable values for `--platforms` are any valid platform identifiers (i.e. right-hand side of the `-` of +a `TargetFramework`, without platform version information). + +We automatically disable iOS support on Linux, as these workloads are only available on Windows and macOS. For more +information about the NUKE utilities, consult the [Build System](build-system.md) documentation or use `nuke --help`. + +### Building from Source + +Assuming you've got the prerequisites installed, `dotnet build`! Or `dotnet pack` to produce all the NuPkgs in +`artifacts/pkg`. + +To learn more about the build system, see the [Build System](build-system.md) documentation. It is intentionally +designed to be as compatible as possible with the regular `dotnet build` system such that you can use the built-in +utilities of your favourite IDE. + +### Regenerating Bindings + +You can regenerate bindings using NUKE with `nuke regenerate-bindings`, but this isn't recommended. A full regeneration +of Silk.NET takes a long time and has the potential to touch the vast majority of the files that make up Silk.NET and/or +create loads of unrelated changes in your working tree. Instead, it is preferred to run SilkTouch manually using a +command like +`dotnet run --project sources/SilkTouch/SilkTouch/Silk.NET.SilkTouch.csproj -c Release -- generator.json -s Job1 -s Job2 ...` +where the values for the `-s` arguments are replaced with the job names (the keys of the `Jobs` dictionary in +`generator.json` e.g. `SDL`, `OpenGL`, etc). + +For more information on SilkTouch arguments, consult the [SilkTouch User Guide](../silktouch) or use +`dotnet run --project sources/SilkTouch/SilkTouch/Silk.NET.SilkTouch.csproj -- --help`. + + e.label != "Overview")} /> diff --git a/docs/for-contributors/Website/README.md b/docs/for-contributors/Website/README.md new file mode 100644 index 0000000000..bcc09b6eb6 --- /dev/null +++ b/docs/for-contributors/Website/README.md @@ -0,0 +1,161 @@ +# dotnet.github.io/Silk.NET + +We use Docusaurus to build our website, however our usage of it is a bit esoteric. Docusaurus is a React-based +static site generator, the output from which we host on GitHub Pages (i.e. no dynamic server-side code whatsoever). +Docusaurus gives us a lot of features for free (docs, versioning, blogs, etc) while also making use of the ever-familiar +frontend ecosystem that is React. Previous iterations of the website used the Statiq C#/Razor static site generator, +however this required significantly more work on the Silk.NET side to get a full site and as a result wasn't +particularly well-written or well-maintained given the developers that excel at making a great bindings library often +aren't the same people that excel at frontend - yes, the old Statiq-based codebase _was_ **worse** than what we have +now. + +The website is built using the following command: + +``` +nuke website +``` + +Alternatively, one of the build scripts can be used in place of the `nuke` global tool. For more information, see the +[build system](../build-system.md) documentation. + +In its simplest form, Docusaurus is used with the following details: +- The content at the `docs` URL is kept in the `docs` directory in the repository root. +- The rest of the website files are at [`sources/Website`](../../../sources/Website). + - This includes static files (e.g. images) at [`sources/Website/static`](../../../sources/Website/static) + - This also includes the Silk.NET blog at [`sources/Website/blog`](../../../sources/Website/blog). + **FUTURE IMPROVEMENT**: Maybe we want to move this one day? + +Generally, you should lean on the Docusaurus documentation for most of the Docusaurus configuration, we'll delve into +our extra bits on top later. But first, we should probably go over the elements of our Docusaurus config that seem +utterly bonkers when considering reference configurations for Docusaurus. + +## The Theme + +We did a lot of modifications to the theme to be more in line with the Microsoft .NET brand and the Silk.NET brand. +This is mostly CSS work, which can be found at [`sources/Website/src/css`](../../../sources/Website/src/css). +We also put a lot of work into the front-page, which is riddled with lots of custom React stuff at +[`sources/Website/src/pages/index.tsx`](../../../sources/Website/src/pages/index.tsx). There wasn't much appetite to +deviate further from the default than simple CSS modifications as the Silk.NET team aren't really frontend engineers and +we don't want to maintain anything fancy. + +## Giscus + +Like the previous Statiq-based version of the Silk.NET Website, we use Giscus to provide a comments section on pages +throughout the site. This uses GitHub Discussions (specifically the +[Webpage Comments](https://github.com/dotnet/Silk.NET/discussions/categories/webpage-comments) section) to store +discussions. Being a static site, nothing fancier we can do here really. + +## Paths + +The `docs` directory being in the repository root instead of being a subdirectory adjacent to `static` is a very +atypical configuration for Docusaurus, however it was a priority to make documentation viewable within GitHub as well as +on the website for maximum flexibility and ease of use. There is an assumption that the Docusaurus build command will +always run in `sources/Website`, so from a config perspective we pull the docs from `../../docs`. It is a bit strange to +have the static files so far away from the documentation content, and indeed this might be an oversight given that we +want that maximum flexibility (those URLs will only resolve in one viewing mode!), but we haven't found a good way to +reconcile those differences yet. + +**FUTURE IMPROVEMENT**: Should we? Perhaps we could add a step to the NUKE job that will get all the images in the +`docs` directory and copy them to `static` implicitly? + +## GitHub Admonitions + +We use `remark-github-admonitions-to-directives` to convert between GitHub-viewable `> [!NOTE]` syntax and Docusaurus' +expected syntax, again for the previously stated goal of being viewable both ways. This is added as a +`beforeDefaultRemarkPlugins` and instructs Docusaurus to convert the syntaxes while it's converting the `mdx` files to +JavaScript files. + +## NUKE + +Now we get into the very exotic bits. In theory, you can stop reading this document here and still have a (relatively) +functional Silk.NET website. We use NUKE to have some more complicated build logic to give our website the bells and +whistles we need. + +**FUTURE IMPROVEMENT**: Although there is the known issue of for some reason not being able to build the website for a +second time without purging `node_modules` and reinstalling again, which the NUKE script does. +[Here's the original conversation in Discord](https://discord.com/channels/521092042781229087/587346162802229298/1332782687638917207). + +### Blog Authors + +First, the NUKE script uses the GitHub GraphQL to get information about the GitHub usernames that are recorded as +authors of blog posts in Markdown front-matter. This includes names, social accounts, and public email addresses. +We do check the `authors.yml` into the repo, so you can skip this by doing `--skip-contributors-scrape`, but it's fairly +quick. Note, however, that this uses the `gh` official GitHub CLI tool to get an auth token outside of CI (i.e. `gh auth +token`), so you'll want to login to `gh` ahead-of-time. You'll also need to add some scopes given that access public +email addresses, for some reason, demands a specific scope (that apparently isn't required or is implicitly granted to +CI jobs?): + +```bash +gh auth login --scopes "user:email,read:user,workflow" +``` + +If you have already logged into the `gh` CLI, you can ensure these scopes are added by logging in again. + +### Redirects + +The Statiq-based site used URLs with `.html` at the end a lot. The NUKE script adds those files back to ensure link +compatibility, and these files will just redirect to the URls without the `.html` suffix. + +### Versioning + +Docusaurus has built-in versioning, but it doesn't use Git. Instead, it expects all versions to be checked into the +repository in the branch the website is being built on (resulting in lots of duplication - this is not acceptable for +us!) As a result of this, we decided to forgo the standard Docusaurus versioning workflow and "emulate" it at build-time +using the NUKE workflow. This pulls on the Git repo to provide the historical versions, and makes up most of the logic +in the NUKE script. + +The versioning process is as follows: +1. See if we're currently working on the next version of Silk.NET by looking for a `develop/X.0` branch. See + [Repository Etiquette](../repository-etiquette.md) for more info. +2. Determine the version being tracked by the branch we're currently on. +3. For each major version, get the latest released version name. If there is no released version, then we try the + [CHANGELOG](../../CHANGELOG.md). This means that the documentation website is up as soon as the branch is created, + but once we've snapped Preview 1 the website won't claim to be docs for Preview 2 until Preview 2 is released. +4. Retrieve the documentation for each major version. If the major version is one that is still being developed (be that + in sustaining or as a next major version), then we download the documentation from the relevant branch. If not, we + download the documentation from the last tag of that major version. Note that we do check whether a + `eng/submodules/silk.net-X.x` submodule exists first to avoid unnecessarily hitting the GitHub API. + + You can override the version read by this script by placing a `version.txt` file in the submodule. This is how + Silk.NET 2.0's NUKE script works (more on that later). + + **FUTURE IMPROVEMENT**: This does mean that in theory someone could do some docs work between that tag and the next + major version releasing, and that work being discarded once the next major version gets merged into `main`. +5. Backup the `sources/Website` and `docs` directories, as we'll be moving a lot of files back and forth from various + versions hereafter. This backup is restored even if the script crashes (unless you Ctrl+C/kill it). Failing that, you + still have Git! This is just backed up to a temporary directory in `.nuke`. +6. For each version, replace the `docs` directory in the checked out repository root (i.e. in which the NUKE script is + running, not within the version we just downloaded) with that of the version we just downloaded, and copy the static + files over as well. Note that we merge the static files from all versions as we go, newest taking precedence. Once + we've done that, we use the `docusaurus docs:version` command for the major version (unless it's the latest/next + major version, as this is treated as the `current` version) +7. After all that, we output the versioning data scraped from the repository to a file called `silkversions.json` in + `sources/Website`. This is then read in by the Docusaurus config file. Note that this contains the `lastVersion` (as + in the Docusaurus documentation - this lets us figure out whether `current` represents the _current_ release or a + _preview_ release) and the `nextVersion`, which are used in determining the "edit this page" URLs. Note that `/docs` + will always represent the last major version that has a non-preview release - the moment that this ceases to be true + for `v3`, `v3` will change from `/docs/v3` to just `/docs` and `v2` will change from `/docs/` to `/docs/v2`. + + **FUTURE IMPROVEMENT**: I hate potentially breaking links. Can we figure out a faux redirect mechanism like we did + for .html->non-.html? + +After all of that, we build the site using Docusaurus. The versioning information is populated into the configuration +structure as above using the `addSilkVersionsJson` function. Note that there is a lot more hackery in the Docusaurus +config mostly because we developed a habit of having relative links to source code (as this is fairly nice from a GitHub +perspective, linking to code on the branch being currently viewed) which Docusaurus got very confused about. As such, we +have to manually reconcile these links into absolute URLs, which we once again use the versioning data for. This is far +more complicated than it should've been. This is added as a link rewriter remark plugin, processing the Markdown files +in much the same way that the GitHub Admonitions plugin does. + +### Silk.NET 2.X + +Silk.NET 2.X is a bit of a unique case from the perspective of this website. First, it is possibly the only time that we +will ever use a non-stable branch for the website of the stable version (given that everything outlined above should +just work when we develop past 3.0), as the repository structure is just so different in 2.X and it was deemed too +disruptive to do these changes in the main branch while also making them a good base for the 3.0 documentation (which we +want to start on _before_ we ship as per the working group approved software development plan). Second of all, a lot of +its website workflows were designed against the Statiq-based site, which was originally developed in the 2.X branch. As +such, to minimise disruption, the corresponding NUKE script in 2.X was changed to clone into the 3.0 branch and copy its +documentation directory into a `eng/submodules/silk.net-2.x` submodule (along with a `version.txt`) and build the +website using the 3.0 NUKE script. This also allows contributors to build in the 2.X branch fairly easily, with this +horrific setup being hidden away. diff --git a/docs/for-contributors/Windowing/Implementations/SDL3/event-pump.md b/docs/for-contributors/Windowing/Implementations/SDL3/event-pump.md new file mode 100644 index 0000000000..066ae66c93 --- /dev/null +++ b/docs/for-contributors/Windowing/Implementations/SDL3/event-pump.md @@ -0,0 +1,18 @@ +# The Event Pump + +The largest influence in the `ISurfaceApplication` design is the fact that for many platforms only the entry thread is +allowed to interact with the window manager (e.g. for the purposes of events). This creates a problem because rendering +is very much not single-threaded, nor are most use cases where the user has multiple windows. As such, +`ISurfaceApplication` gives the implementation freedom to decide what the most appropriate thread is to call into the +surface to raise events. This is further emphasised by the definition of `ISurfaceChildren` where the user can only +`Spawn` a surface, and not have a blocking call they can send off to their own thread. This allows the child windows to +use the same event thread and synchronization. This is likely inconvenient for rendering scenarios though +(e.g. for OpenGL where it's one thread per context/window, but all surfaces use the same thread by default...), for +which I expect that we'll add the ability to multithread for certain events in `SurfaceTimingOptions` or +`SurfaceTickOptions`. This however has been excluded from the initial 3.0 proposal. + +Note that `SDL_AppEvent` is only guaranteed to be called on the event thread for events raised by the window +manager/operating system. As such, we always assume that those events are on the event thread when received and invoke +the window directly. For other events, we should be wary of concurrency. Note that I have absolutely no idea what this +means for things like our `Surface.Continue` method for `IsEventDriven` - right now this isn't implemented. Read more +here: https://github.com/libsdl-org/SDL/issues/11387 diff --git a/docs/for-contributors/Windowing/README.md b/docs/for-contributors/Windowing/README.md new file mode 100644 index 0000000000..5e4c157be7 --- /dev/null +++ b/docs/for-contributors/Windowing/README.md @@ -0,0 +1,32 @@ +# Silk.NET.Windowing + +Silk.NET.Windowing is our cross-platform windowing abstraction. For more information about what it is, see the [proposal](../../proposals/Proposal%20-%20Windowing%203.0.md). + +As per the proposal, Windowing is implemented in exactly one project/assembly containing the abstractions and one +"reference implementation" given available target information (e.g. TFM). Today, this includes: +- SDL3, used for every platform. + +If the user doesn't want to use our reference implementation, it is expected that they use the trimmer to make its +presence benign. + +Note that for each "reference implementation" it is expected that there shall be a matching Silk.NET.Input "reference +implementation" capable of receiving an `INativeWindow` from the Silk.NET.Windowing implementation in use. How you +interpret this requirement is up to you, e.g. we could have a Silk.NET.Input Win32-specific implementation that uses +`Win32PlatformInfo` for our SDL3 surface, likewise we could have a Silk.NET.Input SDL3 implementation that receives a +`Win32PlatformInfo` from a Silk.NET.Windowing implementation and automatically creates a wrapping window - this is up to +you (but try to keep it sane please, that last one sounded extremely cursed). Ultimately, the goal is the user being +able to pull in `Silk.NET.Windowing` and `Silk.NET.Input`, create a surface, be able to do `surface.CreateInput()` and +it all Just Work. Right now, this equates to a 1:1 match of Silk.NET.Windowing/Silk.NET.Input implementations, and is +not expected to change. + +Silk.NET.Input is completely independent from Silk.NET.Windowing this time around, unlike 1.X/2.X. This is because we +believe the Input HLU can target wider applicability beyond just receiving input for a window, with VR being the +principal use case in mind when making this decision. For more information, read the [Multi-Backend Input proposal](../../proposals/Proposal%20-%20Multi-Backend%20Input.md). + +Most of the files within the top-level Windowing directory are exactly as proposed. The exception is the `Surface` +class, which seeks to make as much common as humanly possible (this includes the Render/Update timing logic and some +other auxiliary functions). Beyond that, this is functionally an interface. The actual entry-points into the Windowing +API, `ISurfaceApplication.Run` and `IDetachedSurfaceLifecycle.TryCreate`, are defined `partial`ly with matching +implementation parts in the `Implementations` subdirectories. + +To find out more about the implementation details, see the `Implementations` directory. diff --git a/docs/for-contributors/Windowing/future-improvements.md b/docs/for-contributors/Windowing/future-improvements.md new file mode 100644 index 0000000000..c08b209a14 --- /dev/null +++ b/docs/for-contributors/Windowing/future-improvements.md @@ -0,0 +1,87 @@ +# Future Improvements + +Initially when we were having design discussions around Silk.NET 3.0's Windowing API, we wanted to introduce a +lower-level API upon which our high-level API. The idea being that this would be an extensible API for which there would +be lower implementation friction and delegating common boilerplate code to a common higher-level implementation i.e. +there's very little work for us to do in mapping our API into new backends. This would functionally be a PAL, but the +details of this would depend on the actual requirements we derive as part of designing this API. Ultimately it was +determined that this work was simply out-of-scope for the initial 3.0 release as the extensibility benefits emerging +from having a lower-level API was determined to not be a requirement for the initial release, and was not included in +the original Working Group approved software development plan. + +We're well aware this sounds very similar to what our friends at OpenTK are planning for 5.0, for much of the same +reasons. Indeed we still have community members who are also OpenTK community members that were advocating for it for +this reason. It's great to consider this sort of prior art, the sharing of insights and lifting eachother up is what +makes open-source amazing after all. We should also consider how other libraries like SDL and GLFW handle this +internally. Much like OpenTK, there is motivation for adding a lower-level API to Silk.NET to reduce the implementation +friction in adding more windowing backends as we believe esoteric platforms like mobile could be served well by them. +Unlike OpenTK, for desktop there's less appetite due to the shear number of platforms that would cause a lot of +maintenance effort - OpenTK 4.0 moved to use GLFW because of this, and most of the issues logged before this were +regarding its per-platform custom implementations, whereas Silk.NET 3.0 is keen to optimise for maintainability and +delegating maintenance effort to more expert sources (as we have done for SilkTouch by using ClangSharp's P/Invoke +Generator) like SDL is part of this so we can focus on crafting the best user experience specific to our project. Hence +why even if we would add this lower-level API, unlike OpenTK 5.0 I don't think we'd use it to implement desktop +windowing ourselves. But that can change after the initial release, and in any case having this lower-level API would be +useful. + +When reviewing OpenTK specifically, their API design is indeed sound however the mechanisms by which it was exposed to +the higher-level API left a lot to be desired. Namely, using a dictionary of enums to implementations did not feel like +the best way to do this. There are likely more intelligent things we can do with the type system to make these patterns +more JIT friendly and also more extensible - having an enum enumerating the component types requires the extensibility +model to be defined in a way that is contrary to how the type system works e.g. to define components that are extensions +beyond our standard set. It was also deemed to be desirable to use `static abstract`s for this sort of low-level API, +which does help towards JIT friendliness, but this needn't prejudice any future efforts towards these goals - this was +just an idea. + +Ultimately, to make our solution more write-once-run-everywhere, the API design philosophy behind the `Surface` +type was primarily to make it seem like a modular "component bag" e.g. `window.OpenGL` for OpenGL-specific +functionality, rather than having specific APIs always exposed as part of the standard interface but only valid for +usage in specific circumstances. The `IView` separation in 2.X achieved what we wanted somewhat, but this again left a +lot to be desired given that writing against `IView` instead of `IWindow` is contrary to what most users were doing +(this is also likely a symptom of being an afterthought introduced quite late into the 1.0 Preview cycle). By using this +design philosophy, our users have to get used to not assuming that functionality is available, meaning that users are +encouraged to write in a way that is portable instead of them having to go out of their way by writing against `IView` +as in 1.X and 2.X. + +As for the extensibility goals (i.e. additional components being defined on top of our standard API), my hope was to +eventually have a `GetComponent` API on `Surface` which things like `window.OpenGL` were defined on top of. This has +been excluded from the 3.0 initial release, but we could in theory add something like this without the PAL concepts in +this document being implemented - a component-based architecture for our high-level API and a component-based +architecture for our low-level API can be developed independently. An example of why we might want this is a virtual +reality extension that manages the creation of OpenXR bindings from a surface, but this is just one example. It is +possible that "extension everything" might make this easier on the user while also making it easier for us (e.g. +extension everything defining an `window.OpenXR` property that implicitly checks the component can be created or +whatever, `DependentHandle` can probably used for this if we wanted or we could just use `window is IMyComponent` - +again these are all just ideas, this is just to demonstrate the idea of the API shape). Way earlier in 3.0's development +we were discussing the use of `IDynamicInterfaceCastable`, but the Silk.NET team were not able to implement support for +this in the Mono runtime in an acceptable timeframe and complexity level. All of these details depend on how and if we +make it possible to attach components to existing implementations without requiring modification of the original +backend. I would quite like this to be the case, but again it depends on the nature of the high-level component-based +architecture and/or the low-level component-based architecture i.e. where is the extensibility point. + +As much as we didn't continue down the path illustrated in this document, it was certainly explored somewhat before we +decided it wasn't needed for 3.0 (engineers like to overengineer, go figure). The first exploration was essentially a +static dependency injection API i.e. a [`IHluComponentRegistry`](https://github.com/dotnet/Silk.NET/blob/56af8e1b34dc41a43de10dff45d09d25f12e8e57/sources/Core/Core/Abstractions/IHluComponentRegistry.cs) +provides components (these can be changed together for extensibility) that configures a [`Surface`](https://github.com/dotnet/Silk.NET/blob/56af8e1b34dc41a43de10dff45d09d25f12e8e57/sources/Windowing/Common/Surface.cs) +(well, a [`IHluComponentHost`](https://github.com/dotnet/Silk.NET/blob/56af8e1b34dc41a43de10dff45d09d25f12e8e57/sources/Core/Core/Abstractions/IHluComponentHost.cs) +which `Surface` implements) with the components. There was also some [source generator magic](https://github.com/dotnet/Silk.NET/blob/56af8e1b34dc41a43de10dff45d09d25f12e8e57/sources/Core/Analyzers/HluSourceGenerator.Hosts.cs) +explored to make this more JIT friendly, but that itself had some downsides e.g. one object being an implementation type +of multiple component types had two references stored in the surface. These problems aren't insurmountable but +ultimately it was determined that making an entire dependency injection API just for this was a bit silly. + +After this attempt at implementing these concepts, another attempt was made that encompassed the low-level API desired +to reduce implementation friction. Essentially, [`ISurfaceHost`](https://github.com/dotnet/Silk.NET/blob/129d4957ce1058252723add2f6890fb53f234432/sources/Windowing/Common/Hosting/ISurfaceHost.cs) +had a bunch of lower-level APIs as `static abstract`s that essentially boiled down to "get a property, set a property" +on surface objects or surface requests. Didn't quite get round to implementing the "additional component" extensibility +concepts described but this could likely be done using type chaining and essentially changing those get/set property +methods to accept a generic "property type", but again these are just ideas - this was never realised or prototyped. +This was progressing well enough, and had some decent benefits as well like centralising all the [multi-threading logic](https://github.com/dotnet/Silk.NET/blob/129d4957ce1058252723add2f6890fb53f234432/sources/Windowing/Common/Hosting/MultiThreadedSurfaceHost%601.cs) +at the lowest level of implementation. + +All in all, there's a lot of benefits to having a modular, component-based, and extensible approach to designing our +windowing API and this is definitely something we're keen to pursue. But for now, we determined that for the 3.0 initial +release we only needed to do this for the user-facing API (as per the goals stated in the SDP to make the API more +encouraging of write-once-run-everywhere) and as much as we want to fulfill that `GetComponent` extensibility vision to +allow extensions of our standard API set, that also isn't needed for the initial release. Nonetheless, it was key to +ensure we had enough jumping off points to ensure this can be implemented in the future, and also to implement the +lower-level, implementation-facing API to make our life easier if we did want to add more backends outside of SDL. diff --git a/docs/for-contributors/build-system.md b/docs/for-contributors/build-system.md new file mode 100644 index 0000000000..d6edd205fb --- /dev/null +++ b/docs/for-contributors/build-system.md @@ -0,0 +1,407 @@ +# Build System + +Silk.NET strives to use vanilla `dotnet build` as much as possible, and that is the case for building Silk.NET itself. +There are a few noteworthy aspects of our usable of MSBuild though, and also some actions outside of building the +library itself that are provided by a auxiliary build system implemented using the NUKE build automation framework. + +## MSBuild Usage + +### Target Frameworks + +It is our goal to always target the latest LTS .NET release, and optionally multi-targeting to the next non-LTS version +thereafter. We also make use of the mobile frameworks e.g. `net8.0-android`, `net8.0-ios`, but these shall always be +guarded using properties such as `SilkAndroidDisabled`, `SilkiOSDisabled` etc which are set in `Directory.Build.props`, +which in turn check whether a file named `excluded-platforms.txt` exists and contains the target platform identifier. +This can be quickly modified by using the NUKE target `nuke disable-platforms`, which just writes to this file the +values provided for `--platforms`. + +### Package READMEs + +NuGet has recently added functionality to include a "README" rendered from Markdown on the front page of a package in +the NuGet Gallery. To ease maintenance, this is derived from the main README.md file for the repository but with some +deviations to account for NuGet's extremely limited Markdown renderer. To differentiate these contents, the following +markers are added to the README file. + +| Marker Text | Replacement for NuGet | +|---------------------------------------------|-----------------------| +| `` | `` | `-->` | +| `` | (removed) | + +Obviously they markers are as-is when served on NuGet, and represent the NuGet content being commented out. + +In addition, it is encouraged that all packages set the `SilkDescription` and `SilkExtendedDescription` properties to +add more information about the package. `SilkDescription` is prepended to the `PackageDescription`. Both +`SilkDescription` and `SilkExtendedDescription` (in that order) are added to the README file beneath an +`# About This Package` header, replacing the text `` in +README.md. + +The additional text replacements made for NuGet Markdown compatibility, along with the rest of this logic, can be seen +in `Directory.Build.targets`. + +### Versioning + +We determine the Silk.NET version number automatically from the [CHANGELOG.md](../CHANGELOG.md) file, specifically +the first second-level heading in that file. In order to do that, `Directory.Build.targets` contains a +`SilkGetVersionInfoTask` inline task that outputs the `Version` and `VersionSuffix` when used in `SilkShippingControl`. +Additionally, `SilkShippingControl` is declared a dependency for the version and package version in +`Directory.Build.props`. See [CONTRIBUTING.md](../CONTRIBUTING.md) for more info on the CHANGELOG file. + +### Public API + +High Level Utilities (HLUs) must be subject to Public API tracking. This is to prevent undue breaking changes. To enable +it for a project, simply add the following to a project: + +```xml + + + + true + + + + + + +``` + +The `ItemGroup` is an unfortunate deficiency with `Directory.Build.targets`. While putting it in this file would be +sufficient for build, it does not make for a pleasant development experience as IDEs do not pick it up from those files. +The empty public API files are automatically generated on first resolve. + +### Central Package Management + +We manage all the versions for our dependencies in Directory.Packages.props. Learn more about Central Package Management +[here](https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management). + +### Metapackages + +In 2.X, we introduced the concept of "metapackages" which were facade NuGet packages that contained no libraries or +anything that tangibly influences the build process, and simply declared dependencies to other packages. This came in +handy when pulling in e.g. an abstractions package and an implementation package all from a top-level package (e.g. +`Silk.NET.Windowing` pulling in `Silk.NET.Windowing.Common` and `Silk.NET.Windowing.Glfw`). Now that the top-level +packages include both abstractions and a reference implementation (using trimming instead where the implementation is +not used), only the top-level `Silk.NET` metapackage remains. The goal of this package has been to include _every single +non-extension Silk.NET package in existence_, but we did forget to update this a little bit as we added more packages, +so it ended up just being OpenGL and Vulkan mostly. We always argued that you probably don't want this package, but it +is undeniable that it provides non-zero benefit in scenarios where a quick bring-up is desired (e.g. scratchpads, +scripting/REPL, etc). As such, we decided to make this package more robust by having it automatically reference core +packages as we add them. Today, this is every `sources/A/A/Silk.NET.A.csproj` file where `A` represents a name of a +top-level directory in `sources`. It is highly likely that we'll want to amend this in the future. Note that we exclude +SilkTouch from this as this is unlikely to be useful to an end user. This is done using cursed MSBuild patterns that I +recommend just squinting at for ages until they click. + +### Native Packaging + +Native packaging is one of the most frustratingly difficult aspect of packaging a library such as Silk.NET in an +effective, elegant way. Silk.NET 2.X had a fairly easy-to-maintain system, but there were some small issues we decided +to factor into the rewrite. + +The primary goals in the native packaging system used for Silk.NET 3.0 are: +- As in 2.X, ensuring our native binaries come from a trusted source (CI), and that executing these builds is as simple + as possible. +- Making it as easy as possible to add a new native binary build. +- Ensuring that the native binary builds are maximally low-maintenance, in-keeping with the native library author's + intent, and resistant to breakage when we update the native library version used. + +There are two parts to this: the GitHub Actions workflow and the MSBuild Usage. Obviously as this is the MSBuild Usage +section, we'll discuss the latter here. + +NuGet's native packaging scheme in the simple case is fairly obvious - the native binaries are placed into the +`runtimes/rid/native` directory of the package where `rid` is replaced with the appropriate runtime identifier. For fat +binaries, we omit the architecture suffix. We automatically do this in the `SilkShippingControl` target (which is really +just a kitchen sink of MSBuild fluff) in `Directory.Build.targets`, where all of the binaries are added as `None` items +that are packed into the `runtimes` directory. The binaries are picked up from the project directory in the same +`runtimes` directory structure as that which is added to the package. + +To create a new native package, first create a csproj with the following contents: +```xml + + + net8.0 + Native binaries for LIBRARY_NAME_HERE. + true + + +``` + +After that, create a `version.txt` that contains the `PackageVersion` for the native binary. Ideally you should create +an `update.sh` script that will automatically update the submodule to the latest upstream release, and update the +`version.txt` to contain that version. If your native library doesn't really have a versioning scheme (we've experienced +this with some of the Google libraries e.g. ANGLE, SwiftShader, etc), then it's recommended that the version be set to +a date-style version `YYYY.MM.DD` where the date used is the date of the commit the submodule is currently checked out +to. + +Android is a bit of a unique case, as we not only have native binaries, we also have Java JARs in some cases. These need +to be exposed to the .NET for Android toolchain to ensure these JARs are accessible. This toolchain produces an `aar` +file which is added to the NuGet package, which incidentally includes both the JAR and the native binaries. Therefore, +we exclude the android binaries from the `runtimes` directory in this case. If you have JARs, add the following to the +native package csproj: +```diff + + +- net8.0 ++ net8.0;net8.0-android ++ true ++ false + + +``` + +The JARs, Proguard configurations, and XML transforms (for the .NET for Android generator) will be picked up from an +`android` subdirectory of the project folder. Native binaries will be picked up from `runtimes/android*/native` as +usual, but obviously merged into the `aar` as above. + +iOS on the other hand is a lot simpler, however we still have some iOS-specific handling. Specifically, we inject a +`targets` file that is pulled in by downstream packages to add the `NativeReference` with the appropriate flags. We have +seen anecdotal evidence that modern .NET for iOS toolchains pull in `runtimes` `.a` files as `NativeReference`s +automatically, however in some cases there are specific linker flags required which are not picked up automatically. The +`.targets` file adds this. If these linker flags are required, add something similar to the following: +```xml + + + -framework AudioToolbox -framework AVFoundation -framework CoreAudio -framework CoreBluetooth -framework CoreFoundation -framework CoreGraphics -framework CoreHaptics -framework CoreMotion -framework CoreVideo -framework GameController -framework IOKit -framework Metal -framework OpenGLES -framework QuartzCore -framework UIKit -framework Foundation + + +``` + +The `.targets` injected can be seen at `eng/native/nuget/NativeNuGetPackage.targets` with the `TO_BE_REPLACED` +placeholders replaced in `Directory.Build.targets`. + +Obviously, the native packages only work when consumed as a NuGet. However, we have a "best effort" attempt to copy the +appropriate native binary to the output directory for projects that `ProjectReference` a native binary, whether directly +or transitively. To make this work however, projects must include this: +```xml + + + $(NETCoreSdkRuntimeIdentifier) + + +``` + +This logic is defined in the `SilkProjectReferenceNatives` target in `Directory.Build.targets`. + +We currently have not explored doing this for static linking (i.e. iOS) builds. + +## Native Build Workflow + +As mentioned previously, we build all of our native binaries in CI to ensure they come from a trusted source and also to +ensure silly mistakes like forgetting to update the binaries when we update the bindings don't happen. We check every +single PR for changes to the native build and, if we detect any, tell the PR author that they need to declare those +changes in their PR description. This is done by simply adding `/build-native sdl` for example in the description. This +is to ensure an unrelated change or merge doesn't result in a rebuild of an unnecessary amount of native binaries, as +was an issue with 2.X's build system. Also unlike 2.X, the binaries are committed straight to the PR rather than having +a PR into that PR (as this was very annoying), in a single commit aggregating all the outputs from all of the builds. + +The workflow is split into three jobs: +1. **PR Check** - runs on every PR, evaluates what binaries the author has indicated should be rebuilt. +2. **Native Build** - a matrix job that uses a strategy determined dynamically as part of the PR Check to run all of the + required native builds on the appropriate runners. +3. **Commit Native Binaries** - all the outputs from the matrix jobs are downloaded, aggregated, and then committed to + the PR. + +To add a new native build to this workflow, modify the `env` at the top of the `native.yml` GitHub Actions workflow: +```yaml +env: + # A space-separated list of paths to native libraries to build. + NATIVE_LIBRARY_PATHS: "sources/SDL/Native" + # A space-separated list of submodule paths for each native library path. Use _ if a submodule is not used - this must + # match the number of spaces in NATIVE_LIBRARY_PATHS. + NATIVE_LIBRARY_SUBMODULE_PATHS: "eng/submodules/sdl" + # A space-separated list of shorthands to the native library paths that will build the native library for each native + # library path. This must match the number of spaces in NATIVE_LIBRARY_PATHS. If a shorthand builds multiple native + # binary paths, these will be deduplicated. + NATIVE_LIBRARY_SHORTHANDS: "SDL" +``` + +This is obviously assuming the native library path is valid. After this, any PR that contains `/build-native whatever` +where `whatever` is replaced with the "shorthand" added to `NATIVE_LIBRARY_SHORTHANDS` will run a native binary build on +each PR change. + +After that, create the native package csproj as described in the MSBuild Usage section and add `build-rid.ext` scripts +where `rid` is replaced with a runtime identifier and `ext` is replaced with `sh` or `cmd` if the build is running on +Windows. All `osx`/`ios`/`tvos` prefixed RID builds run on macOS, all `win` prefixed RID builds run on Windows, and all +other builds run on Linux. All of this again in the project directory/the directory added to `NATIVE_LIBRARY_PATHS`. + +Note that for Linux we strive to have compatibility with glibc 2.17 and above, which in our experience from 2.X is a +happy medium in terms of wide compatibility and feature set in most cases. It's not easy to build for a specific glibc +target on Linux, which is why we use `zig cc` for these targets. For CMake targets, this is easy as we include the +relevant toolchain files all ready to use at `eng/native/cmake`. For the build scripts themselves, we include a +`eng/native/buildsystem/download-zig.py` script which will download the zig toolchain to `eng/native/buildsystem/zig`, +which should then be added to the `PATH`. This often looks similar to the following: +```bash +if [[ ! -z ${GITHUB_ACTIONS+x} ]]; then + ../../../eng/native/buildsystem/download-zig.py + export PATH="$PATH:$(readlink -f "../../../eng/native/buildsystem/zig")" +fi +``` + +Note that there are no prerequisite actions run before the native build occurs in the Build job, so these need to be +integrated into the build scripts, using the `GITHUB_ACTIONS` environment variable as appropriate. Other cases where +this is used beyond downloading Zig is installing `apt` dependencies, installing Android toolchains using `sdkmanager`, +etc. + +### PR Check + +First, the script located at `eng/native/buildsystem/workflow-stage1.sh` is run. This script outputs something similar +to the following to `GITHUB_OUTPUT`: +``` +workflow_filters< e.label != "Welcome")} /> + +Have fun! We always look forward to seeing what people can create with Silk.NET and would love to hear how you get on in +[our Discord server](https://discord.gg/DTHHXRt). diff --git a/documentation/readme/dotnetfoundation_v4_horizontal_64.svg b/docs/readme/dotnetfoundation_v4_horizontal_64.svg similarity index 100% rename from documentation/readme/dotnetfoundation_v4_horizontal_64.svg rename to docs/readme/dotnetfoundation_v4_horizontal_64.svg diff --git a/documentation/readme/jetbrains.svg b/docs/readme/jetbrains.svg similarity index 100% rename from documentation/readme/jetbrains.svg rename to docs/readme/jetbrains.svg diff --git a/documentation/readme/silkdotnet_v3.png b/docs/readme/silkdotnet_v3.png similarity index 99% rename from documentation/readme/silkdotnet_v3.png rename to docs/readme/silkdotnet_v3.png index d9b142e1d4..fc29fbeb8d 100644 Binary files a/documentation/readme/silkdotnet_v3.png and b/docs/readme/silkdotnet_v3.png differ diff --git a/documentation/readme/silkdotnet_v3_horizontal.svg b/docs/readme/silkdotnet_v3_horizontal.svg similarity index 100% rename from documentation/readme/silkdotnet_v3_horizontal.svg rename to docs/readme/silkdotnet_v3_horizontal.svg diff --git a/documentation/readme/silkdotnet_v3_horizontal_96.svg b/docs/readme/silkdotnet_v3_horizontal_96.svg similarity index 100% rename from documentation/readme/silkdotnet_v3_horizontal_96.svg rename to docs/readme/silkdotnet_v3_horizontal_96.svg diff --git a/docs/sidebars.ts b/docs/sidebars.ts new file mode 100644 index 0000000000..87c7a560cd --- /dev/null +++ b/docs/sidebars.ts @@ -0,0 +1,86 @@ +import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; + +// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) + +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ +const sidebars: SidebarsConfig = { + // By default, Docusaurus generates a sidebar from the docs folder structure + docsSidebar: [ + "index", + { + type: 'category', + label: 'Vulkan Documentation', + link: { + type: "generated-index", + slug: "/vulkan" + }, + items: [ + { + type: 'autogenerated', + dirName: 'vulkan' + }, + ], + }, + { + type: 'category', + label: 'Miscellaneous', + link: { + type: 'generated-index', + title: 'Miscellaneous', + description: 'This section of the website contains useful miscellaneous tidbits which we think will come in handy to get the most out of your Silk.NET application! It also contains other more general information pertaining to the project.', + slug: "/silk.net" + }, + items: [ + {type: "doc", id: "CHANGELOG"}, + { + type: 'autogenerated', + dirName: 'silk.net' + }, + {type: "doc", id: "CODE_OF_CONDUCT"}, + ], + }, + { + type: 'category', + label: "Contributors", + link: { + type: "doc", + id: "for-contributors/README" + }, + items: [ + { + type: "autogenerated", + dirName: "for-contributors" + }, + { + type: "doc", + id: "CONTRIBUTING", + label: "Contribution Process" + } + ], + }, + ], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + 'intro', + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], + */ +}; + +export default sidebars; diff --git a/docs/silk.net/deprecation-notices/README.md b/docs/silk.net/deprecation-notices/README.md new file mode 100644 index 0000000000..b43b326361 --- /dev/null +++ b/docs/silk.net/deprecation-notices/README.md @@ -0,0 +1,23 @@ +# Deprecation Notices + +As time goes on we may deprecate certain features or APIs within Silk.NET if it becomes clear they are suboptimal and/or +in need of replacement. We strive to post notices of such deprecations here, while also indicating a migration plan. If +a deprecation is made and a notice is not posted here, it is possible that the deprecation was for a niche feature/API +we didn't expect anyone to use anyway. + +Below are a list of deprecation notices for each major version. Note that the lack of a deprecation notice does not +guarantee that there will be no incompatibilities between major versions - it should be taken for granted that you will +encounter breaking changes even if the API that has been broken was not deprecated in the prior major version. + +## Silk.NET 1.X + +- [SilkManager](SilkManager.md) +- [IVulkanView and related APIs](VulkanViews.md) + +## Silk.NET 2.X + +No deprecation notices have been posted for this major version. + +## Silk.NET 3.X + +No deprecation notices have been posted for this major version. diff --git a/documentation/deprecation-notices/SilkManager.md b/docs/silk.net/deprecation-notices/SilkManager.md similarity index 100% rename from documentation/deprecation-notices/SilkManager.md rename to docs/silk.net/deprecation-notices/SilkManager.md diff --git a/documentation/deprecation-notices/VulkanViews.md b/docs/silk.net/deprecation-notices/VulkanViews.md similarity index 100% rename from documentation/deprecation-notices/VulkanViews.md rename to docs/silk.net/deprecation-notices/VulkanViews.md diff --git a/docs/silk.net/experimental-feed.md b/docs/silk.net/experimental-feed.md new file mode 100644 index 0000000000..8d1b9a73c3 --- /dev/null +++ b/docs/silk.net/experimental-feed.md @@ -0,0 +1,64 @@ +--- +{ + "TableOfContents": { + "Name": "Experimental Feed", + "Url": "experimental-feed.html" + } +} +--- + +# Experimental Feed + +> [!WARNING] +> The experimental feed is not recommended for use for anything beyond playing around with the new features. We don't officially support these builds as they may be unstable, and should not be used in production. + +> [!NOTE] +> Changes in the experimental feed happen rapidly. We recommend joining the [Silk.NET Discord server](https://discord.gg/DTHHXRt) so that you can keep up with development. + +## Configure your project + +Right now, your project should look something like this: + +```xml + + + + Exe + net7.0 + + + + + + + +``` + +In order to use the experimental feed, you must change this project file slightly. Add the following line to your project: + +```xml + + Exe + net7.0 + + $(RestoreAdditionalProjectSources);https://dotnet.github.io/Silk.NET/nuget/experimental/index.json + +``` + +## Install an experimental version + +Now .NET has access to the experimental feed, it's time to install an experimental package. Check for the latest version on our [GitLab Package Registry](https://gitlab.com/silkdotnet/Silk.NET/-/packages). + +At the time of writing, the latest version is `2.0.0-build97.0`. Now to install this package, you can use your IDE's built-in NuGet client, `dotnet package add`, or just modify the project file again like so: + +```xml + + + +``` + + +> [!WARNING] +> Experimental Feed builds may be deleted without warning at the Silk.NET team's discretion. + +Now you have access to bleeding-edge experimental builds of Silk.NET. Have fun! diff --git a/docs/silk.net/static-vs-instance-bindings.md b/docs/silk.net/static-vs-instance-bindings.md new file mode 100644 index 0000000000..38c43b0e48 --- /dev/null +++ b/docs/silk.net/static-vs-instance-bindings.md @@ -0,0 +1,131 @@ +# Static vs Input Bindings + +## Overview + +Silk.NET has multiple ways to access the underlying APIs, either through a static method (e.g. `GL.GenBuffers`) or +through an "API object" (e.g. created with `GL.Create` and then accessed as `gl.GenBuffers`). Not all APIs are the +same, and some are better accessed through one method or the other. Note that Silk.NET does make both available however, +so if you're prefer consistency feel free to pick one method and stick to it, though you may result in some minor +inefficiencies. + +All native APIs are accessed using a "function pointer" - a location in memory at which the native code resides. +This is typically fetched using `DllImport`, but some APIs require custom mechanisms. An example in OpenGL, where you +must use a "context API" (e.g. WGL, GLX, EGL, etc) to create a context and, after setting up that context state, use a +function provided by that context API to get the function pointers for OpenGL (e.g. `wglGetProcAddress`). We refer to +these as "stateful APIs" in this document. Note that OpenGL is not the only stateful API, this will be elaborated later. + +Stateless APIs are those where the function pointers aren't contingent on any other state, and they're effectively +accessed as if they were static functions. For these, the function pointers are typically retrieved through `DllImport`, +but this needn't preclude other APIs from having bespoke mechanisms to statelessly retrieve function pointers (though, +there are no examples of this today). + +When using a stateful API, you should use API objects if possible i.e. `API.Create`, and dispose of that object when you +are done using that API. When using a stateless API, you should use the static functions exposed directly on the API +class. + +> [!NOTE] +> Future releases of Silk.NET are intended to contain analysers to indicate the correct access method. + +Below is a description of the stateful APIs. All other APIs not listed here are, or can be treated as, stateless. + +## OpenGL + +OpenGL is a stateful API because it requires a context to be created and "made current" on that thread before function +pointers can be retrieved. Typically, this context is created using Silk.NET.Windowing, and the functions would be +retrieved using `surface.OpenGL.GetProcAddress` in that example. + +To create an API object, our OpenGL bindings provide a utility function `CreateOpenGL`: +```csharp +IGL gl = null!; +surface.Created += _ => +{ + gl = surface.CreateOpenGL(); + // Use gl functions here... + gl.Flush(); +} +surface.Render += _ => +{ + // Use gl functions here... + gl.Clear(ClearBufferMask.ColorBufferBit); +} +``` + +If you'd prefer to use static methods despite OpenGL being stateful, the static functions on `GL` will forward to +`GL.ThisThread`, which essentially forwards to a thread-specific `IGL` instance. You can change the `IGL` instance used +by a thread using `GL.ThisThread.MakeCurrent`, which will also implicitly make the `IGLContext` you pass it current +(if applicable). Note that Silk.NET.Windowing will implicitly call this, so you can use the static OpenGL functions in +the obvious way, albeit with the implied indirection through `GL.ThisThread`: +```csharp +surface.Created += _ => +{ + GL.Flush(); +} +surface.Render += _ => +{ + GL.Clear(ClearBufferMask.ColorBufferBit); +} +``` + +> [!CAUTION] +> TODO: Silk.NET.Windowing does not currently do this! `surface.MakeCurrent()` must be used in `surface.Created` to make +> this happen. + +## Vulkan + +Vulkan is a stateful API because its function pointers are dependent on the `InstanceHandle` and `DeviceHandle` being +used. Our Vulkan bindings intercept calls to `Vk.CreateInstance` and `Vk.CreateDevice`, and set `CurrentInstance` and +`CurrentDevice` respectively on the Vulkan API object for later use with `Vk.GetDeviceProcAddr` and +`Vk.GetInstanceProcAddr`. + +The Vulkan API object will first try `vkGetDeviceProcAddr` to load a function pointer (where the value for `device` is +as in `CurrentDevice`), followed by `vkGetInstanceProcAddr` (where the value for `instance` is as in `CurrentInstance`). +For `vkGetInstanceProcAddr` itself, `DllImport` is used. + +`CurrentInstance` is set upon a successful call to `vkCreateInstance`, and `CurrentDevice` is set upon a successful call +to `vkCreateDevice`. Note that it is illegal to change these values on an API object if they're already set, if you have +scenarios requiring multiple instance-device combinations you must create multiple API objects. + +> [!TIP] +> In cases where you have one instance from which multiple devices are created, simply clone the `IVk` object using +> `IVk.Clone()` prior to **any device** being created. This will reuse the function pointers already loaded for that +> instance. + +If you'd prefer to use static methods despite Vulkan being stateful, the static functions on `Vk` will forward to +`Vk.ThisThread`, which essentially forwards to a thread-specific `IVk` instance. You can change the `IVk` instance used +by a thread using `Vk.ThisThread.MakeCurrent`. The static functions, much like using a single `IVk` instance, will throw +if multiple instance-device combinations are used on the same thread without changing the `IVk` object being used. + +## OpenXR + +OpenXR has the same caveats as Vulkan but with `CurrentInstance` only. + +## OpenAL + +OpenAL has the same caveats as OpenGL, with the exception that `alGetProcAddress` is made available to retrieve the +function pointers. This still has the requirement of a thread-specific context, however, which can be made current using +`AL.ThisThread.MakeCurrent`. + +Unlike OpenGL, OpenAL has an official context API: OpenAL Context (ALC). `alcMakeContextCurrent` will implicitly call +`AL.ThisThread.MakeCurrent` meaning that the static OpenAL functions are made available in the obvious way: + +```csharp +// NOTE: We are making use of ALContext's static functions here as well. +// The same applies as if `ALContext.Create` were used. +DeviceHandle device = ALContext.OpenDevice(""); +if (device == nullptr) throw new("failed to create device"); + +ContextHandle context = ALContext.CreateContext(device, nullptr); +if (context == nullptr) throw new("failed to create context"); + +// Now make the context current. This implicitly calls AL.ThisThread.MakeCurrent +ALContext.MakeContextCurrent(context); + +// Static functions now just work. +var source = AL.GenSource(); +``` + +## OpenAL Context (ALContext/ALC) + +ALC has the same caveats as Vulkan, given that the ALC function pointers are tied to a specific device. As a result, +`alcOpenDevice` is intercepted to set the value of `CurrentDevice` to then be fed into `alcGetProcAddress` (or +`alcGetProcAddress2` if available). diff --git a/docs/vulkan/structure-chaining/_category_.yml b/docs/vulkan/structure-chaining/_category_.yml new file mode 100644 index 0000000000..4a8b5cf4be --- /dev/null +++ b/docs/vulkan/structure-chaining/_category_.yml @@ -0,0 +1,3 @@ +link: + type: doc + id: overview diff --git a/documentation/structure-chaining/chaining.puml b/docs/vulkan/structure-chaining/chaining.puml similarity index 100% rename from documentation/structure-chaining/chaining.puml rename to docs/vulkan/structure-chaining/chaining.puml diff --git a/documentation/structure-chaining/chaining.svg b/docs/vulkan/structure-chaining/chaining.svg similarity index 100% rename from documentation/structure-chaining/chaining.svg rename to docs/vulkan/structure-chaining/chaining.svg diff --git a/documentation/structure-chaining/managed-chaining.md b/docs/vulkan/structure-chaining/managed-chaining.md similarity index 100% rename from documentation/structure-chaining/managed-chaining.md rename to docs/vulkan/structure-chaining/managed-chaining.md diff --git a/documentation/structure-chaining/overview.md b/docs/vulkan/structure-chaining/overview.md similarity index 97% rename from documentation/structure-chaining/overview.md rename to docs/vulkan/structure-chaining/overview.md index bdb8826e74..cbf8b832fb 100644 --- a/documentation/structure-chaining/overview.md +++ b/docs/vulkan/structure-chaining/overview.md @@ -1,4 +1,8 @@ -# Overview +--- +title: Structure Chaining +--- + +# Overview ## Table of Contents @@ -105,7 +109,7 @@ If you are creating a chain once, and then throwing it away, it can be done so s create never leave the stack. Silk.NET provides fluent extension methods that allow you to manipulate `IChainable` structures directly, performing the pointer logic for you, and providing compile-time type validation. Although, avoiding the heap entirely, there are some scenarios where this may still be slower than -using [Managed Chains](managed-chains.md), and so this approach should only be considered when looking to optimise hot +using [Managed Chains](managed-chaining.md), and so this approach should only be considered when looking to optimise hot paths. For example: ```csharp @@ -144,4 +148,4 @@ vk.GetPhysicalDeviceFeatures2(device, &features2); var depthBounds = features2.Features.DepthBounds; var runtimeDescriptorArray = indexingFeatures.RuntimeDescriptorArray; var accelerationStructure = accelerationStructureFeaturesKhr.AccelerationStructure; -``` \ No newline at end of file +``` diff --git a/documentation/structure-chaining/raw_chaining.md b/docs/vulkan/structure-chaining/raw_chaining.md similarity index 98% rename from documentation/structure-chaining/raw_chaining.md rename to docs/vulkan/structure-chaining/raw_chaining.md index 2c88ee5faa..4753dcfbac 100644 --- a/documentation/structure-chaining/raw_chaining.md +++ b/docs/vulkan/structure-chaining/raw_chaining.md @@ -15,7 +15,7 @@ API. The easiest way to prevent pointers moving is to ensure that structures are created and used locally in the same function. This ensures that they remain in the current stack frame, preventing the runtime from moving any data. -Sometimes, it is desirable to store structures for later use, in which case [Managed Chaining](managed-chains.md) should +Sometimes, it is desirable to store structures for later use, in which case [Managed Chaining](managed-chaining.md) should be considered. Each structure defines a constructor which accepts the fields as parameters and specifies defaults, including the @@ -83,4 +83,4 @@ than either of the other two methodologies, depending on the exact use case. In if the chain ends up be passed around and copy operations are triggerred inadvertently on larger structures. For this reason, it is usually better to start with [Managed Chaining](managed-chaining.md), and optimise hot paths were necessary, using benchmarking to validate results. Starting with one of the other two approaches will usually make it -easier to validate chain types, and improve compile time checking during development. \ No newline at end of file +easier to validate chain types, and improve compile time checking during development. diff --git a/documentation/structure-chaining/structure-chaining.md b/docs/vulkan/structure-chaining/structure-chaining.md similarity index 100% rename from documentation/structure-chaining/structure-chaining.md rename to docs/vulkan/structure-chaining/structure-chaining.md diff --git a/documentation/structure-chaining/vulkan.md b/docs/vulkan/structure-chaining/vulkan.md similarity index 100% rename from documentation/structure-chaining/vulkan.md rename to docs/vulkan/structure-chaining/vulkan.md diff --git a/documentation/proposals/(Rejected) Proposal - Better Strings.md b/documentation/proposals/(Rejected) Proposal - Better Strings.md deleted file mode 100644 index f9bd655589..0000000000 --- a/documentation/proposals/(Rejected) Proposal - Better Strings.md +++ /dev/null @@ -1,102 +0,0 @@ -# Summary -A rich, more well-defined native string API. - -- Written against Silk.NET **1.0.2**. -- Slated for Silk.NET **2.0.0**. - -# Contributors -- Dylan P, Ultz Limited - -# Current Status -- [x] Proposed -- [ ] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Design Decisions -Currently, the representation of native strings in Silk.NET (and C# as a whole) is an utter mess. -At the moment we're using `char*` everywhere which isn't technically correct, as a number of users -have pointed out. This discussion aims to create a richer set of native string APIs to combine -technical correctness, ease of marshalling, and ease of use. - -This is in the form of Char8, Char16, and Char32 which represent the various lengths of characters -in various encodings. These CharXXs can be combined into a StringXX. All types can be implicitly -converted to and from their existing C#/.NET types, so that the user doesn't have to deal with much - -# Proposed API -Proposed Silk.NET.Core additions: -```cs -public struct Char8 -{ - private byte _value; // 8-bit character - public Char8(byte v) => _value = v; - public static explicit operator Char8(char c); - public static implicit operator Char8(byte c); - // and vice versa - public char ToChar(); - public byte ToByte(); - public uint ToUInt32(); -} - -public struct Char16 -{ - private char _value; // 16-bit character - public Char16(char v) => _value = v; - // insert appropriate operators and methods here as seen in Char8 -} - -public struct Char32 -{ - private uint _value; // 32-bit character - public Char32(char hi, char lo) => _value = unchecked((uint) char.ConvertToUtf32(hi, lo)); - // insert appropriate operators and methods here as seen in Char8 -} - -public ref struct String8 -{ - private Span _value; - public String8(Span v) => _value = v; - public static implicit operator String8(Span v); - public static implicit operator String8(string x); // not recommended for use, as we'll have to assume the encoding the user wants is UTF8. - public static implicit operator String8(Char8* v); // treat the Char8* as null-terminated - public static implicit operator String8(byte* v); // cast to Char8*, pass to the above. - public static explicit operator String8(char* v); // cast to byte*, pass to the above. for maintaining back-compat with Silk.NET 1.0. - // and vice versa - public override string ToString(); - public ref readonly Char8 GetPinnableReference(); -} - -public ref struct String16 -{ - private Span _value; - public String16(Span v) => _value = v; - // insert appropriate methods and operators here as seen in String8 - public override string ToString(); - public ref readonly Char16 GetPinnableReference(); -} - -public ref struct String32 -{ - private Span _value; - public String16(Span v) => _value = v; - // insert appropriate methods and operators here as seen in String8 - public override string ToString(); - public ref readonly Char32 GetPinnableReference(); -} -``` - -Proposed binder output: -```cs -delegate cdecl* _glGetString; -public String8 GetString(GLEnum name) => (String8) _glGetString(name); -// No need for a string overload, as you can implicitly cast String8 to string. -// Users migrating to 2.0 will simply have to cast the String8 to string (better than them having to marshal it!) -``` - -Proposed GLFW changes: -```cs -delegate cdecl* _glfwSetWindowTitle; -public void SetWindowTitle(WindowHandle* h, String8 t); -``` - -You kinda get the gist from here... diff --git a/documentation/proposals/(Rejected) Proposal - Load overrides.md b/documentation/proposals/(Rejected) Proposal - Load overrides.md deleted file mode 100644 index d298a058e0..0000000000 --- a/documentation/proposals/(Rejected) Proposal - Load overrides.md +++ /dev/null @@ -1,158 +0,0 @@ -# Summary -Load overrides mean a way to override loading native addresses. -This is useful in the following scenarios: -- P/Invoke / statically linked scenarios, mobile. -- Advanced Performance scenarios, such as pre-loading to improve AOT / linking / R2R - -While this API can be used by Hand, and is available for public use it is not designed to be particularly user friendly. -It is designed with SilkTouch as the primary user. (See `PInvokeTableAttribute`) - -This proposal also somewhat defines the currently loose timeline of how addresses are loaded. - - -# Contributors -- Kai Jellinghaus, Maintainer (at time of writing), open source community. - -# Current Status -- [x] Proposed -- [ ] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Design Decisions -There are two separate interfaces to allow maximum flexibility, but also to define exactly at which point slot information is lost. - -# Proposed API -Note that this API may be changed in the future to use function pointers directly instead of IntPtrs. -This deliberately doesn't use nint. -```cs -/// -/// Defines a Load override, capable of loading some entrypoints by name. -/// -/// -/// Load overrides may not cache loads. -/// Load overrides have to be thread safe. -/// -public interface INameLoadOverride -{ - /// - /// The used for loading - /// - INativeContext Context { set; } - - /// - /// Attempt to load an entrypoint by name. - /// - /// The entrypoint name to load - /// The address that was loaded - /// - /// Whether the load was successful. - /// - bool TryLoad(string entrypoint, out IntPtr address); -} - -/// -/// Defines a Load override, capable of loading some entrypoints by slot. -/// -/// -/// Load overrides may not cache loads. -/// Load overrides have to be thread safe. -/// -public interface ISlotLoadOverride -{ - /// - /// The used for loading - /// - INativeContext Context { set; } - - /// - /// Attempt to load an entrypoint by name. - /// - /// The slot to load - /// The address that was loaded - /// - /// Whether the load was successful. - /// This will flush the cache / VTable. - /// - bool TryLoad(int slot, out IntPtr address); -} -``` - -Not a critical change, but would make sense to make the core easier to understand, because Context, to me, implies some kind of state, which this does not provide. -This simply provides a mecanism to load an address, not access to some kind of native state. -```diff -- public interface INativeContext -+ public interface IAddressLoader - : IDisposable -{ -- IntPtr GetProcAddress(string proc); -+ IntPtr GetProcAddress(string entrypoint); -} -``` - -```cs -public abstract class NativeApiContainer -{ - /// - /// Registers an to participate in loading. - /// - /// - /// This method is thread safe. - /// This will flush the cache / VTable. - /// - void RegisterOverride(INameLoadOverride override); - /// - /// Registers an to participate in loading. - /// - /// - /// This method is thread safe. - /// This will flush the cache / VTable. - /// - void RegisterOverride(ISlotLoadOverride override); - /// - /// Registers multiple s to participate in loading. - /// - /// - /// This method is thread safe. - /// This will flush the cache / VTable. - /// - void RegisterOverrides(IEnumerable overrides); - /// - /// Registers multiple s to participate in loading. - /// - /// - /// This method is thread safe. - /// This will flush the cache / VTable. - /// - void RegisterOverrides(IEnumerable overrides); - - // override address loader is thread safe. - private sealed class OverrideAddressLoader - { - // this is loader falls back to the normal _loader, but first calls into overrides. - // an instance is kept around, and recreated whenever a new override is registered. - // for performance reasons it may make sense to defer the creation of this to a Lazy - - public IntPtr Load(int slot, string entrypoint); - } -} -``` - -Load overrides MAY NOT cache addresses. - -These APIs work together with the IVTable, which is the caching solution. - -# Address loading timeline -- NativeApiContainer.Load(int, string) - - VTable - - if cached, return cached result - - otherwise - - OverrideAddressLoader.Load(int, string) - - calls slot overrides in order, returning the first result. - - if none were able to resolve the slot, calls entrypoint overrides in order, returning the first result. - - if none were able to resolve the entrypoint, calls down to the given fallback loader. - - result cached. - -# Open Questions -- it's unclear how this would work with VTable preoloading, we don't use that in Silk.NET right now, so not a problem (for now). -- it's unclear how a user that manually swaps VTables (think Vulkan) would handle it if another user registered an override. there is no way to detect this. It's likely such a user would just not handle this. \ No newline at end of file diff --git a/documentation/proposals/(Rejected) Proposal - Platform Hints.md b/documentation/proposals/(Rejected) Proposal - Platform Hints.md deleted file mode 100644 index ee97039a56..0000000000 --- a/documentation/proposals/(Rejected) Proposal - Platform Hints.md +++ /dev/null @@ -1,86 +0,0 @@ -# Summary -Proposal API for specifying platform-specific window creation hints. - -- Written against Silk.NET **1.0.1**. -- Slated for Silk.NET **1.0.3**. - -# Contributors -- Dylan P, Ultz Limited - -# Current Status -- [x] Proposed -- [ ] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Design Decisions -If Silk.NET's windowing API doesn't expose functionality that the underlying window backend does, we should provide way to allow the user to access this functionality in a semi-dirty if Silk.NET doesn't provide a proper, clean way. - -Officially specified behaviour is as follows -- If the Hint's HintName is not supported on a given windowing platform, the Hint should be silently discarded. -- If the Hint's Value is not of the correct type or format, the Hint should be silently discarded. -- There should be no case where the platform hint API will throw an exception or abort the window creation process. - -# Proposed API - -```cs -public readonly struct Hint -{ - public HintName Name { get; } - public object Value { get; } -} - -public enum HintName -{ - // The format for new hints is for example EglBoolFlugenschlafen - GlfwBoolFocused = 131073, - GlfwBoolIconified = 131074, - GlfwBoolResizable = 131075, - GlfwBoolVisible = 131076, - GlfwBoolDecorated = 131077, - GlfwBoolAutoIconify = 131078, - GlfwBoolFloating = 131079, - GlfwBoolMaximized = 131080, - GlfwBoolCenterCursor = 131081, - GlfwBoolTransparentFramebuffer = 131082, - GlfwBoolHovered = 131083, - GlfwBoolFocusOnShow = 131084, - GlfwBoolStereo = 135180, - GlfwBoolSrgbCapable = 135182, - GlfwBoolDoubleBuffer = 135184, - GlfwBoolOpenGLForwardCompat = 139270, - GlfwBoolOpenGLDebugContext = 139271, - GlfwBoolContextNoError = 139274, - GlfwIntRedBits = 135169, - GlfwIntGreenBits = 135170, - GlfwIntBlueBits = 135171, - GlfwIntAlphaBits = 135172, - GlfwIntDepthBits = 135173, - GlfwIntStencilBits = 135174, - GlfwIntAccumRedBits = 135175, - GlfwIntAccumGreenBits = 135176, - GlfwIntAccumBlueBits = 135177, - GlfwIntAccumAlphaBits = 135178, - GlfwIntAuxBuffers = 135179, - GlfwIntSamples = 135181, - GlfwIntRefreshRate = 135183, - GlfwIntContextVersionMajor = 139266, - GlfwIntContextVersionMinor = 139267, - GlfwIntContextRevision = 139268, - GlfwRobustnessContextRobustness = 139269, - GlfwStringCocoaFrameName = 143362, - GlfwStringX11ClassName = 147457, - GlfwStringX11InstanceName = 147458, - GlfwClientApi = 139265, - GlfwContextCreationApi = 139275, - GlfwContextReleaseBehavior = 139273, - GlfwOpenGlProfile = 139272 -} -``` - -```diff -public struct WindowOptions -{ -+ public Hint[] PlatformSpecificHints { get; set; } // Can be null - we haven't discussed use of ? in the codebase yet -} -``` diff --git a/documentation/proposals/(Rejected) Proposal - Region Specific Key Input.md b/documentation/proposals/(Rejected) Proposal - Region Specific Key Input.md deleted file mode 100644 index 043a32149a..0000000000 --- a/documentation/proposals/(Rejected) Proposal - Region Specific Key Input.md +++ /dev/null @@ -1,141 +0,0 @@ -# Summary -- Make the windowing API return the key actually pressed, or any other key for that matter, instead of the key that is at -the same location on a US-Keyboard. - -# Contributors -- Matija Brown, None - -# Current Status -- [x] Proposed -- [ ] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Design Decissions -- The main aspect is to change the original API as little as possible and also make the region-adapting -toggleable / add the abillity to manually set a keyboard layout. To achieve this diversity, -new layouts can be imported from an external file, but the included ones are hard coded. This way one can easilly switch between -layouts and / or import a new, custome one while the rest of the input API remains unchanged. Due to the fact this is toggleable, -it will also work the same way as before. The layout is saved in the IInputContext, as it is not possible to have different -keyboard layouts on different keyboards at the same time, so it needn't be saved in every keyboard instance. If writing custom layouts -turns out to be a common thing, there will be a layout generator created as well. For now key modifiers such as SHIFT will not be -considered, but that might be implemented at a later time. - -# Proposed API - -## IKeyboardLayout -```cs -internal interface IKeyboardLayout -{ - - /// - /// Gets the name from an instance. - /// - string Name { get; } - - /// - /// Called from GlfwKeyboard.ConvertKey, easy place to get the keys, - /// and no use converting to Silk.NET keys and then swap them arround again. - /// - Key MapKey(Keys glfwKey); - -} -``` - -## QWERTYLayout -```cs -/// -/// Example class for all layouts. -/// -public sealed class QWERTYLayout : IKeyboardLayout -{ - - /// - /// The name of the layout. - /// - public const string NAME = "QWERTY"; - - /// - /// Non-Static name. - /// - public string Name { get } = NAME; - -} -``` - -## CustomLayout -```cs -/// -/// The implementation of custom, file-read layouts. -/// -public sealed class CustomLayout : IKeyboardLayout -{ - - /// - /// Get the name. No static name here because it changes with each file. - /// - public string Name { get => _name } - - /// - /// Loads the file and uses the contained layout as the keyboard layout. - /// - public CustomLayout(string file); - -} -``` - -## KeyboardLayout -```cs -public static class LayoutManager -{ - - /// - /// The QWERTY layout. - /// - public static readonly IKeyboardLayout QWERTY; - ... - - /// - /// Automatically gets the keyboard layout set on the device. - /// - public static IKeyboardLayout GetDeviceLayout(); - -} -``` - -## IInputContext -```diff -+ IKeyboardLayout Layout { get; set } = LayoutManager.GetDeviceLayout(); -``` - -## Layout File -``` -// Original Value In QWERTY -> New Value In Your Layout -// Obviously this is only done for the keys included in GLFW, but as they -// are close to ASCII it should be simple to write. No lowercase letters -// as they only exist on the char callbacks, not the key callbacks. -// The line in double quotes in the beginning of the file is the name. -"ExampleLayout" -65->68 // A will be D -// alternatively, as char and int are interchangeable in c# :) : -A->D -``` - -## Example Usage -```cs -class ExampleUsage -{ - // ... the hello window example here ... - private static void OnLoad() - { - var input = window.CreateInput(); - input.Layout = LayoutManager.QWERTY; - // alternatively: input.Layout = new CustomLayout("exampleLayout.layout"); - foreach (var keyboard in input.Keyboards) - { - keyboard.KeyDown += KeyDown; - } - } - // ... goes on here ... -} -``` \ No newline at end of file diff --git a/documentation/proposals/(Superseded) Proposal - Enhanced Input Events.md b/documentation/proposals/(Superseded) Proposal - Enhanced Input Events.md deleted file mode 100644 index 05f4aef453..0000000000 --- a/documentation/proposals/(Superseded) Proposal - Enhanced Input Events.md +++ /dev/null @@ -1,168 +0,0 @@ -# Summary -Proposal for adding important missing functionality to input, as well as other enhancements. - -# Contributors -- ThomasMiz - -# Current Status -- [x] Proposed -- [x] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Design Decisions -- Event parameters will be turned into readonly structures to prevent long parameter lists in some cases and allow more parameters (such as deltas) to be added in the future without breaking. - -# Proposed API -The only API changes will be to the events presented by IMouse, IKeyboard and possibly other device interfaces. - -## Enums - -#### KeyModifiers -Based on [the modifier keys flag from GLFW](https://www.glfw.org/docs/latest/group__mods.html). -```cs -[Flags] -public enum KeyModifiers -{ - Shift = 1 << 0, - Control = 1 << 1, - Alt = 1 << 2, - Super = 1 << 3, - CapsLock = 1 << 4, - NumLock = 1 << 5 -} -``` - -## Structs - -#### KeyDownEvent -```cs -public readonly struct KeyDownEvent -{ - public IKeyboard Keyboard { get; } - public Key Key { get; } - public int KeyCode { get; } - public KeyModifiers Modifiers { get; } - public bool IsRepeat { get; } - - public KeyDownEvent(IKeyboard keyboard, Key key, int keyCode, KeyModifiers modifiers, bool isRepeat); -} -``` - -#### KeyUpEvent -```cs -public readonly struct KeyUpEvent -{ - public IKeyboard Keyboard { get; } - public Key Key { get; } - public int KeyCode { get; } - public KeyModifiers Modifiers { get; } - - public KeyUpEvent(IKeyboard keyboard, Key key, int keyCode, KeyModifiers modifiers); -} -``` - -#### KeyCharEvent -```cs -public readonly struct KeyCharEvent -{ - public IKeyboard Keyboard { get; } - public char Character { get; } - public int KeyCode { get; } - - public KeyCharEvent(IKeyboard keyboard, char character, int keyCode); -} -``` - -#### MouseMoveEvent -```cs -public readonly struct MouseMoveEvent -{ - public IMouse Mouse { get; } - public Vector2 Position { get; } - public Vector2 Delta { get; } - - public MouseMoveEvent(IMouse mouse, Vector2 position, Vector2 delta); -} -``` - -#### MouseButtonEvent -```cs -public readonly struct MouseButtonEvent -{ - public IMouse Mouse { get; } - public Vector2 Position { get; } - public MouseButton Button { get; } - public KeyModifiers Modifiers { get; } - - public MouseButtonEvent(IMouse mouse, Vector2 position, MouseButton button, KeyModifiers modifiers); -} -``` - -#### MouseScrollEvent -```cs -public readonly struct MouseScrollEvent -{ - public IMouse Mouse { get; } - public Vector2 Position { get; } - public Vector2 WheelPosition { get; } - public Vector2 Delta { get; } - - public MouseScrollEvent(IMouse mouse, Vector2 position, Vector2 wheelPosition, Vector2 delta); -} -``` - -#### MouseClickEvent -```cs -public readonly struct MouseClickEvent -{ - public IMouse Mouse { get; } - public Vector2 Position { get; } - public MouseButton Button { get; } - public KeyModifiers Modifiers { get; } - - public MouseClickEvent(IMouse mouse, Vector2 position, MouseButton button, KeyModifiers modifiers) -} -``` - -## Interface changes - -#### IKeyboard -```cs -public interface IKeyboard : IInputDevice -{ - // The old events get removed: - // event Action KeyDown; - // event Action KeyUp; - // event Action KeyChar; - - // KeyDown reports key down and key repeats - event Action KeyDown; - event Action KeyUp; - - event Action KeyChar; -} -``` - -#### IMouse -```cs -public interface IMouse : IInputDevice -{ - // The old events get removed: - // event Action MouseMove; - // event Action MouseDown; - // event Action MouseUp; - // event Action Scroll; - // event Action Click; - // event Action DoubleClick; - - event Action MouseMove; - event Action MouseDown; - event Action MouseUp; - event Action Scroll; - event Action Click; - event Action DoubleClick; -} -``` - -These changes can also be applied to other IDevices to keep consistency across our API. diff --git a/documentation/proposals/(WIP) Proposal - SIMD (Revision).md b/documentation/proposals/(WIP) Proposal - SIMD (Revision).md deleted file mode 100644 index 1085bd293f..0000000000 --- a/documentation/proposals/(WIP) Proposal - SIMD (Revision).md +++ /dev/null @@ -1,125 +0,0 @@ -# Summary -That will bring a number of minor fixes to the [SIMD Proposal](Proposal%20-%20Vectorization%20-%20SIMD.md). - -# Contributors -- WhiteBlackGoose - -# Current Status -- [x] Proposed -- [x] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - - -# API changes - -`Avx` and `AdvSimd` offer us shifting by a vector, so there is no reason to limit to a fixed amount. Rotation here for consistency with shift. - -`Sign` has been decided to return the sign of the values. So I also suggest `CopySign` method, which would work similarly to Avx's `Sign`. - -Finally, `IsInteger`, `IsFloat`, `IsUnsignedInteger` and `IsSignedInteger` are shorthands for checking if the type is of a certain "class". - -```cs -static Silk.NET.Maths.Simd128.ShiftLeft(Vector128 x, Vector128 amount) -> Vector128 -static Silk.NET.Maths.Simd128.ShiftRight(Vector128 x, Vector128 amount) -> Vector128 -static Silk.NET.Maths.Simd128.RotateLeft(Vector128 x, Vector128 amount) -> Vector128 -static Silk.NET.Maths.Simd128.RotateRight(Vector128 x, Vector128 amount) -> Vector128 -static Silk.NET.Maths.Simd128.CopySign(Vector128 source, Vector128 destination) -> Vector128 - -static Silk.NET.Maths.Simd256.ShiftLeft(Vector256 x, Vector256 amount) -> Vector256 -static Silk.NET.Maths.Simd256.ShiftRight(Vector256 x, Vector256 amount) -> Vector256 -static Silk.NET.Maths.Simd256.RotateLeft(Vector256 x, Vector256 amount) -> Vector256 -static Silk.NET.Maths.Simd256.RotateRight(Vector256 x, Vector256 amount) -> Vector256 -static Silk.NET.Maths.Simd256.CopySign(Vector256 source, Vector256 destination) -> Vector256 - -static Silk.NET.Maths.Simd64.ShiftLeft(Vector64 x, Vector64 amount) -> Vector64 -static Silk.NET.Maths.Simd64.ShiftRight(Vector64 x, Vector64 amount) -> Vector64 -static Silk.NET.Maths.Simd64.RotateLeft(Vector64 x, Vector64 amount) -> Vector64 -static Silk.NET.Maths.Simd64.RotateRight(Vector64 x, Vector64 amount) -> Vector64 -static Silk.NET.Maths.Simd64.CopySign(Vector64 source, Vector64 destination) -> Vector64 - -static readonly Silk.NET.Maths.Simd128.IsFloat -> bool -static readonly Silk.NET.Maths.Simd128.IsInteger -> bool -static readonly Silk.NET.Maths.Simd128.IsUnsignedInteger -> bool -static readonly Silk.NET.Maths.Simd128.IsSignedInteger -> bool - -static readonly Silk.NET.Maths.Simd256.IsFloat -> bool -static readonly Silk.NET.Maths.Simd256.IsInteger -> bool -static readonly Silk.NET.Maths.Simd256.IsUnsignedInteger -> bool -static readonly Silk.NET.Maths.Simd256.IsSignedInteger -> bool - -static readonly Silk.NET.Maths.Simd64.IsFloat -> bool -static readonly Silk.NET.Maths.Simd64.IsInteger -> bool -static readonly Silk.NET.Maths.Simd64.IsUnsignedInteger -> bool -static readonly Silk.NET.Maths.Simd64.IsSignedInteger -> bool -``` - -**Also apply that to Scalar.** - -# Behavioural changes - -### IEEE754 standard - -I propose we do *not* guarantee following it for the sake of performance. For example, artificially normalized values are preferred over the expected abnormal. - -### Reciprocal of an integer - -**OPEN QUESTION:** what should be a reciprocal of an integer? Just 0? What is its behaviour for integer 0? - -### IsHardwareAccelerated - -Currently, in the `feature/math-simd` branch it does not depend on the type. I suggest making it dependent on the type (e. g. by doing `&& IsSupported`). - -It also does not depend on the method, which may lead to worse performance than just scalar operations (for methods which use other simd methods *which* in turn use scalar operations). **OPEN QUESTION:** how can we check that a method is hw-accelerated? - -### How else can we guarantee the fastest code? - -**OPEN QUESTION:** How can we let the user know if a `method` x `type` x `bitness` x `target machine` indeed makes a use of HW-acceleration? Or is the fallback with loop over vector good enough? - -## Meeting Notes - -Proposal needs work (open questions addressed). Discussed in Working Group meeting 29/11/2021, 19:13 UTC. - -**Note:** it has been assumed that all SIMD proposal elements are also being applied to Scalar. - -- IEEE754 - - All methods and code thus far just follows whatever makes it fast, no compliance to any standard or other behaviour (c# builtin, hardware, etc) is guaranteed - - Pretty good to be that way, as we can be the fastest and 100% accuracy most people don't care about - - There's a difference between doing things for correctness and doing it for performance. - - example optimization which could be problematic: treating NaN as 0, assuming it'll never happen (case in point: GCC fastmath) - - Don't throw exceptions in performant, use NaN instead to represent exceptional circumstances? What about ints? - - The only time you can accelerate if a value is a constant (JIT-level knowledge...) - - Separate methods for opt-in correctness-sacrificial optimizations? - - "I'm aware of the implications, and am ready for them" - - Most sense, least surprise (0 / 0 = 0) - - Something like a "IsMaximum" API to represent the "maximum representable value for a T" and use that in operations - - .NET's default behaviour is changing to match Rust, WASM etc - platform-specifics (i.e. faster paths) - - "do whatever the operator will do" - - Just throw exceptions where they're not trivially avoidable. - - We want all of the APIs to be as close as they can to hardware-accelerated. - - are we sure? should they be explicitly labelled? - - If we're using an inaccurate algorithm, should it be explicitly labelled? - - Figure out ULP, and document if we're making this decision? The user could check the docs, find the ULP, and then either use the library or don't use the library according to that. - - It's not trivial to find edge cases, could catch people out without realising? - - Let's just add estimate APIs - - For estimate APIs should they throw exceptions? - -- Reciprocal of int - - see consensus - -- IsHardwareAccelerated - - Make IsHardwareAccelerated per-type - - Perhaps we could make a smarter way of doing IsHardwareAccelerated, but the working group thinks it's not necessary (and also has no ideas) - - "Some or most of the APIs for this type are hardware accelerated" - - Methods that aren't are slow-path - - Static class with a whole bunch of static APIs for indicating? - - Where do we draw the line? - - Lots of checks can hurt the JIT/inliner - - Usually we optimize "all or nothing" for a given type. There may be a few exceptions, but these would be few and far between. - - Per-method and per-type is just pernickety and the working group sees no use case for this today/doesn't really matter... - - -**Consensus** -- IEEE754: We'll have estimate APIs and "native"/"more precise" APIs, two versions of all except things built in to the hardware (at a given baseline) -- Reciprocal: do what C# does for non-estimate (and for estimate as well we guess) -- IsHardwareAccelerated: one boolean per type. Not worth making a new flag for the few cases where we have a couple of functions which are slow for a given type. diff --git a/documentation/proposals/Proposal - 3.0 & 3.X Software Development Plan.md b/documentation/proposals/Proposal - 3.0 & 3.X Software Development Plan.md deleted file mode 100644 index d2bd7d7cfd..0000000000 --- a/documentation/proposals/Proposal - 3.0 & 3.X Software Development Plan.md +++ /dev/null @@ -1,201 +0,0 @@ -# Summary - -3.0 software development plan & ongoing monthly update, breaking change, and support policy for 3.X. - -# Contributors -- Dylan P (@Perksey) - -# Current Status -- [x] Proposed -- [x] Discussed with Working Group -- [x] Approved -- [ ] Implemented - -# Silk.NET 3.0 - -## Goals of 3.0 - -The key tenets of 3.0 are **portability**, **maintainability**, **usability**, and **performance**. To this end, the following objectives have been identified: -- Use .NET 6 - the first version of modern .NET to run on the majority of our desired target platforms - - (tenet: portability) -- Allow Silk.NET's rich abstractions to be integrated into other frameworks rather than being completely standalone. - - WPF, WinForms, MAUI, Avalonia (tenet: usability) -- Rewrite windowing to be more portable and facilitate true write-once-run-everywhere. - - For more information, see [the Windowing 3.0 proposal](Proposal%20-%20Windowing%203.0.md). (tenet: portability) -- Remove the bulk of our bindings generation code in favour of more mature alternatives - - For more information, see [the SilkTouch 3.0 proposal](Proposal%20-%20Generation%20of%20Library%20Sources%20and%20PInvoke%20Mechanisms.md). (tenet: maintainability) -- Accelerate our maths library using SIMD hardware intrinsics - - For more information, see [the Vectorization SIMD proposal](Proposal%20-%20Vectorization%20-%20SIMD.md). (tenet: performance) -- Redesign our input library to work in multiple scenarios and environments, as well as be less prone to breaking changes. - - For more information, see [the Multi-Backend Input proposal](Proposal%20-%20Multi-Backend%20Input.md). (tenet: usability) - -Silk.NET 3.0 presents us with an opportunity to rethink the entire library taking into account everything we've learnt over the past 2 years of the project's development. - -## Development Roadmap - -Note that this development roadmap does not take into account unit tests, only functional tests such as experiments. The team should of course strive to add as many tests as possible where possible. - -### 3.0 Preview 1 - -Before we can do anything, we need to get our brand new generators up and running. In this version: -- The Scraper works as a minimum viable product. It has minimal support for adding extra attributes for invoking overloaders. - - The Khronos APIs in particular will likely be incomplete compared to 2.X in this version. -- The Emitter works completely as intended. -- The Overloader works as a minimum viable product. It doesn't necessarily implement all overloads specified yet. -- Windowing and Input are implemented for desktop platforms, and have received initial testing. -- No development on Maths for this preview. -- Exclusive support for .NET 6 - -3.0 Preview 1 is not a production-ready preview and is very experimental. - -### 3.0 Preview 2 - -Now that we've got an initial preview out to show what our aims are, we can start refining everything. In this version: -- Bugfixes from 3.0 Preview 1 -- The Scraper has near-complete support for adding extra attributes for invoking overloaders. -- The Overloader has more overloads implemented. All generic overloads should be implemented by now, but some API-specific overloads may not be implemented. -- Android support has been restored for Windowing and Input, and have received initial testing on this platform. -- No development on Maths for this preview. - -3.0 Preview 2 is not a production-ready preview and is very experimental. - -### 3.0 Preview 3 - -By this preview, the groundwork has been established for 3.0 and we should ensure that all of our goals have ample progress towards the end product. In this version: -- Bugfixes from 3.0 Preview 2 -- The Scraper is complete. -- The Overloader is complete. -- iOS support has been added for Windowing and Input, and have received initial testing on this platform. -- If time permits, a start has been made on the SIMD APIs in Maths. No work has been done on integrating it into the other Maths types. - -3.0 Preview 3 is not a production-ready preview and is very experimental. - -### 3.0 Preview 4 - -This is the first "production-ready" preview and we want users to start integrating into their workloads, so we need to make sure good progress has been made to all goals for the 3.0 update and as many forseeable breaking changes as possible done. In this version: -- Bugfixes from 3.0 Preview 3 -- Windowing integrations for WPF and WinForms have been developed and have at least basic OpenGL support. The support may not be the most high performance possible at this time. -- SIMD APIs in Maths have been complete, and work has started to integrate them into the other Maths types in the most common cases. -- Ample work has been done to migrate 2.0 code to 3.0 code to evaluate differences in public API, fixing them where we deem necessary. - -3.0 Preview 4 is a production-ready preview and users are encouraged to start integrating this preview into their code. - -### 3.0 Preview 5 - -This is the last preview and is primarily a bugfix release. All breaking changes should've been done in previous previews, but if this is not the case all forseeable breaking must be 100% done in this preview. In this version: -- Bugfixes from 3.0 Preview 4 -- A windowing integration for MAUI has been developed and has at least basic OpenGL(ES) support in a state that is as high-performance and as smoothed-out as possible. -- If time permits, a windowing integration for Avalonia has been developed and has at least basic OpenGL(ES) support. If there is not enough time, this can be pushed to 3.X. -- SIMD APIs should be integrated into Maths in as many common cases as possible. Ongoing performance improvements may be done in 3.X. - -## Problems identified in past development - -- We have severely lacking documentation - - The intention is that all developers of large amounts of code write implementation documentation and/or "orientation guides" for their codebases informing readers of all major things there is to know in their code. - - We should also write documentation containing examples on using as many features of the surface APIs as possible \[for high level utilities\] - - We will enforce XML documentation in all manually-written utilities and as much as possible in bindings. - - If time permits, we should productionize our website powered by Statiq + our custom API reference generator. -- There's not a lot of planning - - We have solved this in the form of the proposal you are reading and all linked proposals: getting all the design done now and documented now, to prevent design debates later down the line. This should reduce friction when actually working on the library. - - We have been keeping the working group and key stakeholders in the loop with the 3.0 kickoff (again, see this proposal you are reading) - - The team are trying to communicate with eachother and figure out how to distribute work among themselves depending on individual circumstances and free time - - Codeowners have been established -- Barrier to entry for external contributors is very high - - Documentation should help with this. - - We should at least consider introducing something like stylecop to ensure code is readable and easy to navigate. - - We should look to make a general repo "orientation guide" teaching prospective contributors where they can find to expect what codebases. - - Hopefully we can pick up some external contributors along the way so _they_ can tell _us_ how to improve? -- Our level of correctness is inconsistent - - We should use .NET 5 enhanced warnings to help combat this. - - Our adoption of C# 8 nullability should be at a much greater extent than it is today, and not using nullability should require great justification. - -## Documentation Regime - -Documentation on how to use the surface API we expose for our High Level Utilities should be plentiful, and include examples for all of the common usecases of our libraries, if not more. The `documentation` folder will be structured as follows: - -``` -documentation - assets - branding - deprecation-notices - for-contributors - generators - input - maths - proposals - 1.0 - 1.x - 2.0 - 2.x - 3.0 - 3.x - rejected - windowing - generators - input - maths - windowing -``` - -The `documentation/for-contributors` folder will be used to document the implementation specifics, such as structure and implementation design philosophy, to help prospective contributors understand the library internals. - -The `documentation/assets` folder just contains images and other assets for the front page README.md. This folder was renamed from `documentation/readme`. - -The `documentation/branding` folder is a new folder containing all branding images for Silk.NET. - -The `documentation/deprecation-notices` is as it is today. - -The `documentation/for-contributors/proposals` folder, once the 3.0 proposals have been reviewed and signed-off by the Working Group, is as the `documentation/proposals` folder is today but slightly refactored to better organise the proposals and make it more clear which proposals concern which versions. - -All other folders will contain documentation targeted at users for using specific areas of the library. This can include surface API explanations, minimal code examples, and more: basically anything to make the usage of our library clearer to our users. - -# Silk.NET 3.X - -## Monthly Updates - -Silk.NET has been proven to excel at binding to OpenGL with games and applications such as [Project Hedra](https://projecthedra.com), a game made by @maxilevi; and [a clone of The Settlers](https://github.com/Pyrdacor/Freeserf.Net) made by @Pyrdacor. - -One thing we want to place an emphasis on is our commitment to actually keeping Silk.NET up-to-date. The schedule will be that on the **first Friday of the month** the bindings will be regenerated and a patch released containing all the changes since the last patch. - -We have a lot of bindings by now and the libraries we bind to change all the time. As such, monthly updates are critical to ensure our bindings are regenerated and are as up-to-date as possible. Bugfixes found over the month will be swept up in these monthly updates. - -### Emergency Patches - -If a bug is determined (agreed upon by the majority of maintainers) to be causing massive disruption to the point where the library is borderline unusable in some or all use cases of the library with a considerable proportion of the userbase affected, an out-of-cycle "emergency patch" may be issued on any other Friday between updates. - -### Versioning - -Any post-3.0, pre-4.0 release will be versioned as follows: -- The major version will always be 3 -- The minor version will be the number of the monthly update cycle i.e. the first monthly update will be versioned 3.1, the second 3.2, etc... -- The patch version will always be 0, unless it is an emergency patch in which case it'll be the number of the emergency patch i.e. if an emergency patch is required after the first monthly update the version will be 3.1.1, if another one is required (heaven forbid) in this same cycle it'll be 3.1.2 etc... -- The revision version will always be 0. - -Users are expected to keep all of the versions of all Silk.NET packages they are using in-sync. We could write a Roslyn analyser or MSBuild target to help push users to this. - -### Breaking Changes - -If an API is determined (agreed upon by the majority of maintainers) to be causing massive disruption or widespread confusion among a considerable proportion of the userbase, the Silk.NET team may reserve the right to make a breaking change in a post-3.0, pre-4.0 update as part of a monthly update cycle. This class of breaking changes shouldn't be done in an emergency patch unless the API issue in question was introduced in the then-current monthly update cycle (e.g. we need to quickly remove an API because it's super problematic for lots of people) - -Breaking changes in generated sources caused by changes in a third-party/external source the generated sources are generated from are allowed. - -ABI breaks may be allowed, but should be deferred unless absolutely necessary, so long as they are not source breaking - benign given all versions are in-sync, the only scenarios which could be affect is reflection. - -Additive changes which introduce a break are forbidden in a post-3.0, pre-4.0 update. - -### Support - -There are currently no plans to officially support anything but the latest monthly update i.e. the end-of-life date of a particular update is as soon as the next monthly update is released. Users are expected to be aware or made aware of the monthly update schedule and plan their work and/or support needs accordingly. - -Individual developers on the team may diverge from this, but they will be responsible for any support they give outside of this notice. If this changes and the Silk.NET team opt to introduce another support option, this proposal (or a future proposal which supersedes this one) will be updated accordingly and discussed with the Working Group. - -# Meeting Notes - -## 25/02/2022 - -[Video](https://youtu.be/dac3t0oh3VU?t=529) - -- Approved. -- Support Eto.Forms? - - Not really used or requested compared to the others, maybe as a community thing. -- There were some questions about the bindings libraries and how the generator differences are going to be consolidated. \ No newline at end of file diff --git a/documentation/proposals/Proposal - Bitwise - Scalar.md b/documentation/proposals/Proposal - Bitwise - Scalar.md deleted file mode 100644 index 5e0b073534..0000000000 --- a/documentation/proposals/Proposal - Bitwise - Scalar.md +++ /dev/null @@ -1,31 +0,0 @@ -# Summary -Bitwise operations in `Scalar[]` - -# Contributors -- Kai Jellinghaus, Silk.NET maintainer -- Dylan Perks, Ultz Limited - -# Current Status -- [x] Proposed -- [x] Discussed with API Review Board (ARB) -- [x] Approved -- [x] [Implemented](https://github.com/dotnet/Silk.NET/pull/667) - -# Design Decisions - - -# Proposed API -To make this simpler for both me, and anyone who reads this, I've provided the API in the form it would appear in a PublicAPI.txt - -This same API would also be amended to the Vectorization/SIMD proposal, if both are accepted. - -```cs -static Silk.NET.Maths.Scalar.And(T left, T right) -> T -static Silk.NET.Maths.Scalar.Or(T left, T right) -> T -static Silk.NET.Maths.Scalar.Xor(T left, T right) -> T -static Silk.NET.Maths.Scalar.Not(T x) -> T -static Silk.NET.Maths.Scalar.ShiftLeft(T x, int amount) -> T -static Silk.NET.Maths.Scalar.ShiftRight(T x, int amount) -> T -static Silk.NET.Maths.Scalar.RotateLeft(T x, int amount) -> T -static Silk.NET.Maths.Scalar.RotateRight(T x, int amount) -> T -``` diff --git a/documentation/proposals/Proposal - Chain Polymorphism.md b/documentation/proposals/Proposal - Chain Polymorphism.md deleted file mode 100644 index 276e72696c..0000000000 --- a/documentation/proposals/Proposal - Chain Polymorphism.md +++ /dev/null @@ -1,106 +0,0 @@ -# Summary - -Using the managed `Silk.NET.Vulkan.Chain` and its generically-typed descendants can be unwieldy in the specific case of recieving chains -with known starting element(s) but potential unknown later elements, e.g. a `SwapchainCreateInfoKHR` which may or may not have an -`ImageCreateInfo` later in the chain. If use of the managed chain api is desired in this case, the untyped `Chain` type must be used -and the result of its indexer cast to the desired chain start type. This, combined with the public api surface on ``Chain`2`` being -a strict superset of ``Chain`1`` etc., a polymorphic interface is desired for handling variable-size chains. - -# Contributors - -- [Khitiara](https://github.com/Khitiara) - -# Current Status - -- [x] Proposed -- [x] Discussed with API Review Board (ARB) -- [x] Approved -- [ ] Implemented - -# Design Decisions - -- This is mainly useful in cases where the managed api and its automatic management of chain memory is desired. The unmanaged non-generic API - already supports this use-case, so this function is mainly beneficial as method return types where chain extensions may not be known ahead of - time, and thus `out` parameters for all unmanaged chain elements are not suitable. - -# Proposed API - -A series of generic interfaces are created to accompany the generic `Chain<...>` classes: - -```csharp -public unsafe interface IChain : IDisposable - where TChain : unmanaged, IChainable { - public BaseInStructure* HeadPtr { get; } - public TChain Head { get; set; } -} - -public unsafe interface IChain : IChain - where TChain : unmanaged, IChainable - where T1 : unmanaged, IChainable { - public BaseInStructure* Item1Ptr { get; } - public T1 Item1 { get; set; } -} - -public unsafe interface IChain : IChain - where TChain : unmanaged, IChainable - where T1 : unmanaged, IChainable - where T2 : unmanaged, IChainable { - public BaseInStructure* Item2Ptr { get; } - public T2 Item2 { get; set; } -} - -... -``` - -and the existing generic `Chain<...>` types are modified to implement these new interfaces: - -```csharp -public unsafe sealed class Chain : Chain, IEquatable>, IChain - where TChain : unmanaged, IChainable { - ... -} - -public unsafe sealed class Chain : Chain, IEquatable>, IChain - where TChain : unmanaged, IChainable - where T1 : unmanaged, IChainable { - ... -} - -public unsafe sealed class Chain : Chain, IEquatable>, IChain - where TChain : unmanaged, IChainable - where T1 : unmanaged, IChainable - where T2 : unmanaged, IChainable { - ... -} - -... -``` - -Usage: - -```csharp -public IChain DeduceImageCreateInfo(IChain swapchainCreateInfo) { - ImageCreateInfo createInfo = ...; - - // condition here used for example - a TryFind extension or similar may be desirable in the long term - if (swapchainCreateInfo is Chain(_, formatListCreateInfo)) { - // Chain : IChain : IChain - return Chain.Create(createInfo, formatListCreateInfo); - } - - // Chain : IChain - return Chain.Create(createInfo); -} - -... - -public void Foo() { - SwapchainCreateInfoKHR sci = ...; - using IChain ici = DeduceImageCreateInfo(sci); - ReadOnlySpan fmts = ici switch { - Chain(_, var formatList) => - new ReadOnlySpan(formatList.PViewFormats, (int)formatList.ViewFormatCount).ToArray(), - Chain(var i) => stackalloc[] { i.Format } - } -} -``` diff --git a/documentation/proposals/Proposal - Contexts.md b/documentation/proposals/Proposal - Contexts.md deleted file mode 100644 index f567ae325e..0000000000 --- a/documentation/proposals/Proposal - Contexts.md +++ /dev/null @@ -1,55 +0,0 @@ -# Summary -Currently, in Silk.NET you must have an `IWindow` or `IView` in order to use `Silk.NET.OpenGL` -and if you want to evade our windowing system, a lot of dirty hacks are required in order to -get access to `GL`. - -This proposal, along with others that are along the way, are part of an effort to remove -`SilkManager` in 2.0, which is a really poorly implemented injection system which didn't -really make sense anyway, as API instances would depend on a static state. - -- Written against Silk.NET 1.1 -- Slated for Silk.NET 1.X - -# Contributors -- Dylan P, Ultz Limited - -# Current Status -- [x] Proposed -- [ ] Discussed with API Review Board (ARB) -- [ ] Approved -- [ ] Implemented - -# Points to discuss -- In 2.0 we could completely remove the GL constructors that use SilkManager (after obsoleting them in the next update), so that each GL instance is tied to an OpenGL context. - -# Proposed API -```cs -// Silk.NET.Core -public interface IGLContext : IDisposable -{ - IntPtr Handle { get; } - bool IsCurrent { get; } - void SwapInterval(int interval); - void SwapBuffers(); - void MakeCurrent(); - void Clear(); - IntPtr GetProcAddress(string proc); -} -``` - -```diff -public interface IView -{ - // NOTE: Still need to discuss nullability attributes -+ IGLContext? Context { get; } -} -``` - -```diff -// Silk.NET.OpenGL -public abstract class GL -{ - // This overload evades the SilkManager entirely, getting all the data it needs from the context. -+ public static GL GetApi(IGLContext ctx); -} -``` diff --git a/documentation/proposals/Proposal - Generation of Library Sources and PInvoke Mechanisms.md b/documentation/proposals/Proposal - Generation of Library Sources and PInvoke Mechanisms.md deleted file mode 100644 index 5393371f67..0000000000 --- a/documentation/proposals/Proposal - Generation of Library Sources and PInvoke Mechanisms.md +++ /dev/null @@ -1,342 +0,0 @@ -# Summary -Proposal design for a platform invoke (P/Invoke) mechanism for Silk.NET 3.0. - -# Contributors -- Dylan Perks (@Perksey) -- Kai Jellinghaus (@HurricanKai) - -# Current Status -- [x] Proposed -- [x] Discussed with Working Group (WG) -- [x] Approved -- [ ] Implemented - -# Design Decisions -- This proposal builds on the foundations laid out by Silk.NET's move to source generators in 2.0, and the introduction of the SilkTouch source generator as a result of this. -- This proposal assumes no knowledge of Silk.NET 2.0's SilkTouch. -- This takes the knowledge and insight gained during development of SilkTouch, and uses it to create a new set of generators which incorporate lessons learnt. -- This proposal breaks down the generator process into three distinct stages: - -## SilkTouch Scraper - -The Scraper is responsible for creating partial classes from some input source. It is a drop-in replacement for what BuildTools does today. Instead of doing all the parsing and interpretation of the input source ourselves, the proposed Scraper will instead use only C headers and have a "preburner" for gathering minimal metadata to feed into the generation process. - -The generation process of the proposed Scraper will be entirely different. Silk.NET will no longer do any parsing and interpretation of C headers or XML of C headers, instead we will delegate this to the ClangSharp P/Invoke Generator in the form of a "subagent" (a separate process spun up by the Scraper), adding appropriate modifications to ClangSharp P/Invoke Generator as necessary. This means that we will no longer be using the Khronos XML registries for generating bindings. Instead, we'll use the preburner stage to use the XML registry only to gather minimal metadata instructing the ClangSharp subagent to add metadata attributes to certain functions, parameters, or types; which will then be picked up on by the later stages of SilkTouch. An example of such metadata would be parsing the flow and len XML attributes to add appropriate C# attributes to influence overload generation. - -This also naturally makes us entirely dependent on an external dependency, but I propose we work with Microsoft as much as possible to add the functionality we need in the least breaking way possible, and in a way that satisfies both us and Microsoft. All designs for such modifications will be formalized in the ClangSharp repo. Should we fail to do this, we'll maintain a fork so we can still benefit from improvements made upstream, while giving ourselves the freedom to add the functionality we need. - -Microsoft have already stated that they're happy to work with us to get Silk.NET using ClangSharp, one maintainer even saying they're happy to add a CI test stage into the ClangSharp repo to ensure no incoming changes break Silk.NET's generation process. - -There is no required behaviour for the Scraper (due to a lot of unknowns at the moment) other than it **MUST** invoke ClangSharp to generate C# Emitter-compatible classes, and it **MUST** add appropriate attributes to invoke the Overloader stage according to any metadata available from Khronos XML if applicable. - -## SilkTouch Emitter -The Emitter, one of the two final stages whose resources **MUST** be entirely independent of eachother, is responsible for generating the actual indirect calls for performing the P/Invoke. - -The Emitter operates on partial methods, the behaviour of the implementations of which depending on the context in which it's used. - -All attributes **MUST** be name matched only, to allow the user to define these themselves and not create a hard dependency on a specific Silk.NET library such as the Silk.NET Core. - -Candidate methods for implementation by the Emitter **MUST** be partial and not have an implementation part yet. Their containing types **MUST** also be partial. - -The Emitter **MUST** be able to be invoked via the SilkTouch CLI and **MAY** be able to be invoked via an incremental Roslyn source generator. - -### Call Styles - -The Emitter's primary purpose is to load and use function pointers in a native library sourced from an operating system's kernel, though this doesn't necessarily have to be the case. This logic will be emitted by the Emitter itself, and will not require an external dependency like the Silk.NET Core. However, this logic will no longer be implicit. - -#### Built-in: Dynamic-Link Library Call Style - -Consider the following example: -```cs -[UseDynamicLibrary("glfw3.dll")] -public partial class Glfw -{ - public partial void glfwInit(); -} -``` - -The `UseDynamicLibrary` attribute instructs the Emitter that it **MUST** use [`DllImport`](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute?view=net-5.0) to access native functions. [`NativeLibrary`](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.nativelibrary?view=net-5.0) can be used to modify the libsuperrary loading process per other requirements defined below. For the entry point, the function name **MUST** be used unless a `NativeApi` attribute is provided, in which case the `EntryPoint` indicated by that attribute **MUST** be used. - -Consider the following example: -```cs -[UseDynamicLibrary("glfw3.dll", "libglfw3.dylib")] -public partial class Glfw { /* ... */ } -``` - -`UseDynamicLibrary` **MUST** be able to be specified on either a function or type. - -The Emitter **MUST** allow multiple candidate library names and cycle through each candidate until one loads successfully. - -#### Built-in: Static-Link Library Call Style - -Consider the following example: -```cs -[UseStaticLibrary] -public partial class Glfw -{ - public partial void glfwInit(); -} -``` - -The `UseStaticLibrary` attribute instructs the Emitter that it **MUST** use [`DllImport`](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.dllimportattribute?view=net-5.0) to access native functions. `__Internal` **MUST** be used for the library name. For the entry point, the function name **MUST** be used unless a `NativeApi` attribute is provided, in which case the `EntryPoint` indicated by that attribute **MUST** be used. - -`UseStaticLibrary` **MUST** be able to be specified on either a function or type. - -Consider the following example: -```cs -#if __IOS__ -[UseStaticLibrary] -#endif -[UseDynamicLibrary("glfw3.dll")] -public partial class Glfw -{ - public partial void glfwInit(); -} -``` - -The Emitter **MUST** only generate code if all preprocessor directives guarding the `UseStaticLibrary` attribute evaluate to true. If the attribute is defined on both the function and the containing type, the preprocessor directives surrounding the function's attribute **MUST** be used instead of the preprocessor directives surrounding the type. - -Note to the reader: Given preprocessor directives are processed at parse time in Roslyn, both of those last requirements are basically benign. - -#### Custom Call Style: Procedure Address Expressions - -Custom code may be used as a call style by providing a pointer to SilkTouch using a Procedure Address Expression. This is useful in scenarios such as COM interop. - -Procedure Address Expressions are C# expressions that **MUST** evaluate to a `void*`, `nint`, or `IntPtr`. This is the actual address in memory of the function being invoked. - -Consider the following example: -```cs -public partial struct IUnknown -{ - public void** LpVtbl; - [UseExpression("LpVtbl[1]")] - public partial uint AddRef(); -} -``` - -`GetProcAddress` indicates that the C# code given **MUST** be used as the Procedure Address Expression to retrieve the function address to call. Any arbritrary code can be inserted into this attribute, so long as the result of the code once evaluated meets the Procedure Address Expression definition. For example, this is valid: -```cs -public partial struct IUnknownNullableContainer -{ - public IUnknownPtr? Value; - [UseExpression("Value.GetValueOrDefault().InnerValue->LpVtbl[1]")] - public partial uint AddRef(); -} - -public struct IUnknownPtr -{ - public IUnknown* InnerValue; -} - -public struct IUnknown -{ - public void** LpVtbl; -} -``` - -The Emitter **SHOULD** implicitly parenthesise the expression given in the attribute. - -Unless another call style is applicable, the Emitter **MUST** mandate that every function has a `UseExpression` (Procedure Address Expression) specified. - -The Emitter **MUST** call the function pointer returned by the Procedure Address Expression as part of this call style. - -#### Custom Call Style: Procedure Address Methods - -A level more abstracted than Procedure Address Expressions, which allows any custom code to retrieve a function pointer; Procedure Address Methods work similarly to the native library call style from an API perspective, but function similarly to the Procedure Address Expressions call style. - -The aim of this call style is to provide flexibility without comprimising code readability. Consider the following example: - -```cs -[UseMethod(nameof(GetProcAddressShim))] -public partial class Glfw -{ - [UseDynamicLibrary("glfw3.dll")] - public partial nint glfwGetProcAddress(byte* str); - - // shim to convert the string, which SilkTouch needs to use, to a byte pointer - THIS IS NOT A MODEL EXAMPLE! - private nint GetProcAddressShim(string str) => glfwGetProcAddress((byte*) Marshal.StringToHGlobalAnsi(str)); - - public partial void glBegin(uint mode); -} -``` - -Procedure Address Methods are method groups (or an otherwise callable expression) within the scope of the method that **MUST** return a `void*`, `nint`, or `IntPtr` when invoked. This is the actual address in memory of the function being invoked. - -Procedure Address Methods **MUST** take one parameter of type `string`. - -For the parameter passed into the callable specified in the attribute, the function name **MUST** be used unless the `EntryPoint` property in the `NativeApi` attribute is provided, in which case the `EntryPoint` indicated by the attribute **MUST** be used. - -The Emitter **MUST** call the function pointer returned by the Procedure Address Method as part of this call style. - -#### Call Style Priority - -Consider the following example: - -```cs -[UseDynamicLibrary("glfw3.dll")] -public partial class Glfw -{ - public partial nint glfwGetProcAddress(byte* str); - [UseExpression("glfwGetProcAddress((byte*)Unsafe.AsPointer(ref Unsafe.AsRef(0x006e696765426c67)))")] - public partial void glBegin(uint mode); -} -``` - -Here, a class using the Dynamic Library call style has a method which does not follow the call style defined at the class level, and is overridden using a `UseExpression` attribute. - -If multiple call styles are applicable, the following order of preference **MUST** be respected: -- Procedure Address Expressions -- Procedure Address Methods -- Static-Link Library -- Dynamic-Link Library - -Function-level attributes **MUST** be preferred over type-level ones, and follow the same order of preference. - -### Native Calls -For the most part, the resultant native signature used by the Emitter is matched 1:1 with the method signature. However there are certain modifications you can apply. Namely, the `NativeApi` attribute will allow specification of specific calling conventions. For example: - -```cs -[NativeApi(Conventions = new[]{typeof(CallConvMemberFunction), typeof(CallConvSuppressGCTransition)}] -public partial D3D12_HEAP_PROPERTIES GetCustomHeapProperties(uint nodeMask, D3D12_HEAP_TYPE heapType); -``` - - -`Conventions` will be used as the primary mechanism for customizing the behaviour of generation, just as `NativeApi` will be used as the primary attribute for this as well. The behaviour of each bit will be described in documentation comments in the Proposed API section. - -The Emitter does not do any marshalling. As such, the Emitter **MUST** mandate that every parameter and return type of every function fits the `unmanaged` constraint. For the readers benefit, this can be done using a property on `ITypeSymbol` in Roslyn. - -## SilkTouch Overloader -The Overloader, one of the two final stages whose resources **MUST** be entirely independent of eachother, creates overloads of functions that expose a more user-friendly interface than the function it overloads, and do appropriate marshalling to lower the parameter types used down to the original function's types. - -The Overloader **MUST** be able to be used on any function and not be tied to any of the Emitter's constraints. - -The Overloader **MUST** be able to be invoked via the SilkTouch CLI and **MAY** be able to be invoked via an incremental Roslyn source generator. - -The Overloader does not care about existing methods. If the Overloader generates an overload that also happens to exist manually, it is the user's repsonsibility to disable the relevant overloads for these cases. - -However, if the Overloader thinks that the overload it's generating may conflict with another overload or the original function, it **SHOULD** output the overload as an extension method rather than a method within the containing type, unless the original method is static in which case it **MUST** discard the overload and generate a warning. It **SHOULD** also do this if the containing type is not partial. - -The Silk.NET team does not wish to specify the functionality of the overloader at this time, and wishes to instead define this by experimenting with the overloader's functionality during development; with the understanding that the Silk.NET team must formalize a proposal with the working group before a "go live" release ships. - -# Proposed API -- Here you do some code blocks, this is the heart and soul of the proposal. DON'T DO ANY IMPLEMENTATIONS! Just declarations. - -## `UseDynamicLibrary` -```cs -namespace Silk.NET.Core -{ - [AttributeUsage(AttributeTargets.Function | AttributeTargets.Class)] - public class UseDynamicLibraryAttribute : Attribute - { - public UseDynamicLibrary(string libraryName, params string[] alternativeNames); - public string LibraryName { get; } - public string[] AlternativeNames { get; } - } -} -``` - -## `UseStaticLibrary` -```cs -namespace Silk.NET.Core -{ - [AttributeUsage(AttributeTargets.Function | AttributeTargets.Class)] - public class UseStaticLibraryAttribute : Attribute - { - } -} -``` - -## `UseExpression` -```cs -namespace Silk.NET.Core -{ - [AttributeUsage(AttributeTargets.Function | AttributeTargets.Class)] - public class UseExpressionAttribute : Attribute - { - public UseExpressionAttribute(string expr); - public string Expression { get; } - } -} -``` - -## `UseMethod` -```cs -namespace Silk.NET.Core -{ - [AttributeUsage(AttributeTargets.Function | AttributeTargets.Class)] - public class UseMethodAttribute : Attribute - { - public UseMethodAttribute(string expr); - public string Expression { get; } - } -} -``` - -## `NativeApi` -```cs -namespace Silk.NET.Core -{ - public class NativeApiAttribute : Attribute - { - public string EntryPoint { get; set; } - public Type[] Conventions { get; set; } - } -} -``` - -# Meeting Notes - -## 05/08/2021 - -- SilkTouch for 2.0 is very hard to use -- A lot of code -- Will explode the repo a lot, but will also improve compile times because everything's already there and no need to generate at compile time -- ClangSharp is used by win32metadata (official c#, rust bindings) and generally accurate for parsing header files - - very correct, battle tested, more reliable than BuildTools 2.0 -- Just use ReadOnlySpan (implicit conversion from string) - - does our userbase know this? -- Too many overloads could cause confusion/lack of visibility - - promote "best practice" - - include exposed native api -- Only overload what we determine as "best practice", discourage per-parameter overloading - - One permutation per "overload style"? i.e. one function with all spans - - Special "intermediary" types don't really make sense as it loses compile-time safety and has other compiler-level issues -- Establish a baseline of overloads - - Scrap ArrayOverloads - - Scrap RefOverloads -- Group? i.e. only create overloads based on a particular style -- **Overloader needs more review/work, postpone to another meeting** - - number of overloads is a big concern right now - -## 25/02/2022 - -[Video](https://youtu.be/dac3t0oh3VU?t=7616) - -- Approved (call conv modifier discussion notwithstanding), but we must come back to the overloader - it's a bit too early to decide on something solid as there's no perfect rule that we know of to generate them at this time - we can only get this through experimentation! -- Why use an enum and custom attribute rather than reusing UnmanagedCallConv and the typeof(CallConv*) types that C#/.NET have standardized on for moving forward? - - We don't really have control over those types. - - For \[contrived\] example, what if we want a JavaScript calling convention? - - We can't just hack up a "calling convention" the runtime doesn't support, `MemberFunction` for example was just something that _happened_ to work on the Windows ABI - - We could use CallModifiers to, for example, influence codegen to call into IJsInProcessRuntime and call JavaScript code - this isn't necessarily _just_ an ABI-based concept. It could support other scenarios. - - It makes more sense to separate these, as these are sort of associated with DllImport and that side of the calling process, and a "JavaScript" convention concept (as discussed before). - - It's difficult to represent right now, because we have the native API attribute - - **We could/should change this to use the CallConv types instead** - - Direct advantages - - As the runtime versions in the future, it will continue to add CallConv types. These types are the official way moving forward to represent any calling convention information for the rutnime going forward. - - SilkTouch has to go out of this way to map this and understand this anyway, unless we just have the types then we can specify them as-is - SilkTouch doesn't even need to understand these. - - "\[DllImport\] is effectively magic" - @tannergooding - - **Just change Modifiers to a CallConv type array** -- The overload problem does need to be solved in some way. Some functions have absurd amounts of overloads (particularly in assimp) - - We want to scrap a bunch of overloads as well. A lot of this is only generating a bunch of "important" overloads. - - Was there consideration for a source generator approach to opt-in to the friendliest variant that they want? - - Yes, kind of. We don't have a formal proposal as we only just thought of this today. - - We need to bake the most basic overloads into the assembly itself. - - We'd like to have a source generator. - - We want SilkTouch to be productized, and find a way to remap types per their liking and use overloads etc. - - We should experiment with this and report back in a future community meeting. - -**ACTIONS** -- [x] Change `Modifiers` to a CallConv\* `Type` array - -**FUTURE** -- [ ] Report back to the Community our findings in experimenting with overloads diff --git a/documentation/proposals/Proposal - Input.md b/documentation/proposals/Proposal - Input.md deleted file mode 100644 index 819dd31798..0000000000 --- a/documentation/proposals/Proposal - Input.md +++ /dev/null @@ -1,427 +0,0 @@ -# Summary -Proposal API for Input via keyboards, mice, and controllers. - -# Contributors -- Dylan Perks, Ultz Limited -- Aaron Pearson, Ultz Limited -- Vassalware, Silk.NET Contributors -- Void, Silk.NET codeowners - -# Current Status -- [x] Proposed -- [x] Discussed with API Review Board (ARB) -- [x] Approved -- [ ] Implemented - -# Design Decisions -- Vibration has been excluded from this proposal, as we'd like to come up with a complete API for HD Rumble etc. -- I've decided to use interfaces for nearly everything, so that the implementation has more control. -- All modifications of states (i.e. functions) will go within the interface, whereas structs are used for read-only data. -- **IMPLEMENTATION DETAIL/REQUIREMENT:** In implementations, once an IJoystick, IGamepad, or other IInputDevice object has been created, **it must not be destroyed until its IInputContext is disposed**. This is to preserve event bindings. -- ButtonDown/Up and KeyDown/Up events (and similar) all fire once, when the key is first pushed down or up. I intend to champion a few extension packages to support more use cases, but I've kept this API pretty barebones. - -# Proposed API -## Interfaces - -### IJoystick -```cs -public interface IJoystick : IInputDevice -{ - IReadOnlyList Axes { get; } - IReadOnlyList