diff --git a/.global.editorconfig.ini b/.global.editorconfig.ini index f53702b93c..644864e0f7 100644 --- a/.global.editorconfig.ini +++ b/.global.editorconfig.ini @@ -1,5 +1,36 @@ is_global = true +## BizHawk internal rules + +# Do not use anonymous delegates +dotnet_diagnostic.BHI1001.severity = error +# Do not use anonymous types (classes) +dotnet_diagnostic.BHI1002.severity = error +# Do not use query expression syntax +dotnet_diagnostic.BHI1003.severity = error +# Verbatim interpolated strings should begin $@, not @$ +dotnet_diagnostic.BHI1004.severity = error +# Default branch of switch expression should throw InvalidOperationException/SwitchExpressionException or not throw +dotnet_diagnostic.BHI1005.severity = error +# Do not discard local variables +dotnet_diagnostic.BHI1006.severity = error +# Don't call this.GetType() in sealed type, use typeof operator +dotnet_diagnostic.BHI1100.severity = error +# Don't call this.GetType(), use typeof operator (or replace subtype check with better encapsulation) +dotnet_diagnostic.BHI1101.severity = error +# Don't call typeof(T).Name, use nameof operator +dotnet_diagnostic.BHI1102.severity = error +# Don't call typeof(T).ToString(), use nameof operator or typeof(T).FullName +dotnet_diagnostic.BHI1103.severity = error +# Check result of IDictionary.TryGetValue, or discard it if default(T) is desired +dotnet_diagnostic.BHI1200.severity = error +# Call to FirstOrDefault when elements are of a value type; FirstOrNull may have been intended +dotnet_diagnostic.BHI3100.severity = error +# Use .Order()/.OrderDescending() shorthand +dotnet_diagnostic.BHI3101.severity = warning +# Throw NotImplementedException from methods/props marked [FeatureNotImplemented] +dotnet_diagnostic.BHI3300.severity = error + ## Globalization rules # Specify IFormatProvider @@ -27,3 +58,516 @@ dotnet_diagnostic.CA1816.severity = none dotnet_diagnostic.CA2201.severity = suggestion # Implement serialization constructors dotnet_diagnostic.CA2229.severity = silent + +## .NET DocumentationAnalyzers style rules + +# Place text in paragraphs +dotnet_diagnostic.DOC100.severity = silent +# Use child blocks consistently +dotnet_diagnostic.DOC101.severity = silent +# Use child blocks consistently across elements of the same kind +dotnet_diagnostic.DOC102.severity = silent +# Use Unicode characters # unnecessary HTML entities also get picked up by CS1570, which seems more reliable +dotnet_diagnostic.DOC103.severity = error +# Prefer '' to 'keyword' for referencing language keywords +dotnet_diagnostic.DOC104.severity = warning +# Prefer '' to 'parameter' for referencing parameters +dotnet_diagnostic.DOC105.severity = warning +# Prefer '' to 'type_parameter' for referencing type parameters +dotnet_diagnostic.DOC106.severity = warning +# Prefer '' to 'target' for referencing code elements +dotnet_diagnostic.DOC107.severity = warning +# Avoid empty paragraphs +dotnet_diagnostic.DOC108.severity = error + +## .NET DocumentationAnalyzers portability rules + +# Use XML documentation syntax +dotnet_diagnostic.DOC200.severity = error +# Item should have description +dotnet_diagnostic.DOC201.severity = error +# Use section elements correctly +dotnet_diagnostic.DOC202.severity = error +# Use block elements correctly +dotnet_diagnostic.DOC203.severity = error +# Use inline elements correctly # but this doesn't pick up in , for example... +dotnet_diagnostic.DOC204.severity = error +# 'langword' attribute value should be a language keyword +dotnet_diagnostic.DOC207.severity = error +# 'href' attribute value should be a URI # a lot of false negatives with this one too +dotnet_diagnostic.DOC209.severity = error + +## Meziantou.Analyzers rules + +# StringComparison is missing +dotnet_diagnostic.MA0001.severity = silent +# IEqualityComparer or IComparer is missing +dotnet_diagnostic.MA0002.severity = silent +# Add parameter name to improve readability +dotnet_diagnostic.MA0003.severity = silent +# Use Task.ConfigureAwait(false) +dotnet_diagnostic.MA0004.severity = silent +# Use Array.Empty() +dotnet_diagnostic.MA0005.severity = silent +# Use String.Equals instead of equality operator +dotnet_diagnostic.MA0006.severity = silent +# Add a comma after the last value +dotnet_diagnostic.MA0007.severity = silent +# Add StructLayoutAttribute +dotnet_diagnostic.MA0008.severity = silent +# Add regex evaluation timeout +dotnet_diagnostic.MA0009.severity = silent +# Mark attributes with AttributeUsageAttribute +dotnet_diagnostic.MA0010.severity = error +# IFormatProvider is missing +dotnet_diagnostic.MA0011.severity = silent +# Do not raise reserved exception type +dotnet_diagnostic.MA0012.severity = error +# Types should not extend System.ApplicationException +dotnet_diagnostic.MA0013.severity = error +# Do not raise System.ApplicationException type +dotnet_diagnostic.MA0014.severity = error +# Specify the parameter name in ArgumentException +dotnet_diagnostic.MA0015.severity = error +# Prefer returning collection abstraction instead of implementation +dotnet_diagnostic.MA0016.severity = silent +# Abstract types should not have public or internal constructors +dotnet_diagnostic.MA0017.severity = silent +# Do not declare static members on generic types +dotnet_diagnostic.MA0018.severity = error +# Use EventArgs.Empty +dotnet_diagnostic.MA0019.severity = error +# Use direct methods instead of LINQ methods +dotnet_diagnostic.MA0020.severity = error +# Use StringComparer.GetHashCode instead of string.GetHashCode +dotnet_diagnostic.MA0021.severity = silent +# Return Task.FromResult instead of returning null +dotnet_diagnostic.MA0022.severity = error +# Add RegexOptions.ExplicitCapture +dotnet_diagnostic.MA0023.severity = silent +# Use an explicit StringComparer when possible +dotnet_diagnostic.MA0024.severity = error +# Implement the functionality instead of throwing NotImplementedException +dotnet_diagnostic.MA0025.severity = silent +# Fix TODO comment +dotnet_diagnostic.MA0026.severity = silent +# Do not remove original exception +dotnet_diagnostic.MA0027.severity = error +# Optimize StringBuilder usage +dotnet_diagnostic.MA0028.severity = silent +# Combine LINQ methods +dotnet_diagnostic.MA0029.severity = error +# Remove useless OrderBy call +dotnet_diagnostic.MA0030.severity = error +# Optimize Enumerable.Count() usage +dotnet_diagnostic.MA0031.severity = error +# Use an overload with a CancellationToken argument +dotnet_diagnostic.MA0032.severity = silent +# Do not tag instance fields with ThreadStaticAttribute +dotnet_diagnostic.MA0033.severity = error +# Do not use dangerous threading methods +dotnet_diagnostic.MA0035.severity = error +# Make class static +dotnet_diagnostic.MA0036.severity = silent +# Remove empty statement +dotnet_diagnostic.MA0037.severity = error +# Make method static +dotnet_diagnostic.MA0038.severity = silent +# Do not write your own certificate validation method +dotnet_diagnostic.MA0039.severity = error +# Flow the cancellation token +dotnet_diagnostic.MA0040.severity = silent +# Make property static +dotnet_diagnostic.MA0041.severity = silent +# Do not use blocking calls in an async method +dotnet_diagnostic.MA0042.severity = error +# Use nameof operator in ArgumentException +dotnet_diagnostic.MA0043.severity = error +# Remove useless ToString call +dotnet_diagnostic.MA0044.severity = silent +# Do not use blocking call in a sync method (need to make containing method async) +dotnet_diagnostic.MA0045.severity = silent +# Use EventHandler to declare events +dotnet_diagnostic.MA0046.severity = silent +# Declare types in namespaces +dotnet_diagnostic.MA0047.severity = error +# File name must match type name +dotnet_diagnostic.MA0048.severity = silent +# Type name should not match containing namespace +dotnet_diagnostic.MA0049.severity = silent +# Validate arguments correctly in iterator methods +dotnet_diagnostic.MA0050.severity = error +# Method is too long +dotnet_diagnostic.MA0051.severity = silent +# Replace constant Enum.ToString with nameof +dotnet_diagnostic.MA0052.severity = error +# Make class sealed +dotnet_diagnostic.MA0053.severity = silent +# Embed the caught exception as innerException +dotnet_diagnostic.MA0054.severity = error +# Do not use finalizer +dotnet_diagnostic.MA0055.severity = silent +# Do not call overridable members in constructor +dotnet_diagnostic.MA0056.severity = silent +# Class name should end with 'Attribute' +dotnet_diagnostic.MA0057.severity = silent +# Class name should end with 'Exception' +dotnet_diagnostic.MA0058.severity = error +# Class name should end with 'EventArgs' +dotnet_diagnostic.MA0059.severity = silent +# The value returned by Stream.Read/Stream.ReadAsync is not used +dotnet_diagnostic.MA0060.severity = silent +# Method overrides should not change parameter defaults +dotnet_diagnostic.MA0061.severity = silent +# Non-flags enums should not be marked with "FlagsAttribute" +dotnet_diagnostic.MA0062.severity = silent +# Use Where before OrderBy +dotnet_diagnostic.MA0063.severity = error +# Avoid locking on publicly accessible instance +dotnet_diagnostic.MA0064.severity = silent +# Default ValueType.Equals or HashCode is used for struct's equality +dotnet_diagnostic.MA0065.severity = error +# Hash table unfriendly type is used in a hash table +dotnet_diagnostic.MA0066.severity = error +# Use Guid.Empty +dotnet_diagnostic.MA0067.severity = error +# Invalid parameter name for nullable attribute +dotnet_diagnostic.MA0068.severity = error +# Non-constant static fields should not be visible +dotnet_diagnostic.MA0069.severity = silent +# Obsolete attributes should include explanations +dotnet_diagnostic.MA0070.severity = silent +# Avoid using redundant else +dotnet_diagnostic.MA0071.severity = silent +# Do not throw from a finally block +dotnet_diagnostic.MA0072.severity = error +# Avoid comparison with bool constant +dotnet_diagnostic.MA0073.severity = silent +# Avoid implicit culture-sensitive methods +dotnet_diagnostic.MA0074.severity = silent +# Do not use implicit culture-sensitive ToString +dotnet_diagnostic.MA0075.severity = silent +# Do not use implicit culture-sensitive ToString in interpolated strings +dotnet_diagnostic.MA0076.severity = silent +# A class that provides Equals(T) should implement IEquatable +dotnet_diagnostic.MA0077.severity = error +# Use 'Cast' instead of 'Select' to cast +dotnet_diagnostic.MA0078.severity = silent +# Flow the cancellation token using .WithCancellation() +dotnet_diagnostic.MA0079.severity = error +# Use a cancellation token using .WithCancellation() +dotnet_diagnostic.MA0080.severity = error +# Method overrides should not omit params keyword +dotnet_diagnostic.MA0081.severity = error +# NaN should not be used in comparisons +dotnet_diagnostic.MA0082.severity = error +# ConstructorArgument parameters should exist in constructors +dotnet_diagnostic.MA0083.severity = error +# Local variable should not hide other symbols +dotnet_diagnostic.MA0084.severity = warning +# Anonymous delegates should not be used to unsubscribe from Events +dotnet_diagnostic.MA0085.severity = error +# Do not throw from a finalizer +dotnet_diagnostic.MA0086.severity = error +# Parameters with [DefaultParameterValue] attributes should also be marked [Optional] +dotnet_diagnostic.MA0087.severity = error +# Use [DefaultParameterValue] instead of [DefaultValue] +dotnet_diagnostic.MA0088.severity = error +# Optimize string method usage +dotnet_diagnostic.MA0089.severity = error +# Remove empty else/finally block +dotnet_diagnostic.MA0090.severity = silent +# Sender should be 'this' for instance events +dotnet_diagnostic.MA0091.severity = silent +# Sender should be 'null' for static events +dotnet_diagnostic.MA0092.severity = error +# EventArgs should not be null +dotnet_diagnostic.MA0093.severity = error +# A class that provides CompareTo(T) should implement IComparable +dotnet_diagnostic.MA0094.severity = error +# A class that implements IEquatable should override Equals(object) +dotnet_diagnostic.MA0095.severity = error +# A class that implements IComparable should also implement IEquatable +dotnet_diagnostic.MA0096.severity = silent +# A class that implements IComparable or IComparable should override comparison operators +dotnet_diagnostic.MA0097.severity = silent +# Use indexer instead of LINQ methods +dotnet_diagnostic.MA0098.severity = warning +# Use Explicit enum value instead of 0 +dotnet_diagnostic.MA0099.severity = silent +# Await task before disposing of resources +dotnet_diagnostic.MA0100.severity = error +# String contains an implicit end of line character +dotnet_diagnostic.MA0101.severity = silent +# Make member readonly +dotnet_diagnostic.MA0102.severity = silent +# Use SequenceEqual instead of equality operator +dotnet_diagnostic.MA0103.severity = error +# Do not create a type with a name from the BCL +dotnet_diagnostic.MA0104.severity = silent +# Use the lambda parameters instead of using a closure +dotnet_diagnostic.MA0105.severity = error +# Avoid closure by using an overload with the 'factoryArgument' parameter +dotnet_diagnostic.MA0106.severity = error +# Do not use culture-sensitive object.ToString +dotnet_diagnostic.MA0107.severity = silent +# Remove redundant argument value +dotnet_diagnostic.MA0108.severity = error +# Consider adding an overload with a Span or Memory +dotnet_diagnostic.MA0109.severity = silent +# Use the Regex source generator +dotnet_diagnostic.MA0110.severity = error + +## Menees.Analyzers rules + +# Line is too long +dotnet_diagnostic.MEN002.severity = silent +# Method is too long +dotnet_diagnostic.MEN003.severity = silent +# Property accessor is too long +dotnet_diagnostic.MEN004.severity = silent +# File is too long +dotnet_diagnostic.MEN005.severity = silent +# Use a single return +dotnet_diagnostic.MEN007.severity = silent +# File name should match type +dotnet_diagnostic.MEN008.severity = silent +# Use the preferred exception type +dotnet_diagnostic.MEN009.severity = silent +# Avoid magic numbers +dotnet_diagnostic.MEN010.severity = silent +# Flags should be powers of two +dotnet_diagnostic.MEN012.severity = silent +# Use UTC time +dotnet_diagnostic.MEN013.severity = silent +# Prefer TryGetValue +dotnet_diagnostic.MEN014.severity = warning +# Use Preferred Terms +dotnet_diagnostic.MEN015.severity = silent + +## StyleCop spacing rules + +# Keywords should be spaced correctly +dotnet_diagnostic.SA1000.severity = silent +# Commas should be spaced correctly +dotnet_diagnostic.SA1001.severity = silent +# Semicolons should be spaced correctly +dotnet_diagnostic.SA1002.severity = silent +# Symbols should be spaced correctly +dotnet_diagnostic.SA1003.severity = silent +# Documentation lines should begin with single space +dotnet_diagnostic.SA1004.severity = silent +# Single line comments should begin with single space +dotnet_diagnostic.SA1005.severity = silent +# Preprocessor keywords should not be preceded by space +dotnet_diagnostic.SA1006.severity = error +# Opening parenthesis should be spaced correctly +dotnet_diagnostic.SA1008.severity = silent +# Closing parenthesis should be spaced correctly +dotnet_diagnostic.SA1009.severity = silent +# Opening square brackets should be spaced correctly +dotnet_diagnostic.SA1010.severity = silent +# Closing square brackets should be spaced correctly +dotnet_diagnostic.SA1011.severity = silent +# Opening braces should be spaced correctly +dotnet_diagnostic.SA1012.severity = silent +# Closing braces should be spaced correctly +dotnet_diagnostic.SA1013.severity = silent +# Closing generic bracket should be followed by a space +dotnet_diagnostic.SA1015.severity = silent +# Member access symbols should be spaced correctly +dotnet_diagnostic.SA1019.severity = error +# Negative signs should be spaced correctly +dotnet_diagnostic.SA1021.severity = silent +# Dereference and access of symbols should be spaced correctly +dotnet_diagnostic.SA1023.severity = silent +# Colons should be spaced correctly +dotnet_diagnostic.SA1024.severity = silent +# Code should not contain multiple whitespace in a row +dotnet_diagnostic.SA1025.severity = silent +# Use tabs correctly +dotnet_diagnostic.SA1027.severity = silent +# Code should not contain trailing whitespace +dotnet_diagnostic.SA1028.severity = silent + +## StyleCop readability rules + +# Do not prefix calls with base unless local implementation exists +dotnet_diagnostic.SA1100.severity = error +# Prefix local calls with this +dotnet_diagnostic.SA1101.severity = silent +# Code should not contain multiple statements on one line +dotnet_diagnostic.SA1107.severity = silent +# Block statements should not contain embedded comments +dotnet_diagnostic.SA1108.severity = silent +# Opening parenthesis or bracket should be on declaration line +dotnet_diagnostic.SA1110.severity = silent +# Closing parenthesis should be on line of last parameter +dotnet_diagnostic.SA1111.severity = silent +# Parameter list should follow declaration +dotnet_diagnostic.SA1114.severity = silent +# Split parameters should start on line after declaration +dotnet_diagnostic.SA1116.severity = silent +# Parameters should be on same line or separate lines +dotnet_diagnostic.SA1117.severity = silent +# Parameter should not span multiple lines +dotnet_diagnostic.SA1118.severity = silent +# Comments should contain text +dotnet_diagnostic.SA1120.severity = warning +# Use built-in type alias +dotnet_diagnostic.SA1121.severity = error +# Use string.Empty for empty strings +dotnet_diagnostic.SA1122.severity = silent +# Generic type constraints should be on their own line +dotnet_diagnostic.SA1127.severity = silent +# Put constructor initializers on their own line +dotnet_diagnostic.SA1128.severity = silent +# Do not use default value type constructor +dotnet_diagnostic.SA1129.severity = error +# Use readable conditions +dotnet_diagnostic.SA1131.severity = silent +# Do not combine fields +dotnet_diagnostic.SA1132.severity = silent +# Do not combine attributes +dotnet_diagnostic.SA1133.severity = error +# Attributes should not share line +dotnet_diagnostic.SA1134.severity = silent +# Enum values should be on separate lines +dotnet_diagnostic.SA1136.severity = silent +# Elements should have the same indentation +dotnet_diagnostic.SA1137.severity = error + +## StyleCop ordering rules + +# Elements should appear in the correct order +dotnet_diagnostic.SA1201.severity = silent +# Elements should be ordered by access +dotnet_diagnostic.SA1202.severity = silent +# Constants should appear before fields +dotnet_diagnostic.SA1203.severity = silent +# Static elements should appear before instance elements +dotnet_diagnostic.SA1204.severity = silent +# System using directives should be placed before other using directives +dotnet_diagnostic.SA1208.severity = error +# Using directives should be ordered alphabetically by namespace +dotnet_diagnostic.SA1210.severity = silent +# Using alias directives should be ordered alphabetically by alias name +dotnet_diagnostic.SA1211.severity = error +# Readonly fields should appear before non-readonly fields +dotnet_diagnostic.SA1214.severity = silent + +## StyleCop naming rules + +# Element should begin with upper-case letter +dotnet_diagnostic.SA1300.severity = silent +# Interface names should begin with I +dotnet_diagnostic.SA1302.severity = silent +# Const field names should begin with upper-case letter +dotnet_diagnostic.SA1303.severity = silent +# Non-private readonly fields should begin with upper-case letter +dotnet_diagnostic.SA1304.severity = silent +# Field names should begin with lower-case letter +dotnet_diagnostic.SA1306.severity = silent +# Accessible fields should begin with upper-case letter +dotnet_diagnostic.SA1307.severity = silent +# Variable names should not be prefixed +dotnet_diagnostic.SA1308.severity = silent +# Field names should not begin with underscore +dotnet_diagnostic.SA1309.severity = silent +# Field names should not contain underscore +dotnet_diagnostic.SA1310.severity = silent +# Static readonly fields should begin with upper-case letter +dotnet_diagnostic.SA1311.severity = silent +# Variable names should begin with lower-case letter +dotnet_diagnostic.SA1312.severity = silent +# Parameter names should begin with lower-case letter +dotnet_diagnostic.SA1313.severity = silent + +## StyleCop maintainability rules + +# Statement should not use unnecessary parenthesis # I put this rule in this section because the defaults put it here. +dotnet_diagnostic.SA1119.severity = silent +# Access modifier should be declared +dotnet_diagnostic.SA1400.severity = error +# Fields should be private +dotnet_diagnostic.SA1401.severity = silent +# File may only contain a single type +dotnet_diagnostic.SA1402.severity = silent +# Debug.Assert should provide message text +dotnet_diagnostic.SA1405.severity = silent +# Arithmetic expressions should declare precedence +dotnet_diagnostic.SA1407.severity = silent +# Conditional expressions should declare precedence +dotnet_diagnostic.SA1408.severity = silent +# Use trailing comma in multi-line initializers +dotnet_diagnostic.SA1413.severity = silent + +## StyleCop layout rules + +# Braces for multi-line statements should not share line +dotnet_diagnostic.SA1500.severity = silent +# Statement should not be on a single line +dotnet_diagnostic.SA1501.severity = silent +# Element should not be on a single line +dotnet_diagnostic.SA1502.severity = silent +# Braces should not be omitted +dotnet_diagnostic.SA1503.severity = silent +# Opening braces should not be followed by blank line +dotnet_diagnostic.SA1505.severity = silent +# Element documentation headers should not be followed by blank line +dotnet_diagnostic.SA1506.severity = silent +# Code should not contain multiple blank lines in a row +dotnet_diagnostic.SA1507.severity = silent +# Closing braces should not be preceded by blank line +dotnet_diagnostic.SA1508.severity = silent +# Opening braces should not be preceded by blank line +dotnet_diagnostic.SA1509.severity = silent +# Chained statement blocks should not be preceded by blank line +dotnet_diagnostic.SA1510.severity = silent +# Single-line comments should not be followed by blank line +dotnet_diagnostic.SA1512.severity = silent +# Closing brace should be followed by blank line +dotnet_diagnostic.SA1513.severity = silent +# Element documentation header should be preceded by blank line +dotnet_diagnostic.SA1514.severity = silent +# Single-line comment should be preceded by blank line +dotnet_diagnostic.SA1515.severity = silent +# Elements should be separated by blank line +dotnet_diagnostic.SA1516.severity = silent +# Code should not contain blank lines at start of file +dotnet_diagnostic.SA1517.severity = silent +# Use line endings correctly at end of file +dotnet_diagnostic.SA1518.severity = silent +# Braces should not be omitted from multi-line child statement +dotnet_diagnostic.SA1519.severity = silent +# Use braces consistently +dotnet_diagnostic.SA1520.severity = silent + +## StyleCop documentation rules + +# Element documentation should have summary text +dotnet_diagnostic.SA1606.severity = silent +# Property documentation should have value text +dotnet_diagnostic.SA1610.severity = silent +# Element parameter documentation should match element parameters +dotnet_diagnostic.SA1612.severity = silent +# Element parameter documentation should have text +dotnet_diagnostic.SA1614.severity = silent +# Element return value documentation should have text +dotnet_diagnostic.SA1616.severity = silent +# Generic type parameter documentation should have text +dotnet_diagnostic.SA1622.severity = silent +# Property summary documentation should match accessors +dotnet_diagnostic.SA1623.severity = silent +# Element documentation should not be copied and pasted +dotnet_diagnostic.SA1625.severity = silent +# Documentation text should not be empty +dotnet_diagnostic.SA1627.severity = silent +# Documentation text should end with a period +dotnet_diagnostic.SA1629.severity = silent +# File should have header +dotnet_diagnostic.SA1633.severity = silent +# Constructor summary documentation should begin with standard text +dotnet_diagnostic.SA1642.severity = silent +# File name should match first type name +dotnet_diagnostic.SA1649.severity = silent diff --git a/Common.props b/Common.props index 8e28da209c..e1a284eda2 100644 --- a/Common.props +++ b/Common.props @@ -7,7 +7,6 @@ Recommended Recommended true - $(MSBuildProjectDirectory)/../../Common.ruleset true true prompt diff --git a/Common.ruleset b/Common.ruleset deleted file mode 100644 index c0d05e8bfa..0000000000 --- a/Common.ruleset +++ /dev/null @@ -1,787 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -